From c54772e75b0d55b8bd5a7857f6131722479f2a63 Mon Sep 17 00:00:00 2001 From: Shawn Lin Date: Thu, 22 Aug 2024 14:11:28 +0800 Subject: [PATCH] PCI: rockchip: dw: Reorder and document steps of rk_pcie_really_probe() Signed-off-by: Shawn Lin Change-Id: Iffc9e7e04cc4329b7d0b71f9cc1dd1ee3080e7b6 --- drivers/pci/controller/dwc/pcie-dw-rockchip.c | 70 +++++++++---------- 1 file changed, 34 insertions(+), 36 deletions(-) diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-rockchip.c index b3d86ed04c6c..3f2beca93626 100644 --- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c +++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c @@ -204,7 +204,7 @@ static void disable_aspm_l1ss(struct rk_pcie *rk_pcie) static inline void disable_aspm_l1ss(struct rk_pcie *rk_pcie) { return; } #endif -static inline void rk_pcie_set_mode(struct rk_pcie *rk_pcie) +static inline void rk_pcie_set_rc_mode(struct rk_pcie *rk_pcie) { if (rk_pcie->supports_clkreq) { /* Application is ready to have reference clock removed */ @@ -1231,6 +1231,7 @@ static int rk_pcie_really_probe(void *p) const struct rk_pcie_of_data *data; u32 val = 0; + /* 1. resource initialization */ match = of_match_device(rk_pcie_of_match, dev); if (!match) { ret = -EINVAL; @@ -1251,19 +1252,21 @@ static int rk_pcie_really_probe(void *p) goto release_driver; } + /* 2. variables assignment */ + rk_pcie->pci = pci; + rk_pcie->msi_vector_num = data ? data->msi_vector_num : 0; pci->dev = dev; pci->ops = &dw_pcie_ops; + platform_set_drvdata(pdev, rk_pcie); - if (data) - rk_pcie->msi_vector_num = data->msi_vector_num; - rk_pcie->pci = pci; - + /* 3. firmware resource */ ret = rk_pcie_resource_get(pdev, rk_pcie); if (ret) { - dev_err(dev, "resource init failed\n"); + dev_err_probe(dev, ret, "resource init failed\n"); goto release_driver; } + /* 4. hardware io settings */ if (!IS_ERR_OR_NULL(rk_pcie->prsnt_gpio)) { if (!gpiod_get_value(rk_pcie->prsnt_gpio)) { dev_info(dev, "device isn't present\n"); @@ -1280,29 +1283,17 @@ static int rk_pcie_really_probe(void *p) ret = clk_bulk_prepare_enable(rk_pcie->clk_cnt, rk_pcie->clks); if (ret) { - dev_err(dev, "clock init failed\n"); + dev_err_probe(dev, ret, "clock init failed\n"); goto disable_vpcie3v3; } ret = rk_pcie_phy_init(rk_pcie); if (ret) { - dev_err(dev, "phy init failed\n"); + dev_err_probe(dev, ret, "phy init failed\n"); goto disable_clk; } - ret = rk_pcie_init_irq_and_wq(rk_pcie, pdev); - if (ret) - goto disable_phy; - - platform_set_drvdata(pdev, rk_pcie); - - dw_pcie_dbi_ro_wr_en(pci); - - rk_pcie_fast_link_setup(rk_pcie); - - /* Set PCIe RC mode */ - rk_pcie_set_mode(rk_pcie); - + /* 5. signal test and capability settings */ if (rk_pcie->is_lpbk) { val = dw_pcie_readl_dbi(pci, PCIE_PORT_LINK_CONTROL); val |= PORT_LINK_LPBK_ENABLE; @@ -1325,6 +1316,17 @@ static int rk_pcie_really_probe(void *p) rk_pcie->have_rasdes = true; } + /* 6. software process */ + ret = rk_pcie_init_irq_and_wq(rk_pcie, pdev); + if (ret) + goto disable_phy; + + dw_pcie_dbi_ro_wr_en(pci); + + rk_pcie_fast_link_setup(rk_pcie); + + rk_pcie_set_rc_mode(rk_pcie); + ret = rk_add_pcie_port(rk_pcie, pdev); if (rk_pcie->is_signal_test == true) @@ -1349,20 +1351,19 @@ static int rk_pcie_really_probe(void *p) ret = rk_pcie_init_dma_trx(rk_pcie); if (ret) { - dev_err(dev, "failed to add dma extension\n"); + dev_err_probe(dev, ret, "failed to add dma extension\n"); goto deinit_irq_and_wq; } - dw_pcie_dbi_ro_wr_dis(pci); - - device_init_wakeup(dev, true); - - /* Enable async system PM for multiports SoC */ - device_enable_async_suspend(dev); - ret = rockchip_pcie_debugfs_init(rk_pcie); if (ret < 0) - dev_err(dev, "failed to setup debugfs: %d\n", ret); + dev_err_probe(dev, ret, "failed to setup debugfs\n"); + + dw_pcie_dbi_ro_wr_dis(pci); + + /* 7. framework misc settings */ + device_init_wakeup(dev, true); + device_enable_async_suspend(dev); /* Enable async system PM for multiports SoC */ return 0; @@ -1390,10 +1391,8 @@ static int rk_pcie_probe(struct platform_device *pdev) struct task_struct *tsk; tsk = kthread_run(rk_pcie_really_probe, pdev, "rk-pcie"); - if (IS_ERR(tsk)) { - dev_err(&pdev->dev, "start rk-pcie thread failed\n"); - return PTR_ERR(tsk); - } + if (IS_ERR(tsk)) + return dev_err_probe(&pdev->dev, PTR_ERR(tsk), "start rk-pcie thread failed\n"); return 0; } @@ -1605,8 +1604,7 @@ static int __maybe_unused rockchip_dw_pcie_resume(struct device *dev) rk_pcie_fast_link_setup(rk_pcie); - /* Set PCIe RC mode */ - rk_pcie_set_mode(rk_pcie); + rk_pcie_set_rc_mode(rk_pcie); dw_pcie_setup_rc(&rk_pcie->pci->pp);