Re: [PATCH v4 2/2] m68k: coldfire: Add RNG support for MCF54418
Jean-Michel Hautbois <[email protected]>
| Newsgroups | org.kernel.vger.linux-kernel,dev.linux.lists.imx,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-crypto,org.kernel.vger.linux-m68k |
|---|---|
| Message-ID | <[email protected]> |
Hi Greg, Sorry for the very long silence on this one, it fell off my radar... Le 03/12/2025 à 13:15, Greg Ungerer a écrit : > Hi Jean-Michel, > > On 26/11/25 17:08, Jean-Michel Hautbois via B4 Relay wrote: >> From: Jean-Michel Hautbois <[email protected]> >> >> Add support for the hardware Random Number Generator (RNGB) found on >> MCF54418 ColdFire processors with clock enabled at platform >> initialization. >> >> The RNGB block is compatible with the imx-rngc driver. >> >> Reviewed-by: Frank Li <[email protected]> >> Signed-off-by: Jean-Michel Hautbois <[email protected]> >> --- >> arch/m68k/coldfire/device.c | 28 ++++++++++++++++++++++++++++ >> arch/m68k/coldfire/m5441x.c | 2 +- >> arch/m68k/include/asm/m5441xsim.h | 9 +++++++++ >> drivers/char/hw_random/Kconfig | 3 ++- >> drivers/char/hw_random/imx-rngc.c | 7 +++++++ >> 5 files changed, 47 insertions(+), 2 deletions(-) > > I am happy with the ColdFire arch parts, so from me: > > Acked-by: Greg Ungerer <[email protected]> > > I don't mind taking this commit via the m68knommu git tree if the hw_rng > maintainers are ok with that. Otherwise if you break out the arch/m68k > parts I can apply those on their own. I think Herbert acked ? Do you need another ack ? Thanks ! JM > Regards > Greg > > > >> diff --git a/arch/m68k/coldfire/device.c b/arch/m68k/coldfire/device.c >> index b6958ec2a220..9d8f844e319a 100644 >> --- a/arch/m68k/coldfire/device.c >> +++ b/arch/m68k/coldfire/device.c >> @@ -622,6 +622,31 @@ static struct platform_device mcf_flexcan0 = { >> }; >> #endif /* MCFFLEXCAN_SIZE */ >> +#ifdef MCF_RNG_BASE >> +/* >> + * Random Number Generator (RNG) - only on MCF54418 >> + */ >> +static struct resource mcf_rng_resource[] = { >> + { >> + .start = MCF_RNG_BASE, >> + .end = MCF_RNG_BASE + MCF_RNG_SIZE - 1, >> + .flags = IORESOURCE_MEM, >> + }, >> + { >> + .start = MCF_IRQ_RNG, >> + .end = MCF_IRQ_RNG, >> + .flags = IORESOURCE_IRQ, >> + }, >> +}; >> + >> +static struct platform_device mcf_rng = { >> + .name = "imx-rngc", >> + .id = -1, >> + .num_resources = ARRAY_SIZE(mcf_rng_resource), >> + .resource = mcf_rng_resource, >> +}; >> +#endif /* MCF_RNG_BASE */ >> + >> static struct platform_device *mcf_devices[] __initdata = { >> &mcf_uart, >> #ifdef MCFFEC_BASE0 >> @@ -660,6 +685,9 @@ static struct platform_device *mcf_devices[] >> __initdata = { >> #ifdef MCFFLEXCAN_SIZE >> &mcf_flexcan0, >> #endif >> +#ifdef MCF_RNG_BASE >> + &mcf_rng, >> +#endif >> }; >> /* >> diff --git a/arch/m68k/coldfire/m5441x.c b/arch/m68k/coldfire/m5441x.c >> index 7a25cfc7ac07..ab5b00637237 100644 >> --- a/arch/m68k/coldfire/m5441x.c >> +++ b/arch/m68k/coldfire/m5441x.c >> @@ -158,6 +158,7 @@ static struct clk * const enable_clks[] >> __initconst = { >> &__clk_0_33, /* pit.1 */ >> &__clk_0_37, /* eport */ >> &__clk_0_48, /* pll */ >> + &__clk_0_49, /* rng */ >> &__clk_0_51, /* esdhc */ >> &__clk_1_36, /* CCM/reset module/Power management */ >> @@ -179,7 +180,6 @@ static struct clk * const disable_clks[] >> __initconst = { >> &__clk_0_44, /* usb otg */ >> &__clk_0_45, /* usb host */ >> &__clk_0_47, /* ssi.0 */ >> - &__clk_0_49, /* rng */ >> &__clk_0_50, /* ssi.1 */ >> &__clk_0_53, /* enet-fec */ >> &__clk_0_54, /* enet-fec */ >> diff --git a/arch/m68k/include/asm/m5441xsim.h b/arch/m68k/include/ >> asm/m5441xsim.h >> index f48cf63bd782..dd64cdfcad3e 100644 >> --- a/arch/m68k/include/asm/m5441xsim.h >> +++ b/arch/m68k/include/asm/m5441xsim.h >> @@ -198,6 +198,15 @@ >> #define MCFRTC_SIZE (0xfc0a8840 - 0xfc0a8000) >> #define MCF_IRQ_RTC (MCFINT2_VECBASE + MCFINT2_RTC) >> +/* >> + * Random Number Generator (RNG) Module. >> + * Note: Only present in MCF54418, not in MCF54410/54415/54417 >> + */ >> +#define MCF_RNG_BASE 0xfc0c4000 >> +#define MCF_RNG_SIZE 0x1c >> +#define MCFINT2_RNG 28 >> +#define MCF_IRQ_RNG (MCFINT2_VECBASE + MCFINT2_RNG) >> + >> /* >> * GPIO Module. >> */ >> diff --git a/drivers/char/hw_random/Kconfig b/drivers/char/hw_random/ >> Kconfig >> index 492a2a61a65b..2f301e43db84 100644 >> --- a/drivers/char/hw_random/Kconfig >> +++ b/drivers/char/hw_random/Kconfig >> @@ -270,12 +270,13 @@ config HW_RANDOM_MXC_RNGA >> config HW_RANDOM_IMX_RNGC >> tristate "Freescale i.MX RNGC Random Number Generator" >> depends on HAS_IOMEM >> - depends on SOC_IMX25 || SOC_IMX6SL || SOC_IMX6SLL || SOC_IMX6UL >> || COMPILE_TEST >> + depends on SOC_IMX25 || SOC_IMX6SL || SOC_IMX6SLL || SOC_IMX6UL >> || COLDFIRE || COMPILE_TEST >> default HW_RANDOM >> help >> This driver provides kernel-side support for the Random Number >> Generator Version C hardware found on some Freescale i.MX >> processors. Version B is also supported by this driver. >> + Also supports RNGB on Freescale MCF54418 (Coldfire V4e). >> To compile this driver as a module, choose M here: the >> module will be called imx-rngc. >> diff --git a/drivers/char/hw_random/imx-rngc.c b/drivers/char/ >> hw_random/imx-rngc.c >> index d6a847e48339..44f20a05de0a 100644 >> --- a/drivers/char/hw_random/imx-rngc.c >> +++ b/drivers/char/hw_random/imx-rngc.c >> @@ -353,12 +353,19 @@ static const struct of_device_id >> imx_rngc_dt_ids[] = { >> }; >> MODULE_DEVICE_TABLE(of, imx_rngc_dt_ids); >> +static const struct platform_device_id imx_rngc_devtype[] = { >> + { .name = "imx-rngc" }, >> + { /* sentinel */ } >> +}; >> +MODULE_DEVICE_TABLE(platform, imx_rngc_devtype); >> + >> static struct platform_driver imx_rngc_driver = { >> .driver = { >> .name = KBUILD_MODNAME, >> .pm = pm_ptr(&imx_rngc_pm_ops), >> .of_match_table = imx_rngc_dt_ids, >> }, >> + .id_table = imx_rngc_devtype, >> }; >> module_platform_driver_probe(imx_rngc_driver, imx_rngc_probe); >> >