* [PATCH] OMAP3 ROM Random Number Generator support @ 2013-02-28 18:05 Pali Rohár 2013-03-24 14:15 ` Pali Rohár 2013-03-27 21:09 ` Tony Lindgren 0 siblings, 2 replies; 33+ messages in thread From: Pali Rohár @ 2013-02-28 18:05 UTC (permalink / raw) To: Tony Lindgren Cc: Juha Yrjola, Russell King, Matt Mackall, Herbert Xu, linux-omap, linux-kernel [-- Attachment #1: Type: Text/Plain, Size: 7871 bytes --] This driver provides kernel-side support for the Random Number Generator hardware found on OMAP34xx processors. This driver is included in Maemo 2.6.28 kernel used on Nokia N900. I fixed driver to work with 3.8 kernel and added platform_driver code to autoload it on omap3 devices. diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c index 626f3ea..48e40f3 100644 --- a/arch/arm/mach-omap2/devices.c +++ b/arch/arm/mach-omap2/devices.c @@ -446,6 +446,18 @@ static void omap_init_mcspi(void) static inline void omap_init_mcspi(void) {} #endif +static struct platform_device omap3_rom_rng_device = { + .name = "omap3-rom-rng", + .id = -1, +}; + +static void omap_init_rom_rng(void) +{ + if (!cpu_is_omap34xx() || omap_type() == OMAP2_DEVICE_TYPE_GP) + return; + platform_device_register(&omap3_rom_rng_device); +} + /** * omap_init_rng - bind the RNG hwmod to the RNG omap_device * @@ -727,6 +739,7 @@ static int __init omap2_init_devices(void) } omap_init_sti(); omap_init_rng(); + omap_init_rom_rng(); omap_init_sham(); omap_init_aes(); omap_init_vout(); diff --git a/drivers/char/hw_random/Kconfig b/drivers/char/hw_random/Kconfig index c5a0262..2d51db6 100644 --- a/drivers/char/hw_random/Kconfig +++ b/drivers/char/hw_random/Kconfig @@ -153,6 +153,19 @@ config HW_RANDOM_OMAP If unsure, say Y. +config HW_RANDOM_OMAP3_ROM + tristate "OMAP3 ROM Random Number Generator support" + depends on HW_RANDOM && ARCH_OMAP3 + default HW_RANDOM + ---help--- + This driver provides kernel-side support for the Random Number + Generator hardware found on OMAP34xx processors. + + To compile this driver as a module, choose M here: the + module will be called omap3-rom-rng. + + If unsure, say Y. + config HW_RANDOM_OCTEON tristate "Octeon Random Number Generator support" depends on HW_RANDOM && CPU_CAVIUM_OCTEON diff --git a/drivers/char/hw_random/Makefile b/drivers/char/hw_random/Makefile index 1fd7eec..d227cd6 100644 --- a/drivers/char/hw_random/Makefile +++ b/drivers/char/hw_random/Makefile @@ -15,6 +15,8 @@ n2-rng-y := n2-drv.o n2-asm.o obj-$(CONFIG_HW_RANDOM_VIA) += via-rng.o obj-$(CONFIG_HW_RANDOM_IXP4XX) += ixp4xx-rng.o obj-$(CONFIG_HW_RANDOM_OMAP) += omap-rng.o +obj-$(CONFIG_HW_RANDOM_OMAP3_ROM) += omap3-rom-rng.o +omap3-rom-rng-y := omap3-rom-drv.o omap3-rom-asm.o obj-$(CONFIG_HW_RANDOM_PASEMI) += pasemi-rng.o obj-$(CONFIG_HW_RANDOM_VIRTIO) += virtio-rng.o obj-$(CONFIG_HW_RANDOM_TX4939) += tx4939-rng.o diff --git a/drivers/char/hw_random/omap3-rom-asm.S b/drivers/char/hw_random/omap3-rom-asm.S new file mode 100644 index 0000000..ce82e16 --- /dev/null +++ b/drivers/char/hw_random/omap3-rom-asm.S @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2009 Nokia Corporation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + */ + +#include <linux/linkage.h> +#include <asm/assembler.h> + +ENTRY(omap3_rng_call_rom_asm) + .arch_extension sec + stmfd sp!, {r4-r12, lr} + stmfd sp!, {r0-r3} + bl v7_flush_dcache_all + ldmfd sp!, {r0-r3} + mov r6, #0xff + mov r12, r0 + smc #1 + mov r12, r0 + bl v7_flush_dcache_all + mov r0, #0 + mcr p15, 0, r0, c7, c5, 0 + mov r0, r12 + ldmfd sp!, {r4-r12, pc} diff --git a/drivers/char/hw_random/omap3-rom-drv.c b/drivers/char/hw_random/omap3-rom-drv.c new file mode 100644 index 0000000..4e2c0ff --- /dev/null +++ b/drivers/char/hw_random/omap3-rom-drv.c @@ -0,0 +1,167 @@ +/* + * omap3-rom-drv.c - RNG driver for TI OMAP3 CPU family + * + * Copyright (C) 2009 Nokia Corporation + * Author: Juha Yrjola <juha.yrjola@solidboot.com> + * + * This file is licensed under the terms of the GNU General Public + * License version 2. This program is licensed "as is" without any + * warranty of any kind, whether express or implied. + */ + +#include <linux/module.h> +#include <linux/init.h> +#include <linux/random.h> +#include <linux/hw_random.h> +#include <linux/timer.h> +#include <linux/clk.h> +#include <linux/err.h> +#include <linux/platform_device.h> + +#include "../../../arch/arm/mach-omap2/soc.h" + +#define SEC_HAL_RNG_GENERATE 29 +#define RNG_RESET 0x01 +#define RNG_GEN_PRNG_HW_INIT 0x02 +#define RNG_GEN_HW 0x08 + +static const char *omap3_rom_rng_name = "OMAP3 ROM RNG"; + +extern u32 omap3_rng_call_rom_asm(u32 id, u32 proc, u32 flags, u32 va_ptr); + +static int call_sec_rom(u32 appl_id, u32 proc_id, u32 flag, ...) +{ + va_list ap; + u32 ret; + u32 val; + + va_start(ap, flag); + val = *(u32 *) ≈ + local_irq_disable(); + local_fiq_disable(); + ret = omap3_rng_call_rom_asm(appl_id, proc_id, flag, + (u32) virt_to_phys((void *) val)); + local_fiq_enable(); + local_irq_enable(); + va_end(ap); + + return ret; +} + +static struct timer_list idle_timer; +static int rng_idle; +static struct clk *rng_clk; + +static void omap3_rom_idle_rng(unsigned long data) +{ + int r; + + r = call_sec_rom(SEC_HAL_RNG_GENERATE, 0, 0, 3, NULL, 0, + RNG_RESET); + if (r != 0) { + printk(KERN_ERR "%s: reset failed: %d\n", + omap3_rom_rng_name, r); + return; + } + clk_disable_unprepare(rng_clk); + rng_idle = 1; +} + +static int omap3_rom_get_random(void *buf, unsigned int count) +{ + u32 r; + u32 ptr; + + del_timer_sync(&idle_timer); + if (rng_idle) { + clk_prepare_enable(rng_clk); + r = call_sec_rom(SEC_HAL_RNG_GENERATE, 0, 0, 3, NULL, 0, + RNG_GEN_PRNG_HW_INIT); + if (r != 0) { + clk_disable_unprepare(rng_clk); + printk(KERN_ERR "%s: HW init failed: %d\n", + omap3_rom_rng_name, r); + return -EIO; + } + rng_idle = 0; + } + + ptr = virt_to_phys(buf); + r = call_sec_rom(SEC_HAL_RNG_GENERATE, 0, 0, 3, ptr, + count, RNG_GEN_HW); + mod_timer(&idle_timer, jiffies + msecs_to_jiffies(500)); + if (r != 0) + return -EINVAL; + return 0; +} + +static int omap3_rom_rng_data_present(struct hwrng *rng, int wait) +{ + return 1; +} + +static int omap3_rom_rng_data_read(struct hwrng *rng, u32 *data) +{ + int r; + + r = omap3_rom_get_random(data, 4); + if (r < 0) + return r; + return 4; +} + +static struct hwrng omap3_rom_rng_ops = { + .name = "omap3-rom", + .data_present = omap3_rom_rng_data_present, + .data_read = omap3_rom_rng_data_read, +}; + +static int omap3_rom_rng_probe(struct platform_device *pdev) +{ + printk(KERN_INFO "%s: initializing\n", omap3_rom_rng_name); + if (!cpu_is_omap34xx()) { + printk(KERN_ERR "%s: currently supports only OMAP34xx CPUs\n", + omap3_rom_rng_name); + return -ENODEV; + } + if (omap_type() == OMAP2_DEVICE_TYPE_GP) { + printk(KERN_ERR "%s: GP OMAPs not supported\n", + omap3_rom_rng_name); + return -ENODEV; + } + + setup_timer(&idle_timer, omap3_rom_idle_rng, 0); + rng_clk = clk_get_sys("omap_rng", "ick"); + if (IS_ERR(rng_clk)) { + printk(KERN_ERR "%s: unable to get RNG clock\n", + omap3_rom_rng_name); + return IS_ERR(rng_clk); + } + + /* Leave the RNG in reset state. */ + clk_prepare_enable(rng_clk); + omap3_rom_idle_rng(0); + + return hwrng_register(&omap3_rom_rng_ops); +} + +static int omap3_rom_rng_remove(struct platform_device *pdev) +{ + hwrng_unregister(&omap3_rom_rng_ops); + return 0; +} + +static struct platform_driver omap3_rom_rng_driver = { + .driver = { + .name = "omap3-rom-rng", + .owner = THIS_MODULE, + }, + .probe = omap3_rom_rng_probe, + .remove = omap3_rom_rng_remove, +}; + +module_platform_driver(omap3_rom_rng_driver); + +MODULE_ALIAS("platform:omap3-rom-rng"); +MODULE_AUTHOR("Juha Yrjola"); +MODULE_LICENSE("GPL"); -- Pali Rohár pali.rohar@gmail.com [-- Attachment #2: This is a digitally signed message part. --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply related [flat|nested] 33+ messages in thread
* Re: [PATCH] OMAP3 ROM Random Number Generator support 2013-02-28 18:05 [PATCH] OMAP3 ROM Random Number Generator support Pali Rohár @ 2013-03-24 14:15 ` Pali Rohár 2013-03-27 21:09 ` Tony Lindgren 1 sibling, 0 replies; 33+ messages in thread From: Pali Rohár @ 2013-03-24 14:15 UTC (permalink / raw) To: Tony Lindgren Cc: Juha Yrjola, Russell King, Matt Mackall, Herbert Xu, linux-omap, linux-kernel [-- Attachment #1: Type: Text/Plain, Size: 456 bytes --] On Thursday 28 February 2013 19:05:47 Pali Rohár wrote: > This driver provides kernel-side support for the Random Number > Generator hardware found on OMAP34xx processors. > > This driver is included in Maemo 2.6.28 kernel used on Nokia > N900. > > I fixed driver to work with 3.8 kernel and added > platform_driver code to autoload it on omap3 devices. > Hello, can somebody look at this driver? -- Pali Rohár pali.rohar@gmail.com [-- Attachment #2: This is a digitally signed message part. --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [PATCH] OMAP3 ROM Random Number Generator support 2013-02-28 18:05 [PATCH] OMAP3 ROM Random Number Generator support Pali Rohár 2013-03-24 14:15 ` Pali Rohár @ 2013-03-27 21:09 ` Tony Lindgren 2013-03-27 22:03 ` Pali Rohár 2013-03-28 9:52 ` [PATCH] OMAP3 ROM Random Number Generator support Russell King - ARM Linux 1 sibling, 2 replies; 33+ messages in thread From: Tony Lindgren @ 2013-03-27 21:09 UTC (permalink / raw) To: Pali Rohár Cc: Juha Yrjola, Russell King, Matt Mackall, Herbert Xu, linux-omap, linux-kernel * Pali Rohár <pali.rohar@gmail.com> [130228 10:09]: > --- /dev/null > +++ b/drivers/char/hw_random/omap3-rom-asm.S > @@ -0,0 +1,27 @@ > +/* > + * Copyright (C) 2009 Nokia Corporation > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + * > + */ > + > +#include <linux/linkage.h> > +#include <asm/assembler.h> > + > +ENTRY(omap3_rng_call_rom_asm) > + .arch_extension sec > + stmfd sp!, {r4-r12, lr} > + stmfd sp!, {r0-r3} > + bl v7_flush_dcache_all > + ldmfd sp!, {r0-r3} > + mov r6, #0xff > + mov r12, r0 > + smc #1 > + mov r12, r0 > + bl v7_flush_dcache_all > + mov r0, #0 > + mcr p15, 0, r0, c7, c5, 0 > + mov r0, r12 > + ldmfd sp!, {r4-r12, pc} This part should be in arch/arm/mach-omap2 because of the direct calls to v7_flush_dcache_all. Then you can pass a pointer to this function in platform_data for now, and set it up based on the compatible flag with device tree from driver later on. > --- /dev/null > +++ b/drivers/char/hw_random/omap3-rom-drv.c > @@ -0,0 +1,167 @@ > +/* > + * omap3-rom-drv.c - RNG driver for TI OMAP3 CPU family > + * > + * Copyright (C) 2009 Nokia Corporation > + * Author: Juha Yrjola <juha.yrjola@solidboot.com> > + * > + * This file is licensed under the terms of the GNU General Public > + * License version 2. This program is licensed "as is" without any > + * warranty of any kind, whether express or implied. > + */ > + > +#include <linux/module.h> > +#include <linux/init.h> > +#include <linux/random.h> > +#include <linux/hw_random.h> > +#include <linux/timer.h> > +#include <linux/clk.h> > +#include <linux/err.h> > +#include <linux/platform_device.h> > + > +#include "../../../arch/arm/mach-omap2/soc.h" NAK for this, this must be private to arch/arm/mach-omap2. Instead, just create a minimal include/linux/platform_data/omap3-rom.h, and pass the function pointer in the pdata if passed. > +static int omap3_rom_rng_probe(struct platform_device *pdev) > +{ > + printk(KERN_INFO "%s: initializing\n", omap3_rom_rng_name); > + if (!cpu_is_omap34xx()) { > + printk(KERN_ERR "%s: currently supports only OMAP34xx CPUs\n", > + omap3_rom_rng_name); > + return -ENODEV; > + } > + if (omap_type() == OMAP2_DEVICE_TYPE_GP) { > + printk(KERN_ERR "%s: GP OMAPs not supported\n", > + omap3_rom_rng_name); > + return -ENODEV; > + } > + > + setup_timer(&idle_timer, omap3_rom_idle_rng, 0); > + rng_clk = clk_get_sys("omap_rng", "ick"); > + if (IS_ERR(rng_clk)) { > + printk(KERN_ERR "%s: unable to get RNG clock\n", > + omap3_rom_rng_name); > + return IS_ERR(rng_clk); > + } > + > + /* Leave the RNG in reset state. */ > + clk_prepare_enable(rng_clk); > + omap3_rom_idle_rng(0); > + > + return hwrng_register(&omap3_rom_rng_ops); > +} You should replace the cpu_is_omap34xx() and omap_type() with some flags that you pass in the pdata. These too can be then deciphered based on the DT compatible flag later on. And then you don't need to include soc.h. Regards, Tony ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [PATCH] OMAP3 ROM Random Number Generator support 2013-03-27 21:09 ` Tony Lindgren @ 2013-03-27 22:03 ` Pali Rohár 2013-03-27 22:25 ` Tony Lindgren 2013-03-28 9:52 ` [PATCH] OMAP3 ROM Random Number Generator support Russell King - ARM Linux 1 sibling, 1 reply; 33+ messages in thread From: Pali Rohár @ 2013-03-27 22:03 UTC (permalink / raw) To: Tony Lindgren Cc: Juha Yrjola, Russell King, Matt Mackall, Herbert Xu, linux-omap, linux-kernel [-- Attachment #1: Type: Text/Plain, Size: 3815 bytes --] On Wednesday 27 March 2013 22:09:18 Tony Lindgren wrote: > * Pali Rohár <pali.rohar@gmail.com> [130228 10:09]: > > --- /dev/null > > +++ b/drivers/char/hw_random/omap3-rom-asm.S > > @@ -0,0 +1,27 @@ > > +/* > > + * Copyright (C) 2009 Nokia Corporation > > + * > > + * This program is free software; you can redistribute it > > and/or modify + * it under the terms of the GNU General > > Public License version 2 as + * published by the Free > > Software Foundation. > > + * > > + */ > > + > > +#include <linux/linkage.h> > > +#include <asm/assembler.h> > > + > > +ENTRY(omap3_rng_call_rom_asm) > > + .arch_extension sec > > + stmfd sp!, {r4-r12, lr} > > + stmfd sp!, {r0-r3} > > + bl v7_flush_dcache_all > > + ldmfd sp!, {r0-r3} > > + mov r6, #0xff > > + mov r12, r0 > > + smc #1 > > + mov r12, r0 > > + bl v7_flush_dcache_all > > + mov r0, #0 > > + mcr p15, 0, r0, c7, c5, 0 > > + mov r0, r12 > > + ldmfd sp!, {r4-r12, pc} > > This part should be in arch/arm/mach-omap2 because of the > direct calls to v7_flush_dcache_all. Then you can pass a > pointer to this function in platform_data for now, and set it > up based on the compatible flag with device tree from driver > later on. > Ok, I will move this file to arch/arm/mach-omap2/omap3-rom-rng.S and pass function via platform_data to driver. > > --- /dev/null > > +++ b/drivers/char/hw_random/omap3-rom-drv.c > > @@ -0,0 +1,167 @@ > > +/* > > + * omap3-rom-drv.c - RNG driver for TI OMAP3 CPU family > > + * > > + * Copyright (C) 2009 Nokia Corporation > > + * Author: Juha Yrjola <juha.yrjola@solidboot.com> > > + * > > + * This file is licensed under the terms of the GNU > > General Public + * License version 2. This program is > > licensed "as is" without any + * warranty of any kind, > > whether express or implied. + */ > > + > > +#include <linux/module.h> > > +#include <linux/init.h> > > +#include <linux/random.h> > > +#include <linux/hw_random.h> > > +#include <linux/timer.h> > > +#include <linux/clk.h> > > +#include <linux/err.h> > > +#include <linux/platform_device.h> > > + > > +#include "../../../arch/arm/mach-omap2/soc.h" > > NAK for this, this must be private to arch/arm/mach-omap2. > > Instead, just create a minimal > include/linux/platform_data/omap3-rom.h, and pass the > function pointer in the pdata if passed. > > > +static int omap3_rom_rng_probe(struct platform_device > > *pdev) +{ > > + printk(KERN_INFO "%s: initializing\n", > > omap3_rom_rng_name); + if (!cpu_is_omap34xx()) { > > + printk(KERN_ERR "%s: currently supports only OMAP34xx > > CPUs\n", + omap3_rom_rng_name); > > + return -ENODEV; > > + } > > + if (omap_type() == OMAP2_DEVICE_TYPE_GP) { > > + printk(KERN_ERR "%s: GP OMAPs not supported\n", > > + omap3_rom_rng_name); > > + return -ENODEV; > > + } > > + > > + setup_timer(&idle_timer, omap3_rom_idle_rng, 0); > > + rng_clk = clk_get_sys("omap_rng", "ick"); > > + if (IS_ERR(rng_clk)) { > > + printk(KERN_ERR "%s: unable to get RNG clock\n", > > + omap3_rom_rng_name); > > + return IS_ERR(rng_clk); > > + } > > + > > + /* Leave the RNG in reset state. */ > > + clk_prepare_enable(rng_clk); > > + omap3_rom_idle_rng(0); > > + > > + return hwrng_register(&omap3_rom_rng_ops); > > +} > > You should replace the cpu_is_omap34xx() and omap_type() with > some flags that you pass in the pdata. These too can be then > deciphered based on the DT compatible flag later on. And then > you don't need to include soc.h. > > Regards, > > Tony I will remove above code for checking omap type from hw rand driver, because same code is in omap part which creating platform_device for this driver. So soc.h is not needed. -- Pali Rohár pali.rohar@gmail.com [-- Attachment #2: This is a digitally signed message part. --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [PATCH] OMAP3 ROM Random Number Generator support 2013-03-27 22:03 ` Pali Rohár @ 2013-03-27 22:25 ` Tony Lindgren 2013-03-28 17:54 ` Pali Rohár 0 siblings, 1 reply; 33+ messages in thread From: Tony Lindgren @ 2013-03-27 22:25 UTC (permalink / raw) To: Pali Rohár Cc: Juha Yrjola, Russell King, Matt Mackall, Herbert Xu, linux-omap, linux-kernel * Pali Rohár <pali.rohar@gmail.com> [130327 15:08]: > > I will remove above code for checking omap type from hw rand > driver, because same code is in omap part which creating > platform_device for this driver. So soc.h is not needed. OK thanks, Tony ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [PATCH] OMAP3 ROM Random Number Generator support 2013-03-27 22:25 ` Tony Lindgren @ 2013-03-28 17:54 ` Pali Rohár 2013-03-28 21:44 ` Tony Lindgren 2013-09-18 20:05 ` [PATCH 0/2] " Pali Rohár 0 siblings, 2 replies; 33+ messages in thread From: Pali Rohár @ 2013-03-28 17:54 UTC (permalink / raw) To: Tony Lindgren Cc: Juha Yrjola, Russell King, Matt Mackall, Herbert Xu, linux-omap, linux-kernel [-- Attachment #1: Type: Text/Plain, Size: 8628 bytes --] On Wednesday 27 March 2013 23:25:24 Tony Lindgren wrote: > * Pali Rohár <pali.rohar@gmail.com> [130327 15:08]: > > I will remove above code for checking omap type from hw rand > > driver, because same code is in omap part which creating > > platform_device for this driver. So soc.h is not needed. > > OK thanks, > > Tony Here is new version of patch: diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index 5423456..37c4e09 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile @@ -82,7 +82,7 @@ obj-$(CONFIG_OMAP_PM_NOOP) += omap-pm-noop.o ifeq ($(CONFIG_PM),y) obj-$(CONFIG_ARCH_OMAP2) += pm24xx.o obj-$(CONFIG_ARCH_OMAP2) += sleep24xx.o -obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o +obj-$(CONFIG_ARCH_OMAP3) += pm34xx.o sleep34xx.o omap3-rom-rng.o obj-$(CONFIG_ARCH_OMAP4) += pm44xx.o omap-mpuss-lowpower.o obj-$(CONFIG_SOC_OMAP5) += omap-mpuss-lowpower.o obj-$(CONFIG_PM_DEBUG) += pm-debug.o diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c index 1ec7f05..0b6260a1 100644 --- a/arch/arm/mach-omap2/devices.c +++ b/arch/arm/mach-omap2/devices.c @@ -486,6 +486,23 @@ static void omap_init_mcspi(void) static inline void omap_init_mcspi(void) {} #endif +extern u32 *omap3_rom_rng_call(u32 id, u32 proc, u32 flags, u32 va_ptr); + +static struct platform_device omap3_rom_rng_device = { + .name = "omap3-rom-rng", + .id = -1, + .dev = { + .platform_data = omap3_rom_rng_call, + }, +}; + +static void omap_init_rom_rng(void) +{ + if (!cpu_is_omap34xx() || omap_type() == OMAP2_DEVICE_TYPE_GP) + return; + platform_device_register(&omap3_rom_rng_device); +} + /** * omap_init_rng - bind the RNG hwmod to the RNG omap_device * @@ -767,6 +784,7 @@ static int __init omap2_init_devices(void) } omap_init_sti(); omap_init_rng(); + omap_init_rom_rng(); omap_init_sham(); omap_init_aes(); omap_init_vout(); diff --git a/arch/arm/mach-omap2/omap3-rom-rng.S b/arch/arm/mach-omap2/omap3-rom-rng.S new file mode 100644 index 0000000..5d7d886 --- /dev/null +++ b/arch/arm/mach-omap2/omap3-rom-rng.S @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2009 Nokia Corporation + * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + */ + +#include <linux/linkage.h> +#include <asm/assembler.h> + +ENTRY(omap3_rom_rng_call) + .arch_extension sec + stmfd sp!, {r4-r12, lr} + stmfd sp!, {r0-r3} + bl v7_flush_dcache_all + ldmfd sp!, {r0-r3} + mov r6, #0xff + mov r12, r0 + smc #1 + mov r12, r0 + bl v7_flush_dcache_all + mov r0, #0 + mcr p15, 0, r0, c7, c5, 0 + mov r0, r12 + ldmfd sp!, {r4-r12, pc} diff --git a/drivers/char/hw_random/Kconfig b/drivers/char/hw_random/Kconfig index c5a0262..2d51db6 100644 --- a/drivers/char/hw_random/Kconfig +++ b/drivers/char/hw_random/Kconfig @@ -153,6 +153,19 @@ config HW_RANDOM_OMAP If unsure, say Y. +config HW_RANDOM_OMAP3_ROM + tristate "OMAP3 ROM Random Number Generator support" + depends on HW_RANDOM && ARCH_OMAP3 + default HW_RANDOM + ---help--- + This driver provides kernel-side support for the Random Number + Generator hardware found on OMAP34xx processors. + + To compile this driver as a module, choose M here: the + module will be called omap3-rom-rng. + + If unsure, say Y. + config HW_RANDOM_OCTEON tristate "Octeon Random Number Generator support" depends on HW_RANDOM && CPU_CAVIUM_OCTEON diff --git a/drivers/char/hw_random/Makefile b/drivers/char/hw_random/Makefile index 1fd7eec..c53e018 100644 --- a/drivers/char/hw_random/Makefile +++ b/drivers/char/hw_random/Makefile @@ -15,6 +15,7 @@ n2-rng-y := n2-drv.o n2-asm.o obj-$(CONFIG_HW_RANDOM_VIA) += via-rng.o obj-$(CONFIG_HW_RANDOM_IXP4XX) += ixp4xx-rng.o obj-$(CONFIG_HW_RANDOM_OMAP) += omap-rng.o +obj-$(CONFIG_HW_RANDOM_OMAP3_ROM) += omap3-rom-rng.o obj-$(CONFIG_HW_RANDOM_PASEMI) += pasemi-rng.o obj-$(CONFIG_HW_RANDOM_VIRTIO) += virtio-rng.o obj-$(CONFIG_HW_RANDOM_TX4939) += tx4939-rng.o diff --git a/drivers/char/hw_random/omap3-rom-rng.c b/drivers/char/hw_random/omap3-rom-rng.c new file mode 100644 index 0000000..5343415 --- /dev/null +++ b/drivers/char/hw_random/omap3-rom-rng.c @@ -0,0 +1,165 @@ +/* + * omap3-rom-drv.c - RNG driver for TI OMAP3 CPU family + * + * Copyright (C) 2009 Nokia Corporation + * Author: Juha Yrjola <juha.yrjola@solidboot.com> + * + * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com> + * + * This file is licensed under the terms of the GNU General Public + * License version 2. This program is licensed "as is" without any + * warranty of any kind, whether express or implied. + */ + +#include <linux/module.h> +#include <linux/init.h> +#include <linux/random.h> +#include <linux/hw_random.h> +#include <linux/timer.h> +#include <linux/clk.h> +#include <linux/err.h> +#include <linux/platform_device.h> + +#define SEC_HAL_RNG_GENERATE 29 +#define RNG_RESET 0x01 +#define RNG_GEN_PRNG_HW_INIT 0x02 +#define RNG_GEN_HW 0x08 + +static const char *omap3_rom_rng_name = "OMAP3 ROM RNG"; + +static u32 (*omap3_rom_rng_call)(u32, u32, u32, u32); + +static int call_sec_rom(u32 appl_id, u32 proc_id, u32 flag, ...) +{ + va_list ap; + u32 ret; + u32 val; + + va_start(ap, flag); + val = *(u32 *) ≈ + local_irq_disable(); + local_fiq_disable(); + ret = omap3_rom_rng_call(appl_id, proc_id, flag, + (u32) virt_to_phys((void *) val)); + local_fiq_enable(); + local_irq_enable(); + va_end(ap); + + return ret; +} + +static struct timer_list idle_timer; +static int rng_idle; +static struct clk *rng_clk; + +static void omap3_rom_idle_rng(unsigned long data) +{ + int r; + + r = call_sec_rom(SEC_HAL_RNG_GENERATE, 0, 0, 3, NULL, 0, + RNG_RESET); + if (r != 0) { + printk(KERN_ERR "%s: reset failed: %d\n", + omap3_rom_rng_name, r); + return; + } + clk_disable_unprepare(rng_clk); + rng_idle = 1; +} + +static int omap3_rom_get_random(void *buf, unsigned int count) +{ + u32 r; + u32 ptr; + + del_timer_sync(&idle_timer); + if (rng_idle) { + clk_prepare_enable(rng_clk); + r = call_sec_rom(SEC_HAL_RNG_GENERATE, 0, 0, 3, NULL, 0, + RNG_GEN_PRNG_HW_INIT); + if (r != 0) { + clk_disable_unprepare(rng_clk); + printk(KERN_ERR "%s: HW init failed: %d\n", + omap3_rom_rng_name, r); + return -EIO; + } + rng_idle = 0; + } + + ptr = virt_to_phys(buf); + r = call_sec_rom(SEC_HAL_RNG_GENERATE, 0, 0, 3, ptr, + count, RNG_GEN_HW); + mod_timer(&idle_timer, jiffies + msecs_to_jiffies(500)); + if (r != 0) + return -EINVAL; + return 0; +} + +static int omap3_rom_rng_data_present(struct hwrng *rng, int wait) +{ + return 1; +} + +static int omap3_rom_rng_data_read(struct hwrng *rng, u32 *data) +{ + int r; + + r = omap3_rom_get_random(data, 4); + if (r < 0) + return r; + return 4; +} + +static struct hwrng omap3_rom_rng_ops = { + .name = "omap3-rom", + .data_present = omap3_rom_rng_data_present, + .data_read = omap3_rom_rng_data_read, +}; + +static int omap3_rom_rng_probe(struct platform_device *pdev) +{ + printk(KERN_INFO "%s: initializing\n", omap3_rom_rng_name); + + omap3_rom_rng_call = pdev->dev.platform_data; + if (!omap3_rom_rng_call) { + printk(KERN_ERR "%s: omap3_rom_rng_call is NULL\n", + omap3_rom_rng_name); + return -EINVAL; + } + + setup_timer(&idle_timer, omap3_rom_idle_rng, 0); + rng_clk = clk_get_sys("omap_rng", "ick"); + if (IS_ERR(rng_clk)) { + printk(KERN_ERR "%s: unable to get RNG clock\n", + omap3_rom_rng_name); + return IS_ERR(rng_clk); + } + + /* Leave the RNG in reset state. */ + clk_prepare_enable(rng_clk); + omap3_rom_idle_rng(0); + + return hwrng_register(&omap3_rom_rng_ops); +} + +static int omap3_rom_rng_remove(struct platform_device *pdev) +{ + hwrng_unregister(&omap3_rom_rng_ops); + return 0; +} + +static struct platform_driver omap3_rom_rng_driver = { + .driver = { + .name = "omap3-rom-rng", + .owner = THIS_MODULE, + }, + .probe = omap3_rom_rng_probe, + .remove = omap3_rom_rng_remove, +}; + +module_platform_driver(omap3_rom_rng_driver); + +MODULE_ALIAS("platform:omap3-rom-rng"); +MODULE_AUTHOR("Juha Yrjola"); +MODULE_AUTHOR("Pali Rohár <pali.rohar@gmail.com>"); +MODULE_LICENSE("GPL"); -- Pali Rohár pali.rohar@gmail.com [-- Attachment #2: This is a digitally signed message part. --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply related [flat|nested] 33+ messages in thread
* Re: [PATCH] OMAP3 ROM Random Number Generator support 2013-03-28 17:54 ` Pali Rohár @ 2013-03-28 21:44 ` Tony Lindgren 2013-03-31 9:28 ` Pali Rohár 2013-09-18 20:05 ` [PATCH 0/2] " Pali Rohár 1 sibling, 1 reply; 33+ messages in thread From: Tony Lindgren @ 2013-03-28 21:44 UTC (permalink / raw) To: Pali Rohár Cc: Juha Yrjola, Russell King, Matt Mackall, Herbert Xu, linux-omap, linux-kernel * Pali Rohár <pali.rohar@gmail.com> [130328 10:58]: > > Here is new version of patch: > > --- a/arch/arm/mach-omap2/devices.c > +++ b/arch/arm/mach-omap2/devices.c > @@ -486,6 +486,23 @@ static void omap_init_mcspi(void) > static inline void omap_init_mcspi(void) {} > #endif > > +extern u32 *omap3_rom_rng_call(u32 id, u32 proc, u32 flags, u32 va_ptr); > + > +static struct platform_device omap3_rom_rng_device = { > + .name = "omap3-rom-rng", > + .id = -1, > + .dev = { > + .platform_data = omap3_rom_rng_call, > + }, > +}; > + > +static void omap_init_rom_rng(void) > +{ > + if (!cpu_is_omap34xx() || omap_type() == OMAP2_DEVICE_TYPE_GP) > + return; > + platform_device_register(&omap3_rom_rng_device); > +} > + > /** > * omap_init_rng - bind the RNG hwmod to the RNG omap_device > * This driver probably only works on Nokia boards because of the different SMC call numbering. Until it's been verified on some other HS omap34xx, I'd probably register this only from the Nokia board-*.c file. > --- /dev/null > +++ b/drivers/char/hw_random/omap3-rom-rng.c > +static int omap3_rom_rng_probe(struct platform_device *pdev) > +{ > + printk(KERN_INFO "%s: initializing\n", omap3_rom_rng_name); > + > + omap3_rom_rng_call = pdev->dev.platform_data; > + if (!omap3_rom_rng_call) { > + printk(KERN_ERR "%s: omap3_rom_rng_call is NULL\n", > + omap3_rom_rng_name); > + return -EINVAL; > + } > + > + setup_timer(&idle_timer, omap3_rom_idle_rng, 0); > + rng_clk = clk_get_sys("omap_rng", "ick"); > + if (IS_ERR(rng_clk)) { > + printk(KERN_ERR "%s: unable to get RNG clock\n", > + omap3_rom_rng_name); > + return IS_ERR(rng_clk); > + } You can use regular clk_get if you add the alias to struct omap_clk omap3xxx_clks table. Regards, Tony ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [PATCH] OMAP3 ROM Random Number Generator support 2013-03-28 21:44 ` Tony Lindgren @ 2013-03-31 9:28 ` Pali Rohár 2013-04-01 16:25 ` Tony Lindgren 0 siblings, 1 reply; 33+ messages in thread From: Pali Rohár @ 2013-03-31 9:28 UTC (permalink / raw) To: Tony Lindgren Cc: Juha Yrjola, Russell King, Matt Mackall, Herbert Xu, linux-omap, linux-kernel, Ивайло Димитров [-- Attachment #1: Type: Text/Plain, Size: 2302 bytes --] On Thursday 28 March 2013 22:44:11 Tony Lindgren wrote: > * Pali Rohár <pali.rohar@gmail.com> [130328 10:58]: > > Here is new version of patch: > > > > --- a/arch/arm/mach-omap2/devices.c > > +++ b/arch/arm/mach-omap2/devices.c > > @@ -486,6 +486,23 @@ static void omap_init_mcspi(void) > > > > static inline void omap_init_mcspi(void) {} > > #endif > > > > +extern u32 *omap3_rom_rng_call(u32 id, u32 proc, u32 flags, > > u32 va_ptr); + > > +static struct platform_device omap3_rom_rng_device = { > > + .name = "omap3-rom-rng", > > + .id = -1, > > + .dev = { > > + .platform_data = omap3_rom_rng_call, > > + }, > > +}; > > + > > +static void omap_init_rom_rng(void) > > +{ > > + if (!cpu_is_omap34xx() || omap_type() == > > OMAP2_DEVICE_TYPE_GP) + return; > > + platform_device_register(&omap3_rom_rng_device); > > +} > > + > > > > /** > > > > * omap_init_rng - bind the RNG hwmod to the RNG > > omap_device * > > This driver probably only works on Nokia boards because of the > different SMC call numbering. Until it's been verified on some > other HS omap34xx, I'd probably register this only from the > Nokia board-*.c file. > Freemangordon, can you look at this smc and errara 430973 code if they could be merged? Really omap3_rom_rng_call function looks like n900 specific. Link: https://lkml.org/lkml/2013/3/28/398 > > --- /dev/null > > +++ b/drivers/char/hw_random/omap3-rom-rng.c > > +static int omap3_rom_rng_probe(struct platform_device > > *pdev) +{ > > + printk(KERN_INFO "%s: initializing\n", > > omap3_rom_rng_name); + > > + omap3_rom_rng_call = pdev->dev.platform_data; > > + if (!omap3_rom_rng_call) { > > + printk(KERN_ERR "%s: omap3_rom_rng_call is NULL\n", > > + omap3_rom_rng_name); > > + return -EINVAL; > > + } > > + > > + setup_timer(&idle_timer, omap3_rom_idle_rng, 0); > > + rng_clk = clk_get_sys("omap_rng", "ick"); > > + if (IS_ERR(rng_clk)) { > > + printk(KERN_ERR "%s: unable to get RNG clock\n", > > + omap3_rom_rng_name); > > + return IS_ERR(rng_clk); > > + } > > You can use regular clk_get if you add the alias to > struct omap_clk omap3xxx_clks table. > > Regards, > > Tony Tony, can you show me how? -- Pali Rohár pali.rohar@gmail.com [-- Attachment #2: This is a digitally signed message part. --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [PATCH] OMAP3 ROM Random Number Generator support 2013-03-31 9:28 ` Pali Rohár @ 2013-04-01 16:25 ` Tony Lindgren 0 siblings, 0 replies; 33+ messages in thread From: Tony Lindgren @ 2013-04-01 16:25 UTC (permalink / raw) To: Pali Rohár Cc: Juha Yrjola, Russell King, Matt Mackall, Herbert Xu, linux-omap, linux-kernel, Ивайло Димитров * Pali Rohár <pali.rohar@gmail.com> [130331 02:32]: > On Thursday 28 March 2013 22:44:11 Tony Lindgren wrote: > > > > You can use regular clk_get if you add the alias to > > struct omap_clk omap3xxx_clks table. > > Tony, can you show me how? Take a look at the omap3xxx_clks in cclock3xxx_data.c. Note how some entries have things like "omap_hsmmc.0" and "ick". By adding those your driver can request the clock with clk_get(&pdev->dev, "ick"). Regards, Tony ^ permalink raw reply [flat|nested] 33+ messages in thread
* [PATCH 0/2] OMAP3 ROM Random Number Generator support 2013-03-28 17:54 ` Pali Rohár 2013-03-28 21:44 ` Tony Lindgren @ 2013-09-18 20:05 ` Pali Rohár 2013-09-18 20:05 ` [PATCH 1/2] hwrng: " Pali Rohár ` (2 more replies) 1 sibling, 3 replies; 33+ messages in thread From: Pali Rohár @ 2013-09-18 20:05 UTC (permalink / raw) To: Matt Mackall, Herbert Xu, Tony Lindgren, Russell King Cc: linux-omap, linux-kernel, Pali Rohár This two patches adding support for OMAP3 ROM Random Number Generator on Nokia N900. Pali Rohár (2): hwrng: OMAP3 ROM Random Number Generator support RX-51: Add support for OMAP3 ROM Random Number Generator arch/arm/mach-omap2/board-rx51.c | 10 +++ arch/arm/mach-omap2/omap-secure.c | 11 +++ arch/arm/mach-omap2/omap-secure.h | 1 + drivers/char/hw_random/Kconfig | 13 +++ drivers/char/hw_random/Makefile | 1 + drivers/char/hw_random/omap3-rom-rng.c | 145 ++++++++++++++++++++++++++++++++ 6 files changed, 181 insertions(+) create mode 100644 drivers/char/hw_random/omap3-rom-rng.c -- 1.7.10.4 ^ permalink raw reply [flat|nested] 33+ messages in thread
* [PATCH 1/2] hwrng: OMAP3 ROM Random Number Generator support 2013-09-18 20:05 ` [PATCH 0/2] " Pali Rohár @ 2013-09-18 20:05 ` Pali Rohár 2013-09-18 20:22 ` Joe Perches 2013-09-18 20:50 ` Aaro Koskinen 2013-09-18 20:05 ` [PATCH 2/2] RX-51: Add support for OMAP3 ROM Random Number Generator Pali Rohár 2013-09-20 13:25 ` [PATCH v2 0/3] OMAP3 ROM Random Number Generator support Pali Rohár 2 siblings, 2 replies; 33+ messages in thread From: Pali Rohár @ 2013-09-18 20:05 UTC (permalink / raw) To: Matt Mackall, Herbert Xu, Tony Lindgren, Russell King Cc: linux-omap, linux-kernel, Pali Rohár, Juha Yrjola This driver provides kernel-side support for the Random Number Generator hardware found on OMAP34xx processors. Signed-off-by: Pali Rohár <pali.rohar@gmail.com> Signed-off-by: Juha Yrjola <juha.yrjola@solidboot.com> --- drivers/char/hw_random/Kconfig | 13 +++ drivers/char/hw_random/Makefile | 1 + drivers/char/hw_random/omap3-rom-rng.c | 145 ++++++++++++++++++++++++++++++++ 3 files changed, 159 insertions(+) create mode 100644 drivers/char/hw_random/omap3-rom-rng.c diff --git a/drivers/char/hw_random/Kconfig b/drivers/char/hw_random/Kconfig index 0aa9d91..0a331c3 100644 --- a/drivers/char/hw_random/Kconfig +++ b/drivers/char/hw_random/Kconfig @@ -165,6 +165,19 @@ config HW_RANDOM_OMAP If unsure, say Y. +config HW_RANDOM_OMAP3_ROM + tristate "OMAP3 ROM Random Number Generator support" + depends on HW_RANDOM && ARCH_OMAP3 + default HW_RANDOM + ---help--- + This driver provides kernel-side support for the Random Number + Generator hardware found on OMAP34xx processors. + + To compile this driver as a module, choose M here: the + module will be called omap3-rom-rng. + + If unsure, say Y. + config HW_RANDOM_OCTEON tristate "Octeon Random Number Generator support" depends on HW_RANDOM && CAVIUM_OCTEON_SOC diff --git a/drivers/char/hw_random/Makefile b/drivers/char/hw_random/Makefile index bed467c..7c8aa80 100644 --- a/drivers/char/hw_random/Makefile +++ b/drivers/char/hw_random/Makefile @@ -15,6 +15,7 @@ n2-rng-y := n2-drv.o n2-asm.o obj-$(CONFIG_HW_RANDOM_VIA) += via-rng.o obj-$(CONFIG_HW_RANDOM_IXP4XX) += ixp4xx-rng.o obj-$(CONFIG_HW_RANDOM_OMAP) += omap-rng.o +obj-$(CONFIG_HW_RANDOM_OMAP3_ROM) += omap3-rom-rng.o obj-$(CONFIG_HW_RANDOM_PASEMI) += pasemi-rng.o obj-$(CONFIG_HW_RANDOM_VIRTIO) += virtio-rng.o obj-$(CONFIG_HW_RANDOM_TX4939) += tx4939-rng.o diff --git a/drivers/char/hw_random/omap3-rom-rng.c b/drivers/char/hw_random/omap3-rom-rng.c new file mode 100644 index 0000000..a9dbb2d --- /dev/null +++ b/drivers/char/hw_random/omap3-rom-rng.c @@ -0,0 +1,145 @@ +/* + * omap3-rom-rng.c - RNG driver for TI OMAP3 CPU family + * + * Copyright (C) 2009 Nokia Corporation + * Author: Juha Yrjola <juha.yrjola@solidboot.com> + * + * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com> + * + * This file is licensed under the terms of the GNU General Public + * License version 2. This program is licensed "as is" without any + * warranty of any kind, whether express or implied. + */ + +#include <linux/module.h> +#include <linux/init.h> +#include <linux/random.h> +#include <linux/hw_random.h> +#include <linux/timer.h> +#include <linux/clk.h> +#include <linux/err.h> +#include <linux/platform_device.h> + +#define RNG_RESET 0x01 +#define RNG_GEN_PRNG_HW_INIT 0x02 +#define RNG_GEN_HW 0x08 + +static const char *omap3_rom_rng_name = "OMAP3 ROM RNG"; + +/* param1: ptr, param2: count, param3: flag */ +static u32 (*omap3_rom_rng_call)(u32, u32, u32); + +static struct timer_list idle_timer; +static int rng_idle; +static struct clk *rng_clk; + +static void omap3_rom_rng_idle(unsigned long data) +{ + int r; + + r = omap3_rom_rng_call(0, 0, RNG_RESET); + if (r != 0) { + printk(KERN_ERR "%s: reset failed: %d\n", + omap3_rom_rng_name, r); + return; + } + clk_disable_unprepare(rng_clk); + rng_idle = 1; +} + +static int omap3_rom_rng_get_random(void *buf, unsigned int count) +{ + u32 r; + u32 ptr; + + del_timer_sync(&idle_timer); + if (rng_idle) { + clk_prepare_enable(rng_clk); + r = omap3_rom_rng_call(0, 0, RNG_GEN_PRNG_HW_INIT); + if (r != 0) { + clk_disable_unprepare(rng_clk); + printk(KERN_ERR "%s: HW init failed: %d\n", + omap3_rom_rng_name, r); + return -EIO; + } + rng_idle = 0; + } + + ptr = virt_to_phys(buf); + r = omap3_rom_rng_call(ptr, count, RNG_GEN_HW); + mod_timer(&idle_timer, jiffies + msecs_to_jiffies(500)); + if (r != 0) + return -EINVAL; + return 0; +} + +static int omap3_rom_rng_data_present(struct hwrng *rng, int wait) +{ + return 1; +} + +static int omap3_rom_rng_data_read(struct hwrng *rng, u32 *data) +{ + int r; + + r = omap3_rom_rng_get_random(data, 4); + if (r < 0) + return r; + return 4; +} + +static struct hwrng omap3_rom_rng_ops = { + .name = "omap3-rom", + .data_present = omap3_rom_rng_data_present, + .data_read = omap3_rom_rng_data_read, +}; + +static int omap3_rom_rng_probe(struct platform_device *pdev) +{ + printk(KERN_INFO "%s: initializing\n", omap3_rom_rng_name); + + omap3_rom_rng_call = pdev->dev.platform_data; + if (!omap3_rom_rng_call) { + printk(KERN_ERR "%s: omap3_rom_rng_call is NULL\n", + omap3_rom_rng_name); + return -EINVAL; + } + + setup_timer(&idle_timer, omap3_rom_rng_idle, 0); + rng_clk = clk_get(&pdev->dev, "ick"); + if (IS_ERR(rng_clk)) { + printk(KERN_ERR "%s: unable to get RNG clock\n", + omap3_rom_rng_name); + return IS_ERR(rng_clk); + } + + /* Leave the RNG in reset state. */ + clk_prepare_enable(rng_clk); + omap3_rom_rng_idle(0); + + return hwrng_register(&omap3_rom_rng_ops); +} + +static int omap3_rom_rng_remove(struct platform_device *pdev) +{ + hwrng_unregister(&omap3_rom_rng_ops); + clk_disable_unprepare(rng_clk); + clk_put(rng_clk); + return 0; +} + +static struct platform_driver omap3_rom_rng_driver = { + .driver = { + .name = "omap3-rom-rng", + .owner = THIS_MODULE, + }, + .probe = omap3_rom_rng_probe, + .remove = omap3_rom_rng_remove, +}; + +module_platform_driver(omap3_rom_rng_driver); + +MODULE_ALIAS("platform:omap3-rom-rng"); +MODULE_AUTHOR("Juha Yrjola"); +MODULE_AUTHOR("Pali Rohár <pali.rohar@gmail.com>"); +MODULE_LICENSE("GPL"); -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 33+ messages in thread
* Re: [PATCH 1/2] hwrng: OMAP3 ROM Random Number Generator support 2013-09-18 20:05 ` [PATCH 1/2] hwrng: " Pali Rohár @ 2013-09-18 20:22 ` Joe Perches 2013-09-18 20:50 ` Aaro Koskinen 1 sibling, 0 replies; 33+ messages in thread From: Joe Perches @ 2013-09-18 20:22 UTC (permalink / raw) To: Pali Rohár Cc: Matt Mackall, Herbert Xu, Tony Lindgren, Russell King, linux-omap, linux-kernel, Juha Yrjola On Wed, 2013-09-18 at 22:05 +0200, Pali Rohár wrote: > This driver provides kernel-side support for the Random Number > Generator hardware found on OMAP34xx processors. [] > diff --git a/drivers/char/hw_random/omap3-rom-rng.c b/drivers/char/hw_random/omap3-rom-rng.c trivial note: It produces smaller overall code to add #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt before any #include and use > +static void omap3_rom_rng_idle(unsigned long data) > +{ > + int r; > + > + r = omap3_rom_rng_call(0, 0, RNG_RESET); > + if (r != 0) { > + printk(KERN_ERR "%s: reset failed: %d\n", > + omap3_rom_rng_name, r); pr_err("reset failed: %d\n", r); > +static int omap3_rom_rng_get_random(void *buf, unsigned int count) > +{ [] > + if (r != 0) { > + clk_disable_unprepare(rng_clk); > + printk(KERN_ERR "%s: HW init failed: %d\n", > + omap3_rom_rng_name, r); pr_err("HW init failed: %d\n", r); etc... ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [PATCH 1/2] hwrng: OMAP3 ROM Random Number Generator support 2013-09-18 20:05 ` [PATCH 1/2] hwrng: " Pali Rohár 2013-09-18 20:22 ` Joe Perches @ 2013-09-18 20:50 ` Aaro Koskinen 1 sibling, 0 replies; 33+ messages in thread From: Aaro Koskinen @ 2013-09-18 20:50 UTC (permalink / raw) To: Pali Rohár Cc: Matt Mackall, Herbert Xu, Tony Lindgren, Russell King, linux-omap, linux-kernel, Juha Yrjola Hi, On Wed, Sep 18, 2013 at 10:05:56PM +0200, Pali Rohár wrote: > + if (IS_ERR(rng_clk)) { > + printk(KERN_ERR "%s: unable to get RNG clock\n", > + omap3_rom_rng_name); > + return IS_ERR(rng_clk); This should be PTR_ERR(). A. ^ permalink raw reply [flat|nested] 33+ messages in thread
* [PATCH 2/2] RX-51: Add support for OMAP3 ROM Random Number Generator 2013-09-18 20:05 ` [PATCH 0/2] " Pali Rohár 2013-09-18 20:05 ` [PATCH 1/2] hwrng: " Pali Rohár @ 2013-09-18 20:05 ` Pali Rohár 2013-09-18 20:39 ` Tony Lindgren 2013-09-20 13:25 ` [PATCH v2 0/3] OMAP3 ROM Random Number Generator support Pali Rohár 2 siblings, 1 reply; 33+ messages in thread From: Pali Rohár @ 2013-09-18 20:05 UTC (permalink / raw) To: Matt Mackall, Herbert Xu, Tony Lindgren, Russell King Cc: linux-omap, linux-kernel, Pali Rohár Signed-off-by: Pali Rohár <pali.rohar@gmail.com> --- arch/arm/mach-omap2/board-rx51.c | 10 ++++++++++ arch/arm/mach-omap2/omap-secure.c | 11 +++++++++++ arch/arm/mach-omap2/omap-secure.h | 1 + 3 files changed, 22 insertions(+) diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c index db168c9..c2a3e39 100644 --- a/arch/arm/mach-omap2/board-rx51.c +++ b/arch/arm/mach-omap2/board-rx51.c @@ -93,6 +93,14 @@ static struct omap_musb_board_data musb_board_data = { .power = 0, }; +static struct platform_device omap3_rom_rng_device = { + .name = "omap_rng", + .id = -1, + .dev = { + .platform_data = rx51_secure_rng_call, + }, +}; + static void __init rx51_init(void) { struct omap_sdrc_params *sdrc_params; @@ -113,6 +121,8 @@ static void __init rx51_init(void) /* set IBE to 1 */ rx51_secure_update_aux_cr(BIT(6), 0); #endif + pr_info("RX-51: Registring OMAP3 HWRNG device\n"); + platform_device_register(&omap3_rom_rng_device); } /* Ensure SDRC pins are mux'd for self-refresh */ diff --git a/arch/arm/mach-omap2/omap-secure.c b/arch/arm/mach-omap2/omap-secure.c index 146a7c4..5ac122e 100644 --- a/arch/arm/mach-omap2/omap-secure.c +++ b/arch/arm/mach-omap2/omap-secure.c @@ -135,3 +135,14 @@ u32 rx51_secure_update_aux_cr(u32 set_bits, u32 clear_bits) FLAG_START_CRITICAL, 1, acr, 0, 0, 0); } + +/** + * rx51_secure_rng_call: Routine for HW random generator + */ +u32 rx51_secure_rng_call(u32 ptr, u32 count, u32 flag) +{ + return rx51_secure_dispatcher(RX51_PPA_HWRNG, + 0, + NO_FLAG, + 3, ptr, count, flag, 0); +} diff --git a/arch/arm/mach-omap2/omap-secure.h b/arch/arm/mach-omap2/omap-secure.h index 51b59c6..f6cabb0 100644 --- a/arch/arm/mach-omap2/omap-secure.h +++ b/arch/arm/mach-omap2/omap-secure.h @@ -65,6 +65,7 @@ extern int omap_secure_ram_reserve_memblock(void); extern u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs, u32 arg1, u32 arg2, u32 arg3, u32 arg4); extern u32 rx51_secure_update_aux_cr(u32 set_bits, u32 clear_bits); +extern u32 rx51_secure_rng_call(u32 ptr, u32 count, u32 flag); #ifdef CONFIG_OMAP4_ERRATA_I688 extern int omap_barrier_reserve_memblock(void); -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 33+ messages in thread
* Re: [PATCH 2/2] RX-51: Add support for OMAP3 ROM Random Number Generator 2013-09-18 20:05 ` [PATCH 2/2] RX-51: Add support for OMAP3 ROM Random Number Generator Pali Rohár @ 2013-09-18 20:39 ` Tony Lindgren 0 siblings, 0 replies; 33+ messages in thread From: Tony Lindgren @ 2013-09-18 20:39 UTC (permalink / raw) To: Pali Rohár Cc: Matt Mackall, Herbert Xu, Russell King, linux-omap, linux-kernel * Pali Rohár <pali.rohar@gmail.com> [130918 13:15]: > Signed-off-by: Pali Rohár <pali.rohar@gmail.com> Description please, then also add a note that this makes sense to do as a platform device at least until we have some ARM generic way to deal with SMC calls. > arch/arm/mach-omap2/board-rx51.c | 10 ++++++++++ > arch/arm/mach-omap2/omap-secure.c | 11 +++++++++++ > arch/arm/mach-omap2/omap-secure.h | 1 + > 3 files changed, 22 insertions(+) > > diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c > index db168c9..c2a3e39 100644 > --- a/arch/arm/mach-omap2/board-rx51.c > +++ b/arch/arm/mach-omap2/board-rx51.c > @@ -93,6 +93,14 @@ static struct omap_musb_board_data musb_board_data = { > .power = 0, > }; > > +static struct platform_device omap3_rom_rng_device = { > + .name = "omap_rng", > + .id = -1, > + .dev = { > + .platform_data = rx51_secure_rng_call, > + }, > +}; > + > static void __init rx51_init(void) > { > struct omap_sdrc_params *sdrc_params; > @@ -113,6 +121,8 @@ static void __init rx51_init(void) > /* set IBE to 1 */ > rx51_secure_update_aux_cr(BIT(6), 0); > #endif > + pr_info("RX-51: Registring OMAP3 HWRNG device\n"); > + platform_device_register(&omap3_rom_rng_device); > } > > /* Ensure SDRC pins are mux'd for self-refresh */ Maybe this should be in board-rx51-peripherals.c instead? That way we can initialize the legacy platform devices from there for DT based booting too and don't have to move code around when moving to DT based booting. Regards, Tony ^ permalink raw reply [flat|nested] 33+ messages in thread
* [PATCH v2 0/3] OMAP3 ROM Random Number Generator support 2013-09-18 20:05 ` [PATCH 0/2] " Pali Rohár 2013-09-18 20:05 ` [PATCH 1/2] hwrng: " Pali Rohár 2013-09-18 20:05 ` [PATCH 2/2] RX-51: Add support for OMAP3 ROM Random Number Generator Pali Rohár @ 2013-09-20 13:25 ` Pali Rohár 2013-09-20 13:25 ` [PATCH v2 1/3] omap2: Change clk dev id for rng to omap3-rom-rng Pali Rohár ` (2 more replies) 2 siblings, 3 replies; 33+ messages in thread From: Pali Rohár @ 2013-09-20 13:25 UTC (permalink / raw) To: Matt Mackall, Herbert Xu, Tony Lindgren, Russell King, Joe Perches, Aaro Koskinen Cc: linux-omap, linux-kernel, Pali Rohár This patch series adding support for OMAP3 ROM Random Number Generator on Nokia N900. In previous version I forgot to send patch which changing clk dev id to new driver name. Pali Rohár (3): omap2: Change clk dev id for rng to omap3-rom-rng hwrng: OMAP3 ROM Random Number Generator support RX-51: Add support for OMAP3 ROM Random Number Generator arch/arm/mach-omap2/board-rx51-peripherals.c | 19 ++++ arch/arm/mach-omap2/cclock3xxx_data.c | 2 +- arch/arm/mach-omap2/omap-secure.c | 11 ++ arch/arm/mach-omap2/omap-secure.h | 1 + drivers/char/hw_random/Kconfig | 13 +++ drivers/char/hw_random/Makefile | 1 + drivers/char/hw_random/omap3-rom-rng.c | 141 ++++++++++++++++++++++++++ 7 files changed, 187 insertions(+), 1 deletion(-) create mode 100644 drivers/char/hw_random/omap3-rom-rng.c -- 1.7.10.4 ^ permalink raw reply [flat|nested] 33+ messages in thread
* [PATCH v2 1/3] omap2: Change clk dev id for rng to omap3-rom-rng 2013-09-20 13:25 ` [PATCH v2 0/3] OMAP3 ROM Random Number Generator support Pali Rohár @ 2013-09-20 13:25 ` Pali Rohár 2013-09-20 16:23 ` Tony Lindgren 2013-09-20 13:25 ` [PATCH v2 2/3] hwrng: OMAP3 ROM Random Number Generator support Pali Rohár 2013-09-20 13:25 ` [PATCH v2 3/3] RX-51: Add support for OMAP3 ROM Random Number Generator Pali Rohár 2 siblings, 1 reply; 33+ messages in thread From: Pali Rohár @ 2013-09-20 13:25 UTC (permalink / raw) To: Matt Mackall, Herbert Xu, Tony Lindgren, Russell King, Joe Perches, Aaro Koskinen Cc: linux-omap, linux-kernel, Pali Rohár Name omap_rng is already used by omap_rng driver which is for omap2 and omap4. For omap3 HS devices there is new driver omap3-rom-rng which needs that clk. And because there cannot be two drivers with same name, rename omap3 clk dev id. Signed-off-by: Pali Rohár <pali.rohar@gmail.com> --- arch/arm/mach-omap2/cclock3xxx_data.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm/mach-omap2/cclock3xxx_data.c b/arch/arm/mach-omap2/cclock3xxx_data.c index 334b767..5059338 100644 --- a/arch/arm/mach-omap2/cclock3xxx_data.c +++ b/arch/arm/mach-omap2/cclock3xxx_data.c @@ -3274,7 +3274,7 @@ static struct omap_clk omap36xx_clks[] = { */ static struct omap_clk omap34xx_omap36xx_clks[] = { CLK(NULL, "aes1_ick", &aes1_ick), - CLK("omap_rng", "ick", &rng_ick), + CLK("omap3-rom-rng", "ick", &rng_ick), CLK(NULL, "sha11_ick", &sha11_ick), CLK(NULL, "des1_ick", &des1_ick), CLK(NULL, "cam_mclk", &cam_mclk), -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 33+ messages in thread
* Re: [PATCH v2 1/3] omap2: Change clk dev id for rng to omap3-rom-rng 2013-09-20 13:25 ` [PATCH v2 1/3] omap2: Change clk dev id for rng to omap3-rom-rng Pali Rohár @ 2013-09-20 16:23 ` Tony Lindgren 2013-09-20 16:41 ` Pali Rohár 0 siblings, 1 reply; 33+ messages in thread From: Tony Lindgren @ 2013-09-20 16:23 UTC (permalink / raw) To: Pali Rohár Cc: Matt Mackall, Herbert Xu, Russell King, Joe Perches, Aaro Koskinen, linux-omap, linux-kernel * Pali Rohár <pali.rohar@gmail.com> [130920 06:33]: > Name omap_rng is already used by omap_rng driver which is for omap2 and omap4. > For omap3 HS devices there is new driver omap3-rom-rng which needs that clk. > And because there cannot be two drivers with same name, rename omap3 clk dev id. > > Signed-off-by: Pali Rohár <pali.rohar@gmail.com> > --- > arch/arm/mach-omap2/cclock3xxx_data.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/arm/mach-omap2/cclock3xxx_data.c b/arch/arm/mach-omap2/cclock3xxx_data.c > index 334b767..5059338 100644 > --- a/arch/arm/mach-omap2/cclock3xxx_data.c > +++ b/arch/arm/mach-omap2/cclock3xxx_data.c > @@ -3274,7 +3274,7 @@ static struct omap_clk omap36xx_clks[] = { > */ > static struct omap_clk omap34xx_omap36xx_clks[] = { > CLK(NULL, "aes1_ick", &aes1_ick), > - CLK("omap_rng", "ick", &rng_ick), > + CLK("omap3-rom-rng", "ick", &rng_ick), > CLK(NULL, "sha11_ick", &sha11_ick), > CLK(NULL, "des1_ick", &des1_ick), > CLK(NULL, "cam_mclk", &cam_mclk), Hmm are you sure the omap_rng is not available on any of the omap3 GP versions? If so, the omap_rng alias should be kept as well. Regards, Tony ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [PATCH v2 1/3] omap2: Change clk dev id for rng to omap3-rom-rng 2013-09-20 16:23 ` Tony Lindgren @ 2013-09-20 16:41 ` Pali Rohár 2013-09-20 17:46 ` Tony Lindgren 0 siblings, 1 reply; 33+ messages in thread From: Pali Rohár @ 2013-09-20 16:41 UTC (permalink / raw) To: Tony Lindgren Cc: Matt Mackall, Herbert Xu, Russell King, Joe Perches, Aaro Koskinen, linux-omap, linux-kernel [-- Attachment #1: Type: Text/Plain, Size: 2079 bytes --] On Friday 20 September 2013 18:23:43 Tony Lindgren wrote: > * Pali Rohár <pali.rohar@gmail.com> [130920 06:33]: > > Name omap_rng is already used by omap_rng driver which is > > for omap2 and omap4. For omap3 HS devices there is new > > driver omap3-rom-rng which needs that clk. And because > > there cannot be two drivers with same name, rename omap3 > > clk dev id. > > > > Signed-off-by: Pali Rohár <pali.rohar@gmail.com> > > --- > > > > arch/arm/mach-omap2/cclock3xxx_data.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/arch/arm/mach-omap2/cclock3xxx_data.c > > b/arch/arm/mach-omap2/cclock3xxx_data.c index > > 334b767..5059338 100644 > > --- a/arch/arm/mach-omap2/cclock3xxx_data.c > > +++ b/arch/arm/mach-omap2/cclock3xxx_data.c > > @@ -3274,7 +3274,7 @@ static struct omap_clk omap36xx_clks[] > > = { > > > > */ > > > > static struct omap_clk omap34xx_omap36xx_clks[] = { > > > > CLK(NULL, "aes1_ick", &aes1_ick), > > > > - CLK("omap_rng", "ick", &rng_ick), > > + CLK("omap3-rom-rng", "ick", &rng_ick), > > > > CLK(NULL, "sha11_ick", &sha11_ick), > > CLK(NULL, "des1_ick", &des1_ick), > > CLK(NULL, "cam_mclk", &cam_mclk), > > Hmm are you sure the omap_rng is not available on > any of the omap3 GP versions? If so, the omap_rng > alias should be kept as well. > > Regards, > > Tony I really do not know, but driver char/hw_random/omap-rng.c support only omap2 and omap4 platforms. So "omap_rng" dev id for omap3 is not used. In email [1] you suggested to use clk_get instead clk_get_sys. If I understand correctly clk_get calling clk_get_sys with driver name. So dev in in CLK macro must be same as driver name. And because in cclock3xxx_data.c is dev id "omap_rng" and there is already driver with name "omap_rng", I need to rename dev in cclock3xxx_data.c to get new omap3-rom-rng driver working. Or if you know better way how to do it, let me know. [1] - https://lkml.org/lkml/2013/4/1/278 -- Pali Rohár pali.rohar@gmail.com [-- Attachment #2: This is a digitally signed message part. --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [PATCH v2 1/3] omap2: Change clk dev id for rng to omap3-rom-rng 2013-09-20 16:41 ` Pali Rohár @ 2013-09-20 17:46 ` Tony Lindgren 2013-09-20 18:24 ` Pali Rohár 0 siblings, 1 reply; 33+ messages in thread From: Tony Lindgren @ 2013-09-20 17:46 UTC (permalink / raw) To: Pali Rohár Cc: Matt Mackall, Herbert Xu, Russell King, Joe Perches, Aaro Koskinen, linux-omap, linux-kernel * Pali Rohár <pali.rohar@gmail.com> [130920 09:49]: > On Friday 20 September 2013 18:23:43 Tony Lindgren wrote: > > * Pali Rohár <pali.rohar@gmail.com> [130920 06:33]: > > > Name omap_rng is already used by omap_rng driver which is > > > for omap2 and omap4. For omap3 HS devices there is new > > > driver omap3-rom-rng which needs that clk. And because > > > there cannot be two drivers with same name, rename omap3 > > > clk dev id. > > > > > > Signed-off-by: Pali Rohár <pali.rohar@gmail.com> > > > --- > > > > > > arch/arm/mach-omap2/cclock3xxx_data.c | 2 +- > > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > > > diff --git a/arch/arm/mach-omap2/cclock3xxx_data.c > > > b/arch/arm/mach-omap2/cclock3xxx_data.c index > > > 334b767..5059338 100644 > > > --- a/arch/arm/mach-omap2/cclock3xxx_data.c > > > +++ b/arch/arm/mach-omap2/cclock3xxx_data.c > > > @@ -3274,7 +3274,7 @@ static struct omap_clk omap36xx_clks[] > > > = { > > > > > > */ > > > > > > static struct omap_clk omap34xx_omap36xx_clks[] = { > > > > > > CLK(NULL, "aes1_ick", &aes1_ick), > > > > > > - CLK("omap_rng", "ick", &rng_ick), > > > + CLK("omap3-rom-rng", "ick", &rng_ick), > > > > > > CLK(NULL, "sha11_ick", &sha11_ick), > > > CLK(NULL, "des1_ick", &des1_ick), > > > CLK(NULL, "cam_mclk", &cam_mclk), > > > > Hmm are you sure the omap_rng is not available on > > any of the omap3 GP versions? If so, the omap_rng > > alias should be kept as well. > > > > Regards, > > > > Tony > > I really do not know, but driver char/hw_random/omap-rng.c > support only omap2 and omap4 platforms. So "omap_rng" dev id for > omap3 is not used. > > In email [1] you suggested to use clk_get instead clk_get_sys. If > I understand correctly clk_get calling clk_get_sys with driver > name. So dev in in CLK macro must be same as driver name. And > because in cclock3xxx_data.c is dev id "omap_rng" and there is > already driver with name "omap_rng", I need to rename dev in > cclock3xxx_data.c to get new omap3-rom-rng driver working. > > Or if you know better way how to do it, let me know. I think it's safest to keep the existing alias also, and add a comment saying that it may not be available on omap3 processors. Regards, Tony > [1] - https://lkml.org/lkml/2013/4/1/278 > > -- > Pali Rohár > pali.rohar@gmail.com ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [PATCH v2 1/3] omap2: Change clk dev id for rng to omap3-rom-rng 2013-09-20 17:46 ` Tony Lindgren @ 2013-09-20 18:24 ` Pali Rohár 2013-09-20 18:31 ` Tony Lindgren 0 siblings, 1 reply; 33+ messages in thread From: Pali Rohár @ 2013-09-20 18:24 UTC (permalink / raw) To: Tony Lindgren Cc: Matt Mackall, Herbert Xu, Russell King, Joe Perches, Aaro Koskinen, linux-omap, linux-kernel [-- Attachment #1: Type: Text/Plain, Size: 3302 bytes --] On Friday 20 September 2013 19:46:41 Tony Lindgren wrote: > * Pali Rohár <pali.rohar@gmail.com> [130920 09:49]: > > On Friday 20 September 2013 18:23:43 Tony Lindgren wrote: > > > * Pali Rohár <pali.rohar@gmail.com> [130920 06:33]: > > > > Name omap_rng is already used by omap_rng driver which > > > > is for omap2 and omap4. For omap3 HS devices there is > > > > new driver omap3-rom-rng which needs that clk. And > > > > because there cannot be two drivers with same name, > > > > rename omap3 clk dev id. > > > > > > > > Signed-off-by: Pali Rohár <pali.rohar@gmail.com> > > > > --- > > > > > > > > arch/arm/mach-omap2/cclock3xxx_data.c | 2 +- > > > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > > > > > diff --git a/arch/arm/mach-omap2/cclock3xxx_data.c > > > > b/arch/arm/mach-omap2/cclock3xxx_data.c index > > > > 334b767..5059338 100644 > > > > --- a/arch/arm/mach-omap2/cclock3xxx_data.c > > > > +++ b/arch/arm/mach-omap2/cclock3xxx_data.c > > > > @@ -3274,7 +3274,7 @@ static struct omap_clk > > > > omap36xx_clks[] = { > > > > > > > > */ > > > > > > > > static struct omap_clk omap34xx_omap36xx_clks[] = { > > > > > > > > CLK(NULL, "aes1_ick", &aes1_ick), > > > > > > > > - CLK("omap_rng", "ick", &rng_ick), > > > > + CLK("omap3-rom-rng", "ick", &rng_ick), > > > > > > > > CLK(NULL, "sha11_ick", &sha11_ick), > > > > CLK(NULL, "des1_ick", &des1_ick), > > > > CLK(NULL, "cam_mclk", &cam_mclk), > > > > > > Hmm are you sure the omap_rng is not available on > > > any of the omap3 GP versions? If so, the omap_rng > > > alias should be kept as well. > > > > > > Regards, > > > > > > Tony > > > > I really do not know, but driver char/hw_random/omap-rng.c > > support only omap2 and omap4 platforms. So "omap_rng" dev id > > for omap3 is not used. > > > > In email [1] you suggested to use clk_get instead > > clk_get_sys. If I understand correctly clk_get calling > > clk_get_sys with driver name. So dev in in CLK macro must > > be same as driver name. And because in cclock3xxx_data.c is > > dev id "omap_rng" and there is already driver with name > > "omap_rng", I need to rename dev in cclock3xxx_data.c to > > get new omap3-rom-rng driver working. > > > > Or if you know better way how to do it, let me know. > > I think it's safest to keep the existing alias also, and > add a comment saying that it may not be available on omap3 > processors. > > Regards, > > Tony > > > [1] - https://lkml.org/lkml/2013/4/1/278 Ok, then there is new patch which only adding omap3-rom-rng and not removing omap_rng. It is OK to have same CLK data but with different names? diff --git a/arch/arm/mach-omap2/cclock3xxx_data.c b/arch/arm/mach-omap2/cclock3xxx_data.c index 334b767..03a2829 100644 --- a/arch/arm/mach-omap2/cclock3xxx_data.c +++ b/arch/arm/mach-omap2/cclock3xxx_data.c @@ -3275,6 +3275,7 @@ static struct omap_clk omap36xx_clks[] = { static struct omap_clk omap34xx_omap36xx_clks[] = { CLK(NULL, "aes1_ick", &aes1_ick), CLK("omap_rng", "ick", &rng_ick), + CLK("omap3-rom-rng", "ick", &rng_ick), CLK(NULL, "sha11_ick", &sha11_ick), CLK(NULL, "des1_ick", &des1_ick), CLK(NULL, "cam_mclk", &cam_mclk), -- Pali Rohár pali.rohar@gmail.com [-- Attachment #2: This is a digitally signed message part. --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply related [flat|nested] 33+ messages in thread
* Re: [PATCH v2 1/3] omap2: Change clk dev id for rng to omap3-rom-rng 2013-09-20 18:24 ` Pali Rohár @ 2013-09-20 18:31 ` Tony Lindgren 0 siblings, 0 replies; 33+ messages in thread From: Tony Lindgren @ 2013-09-20 18:31 UTC (permalink / raw) To: Pali Rohár Cc: Matt Mackall, Herbert Xu, Russell King, Joe Perches, Aaro Koskinen, linux-omap, linux-kernel * Pali Rohár <pali.rohar@gmail.com> [130920 11:32]: > On Friday 20 September 2013 19:46:41 Tony Lindgren wrote: > > Ok, then there is new patch which only adding omap3-rom-rng and not removing omap_rng. > It is OK to have same CLK data but with different names? Yes in this case it's always either omap_rng or omap3-rom-rng so the patch below looks OK to me. Regards, Tony > diff --git a/arch/arm/mach-omap2/cclock3xxx_data.c b/arch/arm/mach-omap2/cclock3xxx_data.c > index 334b767..03a2829 100644 > --- a/arch/arm/mach-omap2/cclock3xxx_data.c > +++ b/arch/arm/mach-omap2/cclock3xxx_data.c > @@ -3275,6 +3275,7 @@ static struct omap_clk omap36xx_clks[] = { > static struct omap_clk omap34xx_omap36xx_clks[] = { > CLK(NULL, "aes1_ick", &aes1_ick), > CLK("omap_rng", "ick", &rng_ick), > + CLK("omap3-rom-rng", "ick", &rng_ick), > CLK(NULL, "sha11_ick", &sha11_ick), > CLK(NULL, "des1_ick", &des1_ick), > CLK(NULL, "cam_mclk", &cam_mclk), > > > -- > Pali Rohár > pali.rohar@gmail.com ^ permalink raw reply [flat|nested] 33+ messages in thread
* [PATCH v2 2/3] hwrng: OMAP3 ROM Random Number Generator support 2013-09-20 13:25 ` [PATCH v2 0/3] OMAP3 ROM Random Number Generator support Pali Rohár 2013-09-20 13:25 ` [PATCH v2 1/3] omap2: Change clk dev id for rng to omap3-rom-rng Pali Rohár @ 2013-09-20 13:25 ` Pali Rohár 2013-10-08 19:04 ` Tony Lindgren 2013-09-20 13:25 ` [PATCH v2 3/3] RX-51: Add support for OMAP3 ROM Random Number Generator Pali Rohár 2 siblings, 1 reply; 33+ messages in thread From: Pali Rohár @ 2013-09-20 13:25 UTC (permalink / raw) To: Matt Mackall, Herbert Xu, Tony Lindgren, Russell King, Joe Perches, Aaro Koskinen Cc: linux-omap, linux-kernel, Pali Rohár, Juha Yrjola This driver provides kernel-side support for the Random Number Generator hardware found on OMAP34xx processors. This driver comes from Maemo 2.6.28 kernel and was tested on Nokia RX-51. It is platform device because it needs board specific function for smc calls. Signed-off-by: Pali Rohár <pali.rohar@gmail.com> Signed-off-by: Juha Yrjola <juha.yrjola@solidboot.com> --- drivers/char/hw_random/Kconfig | 13 +++ drivers/char/hw_random/Makefile | 1 + drivers/char/hw_random/omap3-rom-rng.c | 141 ++++++++++++++++++++++++++++++++ 3 files changed, 155 insertions(+) create mode 100644 drivers/char/hw_random/omap3-rom-rng.c diff --git a/drivers/char/hw_random/Kconfig b/drivers/char/hw_random/Kconfig index 0aa9d91..0a331c3 100644 --- a/drivers/char/hw_random/Kconfig +++ b/drivers/char/hw_random/Kconfig @@ -165,6 +165,19 @@ config HW_RANDOM_OMAP If unsure, say Y. +config HW_RANDOM_OMAP3_ROM + tristate "OMAP3 ROM Random Number Generator support" + depends on HW_RANDOM && ARCH_OMAP3 + default HW_RANDOM + ---help--- + This driver provides kernel-side support for the Random Number + Generator hardware found on OMAP34xx processors. + + To compile this driver as a module, choose M here: the + module will be called omap3-rom-rng. + + If unsure, say Y. + config HW_RANDOM_OCTEON tristate "Octeon Random Number Generator support" depends on HW_RANDOM && CAVIUM_OCTEON_SOC diff --git a/drivers/char/hw_random/Makefile b/drivers/char/hw_random/Makefile index bed467c..7c8aa80 100644 --- a/drivers/char/hw_random/Makefile +++ b/drivers/char/hw_random/Makefile @@ -15,6 +15,7 @@ n2-rng-y := n2-drv.o n2-asm.o obj-$(CONFIG_HW_RANDOM_VIA) += via-rng.o obj-$(CONFIG_HW_RANDOM_IXP4XX) += ixp4xx-rng.o obj-$(CONFIG_HW_RANDOM_OMAP) += omap-rng.o +obj-$(CONFIG_HW_RANDOM_OMAP3_ROM) += omap3-rom-rng.o obj-$(CONFIG_HW_RANDOM_PASEMI) += pasemi-rng.o obj-$(CONFIG_HW_RANDOM_VIRTIO) += virtio-rng.o obj-$(CONFIG_HW_RANDOM_TX4939) += tx4939-rng.o diff --git a/drivers/char/hw_random/omap3-rom-rng.c b/drivers/char/hw_random/omap3-rom-rng.c new file mode 100644 index 0000000..c853e9e --- /dev/null +++ b/drivers/char/hw_random/omap3-rom-rng.c @@ -0,0 +1,141 @@ +/* + * omap3-rom-rng.c - RNG driver for TI OMAP3 CPU family + * + * Copyright (C) 2009 Nokia Corporation + * Author: Juha Yrjola <juha.yrjola@solidboot.com> + * + * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com> + * + * This file is licensed under the terms of the GNU General Public + * License version 2. This program is licensed "as is" without any + * warranty of any kind, whether express or implied. + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include <linux/module.h> +#include <linux/init.h> +#include <linux/random.h> +#include <linux/hw_random.h> +#include <linux/timer.h> +#include <linux/clk.h> +#include <linux/err.h> +#include <linux/platform_device.h> + +#define RNG_RESET 0x01 +#define RNG_GEN_PRNG_HW_INIT 0x02 +#define RNG_GEN_HW 0x08 + +/* param1: ptr, param2: count, param3: flag */ +static u32 (*omap3_rom_rng_call)(u32, u32, u32); + +static struct timer_list idle_timer; +static int rng_idle; +static struct clk *rng_clk; + +static void omap3_rom_rng_idle(unsigned long data) +{ + int r; + + r = omap3_rom_rng_call(0, 0, RNG_RESET); + if (r != 0) { + pr_err("reset failed: %d\n", r); + return; + } + clk_disable_unprepare(rng_clk); + rng_idle = 1; +} + +static int omap3_rom_rng_get_random(void *buf, unsigned int count) +{ + u32 r; + u32 ptr; + + del_timer_sync(&idle_timer); + if (rng_idle) { + clk_prepare_enable(rng_clk); + r = omap3_rom_rng_call(0, 0, RNG_GEN_PRNG_HW_INIT); + if (r != 0) { + clk_disable_unprepare(rng_clk); + pr_err("HW init failed: %d\n", r); + return -EIO; + } + rng_idle = 0; + } + + ptr = virt_to_phys(buf); + r = omap3_rom_rng_call(ptr, count, RNG_GEN_HW); + mod_timer(&idle_timer, jiffies + msecs_to_jiffies(500)); + if (r != 0) + return -EINVAL; + return 0; +} + +static int omap3_rom_rng_data_present(struct hwrng *rng, int wait) +{ + return 1; +} + +static int omap3_rom_rng_data_read(struct hwrng *rng, u32 *data) +{ + int r; + + r = omap3_rom_rng_get_random(data, 4); + if (r < 0) + return r; + return 4; +} + +static struct hwrng omap3_rom_rng_ops = { + .name = "omap3-rom", + .data_present = omap3_rom_rng_data_present, + .data_read = omap3_rom_rng_data_read, +}; + +static int omap3_rom_rng_probe(struct platform_device *pdev) +{ + pr_info("initializing\n"); + + omap3_rom_rng_call = pdev->dev.platform_data; + if (!omap3_rom_rng_call) { + pr_err("omap3_rom_rng_call is NULL\n"); + return -EINVAL; + } + + setup_timer(&idle_timer, omap3_rom_rng_idle, 0); + rng_clk = clk_get(&pdev->dev, "ick"); + if (IS_ERR(rng_clk)) { + pr_err("unable to get RNG clock\n"); + return PTR_ERR(rng_clk); + } + + /* Leave the RNG in reset state. */ + clk_prepare_enable(rng_clk); + omap3_rom_rng_idle(0); + + return hwrng_register(&omap3_rom_rng_ops); +} + +static int omap3_rom_rng_remove(struct platform_device *pdev) +{ + hwrng_unregister(&omap3_rom_rng_ops); + clk_disable_unprepare(rng_clk); + clk_put(rng_clk); + return 0; +} + +static struct platform_driver omap3_rom_rng_driver = { + .driver = { + .name = "omap3-rom-rng", + .owner = THIS_MODULE, + }, + .probe = omap3_rom_rng_probe, + .remove = omap3_rom_rng_remove, +}; + +module_platform_driver(omap3_rom_rng_driver); + +MODULE_ALIAS("platform:omap3-rom-rng"); +MODULE_AUTHOR("Juha Yrjola"); +MODULE_AUTHOR("Pali Rohár <pali.rohar@gmail.com>"); +MODULE_LICENSE("GPL"); -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 33+ messages in thread
* Re: [PATCH v2 2/3] hwrng: OMAP3 ROM Random Number Generator support 2013-09-20 13:25 ` [PATCH v2 2/3] hwrng: OMAP3 ROM Random Number Generator support Pali Rohár @ 2013-10-08 19:04 ` Tony Lindgren 2013-10-16 12:57 ` Herbert Xu 0 siblings, 1 reply; 33+ messages in thread From: Tony Lindgren @ 2013-10-08 19:04 UTC (permalink / raw) To: Pali Rohár Cc: Matt Mackall, Herbert Xu, Russell King, Joe Perches, Aaro Koskinen, linux-omap, linux-kernel, Juha Yrjola * Pali Rohár <pali.rohar@gmail.com> [130920 06:33]: > This driver provides kernel-side support for the Random Number > Generator hardware found on OMAP34xx processors. > > This driver comes from Maemo 2.6.28 kernel and was tested on Nokia RX-51. > It is platform device because it needs board specific function for smc calls. This one is should be merged via the hw_random patches seprately: Acked-by: Tony Lindgren <tony@atomide.com> > Signed-off-by: Pali Rohár <pali.rohar@gmail.com> > Signed-off-by: Juha Yrjola <juha.yrjola@solidboot.com> > --- > drivers/char/hw_random/Kconfig | 13 +++ > drivers/char/hw_random/Makefile | 1 + > drivers/char/hw_random/omap3-rom-rng.c | 141 ++++++++++++++++++++++++++++++++ > 3 files changed, 155 insertions(+) > create mode 100644 drivers/char/hw_random/omap3-rom-rng.c > > diff --git a/drivers/char/hw_random/Kconfig b/drivers/char/hw_random/Kconfig > index 0aa9d91..0a331c3 100644 > --- a/drivers/char/hw_random/Kconfig > +++ b/drivers/char/hw_random/Kconfig > @@ -165,6 +165,19 @@ config HW_RANDOM_OMAP > > If unsure, say Y. > > +config HW_RANDOM_OMAP3_ROM > + tristate "OMAP3 ROM Random Number Generator support" > + depends on HW_RANDOM && ARCH_OMAP3 > + default HW_RANDOM > + ---help--- > + This driver provides kernel-side support for the Random Number > + Generator hardware found on OMAP34xx processors. > + > + To compile this driver as a module, choose M here: the > + module will be called omap3-rom-rng. > + > + If unsure, say Y. > + > config HW_RANDOM_OCTEON > tristate "Octeon Random Number Generator support" > depends on HW_RANDOM && CAVIUM_OCTEON_SOC > diff --git a/drivers/char/hw_random/Makefile b/drivers/char/hw_random/Makefile > index bed467c..7c8aa80 100644 > --- a/drivers/char/hw_random/Makefile > +++ b/drivers/char/hw_random/Makefile > @@ -15,6 +15,7 @@ n2-rng-y := n2-drv.o n2-asm.o > obj-$(CONFIG_HW_RANDOM_VIA) += via-rng.o > obj-$(CONFIG_HW_RANDOM_IXP4XX) += ixp4xx-rng.o > obj-$(CONFIG_HW_RANDOM_OMAP) += omap-rng.o > +obj-$(CONFIG_HW_RANDOM_OMAP3_ROM) += omap3-rom-rng.o > obj-$(CONFIG_HW_RANDOM_PASEMI) += pasemi-rng.o > obj-$(CONFIG_HW_RANDOM_VIRTIO) += virtio-rng.o > obj-$(CONFIG_HW_RANDOM_TX4939) += tx4939-rng.o > diff --git a/drivers/char/hw_random/omap3-rom-rng.c b/drivers/char/hw_random/omap3-rom-rng.c > new file mode 100644 > index 0000000..c853e9e > --- /dev/null > +++ b/drivers/char/hw_random/omap3-rom-rng.c > @@ -0,0 +1,141 @@ > +/* > + * omap3-rom-rng.c - RNG driver for TI OMAP3 CPU family > + * > + * Copyright (C) 2009 Nokia Corporation > + * Author: Juha Yrjola <juha.yrjola@solidboot.com> > + * > + * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com> > + * > + * This file is licensed under the terms of the GNU General Public > + * License version 2. This program is licensed "as is" without any > + * warranty of any kind, whether express or implied. > + */ > + > +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt > + > +#include <linux/module.h> > +#include <linux/init.h> > +#include <linux/random.h> > +#include <linux/hw_random.h> > +#include <linux/timer.h> > +#include <linux/clk.h> > +#include <linux/err.h> > +#include <linux/platform_device.h> > + > +#define RNG_RESET 0x01 > +#define RNG_GEN_PRNG_HW_INIT 0x02 > +#define RNG_GEN_HW 0x08 > + > +/* param1: ptr, param2: count, param3: flag */ > +static u32 (*omap3_rom_rng_call)(u32, u32, u32); > + > +static struct timer_list idle_timer; > +static int rng_idle; > +static struct clk *rng_clk; > + > +static void omap3_rom_rng_idle(unsigned long data) > +{ > + int r; > + > + r = omap3_rom_rng_call(0, 0, RNG_RESET); > + if (r != 0) { > + pr_err("reset failed: %d\n", r); > + return; > + } > + clk_disable_unprepare(rng_clk); > + rng_idle = 1; > +} > + > +static int omap3_rom_rng_get_random(void *buf, unsigned int count) > +{ > + u32 r; > + u32 ptr; > + > + del_timer_sync(&idle_timer); > + if (rng_idle) { > + clk_prepare_enable(rng_clk); > + r = omap3_rom_rng_call(0, 0, RNG_GEN_PRNG_HW_INIT); > + if (r != 0) { > + clk_disable_unprepare(rng_clk); > + pr_err("HW init failed: %d\n", r); > + return -EIO; > + } > + rng_idle = 0; > + } > + > + ptr = virt_to_phys(buf); > + r = omap3_rom_rng_call(ptr, count, RNG_GEN_HW); > + mod_timer(&idle_timer, jiffies + msecs_to_jiffies(500)); > + if (r != 0) > + return -EINVAL; > + return 0; > +} > + > +static int omap3_rom_rng_data_present(struct hwrng *rng, int wait) > +{ > + return 1; > +} > + > +static int omap3_rom_rng_data_read(struct hwrng *rng, u32 *data) > +{ > + int r; > + > + r = omap3_rom_rng_get_random(data, 4); > + if (r < 0) > + return r; > + return 4; > +} > + > +static struct hwrng omap3_rom_rng_ops = { > + .name = "omap3-rom", > + .data_present = omap3_rom_rng_data_present, > + .data_read = omap3_rom_rng_data_read, > +}; > + > +static int omap3_rom_rng_probe(struct platform_device *pdev) > +{ > + pr_info("initializing\n"); > + > + omap3_rom_rng_call = pdev->dev.platform_data; > + if (!omap3_rom_rng_call) { > + pr_err("omap3_rom_rng_call is NULL\n"); > + return -EINVAL; > + } > + > + setup_timer(&idle_timer, omap3_rom_rng_idle, 0); > + rng_clk = clk_get(&pdev->dev, "ick"); > + if (IS_ERR(rng_clk)) { > + pr_err("unable to get RNG clock\n"); > + return PTR_ERR(rng_clk); > + } > + > + /* Leave the RNG in reset state. */ > + clk_prepare_enable(rng_clk); > + omap3_rom_rng_idle(0); > + > + return hwrng_register(&omap3_rom_rng_ops); > +} > + > +static int omap3_rom_rng_remove(struct platform_device *pdev) > +{ > + hwrng_unregister(&omap3_rom_rng_ops); > + clk_disable_unprepare(rng_clk); > + clk_put(rng_clk); > + return 0; > +} > + > +static struct platform_driver omap3_rom_rng_driver = { > + .driver = { > + .name = "omap3-rom-rng", > + .owner = THIS_MODULE, > + }, > + .probe = omap3_rom_rng_probe, > + .remove = omap3_rom_rng_remove, > +}; > + > +module_platform_driver(omap3_rom_rng_driver); > + > +MODULE_ALIAS("platform:omap3-rom-rng"); > +MODULE_AUTHOR("Juha Yrjola"); > +MODULE_AUTHOR("Pali Rohár <pali.rohar@gmail.com>"); > +MODULE_LICENSE("GPL"); > -- > 1.7.10.4 > ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [PATCH v2 2/3] hwrng: OMAP3 ROM Random Number Generator support 2013-10-08 19:04 ` Tony Lindgren @ 2013-10-16 12:57 ` Herbert Xu 2013-11-18 21:51 ` Pali Rohár 0 siblings, 1 reply; 33+ messages in thread From: Herbert Xu @ 2013-10-16 12:57 UTC (permalink / raw) To: Tony Lindgren Cc: Pali Rohár, Matt Mackall, Russell King, Joe Perches, Aaro Koskinen, linux-omap, linux-kernel, Juha Yrjola On Tue, Oct 08, 2013 at 12:04:09PM -0700, Tony Lindgren wrote: > * Pali Rohár <pali.rohar@gmail.com> [130920 06:33]: > > This driver provides kernel-side support for the Random Number > > Generator hardware found on OMAP34xx processors. > > > > This driver comes from Maemo 2.6.28 kernel and was tested on Nokia RX-51. > > It is platform device because it needs board specific function for smc calls. > > This one is should be merged via the hw_random patches seprately: > > Acked-by: Tony Lindgren <tony@atomide.com> Patch applied. Thanks! -- Email: Herbert Xu <herbert@gondor.apana.org.au> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [PATCH v2 2/3] hwrng: OMAP3 ROM Random Number Generator support 2013-10-16 12:57 ` Herbert Xu @ 2013-11-18 21:51 ` Pali Rohár 2013-11-19 2:14 ` Herbert Xu 0 siblings, 1 reply; 33+ messages in thread From: Pali Rohár @ 2013-11-18 21:51 UTC (permalink / raw) To: Herbert Xu Cc: Tony Lindgren, Matt Mackall, Russell King, Joe Perches, Aaro Koskinen, linux-omap, linux-kernel On Wednesday 16 October 2013 14:57:34 Herbert Xu wrote: > On Tue, Oct 08, 2013 at 12:04:09PM -0700, Tony Lindgren wrote: > > * Pali Rohár <pali.rohar@gmail.com> [130920 06:33]: > > > This driver provides kernel-side support for the Random > > > Number Generator hardware found on OMAP34xx processors. > > > > > > This driver comes from Maemo 2.6.28 kernel and was tested > > > on Nokia RX-51. It is platform device because it needs > > > board specific function for smc calls. > > > > This one is should be merged via the hw_random patches > > seprately: > > > > Acked-by: Tony Lindgren <tony@atomide.com> > > Patch applied. Thanks! Hello, I still do not see this patch (2/3) in linus tree. But patch 1/3 and 3/3 are already merged. So is there any problem? -- Pali Rohár pali.rohar@gmail.com ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [PATCH v2 2/3] hwrng: OMAP3 ROM Random Number Generator support 2013-11-18 21:51 ` Pali Rohár @ 2013-11-19 2:14 ` Herbert Xu 2013-11-23 9:37 ` Pali Rohár 0 siblings, 1 reply; 33+ messages in thread From: Herbert Xu @ 2013-11-19 2:14 UTC (permalink / raw) To: Pali Rohár Cc: Tony Lindgren, Matt Mackall, Russell King, Joe Perches, Aaro Koskinen, linux-omap, linux-kernel On Mon, Nov 18, 2013 at 10:51:30PM +0100, Pali Rohár wrote: > On Wednesday 16 October 2013 14:57:34 Herbert Xu wrote: > > On Tue, Oct 08, 2013 at 12:04:09PM -0700, Tony Lindgren wrote: > > > * Pali Rohár <pali.rohar@gmail.com> [130920 06:33]: > > > > This driver provides kernel-side support for the Random > > > > Number Generator hardware found on OMAP34xx processors. > > > > > > > > This driver comes from Maemo 2.6.28 kernel and was tested > > > > on Nokia RX-51. It is platform device because it needs > > > > board specific function for smc calls. > > > > > > This one is should be merged via the hw_random patches > > > seprately: > > > > > > Acked-by: Tony Lindgren <tony@atomide.com> > > > > Patch applied. Thanks! > > Hello, I still do not see this patch (2/3) in linus tree. But > patch 1/3 and 3/3 are already merged. So is there any problem? 2/3 is still in my tree so when Linus pulls it it'll be there. Cheers, -- Email: Herbert Xu <herbert@gondor.apana.org.au> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [PATCH v2 2/3] hwrng: OMAP3 ROM Random Number Generator support 2013-11-19 2:14 ` Herbert Xu @ 2013-11-23 9:37 ` Pali Rohár 2013-11-23 12:09 ` Sebastian Reichel 0 siblings, 1 reply; 33+ messages in thread From: Pali Rohár @ 2013-11-23 9:37 UTC (permalink / raw) To: Herbert Xu Cc: Tony Lindgren, Matt Mackall, Russell King, Joe Perches, Aaro Koskinen, linux-omap, linux-kernel [-- Attachment #1: Type: Text/Plain, Size: 1272 bytes --] On Tuesday 19 November 2013 03:14:09 Herbert Xu wrote: > On Mon, Nov 18, 2013 at 10:51:30PM +0100, Pali Rohár wrote: > > On Wednesday 16 October 2013 14:57:34 Herbert Xu wrote: > > > On Tue, Oct 08, 2013 at 12:04:09PM -0700, Tony Lindgren wrote: > > > > * Pali Rohár <pali.rohar@gmail.com> [130920 06:33]: > > > > > This driver provides kernel-side support for the > > > > > Random Number Generator hardware found on OMAP34xx > > > > > processors. > > > > > > > > > > This driver comes from Maemo 2.6.28 kernel and was > > > > > tested on Nokia RX-51. It is platform device because > > > > > it needs board specific function for smc calls. > > > > > > > > This one is should be merged via the hw_random patches > > > > seprately: > > > > > > > > Acked-by: Tony Lindgren <tony@atomide.com> > > > > > > Patch applied. Thanks! > > > > Hello, I still do not see this patch (2/3) in linus tree. > > But patch 1/3 and 3/3 are already merged. So is there any > > problem? > > 2/3 is still in my tree so when Linus pulls it it'll be there. > > Cheers, Now 3.13-rc1 is out [1], but your tree was not merged. Can you try to ping Linus what happened? [1] - https://lkml.org/lkml/2013/11/22/439 -- Pali Rohár pali.rohar@gmail.com [-- Attachment #2: This is a digitally signed message part. --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [PATCH v2 2/3] hwrng: OMAP3 ROM Random Number Generator support 2013-11-23 9:37 ` Pali Rohár @ 2013-11-23 12:09 ` Sebastian Reichel 0 siblings, 0 replies; 33+ messages in thread From: Sebastian Reichel @ 2013-11-23 12:09 UTC (permalink / raw) To: Pali Rohár Cc: Herbert Xu, Tony Lindgren, Matt Mackall, Russell King, Joe Perches, Aaro Koskinen, linux-omap, linux-kernel [-- Attachment #1: Type: text/plain, Size: 244 bytes --] On Sat, Nov 23, 2013 at 10:37:13AM +0100, Pali Rohár wrote: > Now 3.13-rc1 is out, but your tree was not merged. Can you > try to ping Linus what happened? See here: http://www.spinics.net/lists/arm-kernel/msg288508.html -- Sebastian [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 33+ messages in thread
* [PATCH v2 3/3] RX-51: Add support for OMAP3 ROM Random Number Generator 2013-09-20 13:25 ` [PATCH v2 0/3] OMAP3 ROM Random Number Generator support Pali Rohár 2013-09-20 13:25 ` [PATCH v2 1/3] omap2: Change clk dev id for rng to omap3-rom-rng Pali Rohár 2013-09-20 13:25 ` [PATCH v2 2/3] hwrng: OMAP3 ROM Random Number Generator support Pali Rohár @ 2013-09-20 13:25 ` Pali Rohár 2013-10-08 19:06 ` Tony Lindgren 2 siblings, 1 reply; 33+ messages in thread From: Pali Rohár @ 2013-09-20 13:25 UTC (permalink / raw) To: Matt Mackall, Herbert Xu, Tony Lindgren, Russell King, Joe Perches, Aaro Koskinen Cc: linux-omap, linux-kernel, Pali Rohár Adding this driver as platform device and only for RX-51 until somebody test if it working also on other OMAP3 HS devices and until there will be generic ARM way to deal with SMC calls. Signed-off-by: Pali Rohár <pali.rohar@gmail.com> --- arch/arm/mach-omap2/board-rx51-peripherals.c | 19 +++++++++++++++++++ arch/arm/mach-omap2/omap-secure.c | 11 +++++++++++ arch/arm/mach-omap2/omap-secure.h | 1 + 3 files changed, 31 insertions(+) diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c index c3270c0..497d260 100644 --- a/arch/arm/mach-omap2/board-rx51-peripherals.c +++ b/arch/arm/mach-omap2/board-rx51-peripherals.c @@ -57,6 +57,8 @@ #include "common-board-devices.h" #include "gpmc.h" #include "gpmc-onenand.h" +#include "soc.h" +#include "omap-secure.h" #define SYSTEM_REV_B_USES_VAUX3 0x1699 #define SYSTEM_REV_S_USES_VAUX3 0x8 @@ -1289,6 +1291,22 @@ static void __init rx51_init_twl4030_hwmon(void) platform_device_register(&madc_hwmon); } +static struct platform_device omap3_rom_rng_device = { + .name = "omap3-rom-rng", + .id = -1, + .dev = { + .platform_data = rx51_secure_rng_call, + }, +}; + +static void __init rx51_init_omap3_rom_rng(void) +{ + if (omap_type() == OMAP2_DEVICE_TYPE_SEC) { + pr_info("RX-51: Registring OMAP3 HWRNG device\n"); + platform_device_register(&omap3_rom_rng_device); + } +} + void __init rx51_peripherals_init(void) { rx51_i2c_init(); @@ -1309,5 +1327,6 @@ void __init rx51_peripherals_init(void) rx51_charger_init(); rx51_init_twl4030_hwmon(); + rx51_init_omap3_rom_rng(); } diff --git a/arch/arm/mach-omap2/omap-secure.c b/arch/arm/mach-omap2/omap-secure.c index 146a7c4..5ac122e 100644 --- a/arch/arm/mach-omap2/omap-secure.c +++ b/arch/arm/mach-omap2/omap-secure.c @@ -135,3 +135,14 @@ u32 rx51_secure_update_aux_cr(u32 set_bits, u32 clear_bits) FLAG_START_CRITICAL, 1, acr, 0, 0, 0); } + +/** + * rx51_secure_rng_call: Routine for HW random generator + */ +u32 rx51_secure_rng_call(u32 ptr, u32 count, u32 flag) +{ + return rx51_secure_dispatcher(RX51_PPA_HWRNG, + 0, + NO_FLAG, + 3, ptr, count, flag, 0); +} diff --git a/arch/arm/mach-omap2/omap-secure.h b/arch/arm/mach-omap2/omap-secure.h index 51b59c6..f6cabb0 100644 --- a/arch/arm/mach-omap2/omap-secure.h +++ b/arch/arm/mach-omap2/omap-secure.h @@ -65,6 +65,7 @@ extern int omap_secure_ram_reserve_memblock(void); extern u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs, u32 arg1, u32 arg2, u32 arg3, u32 arg4); extern u32 rx51_secure_update_aux_cr(u32 set_bits, u32 clear_bits); +extern u32 rx51_secure_rng_call(u32 ptr, u32 count, u32 flag); #ifdef CONFIG_OMAP4_ERRATA_I688 extern int omap_barrier_reserve_memblock(void); -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 33+ messages in thread
* Re: [PATCH v2 3/3] RX-51: Add support for OMAP3 ROM Random Number Generator 2013-09-20 13:25 ` [PATCH v2 3/3] RX-51: Add support for OMAP3 ROM Random Number Generator Pali Rohár @ 2013-10-08 19:06 ` Tony Lindgren 0 siblings, 0 replies; 33+ messages in thread From: Tony Lindgren @ 2013-10-08 19:06 UTC (permalink / raw) To: Pali Rohár Cc: Matt Mackall, Herbert Xu, Russell King, Joe Perches, Aaro Koskinen, linux-omap, linux-kernel * Pali Rohár <pali.rohar@gmail.com> [130920 06:33]: > Adding this driver as platform device and only for RX-51 until somebody test if > it working also on other OMAP3 HS devices and until there will be generic ARM > way to deal with SMC calls. Thanks I'll apply this with the patch #1 clock alias folded in into omap-for-v3.13/n900 branch. Regards, Tony ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [PATCH] OMAP3 ROM Random Number Generator support 2013-03-27 21:09 ` Tony Lindgren 2013-03-27 22:03 ` Pali Rohár @ 2013-03-28 9:52 ` Russell King - ARM Linux 2013-03-28 17:24 ` Pali Rohár 1 sibling, 1 reply; 33+ messages in thread From: Russell King - ARM Linux @ 2013-03-28 9:52 UTC (permalink / raw) To: Tony Lindgren Cc: Pali Rohár, Juha Yrjola, Matt Mackall, Herbert Xu, linux-omap, linux-kernel On Wed, Mar 27, 2013 at 02:09:18PM -0700, Tony Lindgren wrote: > > + setup_timer(&idle_timer, omap3_rom_idle_rng, 0); > > + rng_clk = clk_get_sys("omap_rng", "ick"); Why is this using clk_get_sys when it should be using clk_get() with the platform device? ^ permalink raw reply [flat|nested] 33+ messages in thread
* Re: [PATCH] OMAP3 ROM Random Number Generator support 2013-03-28 9:52 ` [PATCH] OMAP3 ROM Random Number Generator support Russell King - ARM Linux @ 2013-03-28 17:24 ` Pali Rohár 0 siblings, 0 replies; 33+ messages in thread From: Pali Rohár @ 2013-03-28 17:24 UTC (permalink / raw) To: Russell King - ARM Linux Cc: Tony Lindgren, Juha Yrjola, Matt Mackall, Herbert Xu, linux-omap, linux-kernel [-- Attachment #1: Type: Text/Plain, Size: 544 bytes --] On Thursday 28 March 2013 10:52:28 Russell King - ARM Linux wrote: > On Wed, Mar 27, 2013 at 02:09:18PM -0700, Tony Lindgren wrote: > > > + setup_timer(&idle_timer, omap3_rom_idle_rng, 0); > > > + rng_clk = clk_get_sys("omap_rng", "ick"); > > Why is this using clk_get_sys when it should be using > clk_get() with the platform device? Funcion clk_get() needs struct device* instead clk device name. And I do not know how to get that pointer to device. With clk_get_sys driver working. -- Pali Rohár pali.rohar@gmail.com [-- Attachment #2: This is a digitally signed message part. --] [-- Type: application/pgp-signature, Size: 198 bytes --] ^ permalink raw reply [flat|nested] 33+ messages in thread
end of thread, other threads:[~2013-11-23 12:10 UTC | newest] Thread overview: 33+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-02-28 18:05 [PATCH] OMAP3 ROM Random Number Generator support Pali Rohár 2013-03-24 14:15 ` Pali Rohár 2013-03-27 21:09 ` Tony Lindgren 2013-03-27 22:03 ` Pali Rohár 2013-03-27 22:25 ` Tony Lindgren 2013-03-28 17:54 ` Pali Rohár 2013-03-28 21:44 ` Tony Lindgren 2013-03-31 9:28 ` Pali Rohár 2013-04-01 16:25 ` Tony Lindgren 2013-09-18 20:05 ` [PATCH 0/2] " Pali Rohár 2013-09-18 20:05 ` [PATCH 1/2] hwrng: " Pali Rohár 2013-09-18 20:22 ` Joe Perches 2013-09-18 20:50 ` Aaro Koskinen 2013-09-18 20:05 ` [PATCH 2/2] RX-51: Add support for OMAP3 ROM Random Number Generator Pali Rohár 2013-09-18 20:39 ` Tony Lindgren 2013-09-20 13:25 ` [PATCH v2 0/3] OMAP3 ROM Random Number Generator support Pali Rohár 2013-09-20 13:25 ` [PATCH v2 1/3] omap2: Change clk dev id for rng to omap3-rom-rng Pali Rohár 2013-09-20 16:23 ` Tony Lindgren 2013-09-20 16:41 ` Pali Rohár 2013-09-20 17:46 ` Tony Lindgren 2013-09-20 18:24 ` Pali Rohár 2013-09-20 18:31 ` Tony Lindgren 2013-09-20 13:25 ` [PATCH v2 2/3] hwrng: OMAP3 ROM Random Number Generator support Pali Rohár 2013-10-08 19:04 ` Tony Lindgren 2013-10-16 12:57 ` Herbert Xu 2013-11-18 21:51 ` Pali Rohár 2013-11-19 2:14 ` Herbert Xu 2013-11-23 9:37 ` Pali Rohár 2013-11-23 12:09 ` Sebastian Reichel 2013-09-20 13:25 ` [PATCH v2 3/3] RX-51: Add support for OMAP3 ROM Random Number Generator Pali Rohár 2013-10-08 19:06 ` Tony Lindgren 2013-03-28 9:52 ` [PATCH] OMAP3 ROM Random Number Generator support Russell King - ARM Linux 2013-03-28 17:24 ` Pali Rohár
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).