On 08/03/2017 10:33 AM, Philipp Zabel wrote: > Hi Hauke, > > On Thu, 2017-08-03 at 00:57 +0200, Hauke Mehrtens wrote: >> From: Martin Blumenstingl <martin.blumenstingl@xxxxxxxxxxxxxx> >> >> The reset controllers (on xRX200 and newer SoCs have two of them) are >> provided by the RCU module. This was initially implemented as a simple >> reset controller. However, the RCU module provides more functionality >> (ethernet GPHYs, USB PHY, etc.), which makes it a MFD device. >> The old reset controller driver implementation from >> arch/mips/lantiq/xway/reset.c did not honor this fact. >> >> For some devices the request and the status bits are different. >> >> Signed-off-by: Hauke Mehrtens <hauke@xxxxxxxxxx> >> Cc: Philipp Zabel <p.zabel@xxxxxxxxxxxxxx> >> Reviewed-by: Andy Shevchenko <andy.shevchenko@xxxxxxxxx> >> --- >> .../devicetree/bindings/reset/lantiq,reset.txt | 30 +++ >> drivers/reset/Kconfig | 6 + >> drivers/reset/Makefile | 1 + >> drivers/reset/reset-lantiq.c | 224 +++++++++++++++++++++ >> 4 files changed, 261 insertions(+) >> create mode 100644 Documentation/devicetree/bindings/reset/lantiq,reset.txt >> create mode 100644 drivers/reset/reset-lantiq.c >> > [...] >> diff --git a/drivers/reset/reset-lantiq.c b/drivers/reset/reset-lantiq.c >> new file mode 100644 >> index 000000000000..b84c45e7e6b8 >> --- /dev/null >> +++ b/drivers/reset/reset-lantiq.c >> @@ -0,0 +1,224 @@ > [...] >> +static int lantiq_rcu_reset_of_probe(struct platform_device *pdev, >> + struct lantiq_rcu_reset_priv *priv) >> +{ >> + struct device *dev = &pdev->dev; >> + struct resource *res; >> + struct resource res_parent; >> + int ret; >> + >> + priv->regmap = syscon_node_to_regmap(dev->of_node->parent); >> + if (IS_ERR(priv->regmap)) { >> + dev_err(&pdev->dev, "Failed to lookup RCU regmap\n"); >> + return PTR_ERR(priv->regmap); >> + } >> + >> + ret = of_address_to_resource(dev->of_node->parent, 0, &res_parent); >> + if (ret) >> + return ret; >> + >> + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); >> + if (!res) { >> + dev_err(&pdev->dev, "Failed to get RCU reset offset\n"); >> + return ret; > > This should return -EINVAL instead of 0. I will fix this in the next round, I am still waiting for Rob's feedback. The same problem exists in the USB PHY driver, I will also fix it there. > >> + } >> + >> + if (res->start < res_parent.start) >> + return -ENOENT; >> + priv->reset_offset = res->start - res_parent.start; >> + >> + res = platform_get_resource(pdev, IORESOURCE_MEM, 1); >> + if (!res) { >> + dev_err(&pdev->dev, "Failed to get RCU status offset\n"); >> + return ret; > > Same here. > > With this fixed, > Acked-by: Philipp Zabel <p.zabel@xxxxxxxxxxxxxx> > > regards > Philipp > Hauke