| From f7eb147d306ad2efae6837e20d2944f03be42eb4 Mon Sep 17 00:00:00 2001 |
| From: Kishon Vijay Abraham I <kishon@ti.com> |
| Date: Fri, 19 Mar 2021 18:11:17 +0530 |
| Subject: phy: ti: j721e-wiz: Invoke wiz_init() before of_platform_device_create() |
| |
| From: Kishon Vijay Abraham I <kishon@ti.com> |
| |
| commit f7eb147d306ad2efae6837e20d2944f03be42eb4 upstream. |
| |
| Invoke wiz_init() before configuring anything else in Sierra/Torrent |
| (invoked as part of of_platform_device_create()). wiz_init() resets the |
| SERDES device and any configuration done in the probe() of |
| Sierra/Torrent will be lost. In order to prevent SERDES configuration |
| from getting reset, invoke wiz_init() immediately before invoking |
| of_platform_device_create(). |
| |
| Fixes: 091876cc355d ("phy: ti: j721e-wiz: Add support for WIZ module present in TI J721E SoC") |
| Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com> |
| Reviewed-by: Swapnil Jakhade <sjakhade@cadence.com> |
| Cc: <stable@vger.kernel.org> # v5.10 |
| Link: https://lore.kernel.org/r/20210319124128.13308-3-kishon@ti.com |
| Signed-off-by: Vinod Koul <vkoul@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/phy/ti/phy-j721e-wiz.c | 17 +++++++---------- |
| 1 file changed, 7 insertions(+), 10 deletions(-) |
| |
| --- a/drivers/phy/ti/phy-j721e-wiz.c |
| +++ b/drivers/phy/ti/phy-j721e-wiz.c |
| @@ -947,27 +947,24 @@ static int wiz_probe(struct platform_dev |
| goto err_get_sync; |
| } |
| |
| + 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); |
| if (!serdes_pdev) { |
| dev_WARN(dev, "Unable to create SERDES platform device\n"); |
| ret = -ENOMEM; |
| - goto err_pdev_create; |
| - } |
| - wiz->serdes_pdev = serdes_pdev; |
| - |
| - ret = wiz_init(wiz); |
| - if (ret) { |
| - dev_err(dev, "WIZ initialization failed\n"); |
| goto err_wiz_init; |
| } |
| + wiz->serdes_pdev = serdes_pdev; |
| |
| of_node_put(child_node); |
| return 0; |
| |
| err_wiz_init: |
| - of_platform_device_destroy(&serdes_pdev->dev, NULL); |
| - |
| -err_pdev_create: |
| wiz_clock_cleanup(wiz, node); |
| |
| err_get_sync: |