Re: [PATCH v8 10/16] reset: Add a reset controller driver for the Lantiq XWAY based SoCs
From: Philipp Zabel <hidden>
Date: 2017-08-03 08:33:42
Also in:
linux-mips, linux-spi, linux-watchdog
Hi Hauke, On Thu, 2017-08-03 at 00:57 +0200, Hauke Mehrtens wrote:
From: Martin Blumenstingl <martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> 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-5/S+JYg5SzeELgA04lAiVw@public.gmane.org> Cc: Philipp Zabel <redacted> Reviewed-by: Andy Shevchenko <redacted> --- .../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
[...]
quoted hunk
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 <redacted> regards Philipp -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html