Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 16 Apr 2026 22:39:55 +0000
From:      Justin Hibbits <jhibbits@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 603a29b9b312 - main - mpc85xx: Support timebase sync on T-series devices
Message-ID:  <69e1653b.347bc.204c98dd@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by jhibbits:

URL: https://cgit.FreeBSD.org/src/commit/?id=603a29b9b3126763c934afbed64fc43bf539469b

commit 603a29b9b3126763c934afbed64fc43bf539469b
Author:     Justin Hibbits <jhibbits@FreeBSD.org>
AuthorDate: 2026-04-16 22:36:54 +0000
Commit:     Justin Hibbits <jhibbits@FreeBSD.org>
CommitDate: 2026-04-16 22:36:54 +0000

    mpc85xx: Support timebase sync on T-series devices
    
    Freescale T-series QorIQ devices use a different register to twiddle the
    timebase enable.
---
 sys/powerpc/mpc85xx/platform_mpc85xx.c | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/sys/powerpc/mpc85xx/platform_mpc85xx.c b/sys/powerpc/mpc85xx/platform_mpc85xx.c
index cc2ad829eb05..6781fdffa5a9 100644
--- a/sys/powerpc/mpc85xx/platform_mpc85xx.c
+++ b/sys/powerpc/mpc85xx/platform_mpc85xx.c
@@ -581,9 +581,19 @@ dummy_freeze(device_t dev, bool freeze)
 
 /* QorIQ Run control/power management timebase management. */
 
-#define	RCPM_CTBENR	0x00000084
+#define	RCPM_CTBENR_1_0	0x00000084
+#define	RCPM_CTBENR_2_0	0x000001a0
+
 struct mpc85xx_rcpm_softc {
 	struct resource *sc_mem;
+	bus_addr_t sc_ctbenr;
+	uint32_t sc_saved_tbenr;
+};
+
+struct ofw_compat_data compats[] = {
+	{ "fsl,qoriq-rcpm-1.0", RCPM_CTBENR_1_0 },
+	{ "fsl,qoriq-rcpm-2.0", RCPM_CTBENR_2_0 },
+	{ NULL, 0 }
 };
 
 static void
@@ -593,16 +603,17 @@ mpc85xx_rcpm_freeze_timebase(device_t dev, bool freeze)
 
 	sc = device_get_softc(dev);
 
-	if (freeze)
-		bus_write_4(sc->sc_mem, RCPM_CTBENR, 0);
-	else
-		bus_write_4(sc->sc_mem, RCPM_CTBENR, (1 << maxcpu) - 1);
+	if (freeze) {
+		sc->sc_saved_tbenr = bus_read_4(sc->sc_mem, sc->sc_ctbenr);
+		bus_write_4(sc->sc_mem, sc->sc_ctbenr, 0);
+	} else
+		bus_write_4(sc->sc_mem, sc->sc_ctbenr, sc->sc_saved_tbenr);
 }
 
 static int
 mpc85xx_rcpm_probe(device_t dev)
 {
-	if (!ofw_bus_is_compatible(dev, "fsl,qoriq-rcpm-1.0"))
+	if (ofw_bus_search_compatible(dev, compats)->ocd_str == NULL)
 		return (ENXIO);
 
 	device_set_desc(dev, "QorIQ Run control and power management");
@@ -622,6 +633,7 @@ mpc85xx_rcpm_attach(device_t dev)
 	rid = 0;
 	sc->sc_mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
 	    RF_ACTIVE | RF_SHAREABLE);
+	sc->sc_ctbenr = ofw_bus_search_compatible(dev, compats)->ocd_data;
 
 	return (0);
 }


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69e1653b.347bc.204c98dd>