Message ID | 20200524203251.28260-1-kettenis@openbsd.org |
---|---|
State | Accepted |
Commit | dbc5e2860400fb826e5e49bb595c5b7cc2dcc827 |
Headers | show |
Series | pci: Make Rockchip PCIe voltage regulators optional | expand |
On 2020/5/25 ??4:32, Mark Kettenis wrote: > The vpcie*-supply properties are optional and these are absent on > boards like the ROCKPro64 and Firefly RK3399 where the voltage is > supplied by always-on regulators that are already enabled upon > boot. Make these regulators optional and properly check their > presence before attempting to enable them. > > Makes PCIe work on un U-Boot on the boards mentioned above. > > Signed-off-by: Mark Kettenis <kettenis at openbsd.org> Reviewed-by: Kever Yang <kever.yang at rock-chips.com> Thanks, - Kever > --- > drivers/pci/pcie_rockchip.c | 33 ++++++++++++++++++++------------- > 1 file changed, 20 insertions(+), 13 deletions(-) > > diff --git a/drivers/pci/pcie_rockchip.c b/drivers/pci/pcie_rockchip.c > index 82a8396e42..0edc2464a8 100644 > --- a/drivers/pci/pcie_rockchip.c > +++ b/drivers/pci/pcie_rockchip.c > @@ -322,7 +322,7 @@ static int rockchip_pcie_set_vpcie(struct udevice *dev) > struct rockchip_pcie *priv = dev_get_priv(dev); > int ret; > > - if (!IS_ERR(priv->vpcie3v3)) { > + if (priv->vpcie3v3) { > ret = regulator_set_enable(priv->vpcie3v3, true); > if (ret) { > dev_err(dev, "failed to enable vpcie3v3 (ret=%d)\n", > @@ -331,24 +331,31 @@ static int rockchip_pcie_set_vpcie(struct udevice *dev) > } > } > > - ret = regulator_set_enable(priv->vpcie1v8, true); > - if (ret) { > - dev_err(dev, "failed to enable vpcie1v8 (ret=%d)\n", ret); > - goto err_disable_3v3; > + if (priv->vpcie1v8) { > + ret = regulator_set_enable(priv->vpcie1v8, true); > + if (ret) { > + dev_err(dev, "failed to enable vpcie1v8 (ret=%d)\n", > + ret); > + goto err_disable_3v3; > + } > } > > - ret = regulator_set_enable(priv->vpcie0v9, true); > - if (ret) { > - dev_err(dev, "failed to enable vpcie0v9 (ret=%d)\n", ret); > - goto err_disable_1v8; > + if (priv->vpcie0v9) { > + ret = regulator_set_enable(priv->vpcie0v9, true); > + if (ret) { > + dev_err(dev, "failed to enable vpcie0v9 (ret=%d)\n", > + ret); > + goto err_disable_1v8; > + } > } > > return 0; > > err_disable_1v8: > - regulator_set_enable(priv->vpcie1v8, false); > + if (priv->vpcie1v8) > + regulator_set_enable(priv->vpcie1v8, false); > err_disable_3v3: > - if (!IS_ERR(priv->vpcie3v3)) > + if (priv->vpcie3v3) > regulator_set_enable(priv->vpcie3v3, false); > return ret; > } > @@ -424,14 +431,14 @@ static int rockchip_pcie_parse_dt(struct udevice *dev) > > ret = device_get_supply_regulator(dev, "vpcie1v8-supply", > &priv->vpcie1v8); > - if (ret) { > + if (ret && ret != -ENOENT) { > dev_err(dev, "failed to get vpcie1v8 supply (ret=%d)\n", ret); > return ret; > } > > ret = device_get_supply_regulator(dev, "vpcie0v9-supply", > &priv->vpcie0v9); > - if (ret) { > + if (ret && ret != -ENOENT) { > dev_err(dev, "failed to get vpcie0v9 supply (ret=%d)\n", ret); > return ret; > }
W dniu 24.05.2020 o?22:32, Mark Kettenis pisze: > The vpcie*-supply properties are optional and these are absent on > boards like the ROCKPro64 and Firefly RK3399 where the voltage is > supplied by always-on regulators that are already enabled upon > boot. Make these regulators optional and properly check their > presence before attempting to enable them. > > Makes PCIe work on un U-Boot on the boards mentioned above. > > Signed-off-by: Mark Kettenis <kettenis at openbsd.org> Tested-by: Marcin Juszkiewicz <marcin at juszkiewicz.com.pl> Model: Pine64 RockPro64 v2.1 => pci enum => pci Scanning PCI devices on bus 0 BusDevFun VendorId DeviceId Device Class Sub-Class
On Sun, 2020-05-24 at 22:32 +0200, Mark Kettenis wrote: > The vpcie*-supply properties are optional and these are absent on > boards like the ROCKPro64 and Firefly RK3399 where the voltage is > supplied by always-on regulators that are already enabled upon > boot.??Make these regulators optional and properly check their > presence before attempting to enable them. > > Makes PCIe work on un U-Boot on the boards mentioned above. > > Signed-off-by: Mark Kettenis <kettenis at openbsd.org> Tested by: Kurt Miller <kurt at intricatesoftware.com> Model: Pine64 RockPro64 v2.1 => pci Scanning PCI devices on bus 0 BusDevFun??VendorId???DeviceId???Device Class???????Sub-Class
diff --git a/drivers/pci/pcie_rockchip.c b/drivers/pci/pcie_rockchip.c index 82a8396e42..0edc2464a8 100644 --- a/drivers/pci/pcie_rockchip.c +++ b/drivers/pci/pcie_rockchip.c @@ -322,7 +322,7 @@ static int rockchip_pcie_set_vpcie(struct udevice *dev) struct rockchip_pcie *priv = dev_get_priv(dev); int ret; - if (!IS_ERR(priv->vpcie3v3)) { + if (priv->vpcie3v3) { ret = regulator_set_enable(priv->vpcie3v3, true); if (ret) { dev_err(dev, "failed to enable vpcie3v3 (ret=%d)\n", @@ -331,24 +331,31 @@ static int rockchip_pcie_set_vpcie(struct udevice *dev) } } - ret = regulator_set_enable(priv->vpcie1v8, true); - if (ret) { - dev_err(dev, "failed to enable vpcie1v8 (ret=%d)\n", ret); - goto err_disable_3v3; + if (priv->vpcie1v8) { + ret = regulator_set_enable(priv->vpcie1v8, true); + if (ret) { + dev_err(dev, "failed to enable vpcie1v8 (ret=%d)\n", + ret); + goto err_disable_3v3; + } } - ret = regulator_set_enable(priv->vpcie0v9, true); - if (ret) { - dev_err(dev, "failed to enable vpcie0v9 (ret=%d)\n", ret); - goto err_disable_1v8; + if (priv->vpcie0v9) { + ret = regulator_set_enable(priv->vpcie0v9, true); + if (ret) { + dev_err(dev, "failed to enable vpcie0v9 (ret=%d)\n", + ret); + goto err_disable_1v8; + } } return 0; err_disable_1v8: - regulator_set_enable(priv->vpcie1v8, false); + if (priv->vpcie1v8) + regulator_set_enable(priv->vpcie1v8, false); err_disable_3v3: - if (!IS_ERR(priv->vpcie3v3)) + if (priv->vpcie3v3) regulator_set_enable(priv->vpcie3v3, false); return ret; } @@ -424,14 +431,14 @@ static int rockchip_pcie_parse_dt(struct udevice *dev) ret = device_get_supply_regulator(dev, "vpcie1v8-supply", &priv->vpcie1v8); - if (ret) { + if (ret && ret != -ENOENT) { dev_err(dev, "failed to get vpcie1v8 supply (ret=%d)\n", ret); return ret; } ret = device_get_supply_regulator(dev, "vpcie0v9-supply", &priv->vpcie0v9); - if (ret) { + if (ret && ret != -ENOENT) { dev_err(dev, "failed to get vpcie0v9 supply (ret=%d)\n", ret); return ret; }
The vpcie*-supply properties are optional and these are absent on boards like the ROCKPro64 and Firefly RK3399 where the voltage is supplied by always-on regulators that are already enabled upon boot. Make these regulators optional and properly check their presence before attempting to enable them. Makes PCIe work on un U-Boot on the boards mentioned above. Signed-off-by: Mark Kettenis <kettenis at openbsd.org> --- drivers/pci/pcie_rockchip.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-)