@@ -86,7 +86,8 @@ config RESET_INTEL_GW
bool "Intel Reset Controller Driver"
depends on X86 || LANTIQ || COMPILE_TEST
depends on OF && HAS_IOMEM
- select REGMAP_MMIO
+ select REGMAP_MMIO if X86
+ select MFD_SYSCON if LANTIQ
help
This enables the reset controller driver for Intel Gateway SoCs.
Say Y to control the reset signals provided by reset controller.
@@ -5,6 +5,7 @@
*/
#include <linux/bitfield.h>
+#include <linux/mfd/syscon.h>
#include <linux/init.h>
#include <linux/of_device.h>
#include <linux/platform_device.h>
@@ -170,7 +171,6 @@ static int intel_reset_probe(struct platform_device *pdev)
struct device_node *np = pdev->dev.of_node;
struct device *dev = &pdev->dev;
struct intel_reset_data *data;
- void __iomem *base;
u32 rb_id[3];
int ret;
@@ -182,15 +182,24 @@ static int intel_reset_probe(struct platform_device *pdev)
if (!data->soc_data)
return -ENODEV;
- base = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(base))
- return PTR_ERR(base);
-
- data->regmap = devm_regmap_init_mmio(dev, base,
- &intel_rcu_regmap_config);
- if (IS_ERR(data->regmap)) {
- dev_err(dev, "regmap initialization failed\n");
- return PTR_ERR(data->regmap);
+ if (data->soc_data->legacy) {
+ data->regmap = syscon_node_to_regmap(dev->of_node);
+ if (IS_ERR(data->regmap))
+ return dev_err_probe(dev, PTR_ERR(data->regmap),
+ "Failed to get regmap from syscon node\n");
+ } else {
+ void __iomem *base;
+
+ base = devm_platform_ioremap_resource(pdev, 0);
+ if (IS_ERR(base))
+ return PTR_ERR(base);
+
+ data->regmap = devm_regmap_init_mmio(dev, base,
+ &intel_rcu_regmap_config);
+ if (IS_ERR(data->regmap)) {
+ dev_err(dev, "regmap initialization failed\n");
+ return PTR_ERR(data->regmap);
+ }
}
ret = device_property_read_u32_array(dev, "intel,global-reset", rb_id,
Older Lantiq (called "legacy") SoCs the RCU registers have more than just the reset controller registers. It additionally contains boot media selection information, up to two USB2 PHYs and configuration for various other peripherals (such as the PCIe PHY). use syscon_node_to_regmap() to obtain the regmap on these SoCs. Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> --- drivers/reset/Kconfig | 3 ++- drivers/reset/reset-intel-gw.c | 29 +++++++++++++++++++---------- 2 files changed, 21 insertions(+), 11 deletions(-)