CVS commit: src/sys/arch/arm/rockchip

2023-12-31 Thread Nick Hudson
Module Name:src
Committed By:   skrll
Date:   Sun Dec 31 09:45:58 UTC 2023

Modified Files:
src/sys/arch/arm/rockchip: rk_gmac.c

Log Message:
Trailing whitespace


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/arm/rockchip/rk_gmac.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_gmac.c
diff -u src/sys/arch/arm/rockchip/rk_gmac.c:1.21 src/sys/arch/arm/rockchip/rk_gmac.c:1.22
--- src/sys/arch/arm/rockchip/rk_gmac.c:1.21	Fri Nov 12 22:02:08 2021
+++ src/sys/arch/arm/rockchip/rk_gmac.c	Sun Dec 31 09:45:58 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_gmac.c,v 1.21 2021/11/12 22:02:08 jmcneill Exp $ */
+/* $NetBSD: rk_gmac.c,v 1.22 2023/12/31 09:45:58 skrll Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -28,7 +28,7 @@
 
 #include 
 
-__KERNEL_RCSID(0, "$NetBSD: rk_gmac.c,v 1.21 2021/11/12 22:02:08 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_gmac.c,v 1.22 2023/12/31 09:45:58 skrll Exp $");
 
 #include 
 #include 
@@ -370,7 +370,7 @@ rk_gmac_setup_clocks(int phandle)
 	static const char * const clknames[] = {
 #if 0
 		"stmmaceth",
-		"mac_clk_rx", 
+		"mac_clk_rx",
 		"mac_clk_tx",
 		"clk_mac_ref",
 		"clk_mac_refout",



CVS commit: src/sys/arch/arm/rockchip

2023-12-31 Thread Nick Hudson
Module Name:src
Committed By:   skrll
Date:   Sun Dec 31 09:45:58 UTC 2023

Modified Files:
src/sys/arch/arm/rockchip: rk_gmac.c

Log Message:
Trailing whitespace


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/arm/rockchip/rk_gmac.c

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



CVS commit: src/sys/arch/arm/rockchip

2023-12-26 Thread Nick Hudson
Module Name:src
Committed By:   skrll
Date:   Wed Dec 27 07:46:21 UTC 2023

Modified Files:
src/sys/arch/arm/rockchip: rk3399_pcie.c

Log Message:
Trailing whitespace


To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 src/sys/arch/arm/rockchip/rk3399_pcie.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/rk3399_pcie.c
diff -u src/sys/arch/arm/rockchip/rk3399_pcie.c:1.20 src/sys/arch/arm/rockchip/rk3399_pcie.c:1.21
--- src/sys/arch/arm/rockchip/rk3399_pcie.c:1.20	Sun Mar 26 19:10:33 2023
+++ src/sys/arch/arm/rockchip/rk3399_pcie.c	Wed Dec 27 07:46:20 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3399_pcie.c,v 1.20 2023/03/26 19:10:33 andvar Exp $ */
+/* $NetBSD: rk3399_pcie.c,v 1.21 2023/12/27 07:46:20 skrll Exp $ */
 /*
  * Copyright (c) 2018 Mark Kettenis 
  *
@@ -17,7 +17,7 @@
 
 #include 
 
-__KERNEL_RCSID(1, "$NetBSD: rk3399_pcie.c,v 1.20 2023/03/26 19:10:33 andvar Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk3399_pcie.c,v 1.21 2023/12/27 07:46:20 skrll Exp $");
 
 #include 
 #include 
@@ -249,7 +249,7 @@ rkpcie_attach(device_t parent, device_t 
 		fdtbus_regulator_enable(regulator);
 		fdtbus_regulator_release(regulator);
 	}
-		
+
 	fdtbus_clock_assign(phandle);
 	clock_enable_all(phandle);
 
@@ -301,7 +301,7 @@ again:
 
 	delay(1000);	/* TPERST. use 1ms */
 	delayed_ms += 1;
-	
+
 	reset_deassert(phandle, "pm");
 	reset_deassert(phandle, "aclk");
 	reset_deassert(phandle, "pclk");



CVS commit: src/sys/arch/arm/rockchip

2023-12-26 Thread Nick Hudson
Module Name:src
Committed By:   skrll
Date:   Wed Dec 27 07:46:21 UTC 2023

Modified Files:
src/sys/arch/arm/rockchip: rk3399_pcie.c

Log Message:
Trailing whitespace


To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 src/sys/arch/arm/rockchip/rk3399_pcie.c

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



CVS commit: src/sys/arch/arm/rockchip

2023-10-17 Thread Tobias Nygren
Module Name:src
Committed By:   tnn
Date:   Tue Oct 17 19:13:05 UTC 2023

Modified Files:
src/sys/arch/arm/rockchip: rk3588_cru.c

Log Message:
rk3588_cru: fix clock id for BIGCORE1


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/rockchip/rk3588_cru.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/rk3588_cru.c
diff -u src/sys/arch/arm/rockchip/rk3588_cru.c:1.1 src/sys/arch/arm/rockchip/rk3588_cru.c:1.2
--- src/sys/arch/arm/rockchip/rk3588_cru.c:1.1	Tue Aug 23 05:39:06 2022
+++ src/sys/arch/arm/rockchip/rk3588_cru.c	Tue Oct 17 19:13:05 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: rk3588_cru.c,v 1.1 2022/08/23 05:39:06 ryo Exp $	*/
+/*	$NetBSD: rk3588_cru.c,v 1.2 2023/10/17 19:13:05 tnn Exp $	*/
 
 /*-
  * Copyright (c) 2022 Ryo Shimizu 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk3588_cru.c,v 1.1 2022/08/23 05:39:06 ryo Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk3588_cru.c,v 1.2 2023/10/17 19:13:05 tnn Exp $");
 
 #include 
 #include 
@@ -636,7 +636,7 @@ static struct rk_cru_clk rk3588_cru_clks
 	CLKSEL_CON(BIGCORE0, 1),	/* div1_reg */
 	__BITS(4,0),		/* div1_mask */
 	armclk_b01_rates),
