Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

PCI: qcom-ep: Move enable/disable resources code to common functions

Remove code duplication by moving the code related to enabling/disabling
the resources (PHY, CLK, Reset) to common functions so that they can be
called from multiple places.

[mani: renamed the functions and reworded the commit message]
Link: https://lore.kernel.org/r/20220502104938.97033-1-manivannan.sadhasivam@linaro.org
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>

authored by

Dmitry Baryshkov and committed by
Lorenzo Pieralisi
bc49681c 571dda6c

+46 -45
+46 -45
drivers/pci/controller/dwc/pcie-qcom-ep.c
··· 223 223 disable_irq(pcie_ep->perst_irq); 224 224 } 225 225 226 - static int qcom_pcie_perst_deassert(struct dw_pcie *pci) 226 + static int qcom_pcie_enable_resources(struct qcom_pcie_ep *pcie_ep) 227 227 { 228 - struct qcom_pcie_ep *pcie_ep = to_pcie_ep(pci); 229 - struct device *dev = pci->dev; 230 - u32 val, offset; 231 228 int ret; 232 229 233 230 ret = clk_bulk_prepare_enable(ARRAY_SIZE(qcom_pcie_ep_clks), ··· 243 246 ret = phy_power_on(pcie_ep->phy); 244 247 if (ret) 245 248 goto err_phy_exit; 249 + 250 + return 0; 251 + 252 + err_phy_exit: 253 + phy_exit(pcie_ep->phy); 254 + err_disable_clk: 255 + clk_bulk_disable_unprepare(ARRAY_SIZE(qcom_pcie_ep_clks), 256 + qcom_pcie_ep_clks); 257 + 258 + return ret; 259 + } 260 + 261 + static void qcom_pcie_disable_resources(struct qcom_pcie_ep *pcie_ep) 262 + { 263 + phy_power_off(pcie_ep->phy); 264 + phy_exit(pcie_ep->phy); 265 + clk_bulk_disable_unprepare(ARRAY_SIZE(qcom_pcie_ep_clks), 266 + qcom_pcie_ep_clks); 267 + } 268 + 269 + static int qcom_pcie_perst_deassert(struct dw_pcie *pci) 270 + { 271 + struct qcom_pcie_ep *pcie_ep = to_pcie_ep(pci); 272 + struct device *dev = pci->dev; 273 + u32 val, offset; 274 + int ret; 275 + 276 + ret = qcom_pcie_enable_resources(pcie_ep); 277 + if (ret) { 278 + dev_err(dev, "Failed to enable resources: %d\n", ret); 279 + return ret; 280 + } 246 281 247 282 /* Assert WAKE# to RC to indicate device is ready */ 248 283 gpiod_set_value_cansleep(pcie_ep->wake, 1); ··· 364 335 ret = dw_pcie_ep_init_complete(&pcie_ep->pci.ep); 365 336 if (ret) { 366 337 dev_err(dev, "Failed to complete initialization: %d\n", ret); 367 - goto err_phy_power_off; 338 + goto err_disable_resources; 368 339 } 369 340 370 341 /* ··· 384 355 385 356 return 0; 386 357 387 - err_phy_power_off: 388 - phy_power_off(pcie_ep->phy); 389 - err_phy_exit: 390 - phy_exit(pcie_ep->phy); 391 - err_disable_clk: 392 - clk_bulk_disable_unprepare(ARRAY_SIZE(qcom_pcie_ep_clks), 393 - qcom_pcie_ep_clks); 358 + err_disable_resources: 359 + qcom_pcie_disable_resources(pcie_ep); 394 360 395 361 return ret; 396 362 } ··· 400 376 return; 401 377 } 402 378 403 - phy_power_off(pcie_ep->phy); 404 - phy_exit(pcie_ep->phy); 405 - clk_bulk_disable_unprepare(ARRAY_SIZE(qcom_pcie_ep_clks), 406 - qcom_pcie_ep_clks); 379 + qcom_pcie_disable_resources(pcie_ep); 407 380 pcie_ep->link_status = QCOM_PCIE_EP_LINK_DISABLED; 408 381 } 409 382 ··· 664 643 if (ret) 665 644 return ret; 666 645 667 - ret = clk_bulk_prepare_enable(ARRAY_SIZE(qcom_pcie_ep_clks), 668 - qcom_pcie_ep_clks); 669 - if (ret) 646 + ret = qcom_pcie_enable_resources(pcie_ep); 647 + if (ret) { 648 + dev_err(dev, "Failed to enable resources: %d\n", ret); 670 649 return ret; 671 - 672 - ret = qcom_pcie_ep_core_reset(pcie_ep); 673 - if (ret) 674 - goto err_disable_clk; 675 - 676 - ret = phy_init(pcie_ep->phy); 677 - if (ret) 678 - goto err_disable_clk; 679 - 680 - /* PHY needs to be powered on for dw_pcie_ep_init() */ 681 - ret = phy_power_on(pcie_ep->phy); 682 - if (ret) 683 - goto err_phy_exit; 650 + } 684 651 685 652 ret = dw_pcie_ep_init(&pcie_ep->pci.ep); 686 653 if (ret) { 687 654 dev_err(dev, "Failed to initialize endpoint: %d\n", ret); 688 - goto err_phy_power_off; 655 + goto err_disable_resources; 689 656 } 690 657 691 658 ret = qcom_pcie_ep_enable_irq_resources(pdev, pcie_ep); 692 659 if (ret) 693 - goto err_phy_power_off; 660 + goto err_disable_resources; 694 661 695 662 return 0; 696 663 697 - err_phy_power_off: 698 - phy_power_off(pcie_ep->phy); 699 - err_phy_exit: 700 - phy_exit(pcie_ep->phy); 701 - err_disable_clk: 702 - clk_bulk_disable_unprepare(ARRAY_SIZE(qcom_pcie_ep_clks), 703 - qcom_pcie_ep_clks); 664 + err_disable_resources: 665 + qcom_pcie_disable_resources(pcie_ep); 704 666 705 667 return ret; 706 668 } ··· 695 691 if (pcie_ep->link_status == QCOM_PCIE_EP_LINK_DISABLED) 696 692 return 0; 697 693 698 - phy_power_off(pcie_ep->phy); 699 - phy_exit(pcie_ep->phy); 700 - clk_bulk_disable_unprepare(ARRAY_SIZE(qcom_pcie_ep_clks), 701 - qcom_pcie_ep_clks); 694 + qcom_pcie_disable_resources(pcie_ep); 702 695 703 696 return 0; 704 697 }