On Mar 13, 2018 1:31 AM, "Sebastian Huber" < sebastian.hu...@embedded-brains.de> wrote:
On 12/03/18 20:02, Udit agarwal wrote: > So, It looks like here's the final patch, do let me know if its ready to > be pushed. Also, it would be really helpful if someone else also tests this > patch before pushing(Although i have done that once). > > Thanks, > Udit agarwal > > > From 454a8ff3e0ea3393818859874705a54b098c6081 Mon Sep 17 00:00:00 2001 > From: Udit agarwal <dev.mada...@gmail.com <mailto:dev.mada...@gmail.com>> > > Date: Tue, 13 Mar 2018 00:20:28 +0530 > Subject: [PATCH] Added Getentropy() support to beagle BSP > > --- > bsps/arm/include/libcpu/am335x.h | 37 ++++++- > c/src/lib/libbsp/arm/beagle/Makefile.am | 4 +- > .../libbsp/arm/beagle/getentropy/bbb_getentropy.c | 116 > +++++++++++++++++++++ > 3 files changed, 155 insertions(+), 2 deletions(-) > create mode 100644 c/src/lib/libbsp/arm/beagle/ge > tentropy/bbb_getentropy.c > > diff --git a/bsps/arm/include/libcpu/am335x.h > b/bsps/arm/include/libcpu/am335x.h > index 367e97c..cedd637 100644 > --- a/bsps/arm/include/libcpu/am335x.h > +++ b/bsps/arm/include/libcpu/am335x.h > @@ -14,11 +14,17 @@ > * Modified by Ben Gras <b...@shrike-systems.com <mailto: > b...@shrike-systems.com>> to add lots > > * of beagleboard/beaglebone definitions, delete lpc32xx specific > * ones, and merge with some other header files. > + * > + * Modified by Udit agarwal <dev.mada...@gmail.com <mailto: > dev.mada...@gmail.com>> to add random > > + * number generating module definitions and TRNG register structure. > */ > > #if !defined(_AM335X_H_) > #define _AM335X_H_ > > +/* For TRNG register definition */ > +#include <stdint.h> > + > /* Interrupt controller memory map */ > #define OMAP3_DM37XX_INTR_BASE 0x48200000 /* INTCPS physical address */ > > @@ -701,4 +707,33 @@ > #define AM335X_CM_PER_OCPWP_L3_CLKSTCTRL_CLKACTIVITY_OCPWP_L4_GCLK > (0x00000020u) > #define AM335X_I2C_INT_STOP_CONDITION AM335X_I2C_IRQSTATUS_BF > > -#endif > +/* TRNG Register */ > + > +/* RNG base address */ > +#define RNG_BASE 0x48310000 > +/* RNG clock control */ > +#define CM_PER_RNG_CLKCTRL (AM335X_CM_PER_ADDR | (9 << 4)) > +/* rng module clock status bits */ > +#define AM335X_CLK_RNG_BIT_MASK (0x30000) > +/* Offset from RNG base for output ready flag */ > +#define RNG_STATUS_RDY (1u << 0) > +/* Offset from RNG base for FRO related error */ > +#define RNG_STATUS_ERR (1u << 1) > +/* Offset from RNG base for clock status */ > +#define RNG_STATUS_CLK (1u << 31) > +/* enable module */ > +#define AM335X_RNG_ENABLE (1 << 10) > + > +/* TRNG register structure */ > +struct bbb_trng_register > +{ > + uint64_t output; /* 00 */ > + uint32_t status; /* 08 */ > + uint32_t irq_en; /* 0c */ > + uint32_t status_clr; /* 10 */ > + uint32_t control; /* 14 */ > + uint32_t config; /* 18 */ > +}; > +typedef struct bbb_trng_register bbb_trng_register; > The bbb (Beagle Bone Black) is a particular board and the AM335X is a SoC family. This should be something like this typedef struct { ... } am335x_trng; + > +#endif > \ No newline at end of file > Git thinks that files should have a newline at the end of the file. diff --git a/c/src/lib/libbsp/arm/beagle/Makefile.am > b/c/src/lib/libbsp/arm/beagle/Makefile.am > index 8251660..5d5ade3 100644 > --- a/c/src/lib/libbsp/arm/beagle/Makefile.am > +++ b/c/src/lib/libbsp/arm/beagle/Makefile.am > @@ -40,7 +40,6 @@ libbsp_a_LIBADD = > > # Shared > libbsp_a_SOURCES += ../../shared/bootcard.c > -libbsp_a_SOURCES += ../../shared/getentropy-cpucounter.c > libbsp_a_SOURCES += ../../shared/src/bsp-fdt.c > libbsp_a_SOURCES += ../../shared/bspclean.c > libbsp_a_SOURCES += ../../shared/bspgetworkarea.c > @@ -88,6 +87,9 @@ libbsp_a_SOURCES += gpio/bbb-gpio.c > #pwm > libbsp_a_SOURCES += pwm/pwm.c > > +#getentropy > +libbsp_a_SOURCES += getentropy/bbb_getentropy.c > + > With the new BSP source structure https://devel.rtems.org/ticket/3285 this new file could be also placed at bsps/arm/beagle/dev/getentropy.c Is this specific to the Beagle or the SoC? Or a combination? Earlier you said the structure was SoC specific? [...] > > +int getentropy(void *ptr, size_t n) > +{ > + volatile bbb_trng_register *rng = (bbb_trng_register*) RNG_BASE; > + am335x_rng_enable(rng); > + while (n > 0) > + { > + uint64_t random; > + size_t copy; > + > + /* wait untill RNG becomes ready with next set of random data */ > + while( ( rng->status & RNG_STATUS_RDY ) == 0 ) > + { > + /* wait */ > + } > What happens if you call this function in parallel on different processors? + > + random = trng_getranddata(rng); > + > + /* Checking for error by masking all bits other then error bit in > + status register */ > + if( ((rng->status & RNG_STATUS_ERR)>>1) == 1) > + { > + /* clear the status flag after reading to generate new random > + value */ > + rng->status_clr = RNG_STATUS_RDY; > + copy = sizeof(random); > + if ( n < copy ) > + { > + copy = n; > + } > + memcpy(ptr, &random, copy); > + n -= copy; > + ptr = (char*)ptr + copy; > + } > + } > + > + return 0; > +} > + > +RTEMS_SYSINIT_ITEM( > + am335x_rng_clock_enable, > + RTEMS_SYSINIT_DEVICE_DRIVERS, > + RTEMS_SYSINIT_ORDER_LAST > +); > \ No newline at end of file > -- > 1.9.1 > > > > > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel > -- Sebastian Huber, embedded brains GmbH Address : Dornierstr. 4, D-82178 Puchheim, Germany Phone : +49 89 189 47 41-16 Fax : +49 89 189 47 41-09 E-Mail : sebastian.hu...@embedded-brains.de PGP : Public key available on request. Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG. _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel