Ups. Hit reply instead of reply all. This should go to the mailing list. --- Ursprüngliche Nachricht --- > > Am Mittwoch, 14. März 2018 schrieb Udit agarwal: > > Hi, > > @Joel This seems to be SoC specific. > > > > > > So, here is the implementation with mutex, Do let me know if this is okay. > > I'll then do it for atsam also. > > Atsam should be an extra patch. > > > > > int getentropy(void *ptr, size_t n) > > { > > volatile am335x_trng_register *rng = (am335x_trng_register*) RNG_BASE; > > rtems_mutex lock_trng_reg = RTEMS_MUTEX_INITIALIZER("lock_trng_reg"); > > If you create a local variable every thread will have it's own mutex. So they > still can access the critical section in parallel. Use a global one in this > case. > > > > > while (n > 0) > > { > > uint64_t random; > > size_t copy; > > > > /* for mutual exclusion synchronization between multiple > > access to TRNG register in different contexts */ > > rtems_mutex_lock(&lock_trng_reg); > > > > /* wait untill RNG becomes ready with next set of random data */ > > while( ( rng->status & RNG_STATUS_RDY ) == 0 ) > > { > > /* wait */ > > } > > > > random = trng_getranddata(rng); > > /* clear the status flag after reading to generate new random > > value */ > > rng->status_clr = RNG_STATUS_RDY; > > rtems_mutex_unlock(&lock_trng_reg); > > > > /* checking for error by masking all bits other then error bit in > > status register */ > > if( ((rng->status & RNG_STATUS_ERR)>>1) == 1) > > { > > copy = sizeof(random); > > if ( n < copy ) > > { > > copy = n; > > } > > memcpy(ptr, &random, copy); > > n -= copy; > > ptr = (char*)ptr + copy; > > } > > Just noted that one: What Value is returned in the error case? Can the error > even happen? I think that there is a special function that should be called > in that case. > > > } > > > > rtems_mutex_destroy(&lock_trng_reg); > > return 0; > > } > > > > > > > > > > On Wed, Mar 14, 2018 at 2:15 AM, Joel Sherrill <j...@rtems.org> wrote: > > > > > > > > > > > > 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/getentropy/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 > > > > > > > > > > -- > -------------------------------------------- > embedded brains GmbH > Christian Mauderer > Dornierstr. 4 > D-82178 Puchheim > Germany > email: christian.maude...@embedded-brains.de > Phone: +49-89-18 94 741 - 18 > Fax: +49-89-18 94 741 - 08 > PGP: Public key available on request. > > Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG
-- -------------------------------------------- embedded brains GmbH Christian Mauderer Dornierstr. 4 D-82178 Puchheim Germany email: christian.maude...@embedded-brains.de Phone: +49-89-18 94 741 - 18 Fax: +49-89-18 94 741 - 08 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