PCI: imx6: Simplify PHY handling by using IMX6_PCIE_FLAG_HAS_PHYDRV
authorFrank Li <Frank.Li@nxp.com>
Tue, 20 Feb 2024 16:19:12 +0000 (11:19 -0500)
committerLorenzo Pieralisi <lpieralisi@kernel.org>
Wed, 21 Feb 2024 10:22:46 +0000 (11:22 +0100)
Since some i.MX platforms make use of a separate PHY driver, use
IMX6_PCIE_FLAG_HAS_PHYDRV flag to identify them and get the reference to
PHY from DT to simplify the code.

Link: https://lore.kernel.org/r/20240220161924.3871774-3-Frank.Li@nxp.com
Signed-off-by: Frank Li <Frank.Li@nxp.com>
Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
drivers/pci/controller/dwc/pci-imx6.c

index f820823c5f69600e01d622dd1481810611330fee..c60eaeeadd382a53486eec416bb8614e6fe495d7 100644 (file)
@@ -60,6 +60,9 @@ enum imx6_pcie_variants {
 #define IMX6_PCIE_FLAG_IMX6_PHY                        BIT(0)
 #define IMX6_PCIE_FLAG_IMX6_SPEED_CHANGE       BIT(1)
 #define IMX6_PCIE_FLAG_SUPPORTS_SUSPEND                BIT(2)
+#define IMX6_PCIE_FLAG_HAS_PHYDRV                      BIT(3)
+
+#define imx6_check_flag(pci, val)     (pci->drvdata->flags & val)
 
 #define IMX6_PCIE_MAX_CLKS       6
 
@@ -1277,6 +1280,13 @@ static int imx6_pcie_probe(struct platform_device *pdev)
        if (ret)
                return ret;
 
+       if (imx6_check_flag(imx6_pcie, IMX6_PCIE_FLAG_HAS_PHYDRV)) {
+               imx6_pcie->phy = devm_phy_get(dev, "pcie-phy");
+               if (IS_ERR(imx6_pcie->phy))
+                       return dev_err_probe(dev, PTR_ERR(imx6_pcie->phy),
+                                            "failed to get pcie phy\n");
+       }
+
        switch (imx6_pcie->drvdata->variant) {
        case IMX8MQ:
        case IMX8MQ_EP:
@@ -1308,11 +1318,6 @@ static int imx6_pcie_probe(struct platform_device *pdev)
                        return dev_err_probe(dev, PTR_ERR(imx6_pcie->apps_reset),
                                             "failed to get pcie apps reset control\n");
 
-               imx6_pcie->phy = devm_phy_get(dev, "pcie-phy");
-               if (IS_ERR(imx6_pcie->phy))
-                       return dev_err_probe(dev, PTR_ERR(imx6_pcie->phy),
-                                            "failed to get pcie phy\n");
-
                break;
        default:
                break;
@@ -1456,14 +1461,17 @@ static const struct imx6_pcie_drvdata drvdata[] = {
        },
        [IMX8MM] = {
                .variant = IMX8MM,
-               .flags = IMX6_PCIE_FLAG_SUPPORTS_SUSPEND,
+               .flags = IMX6_PCIE_FLAG_SUPPORTS_SUSPEND |
+                        IMX6_PCIE_FLAG_HAS_PHYDRV |
+                        IMX6_PCIE_FLAG_HAS_APP_RESET,
                .gpr = "fsl,imx8mm-iomuxc-gpr",
                .clk_names = imx8mm_clks,
                .clks_cnt = ARRAY_SIZE(imx8mm_clks),
        },
        [IMX8MP] = {
                .variant = IMX8MP,
-               .flags = IMX6_PCIE_FLAG_SUPPORTS_SUSPEND,
+               .flags = IMX6_PCIE_FLAG_SUPPORTS_SUSPEND |
+                        IMX6_PCIE_FLAG_HAS_PHYDRV,
                .gpr = "fsl,imx8mp-iomuxc-gpr",
                .clk_names = imx8mm_clks,
                .clks_cnt = ARRAY_SIZE(imx8mm_clks),
@@ -1477,6 +1485,7 @@ static const struct imx6_pcie_drvdata drvdata[] = {
        },
        [IMX8MM_EP] = {
                .variant = IMX8MM_EP,
+               .flags = IMX6_PCIE_FLAG_HAS_PHYDRV,
                .mode = DW_PCIE_EP_TYPE,
                .gpr = "fsl,imx8mm-iomuxc-gpr",
                .clk_names = imx8mm_clks,
@@ -1484,6 +1493,7 @@ static const struct imx6_pcie_drvdata drvdata[] = {
        },
        [IMX8MP_EP] = {
                .variant = IMX8MP_EP,
+               .flags = IMX6_PCIE_FLAG_HAS_PHYDRV,
                .mode = DW_PCIE_EP_TYPE,
                .gpr = "fsl,imx8mp-iomuxc-gpr",
                .clk_names = imx8mm_clks,