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);