Message ID | 20240208161700.268570-3-peter.griffin@linaro.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Add regmap support to exynos-pmu for protected PMU regs | expand |
On 2/8/24 08:17, Peter Griffin wrote: > Obtain the PMU regmap using the new API added to exynos-pmu driver rather > than syscon_regmap_lookup_by_phandle(). As this driver no longer depends > on mfd syscon remove that header and Kconfig dependency. > > Reviewed-by: Sam Protsenko <semen.protsenko@linaro.org> > Signed-off-by: Peter Griffin <peter.griffin@linaro.org> Acked-by: Guenter Roeck <linux@roeck-us.net> > --- > drivers/watchdog/Kconfig | 1 - > drivers/watchdog/s3c2410_wdt.c | 8 ++++---- > 2 files changed, 4 insertions(+), 5 deletions(-) > > diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig > index 7d22051b15a2..d78fe7137799 100644 > --- a/drivers/watchdog/Kconfig > +++ b/drivers/watchdog/Kconfig > @@ -512,7 +512,6 @@ config S3C2410_WATCHDOG > tristate "S3C6410/S5Pv210/Exynos Watchdog" > depends on ARCH_S3C64XX || ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST > select WATCHDOG_CORE > - select MFD_SYSCON if ARCH_EXYNOS > help > Watchdog timer block in the Samsung S3C64xx, S5Pv210 and Exynos > SoCs. This will reboot the system when the timer expires with > diff --git a/drivers/watchdog/s3c2410_wdt.c b/drivers/watchdog/s3c2410_wdt.c > index 349d30462c8c..686cf544d0ae 100644 > --- a/drivers/watchdog/s3c2410_wdt.c > +++ b/drivers/watchdog/s3c2410_wdt.c > @@ -24,9 +24,9 @@ > #include <linux/slab.h> > #include <linux/err.h> > #include <linux/of.h> > -#include <linux/mfd/syscon.h> > #include <linux/regmap.h> > #include <linux/delay.h> > +#include <linux/soc/samsung/exynos-pmu.h> > > #define S3C2410_WTCON 0x00 > #define S3C2410_WTDAT 0x04 > @@ -699,11 +699,11 @@ static int s3c2410wdt_probe(struct platform_device *pdev) > return ret; > > if (wdt->drv_data->quirks & QUIRKS_HAVE_PMUREG) { > - wdt->pmureg = syscon_regmap_lookup_by_phandle(dev->of_node, > - "samsung,syscon-phandle"); > + wdt->pmureg = exynos_get_pmu_regmap_by_phandle(dev->of_node, > + "samsung,syscon-phandle"); > if (IS_ERR(wdt->pmureg)) > return dev_err_probe(dev, PTR_ERR(wdt->pmureg), > - "syscon regmap lookup failed.\n"); > + "PMU regmap lookup failed.\n"); > } > > wdt_irq = platform_get_irq(pdev, 0);
On Thu, 8 Feb 2024 at 16:21, Peter Griffin <peter.griffin@linaro.org> wrote: > > Obtain the PMU regmap using the new API added to exynos-pmu driver rather > than syscon_regmap_lookup_by_phandle(). As this driver no longer depends > on mfd syscon remove that header and Kconfig dependency. > > Reviewed-by: Sam Protsenko <semen.protsenko@linaro.org> > Signed-off-by: Peter Griffin <peter.griffin@linaro.org> Tested-by: Alexey Klimov <alexey.klimov@linaro.org> Tested on odroid xu3 (exynos5422). Watchdog works as expected and can reset the system. > --- > drivers/watchdog/Kconfig | 1 - > drivers/watchdog/s3c2410_wdt.c | 8 ++++---- > 2 files changed, 4 insertions(+), 5 deletions(-) > > diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig > index 7d22051b15a2..d78fe7137799 100644 > --- a/drivers/watchdog/Kconfig > +++ b/drivers/watchdog/Kconfig > @@ -512,7 +512,6 @@ config S3C2410_WATCHDOG > tristate "S3C6410/S5Pv210/Exynos Watchdog" > depends on ARCH_S3C64XX || ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST > select WATCHDOG_CORE > - select MFD_SYSCON if ARCH_EXYNOS > help > Watchdog timer block in the Samsung S3C64xx, S5Pv210 and Exynos > SoCs. This will reboot the system when the timer expires with > diff --git a/drivers/watchdog/s3c2410_wdt.c b/drivers/watchdog/s3c2410_wdt.c > index 349d30462c8c..686cf544d0ae 100644 > --- a/drivers/watchdog/s3c2410_wdt.c > +++ b/drivers/watchdog/s3c2410_wdt.c > @@ -24,9 +24,9 @@ > #include <linux/slab.h> > #include <linux/err.h> > #include <linux/of.h> > -#include <linux/mfd/syscon.h> > #include <linux/regmap.h> > #include <linux/delay.h> > +#include <linux/soc/samsung/exynos-pmu.h> > > #define S3C2410_WTCON 0x00 > #define S3C2410_WTDAT 0x04 > @@ -699,11 +699,11 @@ static int s3c2410wdt_probe(struct platform_device *pdev) > return ret; > > if (wdt->drv_data->quirks & QUIRKS_HAVE_PMUREG) { > - wdt->pmureg = syscon_regmap_lookup_by_phandle(dev->of_node, > - "samsung,syscon-phandle"); > + wdt->pmureg = exynos_get_pmu_regmap_by_phandle(dev->of_node, > + "samsung,syscon-phandle"); > if (IS_ERR(wdt->pmureg)) > return dev_err_probe(dev, PTR_ERR(wdt->pmureg), > - "syscon regmap lookup failed.\n"); > + "PMU regmap lookup failed.\n"); > } > > wdt_irq = platform_get_irq(pdev, 0); > -- > 2.43.0.594.gd9cf4e227d-goog >
On Thu, Feb 8, 2024 at 10:21 AM Peter Griffin <peter.griffin@linaro.org> wrote: > > Obtain the PMU regmap using the new API added to exynos-pmu driver rather > than syscon_regmap_lookup_by_phandle(). As this driver no longer depends > on mfd syscon remove that header and Kconfig dependency. > > Reviewed-by: Sam Protsenko <semen.protsenko@linaro.org> > Signed-off-by: Peter Griffin <peter.griffin@linaro.org> > --- Tested-by: Sam Protsenko <semen.protsenko@linaro.org> Tested on my E850-96 board (Exynos850 chip) with Debian rootfs. Test procedure: 1. Added this to /chosen node in dts: bootargs = "s3c2410_wdt.tmr_atboot=1 s3c2410_wdt.nowayout=1 s3c2410_wdt.soft_noboot=0"; 2. Check if watchdogs are active: # dmesg | grep watchdog [ 1.488149] s3c2410-wdt 10050000.watchdog: starting watchdog timer [ 1.489003] s3c2410-wdt 10050000.watchdog: watchdog active, reset enabled, irq disabled [ 1.496928] s3c2410-wdt 10060000.watchdog: starting watchdog timer [ 1.502984] s3c2410-wdt 10060000.watchdog: watchdog active, reset enabled, irq disabled 3. Generate a panic to cause wdt reset: # echo c > /proc/sysrq-trigger In 15 seconds (wdt timeout) reboot happens, and bootloader shows this message for the reboot reason: Watchdog or Warm Reset Detected That proves regmap works fine with this patch. Otherwise reboot wouldn't happen. > drivers/watchdog/Kconfig | 1 - > drivers/watchdog/s3c2410_wdt.c | 8 ++++---- > 2 files changed, 4 insertions(+), 5 deletions(-) > > diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig > index 7d22051b15a2..d78fe7137799 100644 > --- a/drivers/watchdog/Kconfig > +++ b/drivers/watchdog/Kconfig > @@ -512,7 +512,6 @@ config S3C2410_WATCHDOG > tristate "S3C6410/S5Pv210/Exynos Watchdog" > depends on ARCH_S3C64XX || ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST > select WATCHDOG_CORE > - select MFD_SYSCON if ARCH_EXYNOS > help > Watchdog timer block in the Samsung S3C64xx, S5Pv210 and Exynos > SoCs. This will reboot the system when the timer expires with > diff --git a/drivers/watchdog/s3c2410_wdt.c b/drivers/watchdog/s3c2410_wdt.c > index 349d30462c8c..686cf544d0ae 100644 > --- a/drivers/watchdog/s3c2410_wdt.c > +++ b/drivers/watchdog/s3c2410_wdt.c > @@ -24,9 +24,9 @@ > #include <linux/slab.h> > #include <linux/err.h> > #include <linux/of.h> > -#include <linux/mfd/syscon.h> > #include <linux/regmap.h> > #include <linux/delay.h> > +#include <linux/soc/samsung/exynos-pmu.h> > > #define S3C2410_WTCON 0x00 > #define S3C2410_WTDAT 0x04 > @@ -699,11 +699,11 @@ static int s3c2410wdt_probe(struct platform_device *pdev) > return ret; > > if (wdt->drv_data->quirks & QUIRKS_HAVE_PMUREG) { > - wdt->pmureg = syscon_regmap_lookup_by_phandle(dev->of_node, > - "samsung,syscon-phandle"); > + wdt->pmureg = exynos_get_pmu_regmap_by_phandle(dev->of_node, > + "samsung,syscon-phandle"); > if (IS_ERR(wdt->pmureg)) > return dev_err_probe(dev, PTR_ERR(wdt->pmureg), > - "syscon regmap lookup failed.\n"); > + "PMU regmap lookup failed.\n"); > } > > wdt_irq = platform_get_irq(pdev, 0); > -- > 2.43.0.594.gd9cf4e227d-goog >
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index 7d22051b15a2..d78fe7137799 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig @@ -512,7 +512,6 @@ config S3C2410_WATCHDOG tristate "S3C6410/S5Pv210/Exynos Watchdog" depends on ARCH_S3C64XX || ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST select WATCHDOG_CORE - select MFD_SYSCON if ARCH_EXYNOS help Watchdog timer block in the Samsung S3C64xx, S5Pv210 and Exynos SoCs. This will reboot the system when the timer expires with diff --git a/drivers/watchdog/s3c2410_wdt.c b/drivers/watchdog/s3c2410_wdt.c index 349d30462c8c..686cf544d0ae 100644 --- a/drivers/watchdog/s3c2410_wdt.c +++ b/drivers/watchdog/s3c2410_wdt.c @@ -24,9 +24,9 @@ #include <linux/slab.h> #include <linux/err.h> #include <linux/of.h> -#include <linux/mfd/syscon.h> #include <linux/regmap.h> #include <linux/delay.h> +#include <linux/soc/samsung/exynos-pmu.h> #define S3C2410_WTCON 0x00 #define S3C2410_WTDAT 0x04 @@ -699,11 +699,11 @@ static int s3c2410wdt_probe(struct platform_device *pdev) return ret; if (wdt->drv_data->quirks & QUIRKS_HAVE_PMUREG) { - wdt->pmureg = syscon_regmap_lookup_by_phandle(dev->of_node, - "samsung,syscon-phandle"); + wdt->pmureg = exynos_get_pmu_regmap_by_phandle(dev->of_node, + "samsung,syscon-phandle"); if (IS_ERR(wdt->pmureg)) return dev_err_probe(dev, PTR_ERR(wdt->pmureg), - "syscon regmap lookup failed.\n"); + "PMU regmap lookup failed.\n"); } wdt_irq = platform_get_irq(pdev, 0);