-	RK_CPU_CORE2(RK3588_ARMCLK_B01, "armclk_b23", mux_armclkb23_parents,
+	RK_CPU_CORE2(RK3588_ARMCLK_B23, "armclk_b23", mux_armclkb23_parents,
 	CLKSEL_CON(BIGCORE1, 0),	/* reg */
 	__BITS(7,6), 2, 1,		/* mux_mask, mux_main, mux_alt */
 	CLKSEL_CON(BIGCORE1, 0),	/* div0_reg */
@@ -673,7 +673,6 @@ static struct rk_cru_clk rk3588_cru_clks
 	"armclk_b23",
 	CLKGATE_CON(BIGCORE1, 0), 13),
 
-
 	RK_COMPOSITE(RK3588_CLK_50M_SRC, "clk_50m_src",
 	gpll_cpll_parents,
 	CLKSEL_CON(0, 0), __BITS(5,5), __BITS(4,0),



CVS commit: src/sys/arch/arm/rockchip

2023-10-17 Thread Tobias Nygren
Module Name:src
Committed By:   tnn
Date:   Tue Oct 17 19:13:05 UTC 2023

Modified Files:
src/sys/arch/arm/rockchip: rk3588_cru.c

Log Message:
rk3588_cru: fix clock id for BIGCORE1


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/rockchip/rk3588_cru.c

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



CVS commit: src/sys/arch/arm/rockchip

2023-10-17 Thread Tobias Nygren
Module Name:src
Committed By:   tnn
Date:   Tue Oct 17 18:23:55 UTC 2023

Modified Files:
src/sys/arch/arm/rockchip: rk3588_cru.h

Log Message:
rk3588_cru: sync clock id numbers with mainline Linux

The previous constants came from the Rockchip board support package,
but we want to be compatible with upstream device tree.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/rockchip/rk3588_cru.h

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/rk3588_cru.h
diff -u src/sys/arch/arm/rockchip/rk3588_cru.h:1.1 src/sys/arch/arm/rockchip/rk3588_cru.h:1.2
--- src/sys/arch/arm/rockchip/rk3588_cru.h:1.1	Tue Aug 23 05:39:06 2022
+++ src/sys/arch/arm/rockchip/rk3588_cru.h	Tue Oct 17 18:23:55 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: rk3588_cru.h,v 1.1 2022/08/23 05:39:06 ryo Exp $	*/
+/*	$NetBSD: rk3588_cru.h,v 1.2 2023/10/17 18:23:55 tnn Exp $	*/
 
 /*-
  * Copyright (c) 2022 Ryo Shimizu 
@@ -28,727 +28,726 @@
 #ifndef _RK3588_CRU_H_
 #define _RK3588_CRU_H_
 
-#define RK3588_PLL_B0PLL			1
-#define RK3588_PLL_B1PLL			2
-#define RK3588_PLL_LPLL3
-#define RK3588_PLL_V0PLL			4
-#define RK3588_PLL_AUPLL			5
-#define RK3588_PLL_CPLL6
-#define RK3588_PLL_GPLL7
-#define RK3588_PLL_NPLL8
-#define RK3588_PLL_PPLL9
-#define RK3588_ARMCLK_L10
-#define RK3588_ARMCLK_B01			11
-#define RK3588_ARMCLK_B23			12
-/* 13 */
-/* 14 */
-/* 15 */
-/* 16 */
-/* 17 */
-/* 18 */
-/* 19 */
-#define RK3588_PCLK_BIGCORE0_ROOT		20
-#define RK3588_PCLK_BIGCORE0_PVTM		21
-#define RK3588_PCLK_BIGCORE1_ROOT		22
-#define RK3588_PCLK_BIGCORE1_PVTM		23
-#define RK3588_PCLK_DSU_S_ROOT			24
-#define RK3588_PCLK_DSU_ROOT			25
-#define RK3588_PCLK_DSU_NS_ROOT			26
-#define RK3588_PCLK_LITCORE_PVTM		27
-#define RK3588_PCLK_DBG28
-#define RK3588_PCLK_DSU29
-#define RK3588_PCLK_S_DAPLITE			30
-#define RK3588_PCLK_M_DAPLITE			31
-#define RK3588_MBIST_MCLK_PDM1			32
-#define RK3588_MBIST_CLK_ACDCDIG		33
-#define RK3588_HCLK_I2S2_2CH			34
-#define RK3588_HCLK_I2S3_2CH			35
-#define RK3588_CLK_I2S2_2CH_SRC			36
-#define RK3588_CLK_I2S2_2CH_FRAC		37
-#define RK3588_CLK_I2S2_2CH			38
-#define RK3588_MCLK_I2S2_2CH			39
-#define RK3588_I2S2_2CH_MCLKOUT			40
-#define RK3588_CLK_DAC_ACDCDIG			41
-#define RK3588_CLK_I2S3_2CH_SRC			42
-#define RK3588_CLK_I2S3_2CH_FRAC		43
-#define RK3588_CLK_I2S3_2CH			44
-#define RK3588_MCLK_I2S3_2CH			45
-#define RK3588_I2S3_2CH_MCLKOUT			46
-#define RK3588_PCLK_ACDCDIG			47
-#define RK3588_HCLK_I2S0_8CH			48
-#define RK3588_CLK_I2S0_8CH_TX_SRC		49
-#define RK3588_CLK_I2S0_8CH_TX_FRAC		50
-#define RK3588_MCLK_I2S0_8CH_TX			51
-#define RK3588_CLK_I2S0_8CH_TX			52
-#define RK3588_CLK_I2S0_8CH_RX_SRC		53
-#define RK3588_CLK_I2S0_8CH_RX_FRAC		54
-#define RK3588_MCLK_I2S0_8CH_RX			55
-#define RK3588_CLK_I2S0_8CH_RX			56
-#define RK3588_I2S0_8CH_MCLKOUT			57
-#define RK3588_HCLK_PDM1			58
-#define RK3588_MCLK_PDM1			59
-#define RK3588_HCLK_AUDIO_ROOT			60
-#define RK3588_PCLK_AUDIO_ROOT			61
-#define RK3588_HCLK_SPDIF0			62
-#define RK3588_CLK_SPDIF0_SRC			63
-#define RK3588_CLK_SPDIF0_FRAC			64
-#define RK3588_MCLK_SPDIF0			65
-#define RK3588_CLK_SPDIF0			66
-#define RK3588_CLK_SPDIF1			67
-#define RK3588_HCLK_SPDIF1			68
-#define RK3588_CLK_SPDIF1_SRC			69
-#define RK3588_CLK_SPDIF1_FRAC			70
-#define RK3588_MCLK_SPDIF1			71
-#define RK3588_ACLK_AV1_ROOT			72
-#define RK3588_ACLK_AV173
-#define RK3588_PCLK_AV1_ROOT			74
-#define RK3588_PCLK_AV175
-#define RK3588_PCLK_MAILBOX0			76
-#define RK3588_PCLK_MAILBOX1			77
-#define RK3588_PCLK_MAILBOX2			78
-#define RK3588_PCLK_PMU2			79
-#define RK3588_PCLK_PMUCM0_INTMUX		80
-#define RK3588_PCLK_DDRCM0_INTMUX		81
-#define RK3588_PCLK_TOP82
-#define RK3588_PCLK_PWM1			83
-#define RK3588_CLK_PWM184
-#define RK3588_CLK_PWM1_CAPTURE			85
-#define RK3588_PCLK_PWM2			86
-#define RK3588_CLK_PWM287
-#define RK3588_CLK_PWM2_CAPTURE			88
-#define RK3588_PCLK_PWM3			89
-#define RK3588_CLK_PWM390
-#define RK3588_CLK_PWM3_CAPTURE			91
-#define RK3588_PCLK_BUSTIMER0			92
-#define RK3588_PCLK_BUSTIMER1			93
-#define RK3588_CLK_BUS_TIMER_ROOT		94
-#define RK3588_CLK_BUSTIMER0			95
-#define RK3588_CLK_BUSTIMER1			96
-#define RK3588_CLK_BUSTIMER2			97
-#define RK3588_CLK_BUSTIMER3			98
-#define RK3588_CLK_BUSTIMER4			99
-#define RK3588_CLK_BUSTIMER5			100
-#define RK3588_CLK_BUSTIMER6			101
-#define RK3588_CLK_BUSTIMER7			102
-#define RK3588_CLK_BUSTIMER8			103
-#define RK3588_CLK_BUSTIMER9			104
-#define RK3588_CLK_BUSTIMER10			105
-#define RK3588_CLK_BUSTIMER11			106
-#define RK3588_PCLK_WDT0			107
-#define RK3588_TCLK_WDT0			108
-/* 109 */
-/* 110 */
-#define RK3588_PCLK_CAN0			111
-#define RK3588_CLK_CAN0112
-#define RK3588_PCLK_CAN1			113
-#define RK3588_CLK_CAN1114
-#define RK3588_PCLK_CAN2			115
-#define RK3588_CLK_CAN2116
-#define RK3588_ACLK_DECOM			117
-#define RK3588_PCLK_DECOM			118
-#de

CVS commit: src/sys/arch/arm/rockchip

2023-10-17 Thread Tobias Nygren
Module Name:src
Committed By:   tnn
Date:   Tue Oct 17 18:23:55 UTC 2023

Modified Files:
src/sys/arch/arm/rockchip: rk3588_cru.h

Log Message:
rk3588_cru: sync clock id numbers with mainline Linux

The previous constants came from the Rockchip board support package,
but we want to be compatible with upstream device tree.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/rockchip/rk3588_cru.h

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



CVS commit: src/sys/arch/arm/rockchip

2023-10-17 Thread Tobias Nygren
Module Name:src
Committed By:   tnn
Date:   Tue Oct 17 17:31:12 UTC 2023

Modified Files:
src/sys/arch/arm/rockchip: rk_gpio.c

Log Message:
rk_gpio: add support for version 2 controller

Based on PR 57597 from Johann Rudloff.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/rockchip/rk_gpio.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_gpio.c
diff -u src/sys/arch/arm/rockchip/rk_gpio.c:1.6 src/sys/arch/arm/rockchip/rk_gpio.c:1.7
--- src/sys/arch/arm/rockchip/rk_gpio.c:1.6	Tue Oct 17 15:09:18 2023
+++ src/sys/arch/arm/rockchip/rk_gpio.c	Tue Oct 17 17:31:12 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_gpio.c,v 1.6 2023/10/17 15:09:18 tnn Exp $ */
+/* $NetBSD: rk_gpio.c,v 1.7 2023/10/17 17:31:12 tnn Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_gpio.c,v 1.6 2023/10/17 15:09:18 tnn Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_gpio.c,v 1.7 2023/10/17 17:31:12 tnn Exp $");
 
 #include 
 #include 
@@ -55,6 +55,26 @@ __KERNEL_RCSID(0, "$NetBSD: rk_gpio.c,v 
 #define	GPIO_PORTA_EOI_REG		0x004c
 #define	GPIO_EXT_PORTA_REG		0x0050
 #define	GPIO_LS_SYNC_REG		0x0060
+#define	GPIO_VER_ID_REG			0x0078
+#define	GPIO_VER_ID_GPIOV2		0x0101157c
+
+/*
+ * In "version 2" GPIO controllers, half of each register is used by the
+ * write_enable mask, so the 32 pins are spread over two registers.
+ *
+ * pins  0 - 15 go into the GPIO_SWPORT_*_L register
+ * pins 16 - 31 go into the GPIO_SWPORT_*_H register
+ */
+#define GPIOV2_SWPORT_DR_BASE		0x
+#define GPIOV2_SWPORT_DR_REG(pin)	\
+	(GPIOV2_SWPORT_DR_BASE + GPIOV2_REG_OFFSET(pin))
+#define	GPIOV2_SWPORT_DDR_BASE		0x0008
+#define	GPIOV2_SWPORT_DDR_REG(pin)	\
+	(GPIOV2_SWPORT_DDR_BASE + GPIOV2_REG_OFFSET(pin))
+#define	GPIOV2_EXT_PORT_REG		0x0070
+#define	GPIOV2_REG_OFFSET(pin)		(((pin) >> 4) << 2)
+#define	GPIOV2_DATA_MASK(pin)		(__BIT((pin) & 0xF))
+#define	GPIOV2_WRITE_MASK(pin)		(__BIT(((pin) & 0xF) | 0x10))
 
 static const struct device_compatible_entry compat_data[] = {
 	{ .compat = "rockchip,gpio-bank" },
@@ -223,18 +243,58 @@ rk_gpio_pin_ctl(void *priv, int pin, int
 	mutex_exit(&sc->sc_lock);
 }
 
+static int
+rk_gpio_v2_pin_read(void *priv, int pin)
+{
+	struct rk_gpio_softc * const sc = priv;
+	uint32_t data;
+	int val;
+
+	KASSERT(pin < __arraycount(sc->sc_pins));
+
+	const uint32_t data_mask = __BIT(pin);
+
+	/* No lock required for reads */
+	data = RD4(sc, GPIOV2_EXT_PORT_REG);
+	val = __SHIFTOUT(data, data_mask);
+
+	return val;
+}
+
+static void
+rk_gpio_v2_pin_write(void *priv, int pin, int val)
+{
+	struct rk_gpio_softc * const sc = priv;
+	uint32_t data;
+
+	KASSERT(pin < __arraycount(sc->sc_pins));
+
+	const uint32_t write_mask = GPIOV2_WRITE_MASK(pin);
+
+	/* No lock required for writes on v2 controllers  */
+	data = val ? GPIOV2_DATA_MASK(pin) : 0;
+	WR4(sc, GPIOV2_SWPORT_DR_REG(pin), write_mask | data);
+}
+
+static void
+rk_gpio_v2_pin_ctl(void *priv, int pin, int flags)
+{
+	struct rk_gpio_softc * const sc = priv;
+	uint32_t ddr;
+
+	KASSERT(pin < __arraycount(sc->sc_pins));
+
+	/* No lock required for writes on v2 controllers  */
+	ddr = (flags & GPIO_PIN_OUTPUT) ? GPIOV2_DATA_MASK(pin) : 0;
+	WR4(sc, GPIOV2_SWPORT_DDR_REG(pin), GPIOV2_WRITE_MASK(pin) | ddr);
+}
+
 static void
 rk_gpio_attach_ports(struct rk_gpio_softc *sc)
 {
-	struct gpio_chipset_tag *gp = &sc->sc_gp;
 	struct gpiobus_attach_args gba;
 	u_int pin;
 
-	gp->gp_cookie = sc;
-	gp->gp_pin_read = rk_gpio_pin_read;
-	gp->gp_pin_write = rk_gpio_pin_write;
-	gp->gp_pin_ctl = rk_gpio_pin_ctl;
-
 	for (pin = 0; pin < __arraycount(sc->sc_pins); pin++) {
 		sc->sc_pins[pin].pin_num = pin;
 		sc->sc_pins[pin].pin_caps = GPIO_PIN_INPUT | GPIO_PIN_OUTPUT;
@@ -242,7 +302,7 @@ rk_gpio_attach_ports(struct rk_gpio_soft
 	}
 
 	memset(&gba, 0, sizeof(gba));
-	gba.gba_gc = gp;
+	gba.gba_gc = &sc->sc_gp;
 	gba.gba_pins = sc->sc_pins;
 	gba.gba_npins = __arraycount(sc->sc_pins);
 	sc->sc_gpiodev = config_found(sc->sc_dev, &gba, NULL, CFARGS_NONE);
@@ -260,11 +320,14 @@ static void
 rk_gpio_attach(device_t parent, device_t self, void *aux)
 {
 	struct rk_gpio_softc * const sc = device_private(self);
+	struct gpio_chipset_tag * const gp = &sc->sc_gp;
 	struct fdt_attach_args * const faa = aux;
 	const int phandle = faa->faa_phandle;
 	struct clk *clk;
 	bus_addr_t addr;
 	bus_size_t size;
+	uint32_t ver_id;
+	int ver;
 
 	if (fdtbus_get_reg(phandle, 0, &addr, &size) != 0) {
 		aprint_error(": couldn't get registers\n");
@@ -282,10 +345,31 @@ rk_gpio_attach(device_t parent, device_t
 		aprint_error(": couldn't map registers\n");
 		return;
 	}
+
+	gp->gp_cookie = sc;
+	ver_id = RD4(sc, GPIO_VER_ID_REG);
+	switch (ver_id) {
+	case 0: /* VER_ID not implemented in v1 but reads back as 0 */
+		ver = 1;
+		gp->gp_pin_read = rk_gpio_pin_read;
+		gp->gp_pin_write = rk_gpio_pin_write

CVS commit: src/sys/arch/arm/rockchip

2023-10-17 Thread Tobias Nygren
Module Name:src
Committed By:   tnn
Date:   Tue Oct 17 17:31:12 UTC 2023

Modified Files:
src/sys/arch/arm/rockchip: rk_gpio.c

Log Message:
rk_gpio: add support for version 2 controller

Based on PR 57597 from Johann Rudloff.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/rockchip/rk_gpio.c

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



CVS commit: src/sys/arch/arm/rockchip

2023-10-17 Thread Tobias Nygren
Module Name:src
Committed By:   tnn
Date:   Tue Oct 17 15:09:18 UTC 2023

Modified Files:
src/sys/arch/arm/rockchip: rk_gpio.c

Log Message:
rk_gpio: de-duplicate some code from the fdtbus accessors

Make fdtbus accessors implementation agnostic and use the chipset tag
to call into implementation code. This makes it easy to populate the
chipset tag with alternate implementation needed for v2 controllers.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/rockchip/rk_gpio.c

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



CVS commit: src/sys/arch/arm/rockchip

2023-10-17 Thread Tobias Nygren
Module Name:src
Committed By:   tnn
Date:   Tue Oct 17 15:09:18 UTC 2023

Modified Files:
src/sys/arch/arm/rockchip: rk_gpio.c

Log Message:
rk_gpio: de-duplicate some code from the fdtbus accessors

Make fdtbus accessors implementation agnostic and use the chipset tag
to call into implementation code. This makes it easy to populate the
chipset tag with alternate implementation needed for v2 controllers.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/rockchip/rk_gpio.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_gpio.c
diff -u src/sys/arch/arm/rockchip/rk_gpio.c:1.5 src/sys/arch/arm/rockchip/rk_gpio.c:1.6
--- src/sys/arch/arm/rockchip/rk_gpio.c:1.5	Sat Aug  7 16:18:45 2021
+++ src/sys/arch/arm/rockchip/rk_gpio.c	Tue Oct 17 15:09:18 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_gpio.c,v 1.5 2021/08/07 16:18:45 thorpej Exp $ */
+/* $NetBSD: rk_gpio.c,v 1.6 2023/10/17 15:09:18 tnn Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_gpio.c,v 1.5 2021/08/07 16:18:45 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_gpio.c,v 1.6 2023/10/17 15:09:18 tnn Exp $");
 
 #include 
 #include 
@@ -90,30 +90,12 @@ static void	rk_gpio_attach(device_t, dev
 CFATTACH_DECL_NEW(rk_gpio, sizeof(struct rk_gpio_softc),
 	rk_gpio_match, rk_gpio_attach, NULL, NULL);
 
-static int
-rk_gpio_ctl(struct rk_gpio_softc *sc, u_int pin, int flags)
-{
-	uint32_t ddr;
-
-	KASSERT(mutex_owned(&sc->sc_lock));
-
-	ddr = RD4(sc, GPIO_SWPORTA_DDR_REG);
-	if (flags & GPIO_PIN_INPUT)
-		ddr &= ~__BIT(pin);
-	else if (flags & GPIO_PIN_OUTPUT)
-		ddr |= __BIT(pin);
-	WR4(sc, GPIO_SWPORTA_DDR_REG, ddr);
-
-	return 0;
-}
-
 static void *
 rk_gpio_acquire(device_t dev, const void *data, size_t len, int flags)
 {
 	struct rk_gpio_softc * const sc = device_private(dev);
 	struct rk_gpio_pin *gpin;
 	const u_int *gpio = data;
-	int error;
 
 	if (len != 12)
 		return NULL;
@@ -124,12 +106,7 @@ rk_gpio_acquire(device_t dev, const void
 	if (pin >= __arraycount(sc->sc_pins))
 		return NULL;
 
-	mutex_enter(&sc->sc_lock);
-	error = rk_gpio_ctl(sc, pin, flags);
-	mutex_exit(&sc->sc_lock);
-
-	if (error != 0)
-		return NULL;
+	sc->sc_gp.gp_pin_ctl(sc, pin, flags);
 
 	gpin = kmem_zalloc(sizeof(*gpin), KM_SLEEP);
 	gpin->pin_sc = sc;
@@ -146,9 +123,9 @@ rk_gpio_release(device_t dev, void *priv
 	struct rk_gpio_softc * const sc = device_private(dev);
 	struct rk_gpio_pin *pin = priv;
 
-	mutex_enter(&sc->sc_lock);
-	rk_gpio_ctl(pin->pin_sc, pin->pin_nr, GPIO_PIN_INPUT);
-	mutex_exit(&sc->sc_lock);
+	KASSERT(sc == pin->pin_sc);
+
+	sc->sc_gp.gp_pin_ctl(sc, pin->pin_nr, GPIO_PIN_INPUT);
 
 	kmem_free(pin, sizeof(*pin));
 }
@@ -158,16 +135,11 @@ rk_gpio_read(device_t dev, void *priv, b
 {
 	struct rk_gpio_softc * const sc = device_private(dev);
 	struct rk_gpio_pin *pin = priv;
-	uint32_t data;
 	int val;
 
 	KASSERT(sc == pin->pin_sc);
 
-	const uint32_t data_mask = __BIT(pin->pin_nr);
-
-	/* No lock required for reads */
-	data = RD4(sc, GPIO_EXT_PORTA_REG);
-	val = __SHIFTOUT(data, data_mask);
+	val = sc->sc_gp.gp_pin_read(sc, pin->pin_nr);
 	if (!raw && pin->pin_actlo)
 		val = !val;
 
@@ -179,23 +151,13 @@ rk_gpio_write(device_t dev, void *priv, 
 {
 	struct rk_gpio_softc * const sc = device_private(dev);
 	struct rk_gpio_pin *pin = priv;
-	uint32_t data;
 
 	KASSERT(sc == pin->pin_sc);
 
-	const uint32_t data_mask = __BIT(pin->pin_nr);
-
 	if (!raw && pin->pin_actlo)
 		val = !val;
 
-	mutex_enter(&sc->sc_lock);
-	data = RD4(sc, GPIO_SWPORTA_DR_REG);
-	if (val)
-		data |= data_mask;
-	else
-		data &= ~data_mask;
-	WR4(sc, GPIO_SWPORTA_DR_REG, data);
-	mutex_exit(&sc->sc_lock);
+	sc->sc_gp.gp_pin_write(sc, pin->pin_nr, val);
 }
 
 static struct fdtbus_gpio_controller_func rk_gpio_funcs = {
@@ -247,11 +209,17 @@ static void
 rk_gpio_pin_ctl(void *priv, int pin, int flags)
 {
 	struct rk_gpio_softc * const sc = priv;
+	uint32_t ddr;
 
 	KASSERT(pin < __arraycount(sc->sc_pins));
 
 	mutex_enter(&sc->sc_lock);
-	rk_gpio_ctl(sc, pin, flags);
+	ddr = RD4(sc, GPIO_SWPORTA_DDR_REG);
+	if (flags & GPIO_PIN_INPUT)
+		ddr &= ~__BIT(pin);
+	else if (flags & GPIO_PIN_OUTPUT)
+		ddr |= __BIT(pin);
+	WR4(sc, GPIO_SWPORTA_DDR_REG, ddr);
 	mutex_exit(&sc->sc_lock);
 }
 



CVS commit: src/sys/arch/arm/rockchip

2023-04-11 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Apr 11 08:40:20 UTC 2023

Modified Files:
src/sys/arch/arm/rockchip: rk_dwhdmi.c

Log Message:
arm/rockchip: Omit needless functions.


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/rockchip/rk_dwhdmi.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_dwhdmi.c
diff -u src/sys/arch/arm/rockchip/rk_dwhdmi.c:1.7 src/sys/arch/arm/rockchip/rk_dwhdmi.c:1.8
--- src/sys/arch/arm/rockchip/rk_dwhdmi.c:1.7	Sun Dec 19 11:01:10 2021
+++ src/sys/arch/arm/rockchip/rk_dwhdmi.c	Tue Apr 11 08:40:19 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_dwhdmi.c,v 1.7 2021/12/19 11:01:10 riastradh Exp $ */
+/* $NetBSD: rk_dwhdmi.c,v 1.8 2023/04/11 08:40:19 riastradh Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared D. McNeill 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_dwhdmi.c,v 1.7 2021/12/19 11:01:10 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_dwhdmi.c,v 1.8 2023/04/11 08:40:19 riastradh Exp $");
 
 #include 
 #include 
@@ -106,54 +106,21 @@ rk_dwhdmi_select_input(struct rk_dwhdmi_
 	syscon_unlock(sc->sc_grf);
 }
 
-static bool
-rk_dwhdmi_encoder_mode_fixup(struct drm_encoder *encoder,
-const struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode)
-{
-	return true;
-}
-
-static void
-rk_dwhdmi_encoder_mode_set(struct drm_encoder *encoder,
-struct drm_display_mode *mode, struct drm_display_mode *adjusted)
-{
-}
-
 static void
 rk_dwhdmi_encoder_enable(struct drm_encoder *encoder)
 {
-}
-
-static void
-rk_dwhdmi_encoder_disable(struct drm_encoder *encoder)
-{
-}
-
-static void
-rk_dwhdmi_encoder_prepare(struct drm_encoder *encoder)
-{
 	struct rk_dwhdmi_softc * const sc = to_rk_dwhdmi_encoder(encoder);
 	const u_int crtc_index = drm_crtc_index(encoder->crtc);
 
 	rk_dwhdmi_select_input(sc, crtc_index);
 }
 
-static void
-rk_dwhdmi_encoder_commit(struct drm_encoder *encoder)
-{
-}
-
 static const struct drm_encoder_funcs rk_dwhdmi_encoder_funcs = {
 	.destroy = drm_encoder_cleanup,
 };
 
 static const struct drm_encoder_helper_funcs rk_dwhdmi_encoder_helper_funcs = {
-	.prepare = rk_dwhdmi_encoder_prepare,
-	.mode_fixup = rk_dwhdmi_encoder_mode_fixup,
-	.mode_set = rk_dwhdmi_encoder_mode_set,
 	.enable = rk_dwhdmi_encoder_enable,
-	.disable = rk_dwhdmi_encoder_disable,
-	.commit = rk_dwhdmi_encoder_commit,
 };
 
 static int



CVS commit: src/sys/arch/arm/rockchip

2023-04-11 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Tue Apr 11 08:40:20 UTC 2023

Modified Files:
src/sys/arch/arm/rockchip: rk_dwhdmi.c

Log Message:
arm/rockchip: Omit needless functions.


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/rockchip/rk_dwhdmi.c

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



CVS commit: src/sys/arch/arm/rockchip

2022-11-19 Thread YAMAMOTO Takashi
Module Name:src
Committed By:   yamt
Date:   Sat Nov 19 09:17:57 UTC 2022

Modified Files:
src/sys/arch/arm/rockchip: files.rockchip

Log Message:
arm/rockchip: fix build w/o MULTIPROCESSOR


To generate a diff of this commit:
cvs rdiff -u -r1.28 -r1.29 src/sys/arch/arm/rockchip/files.rockchip

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/files.rockchip
diff -u src/sys/arch/arm/rockchip/files.rockchip:1.28 src/sys/arch/arm/rockchip/files.rockchip:1.29
--- src/sys/arch/arm/rockchip/files.rockchip:1.28	Tue Aug 23 05:40:46 2022
+++ src/sys/arch/arm/rockchip/files.rockchip	Sat Nov 19 09:17:57 2022
@@ -1,4 +1,4 @@
-#	$NetBSD: files.rockchip,v 1.28 2022/08/23 05:40:46 ryo Exp $
+#	$NetBSD: files.rockchip,v 1.29 2022/11/19 09:17:57 yamt Exp $
 #
 # Configuration info for Rockchip family SoCs
 #
@@ -6,7 +6,7 @@
 
 file	arch/arm/rockchip/rk_platform.c		soc_rockchip
 
-file	arch/arm/rockchip/rk3066_smp.c		soc_rk3288
+file	arch/arm/rockchip/rk3066_smp.c		soc_rk3288 & multiprocessor
 
 # Clock and reset unit (CRU)
 device	rkcru: rk_cru



CVS commit: src/sys/arch/arm/rockchip

2022-11-19 Thread YAMAMOTO Takashi
Module Name:src
Committed By:   yamt
Date:   Sat Nov 19 09:17:57 UTC 2022

Modified Files:
src/sys/arch/arm/rockchip: files.rockchip

Log Message:
arm/rockchip: fix build w/o MULTIPROCESSOR


To generate a diff of this commit:
cvs rdiff -u -r1.28 -r1.29 src/sys/arch/arm/rockchip/files.rockchip

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



CVS commit: src/sys/arch/arm/rockchip

2022-10-30 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sun Oct 30 23:10:43 UTC 2022

Modified Files:
src/sys/arch/arm/rockchip: rk_drm.c

Log Message:
Remove dirty fb IOCTL callback introduced in latest drm update.

Not sure how this got here, but the rkdrm driver does not need to do
damage tracking as it uses Normal-NC (uncached) mappings.

PR# port-arm/56596


To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 src/sys/arch/arm/rockchip/rk_drm.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_drm.c
diff -u src/sys/arch/arm/rockchip/rk_drm.c:1.20 src/sys/arch/arm/rockchip/rk_drm.c:1.21
--- src/sys/arch/arm/rockchip/rk_drm.c:1.20	Sun Sep 25 07:50:15 2022
+++ src/sys/arch/arm/rockchip/rk_drm.c	Sun Oct 30 23:10:43 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_drm.c,v 1.20 2022/09/25 07:50:15 riastradh Exp $ */
+/* $NetBSD: rk_drm.c,v 1.21 2022/10/30 23:10:43 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared D. McNeill 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_drm.c,v 1.20 2022/09/25 07:50:15 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_drm.c,v 1.21 2022/10/30 23:10:43 jmcneill Exp $");
 
 #include 
 #include 
@@ -255,7 +255,6 @@ rk_drm_fb_destroy(struct drm_framebuffer
 static const struct drm_framebuffer_funcs rk_drm_framebuffer_funcs = {
 	.create_handle = rk_drm_fb_create_handle,
 	.destroy = rk_drm_fb_destroy,
-	.dirty = drm_atomic_helper_dirtyfb,
 };
 
 static struct drm_framebuffer *



CVS commit: src/sys/arch/arm/rockchip

2022-10-30 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sun Oct 30 23:10:43 UTC 2022

Modified Files:
src/sys/arch/arm/rockchip: rk_drm.c

Log Message:
Remove dirty fb IOCTL callback introduced in latest drm update.

Not sure how this got here, but the rkdrm driver does not need to do
damage tracking as it uses Normal-NC (uncached) mappings.

PR# port-arm/56596


To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 src/sys/arch/arm/rockchip/rk_drm.c

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



CVS commit: src/sys/arch/arm/rockchip

2022-09-25 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Sep 25 07:50:15 UTC 2022

Modified Files:
src/sys/arch/arm/rockchip: rk_drm.c rk_fb.c

Log Message:
rkdrm: Set is_console on the drm device, not the fb child.

The drm device is represented by a rockchip,display-subsystem node in
the device tree.  The fb child is a purely software abstraction used
by drm.

The is_console property is used by MD firmware logic to mark which
actual device in hardware bus enumeration like PCI or FDT the system
has chosen for the console early at boot, so hanging it on the node
for the real hardware device makes more sense than hanging it on the
software abstraction, and is consistent with recent changes to drmfb
to respect its setting on other platforms for hardware devices.


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/sys/arch/arm/rockchip/rk_drm.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/rockchip/rk_fb.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_drm.c
diff -u src/sys/arch/arm/rockchip/rk_drm.c:1.19 src/sys/arch/arm/rockchip/rk_drm.c:1.20
--- src/sys/arch/arm/rockchip/rk_drm.c:1.19	Thu Apr 21 21:22:25 2022
+++ src/sys/arch/arm/rockchip/rk_drm.c	Sun Sep 25 07:50:15 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_drm.c,v 1.19 2022/04/21 21:22:25 andvar Exp $ */
+/* $NetBSD: rk_drm.c,v 1.20 2022/09/25 07:50:15 riastradh Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared D. McNeill 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_drm.c,v 1.19 2022/04/21 21:22:25 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_drm.c,v 1.20 2022/09/25 07:50:15 riastradh Exp $");
 
 #include 
 #include 
@@ -133,6 +133,11 @@ rk_drm_attach(device_t parent, device_t 
 
 	aprint_normal("\n");
 
+#ifdef WSDISPLAY_MULTICONS
+	const bool is_console = true;
+	prop_dictionary_set_bool(dict, "is_console", is_console);
+#endif
+
 	sc->sc_dev = self;
 	sc->sc_dmat = faa->faa_dmat;
 	sc->sc_bst = faa->faa_bst;

Index: src/sys/arch/arm/rockchip/rk_fb.c
diff -u src/sys/arch/arm/rockchip/rk_fb.c:1.6 src/sys/arch/arm/rockchip/rk_fb.c:1.7
--- src/sys/arch/arm/rockchip/rk_fb.c:1.6	Sun Dec 19 12:45:19 2021
+++ src/sys/arch/arm/rockchip/rk_fb.c	Sun Sep 25 07:50:15 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_fb.c,v 1.6 2021/12/19 12:45:19 riastradh Exp $ */
+/* $NetBSD: rk_fb.c,v 1.7 2022/09/25 07:50:15 riastradh Exp $ */
 
 /*-
  * Copyright (c) 2015-2019 Jared McNeill 
@@ -29,7 +29,7 @@
 #include "opt_wsdisplay_compat.h"
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_fb.c,v 1.6 2021/12/19 12:45:19 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_fb.c,v 1.7 2022/09/25 07:50:15 riastradh Exp $");
 
 #include 
 #include 
@@ -88,12 +88,6 @@ rk_fb_attach(device_t parent, device_t s
 	aprint_naive("\n");
 	aprint_normal("\n");
 
-#ifdef WSDISPLAY_MULTICONS
-	prop_dictionary_t dict = device_properties(self);
-	const bool is_console = true;
-	prop_dictionary_set_bool(dict, "is_console", is_console);
-#endif
-
 	rk_task_init(&sc->sc_attach_task, &rk_fb_init);
 	rk_task_schedule(parent, &sc->sc_attach_task);
 }



CVS commit: src/sys/arch/arm/rockchip

2022-09-25 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Sep 25 07:50:15 UTC 2022

Modified Files:
src/sys/arch/arm/rockchip: rk_drm.c rk_fb.c

Log Message:
rkdrm: Set is_console on the drm device, not the fb child.

The drm device is represented by a rockchip,display-subsystem node in
the device tree.  The fb child is a purely software abstraction used
by drm.

The is_console property is used by MD firmware logic to mark which
actual device in hardware bus enumeration like PCI or FDT the system
has chosen for the console early at boot, so hanging it on the node
for the real hardware device makes more sense than hanging it on the
software abstraction, and is consistent with recent changes to drmfb
to respect its setting on other platforms for hardware devices.


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/sys/arch/arm/rockchip/rk_drm.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/rockchip/rk_fb.c

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



CVS commit: src/sys/arch/arm/rockchip

2022-09-18 Thread Ryo Shimizu
Module Name:src
Committed By:   ryo
Date:   Sun Sep 18 21:33:57 UTC 2022

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

Log Message:
KNF. 80 columns, use tab. NFC.


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/rockchip/rk_cru.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.9 src/sys/arch/arm/rockchip/rk_cru.c:1.10
--- src/sys/arch/arm/rockchip/rk_cru.c:1.9	Sat Nov 17 16:51:51 2018
+++ src/sys/arch/arm/rockchip/rk_cru.c	Sun Sep 18 21:33:57 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_cru.c,v 1.9 2018/11/17 16:51:51 jakllsch Exp $ */
+/* $NetBSD: rk_cru.c,v 1.10 2022/09/18 21:33:57 ryo Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -30,7 +30,7 @@
 #include "opt_console.h"
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_cru.c,v 1.9 2018/11/17 16:51:51 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_cru.c,v 1.10 2022/09/18 21:33:57 ryo Exp $");
 
 #include 
 #include 
@@ -144,7 +144,8 @@ rk_cru_clock_get_rate(void *priv, struct
 
 	clkp_parent = clk_get_parent(clkp);
 	if (clkp_parent == NULL) {
-		aprint_debug("%s: no parent for %s\n", __func__, clk->base.name);
+		aprint_debug("%s: no parent for %s\n", __func__,
+		clk->base.name);
 		return 0;
 	}
 
@@ -161,7 +162,8 @@ rk_cru_clock_set_rate(void *priv, struct
 	if (clkp->flags & CLK_SET_RATE_PARENT) {
 		clkp_parent = clk_get_parent(clkp);
 		if (clkp_parent == NULL) {
-			aprint_error("%s: no parent for %s\n", __func__, clk->base.name);
+			aprint_error("%s: no parent for %s\n", __func__,
+			clk->base.name);
 			return ENXIO;
 		}
 		return clk_set_rate(clkp_parent, rate);
@@ -183,7 +185,8 @@ rk_cru_clock_round_rate(void *priv, stru
 	if (clkp->flags & CLK_SET_RATE_PARENT) {
 		clkp_parent = clk_get_parent(clkp);
 		if (clkp_parent == NULL) {
-			aprint_error("%s: no parent for %s\n", __func__, clk->base.name);
+			aprint_error("%s: no parent for %s\n", __func__,
+			clk->base.name);
 			return 0;
 		}
 		return clk_round_rate(clkp_parent, rate);
@@ -230,8 +233,7 @@ rk_cru_clock_disable(void *priv, struct 
 }
 
 static int
-rk_cru_clock_set_parent(void *priv, struct clk *clkp,
-struct clk *clkp_parent)
+rk_cru_clock_set_parent(void *priv, struct clk *clkp, struct clk *clkp_parent)
 {
 	struct rk_cru_softc * const sc = priv;
 	struct rk_cru_clk *clk = (struct rk_cru_clk *)clkp;
@@ -298,7 +300,8 @@ rk_cru_attach(struct rk_cru_softc *sc)
 	int i;
 
 	if (of_hasprop(sc->sc_phandle, "rockchip,grf")) {
-		sc->sc_grf = fdtbus_syscon_acquire(sc->sc_phandle, "rockchip,grf");
+		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;
@@ -355,13 +358,13 @@ rk_cru_print(struct rk_cru_softc *sc)
 		default:			type = "???"; break;
 		}
 
-	aprint_debug_dev(sc->sc_dev,
+		aprint_debug_dev(sc->sc_dev,
 		"%3d %-14s %2s %-14s %-7s ",
 		clk->id,
-	clk->base.name,
-	clkp_parent ? "<-" : "",
-	clkp_parent ? clkp_parent->name : "",
-	type);
+		clk->base.name,
+		clkp_parent ? "<-" : "",
+		clkp_parent ? clkp_parent->name : "",
+		type);
 		aprint_debug("%10d Hz\n", clk_get_rate(&clk->base));
 	}
 }



CVS commit: src/sys/arch/arm/rockchip

2022-09-18 Thread Ryo Shimizu
Module Name:src
Committed By:   ryo
Date:   Sun Sep 18 21:33:57 UTC 2022

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

Log Message:
KNF. 80 columns, use tab. NFC.


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/rockchip/rk_cru.c

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



CVS commit: src/sys/arch/arm/rockchip

2022-08-22 Thread Ryo Shimizu
Module Name:src
Committed By:   ryo
Date:   Tue Aug 23 05:33:39 UTC 2022

Modified Files:
src/sys/arch/arm/rockchip: rk3399_cru.c rk_cru.h rk_cru_arm.c

Log Message:
- change struct rk_cru_arm and RK_CPU macros to allow mux and div registers to 
be specified independently.
  Allow more div-regs to be specified in the future.
- commonize RK*_PLL() macro.


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/sys/arch/arm/rockchip/rk3399_cru.c
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/rockchip/rk_cru.h
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/rockchip/rk_cru_arm.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/rk3399_cru.c
diff -u src/sys/arch/arm/rockchip/rk3399_cru.c:1.24 src/sys/arch/arm/rockchip/rk3399_cru.c:1.25
--- src/sys/arch/arm/rockchip/rk3399_cru.c:1.24	Tue Aug 23 05:32:18 2022
+++ src/sys/arch/arm/rockchip/rk3399_cru.c	Tue Aug 23 05:33:39 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3399_cru.c,v 1.24 2022/08/23 05:32:18 ryo Exp $ */
+/* $NetBSD: rk3399_cru.c,v 1.25 2022/08/23 05:33:39 ryo Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -28,7 +28,7 @@
 
 #include 
 
-__KERNEL_RCSID(1, "$NetBSD: rk3399_cru.c,v 1.24 2022/08/23 05:32:18 ryo Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk3399_cru.c,v 1.25 2022/08/23 05:33:39 ryo Exp $");
 
 #include 
 #include 
@@ -440,8 +440,9 @@ static struct rk_cru_clk rk3399_cru_clks
 	RK_GATE(0, "clk_core_l_gpll_src", "gpll", CLKGATE_CON(0), 3),
 
 	RK_CPU(RK3399_ARMCLKL, "armclkl", armclkl_parents,
-	   CLKSEL_CON(0),		/* reg */
+	   CLKSEL_CON(0),		/* mux_reg */
 	   __BITS(7,6), 0, 3,	/* mux_mask, mux_main, mux_alt */
+	   CLKSEL_CON(0),		/* div_reg */
 	   __BITS(4,0),		/* div_mask */
 	   armclkl_rates),
 
@@ -451,8 +452,9 @@ static struct rk_cru_clk rk3399_cru_clks
 	RK_GATE(0, "clk_core_b_gpll_src", "gpll", CLKGATE_CON(1), 3),
 
 	RK_CPU(RK3399_ARMCLKB, "armclkb", armclkb_parents,
-	   CLKSEL_CON(2),		/* reg */
+	   CLKSEL_CON(2),		/* mux_reg */
 	   __BITS(7,6), 1, 3,	/* mux_mask, mux_main, mux_alt */
+	   CLKSEL_CON(2),		/* div_reg */
 	   __BITS(4,0),		/* div_mask */
 	   armclkb_rates),
 

Index: src/sys/arch/arm/rockchip/rk_cru.h
diff -u src/sys/arch/arm/rockchip/rk_cru.h:1.9 src/sys/arch/arm/rockchip/rk_cru.h:1.10
--- src/sys/arch/arm/rockchip/rk_cru.h:1.9	Tue Aug 23 05:32:18 2022
+++ src/sys/arch/arm/rockchip/rk_cru.h	Tue Aug 23 05:33:39 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_cru.h,v 1.9 2022/08/23 05:32:18 ryo Exp $ */
+/* $NetBSD: rk_cru.h,v 1.10 2022/08/23 05:33:39 ryo Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -88,7 +88,7 @@ u_int	rk_cru_pll_get_rate(struct rk_cru_
 int	rk_cru_pll_set_rate(struct rk_cru_softc *, struct rk_cru_clk *, u_int);
 const char *rk_cru_pll_get_parent(struct rk_cru_softc *, struct rk_cru_clk *);
 
-#define	RK_PLL(_id, _name, _parents, _con_base, _mode_reg, _mode_mask, _lock_mask, _rates) \
+#define	RK_PLL_FLAGS(_id, _name, _parents, _con_base, _mode_reg, _mode_mask, _lock_mask, _rates, _flags) \
 	{			\
 		.id = (_id),	\
 		.type = RK_CRU_PLL,\
@@ -102,31 +102,17 @@ const char *rk_cru_pll_get_parent(struct
 		.u.pll.lock_mask = (_lock_mask),		\
 		.u.pll.rates = (_rates),			\
 		.u.pll.nrates = __arraycount(_rates),		\
-		.u.pll.flags = 0,\
+		.u.pll.flags = _flags,\
 		.get_rate = rk_cru_pll_get_rate,		\
 		.set_rate = rk_cru_pll_set_rate,		\
 		.get_parent = rk_cru_pll_get_parent,		\
 	}
 
+#define	RK_PLL(_id, _name, _parents, _con_base, _mode_reg, _mode_mask, _lock_mask, _rates) \
+	RK_PLL_FLAGS(_id, _name, _parents, _con_base, _mode_reg, _mode_mask, _lock_mask, _rates, 0)
+
 #define	RK3288_PLL(_id, _name, _parents, _con_base, _mode_reg, _mode_mask, _lock_mask, _rates) \
-	{			\
-		.id = (_id),	\
-		.type = RK_CRU_PLL,\
-		.base.name = (_name),\
-		.base.flags = 0,\
-		.u.pll.parents = (_parents),			\
-		.u.pll.nparents = __arraycount(_parents),	\
-		.u.pll.con_base = (_con_base),			\
-		.u.pll.mode_reg = (_mode_reg),			\
-		.u.pll.mode_mask = (_mode_mask),		\
-		.u.pll.lock_mask = (_lock_mask),		\
-		.u.pll.rates = (_rates),			\
-		.u.pll.nrates = __arraycount(_rates),		\
-		.u.pll.flags = RK_PLL_RK3288,			\
-		.get_rate = rk_cru_pll_get_rate,		\
-		.set_rate = rk_cru_pll_set_rate,		\
-		.get_parent = rk_cru_pll_get_parent,		\
-	}
+	RK_PLL_FLAGS(_id, _name, _parents, _con_base, _mode_reg, _mode_mask, _lock_mask, _rates, RK_PLL_RK3288)
 
 /* ARM clocks */
 
@@ -152,12 +138,17 @@ struct rk_cru_cpu_rate {
 	struct rk_regmaskval	divs[2];
 };
 
-struct rk_cru_arm {
+struct rk_regmask {
 	bus_size_t	reg;
+	uint32_t	mask;
+};
+
+struct rk_cru_arm {
+	bus_size_t	mux_reg;
 	uint32_t	mux_mask;
 	u_int		mux_main;
 	u_int		mux_alt;
-	uint32_t	div_mask;
+	struct rk_regmask divs[1];
 	const char	**parents;
 	u_int		nparents;
 	const struct rk_cru_arm_rate *rates;
@@ -179,11 +170,12 @@ int	rk_

CVS commit: src/sys/arch/arm/rockchip

2022-08-22 Thread Ryo Shimizu
Module Name:src
Committed By:   ryo
Date:   Tue Aug 23 05:33:39 UTC 2022

Modified Files:
src/sys/arch/arm/rockchip: rk3399_cru.c rk_cru.h rk_cru_arm.c

Log Message:
- change struct rk_cru_arm and RK_CPU macros to allow mux and div registers to 
be specified independently.
  Allow more div-regs to be specified in the future.
- commonize RK*_PLL() macro.


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/sys/arch/arm/rockchip/rk3399_cru.c
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/rockchip/rk_cru.h
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/rockchip/rk_cru_arm.c

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



CVS commit: src/sys/arch/arm/rockchip

2022-08-22 Thread Ryo Shimizu
Module Name:src
Committed By:   ryo
Date:   Tue Aug 23 05:32:18 UTC 2022

Modified Files:
src/sys/arch/arm/rockchip: rk3399_cru.c rk_cru.h rk_cru_arm.c

Log Message:
Make .reg1 and .reg2 of struct rk_cru_cpu_rate into array, and change the type 
of those to bus_size_t and uint32_t.
Array size may increase in the future.


To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 src/sys/arch/arm/rockchip/rk3399_cru.c
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/rockchip/rk_cru.h
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/rockchip/rk_cru_arm.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/rk3399_cru.c
diff -u src/sys/arch/arm/rockchip/rk3399_cru.c:1.23 src/sys/arch/arm/rockchip/rk3399_cru.c:1.24
--- src/sys/arch/arm/rockchip/rk3399_cru.c:1.23	Fri Nov 12 22:02:08 2021
+++ src/sys/arch/arm/rockchip/rk3399_cru.c	Tue Aug 23 05:32:18 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3399_cru.c,v 1.23 2021/11/12 22:02:08 jmcneill Exp $ */
+/* $NetBSD: rk3399_cru.c,v 1.24 2022/08/23 05:32:18 ryo Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -28,7 +28,7 @@
 
 #include 
 
-__KERNEL_RCSID(1, "$NetBSD: rk3399_cru.c,v 1.23 2021/11/12 22:02:08 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk3399_cru.c,v 1.24 2022/08/23 05:32:18 ryo Exp $");
 
 #include 
 #include 
@@ -143,15 +143,22 @@ static const struct rk_cru_pll_rate pll_
 #define	RK3399_ATCLK_MASK	__BITS(4,0)
 #define	RK3399_PDBG_MASK	__BITS(12,8)
 
+#define RK3399_CPU_RATE(_rate, _reg0, _reg0_mask, _reg0_val, _reg1, _reg1_mask, _reg1_val)\
+	{		\
+		.rate = (_rate),			\
+		.divs[0] = { .reg = (_reg0), .mask = (_reg0_mask), .val = (_reg0_val) },\
+		.divs[1] = { .reg = (_reg1), .mask = (_reg1_mask), .val = (_reg1_val) },\
+	}
+
 #define	RK3399_CPUL_RATE(_rate, _aclkm, _atclk, _pdbg)			\
-	RK_CPU_RATE(_rate,		\
+	RK3399_CPU_RATE(_rate,		\
 		CLKSEL_CON(0), RK3399_ACLKM_MASK,			\
 		__SHIFTIN((_aclkm), RK3399_ACLKM_MASK),		\
 		CLKSEL_CON(1), RK3399_ATCLK_MASK|RK3399_PDBG_MASK,	\
 		__SHIFTIN((_atclk), RK3399_ATCLK_MASK)|__SHIFTIN((_pdbg), RK3399_PDBG_MASK))
 
 #define	RK3399_CPUB_RATE(_rate, _aclkm, _atclk, _pdbg)			\
-	RK_CPU_RATE(_rate,		\
+	RK3399_CPU_RATE(_rate,		\
 		CLKSEL_CON(2), RK3399_ACLKM_MASK,			\
 		__SHIFTIN((_aclkm), RK3399_ACLKM_MASK),		\
 		CLKSEL_CON(3), RK3399_ATCLK_MASK|RK3399_PDBG_MASK,	\

Index: src/sys/arch/arm/rockchip/rk_cru.h
diff -u src/sys/arch/arm/rockchip/rk_cru.h:1.8 src/sys/arch/arm/rockchip/rk_cru.h:1.9
--- src/sys/arch/arm/rockchip/rk_cru.h:1.8	Fri Nov 12 22:02:08 2021
+++ src/sys/arch/arm/rockchip/rk_cru.h	Tue Aug 23 05:32:18 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_cru.h,v 1.8 2021/11/12 22:02:08 jmcneill Exp $ */
+/* $NetBSD: rk_cru.h,v 1.9 2022/08/23 05:32:18 ryo Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -141,18 +141,16 @@ struct rk_cru_arm_rate {
 		.div = (_div),	\
 	}
 
-struct rk_cru_cpu_rate {
-	u_int		rate;
-	u_int		reg1, reg1_mask, reg1_val;
-	u_int		reg2, reg2_mask, reg2_val;
+struct rk_regmaskval {
+	bus_size_t	reg;
+	uint32_t	mask;
+	uint32_t	val;
 };
 
-#define	RK_CPU_RATE(_rate, _reg1, _reg1_mask, _reg1_val, _reg2, _reg2_mask, _reg2_val)	\
-	{		\
-		.rate = (_rate),			\
-		.reg1 = (_reg1), .reg1_mask = (_reg1_mask), .reg1_val = (_reg1_val),	\
-		.reg2 = (_reg2), .reg2_mask = (_reg2_mask), .reg2_val = (_reg2_val),	\
-	}
+struct rk_cru_cpu_rate {
+	u_int			rate;
+	struct rk_regmaskval	divs[2];
+};
 
 struct rk_cru_arm {
 	bus_size_t	reg;

Index: src/sys/arch/arm/rockchip/rk_cru_arm.c
diff -u src/sys/arch/arm/rockchip/rk_cru_arm.c:1.2 src/sys/arch/arm/rockchip/rk_cru_arm.c:1.3
--- src/sys/arch/arm/rockchip/rk_cru_arm.c:1.2	Sat Sep  1 19:35:53 2018
+++ src/sys/arch/arm/rockchip/rk_cru_arm.c	Tue Aug 23 05:32:18 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_cru_arm.c,v 1.2 2018/09/01 19:35:53 jmcneill Exp $ */
+/* $NetBSD: rk_cru_arm.c,v 1.3 2022/08/23 05:32:18 ryo Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_cru_arm.c,v 1.2 2018/09/01 19:35:53 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_cru_arm.c,v 1.3 2022/08/23 05:32:18 ryo Exp $");
 
 #include 
 #include 
@@ -147,13 +147,11 @@ rk_cru_arm_set_rate_cpurates(struct rk_c
 	if (error != 0)
 		goto done;
 
-	write_mask = cpu_rate->reg1_mask << 16;
-	write_val = cpu_rate->reg1_val;
-	CRU_WRITE(sc, cpu_rate->reg1, write_mask | write_val);
-
-	write_mask = cpu_rate->reg2_mask << 16;
-	write_val = cpu_rate->reg2_val;
-	CRU_WRITE(sc, cpu_rate->reg2, write_mask | write_val);
+	for (int i = 0; i < __arraycount(cpu_rate->divs); i++) {
+		write_mask = cpu_rate->divs[i].mask << 16;
+		write_val = cpu_rate->divs[i].val;
+		CRU_WRITE(sc, cpu_rate->divs[i].reg, write_mask | write_val);
+	}
 
 	write_mask = arm->div_mask << 16;
 	write_val = __SHIFTIN(0, arm->div_mask);



CVS commit: src/sys/arch/arm/rockchip

2022-08-22 Thread Ryo Shimizu
Module Name:src
Committed By:   ryo
Date:   Tue Aug 23 05:32:18 UTC 2022

Modified Files:
src/sys/arch/arm/rockchip: rk3399_cru.c rk_cru.h rk_cru_arm.c

Log Message:
Make .reg1 and .reg2 of struct rk_cru_cpu_rate into array, and change the type 
of those to bus_size_t and uint32_t.
Array size may increase in the future.


To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 src/sys/arch/arm/rockchip/rk3399_cru.c
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/rockchip/rk_cru.h
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/rockchip/rk_cru_arm.c

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



CVS commit: src/sys/arch/arm/rockchip

2022-05-13 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri May 13 09:49:44 UTC 2022

Modified Files:
src/sys/arch/arm/rockchip: rk_v1crypto.c

Log Message:
rkv1crypto(4): Fix units in RNG repeated-output health test.

This code was intended to check whether the two 4-word halves of an
8-word, 32-byte, 256-bit sample were repeated.

Instead, it accidentally checked whether the first 4 _bytes_ of the
two halves were repeated.

The effect was a false alarm rate of 1/2^32, instead of a false alarm
rate of 1/2^128, with no change on the true alarm rate in the event
of an RNG wedged producing all-zero or all-one bits.  1/2^128 is an
acceptable false alarm rate; 1/2^32, not so much.

(The false alarm right might be higher if the samples are not
perfectly uniformly distributed, which they most likey aren't,
although the documentation doesn't give any details other than
suggesting it's a ring oscillator under the hood, which provides
entropy from jitter induced by thermal noise.  This driver records
half a bit of entropy per bit of sample to be reasonably
conservative.)


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/rockchip/rk_v1crypto.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_v1crypto.c
diff -u src/sys/arch/arm/rockchip/rk_v1crypto.c:1.9 src/sys/arch/arm/rockchip/rk_v1crypto.c:1.10
--- src/sys/arch/arm/rockchip/rk_v1crypto.c:1.9	Fri Apr  8 23:14:21 2022
+++ src/sys/arch/arm/rockchip/rk_v1crypto.c	Fri May 13 09:49:44 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: rk_v1crypto.c,v 1.9 2022/04/08 23:14:21 riastradh Exp $	*/
+/*	$NetBSD: rk_v1crypto.c,v 1.10 2022/05/13 09:49:44 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
  */
 
 #include 
-__KERNEL_RCSID(1, "$NetBSD: rk_v1crypto.c,v 1.9 2022/04/08 23:14:21 riastradh Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk_v1crypto.c,v 1.10 2022/05/13 09:49:44 riastradh Exp $");
 
 #include 
 
@@ -268,7 +268,7 @@ rk_v1crypto_rng_get(size_t nbytes, void 
 			device_printf(self, "timed out\n");
 			break;
 		}
-		if (consttime_memequal(buf, buf + n/2, n/2)) {
+		if (consttime_memequal(buf, buf + n/2, sizeof(buf[0]) * n/2)) {
 			device_printf(self, "failed repeated output test\n");
 			break;
 		}



CVS commit: src/sys/arch/arm/rockchip

2022-05-13 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri May 13 09:49:44 UTC 2022

Modified Files:
src/sys/arch/arm/rockchip: rk_v1crypto.c

Log Message:
rkv1crypto(4): Fix units in RNG repeated-output health test.

This code was intended to check whether the two 4-word halves of an
8-word, 32-byte, 256-bit sample were repeated.

Instead, it accidentally checked whether the first 4 _bytes_ of the
two halves were repeated.

The effect was a false alarm rate of 1/2^32, instead of a false alarm
rate of 1/2^128, with no change on the true alarm rate in the event
of an RNG wedged producing all-zero or all-one bits.  1/2^128 is an
acceptable false alarm rate; 1/2^32, not so much.

(The false alarm right might be higher if the samples are not
perfectly uniformly distributed, which they most likey aren't,
although the documentation doesn't give any details other than
suggesting it's a ring oscillator under the hood, which provides
entropy from jitter induced by thermal noise.  This driver records
half a bit of entropy per bit of sample to be reasonably
conservative.)


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/rockchip/rk_v1crypto.c

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



CVS commit: src/sys/arch/arm/rockchip

2022-04-08 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri Apr  8 23:14:21 UTC 2022

Modified Files:
src/sys/arch/arm/rockchip: rk_v1crypto.c

Log Message:
rk_v1crypto(4): Fix missing `error =' assignment.

This is not likely to fail, but let's avoid suppressing an unlikely
error.


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/rockchip/rk_v1crypto.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_v1crypto.c
diff -u src/sys/arch/arm/rockchip/rk_v1crypto.c:1.8 src/sys/arch/arm/rockchip/rk_v1crypto.c:1.9
--- src/sys/arch/arm/rockchip/rk_v1crypto.c:1.8	Sat Mar 19 11:37:05 2022
+++ src/sys/arch/arm/rockchip/rk_v1crypto.c	Fri Apr  8 23:14:21 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: rk_v1crypto.c,v 1.8 2022/03/19 11:37:05 riastradh Exp $	*/
+/*	$NetBSD: rk_v1crypto.c,v 1.9 2022/04/08 23:14:21 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
  */
 
 #include 
-__KERNEL_RCSID(1, "$NetBSD: rk_v1crypto.c,v 1.8 2022/03/19 11:37:05 riastradh Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk_v1crypto.c,v 1.9 2022/04/08 23:14:21 riastradh Exp $");
 
 #include 
 
@@ -300,7 +300,7 @@ rk_v1crypto_sysctl_attach(struct rk_v1cr
 	}
 
 	/* hw.rkv1cryptoN.rng (`struct', 32-byte array) */
-	sysctl_createv(&cy->cy_log, 0, &cy->cy_root_node, NULL,
+	error = sysctl_createv(&cy->cy_log, 0, &cy->cy_root_node, NULL,
 	CTLFLAG_PERMANENT|CTLFLAG_READONLY|CTLFLAG_PRIVATE, CTLTYPE_STRUCT,
 	"rng", SYSCTL_DESCR("Read up to 32 bytes out of the TRNG"),
 	&rk_v1crypto_sysctl_rng, 0, sc, 0, CTL_CREATE, CTL_EOL);



CVS commit: src/sys/arch/arm/rockchip

2022-04-08 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri Apr  8 23:14:21 UTC 2022

Modified Files:
src/sys/arch/arm/rockchip: rk_v1crypto.c

Log Message:
rk_v1crypto(4): Fix missing `error =' assignment.

This is not likely to fail, but let's avoid suppressing an unlikely
error.


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/rockchip/rk_v1crypto.c

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



CVS commit: src/sys/arch/arm/rockchip

2021-12-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Mon Dec 20 00:27:17 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk_drm.c rk_vop.c

Log Message:
rkdrm: Implement vblank.


To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/arm/rockchip/rk_drm.c
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/arm/rockchip/rk_vop.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_drm.c
diff -u src/sys/arch/arm/rockchip/rk_drm.c:1.17 src/sys/arch/arm/rockchip/rk_drm.c:1.18
--- src/sys/arch/arm/rockchip/rk_drm.c:1.17	Sun Dec 19 12:45:04 2021
+++ src/sys/arch/arm/rockchip/rk_drm.c	Mon Dec 20 00:27:17 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_drm.c,v 1.17 2021/12/19 12:45:04 riastradh Exp $ */
+/* $NetBSD: rk_drm.c,v 1.18 2021/12/20 00:27:17 riastradh Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared D. McNeill 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_drm.c,v 1.17 2021/12/19 12:45:04 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_drm.c,v 1.18 2021/12/20 00:27:17 riastradh Exp $");
 
 #include 
 #include 
@@ -77,10 +77,6 @@ static void	rk_drm_attach(device_t, devi
 static void	rk_drm_init(device_t);
 static vmem_t	*rk_drm_alloc_cma_pool(struct drm_device *, size_t);
 
-static uint32_t	rk_drm_get_vblank_counter(struct drm_device *, unsigned int);
-static int	rk_drm_enable_vblank(struct drm_device *, unsigned int);
-static void	rk_drm_disable_vblank(struct drm_device *, unsigned int);
-
 static int	rk_drm_load(struct drm_device *, unsigned long);
 static void	rk_drm_unload(struct drm_device *);
 
@@ -99,10 +95,6 @@ static struct drm_driver rk_drm_driver =
 	.dumb_create = drm_gem_cma_dumb_create,
 	.dumb_destroy = drm_gem_dumb_destroy,
 
-	.get_vblank_counter = rk_drm_get_vblank_counter,
-	.enable_vblank = rk_drm_enable_vblank,
-	.disable_vblank = rk_drm_disable_vblank,
-
 	.name = DRIVER_NAME,
 	.desc = DRIVER_DESC,
 	.date = DRIVER_DATE,
@@ -440,7 +432,7 @@ rk_drm_load(struct drm_device *ddev, uns
 
 	drm_fb_helper_initial_config(&fbdev->helper, 32);
 
-	/* XXX */
+	/* XXX Delegate this to rk_vop.c?  */
 	ddev->irq_enabled = true;
 	drm_vblank_init(ddev, num_crtc);
 
@@ -454,50 +446,6 @@ drmerr:
 	return error;
 }
 
-static uint32_t
-rk_drm_get_vblank_counter(struct drm_device *ddev, unsigned int crtc)
-{
-	struct rk_drm_softc * const sc = rk_drm_private(ddev);
-
-	if (crtc >= __arraycount(sc->sc_vbl))
-		return 0;
-
-	if (sc->sc_vbl[crtc].get_vblank_counter == NULL)
-		return 0;
-
-	return sc->sc_vbl[crtc].get_vblank_counter(sc->sc_vbl[crtc].priv);
-}
-
-static int
-rk_drm_enable_vblank(struct drm_device *ddev, unsigned int crtc)
-{
-	struct rk_drm_softc * const sc = rk_drm_private(ddev);
-
-	if (crtc >= __arraycount(sc->sc_vbl))
-		return 0;
-
-	if (sc->sc_vbl[crtc].enable_vblank == NULL)
-		return 0;
-
-	sc->sc_vbl[crtc].enable_vblank(sc->sc_vbl[crtc].priv);
-
-	return 0;
-}
-
-static void
-rk_drm_disable_vblank(struct drm_device *ddev, unsigned int crtc)
-{
-	struct rk_drm_softc * const sc = rk_drm_private(ddev);
-
-	if (crtc >= __arraycount(sc->sc_vbl))
-		return;
-
-	if (sc->sc_vbl[crtc].disable_vblank == NULL)
-		return;
-
-	sc->sc_vbl[crtc].disable_vblank(sc->sc_vbl[crtc].priv);
-}
-
 static void
 rk_drm_unload(struct drm_device *ddev)
 {

Index: src/sys/arch/arm/rockchip/rk_vop.c
diff -u src/sys/arch/arm/rockchip/rk_vop.c:1.15 src/sys/arch/arm/rockchip/rk_vop.c:1.16
--- src/sys/arch/arm/rockchip/rk_vop.c:1.15	Sun Dec 19 12:45:27 2021
+++ src/sys/arch/arm/rockchip/rk_vop.c	Mon Dec 20 00:27:17 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_vop.c,v 1.15 2021/12/19 12:45:27 riastradh Exp $ */
+/* $NetBSD: rk_vop.c,v 1.16 2021/12/20 00:27:17 riastradh Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared D. McNeill 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_vop.c,v 1.15 2021/12/19 12:45:27 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_vop.c,v 1.16 2021/12/20 00:27:17 riastradh Exp $");
 
 #include 
 #include 
@@ -50,6 +50,7 @@ __KERNEL_RCSID(0, "$NetBSD: rk_vop.c,v 1
 #include 
 #include 
 #include 
+#include 
 
 #define	VOP_REG_CFG_DONE		0x
 #define	 REG_LOAD_EN			__BIT(0)
@@ -104,6 +105,26 @@ __KERNEL_RCSID(0, "$NetBSD: rk_vop.c,v 1
 #define	VOP_DSP_VACT_ST_END		0x0194
 #define	 DSP_VACT_ST			__BITS(28,16)
 #define	 DSP_VACT_END			__BITS(12,0)
+#define	VOP_INTR_EN0			0x0280
+#define	VOP_INTR_CLEAR0			0x0284
+#define	VOP_INTR_STATUS0		0x0288
+#define	VOP_INTR_RAW_STATUS0		0x028c
+#define	 VOP_INTR0_DMA_FINISH		__BIT(15)
+#define	 VOP_INTR0_MMU			__BIT(14)
+#define	 VOP_INTR0_DSP_HOLD_VALID	__BIT(13)
+#define	 VOP_INTR0_FS_FIELD		__BIT(12)
+#define	 VOP_INTR0_POST_BUF_EMPTY	__BIT(11)
+#define	 VOP_INTR0_HWC_EMPTY		__BIT(10)
+#define	 VOP_INTR0_WIN3_EMPTY		__BIT(9)
+#define	 VOP_INTR0_WIN2_EMPTY		__BIT(8)
+#define	 VOP_INTR0_WIN1_EMPTY		__BIT(7)
+#define	 VOP_INTR0_WIN0_EMPTY		__BIT(6)
+#define	 VOP_INTR0_BUS_ERROR		__BIT(5)
+#de

CVS commit: src/sys/arch/arm/rockchip

2021-12-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Mon Dec 20 00:27:17 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk_drm.c rk_vop.c

Log Message:
rkdrm: Implement vblank.


To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/arm/rockchip/rk_drm.c
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/arm/rockchip/rk_vop.c

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



CVS commit: src/sys/arch/arm/rockchip

2021-12-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Dec 19 12:45:27 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk_vop.c

Log Message:
rkdrm: Implement atomic disable for planes.


To generate a diff of this commit:
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/rockchip/rk_vop.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_vop.c
diff -u src/sys/arch/arm/rockchip/rk_vop.c:1.14 src/sys/arch/arm/rockchip/rk_vop.c:1.15
--- src/sys/arch/arm/rockchip/rk_vop.c:1.14	Sun Dec 19 12:45:12 2021
+++ src/sys/arch/arm/rockchip/rk_vop.c	Sun Dec 19 12:45:27 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_vop.c,v 1.14 2021/12/19 12:45:12 riastradh Exp $ */
+/* $NetBSD: rk_vop.c,v 1.15 2021/12/19 12:45:27 riastradh Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared D. McNeill 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_vop.c,v 1.14 2021/12/19 12:45:12 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_vop.c,v 1.15 2021/12/19 12:45:27 riastradh Exp $");
 
 #include 
 #include 
@@ -344,9 +344,13 @@ rk_vop_plane_atomic_update(struct drm_pl
 }
 
 static void
-rk_vop_plane_atomic_disable(struct drm_plane *plane, struct drm_plane_state *state)
+rk_vop_plane_atomic_disable(struct drm_plane *plane,
+struct drm_plane_state *state)
 {
-	DRM_DEBUG_KMS("[PLANE:%s] disable TODO\n", plane->name);
+	struct rk_vop_plane *vop_plane = to_rk_vop_plane(plane);
+	struct rk_vop_softc * const sc = vop_plane->sc;
+
+	WR4(sc, VOP_WIN0_CTRL, 0);	/* clear WIN0_EN */
 }
 
 static const struct drm_plane_helper_funcs rk_vop_plane_helper_funcs = {



CVS commit: src/sys/arch/arm/rockchip

2021-12-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Dec 19 12:45:27 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk_vop.c

Log Message:
rkdrm: Implement atomic disable for planes.


To generate a diff of this commit:
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/rockchip/rk_vop.c

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



CVS commit: src/sys/arch/arm/rockchip

2021-12-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Dec 19 12:45:20 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk_fb.c

Log Message:
rkdrm: Turn display off and back on again at config_interrupts.

This grody kludge works around whatever we're doing wrong in the
initial modeset that causes it not to take.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/rockchip/rk_fb.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_fb.c
diff -u src/sys/arch/arm/rockchip/rk_fb.c:1.5 src/sys/arch/arm/rockchip/rk_fb.c:1.6
--- src/sys/arch/arm/rockchip/rk_fb.c:1.5	Sun Dec 19 12:28:27 2021
+++ src/sys/arch/arm/rockchip/rk_fb.c	Sun Dec 19 12:45:19 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_fb.c,v 1.5 2021/12/19 12:28:27 riastradh Exp $ */
+/* $NetBSD: rk_fb.c,v 1.6 2021/12/19 12:45:19 riastradh Exp $ */
 
 /*-
  * Copyright (c) 2015-2019 Jared McNeill 
@@ -29,7 +29,7 @@
 #include "opt_wsdisplay_compat.h"
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_fb.c,v 1.5 2021/12/19 12:28:27 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_fb.c,v 1.6 2021/12/19 12:45:19 riastradh Exp $");
 
 #include 
 #include 
@@ -99,6 +99,25 @@ rk_fb_attach(device_t parent, device_t s
 }
 
 static void
+rk_fb_turnoffandbackonagain(device_t self)
+{
+	struct rk_fb_softc *sc = device_private(self);
+	struct rk_drmfb_attach_args * const sfa = &sc->sc_sfa;
+
+	/*
+	 * This is a grody kludge to turn the display off and back on
+	 * again at boot; otherwise the initial modeset doesn't take.
+	 * This is surely a bug somewhere in rk_vop.c or nearby, but I
+	 * haven't been able to find it, and this gives us almost the
+	 * same effect.
+	 */
+	mutex_lock(&sfa->sfa_fb_helper->lock);
+	drm_client_modeset_dpms(&sfa->sfa_fb_helper->client, DRM_MODE_DPMS_OFF);
+	drm_client_modeset_dpms(&sfa->sfa_fb_helper->client, DRM_MODE_DPMS_ON);
+	mutex_unlock(&sfa->sfa_fb_helper->lock);
+}
+
+static void
 rk_fb_init(struct rk_drm_task *task)
 {
 	struct rk_fb_softc * const sc =
@@ -123,6 +142,8 @@ rk_fb_init(struct rk_drm_task *task)
 	}
 
 	pmf_device_register1(self, NULL, NULL, rk_fb_shutdown);
+
+	config_interrupts(self, rk_fb_turnoffandbackonagain);
 }
 
 static bool



CVS commit: src/sys/arch/arm/rockchip

2021-12-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Dec 19 12:45:20 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk_fb.c

Log Message:
rkdrm: Turn display off and back on again at config_interrupts.

This grody kludge works around whatever we're doing wrong in the
initial modeset that causes it not to take.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/rockchip/rk_fb.c

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



CVS commit: src/sys/arch/arm/rockchip

2021-12-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Dec 19 12:45:12 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk_vop.c

Log Message:
rkdrm: Reset vop for 10us on attach.

This avoids creepy lines slowly appearing, and freezing themselves
semipermanently on the display, until the first successful modeset.


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/rockchip/rk_vop.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_vop.c
diff -u src/sys/arch/arm/rockchip/rk_vop.c:1.13 src/sys/arch/arm/rockchip/rk_vop.c:1.14
--- src/sys/arch/arm/rockchip/rk_vop.c:1.13	Sun Dec 19 12:43:37 2021
+++ src/sys/arch/arm/rockchip/rk_vop.c	Sun Dec 19 12:45:12 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_vop.c,v 1.13 2021/12/19 12:43:37 riastradh Exp $ */
+/* $NetBSD: rk_vop.c,v 1.14 2021/12/19 12:45:12 riastradh Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared D. McNeill 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_vop.c,v 1.13 2021/12/19 12:43:37 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_vop.c,v 1.14 2021/12/19 12:45:12 riastradh Exp $");
 
 #include 
 #include 
@@ -624,13 +624,25 @@ rk_vop_attach(device_t parent, device_t 
 
 	fdtbus_clock_assign(phandle);
 
+	/* assert all the reset signals for 20us */
+	for (n = 0; n < __arraycount(reset_names); n++) {
+		rst = fdtbus_reset_get(phandle, reset_names[n]);
+		if (rst == NULL || fdtbus_reset_assert(rst) != 0) {
+			aprint_error(": couldn't assert reset %s\n",
+			reset_names[n]);
+			return;
+		}
+	}
+	DELAY(10);
 	for (n = 0; n < __arraycount(reset_names); n++) {
 		rst = fdtbus_reset_get(phandle, reset_names[n]);
 		if (rst == NULL || fdtbus_reset_deassert(rst) != 0) {
-			aprint_error(": couldn't de-assert reset %s\n", reset_names[n]);
+			aprint_error(": couldn't de-assert reset %s\n",
+			reset_names[n]);
 			return;
 		}
 	}
+
 	for (n = 0; n < __arraycount(clock_names); n++) {
 		if (fdtbus_clock_enable(phandle, clock_names[n], true) != 0) {
 			aprint_error(": couldn't enable clock %s\n", clock_names[n]);



CVS commit: src/sys/arch/arm/rockchip

2021-12-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Dec 19 12:45:12 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk_vop.c

Log Message:
rkdrm: Reset vop for 10us on attach.

This avoids creepy lines slowly appearing, and freezing themselves
semipermanently on the display, until the first successful modeset.


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/rockchip/rk_vop.c

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



CVS commit: src/sys/arch/arm/rockchip

2021-12-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Dec 19 12:45:05 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk_drm.c

Log Message:
rkdrm: Comment why we config_defer rk_drm_init.


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/arm/rockchip/rk_drm.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_drm.c
diff -u src/sys/arch/arm/rockchip/rk_drm.c:1.16 src/sys/arch/arm/rockchip/rk_drm.c:1.17
--- src/sys/arch/arm/rockchip/rk_drm.c:1.16	Sun Dec 19 12:43:37 2021
+++ src/sys/arch/arm/rockchip/rk_drm.c	Sun Dec 19 12:45:04 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_drm.c,v 1.16 2021/12/19 12:43:37 riastradh Exp $ */
+/* $NetBSD: rk_drm.c,v 1.17 2021/12/19 12:45:04 riastradh Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared D. McNeill 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_drm.c,v 1.16 2021/12/19 12:43:37 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_drm.c,v 1.17 2021/12/19 12:45:04 riastradh Exp $");
 
 #include 
 #include 
@@ -167,6 +167,10 @@ rk_drm_attach(device_t parent, device_t 
 
 	fdt_remove_bycompat(fb_compatible);
 
+	/*
+	 * Wait until rk_vop is attached as a sibling to this device --
+	 * we need that to actually display our framebuffer.
+	 */
 	config_defer(self, rk_drm_init);
 }
 



CVS commit: src/sys/arch/arm/rockchip

2021-12-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Dec 19 12:45:05 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk_drm.c

Log Message:
rkdrm: Comment why we config_defer rk_drm_init.


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/arm/rockchip/rk_drm.c

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



CVS commit: src/sys/arch/arm/rockchip

2021-12-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Dec 19 12:43:29 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk_drm.c

Log Message:
rkdrm: Do drm_mode_config_reset on init.


To generate a diff of this commit:
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/rockchip/rk_drm.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_drm.c
diff -u src/sys/arch/arm/rockchip/rk_drm.c:1.14 src/sys/arch/arm/rockchip/rk_drm.c:1.15
--- src/sys/arch/arm/rockchip/rk_drm.c:1.14	Sun Dec 19 12:28:44 2021
+++ src/sys/arch/arm/rockchip/rk_drm.c	Sun Dec 19 12:43:29 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_drm.c,v 1.14 2021/12/19 12:28:44 riastradh Exp $ */
+/* $NetBSD: rk_drm.c,v 1.15 2021/12/19 12:43:29 riastradh Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared D. McNeill 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_drm.c,v 1.14 2021/12/19 12:28:44 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_drm.c,v 1.15 2021/12/19 12:43:29 riastradh Exp $");
 
 #include 
 #include 
@@ -410,6 +410,8 @@ rk_drm_load(struct drm_device *ddev, uns
 		goto drmerr;
 	}
 
+	drm_mode_config_reset(ddev);
+
 	fbdev = kmem_zalloc(sizeof(*fbdev), KM_SLEEP);
 
 	drm_fb_helper_prepare(ddev, &fbdev->helper, &rk_drm_fb_helper_funcs);



CVS commit: src/sys/arch/arm/rockchip

2021-12-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Dec 19 12:43:29 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk_drm.c

Log Message:
rkdrm: Do drm_mode_config_reset on init.


To generate a diff of this commit:
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/rockchip/rk_drm.c

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



CVS commit: src/sys/arch/arm/rockchip

2021-12-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Dec 19 12:28:35 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk_drm.c

Log Message:
rockchip/drm: use drm_helper_mode_fill_fb_struct or say why not.

Author: phone 
Committer: Taylor R Campbell 


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/rockchip/rk_drm.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_drm.c
diff -u src/sys/arch/arm/rockchip/rk_drm.c:1.12 src/sys/arch/arm/rockchip/rk_drm.c:1.13
--- src/sys/arch/arm/rockchip/rk_drm.c:1.12	Sun Dec 19 12:28:27 2021
+++ src/sys/arch/arm/rockchip/rk_drm.c	Sun Dec 19 12:28:35 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_drm.c,v 1.12 2021/12/19 12:28:27 riastradh Exp $ */
+/* $NetBSD: rk_drm.c,v 1.13 2021/12/19 12:28:35 riastradh Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared D. McNeill 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_drm.c,v 1.12 2021/12/19 12:28:27 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_drm.c,v 1.13 2021/12/19 12:28:35 riastradh Exp $");
 
 #include 
 #include 
@@ -269,16 +269,8 @@ rk_drm_fb_create(struct drm_device *ddev
 		return NULL;
 
 	fb = kmem_zalloc(sizeof(*fb), KM_SLEEP);
+	drm_helper_mode_fill_fb_struct(ddev, &fb->base, cmd);
 	fb->obj = to_drm_gem_cma_obj(gem_obj);
-	fb->base.pitches[0] = cmd->pitches[0];
-	fb->base.pitches[1] = cmd->pitches[1];
-	fb->base.pitches[2] = cmd->pitches[2];
-	fb->base.offsets[0] = cmd->offsets[0];
-	fb->base.offsets[1] = cmd->offsets[2];
-	fb->base.offsets[2] = cmd->offsets[1];
-	fb->base.width = cmd->width;
-	fb->base.height = cmd->height;
-	fb->base.format = drm_format_info(cmd->pixel_format);
 
 	error = drm_framebuffer_init(ddev, &fb->base, &rk_drm_framebuffer_funcs);
 	if (error != 0)
@@ -330,10 +322,14 @@ rk_drm_fb_probe(struct drm_fb_helper *he
 		return -ENOMEM;
 	}
 
+	/* similar to drm_helper_mode_fill_fb_struct(), but we have no cmd */
 	fb->pitches[0] = pitch;
 	fb->offsets[0] = 0;
 	fb->width = width;
 	fb->height = height;
+	fb->dev = ddev;
+	fb->modifier = 0;
+	fb->flags = 0;
 #ifdef __ARM_BIG_ENDIAN
 	fb->format = drm_format_info(DRM_FORMAT_BGRX);
 #else



CVS commit: src/sys/arch/arm/rockchip

2021-12-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Dec 19 12:28:35 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk_drm.c

Log Message:
rockchip/drm: use drm_helper_mode_fill_fb_struct or say why not.

Author: phone 
Committer: Taylor R Campbell 


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/rockchip/rk_drm.c

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



CVS commit: src/sys/arch/arm/rockchip

2021-12-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Dec 19 12:28:27 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk_drm.c rk_drm.h rk_fb.c

Log Message:
rockchip/drm: use an explicit task queue to avoid config_defer pitfalls.

Author: phone 
Committer: Taylor R Campbell 


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/rockchip/rk_drm.c
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/rockchip/rk_drm.h
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/rockchip/rk_fb.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_drm.c
diff -u src/sys/arch/arm/rockchip/rk_drm.c:1.11 src/sys/arch/arm/rockchip/rk_drm.c:1.12
--- src/sys/arch/arm/rockchip/rk_drm.c:1.11	Sun Dec 19 11:25:48 2021
+++ src/sys/arch/arm/rockchip/rk_drm.c	Sun Dec 19 12:28:27 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_drm.c,v 1.11 2021/12/19 11:25:48 riastradh Exp $ */
+/* $NetBSD: rk_drm.c,v 1.12 2021/12/19 12:28:27 riastradh Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared D. McNeill 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_drm.c,v 1.11 2021/12/19 11:25:48 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_drm.c,v 1.12 2021/12/19 12:28:27 riastradh Exp $");
 
 #include 
 #include 
@@ -82,6 +82,8 @@ static void	rk_drm_disable_vblank(struct
 static int	rk_drm_load(struct drm_device *, unsigned long);
 static void	rk_drm_unload(struct drm_device *);
 
+static void	rk_drm_task_work(struct work *, void *);
+
 static struct drm_driver rk_drm_driver = {
 	.driver_features = DRIVER_MODESET | DRIVER_GEM,
 	.dev_priv_size = 0,
@@ -131,6 +133,14 @@ rk_drm_attach(device_t parent, device_t 
 	sc->sc_dmat = faa->faa_dmat;
 	sc->sc_bst = faa->faa_bst;
 	sc->sc_phandle = faa->faa_phandle;
+	sc->sc_task_thread = NULL;
+	SIMPLEQ_INIT(&sc->sc_tasks);
+	if (workqueue_create(&sc->sc_task_wq, "rkdrm",
+	&rk_drm_task_work, NULL, PRI_NONE, IPL_NONE, WQ_MPSAFE)) {
+		aprint_error_dev(self, "unable to create workqueue\n");
+		sc->sc_task_wq = NULL;
+		return;
+	}
 
 	aprint_naive("\n");
 
@@ -164,16 +174,40 @@ rk_drm_init(device_t dev)
 	struct drm_driver * const driver = &rk_drm_driver;
 	int error;
 
+	/*
+	 * Cause any tasks issued synchronously during attach to be
+	 * processed at the end of this function.
+	 */
+	sc->sc_task_thread = curlwp;
+
 	error = -drm_dev_register(sc->sc_ddev, 0);
 	if (error) {
 		aprint_error_dev(dev, "couldn't register DRM device: %d\n",
 		error);
-		return;
+		goto out;
 	}
+	sc->sc_dev_registered = true;
 
 	aprint_normal_dev(dev, "initialized %s %d.%d.%d %s on minor %d\n",
 	driver->name, driver->major, driver->minor, driver->patchlevel,
 	driver->date, sc->sc_ddev->primary->index);
+
+	/*
+	 * Process asynchronous tasks queued synchronously during
+	 * attach.  This will be for display detection to attach a
+	 * framebuffer, so we have the opportunity for a console device
+	 * to attach before autoconf has completed, in time for init(8)
+	 * to find that console without panicking.
+	 */
+	while (!SIMPLEQ_EMPTY(&sc->sc_tasks)) {
+		struct rk_drm_task *const task = SIMPLEQ_FIRST(&sc->sc_tasks);
+
+		SIMPLEQ_REMOVE_HEAD(&sc->sc_tasks, rdt_u.queue);
+		(*task->rdt_fn)(task);
+	}
+
+out:	/* Cause any subesquent tasks to be processed by the workqueue.  */
+	atomic_store_relaxed(&sc->sc_task_thread, NULL);
 }
 
 static vmem_t *
@@ -484,3 +518,31 @@ rk_drm_port_device(struct fdt_device_por
 
 	return NULL;
 }
+
+static void
+rk_drm_task_work(struct work *work, void *cookie)
+{
+	struct rk_drm_task *task = container_of(work, struct rk_drm_task,
+	rdt_u.work);
+
+	(*task->rdt_fn)(task);
+}
+
+void
+rk_task_init(struct rk_drm_task *task,
+void (*fn)(struct rk_drm_task *))
+{
+
+	task->rdt_fn = fn;
+}
+
+void
+rk_task_schedule(device_t self, struct rk_drm_task *task)
+{
+	struct rk_drm_softc *sc = device_private(self);
+
+	if (atomic_load_relaxed(&sc->sc_task_thread) == curlwp)
+		SIMPLEQ_INSERT_TAIL(&sc->sc_tasks, task, rdt_u.queue);
+	else
+		workqueue_enqueue(sc->sc_task_wq, &task->rdt_u.work, NULL);
+}

Index: src/sys/arch/arm/rockchip/rk_drm.h
diff -u src/sys/arch/arm/rockchip/rk_drm.h:1.1 src/sys/arch/arm/rockchip/rk_drm.h:1.2
--- src/sys/arch/arm/rockchip/rk_drm.h:1.1	Sat Nov  9 23:30:14 2019
+++ src/sys/arch/arm/rockchip/rk_drm.h	Sun Dec 19 12:28:27 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_drm.h,v 1.1 2019/11/09 23:30:14 jmcneill Exp $ */
+/* $NetBSD: rk_drm.h,v 1.2 2021/12/19 12:28:27 riastradh Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared D. McNeill 
@@ -29,6 +29,7 @@
 #ifndef _ARM_RK_DRM_H
 #define _ARM_RK_DRM_H
 
+#include 
 #include 
 #include 
 
@@ -62,6 +63,12 @@ struct rk_drm_softc {
 
 	int			sc_phandle;
 
+	struct lwp			*sc_task_thread;
+	SIMPLEQ_HEAD(, rk_drm_task)	sc_tasks;
+	struct workqueue		*sc_task_wq;
+
+	bool			sc_dev_registered;
+
 	struct rk_drm_vblank	sc_vbl[RK_DRM_MAX_CRTC];
 };
 
@@ -90,10 +97,22 @@ struct rk_drmfb_att

CVS commit: src/sys/arch/arm/rockchip

2021-12-19 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sun Dec 19 12:28:27 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk_drm.c rk_drm.h rk_fb.c

Log Message:
rockchip/drm: use an explicit task queue to avoid config_defer pitfalls.

Author: phone 
Committer: Taylor R Campbell 


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/rockchip/rk_drm.c
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/rockchip/rk_drm.h
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/rockchip/rk_fb.c

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



CVS commit: src/sys/arch/arm/rockchip

2021-11-13 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov 13 15:17:22 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk3066_smp.c

Log Message:
Write back and invalidate cache before starting secondary CPUs.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/rockchip/rk3066_smp.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/rk3066_smp.c
diff -u src/sys/arch/arm/rockchip/rk3066_smp.c:1.1 src/sys/arch/arm/rockchip/rk3066_smp.c:1.2
--- src/sys/arch/arm/rockchip/rk3066_smp.c:1.1	Fri Nov 12 22:02:08 2021
+++ src/sys/arch/arm/rockchip/rk3066_smp.c	Sat Nov 13 15:17:22 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3066_smp.c,v 1.1 2021/11/12 22:02:08 jmcneill Exp $ */
+/* $NetBSD: rk3066_smp.c,v 1.2 2021/11/13 15:17:22 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2021 Jared McNeill 
@@ -30,7 +30,7 @@
 #include "opt_multiprocessor.h"
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk3066_smp.c,v 1.1 2021/11/12 22:02:08 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk3066_smp.c,v 1.2 2021/11/13 15:17:22 jmcneill Exp $");
 
 #include 
 #include 
@@ -141,26 +141,15 @@ rk3066_smp_enable(int cpus_phandle, u_in
 static int
 cpu_enable_rk3066(int phandle)
 {
-	static uint32_t enabled;
 	uint64_t mpidr;
-	int error = 0;
 
 	fdtbus_get_reg64(phandle, 0, &mpidr, NULL);
 
 	const u_int cpuno = __SHIFTOUT(mpidr, MPIDR_AFF0);
-	const bool is_enabled = enabled & __BIT(cpuno);
 
-	if (!is_enabled) {
-		error = rk3066_smp_enable(OF_parent(phandle), cpuno);
-		if (error == 0) {
-			enabled |= __BIT(cpuno);
-		}
-	} else {
-		printf("WARNING: CPU enable called more than once for CPU %u\n",
-		cpuno);
-	}
+	cpu_dcache_wbinv_all();
 
-	return error;
+	return rk3066_smp_enable(OF_parent(phandle), cpuno);
 }
 
 ARM_CPU_METHOD(rk3066, "rockchip,rk3066-smp", cpu_enable_rk3066);



CVS commit: src/sys/arch/arm/rockchip

2021-11-13 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov 13 15:17:22 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk3066_smp.c

Log Message:
Write back and invalidate cache before starting secondary CPUs.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/rockchip/rk3066_smp.c

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



CVS commit: src/sys/arch/arm/rockchip

2021-11-13 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov 13 11:46:32 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk3288_cru.c rk_tsadc.c

Log Message:
Add support for RK3288 temperature sensors.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/rockchip/rk3288_cru.c
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/rockchip/rk_tsadc.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/rk3288_cru.c
diff -u src/sys/arch/arm/rockchip/rk3288_cru.c:1.4 src/sys/arch/arm/rockchip/rk3288_cru.c:1.5
--- src/sys/arch/arm/rockchip/rk3288_cru.c:1.4	Sat Nov 13 01:29:08 2021
+++ src/sys/arch/arm/rockchip/rk3288_cru.c	Sat Nov 13 11:46:32 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3288_cru.c,v 1.4 2021/11/13 01:29:08 jmcneill Exp $ */
+/* $NetBSD: rk3288_cru.c,v 1.5 2021/11/13 11:46:32 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2021 Jared McNeill 
@@ -28,7 +28,7 @@
 
 #include 
 
-__KERNEL_RCSID(1, "$NetBSD: rk3288_cru.c,v 1.4 2021/11/13 01:29:08 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk3288_cru.c,v 1.5 2021/11/13 11:46:32 jmcneill Exp $");
 
 #include 
 #include 
@@ -263,6 +263,14 @@ static struct rk_cru_clk rk3288_cru_clks
 		 __BIT(11),			/* gate_mask */
 		 0),
 
+	/* TSADC */
+	RK_COMPOSITE_NOMUX(RK3288_SCLK_TSADC, "sclk_tsadc", "xin32k",
+			   CLKSEL_CON(2),	/* div_reg */
+			   __BITS(5,0),		/* div_mask */
+			   CLKGATE_CON(2),	/* gate_reg */
+			   __BIT(7),		/* gate_mask */
+			   0),
+
 	RK_DIV(0, "aclk_cpu_pre", "aclk_cpu_src", CLKSEL_CON(1), __BITS(2,0), 0),
 	RK_DIV(0, "clk_24m", "xin24m", CLKSEL_CON(2), __BITS(12,8), 0),
 	RK_DIV(0, "pclk_pd_alive", "gpll", CLKSEL_CON(33), __BITS(12,8), 0),
@@ -290,6 +298,7 @@ static struct rk_cru_clk rk3288_cru_clks
 	RK_GATE(RK3288_PCLK_I2C3, "pclk_i2c3", "pclk_peri", CLKGATE_CON(6), 14),
 	RK_GATE(RK3288_PCLK_I2C4, "pclk_i2c4", "pclk_peri", CLKGATE_CON(6), 15),
 	RK_GATE(RK3288_PCLK_I2C5, "pclk_i2c5", "pclk_peri", CLKGATE_CON(7), 0),
+	RK_GATE(RK3288_PCLK_TSADC, "pclk_tsadc", "pclk_peri", CLKGATE_CON(7), 2),
 	RK_GATE(RK3288_HCLK_USBHOST0, "hclk_host0", "hclk_peri", CLKGATE_CON(7), 6),
 	RK_GATE(RK3288_HCLK_USBHOST1, "hclk_host1", "hclk_peri", CLKGATE_CON(7), 7),
 	RK_GATE(RK3288_HCLK_HSIC, "hclk_hsic", "hclk_peri", CLKGATE_CON(7), 8),

Index: src/sys/arch/arm/rockchip/rk_tsadc.c
diff -u src/sys/arch/arm/rockchip/rk_tsadc.c:1.14 src/sys/arch/arm/rockchip/rk_tsadc.c:1.15
--- src/sys/arch/arm/rockchip/rk_tsadc.c:1.14	Sat Sep 11 20:28:03 2021
+++ src/sys/arch/arm/rockchip/rk_tsadc.c	Sat Nov 13 11:46:32 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: rk_tsadc.c,v 1.14 2021/09/11 20:28:03 andvar Exp $	*/
+/*	$NetBSD: rk_tsadc.c,v 1.15 2021/11/13 11:46:32 jmcneill Exp $	*/
 
 /*
  * Copyright (c) 2019 Matthew R. Green
@@ -30,7 +30,7 @@
 
 #include 
 
-__KERNEL_RCSID(0, "$NetBSD: rk_tsadc.c,v 1.14 2021/09/11 20:28:03 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_tsadc.c,v 1.15 2021/11/13 11:46:32 jmcneill Exp $");
 
 /*
  * Driver for the TSADC temperature sensor monitor in RK3328 and RK3399.
@@ -93,9 +93,10 @@ __KERNEL_RCSID(0, "$NetBSD: rk_tsadc.c,v
 #define  TSADC_INT_EN_HT_INTEN_SRC1 __BIT(1)
 #define  TSADC_INT_EN_HT_INTEN_SRC0 __BIT(0)
 #define TSADC_INT_PD0x0c
-#define  TSADC_INT_PD_EOC_INT_PD__BIT(16)
+#define  TSADC_INT_PD_EOC_INT_PD_V3 __BIT(16)
 #define  TSADC_INT_PD_LT_IRQ_SRC1   __BIT(13)
 #define  TSADC_INT_PD_LT_IRQ_SRC0   __BIT(12)
+#define  TSADC_INT_PD_EOC_INT_PD_V2 __BIT(8)
 #define  TSADC_INT_PD_TSHUT_O_SRC1  __BIT(5)
 #define  TSADC_INT_PD_TSHUT_O_SRC0  __BIT(4)
 #define  TSADC_INT_PD_HT_IRQ_SRC1   __BIT(1)
@@ -125,6 +126,8 @@ __KERNEL_RCSID(0, "$NetBSD: rk_tsadc.c,v
 #define TSADC_COMP1_LOW_INT 0x84
 #define  TSADC_COMP1_LOW_INT_COMP_SRC1  __BITS(11,0)
 
+#define	RK3288_TSADC_AUTO_PERIOD_TIME		250 /* 250ms */
+#define	RK3288_TSADC_AUTO_PERIOD_HT_TIME	50  /* 50ms */
 #define RK3328_TSADC_AUTO_PERIOD_TIME   250 /* 250ms */
 #define RK3399_TSADC_AUTO_PERIOD_TIME   1875 /* 2.5ms */
 #define TSADC_HT_DEBOUNCE_COUNT 4
@@ -165,13 +168,16 @@ typedef struct rk_data_array {
 
 struct rk_tsadc_softc;
 typedef struct rk_data {
+	const char		*rd_name;
 	const rk_data_array	*rd_array;
 	size_t			 rd_size;
 	void			(*rd_init)(struct rk_tsadc_softc *, int, int);
 	bool			 rd_decr;  /* lower values -> higher temp */
 	unsigned		 rd_min, rd_max;
 	unsigned		 rd_auto_period;
+	unsigned		 rd_auto_period_ht;
 	unsigned		 rd_num_sensors;
+	unsigned		 rd_version;
 } rk_data;
 
 /* Per-sensor data */
@@ -216,7 +222,7 @@ static int rk_tsadc_init_clocks(struct r
 static void rk_tsadc_init_counts(struct rk_tsadc_softc *);
 static void rk_tsadc_tshut_set(struct rk_tsadc_softc *s);
 static void rk_tsadc_init_tshut(stru

CVS commit: src/sys/arch/arm/rockchip

2021-11-13 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov 13 11:46:32 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk3288_cru.c rk_tsadc.c

Log Message:
Add support for RK3288 temperature sensors.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/rockchip/rk3288_cru.c
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/rockchip/rk_tsadc.c

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



CVS commit: src/sys/arch/arm/rockchip

2021-11-12 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov 13 01:29:08 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk3288_cru.c

Log Message:
Add pwm and spi clocks


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/rockchip/rk3288_cru.c

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



CVS commit: src/sys/arch/arm/rockchip

2021-11-12 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov 13 01:29:08 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk3288_cru.c

Log Message:
Add pwm and spi clocks


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/rockchip/rk3288_cru.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/rk3288_cru.c
diff -u src/sys/arch/arm/rockchip/rk3288_cru.c:1.3 src/sys/arch/arm/rockchip/rk3288_cru.c:1.4
--- src/sys/arch/arm/rockchip/rk3288_cru.c:1.3	Sat Nov 13 01:07:09 2021
+++ src/sys/arch/arm/rockchip/rk3288_cru.c	Sat Nov 13 01:29:08 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3288_cru.c,v 1.3 2021/11/13 01:07:09 jmcneill Exp $ */
+/* $NetBSD: rk3288_cru.c,v 1.4 2021/11/13 01:29:08 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2021 Jared McNeill 
@@ -28,7 +28,7 @@
 
 #include 
 
-__KERNEL_RCSID(1, "$NetBSD: rk3288_cru.c,v 1.3 2021/11/13 01:07:09 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk3288_cru.c,v 1.4 2021/11/13 01:29:08 jmcneill Exp $");
 
 #include 
 #include 
@@ -240,6 +240,29 @@ static struct rk_cru_clk rk3288_cru_clks
 			   __BIT(4),		/* gate_mask */
 			   0),
 
+	/* SPI */
+	RK_COMPOSITE(RK3288_SCLK_SPI0, "sclk_spi0", mux_2plls_parents,
+		 CLKSEL_CON(25),		/* muxdiv_reg */
+		 __BIT(7),			/* mux_mask */
+		 __BITS(6,0),		/* div_mask */
+		 CLKGATE_CON(2),		/* gate_reg */
+		 __BIT(9),			/* gate_mask */
+		 0),
+	RK_COMPOSITE(RK3288_SCLK_SPI1, "sclk_spi1", mux_2plls_parents,
+		 CLKSEL_CON(25),		/* muxdiv_reg */
+		 __BIT(15),			/* mux_mask */
+		 __BITS(14,8),		/* div_mask */
+		 CLKGATE_CON(2),		/* gate_reg */
+		 __BIT(10),			/* gate_mask */
+		 0),
+	RK_COMPOSITE(RK3288_SCLK_SPI2, "sclk_spi2", mux_2plls_parents,
+		 CLKSEL_CON(39),		/* muxdiv_reg */
+		 __BIT(7),			/* mux_mask */
+		 __BITS(6,0),		/* div_mask */
+		 CLKGATE_CON(2),		/* gate_reg */
+		 __BIT(11),			/* gate_mask */
+		 0),
+
 	RK_DIV(0, "aclk_cpu_pre", "aclk_cpu_src", CLKSEL_CON(1), __BITS(2,0), 0),
 	RK_DIV(0, "clk_24m", "xin24m", CLKSEL_CON(2), __BITS(12,8), 0),
 	RK_DIV(0, "pclk_pd_alive", "gpll", CLKSEL_CON(33), __BITS(12,8), 0),
@@ -260,6 +283,9 @@ static struct rk_cru_clk rk3288_cru_clks
 	RK_GATE(RK3288_SCLK_MAC_TX, "sclk_mac_tx", "mac_clk", CLKGATE_CON(5), 1),
 	RK_GATE(RK3288_SCLK_MACREF, "sclk_macref", "mac_clk", CLKGATE_CON(5), 2),
 	RK_GATE(RK3288_SCLK_MACREF_OUT, "sclk_macref_out", "mac_clk", CLKGATE_CON(5), 3),
+	RK_GATE(RK3288_PCLK_SPI0, "pclk_spi0", "pclk_peri", CLKGATE_CON(6), 4),
+	RK_GATE(RK3288_PCLK_SPI1, "pclk_spi1", "pclk_peri", CLKGATE_CON(6), 5),
+	RK_GATE(RK3288_PCLK_SPI2, "pclk_spi2", "pclk_peri", CLKGATE_CON(6), 6),
 	RK_GATE(RK3288_PCLK_I2C1, "pclk_i2c1", "pclk_peri", CLKGATE_CON(6), 13),
 	RK_GATE(RK3288_PCLK_I2C3, "pclk_i2c3", "pclk_peri", CLKGATE_CON(6), 14),
 	RK_GATE(RK3288_PCLK_I2C4, "pclk_i2c4", "pclk_peri", CLKGATE_CON(6), 15),
@@ -279,6 +305,7 @@ static struct rk_cru_clk rk3288_cru_clks
 	RK_GATE(RK3288_ACLK_CRYPTO, "aclk_crypto", "aclk_cpu", CLKGATE_CON(11), 6),
 	RK_GATE(RK3288_HCLK_CRYPTO, "hclk_crypto", "hclk_cpu", CLKGATE_CON(11), 7),
 	RK_GATE(RK3288_PCLK_UART2, "pclk_uart2", "pclk_cpu", CLKGATE_CON(11), 9),
+	RK_GATE(RK3288_PCLK_RKPWM, "pclk_rkpwm", "pclk_cpu", CLKGATE_CON(11), 11),
 	RK_GATE(RK3288_SCLK_OTGPHY0, "sclk_otgphy0", "xin24m", CLKGATE_CON(13), 4),
 	RK_GATE(RK3288_SCLK_OTGPHY1, "sclk_otgphy1", "xin24m", CLKGATE_CON(13), 5),
 	RK_GATE(RK3288_SCLK_OTGPHY2, "sclk_otgphy2", "xin24m", CLKGATE_CON(13), 6),



CVS commit: src/sys/arch/arm/rockchip

2021-11-12 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov 13 01:08:15 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk_i2c.c

Log Message:
Match rockchip,rk3288-i2c


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/rockchip/rk_i2c.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_i2c.c
diff -u src/sys/arch/arm/rockchip/rk_i2c.c:1.11 src/sys/arch/arm/rockchip/rk_i2c.c:1.12
--- src/sys/arch/arm/rockchip/rk_i2c.c:1.11	Fri Nov 12 22:02:08 2021
+++ src/sys/arch/arm/rockchip/rk_i2c.c	Sat Nov 13 01:08:15 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_i2c.c,v 1.11 2021/11/12 22:02:08 jmcneill Exp $ */
+/* $NetBSD: rk_i2c.c,v 1.12 2021/11/13 01:08:15 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -28,7 +28,7 @@
 
 #include 
 
-__KERNEL_RCSID(0, "$NetBSD: rk_i2c.c,v 1.11 2021/11/12 22:02:08 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_i2c.c,v 1.12 2021/11/13 01:08:15 jmcneill Exp $");
 
 #include 
 #include 
@@ -104,9 +104,7 @@ __KERNEL_RCSID(0, "$NetBSD: rk_i2c.c,v 1
 #define	RKI2C_HAS_PCLK		__BIT(0)
 
 static const struct device_compatible_entry compat_data[] = {
-#if notyet
 	{ .compat = "rockchip,rk3288-i2c",	.value = 0 },
-#endif
 	{ .compat = "rockchip,rk3399-i2c",	.value = RKI2C_HAS_PCLK },
 	DEVICE_COMPAT_EOL
 };



CVS commit: src/sys/arch/arm/rockchip

2021-11-12 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov 13 01:08:15 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk_i2c.c

Log Message:
Match rockchip,rk3288-i2c


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/rockchip/rk_i2c.c

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



CVS commit: src/sys/arch/arm/rockchip

2021-11-12 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov 13 01:07:09 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk3288_cru.c

Log Message:
Fix width of aclk_cpu_pre divider field


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/rockchip/rk3288_cru.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/rk3288_cru.c
diff -u src/sys/arch/arm/rockchip/rk3288_cru.c:1.2 src/sys/arch/arm/rockchip/rk3288_cru.c:1.3
--- src/sys/arch/arm/rockchip/rk3288_cru.c:1.2	Sat Nov 13 00:34:07 2021
+++ src/sys/arch/arm/rockchip/rk3288_cru.c	Sat Nov 13 01:07:09 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3288_cru.c,v 1.2 2021/11/13 00:34:07 jmcneill Exp $ */
+/* $NetBSD: rk3288_cru.c,v 1.3 2021/11/13 01:07:09 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2021 Jared McNeill 
@@ -28,7 +28,7 @@
 
 #include 
 
-__KERNEL_RCSID(1, "$NetBSD: rk3288_cru.c,v 1.2 2021/11/13 00:34:07 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk3288_cru.c,v 1.3 2021/11/13 01:07:09 jmcneill Exp $");
 
 #include 
 #include 
@@ -240,7 +240,7 @@ static struct rk_cru_clk rk3288_cru_clks
 			   __BIT(4),		/* gate_mask */
 			   0),
 
-	RK_DIV(0, "aclk_cpu_pre", "aclk_cpu_src", CLKSEL_CON(1), __BITS(3,0), 0),
+	RK_DIV(0, "aclk_cpu_pre", "aclk_cpu_src", CLKSEL_CON(1), __BITS(2,0), 0),
 	RK_DIV(0, "clk_24m", "xin24m", CLKSEL_CON(2), __BITS(12,8), 0),
 	RK_DIV(0, "pclk_pd_alive", "gpll", CLKSEL_CON(33), __BITS(12,8), 0),
 



CVS commit: src/sys/arch/arm/rockchip

2021-11-12 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov 13 01:07:09 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk3288_cru.c

Log Message:
Fix width of aclk_cpu_pre divider field


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/rockchip/rk3288_cru.c

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



CVS commit: src/sys/arch/arm/rockchip

2021-11-12 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov 13 00:34:07 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk3288_cru.c

Log Message:
rk3288: add watchdog and rng clocks


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/rockchip/rk3288_cru.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/rk3288_cru.c
diff -u src/sys/arch/arm/rockchip/rk3288_cru.c:1.1 src/sys/arch/arm/rockchip/rk3288_cru.c:1.2
--- src/sys/arch/arm/rockchip/rk3288_cru.c:1.1	Fri Nov 12 22:02:08 2021
+++ src/sys/arch/arm/rockchip/rk3288_cru.c	Sat Nov 13 00:34:07 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3288_cru.c,v 1.1 2021/11/12 22:02:08 jmcneill Exp $ */
+/* $NetBSD: rk3288_cru.c,v 1.2 2021/11/13 00:34:07 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2021 Jared McNeill 
@@ -28,7 +28,7 @@
 
 #include 
 
-__KERNEL_RCSID(1, "$NetBSD: rk3288_cru.c,v 1.1 2021/11/12 22:02:08 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk3288_cru.c,v 1.2 2021/11/13 00:34:07 jmcneill Exp $");
 
 #include 
 #include 
@@ -102,6 +102,12 @@ static struct rk_cru_clk rk3288_cru_clks
 			__BIT(15),		/* mux_mask */
 			__BITS(7,3),	/* div_mask */
 			0),
+	RK_COMPOSITE_NOMUX(RK3288_ACLK_CPU, "aclk_cpu", "aclk_cpu_pre",
+			   CLKSEL_CON(1),	/* div_reg */
+			   __BITS(9,8),		/* div_mask */
+			   CLKGATE_CON(0),	/* gate_reg */
+			   __BIT(4),		/* gate_mask */
+			   0),
 RK_COMPOSITE_NOMUX(RK3288_PCLK_CPU, "pclk_cpu", "aclk_cpu_pre",
 			   CLKSEL_CON(1),	/* div_reg */
 			   __BITS(14,12),	/* div_mask */
@@ -226,6 +232,14 @@ static struct rk_cru_clk rk3288_cru_clks
 		 __BIT(5),			/* gate_mask */
 		 0),
 
+	/* Crypto */
+	RK_COMPOSITE_NOMUX(RK3288_SCLK_CRYPTO, "crypto", "aclk_cpu_pre",
+			   CLKSEL_CON(26),	/* div_reg */
+			   __BITS(7,6),		/* div_mask */
+			   CLKGATE_CON(5),	/* gate_reg */
+			   __BIT(4),		/* gate_mask */
+			   0),
+
 	RK_DIV(0, "aclk_cpu_pre", "aclk_cpu_src", CLKSEL_CON(1), __BITS(3,0), 0),
 	RK_DIV(0, "clk_24m", "xin24m", CLKSEL_CON(2), __BITS(12,8), 0),
 	RK_DIV(0, "pclk_pd_alive", "gpll", CLKSEL_CON(33), __BITS(12,8), 0),
@@ -238,6 +252,7 @@ static struct rk_cru_clk rk3288_cru_clks
 	RK_MUX(0, "uart_src", mux_2plls_parents, CLKSEL_CON(15), __BIT(15)),
 	RK_MUX(RK3288_SCLK_MAC, "mac_clk", mac_parents, CLKSEL_CON(21), __BIT(4)),
 
+	RK_GATE(RK3288_ACLK_CPU, "aclk_cpu", "aclk_cpu_pre", CLKGATE_CON(0), 3),
 	RK_GATE(0, "gpll_aclk_cpu", "gpll", CLKGATE_CON(0), 10),
 	RK_GATE(0, "cpll_aclk_cpu", "cpll", CLKGATE_CON(0), 11),
 	RK_GATE(RK3288_ACLK_PERI, "aclk_peri", "aclk_peri_src", CLKGATE_CON(2), 1),
@@ -260,6 +275,9 @@ static struct rk_cru_clk rk3288_cru_clks
 	RK_GATE(RK3288_HCLK_EMMC, "hclk_emmc", "hclk_peri", CLKGATE_CON(8), 6),
 	RK_GATE(RK3288_PCLK_I2C0, "pclk_i2c0", "pclk_cpu", CLKGATE_CON(10), 2),
 	RK_GATE(RK3288_PCLK_I2C2, "pclk_i2c2", "pclk_cpu", CLKGATE_CON(10), 3),
+	RK_GATE(RK3288_ACLK_DMAC1, "aclk_dmac1", "aclk_cpu", CLKGATE_CON(10), 12),
+	RK_GATE(RK3288_ACLK_CRYPTO, "aclk_crypto", "aclk_cpu", CLKGATE_CON(11), 6),
+	RK_GATE(RK3288_HCLK_CRYPTO, "hclk_crypto", "hclk_cpu", CLKGATE_CON(11), 7),
 	RK_GATE(RK3288_PCLK_UART2, "pclk_uart2", "pclk_cpu", CLKGATE_CON(11), 9),
 	RK_GATE(RK3288_SCLK_OTGPHY0, "sclk_otgphy0", "xin24m", CLKGATE_CON(13), 4),
 	RK_GATE(RK3288_SCLK_OTGPHY1, "sclk_otgphy1", "xin24m", CLKGATE_CON(13), 5),
@@ -273,6 +291,7 @@ static struct rk_cru_clk rk3288_cru_clks
 	RK_GATE(RK3288_PCLK_GPIO7, "pclk_gpio7", "pclk_pd_alive", CLKGATE_CON(14), 7),
 	RK_GATE(RK3288_PCLK_GPIO8, "pclk_gpio8", "pclk_pd_alive", CLKGATE_CON(14), 8),
 	RK_GATE(RK3288_PCLK_GPIO0, "pclk_gpio0", "pclk_pd_pmu", CLKGATE_CON(17), 4),
+	RK_SECURE_GATE(RK3288_PCLK_WDT, "pclk_wdt", "pclk_pd_alive"),
 };
 
 static int



CVS commit: src/sys/arch/arm/rockchip

2021-11-12 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov 13 00:34:07 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk3288_cru.c

Log Message:
rk3288: add watchdog and rng clocks


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/rockchip/rk3288_cru.c

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



CVS commit: src/sys/arch/arm/rockchip

2021-11-12 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Fri Nov 12 22:53:21 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk3288_iomux.c

Log Message:
Fix register accesses to PMU registers. Unlike the GRF ones, a RMW cycle
is required to update settings here.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/rockchip/rk3288_iomux.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/rk3288_iomux.c
diff -u src/sys/arch/arm/rockchip/rk3288_iomux.c:1.1 src/sys/arch/arm/rockchip/rk3288_iomux.c:1.2
--- src/sys/arch/arm/rockchip/rk3288_iomux.c:1.1	Fri Nov 12 22:02:08 2021
+++ src/sys/arch/arm/rockchip/rk3288_iomux.c	Fri Nov 12 22:53:20 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3288_iomux.c,v 1.1 2021/11/12 22:02:08 jmcneill Exp $ */
+/* $NetBSD: rk3288_iomux.c,v 1.2 2021/11/12 22:53:20 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk3288_iomux.c,v 1.1 2021/11/12 22:02:08 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk3288_iomux.c,v 1.2 2021/11/12 22:53:20 jmcneill Exp $");
 
 #include 
 #include 
@@ -84,6 +84,8 @@ struct rk3288_iomux_reg {
 	syscon_read_4((reg)->syscon, (off))
 #define	WR4(reg, off, val)	\
 	syscon_write_4((reg)->syscon, (off), (val))
+#define	ISPMU(sc, reg)		\
+	((reg)->syscon == (sc)->sc_pmu)
 
 static int	rk3288_iomux_match(device_t, cfdata_t, void *);
 static void	rk3288_iomux_attach(device_t, device_t, void *);
@@ -178,17 +180,13 @@ rk3288_iomux_set_bias(struct rk3288_iomu
 		return;
 	}
 
-	val = GPIO_P_CTL_MASK << (reg->pull_bit + 16);
+	if (ISPMU(sc, reg)) {
+		val = RD4(reg, reg->pull_reg);
+		val &= ~(GPIO_P_CTL_MASK << reg->pull_bit);
+	} else {
+		val = GPIO_P_CTL_MASK << (reg->pull_bit + 16);
+	}
 	val |= p << reg->pull_bit;
-
-#ifdef RK3288_IOMUX_DEBUG
-	const uint32_t oval = RD4(reg, reg->pull_reg);
-	printf("%s: wr %#x -> %#x (%#x)\n", __func__,
-	oval & (GPIO_P_CTL_MASK << reg->pull_bit),
-	val & 0x,
-	GPIO_P_CTL_MASK << reg->pull_bit);
-#endif
-
 	WR4(reg, reg->pull_reg, val);
 }
 
@@ -216,8 +214,13 @@ rk3288_iomux_set_drive_strength(struct r
 		return;
 	}
 
-	val = GPIO_E_CTL_MASK << (reg->drv_bit + 16);
-	val |= e << reg->drv_bit;
+	if (ISPMU(sc, reg)) {
+		val = RD4(reg, reg->drv_reg);
+		val &= ~(GPIO_E_CTL_MASK << reg->drv_bit);
+	} else {
+		val = GPIO_E_CTL_MASK << (reg->drv_bit + 16);
+	}
+	val = e << reg->drv_bit;
 	WR4(reg, reg->drv_reg, val);
 }
 
@@ -229,9 +232,14 @@ rk3288_iomux_set_mux(struct rk3288_iomux
 
 	KASSERT(reg->mux_reg != -1);
 
-	val = ((reg->flags & IOMUX_4BIT) ? 0xf : 0x3) << (reg->mux_bit + 16);
+	const uint32_t mask = (reg->flags & IOMUX_4BIT) ? 0xf : 0x3;
+	if (ISPMU(sc, reg)) {
+		val = RD4(reg, reg->mux_reg);
+		val &= ~(mask << reg->mux_bit);
+	} else {
+		val = mask << (reg->mux_bit + 16);
+	}
 	val |= mux << reg->mux_bit;
-
 	WR4(reg, reg->mux_reg, val);
 }
 
@@ -254,14 +262,6 @@ rk3288_iomux_config(struct rk3288_iomux_
 	printf(" bias %d drv %d mux %u\n", bias, drv, mux);
 #endif
 
-	/* XXX
-	 * ASUS Tinkerboard goes nuts if we update any PMU bias fields.
-	 * Skip them until we figure out why.
-	 */
-	if (reg->syscon == sc->sc_pmu) {
-		bias = -1;
-	}
-
 	LOCK(reg);
 
 	if (bias != -1) {



CVS commit: src/sys/arch/arm/rockchip

2021-11-12 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Fri Nov 12 22:53:21 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk3288_iomux.c

Log Message:
Fix register accesses to PMU registers. Unlike the GRF ones, a RMW cycle
is required to update settings here.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/rockchip/rk3288_iomux.c

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



Re: CVS commit: src/sys/arch/arm/rockchip

2021-01-01 Thread Jared McNeill
Oops. The change was to make sure that a devicetree node with a 
"rockchip,grf" property on a device type that doesn't provide a config 
struct doesn't deref a NULL ptr.


On Fri, 1 Jan 2021, Jared D. McNeill wrote:


Module Name:src
Committed By:   jmcneill
Date:   Fri Jan  1 11:44:41 UTC 2021

Modified Files:
src/sys/arch/arm/rockchip: rk_i2s.c

Log Message:
rk_i2s.c


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/rockchip/rk_i2s.c

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




CVS commit: src/sys/arch/arm/rockchip

2019-11-29 Thread Jonathan A. Kollasch
Module Name:src
Committed By:   jakllsch
Date:   Fri Nov 29 15:24:22 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk3399_cru.c

Log Message:
add RK3399 DisplayPort clocks


To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/arm/rockchip/rk3399_cru.c

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



CVS commit: src/sys/arch/arm/rockchip

2019-11-29 Thread Jonathan A. Kollasch
Module Name:src
Committed By:   jakllsch
Date:   Fri Nov 29 15:24:22 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk3399_cru.c

Log Message:
add RK3399 DisplayPort clocks


To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/arm/rockchip/rk3399_cru.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/rk3399_cru.c
diff -u src/sys/arch/arm/rockchip/rk3399_cru.c:1.15 src/sys/arch/arm/rockchip/rk3399_cru.c:1.16
--- src/sys/arch/arm/rockchip/rk3399_cru.c:1.15	Fri Nov 29 15:20:28 2019
+++ src/sys/arch/arm/rockchip/rk3399_cru.c	Fri Nov 29 15:24:21 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3399_cru.c,v 1.15 2019/11/29 15:20:28 jakllsch Exp $ */
+/* $NetBSD: rk3399_cru.c,v 1.16 2019/11/29 15:24:21 jakllsch Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -28,7 +28,7 @@
 
 #include 
 
-__KERNEL_RCSID(1, "$NetBSD: rk3399_cru.c,v 1.15 2019/11/29 15:20:28 jakllsch Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk3399_cru.c,v 1.16 2019/11/29 15:24:21 jakllsch Exp $");
 
 #include 
 #include 
@@ -353,6 +353,7 @@ static const char * mux_pll_src_cpll_gpl
 static const char * mux_pll_src_cpll_gpll_upll_parents[] = { "cpll", "gpll", "upll" };
 static const char * mux_pll_src_cpll_gpll_npll_24m_parents[] = { "cpll", "gpll", "npll", "xin24m" };
 static const char * mux_pll_src_cpll_gpll_npll_ppll_upll_24m_parents[] = { "cpll", "gpll", "npll", "ppll", "upll", "xin24m" };
+static const char * mux_pll_src_npll_cpll_gpll_parents[] = { "npll", "cpll", "gpll" };
 static const char * mux_pll_src_vpll_cpll_gpll_parents[] = { "vpll", "cpll", "gpll" };
 static const char * mux_pll_src_vpll_cpll_gpll_npll_parents[] = { "vpll", "cpll", "gpll", "npll" };
 static const char * mux_aclk_perilp0_parents[] = { "cpll_aclk_perilp0_src", "gpll_aclk_perilp0_src" };
@@ -1005,6 +1006,15 @@ static struct rk_cru_clk rk3399_cru_clks
 	RK_GATE(RK3399_PCLK_EDP_NOC, "pclk_edp_noc", "pclk_edp", CLKGATE_CON(32), 12),
 	RK_GATE(RK3399_PCLK_EDP_CTRL, "pclk_edp_ctrl", "pclk_edp", CLKGATE_CON(32), 13),
 
+	RK_COMPOSITE(RK3399_SCLK_DP_CORE, "clk_dp_core", mux_pll_src_npll_cpll_gpll_parents,
+		 CLKSEL_CON(46),	/* muxdiv_reg */
+		 __BITS(7,6),	/* mux_mask */
+		 __BITS(4,0),	/* div_mask */
+		 CLKGATE_CON(11),	/* gate_reg */
+		 __BIT(8),		/* gate_mask */
+		 0),
+	RK_GATE(RK3399_PCLK_DP_CTRL, "pclk_dp_ctrl", "pclk_hdcp", CLKGATE_CON(29), 7),
+
 };
 
 static const struct rk3399_init_param {



CVS commit: src/sys/arch/arm/rockchip

2019-11-29 Thread Jonathan A. Kollasch
Module Name:src
Committed By:   jakllsch
Date:   Fri Nov 29 15:20:28 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk3399_cru.c

Log Message:
add RK3399 eDP clocks


To generate a diff of this commit:
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/rockchip/rk3399_cru.c

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



CVS commit: src/sys/arch/arm/rockchip

2019-11-29 Thread Jonathan A. Kollasch
Module Name:src
Committed By:   jakllsch
Date:   Fri Nov 29 15:20:28 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk3399_cru.c

Log Message:
add RK3399 eDP clocks


To generate a diff of this commit:
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/rockchip/rk3399_cru.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/rk3399_cru.c
diff -u src/sys/arch/arm/rockchip/rk3399_cru.c:1.14 src/sys/arch/arm/rockchip/rk3399_cru.c:1.15
--- src/sys/arch/arm/rockchip/rk3399_cru.c:1.14	Fri Nov 29 15:00:20 2019
+++ src/sys/arch/arm/rockchip/rk3399_cru.c	Fri Nov 29 15:20:28 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3399_cru.c,v 1.14 2019/11/29 15:00:20 jakllsch Exp $ */
+/* $NetBSD: rk3399_cru.c,v 1.15 2019/11/29 15:20:28 jakllsch Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -28,7 +28,7 @@
 
 #include 
 
-__KERNEL_RCSID(1, "$NetBSD: rk3399_cru.c,v 1.14 2019/11/29 15:00:20 jakllsch Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk3399_cru.c,v 1.15 2019/11/29 15:20:28 jakllsch Exp $");
 
 #include 
 #include 
@@ -993,6 +993,18 @@ static struct rk_cru_clk rk3399_cru_clks
 		 CLKGATE_CON(8),	/* gate_reg */
 		 __BIT(12),		/* gate_mask */
 		 RK_COMPOSITE_SET_RATE_PARENT),
+
+	/* eDP */
+	RK_COMPOSITE(RK3399_PCLK_EDP, "pclk_edp", mux_pll_src_cpll_gpll_parents,
+		 CLKSEL_CON(44),	/* muxdiv_reg */
+		 __BIT(15),		/* mux_mask */
+		 __BITS(13,8),	/* div_mask */
+		 CLKGATE_CON(11),	/* gate_reg */
+		 __BIT(11),		/* gate_mask */
+		 0),
+	RK_GATE(RK3399_PCLK_EDP_NOC, "pclk_edp_noc", "pclk_edp", CLKGATE_CON(32), 12),
+	RK_GATE(RK3399_PCLK_EDP_CTRL, "pclk_edp_ctrl", "pclk_edp", CLKGATE_CON(32), 13),
+
 };
 
 static const struct rk3399_init_param {



CVS commit: src/sys/arch/arm/rockchip

2019-11-29 Thread Jonathan A. Kollasch
Module Name:src
Committed By:   jakllsch
Date:   Fri Nov 29 15:00:20 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk3399_cru.c

Log Message:
fix copy/paste error in mux_pll_src_cpll_gpll_ppll_parents[]


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/rockchip/rk3399_cru.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/rk3399_cru.c
diff -u src/sys/arch/arm/rockchip/rk3399_cru.c:1.13 src/sys/arch/arm/rockchip/rk3399_cru.c:1.14
--- src/sys/arch/arm/rockchip/rk3399_cru.c:1.13	Sat Nov 16 13:23:13 2019
+++ src/sys/arch/arm/rockchip/rk3399_cru.c	Fri Nov 29 15:00:20 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3399_cru.c,v 1.13 2019/11/16 13:23:13 jmcneill Exp $ */
+/* $NetBSD: rk3399_cru.c,v 1.14 2019/11/29 15:00:20 jakllsch Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -28,7 +28,7 @@
 
 #include 
 
-__KERNEL_RCSID(1, "$NetBSD: rk3399_cru.c,v 1.13 2019/11/16 13:23:13 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk3399_cru.c,v 1.14 2019/11/29 15:00:20 jakllsch Exp $");
 
 #include 
 #include 
@@ -349,7 +349,7 @@ static const char * armclkb_parents[] = 
 static const char * mux_clk_tsadc_parents[] = { "xin24m", "xin32k" };
 static const char * mux_pll_src_cpll_gpll_parents[] = { "cpll", "gpll" };
 static const char * mux_pll_src_cpll_gpll_npll_parents[] = { "cpll", "gpll", "npll" };
-static const char * mux_pll_src_cpll_gpll_ppll_parents[] = { "cpll", "gpll", "npll" };
+static const char * mux_pll_src_cpll_gpll_ppll_parents[] = { "cpll", "gpll", "ppll" };
 static const char * mux_pll_src_cpll_gpll_upll_parents[] = { "cpll", "gpll", "upll" };
 static const char * mux_pll_src_cpll_gpll_npll_24m_parents[] = { "cpll", "gpll", "npll", "xin24m" };
 static const char * mux_pll_src_cpll_gpll_npll_ppll_upll_24m_parents[] = { "cpll", "gpll", "npll", "ppll", "upll", "xin24m" };



CVS commit: src/sys/arch/arm/rockchip

2019-11-29 Thread Jonathan A. Kollasch
Module Name:src
Committed By:   jakllsch
Date:   Fri Nov 29 15:00:20 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk3399_cru.c

Log Message:
fix copy/paste error in mux_pll_src_cpll_gpll_ppll_parents[]


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/rockchip/rk3399_cru.c

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



CVS commit: src/sys/arch/arm/rockchip

2019-11-28 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Fri Nov 29 00:36:22 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk3399_pcie.c

Log Message:
Do not crash if the optional vpcie3v3-supply property is missing or the
regulator can not be found.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/rockchip/rk3399_pcie.c

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



CVS commit: src/sys/arch/arm/rockchip

2019-11-28 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Fri Nov 29 00:36:22 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk3399_pcie.c

Log Message:
Do not crash if the optional vpcie3v3-supply property is missing or the
regulator can not be found.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/rockchip/rk3399_pcie.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/rk3399_pcie.c
diff -u src/sys/arch/arm/rockchip/rk3399_pcie.c:1.6 src/sys/arch/arm/rockchip/rk3399_pcie.c:1.7
--- src/sys/arch/arm/rockchip/rk3399_pcie.c:1.6	Sun Jun 23 16:15:43 2019
+++ src/sys/arch/arm/rockchip/rk3399_pcie.c	Fri Nov 29 00:36:22 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3399_pcie.c,v 1.6 2019/06/23 16:15:43 jmcneill Exp $ */
+/* $NetBSD: rk3399_pcie.c,v 1.7 2019/11/29 00:36:22 jmcneill Exp $ */
 /*
  * Copyright (c) 2018 Mark Kettenis 
  *
@@ -17,7 +17,7 @@
 
 #include 
 
-__KERNEL_RCSID(1, "$NetBSD: rk3399_pcie.c,v 1.6 2019/06/23 16:15:43 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk3399_pcie.c,v 1.7 2019/11/29 00:36:22 jmcneill Exp $");
 
 #include 
 #include 
@@ -241,8 +241,10 @@ rkpcie_attach(device_t parent, device_t 
 
 	struct fdtbus_regulator *regulator;
 	regulator = fdtbus_regulator_acquire(phandle, "vpcie3v3-supply");
-	fdtbus_regulator_enable(regulator);
-	fdtbus_regulator_release(regulator);
+	if (regulator != NULL) {
+		fdtbus_regulator_enable(regulator);
+		fdtbus_regulator_release(regulator);
+	}
 		
 	fdtbus_clock_assign(phandle);
 	clock_enable_all(phandle);



CVS commit: src/sys/arch/arm/rockchip

2019-11-16 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov 16 13:25:33 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk_dwhdmi.c

Log Message:
Add audio support


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/rockchip/rk_dwhdmi.c

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



CVS commit: src/sys/arch/arm/rockchip

2019-11-16 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov 16 13:25:33 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk_dwhdmi.c

Log Message:
Add audio support


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/rockchip/rk_dwhdmi.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_dwhdmi.c
diff -u src/sys/arch/arm/rockchip/rk_dwhdmi.c:1.2 src/sys/arch/arm/rockchip/rk_dwhdmi.c:1.3
--- src/sys/arch/arm/rockchip/rk_dwhdmi.c:1.2	Sun Nov 10 12:07:50 2019
+++ src/sys/arch/arm/rockchip/rk_dwhdmi.c	Sat Nov 16 13:25:33 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_dwhdmi.c,v 1.2 2019/11/10 12:07:50 jmcneill Exp $ */
+/* $NetBSD: rk_dwhdmi.c,v 1.3 2019/11/16 13:25:33 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared D. McNeill 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_dwhdmi.c,v 1.2 2019/11/10 12:07:50 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_dwhdmi.c,v 1.3 2019/11/16 13:25:33 jmcneill Exp $");
 
 #include 
 #include 
@@ -194,6 +194,21 @@ rk_dwhdmi_mode_set(struct dwhdmi_softc *
 	dwhdmi_phy_mode_set(dsc, mode, adjusted_mode);
 }
 
+static audio_dai_tag_t
+rk_dwhdmi_dai_get_tag(device_t dev, const void *data, size_t len)
+{
+	struct rk_dwhdmi_softc * const sc = device_private(dev);
+
+	if (len != 4)
+		return NULL;
+
+	return &sc->sc_base.sc_dai;
+}
+
+static struct fdtbus_dai_controller_func rk_dwhdmi_dai_funcs = {
+	.get_tag = rk_dwhdmi_dai_get_tag
+};
+
 static int
 rk_dwhdmi_match(device_t parent, cfdata_t cf, void *aux)
 {
@@ -287,6 +302,8 @@ rk_dwhdmi_attach(device_t parent, device
 	sc->sc_ports.dp_ep_activate = rk_dwhdmi_ep_activate;
 	sc->sc_ports.dp_ep_get_data = rk_dwhdmi_ep_get_data;
 	fdt_ports_register(&sc->sc_ports, self, phandle, EP_DRM_BRIDGE);
+
+	fdtbus_register_dai_controller(self, phandle, &rk_dwhdmi_dai_funcs);
 }
 
 CFATTACH_DECL_NEW(rk_dwhdmi, sizeof(struct rk_dwhdmi_softc),



CVS commit: src/sys/arch/arm/rockchip

2019-11-16 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov 16 13:24:03 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: files.rockchip
Added Files:
src/sys/arch/arm/rockchip: rk_i2s.c

Log Message:
Add driver for Rockchip I2S/PCM controller.


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/arm/rockchip/files.rockchip
cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/rockchip/rk_i2s.c

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



CVS commit: src/sys/arch/arm/rockchip

2019-11-16 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov 16 13:24:03 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: files.rockchip
Added Files:
src/sys/arch/arm/rockchip: rk_i2s.c

Log Message:
Add driver for Rockchip I2S/PCM controller.


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/arm/rockchip/files.rockchip
cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/rockchip/rk_i2s.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/files.rockchip
diff -u src/sys/arch/arm/rockchip/files.rockchip:1.21 src/sys/arch/arm/rockchip/files.rockchip:1.22
--- src/sys/arch/arm/rockchip/files.rockchip:1.21	Sat Nov  9 23:30:14 2019
+++ src/sys/arch/arm/rockchip/files.rockchip	Sat Nov 16 13:24:03 2019
@@ -1,4 +1,4 @@
-#	$NetBSD: files.rockchip,v 1.21 2019/11/09 23:30:14 jmcneill Exp $
+#	$NetBSD: files.rockchip,v 1.22 2019/11/16 13:24:03 jmcneill Exp $
 #
 # Configuration info for Rockchip family SoCs
 #
@@ -103,6 +103,11 @@ file	arch/arm/rockchip/rk_vop.c		rk_vop
 attach	dwhdmi at fdt with rk_dwhdmi
 file	arch/arm/rockchip/rk_dwhdmi.c		rk_dwhdmi
 
+# I2S/PCM controller
+device	rki2s	
+attach  rki2s at fdt with rk_i2s
+filearch/arm/rockchip/rk_i2s.c		rk_i2s
+
 # SOC parameters
 defflag	opt_soc.h			SOC_ROCKCHIP
 defflag	opt_soc.h			SOC_RK3328: SOC_ROCKCHIP

Added files:

Index: src/sys/arch/arm/rockchip/rk_i2s.c
diff -u /dev/null src/sys/arch/arm/rockchip/rk_i2s.c:1.1
--- /dev/null	Sat Nov 16 13:24:03 2019
+++ src/sys/arch/arm/rockchip/rk_i2s.c	Sat Nov 16 13:24:03 2019
@@ -0,0 +1,638 @@
+/* $NetBSD: rk_i2s.c,v 1.1 2019/11/16 13:24:03 jmcneill Exp $ */
+
+/*-
+ * Copyright (c) 2019 Jared McNeill 
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *notice, this list of conditions and the following disclaimer in the
+ *documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include 
+__KERNEL_RCSID(0, "$NetBSD: rk_i2s.c,v 1.1 2019/11/16 13:24:03 jmcneill Exp $");
+
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+
+#include 
+#include 
+
+#define	RK_I2S_FIFO_DEPTH	32
+#define	RK_I2S_SAMPLE_RATE	48000
+
+#define	I2S_TXCR		0x00
+#define	 TXCR_RCNT			__BITS(22,17)
+#define	 TXCR_TCSR			__BITS(16,15)
+#define	 TXCR_HWT			__BIT(14)
+#define	 TXCR_SJM			__BIT(12)
+#define	 TXCR_FBM			__BIT(11)
+#define	 TXCR_IBM			__BITS(10,9)
+#define	 TXCR_PBM			__BITS(8,7)
+#define	 TXCR_TFS			__BIT(5)
+#define	 TXCR_VDW			__BITS(4,0)
+#define	I2S_RXCR		0x04
+#define	 RXCR_RCSR			__BITS(16,15)
+#define	 RXCR_HWT			__BIT(14)
+#define	 RXCR_SJM			__BIT(12)
+#define	 RXCR_FBM			__BIT(11)
+#define	 RXCR_IBM			__BITS(10,9)
+#define	 RXCR_PBM			__BITS(8,7)
+#define	 RXCR_TFS			__BIT(5)
+#define	 RXCR_VDW			__BITS(4,0)
+#define	I2S_CKR			0x08
+#define	 CKR_TRCM			__BITS(29,28)
+#define	 CKR_MSS			__BIT(27)
+#define	 CKR_CKP			__BIT(26)
+#define	 CKR_RLP			__BIT(25)
+#define	 CKR_TLP			__BIT(24)
+#define	 CKR_MDIV			__BITS(23,16)
+#define	 CKR_RSD			__BITS(15,8)
+#define	 CKR_TSD			__BITS(7,0)
+#define	I2S_TXFIFOLR		0x0c
+#define	 TXFIFOLR_TFL(n)		__BITS((n) * 6 + 5, (n) * 6)
+#define	I2S_DMACR		0x10
+#define	 DMACR_RDE			__BIT(24)
+#define	 DMACR_RDL			__BITS(20,16)
+#define	 DMACR_TDE			__BIT(8)
+#define	 DMACR_TDL			__BITS(4,0)
+#define	I2S_INTCR		0x14
+#define	 INTCR_RFT			__BITS(24,20)
+#define	 INTCR_RXOIC			__BIT(18)
+#define	 INTCR_RXOIE			__BIT(17)
+#define	 INTCR_RXFIE			__BIT(16)
+#define	 INTCR_TFT			__BITS(8,4)
+#define	 INTCR_TXUIC			__BIT(2)
+#define	 INTCR_TXUIE			__BIT(1)
+#define	 INTCR_TXEIE			__BIT(0)
+#define	I2S_INTSR		0x18
+#define	 INTSR_RXOI			__BIT(17)
+#define	 INTSR_RXFI			__BIT(16)
+#define	 INTSR_TXUI			__BIT(1)
+#define	 INTSR_TXEI			__BIT(0)
+#define	I2S_XFER		0x1c
+#define	 XFER_RXS			__BIT(1)
+#define	 XFER_

CVS commit: src/sys/arch/arm/rockchip

2019-11-16 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov 16 13:23:13 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk3399_cru.c rk_cru.h rk_cru_composite.c

Log Message:
Add support for I2S clocks.


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/rockchip/rk3399_cru.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/rockchip/rk_cru.h
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/rockchip/rk_cru_composite.c

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



CVS commit: src/sys/arch/arm/rockchip

2019-11-16 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov 16 13:23:13 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk3399_cru.c rk_cru.h rk_cru_composite.c

Log Message:
Add support for I2S clocks.


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/rockchip/rk3399_cru.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/rockchip/rk_cru.h
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/rockchip/rk_cru_composite.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/rk3399_cru.c
diff -u src/sys/arch/arm/rockchip/rk3399_cru.c:1.12 src/sys/arch/arm/rockchip/rk3399_cru.c:1.13
--- src/sys/arch/arm/rockchip/rk3399_cru.c:1.12	Sun Nov 10 11:43:04 2019
+++ src/sys/arch/arm/rockchip/rk3399_cru.c	Sat Nov 16 13:23:13 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3399_cru.c,v 1.12 2019/11/10 11:43:04 jmcneill Exp $ */
+/* $NetBSD: rk3399_cru.c,v 1.13 2019/11/16 13:23:13 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -28,7 +28,7 @@
 
 #include 
 
-__KERNEL_RCSID(1, "$NetBSD: rk3399_cru.c,v 1.12 2019/11/10 11:43:04 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk3399_cru.c,v 1.13 2019/11/16 13:23:13 jmcneill Exp $");
 
 #include 
 #include 
@@ -361,6 +361,11 @@ static const char * mux_aclk_perihp_pare
 static const char * mux_aclk_cci_parents[] = { "cpll_aclk_cci_src", "gpll_aclk_cci_src", "npll_aclk_cci_src", "vpll_aclk_cci_src" };
 static const char * mux_dclk_vop0_parents[] = { "dclk_vop0_div", "dclk_vop0_frac" };
 static const char * mux_dclk_vop1_parents[] = { "dclk_vop1_div", "dclk_vop1_frac" };
+static const char * mux_i2s0_parents[] = { "clk_i2s0_div", "clk_i2s0_frac", "clkin_i2s", "xin12m" };
+static const char * mux_i2s1_parents[] = { "clk_i2s1_div", "clk_i2s1_frac", "clkin_i2s", "xin12m" };
+static const char * mux_i2s2_parents[] = { "clk_i2s2_div", "clk_i2s2_frac", "clkin_i2s", "xin12m" };
+static const char * mux_i2sch_parents[] = { "clk_i2s0", "clk_i2s1", "clk_i2s2" };
+static const char * mux_i2sout_parents[] = { "clk_i2sout_src", "xin12m" };
 static const char * mux_uart0_parents[] = { "clk_uart0_div", "clk_uart0_frac", "xin24m" };
 static const char * mux_uart1_parents[] = { "clk_uart1_div", "clk_uart1_frac", "xin24m" };
 static const char * mux_uart2_parents[] = { "clk_uart2_div", "clk_uart2_frac", "xin24m" };
@@ -939,13 +944,73 @@ static struct rk_cru_clk rk3399_cru_clks
 		 0),
 	RK_GATE(RK3399_PCLK_HDMI_CTRL, "pclk_hdmi_ctrl", "pclk_hdcp", CLKGATE_CON(29), 6),
 	RK_GATE(RK3399_SCLK_HDMI_SFR, "clk_hdmi_sfr", "xin24m", CLKGATE_CON(11), 6),
+
+	/* I2S2 */
+	RK_COMPOSITE(0, "clk_i2s0_div", mux_pll_src_cpll_gpll_parents,
+		 CLKSEL_CON(28),	/* muxdiv_reg */
+		 __BIT(7),		/* mux_mask */
+		 __BITS(6,0),	/* div_mask */
+		 CLKGATE_CON(8),	/* gate_reg */
+		 __BIT(3),		/* gate_mask */
+		 0),
+	RK_COMPOSITE(0, "clk_i2s1_div", mux_pll_src_cpll_gpll_parents,
+		 CLKSEL_CON(29),	/* muxdiv_reg */
+		 __BIT(7),		/* mux_mask */
+		 __BITS(6,0),	/* div_mask */
+		 CLKGATE_CON(8),	/* gate_reg */
+		 __BIT(6),		/* gate_mask */
+		 0),
+	RK_COMPOSITE(0, "clk_i2s2_div", mux_pll_src_cpll_gpll_parents,
+		 CLKSEL_CON(30),	/* muxdiv_reg */
+		 __BIT(7),		/* mux_mask */
+		 __BITS(6,0),	/* div_mask */
+		 CLKGATE_CON(8),	/* gate_reg */
+		 __BIT(9),		/* gate_mask */
+		 0),
+	RK_COMPOSITE_FRAC(0, "clk_i2s0_frac", "clk_i2s0_div",
+			  CLKSEL_CON(96),	/* frac_reg */
+			  0),
+	RK_COMPOSITE_FRAC(0, "clk_i2s1_frac", "clk_i2s1_div",
+			  CLKSEL_CON(97),	/* frac_reg */
+			  0),
+	RK_COMPOSITE_FRAC(0, "clk_i2s2_frac", "clk_i2s2_div",
+			  CLKSEL_CON(98),	/* frac_reg */
+			  0),
+	RK_MUX(0, "clk_i2s0_mux", mux_i2s0_parents, CLKSEL_CON(28), __BITS(9,8)),
+	RK_MUX(0, "clk_i2s1_mux", mux_i2s1_parents, CLKSEL_CON(29), __BITS(9,8)),
+	RK_MUX(0, "clk_i2s2_mux", mux_i2s2_parents, CLKSEL_CON(30), __BITS(9,8)),
+	RK_GATE(RK3399_SCLK_I2S0_8CH, "clk_i2s0", "clk_i2s0_mux", CLKGATE_CON(8), 5),
+	RK_GATE(RK3399_SCLK_I2S1_8CH, "clk_i2s1", "clk_i2s1_mux", CLKGATE_CON(8), 8),
+	RK_GATE(RK3399_SCLK_I2S2_8CH, "clk_i2s2", "clk_i2s2_mux", CLKGATE_CON(8), 11),
+	RK_GATE(RK3399_HCLK_I2S0_8CH, "hclk_i2s0", "hclk_perilp1", CLKGATE_CON(34), 0),
+	RK_GATE(RK3399_HCLK_I2S1_8CH, "hclk_i2s1", "hclk_perilp1", CLKGATE_CON(34), 1),
+	RK_GATE(RK3399_HCLK_I2S2_8CH, "hclk_i2s2", "hclk_perilp1", CLKGATE_CON(34), 2),
+	RK_MUX(0, "clk_i2sout_src", mux_i2sch_parents, CLKSEL_CON(31), __BITS(1,0)),
+	RK_COMPOSITE(RK3399_SCLK_I2S_8CH_OUT, "clk_i2sout", mux_i2sout_parents,
+		 CLKSEL_CON(31),	/* muxdiv_reg */
+		 __BIT(2),		/* mux_mask */
+		 0,			/* div_mask */
+		 CLKGATE_CON(8),	/* gate_reg */
+		 __BIT(12),		/* gate_mask */
+		 RK_COMPOSITE_SET_RATE_PARENT),
+};
+
+static const struct rk3399_init_param {
+	const char *clk;
+	const char *parent;
+} rk3399_init_params[] = {
+	{ .clk = "clk_i2s0_mux",	.parent 

CVS commit: src/sys/arch/arm/rockchip

2019-11-14 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Thu Nov 14 20:39:46 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk_drm.c

Log Message:
Remove debug output


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/rockchip/rk_drm.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_drm.c
diff -u src/sys/arch/arm/rockchip/rk_drm.c:1.1 src/sys/arch/arm/rockchip/rk_drm.c:1.2
--- src/sys/arch/arm/rockchip/rk_drm.c:1.1	Sat Nov  9 23:30:14 2019
+++ src/sys/arch/arm/rockchip/rk_drm.c	Thu Nov 14 20:39:46 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_drm.c,v 1.1 2019/11/09 23:30:14 jmcneill Exp $ */
+/* $NetBSD: rk_drm.c,v 1.2 2019/11/14 20:39:46 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared D. McNeill 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_drm.c,v 1.1 2019/11/09 23:30:14 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_drm.c,v 1.2 2019/11/14 20:39:46 jmcneill Exp $");
 
 #include 
 #include 
@@ -134,8 +134,6 @@ rk_drm_attach(device_t parent, device_t 
 	sc->sc_bst = faa->faa_bst;
 	sc->sc_phandle = faa->faa_phandle;
 
-	drm_debug = 0xff;
-
 	aprint_naive("\n");
 
 	if (prop_dictionary_get_bool(dict, "disabled", &is_disabled) && is_disabled) {



CVS commit: src/sys/arch/arm/rockchip

2019-11-14 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Thu Nov 14 20:39:46 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk_drm.c

Log Message:
Remove debug output


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/rockchip/rk_drm.c

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



CVS commit: src/sys/arch/arm/rockchip

2019-11-14 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Thu Nov 14 20:31:50 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk_vop.c

Log Message:
Fix a few swapped fields


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/rockchip/rk_vop.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_vop.c
diff -u src/sys/arch/arm/rockchip/rk_vop.c:1.1 src/sys/arch/arm/rockchip/rk_vop.c:1.2
--- src/sys/arch/arm/rockchip/rk_vop.c:1.1	Sat Nov  9 23:30:14 2019
+++ src/sys/arch/arm/rockchip/rk_vop.c	Thu Nov 14 20:31:50 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_vop.c,v 1.1 2019/11/09 23:30:14 jmcneill Exp $ */
+/* $NetBSD: rk_vop.c,v 1.2 2019/11/14 20:31:50 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared D. McNeill 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_vop.c,v 1.1 2019/11/09 23:30:14 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_vop.c,v 1.2 2019/11/14 20:31:50 jmcneill Exp $");
 
 #include 
 #include 
@@ -90,14 +90,14 @@ __KERNEL_RCSID(0, "$NetBSD: rk_vop.c,v 1
 #define	 DSP_VACT_ST_POST		__BITS(28,16)
 #define	 DSP_VACT_END_POST		__BITS(12,0)
 #define	VOP_DSP_HTOTAL_HS_END		0x0188
-#define	 DSP_HTOTAL			__BITS(28,16)
-#define	 DSP_HS_END			__BITS(12,0)
+#define	 DSP_HS_END			__BITS(28,16)
+#define	 DSP_HTOTAL			__BITS(12,0)
 #define	VOP_DSP_HACT_ST_END		0x018c
 #define	 DSP_HACT_ST			__BITS(28,16)
 #define	 DSP_HACT_END			__BITS(12,0)
 #define	VOP_DSP_VTOTAL_VS_END		0x0190
-#define	 DSP_VTOTAL			__BITS(28,16)
-#define	 DSP_VS_END			__BITS(12,0)
+#define	 DSP_VS_END			__BITS(28,16)
+#define	 DSP_VTOTAL			__BITS(12,0)
 #define	VOP_DSP_VACT_ST_END		0x0194
 #define	 DSP_VACT_ST			__BITS(28,16)
 #define	 DSP_VACT_END			__BITS(12,0)
@@ -306,8 +306,8 @@ rk_vop_mode_set(struct drm_crtc *crtc, s
 	  __SHIFTIN(vactive - 1, WIN0_DSP_HEIGHT);
 	WR4(sc, VOP_WIN0_DSP_INFO, val);
 
-	val = __SHIFTIN(hsync_len + hback_porch, WIN0_DSP_YST) |
-	  __SHIFTIN(vsync_len + vback_porch, WIN0_DSP_XST);
+	val = __SHIFTIN(hsync_len + hback_porch, WIN0_DSP_XST) |
+	  __SHIFTIN(vsync_len + vback_porch, WIN0_DSP_YST);
 	WR4(sc, VOP_WIN0_DSP_ST, val);
 
 	WR4(sc, VOP_WIN0_COLOR_KEY, 0);



CVS commit: src/sys/arch/arm/rockchip

2019-11-14 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Thu Nov 14 20:31:50 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk_vop.c

Log Message:
Fix a few swapped fields


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/rockchip/rk_vop.c

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



CVS commit: src/sys/arch/arm/rockchip

2019-11-10 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sun Nov 10 12:07:51 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk_dwhdmi.c

Log Message:
Fix typo in phy config table


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/rockchip/rk_dwhdmi.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_dwhdmi.c
diff -u src/sys/arch/arm/rockchip/rk_dwhdmi.c:1.1 src/sys/arch/arm/rockchip/rk_dwhdmi.c:1.2
--- src/sys/arch/arm/rockchip/rk_dwhdmi.c:1.1	Sat Nov  9 23:30:14 2019
+++ src/sys/arch/arm/rockchip/rk_dwhdmi.c	Sun Nov 10 12:07:50 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_dwhdmi.c,v 1.1 2019/11/09 23:30:14 jmcneill Exp $ */
+/* $NetBSD: rk_dwhdmi.c,v 1.2 2019/11/10 12:07:50 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared D. McNeill 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_dwhdmi.c,v 1.1 2019/11/09 23:30:14 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_dwhdmi.c,v 1.2 2019/11/10 12:07:50 jmcneill Exp $");
 
 #include 
 #include 
@@ -64,7 +64,7 @@ static const struct dwhdmi_phy_config rk
 	{ 74250,	0x8009, 0x0004, 0x0272 },
 	{ 148500,	0x802b, 0x0004, 0x028d },
 	{ 297000,	0x8039, 0x0005, 0x028d },
-	{ 584000,	0x8039, 0x, 0x019d },
+	{ 594000,	0x8039, 0x, 0x019d },
 	{ 0,		0x, 0x, 0x }
 };
 



CVS commit: src/sys/arch/arm/rockchip

2019-11-10 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sun Nov 10 12:07:51 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk_dwhdmi.c

Log Message:
Fix typo in phy config table


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/rockchip/rk_dwhdmi.c

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



CVS commit: src/sys/arch/arm/rockchip

2019-11-10 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sun Nov 10 11:43:04 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk3399_cru.c rk_cru.h rk_cru_composite.c

Log Message:
Force DCLK_VOP0/1 dividers to 1 and select closest match when setting PLL
rates.


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/rockchip/rk3399_cru.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/rockchip/rk_cru.h
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/rockchip/rk_cru_composite.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/rk3399_cru.c
diff -u src/sys/arch/arm/rockchip/rk3399_cru.c:1.11 src/sys/arch/arm/rockchip/rk3399_cru.c:1.12
--- src/sys/arch/arm/rockchip/rk3399_cru.c:1.11	Sat Nov  9 23:29:48 2019
+++ src/sys/arch/arm/rockchip/rk3399_cru.c	Sun Nov 10 11:43:04 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3399_cru.c,v 1.11 2019/11/09 23:29:48 jmcneill Exp $ */
+/* $NetBSD: rk3399_cru.c,v 1.12 2019/11/10 11:43:04 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -28,7 +28,7 @@
 
 #include 
 
-__KERNEL_RCSID(1, "$NetBSD: rk3399_cru.c,v 1.11 2019/11/09 23:29:48 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk3399_cru.c,v 1.12 2019/11/10 11:43:04 jmcneill Exp $");
 
 #include 
 #include 
@@ -271,20 +271,21 @@ rk3399_cru_pll_set_rate(struct rk_cru_so
 	struct rk_cru_pll *pll = &clk->u.pll;
 	const struct rk_cru_pll_rate *pll_rate = NULL;
 	uint32_t val;
-	int retry;
+	int retry, best_diff;
 
 	KASSERT(clk->type == RK_CRU_PLL);
 
 	if (pll->rates == NULL || rate == 0)
 		return EIO;
 
-	for (int i = 0; i < pll->nrates; i++)
-		if (pll->rates[i].rate == rate) {
+	best_diff = INT_MAX;
+	for (int i = 0; i < pll->nrates; i++) {
+		const int diff = (int)rate - (int)pll->rates[i].rate;
+		if (abs(diff) < best_diff) {
 			pll_rate = &pll->rates[i];
-			break;
+			best_diff = abs(diff);
 		}
-	if (pll_rate == NULL)
-		return EINVAL;
+	}
 
 	val = __SHIFTIN(PLL_WORK_MODE_SLOW, PLL_WORK_MODE) | (PLL_WORK_MODE << 16);
 	CRU_WRITE(sc, pll->con_base + PLL_CON3, val);
@@ -869,7 +870,7 @@ static struct rk_cru_clk rk3399_cru_clks
 		 __BITS(7,0),	/* div_mask */
 		 CLKGATE_CON(10),	/* gate_reg */
 		 __BIT(12),		/* gate_mask */
-		 0),
+		 RK_COMPOSITE_SET_RATE_PARENT),
 	RK_GATE(RK3399_ACLK_VOP0, "aclk_vop0", "aclk_vop0_pre", CLKGATE_CON(28), 3),
 	RK_GATE(RK3399_HCLK_VOP0, "hclk_vop0", "hclk_vop0_pre", CLKGATE_CON(28), 2),
 	RK_MUX(RK3399_DCLK_VOP0, "dclk_vop0", mux_dclk_vop0_parents, CLKSEL_CON(49), __BIT(11)),
@@ -894,7 +895,7 @@ static struct rk_cru_clk rk3399_cru_clks
 		 __BITS(7,0),	/* div_mask */
 		 CLKGATE_CON(10),	/* gate_reg */
 		 __BIT(13),		/* gate_mask */
-		 0),
+		 RK_COMPOSITE_SET_RATE_PARENT),
 	RK_GATE(RK3399_ACLK_VOP1, "aclk_vop1", "aclk_vop1_pre", CLKGATE_CON(28), 7),
 	RK_GATE(RK3399_HCLK_VOP1, "hclk_vop1", "hclk_vop1_pre", CLKGATE_CON(28), 6),
 	RK_MUX(RK3399_DCLK_VOP1, "dclk_vop1", mux_dclk_vop1_parents, CLKSEL_CON(50), __BIT(11)),
@@ -944,12 +945,21 @@ static void
 rk3399_cru_init(struct rk_cru_softc *sc)
 {
 	struct rk_cru_clk *clk;
+	uint32_t write_mask, write_val;
 
 	/*
 	 * Force an update of BPLL to bring it out of slow mode.
 	 */
 	clk = rk_cru_clock_find(sc, "armclkb");
 	clk_set_rate(&clk->base, clk_get_rate(&clk->base));
+
+	/*
+	 * Set DCLK_VOP0 and DCLK_VOP1 dividers to 1.
+	 */
+	write_mask = __BITS(7,0) << 16;
+	write_val = 0;
+	CRU_WRITE(sc, CLKSEL_CON(49), write_mask | write_val);
+	CRU_WRITE(sc, CLKSEL_CON(50), write_mask | write_val);
 }
 
 static int

Index: src/sys/arch/arm/rockchip/rk_cru.h
diff -u src/sys/arch/arm/rockchip/rk_cru.h:1.5 src/sys/arch/arm/rockchip/rk_cru.h:1.6
--- src/sys/arch/arm/rockchip/rk_cru.h:1.5	Sat Oct 19 12:55:21 2019
+++ src/sys/arch/arm/rockchip/rk_cru.h	Sun Nov 10 11:43:04 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_cru.h,v 1.5 2019/10/19 12:55:21 tnn Exp $ */
+/* $NetBSD: rk_cru.h,v 1.6 2019/11/10 11:43:04 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -204,6 +204,7 @@ struct rk_cru_composite {
 	u_int		nparents;
 	u_int		flags;
 #define	RK_COMPOSITE_ROUND_DOWN		0x01
+#define	RK_COMPOSITE_SET_RATE_PARENT	0x02
 };
 
 int	rk_cru_composite_enable(struct rk_cru_softc *, struct rk_cru_clk *, int);

Index: src/sys/arch/arm/rockchip/rk_cru_composite.c
diff -u src/sys/arch/arm/rockchip/rk_cru_composite.c:1.3 src/sys/arch/arm/rockchip/rk_cru_composite.c:1.4
--- src/sys/arch/arm/rockchip/rk_cru_composite.c:1.3	Tue Jun 19 01:24:17 2018
+++ src/sys/arch/arm/rockchip/rk_cru_composite.c	Sun Nov 10 11:43:04 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_cru_composite.c,v 1.3 2018/06/19 01:24:17 jmcneill Exp $ */
+/* $NetBSD: rk_cru_composite.c,v 1.4 2019/11/10 11:43:04 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk_cru_composite.c,v 1.3 2018/06/19 01:24:17 jmcneill Exp $");
+__KERNEL_RCSID(

CVS commit: src/sys/arch/arm/rockchip

2019-11-10 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sun Nov 10 11:43:04 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk3399_cru.c rk_cru.h rk_cru_composite.c

Log Message:
Force DCLK_VOP0/1 dividers to 1 and select closest match when setting PLL
rates.


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/rockchip/rk3399_cru.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/rockchip/rk_cru.h
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/rockchip/rk_cru_composite.c

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



CVS commit: src/sys/arch/arm/rockchip

2019-11-09 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov  9 23:30:14 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: files.rockchip
Added Files:
src/sys/arch/arm/rockchip: rk_drm.c rk_drm.h rk_dwhdmi.c rk_fb.c
rk_vop.c

Log Message:
WIP display driver for Rockchip RK3399


To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 src/sys/arch/arm/rockchip/files.rockchip
cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/rockchip/rk_drm.c \
src/sys/arch/arm/rockchip/rk_drm.h src/sys/arch/arm/rockchip/rk_dwhdmi.c \
src/sys/arch/arm/rockchip/rk_fb.c src/sys/arch/arm/rockchip/rk_vop.c

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



CVS commit: src/sys/arch/arm/rockchip

2019-11-09 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov  9 23:30:14 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: files.rockchip
Added Files:
src/sys/arch/arm/rockchip: rk_drm.c rk_drm.h rk_dwhdmi.c rk_fb.c
rk_vop.c

Log Message:
WIP display driver for Rockchip RK3399


To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 src/sys/arch/arm/rockchip/files.rockchip
cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/rockchip/rk_drm.c \
src/sys/arch/arm/rockchip/rk_drm.h src/sys/arch/arm/rockchip/rk_dwhdmi.c \
src/sys/arch/arm/rockchip/rk_fb.c src/sys/arch/arm/rockchip/rk_vop.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/files.rockchip
diff -u src/sys/arch/arm/rockchip/files.rockchip:1.20 src/sys/arch/arm/rockchip/files.rockchip:1.21
--- src/sys/arch/arm/rockchip/files.rockchip:1.20	Mon Aug  5 15:22:59 2019
+++ src/sys/arch/arm/rockchip/files.rockchip	Sat Nov  9 23:30:14 2019
@@ -1,4 +1,4 @@
-#	$NetBSD: files.rockchip,v 1.20 2019/08/05 15:22:59 tnn Exp $
+#	$NetBSD: files.rockchip,v 1.21 2019/11/09 23:30:14 jmcneill Exp $
 #
 # Configuration info for Rockchip family SoCs
 #
@@ -83,6 +83,26 @@ device	rkpwm: pwm
 attach	rkpwm at fdt with rk_pwm
 file	arch/arm/rockchip/rk_pwm.c		rk_pwm
 
+# DRM master
+define	rkfbbus { }
+device	rkdrm: drmkms, ddc_read_edid, rkfbbus
+attach	rkdrm at fdt with rk_drm
+file	arch/arm/rockchip/rk_drm.c		rk_drm
+
+# DRM framebuffer console
+device	rkfb: rkfbbus, drmfb, wsemuldisplaydev
+attach	rkfb at rkfbbus with rk_fb
+file	arch/arm/rockchip/rk_fb.c		rk_fb
+
+# Visual Output Processor
+device	rkvop: drmkms
+attach	rkvop at fdt with rk_vop
+file	arch/arm/rockchip/rk_vop.c		rk_vop
+
+# HDMI TX (Designware based)
+attach	dwhdmi at fdt with rk_dwhdmi
+file	arch/arm/rockchip/rk_dwhdmi.c		rk_dwhdmi
+
 # SOC parameters
 defflag	opt_soc.h			SOC_ROCKCHIP
 defflag	opt_soc.h			SOC_RK3328: SOC_ROCKCHIP

Added files:

Index: src/sys/arch/arm/rockchip/rk_drm.c
diff -u /dev/null src/sys/arch/arm/rockchip/rk_drm.c:1.1
--- /dev/null	Sat Nov  9 23:30:14 2019
+++ src/sys/arch/arm/rockchip/rk_drm.c	Sat Nov  9 23:30:14 2019
@@ -0,0 +1,514 @@
+/* $NetBSD: rk_drm.c,v 1.1 2019/11/09 23:30:14 jmcneill Exp $ */
+
+/*-
+ * Copyright (c) 2019 Jared D. McNeill 
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *notice, this list of conditions and the following disclaimer in the
+ *documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include 
+__KERNEL_RCSID(0, "$NetBSD: rk_drm.c,v 1.1 2019/11/09 23:30:14 jmcneill Exp $");
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+
+#include 
+#include 
+
+#include 
+
+#define	RK_DRM_MAX_WIDTH	3840
+#define	RK_DRM_MAX_HEIGHT	2160
+
+static TAILQ_HEAD(, rk_drm_ports) rk_drm_ports =
+TAILQ_HEAD_INITIALIZER(rk_drm_ports);
+
+static const char * const compatible[] = {
+	"rockchip,display-subsystem",
+	NULL
+};
+
+static const char * fb_compatible[] = {
+	"simple-framebuffer",
+	NULL
+};
+
+static int	rk_drm_match(device_t, cfdata_t, void *);
+static void	rk_drm_attach(device_t, device_t, void *);
+
+static void	rk_drm_init(device_t);
+static vmem_t	*rk_drm_alloc_cma_pool(struct drm_device *, size_t);
+
+static int	rk_drm_set_busid(struct drm_device *, struct drm_master *);
+
+static uint32_t	rk_drm_get_vblank_counter(struct drm_device *, unsigned int);
+static int	rk_drm_enable_vblank(struct drm_device *, unsigned int);
+static void	rk_drm_disable_vblank(struct drm_device *, unsigned int);
+
+static int	rk_drm_load(struct drm_device *, unsigned long);
+static int	rk_drm_unload(struct drm_device *);
+
+static struct drm_driver rk_drm_driver = {
+	.driver_features = DRIVER_MODESET | DRIVER_GEM | 

CVS commit: src/sys/arch/arm/rockchip

2019-11-09 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov  9 23:29:48 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk3399_cru.c

Log Message:
Add HDMI and VOP clocks


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/rockchip/rk3399_cru.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/rk3399_cru.c
diff -u src/sys/arch/arm/rockchip/rk3399_cru.c:1.10 src/sys/arch/arm/rockchip/rk3399_cru.c:1.11
--- src/sys/arch/arm/rockchip/rk3399_cru.c:1.10	Sat Oct 19 12:55:21 2019
+++ src/sys/arch/arm/rockchip/rk3399_cru.c	Sat Nov  9 23:29:48 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3399_cru.c,v 1.10 2019/10/19 12:55:21 tnn Exp $ */
+/* $NetBSD: rk3399_cru.c,v 1.11 2019/11/09 23:29:48 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -28,7 +28,7 @@
 
 #include 
 
-__KERNEL_RCSID(1, "$NetBSD: rk3399_cru.c,v 1.10 2019/10/19 12:55:21 tnn Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk3399_cru.c,v 1.11 2019/11/09 23:29:48 jmcneill Exp $");
 
 #include 
 #include 
@@ -348,13 +348,18 @@ static const char * armclkb_parents[] = 
 static const char * mux_clk_tsadc_parents[] = { "xin24m", "xin32k" };
 static const char * mux_pll_src_cpll_gpll_parents[] = { "cpll", "gpll" };
 static const char * mux_pll_src_cpll_gpll_npll_parents[] = { "cpll", "gpll", "npll" };
+static const char * mux_pll_src_cpll_gpll_ppll_parents[] = { "cpll", "gpll", "npll" };
 static const char * mux_pll_src_cpll_gpll_upll_parents[] = { "cpll", "gpll", "upll" };
 static const char * mux_pll_src_cpll_gpll_npll_24m_parents[] = { "cpll", "gpll", "npll", "xin24m" };
 static const char * mux_pll_src_cpll_gpll_npll_ppll_upll_24m_parents[] = { "cpll", "gpll", "npll", "ppll", "upll", "xin24m" };
+static const char * mux_pll_src_vpll_cpll_gpll_parents[] = { "vpll", "cpll", "gpll" };
+static const char * mux_pll_src_vpll_cpll_gpll_npll_parents[] = { "vpll", "cpll", "gpll", "npll" };
 static const char * mux_aclk_perilp0_parents[] = { "cpll_aclk_perilp0_src", "gpll_aclk_perilp0_src" };
 static const char * mux_hclk_perilp1_parents[] = { "cpll_hclk_perilp1_src", "gpll_hclk_perilp1_src" };
 static const char * mux_aclk_perihp_parents[] = { "cpll_aclk_perihp_src", "gpll_aclk_perihp_src" };
 static const char * mux_aclk_cci_parents[] = { "cpll_aclk_cci_src", "gpll_aclk_cci_src", "npll_aclk_cci_src", "vpll_aclk_cci_src" };
+static const char * mux_dclk_vop0_parents[] = { "dclk_vop0_div", "dclk_vop0_frac" };
+static const char * mux_dclk_vop1_parents[] = { "dclk_vop1_div", "dclk_vop1_frac" };
 static const char * mux_uart0_parents[] = { "clk_uart0_div", "clk_uart0_frac", "xin24m" };
 static const char * mux_uart1_parents[] = { "clk_uart1_div", "clk_uart1_frac", "xin24m" };
 static const char * mux_uart2_parents[] = { "clk_uart2_div", "clk_uart2_frac", "xin24m" };
@@ -403,7 +408,7 @@ static struct rk_cru_clk rk3399_cru_clks
 		   __BIT(31),		/* lock_mask */
 		   pll_rates),
 	RK3399_PLL(RK3399_PLL_VPLL, "vpll", pll_parents,
-		   PLL_CON(43),		/* con_base */
+		   PLL_CON(48),		/* con_base */
 		   PLL_CON(51),		/* mode_reg */
 		   __BIT(8),		/* mode_mask */
 		   __BIT(31),		/* lock_mask */
@@ -843,6 +848,96 @@ static struct rk_cru_clk rk3399_cru_clks
 		 __BIT(1),		/* gate_mask */
 		 RK_COMPOSITE_ROUND_DOWN),
 	RK_GATE(RK3399_PCLK_TSADC, "pclk_tsadc", "pclk_perilp1", CLKGATE_CON(22), 13),
+
+	/* VOP0 */
+	RK_COMPOSITE(RK3399_ACLK_VOP0_PRE, "aclk_vop0_pre", mux_pll_src_vpll_cpll_gpll_npll_parents,
+		 CLKSEL_CON(47),	/* muxdiv_reg */
+		 __BITS(7,6),	/* mux_mask */
+		 __BITS(4,0),	/* div_mask */
+		 CLKGATE_CON(10),	/* gate_reg */
+		 __BIT(8),		/* gate_mask */
+		 0),
+	RK_COMPOSITE_NOMUX(0, "hclk_vop0_pre", "aclk_vop0_pre",
+			   CLKSEL_CON(47),	/* div_reg */
+			   __BITS(12,8),	/* div_mask */
+			   CLKGATE_CON(10),	/* gate_reg */
+			   __BIT(9),		/* gate_mask */
+			   0),
+	RK_COMPOSITE(RK3399_DCLK_VOP0_DIV, "dclk_vop0_div", mux_pll_src_vpll_cpll_gpll_parents,
+		 CLKSEL_CON(49),	/* muxdiv_reg */
+		 __BITS(9,8),	/* mux_mask */
+		 __BITS(7,0),	/* div_mask */
+		 CLKGATE_CON(10),	/* gate_reg */
+		 __BIT(12),		/* gate_mask */
+		 0),
+	RK_GATE(RK3399_ACLK_VOP0, "aclk_vop0", "aclk_vop0_pre", CLKGATE_CON(28), 3),
+	RK_GATE(RK3399_HCLK_VOP0, "hclk_vop0", "hclk_vop0_pre", CLKGATE_CON(28), 2),
+	RK_MUX(RK3399_DCLK_VOP0, "dclk_vop0", mux_dclk_vop0_parents, CLKSEL_CON(49), __BIT(11)),
+
+	/* VOP1 */
+	RK_COMPOSITE(RK3399_ACLK_VOP1_PRE, "aclk_vop1_pre", mux_pll_src_vpll_cpll_gpll_npll_parents,
+		 CLKSEL_CON(48),	/* muxdiv_reg */
+		 __BITS(7,6),	/* mux_mask */
+		 __BITS(4,0),	/* div_mask */
+		 CLKGATE_CON(10),	/* gate_reg */
+		 __BIT(10),		/* gate_mask */
+		 0),
+	RK_COMPOSITE_NOMUX(0, "hclk_vop1_pre", "aclk_vop1_pre",
+			   CLKSEL_CON(48),	/* div_reg */
+			   __BITS(12,8),	/* div_mask */
+			   CLKGATE_CON(10),	/* g

CVS commit: src/sys/arch/arm/rockchip

2019-11-09 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Nov  9 23:29:48 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk3399_cru.c

Log Message:
Add HDMI and VOP clocks


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/rockchip/rk3399_cru.c

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



CVS commit: src/sys/arch/arm/rockchip

2019-11-09 Thread Tobias Nygren
Module Name:src
Committed By:   tnn
Date:   Sat Nov  9 17:21:48 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk_gmac.c

Log Message:
rk_gmac: clean up code for setting up clock delay lines a bit

- break long lines
- move toggle to enable it under a single #ifdef notyet

I've tested it and it works, but I'm keeping the #ifdef notyet for now
because it didn't solve the original problem I was debugging.


To generate a diff of this commit:
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/rockchip/rk_gmac.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_gmac.c
diff -u src/sys/arch/arm/rockchip/rk_gmac.c:1.14 src/sys/arch/arm/rockchip/rk_gmac.c:1.15
--- src/sys/arch/arm/rockchip/rk_gmac.c:1.14	Sun Jul 21 08:24:32 2019
+++ src/sys/arch/arm/rockchip/rk_gmac.c	Sat Nov  9 17:21:48 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_gmac.c,v 1.14 2019/07/21 08:24:32 mrg Exp $ */
+/* $NetBSD: rk_gmac.c,v 1.15 2019/11/09 17:21:48 tnn Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -28,7 +28,7 @@
 
 #include 
 
-__KERNEL_RCSID(0, "$NetBSD: rk_gmac.c,v 1.14 2019/07/21 08:24:32 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_gmac.c,v 1.15 2019/11/09 17:21:48 tnn Exp $");
 
 #include 
 #include 
@@ -90,7 +90,7 @@ struct rk_gmac_softc {
 #define	 RK3328_GRF_MAC_CON1_TXDLY_EN	__BIT(0)
 
 static void
-rk3328_gmac_set_mode_rgmii(struct dwc_gmac_softc *sc, u_int tx_delay, u_int rx_delay)
+rk3328_gmac_set_mode_rgmii(struct dwc_gmac_softc *sc, u_int tx_delay, u_int rx_delay, bool set_delay)
 {
 	struct rk_gmac_softc * const rk_sc = (struct rk_gmac_softc *)sc;
 	uint32_t write_mask, write_val;
@@ -98,19 +98,30 @@ rk3328_gmac_set_mode_rgmii(struct dwc_gm
 	syscon_lock(rk_sc->sc_syscon);
 
 	write_mask = (RK3328_GRF_MAC_CON1_MODE | RK3328_GRF_MAC_CON1_SEL) << 16;
-	write_val = __SHIFTIN(RK3328_GRF_MAC_CON1_SEL_RGMII, RK3328_GRF_MAC_CON1_SEL);
-	syscon_write_4(rk_sc->sc_syscon, RK3328_GRF_MAC_CON1, write_mask | write_val);
+	write_val = __SHIFTIN(RK3328_GRF_MAC_CON1_SEL_RGMII,
+	RK3328_GRF_MAC_CON1_SEL);
+	syscon_write_4(rk_sc->sc_syscon, RK3328_GRF_MAC_CON1,
+	write_mask | write_val);
 
-#if notyet
-	write_mask = (RK3328_GRF_MAC_CON0_TXDLY | RK3328_GRF_MAC_CON0_RXDLY) << 16;
-	write_val = __SHIFTIN(tx_delay, RK3328_GRF_MAC_CON0_TXDLY) |
+	if (set_delay) {
+		write_mask = (
+		RK3328_GRF_MAC_CON0_TXDLY |
+		RK3328_GRF_MAC_CON0_RXDLY) << 16;
+		write_val =
+		__SHIFTIN(tx_delay, RK3328_GRF_MAC_CON0_TXDLY) |
 		__SHIFTIN(rx_delay, RK3328_GRF_MAC_CON0_RXDLY);
-	syscon_write_4(rk_sc->sc_syscon, RK3328_GRF_MAC_CON0, write_mask | write_val);
+		syscon_write_4(rk_sc->sc_syscon, RK3328_GRF_MAC_CON0,
+		write_mask | write_val);
 
-	write_mask = (RK3328_GRF_MAC_CON1_RXDLY_EN | RK3328_GRF_MAC_CON1_TXDLY_EN) << 16;
-	write_val = RK3328_GRF_MAC_CON1_RXDLY_EN | RK3328_GRF_MAC_CON1_TXDLY_EN;
-	syscon_write_4(rk_sc->sc_syscon, RK3328_GRF_MAC_CON1, write_mask | write_val);
-#endif
+		write_mask = (
+		RK3328_GRF_MAC_CON1_RXDLY_EN |
+		RK3328_GRF_MAC_CON1_TXDLY_EN) << 16;
+		write_val =
+		RK3328_GRF_MAC_CON1_RXDLY_EN |
+		RK3328_GRF_MAC_CON1_TXDLY_EN;
+		syscon_write_4(rk_sc->sc_syscon, RK3328_GRF_MAC_CON1,
+		write_mask | write_val);
+	}
 
 	syscon_unlock(rk_sc->sc_syscon);
 }
@@ -163,32 +174,34 @@ rk3328_gmac_set_speed_rgmii(struct dwc_g
 #define	 RK3399_GRF_SOC_CON6_GMAC_CLK_TX_DL_CFG	__BITS(6,0)
 
 static void
-rk3399_gmac_set_mode_rgmii(struct dwc_gmac_softc *sc, u_int tx_delay, u_int rx_delay)
+rk3399_gmac_set_mode_rgmii(struct dwc_gmac_softc *sc, u_int tx_delay,
+u_int rx_delay, bool set_delay)
 {
 	struct rk_gmac_softc * const rk_sc = (struct rk_gmac_softc *)sc;
-
-	const uint32_t con5_mask =
-	(RK3399_GRF_SOC_CON5_RMII_MODE | RK3399_GRF_SOC_CON5_GMAC_PHY_INTF_SEL) << 16;
-	const uint32_t con5 = __SHIFTIN(1, RK3399_GRF_SOC_CON5_GMAC_PHY_INTF_SEL);
-
-#if notyet
-	const uint32_t con6_mask =
-	(RK3399_GRF_SOC_CON6_GMAC_RXCLK_DLY_ENA |
-		RK3399_GRF_SOC_CON6_GMAC_TXCLK_DLY_ENA |
-		RK3399_GRF_SOC_CON6_GMAC_CLK_RX_DL_CFG |
-		RK3399_GRF_SOC_CON6_GMAC_CLK_TX_DL_CFG) << 16;
-	const uint32_t con6 =
-	(tx_delay ? RK3399_GRF_SOC_CON6_GMAC_TXCLK_DLY_ENA : 0) |
-	(rx_delay ? RK3399_GRF_SOC_CON6_GMAC_RXCLK_DLY_ENA : 0) |
-	__SHIFTIN(rx_delay, RK3399_GRF_SOC_CON6_GMAC_CLK_RX_DL_CFG) |
-	__SHIFTIN(tx_delay, RK3399_GRF_SOC_CON6_GMAC_CLK_TX_DL_CFG);
-#endif
+	uint32_t write_mask, write_val;
 
 	syscon_lock(rk_sc->sc_syscon);
-	syscon_write_4(rk_sc->sc_syscon, RK3399_GRF_SOC_CON5, con5 | con5_mask);
-#if notyet
-	syscon_write_4(rk_sc->sc_syscon, RK3399_GRF_SOC_CON6, con6 | con6_mask);
-#endif
+
+	write_mask = (
+	RK3399_GRF_SOC_CON5_RMII_MODE |
+	RK3399_GRF_SOC_CON5_GMAC_PHY_INTF_SEL) << 16;
+	write_val = __SHIFTIN(1, RK3399_GRF_SOC_CON5_GMAC_PHY_INTF_SEL);
+	syscon_write_4(rk_sc->sc_syscon, RK3399_GRF_SOC_CON5,
+	write_mask | write_val);
+

CVS commit: src/sys/arch/arm/rockchip

2019-11-09 Thread Tobias Nygren
Module Name:src
Committed By:   tnn
Date:   Sat Nov  9 17:21:48 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk_gmac.c

Log Message:
rk_gmac: clean up code for setting up clock delay lines a bit

- break long lines
- move toggle to enable it under a single #ifdef notyet

I've tested it and it works, but I'm keeping the #ifdef notyet for now
because it didn't solve the original problem I was debugging.


To generate a diff of this commit:
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/rockchip/rk_gmac.c

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



CVS commit: src/sys/arch/arm/rockchip

2019-11-07 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Fri Nov  8 00:35:16 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk_i2c.c

Log Message:
Support reads of more than 32 bytes in a single xfer.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/rockchip/rk_i2c.c

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



CVS commit: src/sys/arch/arm/rockchip

2019-11-07 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Fri Nov  8 00:35:16 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk_i2c.c

Log Message:
Support reads of more than 32 bytes in a single xfer.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/rockchip/rk_i2c.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_i2c.c
diff -u src/sys/arch/arm/rockchip/rk_i2c.c:1.5 src/sys/arch/arm/rockchip/rk_i2c.c:1.6
--- src/sys/arch/arm/rockchip/rk_i2c.c:1.5	Wed Sep 18 12:49:34 2019
+++ src/sys/arch/arm/rockchip/rk_i2c.c	Fri Nov  8 00:35:16 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_i2c.c,v 1.5 2019/09/18 12:49:34 tnn Exp $ */
+/* $NetBSD: rk_i2c.c,v 1.6 2019/11/08 00:35:16 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -28,7 +28,7 @@
 
 #include 
 
-__KERNEL_RCSID(0, "$NetBSD: rk_i2c.c,v 1.5 2019/09/18 12:49:34 tnn Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_i2c.c,v 1.6 2019/11/08 00:35:16 jmcneill Exp $");
 
 #include 
 #include 
@@ -284,7 +284,7 @@ rk_i2c_write(struct rk_i2c_softc *sc, i2
 static int
 rk_i2c_read(struct rk_i2c_softc *sc, i2c_addr_t addr,
 const uint8_t *cmd, size_t cmdlen, uint8_t *buf,
-size_t buflen, int flags, bool send_start)
+size_t buflen, int flags, bool send_start, bool last_ack)
 {
 	uint32_t rxdata[8];
 	uint32_t con, mrxaddr, mrxraddr;
@@ -296,24 +296,27 @@ rk_i2c_read(struct rk_i2c_softc *sc, i2c
 	if (cmdlen > 3)
 		return EINVAL;
 
-	mode = RKI2C_CON_I2C_MODE_RTX;
-	con = RKI2C_CON_I2C_EN | RKI2C_CON_ACK | __SHIFTIN(mode, RKI2C_CON_I2C_MODE);
+	mode = send_start ? RKI2C_CON_I2C_MODE_RTX : RKI2C_CON_I2C_MODE_RX;
+	con = RKI2C_CON_I2C_EN | __SHIFTIN(mode, RKI2C_CON_I2C_MODE);
 	WR4(sc, RKI2C_CON, con);
 
 	if (send_start && (error = rk_i2c_start(sc)) != 0)
 		return error;
 
-	mrxaddr = __SHIFTIN((addr << 1) | 1, RKI2C_MRXADDR_SADDR) |
-	RKI2C_MRXADDR_ADDLVLD;
-	WR4(sc, RKI2C_MRXADDR, mrxaddr);
-	for (n = 0, mrxraddr = 0; n < cmdlen; n++) {
-		mrxraddr |= cmd[n] << (n * 8);
-		mrxraddr |= (RKI2C_MRXRADDR_ADDLVLD << n);
+	if (send_start) {
+		mrxaddr = __SHIFTIN((addr << 1) | 1, RKI2C_MRXADDR_SADDR) |
+		RKI2C_MRXADDR_ADDLVLD;
+		WR4(sc, RKI2C_MRXADDR, mrxaddr);
+		for (n = 0, mrxraddr = 0; n < cmdlen; n++) {
+			mrxraddr |= cmd[n] << (n * 8);
+			mrxraddr |= (RKI2C_MRXRADDR_ADDLVLD << n);
+		}
+		WR4(sc, RKI2C_MRXRADDR, mrxraddr);
 	}
-	WR4(sc, RKI2C_MRXRADDR, mrxraddr);
 
-	/* Acknowledge last byte read */
-	con |= RKI2C_CON_ACK;
+	if (last_ack) {
+		con |= RKI2C_CON_ACK;
+	}
 	WR4(sc, RKI2C_CON, con);
 
 	/* Receive data. Slave address goes in the lower 8 bits of MRXADDR */
@@ -321,8 +324,14 @@ rk_i2c_read(struct rk_i2c_softc *sc, i2c
 	if ((error = rk_i2c_wait(sc, RKI2C_IPD_MBRFIPD)) != 0)
 		return error;
 
+#if 0
 	bus_space_read_region_4(sc->sc_bst, sc->sc_bsh, RKI2C_RXDATA(0),
 	rxdata, howmany(buflen, 4));
+#else
+	for (n = 0; n < roundup(buflen, 4); n += 4)
+		rxdata[n/4] = RD4(sc, RKI2C_RXDATA(n/4));
+#endif
+
 	memcpy(buf, rxdata, buflen);
 
 	return 0;
@@ -339,7 +348,19 @@ rk_i2c_exec(void *priv, i2c_op_t op, i2c
 	KASSERT(mutex_owned(&sc->sc_lock));
 
 	if (I2C_OP_READ_P(op)) {
-		error = rk_i2c_read(sc, addr, cmdbuf, cmdlen, buf, buflen, flags, send_start);
+		uint8_t *databuf = buf;
+		while (buflen > 0) {
+			const size_t datalen = uimin(buflen, 32);
+			const bool last_ack = datalen == buflen;
+			error = rk_i2c_read(sc, addr, cmdbuf, cmdlen, databuf, datalen, flags, send_start, last_ack);
+			if (error != 0)
+break;
+			databuf += datalen;
+			buflen -= datalen;
+			send_start = false;
+			cmdbuf = NULL;
+			cmdlen = 0;
+		}
 	} else {
 		error = rk_i2c_write(sc, addr, cmdbuf, cmdlen, buf, buflen, flags, send_start);
 	}



CVS commit: src/sys/arch/arm/rockchip

2019-10-19 Thread Tobias Nygren
Module Name:src
Committed By:   tnn
Date:   Sat Oct 19 12:55:21 UTC 2019

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

Log Message:
rk3399: add definition for the watchdog timer clock gate

The watchdog timer clock gate is a bit special because it's a secure
gate that can only be accessed from EL3. We still need a dummy gate
definition for it so that dwcwdt(4) can infer the frequency via the
parent clock. The gate is enabled by default by U-Boot.


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/rockchip/rk3399_cru.c
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/rockchip/rk_cru.h

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/rk3399_cru.c
diff -u src/sys/arch/arm/rockchip/rk3399_cru.c:1.9 src/sys/arch/arm/rockchip/rk3399_cru.c:1.10
--- src/sys/arch/arm/rockchip/rk3399_cru.c:1.9	Sun Aug  4 17:09:07 2019
+++ src/sys/arch/arm/rockchip/rk3399_cru.c	Sat Oct 19 12:55:21 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3399_cru.c,v 1.9 2019/08/04 17:09:07 tnn Exp $ */
+/* $NetBSD: rk3399_cru.c,v 1.10 2019/10/19 12:55:21 tnn Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -28,7 +28,7 @@
 
 #include 
 
-__KERNEL_RCSID(1, "$NetBSD: rk3399_cru.c,v 1.9 2019/08/04 17:09:07 tnn Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk3399_cru.c,v 1.10 2019/10/19 12:55:21 tnn Exp $");
 
 #include 
 #include 
@@ -804,6 +804,9 @@ static struct rk_cru_clk rk3399_cru_clks
 	RK_GATE(RK3399_PCLK_SPI4, "pclk_rkspi4", "pclk_perilp1", CLKGATE_CON(23), 13),
 	RK_GATE(RK3399_PCLK_SPI5, "pclk_rkspi5", "hclk_perilp1", CLKGATE_CON(34), 5),
 
+	/* Watchdog */
+	RK_SECURE_GATE(RK3399_PCLK_WDT, "pclk_wdt", "pclk_alive" /*, SECURE_CLKGATE_CON(3), 8 */),
+
 	/* PCIe */
 	RK_GATE(RK3399_ACLK_PERF_PCIE, "aclk_perf_pcie", "aclk_perihp", CLKGATE_CON(20), 2),
 	RK_GATE(RK3399_ACLK_PCIE, "aclk_pcie", "aclk_perihp", CLKGATE_CON(20), 10),

Index: src/sys/arch/arm/rockchip/rk_cru.h
diff -u src/sys/arch/arm/rockchip/rk_cru.h:1.4 src/sys/arch/arm/rockchip/rk_cru.h:1.5
--- src/sys/arch/arm/rockchip/rk_cru.h:1.4	Sat Sep  1 19:35:53 2018
+++ src/sys/arch/arm/rockchip/rk_cru.h	Sat Oct 19 12:55:21 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_cru.h,v 1.4 2018/09/01 19:35:53 jmcneill Exp $ */
+/* $NetBSD: rk_cru.h,v 1.5 2019/10/19 12:55:21 tnn Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -268,6 +268,15 @@ const char *rk_cru_gate_get_parent(struc
 		.get_parent = rk_cru_gate_get_parent,		\
 	}
 
+#define	RK_SECURE_GATE(_id, _name, _pname)			\
+	{			\
+		.id = (_id),	\
+		.type = RK_CRU_GATE,\
+		.base.name = (_name),\
+		.u.gate.parent = (_pname),			\
+		.get_parent = rk_cru_gate_get_parent,		\
+	}
+
 /* Mux clocks */
 
 struct rk_cru_mux {



CVS commit: src/sys/arch/arm/rockchip

2019-10-19 Thread Tobias Nygren
Module Name:src
Committed By:   tnn
Date:   Sat Oct 19 12:55:21 UTC 2019

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

Log Message:
rk3399: add definition for the watchdog timer clock gate

The watchdog timer clock gate is a bit special because it's a secure
gate that can only be accessed from EL3. We still need a dummy gate
definition for it so that dwcwdt(4) can infer the frequency via the
parent clock. The gate is enabled by default by U-Boot.


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/rockchip/rk3399_cru.c
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/rockchip/rk_cru.h

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



CVS commit: src/sys/arch/arm/rockchip

2019-10-17 Thread Nick Hudson
Module Name:src
Committed By:   skrll
Date:   Fri Oct 18 06:51:02 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk_pwm.c

Log Message:
Use PRIxBUSADDR


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/rockchip/rk_pwm.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_pwm.c
diff -u src/sys/arch/arm/rockchip/rk_pwm.c:1.1 src/sys/arch/arm/rockchip/rk_pwm.c:1.2
--- src/sys/arch/arm/rockchip/rk_pwm.c:1.1	Wed May  1 10:41:33 2019
+++ src/sys/arch/arm/rockchip/rk_pwm.c	Fri Oct 18 06:51:02 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_pwm.c,v 1.1 2019/05/01 10:41:33 jmcneill Exp $ */
+/* $NetBSD: rk_pwm.c,v 1.2 2019/10/18 06:51:02 skrll Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared McNeill 
@@ -28,7 +28,7 @@
 
 #include 
 
-__KERNEL_RCSID(1, "$NetBSD: rk_pwm.c,v 1.1 2019/05/01 10:41:33 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk_pwm.c,v 1.2 2019/10/18 06:51:02 skrll Exp $");
 
 #include 
 #include 
@@ -221,8 +221,8 @@ rk_pwm_attach(device_t parent, device_t 
 	sc->sc_bst = faa->faa_bst;
 	error = bus_space_map(sc->sc_bst, addr, size, 0, &sc->sc_bsh);
 	if (error) {
-		aprint_error(": couldn't map %#" PRIx64 ": %d",
-		(uint64_t)addr, error);
+		aprint_error(": couldn't map %#" PRIxBUSADDR ": %d",
+		addr, error);
 		return;
 	}
 



CVS commit: src/sys/arch/arm/rockchip

2019-10-17 Thread Nick Hudson
Module Name:src
Committed By:   skrll
Date:   Fri Oct 18 06:51:02 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk_pwm.c

Log Message:
Use PRIxBUSADDR


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/arm/rockchip/rk_pwm.c

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



CVS commit: src/sys/arch/arm/rockchip

2019-09-18 Thread Tobias Nygren
Module Name:src
Committed By:   tnn
Date:   Wed Sep 18 12:49:35 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk_i2c.c

Log Message:
rkiic: coalesce smbus-style writes into a single transaction

There seems to be a hw controller bug. Split cmd/data writes caused corrupt
transfers, with junk bytes witten into the rk808 pmic registers.
This may have caused us to operate with out-of-spec core voltage.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/rockchip/rk_i2c.c

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



CVS commit: src/sys/arch/arm/rockchip

2019-09-18 Thread Tobias Nygren
Module Name:src
Committed By:   tnn
Date:   Wed Sep 18 12:49:35 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk_i2c.c

Log Message:
rkiic: coalesce smbus-style writes into a single transaction

There seems to be a hw controller bug. Split cmd/data writes caused corrupt
transfers, with junk bytes witten into the rk808 pmic registers.
This may have caused us to operate with out-of-spec core voltage.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/rockchip/rk_i2c.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_i2c.c
diff -u src/sys/arch/arm/rockchip/rk_i2c.c:1.4 src/sys/arch/arm/rockchip/rk_i2c.c:1.5
--- src/sys/arch/arm/rockchip/rk_i2c.c:1.4	Sun Sep  2 10:07:17 2018
+++ src/sys/arch/arm/rockchip/rk_i2c.c	Wed Sep 18 12:49:34 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_i2c.c,v 1.4 2018/09/02 10:07:17 jmcneill Exp $ */
+/* $NetBSD: rk_i2c.c,v 1.5 2019/09/18 12:49:34 tnn Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -28,7 +28,7 @@
 
 #include 
 
-__KERNEL_RCSID(0, "$NetBSD: rk_i2c.c,v 1.4 2018/09/02 10:07:17 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_i2c.c,v 1.5 2019/09/18 12:49:34 tnn Exp $");
 
 #include 
 #include 
@@ -244,8 +244,8 @@ rk_i2c_stop(struct rk_i2c_softc *sc)
 }
 
 static int
-rk_i2c_write(struct rk_i2c_softc *sc, i2c_addr_t addr, const uint8_t *buf,
-size_t buflen, int flags, bool send_start)
+rk_i2c_write(struct rk_i2c_softc *sc, i2c_addr_t addr, const uint8_t *cmd,
+size_t cmdlen, const uint8_t *buf, size_t buflen, int flags, bool send_start)
 {
 	union {
 		uint8_t data8[32];
@@ -254,8 +254,10 @@ rk_i2c_write(struct rk_i2c_softc *sc, i2
 	uint32_t con;
 	u_int mode;
 	int error;
+	size_t len;
 
-	if (buflen > 31)
+	len = cmdlen + buflen;
+	if (len > 31)
 		return EINVAL;
 
 	mode = RKI2C_CON_I2C_MODE_TX;
@@ -267,10 +269,11 @@ rk_i2c_write(struct rk_i2c_softc *sc, i2
 
 	/* Transmit data. Slave address goes in the lower 8 bits of TXDATA0 */
 	txdata.data8[0] = addr << 1;
-	memcpy(&txdata.data8[1], buf, buflen);
+	memcpy(&txdata.data8[1], cmd, cmdlen);
+	memcpy(&txdata.data8[1 + cmdlen], buf, buflen);
 	bus_space_write_region_4(sc->sc_bst, sc->sc_bsh, RKI2C_TXDATA(0),
-	txdata.data32, howmany(buflen + 1, 4));
-	WR4(sc, RKI2C_MTXCNT, __SHIFTIN(buflen + 1, RKI2C_MTXCNT_MTXCNT));
+	txdata.data32, howmany(len + 1, 4));
+	WR4(sc, RKI2C_MTXCNT, __SHIFTIN(len + 1, RKI2C_MTXCNT_MTXCNT));
 
 	if ((error = rk_i2c_wait(sc, RKI2C_IPD_MBTFIPD)) != 0)
 		return error;
@@ -338,16 +341,9 @@ rk_i2c_exec(void *priv, i2c_op_t op, i2c
 	if (I2C_OP_READ_P(op)) {
 		error = rk_i2c_read(sc, addr, cmdbuf, cmdlen, buf, buflen, flags, send_start);
 	} else {
-		if (cmdlen > 0) {
-			error = rk_i2c_write(sc, addr, cmdbuf, cmdlen, flags, send_start);
-			if (error != 0)
-goto done;
-			send_start = false;
-		}
-		error = rk_i2c_write(sc, addr, buf, buflen, flags, send_start);
+		error = rk_i2c_write(sc, addr, cmdbuf, cmdlen, buf, buflen, flags, send_start);
 	}
 
-done:
 	if (error != 0 || I2C_OP_STOP_P(op))
 		rk_i2c_stop(sc);
 



CVS commit: src/sys/arch/arm/rockchip

2019-08-20 Thread Tobias Nygren
Module Name:src
Committed By:   tnn
Date:   Tue Aug 20 23:32:33 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk3399_iomux.c

Log Message:
rk3399_iomux: add some #ifdef'd out code to enable the on-chip debug port


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/rockchip/rk3399_iomux.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/rk3399_iomux.c
diff -u src/sys/arch/arm/rockchip/rk3399_iomux.c:1.4 src/sys/arch/arm/rockchip/rk3399_iomux.c:1.5
--- src/sys/arch/arm/rockchip/rk3399_iomux.c:1.4	Tue Apr 30 22:42:32 2019
+++ src/sys/arch/arm/rockchip/rk3399_iomux.c	Tue Aug 20 23:32:33 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3399_iomux.c,v 1.4 2019/04/30 22:42:32 jmcneill Exp $ */
+/* $NetBSD: rk3399_iomux.c,v 1.5 2019/08/20 23:32:33 tnn Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill 
@@ -29,7 +29,7 @@
 //#define RK3399_IOMUX_DEBUG
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: rk3399_iomux.c,v 1.4 2019/04/30 22:42:32 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk3399_iomux.c,v 1.5 2019/08/20 23:32:33 tnn Exp $");
 
 #include 
 #include 
@@ -450,6 +450,36 @@ rk3399_iomux_match(device_t parent, cfda
 	return of_match_compat_data(faa->faa_phandle, compat_data);
 }
 
+#ifdef RK3399_IOMUX_FORCE_ENABLE_SWJ_DP
+/*
+ * This enables the SWJ-DP (Serial Wire JTAG Debug Port).
+ * If you enable this you must also disable sdhc due to pin conflicts.
+ */
+static void
+rk3399_iomux_force_enable_swj_dp(struct rk3399_iomux_softc * const sc)
+{
+	struct syscon * const syscon = sc->sc_syscon[RK_IOMUX_REGS_GRF];
+	uint32_t val;
+
+	aprint_normal_dev(sc->sc_dev, "enabling on-chip debugging\n");
+#define GRF_GPIO4B_IOMUX	0xe024
+#define GRF_GPIO4B_IOMUX_TCK	__BITS(5,4)
+#define GRF_GPIO4B_IOMUX_TMS	__BITS(7,6)
+#define GRF_SOC_CON7		0xe21c
+#define GRF_SOC_CON7_FORCE_JTAG	__BIT(12)
+	LOCK(syscon);
+	val = RD4(syscon, GRF_GPIO4B_IOMUX);
+	val &= ~(GRF_GPIO4B_IOMUX_TCK | GRF_GPIO4B_IOMUX_TMS);
+	val |= __SHIFTIN(0x2, GRF_GPIO4B_IOMUX_TCK);
+	val |= __SHIFTIN(0x2, GRF_GPIO4B_IOMUX_TMS);
+	WR4(syscon, GRF_GPIO4B_IOMUX, val);
+	val = RD4(syscon, GRF_SOC_CON7);
+	val |= GRF_SOC_CON7_FORCE_JTAG;
+	WR4(syscon, GRF_SOC_CON7, val);
+	UNLOCK(syscon);
+}
+#endif
+
 static void
 rk3399_iomux_attach(device_t parent, device_t self, void *aux)
 {
@@ -492,4 +522,8 @@ rk3399_iomux_attach(device_t parent, dev
 
 		config_found(self, &cfaa, NULL);
 	}
+
+#ifdef RK3399_IOMUX_FORCE_ENABLE_SWJ_DP
+	rk3399_iomux_force_enable_swj_dp(sc);
+#endif
 }



CVS commit: src/sys/arch/arm/rockchip

2019-08-20 Thread Tobias Nygren
Module Name:src
Committed By:   tnn
Date:   Tue Aug 20 23:32:33 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk3399_iomux.c

Log Message:
rk3399_iomux: add some #ifdef'd out code to enable the on-chip debug port


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/rockchip/rk3399_iomux.c

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



CVS commit: src/sys/arch/arm/rockchip

2019-08-13 Thread Tobias Nygren
Module Name:src
Committed By:   tnn
Date:   Tue Aug 13 17:15:55 UTC 2019

Modified Files:
src/sys/arch/arm/rockchip: rk_spi.c

Log Message:
rk_spi: register controller with fdt


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/rockchip/rk_spi.c

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



  1   2   >