From: Faiz Abbas <faiz_ab...@ti.com>

Serdes lanes might be shared between multiple cores in some usecases
and its not possible to lock PLLs for both the lanes independently
by the two cores. This requires a bootloader to configure both the
lanes at early boot time.

To handle this case, skip all configuration if any of the lanes has
already been enabled.

Signed-off-by: Faiz Abbas <faiz_ab...@ti.com>
Signed-off-by: Kishon Vijay Abraham I <kis...@ti.com>
---
 drivers/phy/ti/phy-j721e-wiz.c | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/drivers/phy/ti/phy-j721e-wiz.c b/drivers/phy/ti/phy-j721e-wiz.c
index 659597645201..95905e5c4f3d 100644
--- a/drivers/phy/ti/phy-j721e-wiz.c
+++ b/drivers/phy/ti/phy-j721e-wiz.c
@@ -1132,13 +1132,14 @@ static int wiz_probe(struct platform_device *pdev)
        struct device *dev = &pdev->dev;
        struct device_node *node = dev->of_node;
        struct platform_device *serdes_pdev;
+       bool already_configured = false;
        struct device_node *child_node;
        struct regmap *regmap;
        struct resource res;
        void __iomem *base;
        struct wiz *wiz;
+       int ret, val, i;
        u32 num_lanes;
-       int ret;
 
        wiz = devm_kzalloc(dev, sizeof(*wiz), GFP_KERNEL);
        if (!wiz)
@@ -1266,10 +1267,20 @@ static int wiz_probe(struct platform_device *pdev)
                goto err_get_sync;
        }
 
-       ret = wiz_init(wiz);
-       if (ret) {
-               dev_err(dev, "WIZ initialization failed\n");
-               goto err_wiz_init;
+       for (i = 0; i < wiz->num_lanes; i++) {
+               regmap_field_read(wiz->p_enable[i], &val);
+               if (val & (P_ENABLE | P_ENABLE_FORCE)) {
+                       already_configured = true;
+                       break;
+               }
+       }
+
+       if (!already_configured) {
+               ret = wiz_init(wiz);
+               if (ret) {
+                       dev_err(dev, "WIZ initialization failed\n");
+                       goto err_wiz_init;
+               }
        }
 
        serdes_pdev = of_platform_device_create(child_node, NULL, dev);
-- 
2.17.1

Reply via email to