mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			STM32: RNG: Ensure that no more than 1 instance is used
There is only 1 RNG HW IP and we do not support more than one driver user at a time, so let's ensure this is the case and raise an error if needed.pull/5179/head
							parent
							
								
									14343c49c4
								
							
						
					
					
						commit
						849749f86f
					
				| 
						 | 
					@ -23,11 +23,20 @@
 | 
				
			||||||
#include <stdlib.h>
 | 
					#include <stdlib.h>
 | 
				
			||||||
#include "cmsis.h"
 | 
					#include "cmsis.h"
 | 
				
			||||||
#include "trng_api.h"
 | 
					#include "trng_api.h"
 | 
				
			||||||
 | 
					#include "mbed_error.h"
 | 
				
			||||||
 | 
					#include "mbed_critical.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static uint8_t users = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void trng_init(trng_t *obj)
 | 
					void trng_init(trng_t *obj)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    uint32_t dummy;
 | 
					    uint32_t dummy;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*  We're only supporting a single user of RNG */
 | 
				
			||||||
 | 
					    if (core_util_atomic_incr_u8(&users, 1) > 1 ) {
 | 
				
			||||||
 | 
					        error("Only 1 RNG instance supported\r\n");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(TARGET_STM32L4)
 | 
					#if defined(TARGET_STM32L4)
 | 
				
			||||||
    RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;
 | 
					    RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -57,6 +66,8 @@ void trng_free(trng_t *obj)
 | 
				
			||||||
    HAL_RNG_DeInit(&obj->handle);
 | 
					    HAL_RNG_DeInit(&obj->handle);
 | 
				
			||||||
    /* RNG Peripheral clock disable - assume we're the only users of RNG  */
 | 
					    /* RNG Peripheral clock disable - assume we're the only users of RNG  */
 | 
				
			||||||
    __HAL_RCC_RNG_CLK_DISABLE();
 | 
					    __HAL_RCC_RNG_CLK_DISABLE();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    users = 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int trng_get_bytes(trng_t *obj, uint8_t *output, size_t length, size_t *output_length)
 | 
					int trng_get_bytes(trng_t *obj, uint8_t *output, size_t length, size_t *output_length)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue