Module Name:    src
Committed By:   mrg
Date:           Mon Apr 24 05:16:01 UTC 2023

Modified Files:
        src/sys/arch/arm/rockchip: rk3328_cru.c rk_v1crypto.c
Added Files:
        src/sys/arch/arm/dts: rk3328-crypto.dtsi rk3328-rock64.dts

Log Message:
enable rkv1crypto on rock64.

this comes from upstream d1152bc533c941f7e267bf53d344cee510ea2808.

(i tried to make this be in rk3328.dtsi so all rk3328 boards would
benefit, but it doesn't work, and this is the only one have to test.)

adjust rkv1crypto to support a per-platform clocks setup.


To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/dts/rk3328-crypto.dtsi
cvs rdiff -u -r0 -r1.8 src/sys/arch/arm/dts/rk3328-rock64.dts
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/rockchip/rk3328_cru.c
cvs rdiff -u -r1.10 -r1.11 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/rk3328_cru.c
diff -u src/sys/arch/arm/rockchip/rk3328_cru.c:1.9 src/sys/arch/arm/rockchip/rk3328_cru.c:1.10
--- src/sys/arch/arm/rockchip/rk3328_cru.c:1.9	Fri Nov 12 22:02:08 2021
+++ src/sys/arch/arm/rockchip/rk3328_cru.c	Mon Apr 24 05:16:01 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3328_cru.c,v 1.9 2021/11/12 22:02:08 jmcneill Exp $ */
+/* $NetBSD: rk3328_cru.c,v 1.10 2023/04/24 05:16:01 mrg Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill <jmcne...@invisible.ca>
@@ -28,7 +28,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(1, "$NetBSD: rk3328_cru.c,v 1.9 2021/11/12 22:02:08 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk3328_cru.c,v 1.10 2023/04/24 05:16:01 mrg Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -357,6 +357,13 @@ static struct rk_cru_clk rk3328_cru_clks
 		     CLKGATE_CON(2),	/* gate_reg */
 		     __BIT(6),		/* gate_mask */
 		     0),
+	RK_COMPOSITE(RK3328_SCLK_CRYPTO, "clk_crypto", mux_2plls_parents,
+		     CLKSEL_CON(20),	/* muxdiv_reg */
+		     __BIT(7),		/* mux_mask */
+		     __BITS(4,0),	/* div_mask */
+		     CLKGATE_CON(2),	/* gate_reg */
+		     __BIT(4),		/* gate_mask */
+		     0),
 
 	RK_DIV(0, "clk_24m", "xin24m", CLKSEL_CON(2), __BITS(12,8), 0),
 
@@ -464,6 +471,8 @@ static struct rk_cru_clk rk3328_cru_clks
 	RK_GATE(RK3328_HCLK_I2S1_8CH, "hclk_i2s1", "hclk_bus_pre", CLKGATE_CON(15), 4),
 	RK_GATE(RK3328_HCLK_I2S2_2CH, "hclk_i2s2", "hclk_bus_pre", CLKGATE_CON(15), 5),
 	RK_GATE(RK3328_HCLK_SPDIF_8CH, "hclk_spdif", "hclk_bus_pre", CLKGATE_CON(15), 6),
