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

Reply via email to