From 0ffeeb414f086a8e37e54a6e574c02dd5520035d Mon Sep 17 00:00:00 2001 From: Ian Lepore Date: Wed, 25 Nov 2020 19:10:20 +0000 Subject: [PATCH] Convert the imx6_snvs RTC driver to access registers via the syscon device. This is required for it to work correctly in the GENERIC kernel. --- sys/arm/freescale/imx/imx6_snvs.c | 17 ++++++----------- sys/modules/imx/imx6_snvs/Makefile | 1 + 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/sys/arm/freescale/imx/imx6_snvs.c b/sys/arm/freescale/imx/imx6_snvs.c index 158de9edcfd5..138abb883b7e 100644 --- a/sys/arm/freescale/imx/imx6_snvs.c +++ b/sys/arm/freescale/imx/imx6_snvs.c @@ -45,6 +45,7 @@ __FBSDID("$FreeBSD$"); #include #include "clock_if.h" +#include "syscon_if.h" #define SNVS_LPCR 0x38 /* Control register */ #define LPCR_LPCALB_VAL_SHIFT 10 /* Calibration shift */ @@ -68,13 +69,12 @@ __FBSDID("$FreeBSD$"); struct snvs_softc { device_t dev; - struct resource * memres; + struct syscon *syscon; uint32_t lpcr; }; static struct ofw_compat_data compat_data[] = { {"fsl,sec-v4.0-mon-rtc-lp", true}, - {"fsl,sec-v4.0-mon", true}, {NULL, false} }; @@ -82,14 +82,14 @@ static inline uint32_t RD4(struct snvs_softc *sc, bus_size_t offset) { - return (bus_read_4(sc->memres, offset)); + return (SYSCON_READ_4(sc->syscon, offset)); } static inline void WR4(struct snvs_softc *sc, bus_size_t offset, uint32_t value) { - bus_write_4(sc->memres, offset, value); + SYSCON_WRITE_4(sc->syscon, offset, value); } static void @@ -187,16 +187,12 @@ static int snvs_attach(device_t dev) { struct snvs_softc *sc; - int rid; sc = device_get_softc(dev); sc->dev = dev; - rid = 0; - sc->memres = bus_alloc_resource_any(sc->dev, SYS_RES_MEMORY, &rid, - RF_ACTIVE); - if (sc->memres == NULL) { - device_printf(sc->dev, "could not allocate registers\n"); + if (syscon_get_handle_default(sc->dev, &sc->syscon) != 0) { + device_printf(sc->dev, "Cannot get syscon handle\n"); return (ENXIO); } @@ -212,7 +208,6 @@ snvs_detach(device_t dev) sc = device_get_softc(dev); clock_unregister(sc->dev); - bus_release_resource(sc->dev, SYS_RES_MEMORY, 0, sc->memres); return (0); } diff --git a/sys/modules/imx/imx6_snvs/Makefile b/sys/modules/imx/imx6_snvs/Makefile index eca421ffe4c7..aa793a5ab1ab 100644 --- a/sys/modules/imx/imx6_snvs/Makefile +++ b/sys/modules/imx/imx6_snvs/Makefile @@ -11,5 +11,6 @@ SRCS+= \ clock_if.h \ device_if.h \ ofw_bus_if.h \ + syscon_if.h \ .include