+	RK_GATE(RK3328_HCLK_CRYPTO_MST, "hclk_crypto_mst", "hclk_bus_pre", CLKGATE_CON(15), 7),
+	RK_GATE(RK3328_HCLK_CRYPTO_SLV, "hclk_crypto_slv", "hclk_bus_pre", CLKGATE_CON(15), 8),
 	RK_COMPOSITE(RK3328_SCLK_I2S1_OUT, "i2s1_out", mux_i2s1out_parents,
 		     CLKSEL_CON(8),	/* muxdiv_reg */
 		     __BIT(12),		/* mux_mask */

Index: src/sys/arch/arm/rockchip/rk_v1crypto.c
diff -u src/sys/arch/arm/rockchip/rk_v1crypto.c:1.10 src/sys/arch/arm/rockchip/rk_v1crypto.c:1.11
--- src/sys/arch/arm/rockchip/rk_v1crypto.c:1.10	Fri May 13 09:49:44 2022
+++ src/sys/arch/arm/rockchip/rk_v1crypto.c	Mon Apr 24 05:16:01 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: rk_v1crypto.c,v 1.10 2022/05/13 09:49:44 riastradh Exp $	*/
+/*	$NetBSD: rk_v1crypto.c,v 1.11 2023/04/24 05:16:01 mrg Exp $	*/
 
 /*-
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: rk_v1crypto.c,v 1.10 2022/05/13 09:49:44 riastradh Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk_v1crypto.c,v 1.11 2023/04/24 05:16:01 mrg Exp $");
 
 #include <sys/types.h>
 
@@ -98,8 +98,24 @@ RKC_CTRL(struct rk_v1crypto_softc *sc, u
 CFATTACH_DECL_NEW(rk_v1crypto, sizeof(struct rk_v1crypto_softc),
     rk_v1crypto_match, rk_v1crypto_attach, NULL, NULL);
 
+struct rk_v1crypto_data {
+	int num_clks;
+	const char *const clks[];
+};
+
+static const struct rk_v1crypto_data rk3288_crypto_data = {
+	.num_clks = 4,
+	.clks = {"aclk", "hclk", "sclk", "apb_pclk"},
+};
+
+static const struct rk_v1crypto_data rk3328_crypto_data = {
+	.num_clks = 3,
+	.clks = {"hclk_master", "hclk_slave", "sclk"},
+};
+
 static const struct device_compatible_entry compat_data[] = {
-	{ .compat = "rockchip,rk3288-crypto" },
+	{ .compat = "rockchip,rk3288-crypto", .data = &rk3288_crypto_data },
+	{ .compat = "rockchip,rk3328-crypto", .data = &rk3328_crypto_data },
 	DEVICE_COMPAT_EOL
 };
 
@@ -114,7 +130,6 @@ rk_v1crypto_match(device_t parent, cfdat
 static void
 rk_v1crypto_attach(device_t parent, device_t self, void *aux)
 {
-	static const char *const clks[] = {"aclk", "hclk", "sclk", "apb_pclk"};
 	struct rk_v1crypto_softc *const sc = device_private(self);
 	const struct fdt_attach_args *const faa = aux;
 	bus_addr_t addr;
@@ -123,6 +138,9 @@ rk_v1crypto_attach(device_t parent, devi
 	struct fdtbus_reset *rst;
 	unsigned i;
 	uint32_t ctrl;
+	const struct rk_v1crypto_data *config =
+	    of_compatible_lookup(phandle, compat_data)->data;
+	const char *const *clks = config->clks;
 
 	fdtbus_clock_assign(phandle);
 
@@ -141,7 +159,7 @@ rk_v1crypto_attach(device_t parent, devi
 	}
 
 	/* Enable the clocks.  */
-	for (i = 0; i < __arraycount(clks); i++) {
+	for (i = 0; i < config->num_clks; i++) {
 		if (fdtbus_clock_enable(phandle, clks[i], true) != 0) {
 			aprint_error(": couldn't enable %s clock\n", clks[i]);
 			return;

Added files:

Index: src/sys/arch/arm/dts/rk3328-crypto.dtsi
diff -u /dev/null src/sys/arch/arm/dts/rk3328-crypto.dtsi:1.1
--- /dev/null	Mon Apr 24 05:16:01 2023
+++ src/sys/arch/arm/dts/rk3328-crypto.dtsi	Mon Apr 24 05:16:01 2023
@@ -0,0 +1,19 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (c) 2017 Fuzhou Rockchip Electronics Co., Ltd
+ */
+
+/* From upstream d1152bc533c941f7e267bf53d344cee510ea2808 */
+
+/ {
+	crypto: crypto@ff060000 {
+		compatible = "rockchip,rk3328-crypto";
+		reg = <0x0 0xff060000 0x0 0x4000>;
+		interrupts = <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&cru HCLK_CRYPTO_MST>, <&cru HCLK_CRYPTO_SLV>,
+			 <&cru SCLK_CRYPTO>;
+		clock-names = "hclk_master", "hclk_slave", "sclk";
+		resets = <&cru SRST_CRYPTO>;
+		reset-names = "crypto-rst";
+	};
+};

Index: src/sys/arch/arm/dts/rk3328-rock64.dts
diff -u /dev/null src/sys/arch/arm/dts/rk3328-rock64.dts:1.8
--- /dev/null	Mon Apr 24 05:16:01 2023
+++ src/sys/arch/arm/dts/rk3328-rock64.dts	Mon Apr 24 05:16:01 2023
@@ -0,0 +1,34 @@
+/*	$NetBSD: rk3328-rock64.dts,v 1.8 2023/04/24 05:16:01 mrg Exp $	*/
+
+/*
+ * Copyright (c) 2023 Matthew R. Green
+ * 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.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * 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 the crypto block in RK3328. */
+
+#include "../../../external/gpl2/dts/dist/arch/arm64/boot/dts/rockchip/rk3328-rock64.dts"
+#include "rk3328-crypto.dtsi"

Reply via email to