Module Name:    src
Committed By:   jmcneill
Date:           Sat Jun 30 17:54:08 UTC 2018

Modified Files:
        src/sys/arch/arm/rockchip: rk_cru.c rk_cru.h rk_cru_mux.c rk_cru_pll.c

Log Message:
Use syscon API.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/rockchip/rk_cru.c
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/rockchip/rk_cru.h \
    src/sys/arch/arm/rockchip/rk_cru_mux.c
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/rockchip/rk_cru_pll.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/rockchip/rk_cru.c
diff -u src/sys/arch/arm/rockchip/rk_cru.c:1.3 src/sys/arch/arm/rockchip/rk_cru.c:1.4
--- src/sys/arch/arm/rockchip/rk_cru.c:1.3	Tue Jun 26 17:44:04 2018
+++ src/sys/arch/arm/rockchip/rk_cru.c	Sat Jun 30 17:54:07 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_cru.c,v 1.3 2018/06/26 17:44:04 jmcneill Exp $ */
+/* $NetBSD: rk_cru.c,v 1.4 2018/06/30 17:54:07 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill <[email protected]>
@@ -30,7 +30,7 @@
 #include "opt_fdt_arm.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rk_cru.c,v 1.3 2018/06/26 17:44:04 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_cru.c,v 1.4 2018/06/30 17:54:07 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -300,19 +300,9 @@ rk_cru_attach(struct rk_cru_softc *sc)
 	int i;
 
 	if (of_hasprop(sc->sc_phandle, "rockchip,grf")) {
-		const int grf_phandle = fdtbus_get_phandle(sc->sc_phandle, "rockchip,grf");
-		if (grf_phandle == -1) {
-			aprint_error(": couldn't get grf phandle\n");
-			return ENXIO;
-		}
-
-		if (fdtbus_get_reg(grf_phandle, 0, &addr, &size) != 0) {
-			aprint_error(": couldn't get grf registers\n");
-			return ENXIO;
-		}
-
-		if (bus_space_map(sc->sc_bst, addr, size, 0, &sc->sc_bsh_grf) != 0) {
-			aprint_error(": couldn't map registers\n");
+		sc->sc_grf = fdtbus_syscon_acquire(sc->sc_phandle, "rockchip,grf");
+		if (sc->sc_grf == NULL) {
+			aprint_error(": couldn't get grf syscon\n");
 			return ENXIO;
 		}
 	}

Index: src/sys/arch/arm/rockchip/rk_cru.h
diff -u src/sys/arch/arm/rockchip/rk_cru.h:1.1 src/sys/arch/arm/rockchip/rk_cru.h:1.2
--- src/sys/arch/arm/rockchip/rk_cru.h:1.1	Sat Jun 16 00:19:04 2018
+++ src/sys/arch/arm/rockchip/rk_cru.h	Sat Jun 30 17:54:07 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_cru.h,v 1.1 2018/06/16 00:19:04 jmcneill Exp $ */
+/* $NetBSD: rk_cru.h,v 1.2 2018/06/30 17:54:07 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill <[email protected]>
@@ -30,6 +30,7 @@
 #define _ARM_RK_CRU_H
 
 #include <dev/clk/clk_backend.h>
+#include <dev/fdt/syscon.h>
 
 struct rk_cru_softc;
 struct rk_cru_clk;
@@ -293,7 +294,7 @@ struct rk_cru_softc {
 	int			sc_phandle;
 	bus_space_tag_t		sc_bst;
 	bus_space_handle_t	sc_bsh;
-	bus_space_handle_t	sc_bsh_grf;
+	struct syscon		*sc_grf;
 
 	struct clk_domain	sc_clkdom;
 
@@ -311,11 +312,6 @@ void	rk_cru_print(struct rk_cru_softc *)
 #define CRU_WRITE(sc, reg, val)	\
 	bus_space_write_4((sc)->sc_bst, (sc)->sc_bsh, (reg), (val))
 
-#define	GRF_READ(sc, reg)	\
-	bus_space_read_4((sc)->sc_bst, (sc)->sc_bsh_grf, (reg))
-#define GRF_WRITE(sc, reg, val)	\
-	bus_space_write_4((sc)->sc_bst, (sc)->sc_bsh_grf, (reg), (val))
-
-#define	HAS_GRF(sc)	((sc)->sc_bsh_grf != 0)
+#define	HAS_GRF(sc)	((sc)->sc_grf != NULL)
 
 #endif /* _ARM_RK_CRU_H */
