From 0be9d2b18db0ae37fb6cc5bfcfbe567b7e536ca3 Mon Sep 17 00:00:00 2001 From: Kumar Gala Date: Wed, 1 Apr 2020 11:10:31 -0500 Subject: [PATCH] drivers: entropy: rv32m1_trng: Add DTS support to rv32m1_trng driver Add a YAML, DTS node and driver support to utilize data from devicetree for register address and driver name. Signed-off-by: Kumar Gala --- drivers/entropy/Kconfig.rv32m1 | 1 + drivers/entropy/entropy_rv32m1_trng.c | 6 ++++-- dts/bindings/rng/openisa,rv32m1-trng.yaml | 18 ++++++++++++++++++ dts/riscv/rv32m1.dtsi | 8 ++++++++ dts/riscv/rv32m1_ri5cy.dtsi | 5 +++++ dts/riscv/rv32m1_zero_riscy.dtsi | 5 +++++ soc/riscv/openisa_rv32m1/dts_fixup.h | 1 + 7 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 dts/bindings/rng/openisa,rv32m1-trng.yaml diff --git a/drivers/entropy/Kconfig.rv32m1 b/drivers/entropy/Kconfig.rv32m1 index 276ef983657..f43d65d22c5 100644 --- a/drivers/entropy/Kconfig.rv32m1 +++ b/drivers/entropy/Kconfig.rv32m1 @@ -7,6 +7,7 @@ config ENTROPY_RV32M1_TRNG bool "RV32M1 TRNG driver" depends on SOC_OPENISA_RV32M1_RISCV32 select ENTROPY_HAS_DRIVER + select HAS_DTS_ENTROPY help This option enables the true random number generator (TRNG) driver based on the RV32M1 TRNG driver. diff --git a/drivers/entropy/entropy_rv32m1_trng.c b/drivers/entropy/entropy_rv32m1_trng.c index b1c35df9ff7..e3d362eeffc 100644 --- a/drivers/entropy/entropy_rv32m1_trng.c +++ b/drivers/entropy/entropy_rv32m1_trng.c @@ -4,6 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ +#define DT_DRV_COMPAT openisa_rv32m1_trng + #include #include #include @@ -34,12 +36,12 @@ static const struct entropy_driver_api entropy_rv32m1_trng_api_funcs = { }; static struct rv32m1_entropy_config entropy_rv32m1_config = { - .base = TRNG + .base = (TRNG_Type *)DT_INST_REG_ADDR(0) }; static int entropy_rv32m1_trng_init(struct device *); -DEVICE_AND_API_INIT(entropy_rv32m1_trng, CONFIG_ENTROPY_NAME, +DEVICE_AND_API_INIT(entropy_rv32m1_trng, DT_INST_LABEL(0), entropy_rv32m1_trng_init, NULL, &entropy_rv32m1_config, PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEVICE, &entropy_rv32m1_trng_api_funcs); diff --git a/dts/bindings/rng/openisa,rv32m1-trng.yaml b/dts/bindings/rng/openisa,rv32m1-trng.yaml new file mode 100644 index 00000000000..f5fc8feffd8 --- /dev/null +++ b/dts/bindings/rng/openisa,rv32m1-trng.yaml @@ -0,0 +1,18 @@ +# Copyright (c) 2020, Linaro Limited +# SPDX-License-Identifier: Apache-2.0 + +description: OpenISA TRNG (True Random Number Generator) + +compatible: "openisa,rv32m1-trng" + +include: base.yaml + +properties: + reg: + required: true + + interrupts: + required: true + + label: + required: true diff --git a/dts/riscv/rv32m1.dtsi b/dts/riscv/rv32m1.dtsi index 16523aaea4e..01fad8f01e1 100644 --- a/dts/riscv/rv32m1.dtsi +++ b/dts/riscv/rv32m1.dtsi @@ -525,6 +525,14 @@ #pwm-cells = <3>; }; + trng: random@41029000{ + compatible = "openisa,rv32m1-trng"; + reg = <0x41029000 0x1000>; + status = "okay"; + interrupts = <13 0>; + label = "TRNG"; + }; + pwm3: pwm@4102d000 { compatible = "openisa,rv32m1-tpm"; reg = <0x4102d000 0x88>; diff --git a/dts/riscv/rv32m1_ri5cy.dtsi b/dts/riscv/rv32m1_ri5cy.dtsi index 638a268336a..da4fb399fd9 100644 --- a/dts/riscv/rv32m1_ri5cy.dtsi +++ b/dts/riscv/rv32m1_ri5cy.dtsi @@ -215,3 +215,8 @@ interrupt-parent = <&intmux0_ch1>; interrupts = <23>; }; + +&trng { + interrupt-parent = <&intmux0_ch1>; + interrupts = <20>; +}; diff --git a/dts/riscv/rv32m1_zero_riscy.dtsi b/dts/riscv/rv32m1_zero_riscy.dtsi index 3e220a70ac5..f4df0634610 100644 --- a/dts/riscv/rv32m1_zero_riscy.dtsi +++ b/dts/riscv/rv32m1_zero_riscy.dtsi @@ -214,3 +214,8 @@ interrupt-parent = <&event1>; interrupts = <15>; }; + +&trng { + interrupt-parent = <&event1>; + interrupts = <12>; +}; diff --git a/soc/riscv/openisa_rv32m1/dts_fixup.h b/soc/riscv/openisa_rv32m1/dts_fixup.h index fd3efcb7f30..70296784c6e 100644 --- a/soc/riscv/openisa_rv32m1/dts_fixup.h +++ b/soc/riscv/openisa_rv32m1/dts_fixup.h @@ -11,6 +11,7 @@ #define DT_FLASH_DEV_BASE_ADDRESS DT_OPENISA_RV32M1_FTFE_40023000_BASE_ADDRESS #define DT_FLASH_DEV_NAME DT_OPENISA_RV32M1_FTFE_40023000_LABEL #define DT_START_UP_ENTRY_OFFSET 0x80 +#define CONFIG_ENTROPY_NAME DT_LABEL(DT_INST(0, openisa_rv32m1_trng)) #endif /* CONFIG_SOC_OPENISA_RV32M1_RISCV32 */