summaryrefslogtreecommitdiff
path: root/drivers/pci/pcie_rockchip.c
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@openbsd.org>2020-05-24 23:32:51 +0300
committerKever Yang <kever.yang@rock-chips.com>2020-05-29 12:59:49 +0300
commitdbc5e2860400fb826e5e49bb595c5b7cc2dcc827 (patch)
tree83b49e6bb02c703e495602d60cfb7ce846900534 /drivers/pci/pcie_rockchip.c
parent7e01363df32c7fafde97670fff41be9e615bb3be (diff)
downloadu-boot-dbc5e2860400fb826e5e49bb595c5b7cc2dcc827.tar.xz
pci: Make Rockchip PCIe voltage regulators optional
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@openbsd.org> Reviewed-by: Kever Yang <kever.yang@rock-chips.com> Tested-by: Marcin Juszkiewicz <marcin@juszkiewicz.com.pl>
Diffstat (limited to 'drivers/pci/pcie_rockchip.c')
-rw-r--r--drivers/pci/pcie_rockchip.c33
1 files 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;
}