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

Configure Feed

Select the types of activity you want to include in your feed.

phy: let phy_provider_register be the last step in registering PHY

Registering phy_provider before creating the PHY can result in PHY
callbacks being invoked which will lead to aborts. In order to avoid this
invoke phy_provider_register after phy_create and phy_set_drvdata.

Reported-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Acked-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Kishon Vijay Abraham I and committed by
Greg Kroah-Hartman
64fe1891 b51fbf9f

+24 -24
+4 -4
drivers/phy/phy-exynos-dp-video.c
··· 76 76 if (IS_ERR(state->regs)) 77 77 return PTR_ERR(state->regs); 78 78 79 - phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate); 80 - if (IS_ERR(phy_provider)) 81 - return PTR_ERR(phy_provider); 82 - 83 79 phy = devm_phy_create(dev, &exynos_dp_video_phy_ops, NULL); 84 80 if (IS_ERR(phy)) { 85 81 dev_err(dev, "failed to create Display Port PHY\n"); 86 82 return PTR_ERR(phy); 87 83 } 88 84 phy_set_drvdata(phy, state); 85 + 86 + phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate); 87 + if (IS_ERR(phy_provider)) 88 + return PTR_ERR(phy_provider); 89 89 90 90 return 0; 91 91 }
+5 -5
drivers/phy/phy-exynos-mipi-video.c
··· 134 134 dev_set_drvdata(dev, state); 135 135 spin_lock_init(&state->slock); 136 136 137 - phy_provider = devm_of_phy_provider_register(dev, 138 - exynos_mipi_video_phy_xlate); 139 - if (IS_ERR(phy_provider)) 140 - return PTR_ERR(phy_provider); 141 - 142 137 for (i = 0; i < EXYNOS_MIPI_PHYS_NUM; i++) { 143 138 struct phy *phy = devm_phy_create(dev, 144 139 &exynos_mipi_video_phy_ops, NULL); ··· 146 151 state->phys[i].index = i; 147 152 phy_set_drvdata(phy, &state->phys[i]); 148 153 } 154 + 155 + phy_provider = devm_of_phy_provider_register(dev, 156 + exynos_mipi_video_phy_xlate); 157 + if (IS_ERR(phy_provider)) 158 + return PTR_ERR(phy_provider); 149 159 150 160 return 0; 151 161 }
+5 -5
drivers/phy/phy-mvebu-sata.c
··· 99 99 if (IS_ERR(priv->clk)) 100 100 return PTR_ERR(priv->clk); 101 101 102 - phy_provider = devm_of_phy_provider_register(&pdev->dev, 103 - of_phy_simple_xlate); 104 - if (IS_ERR(phy_provider)) 105 - return PTR_ERR(phy_provider); 106 - 107 102 phy = devm_phy_create(&pdev->dev, &phy_mvebu_sata_ops, NULL); 108 103 if (IS_ERR(phy)) 109 104 return PTR_ERR(phy); 110 105 111 106 phy_set_drvdata(phy, priv); 107 + 108 + phy_provider = devm_of_phy_provider_register(&pdev->dev, 109 + of_phy_simple_xlate); 110 + if (IS_ERR(phy_provider)) 111 + return PTR_ERR(phy_provider); 112 112 113 113 /* The boot loader may of left it on. Turn it off. */ 114 114 phy_mvebu_sata_power_off(phy);
+5 -5
drivers/phy/phy-omap-usb2.c
··· 177 177 phy->phy.otg = otg; 178 178 phy->phy.type = USB_PHY_TYPE_USB2; 179 179 180 - phy_provider = devm_of_phy_provider_register(phy->dev, 181 - of_phy_simple_xlate); 182 - if (IS_ERR(phy_provider)) 183 - return PTR_ERR(phy_provider); 184 - 185 180 control_node = of_parse_phandle(node, "ctrl-module", 0); 186 181 if (!control_node) { 187 182 dev_err(&pdev->dev, "Failed to get control device phandle\n"); ··· 208 213 return PTR_ERR(generic_phy); 209 214 210 215 phy_set_drvdata(generic_phy, phy); 216 + 217 + phy_provider = devm_of_phy_provider_register(phy->dev, 218 + of_phy_simple_xlate); 219 + if (IS_ERR(phy_provider)) 220 + return PTR_ERR(phy_provider); 211 221 212 222 phy->wkupclk = devm_clk_get(phy->dev, "usb_phy_cm_clk32k"); 213 223 if (IS_ERR(phy->wkupclk)) {
+5 -5
drivers/phy/phy-twl4030-usb.c
··· 695 695 otg->set_host = twl4030_set_host; 696 696 otg->set_peripheral = twl4030_set_peripheral; 697 697 698 - phy_provider = devm_of_phy_provider_register(twl->dev, 699 - of_phy_simple_xlate); 700 - if (IS_ERR(phy_provider)) 701 - return PTR_ERR(phy_provider); 702 - 703 698 phy = devm_phy_create(twl->dev, &ops, init_data); 704 699 if (IS_ERR(phy)) { 705 700 dev_dbg(&pdev->dev, "Failed to create PHY\n"); ··· 702 707 } 703 708 704 709 phy_set_drvdata(phy, twl); 710 + 711 + phy_provider = devm_of_phy_provider_register(twl->dev, 712 + of_phy_simple_xlate); 713 + if (IS_ERR(phy_provider)) 714 + return PTR_ERR(phy_provider); 705 715 706 716 /* init spinlock for workqueue */ 707 717 spin_lock_init(&twl->lock);