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. > + } > + > + 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 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html