Index: src/sys/arch/arm/rockchip/rk_cru_mux.c
diff -u src/sys/arch/arm/rockchip/rk_cru_mux.c:1.1 src/sys/arch/arm/rockchip/rk_cru_mux.c:1.2
--- src/sys/arch/arm/rockchip/rk_cru_mux.c:1.1	Sat Jun 16 00:19:04 2018
+++ src/sys/arch/arm/rockchip/rk_cru_mux.c	Sat Jun 30 17:54:07 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_cru_mux.c,v 1.1 2018/06/16 00:19:04 jmcneill Exp $ */
+/* $NetBSD: rk_cru_mux.c,v 1.2 2018/06/30 17:54:07 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill <[email protected]>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rk_cru_mux.c,v 1.1 2018/06/16 00:19:04 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_cru_mux.c,v 1.2 2018/06/30 17:54:07 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -42,13 +42,19 @@ rk_cru_mux_get_parent(struct rk_cru_soft
 {
 	struct rk_cru_mux *mux = &clk->u.mux;
 	const bool mux_grf = (mux->flags & RK_MUX_GRF) != 0;
+	uint32_t val;
 
 	KASSERT(clk->type == RK_CRU_MUX);
 
-	if (mux_grf && !HAS_GRF(sc))
-		return NULL;
-
-	const uint32_t val = mux_grf ? GRF_READ(sc, mux->reg) : CRU_READ(sc, mux->reg);
+	if (mux_grf) {
+		if (!HAS_GRF(sc))
+			return NULL;
+		syscon_lock(sc->sc_grf);
+		val = syscon_read_4(sc->sc_grf, mux->reg);
+		syscon_unlock(sc->sc_grf);
+	} else {
+		val = CRU_READ(sc, mux->reg);
+	}
 	const u_int index = __SHIFTOUT(val, mux->mask);
 
 	return mux->parents[index];
@@ -71,9 +77,11 @@ rk_cru_mux_set_parent(struct rk_cru_soft
 			const uint32_t write_mask = mux->mask << 16;
 			const uint32_t write_val = __SHIFTIN(index, mux->mask);
 
-			if (mux_grf)
-				GRF_WRITE(sc, mux->reg, write_mask | write_val);
-			else
+			if (mux_grf) {
+				syscon_lock(sc->sc_grf);
+				syscon_write_4(sc->sc_grf, mux->reg, write_mask | write_val);
+				syscon_unlock(sc->sc_grf);
+			} else
 				CRU_WRITE(sc, mux->reg, write_mask | write_val);
 
 			return 0;

Index: src/sys/arch/arm/rockchip/rk_cru_pll.c
diff -u src/sys/arch/arm/rockchip/rk_cru_pll.c:1.2 src/sys/arch/arm/rockchip/rk_cru_pll.c:1.3
--- src/sys/arch/arm/rockchip/rk_cru_pll.c:1.2	Sat Jun 16 13:24:04 2018
+++ src/sys/arch/arm/rockchip/rk_cru_pll.c	Sat Jun 30 17:54:07 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_cru_pll.c,v 1.2 2018/06/16 13:24:04 jmcneill Exp $ */
+/* $NetBSD: rk_cru_pll.c,v 1.3 2018/06/30 17:54:07 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill <[email protected]>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rk_cru_pll.c,v 1.2 2018/06/16 13:24:04 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_cru_pll.c,v 1.3 2018/06/30 17:54:07 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -146,11 +146,14 @@ rk_cru_pll_set_rate(struct rk_cru_softc 
 	const uint32_t write_val = pll->mode_mask;
 	CRU_WRITE(sc, pll->mode_reg, write_mask | write_val);
 
+	syscon_lock(sc->sc_grf);
 	for (retry = 1000; retry > 0; retry--) {
-		if (GRF_READ(sc, GRF_SOC_STATUS0) & pll->lock_mask)
+		if (syscon_read_4(sc->sc_grf, GRF_SOC_STATUS0) & pll->lock_mask)
 			break;
 		delay(1);
 	}
+	syscon_unlock(sc->sc_grf);
+
 	if (retry == 0)
 		device_printf(sc->sc_dev, "WARNING: %s failed to lock\n",
 		    clk->base.name);

Reply via email to