mirror of
https://github.com/firewalkwithm3/Sensor-Watch.git
synced 2024-11-22 19:20:30 +08:00
annotate TRNG erratum, address review comment
This commit is contained in:
parent
de692e05e2
commit
83a0e4e992
|
@ -357,7 +357,7 @@ static uint32_t _get_true_entropy(void) {
|
||||||
|
|
||||||
while (!hri_trng_get_INTFLAG_reg(TRNG, TRNG_INTFLAG_DATARDY)); // Wait for TRNG data to be ready
|
while (!hri_trng_get_INTFLAG_reg(TRNG, TRNG_INTFLAG_DATARDY)); // Wait for TRNG data to be ready
|
||||||
|
|
||||||
watch_disable_TRNG(TRNG);
|
watch_disable_TRNG();
|
||||||
hri_mclk_clear_APBCMASK_TRNG_bit(MCLK);
|
hri_mclk_clear_APBCMASK_TRNG_bit(MCLK);
|
||||||
return hri_trng_read_DATA_reg(TRNG); // Read a single 32-bit word from TRNG and return it
|
return hri_trng_read_DATA_reg(TRNG); // Read a single 32-bit word from TRNG and return it
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -255,7 +255,7 @@ uint32_t get_true_entropy(void) {
|
||||||
|
|
||||||
while (!hri_trng_get_INTFLAG_reg(TRNG, TRNG_INTFLAG_DATARDY)); // Wait for TRNG data to be ready
|
while (!hri_trng_get_INTFLAG_reg(TRNG, TRNG_INTFLAG_DATARDY)); // Wait for TRNG data to be ready
|
||||||
|
|
||||||
watch_disable_TRNG(TRNG);
|
watch_disable_TRNG();
|
||||||
|
|
||||||
hri_mclk_clear_APBCMASK_TRNG_bit(MCLK);
|
hri_mclk_clear_APBCMASK_TRNG_bit(MCLK);
|
||||||
return hri_trng_read_DATA_reg(TRNG); // Read a single 32-bit word from TRNG and return it
|
return hri_trng_read_DATA_reg(TRNG); // Read a single 32-bit word from TRNG and return it
|
||||||
|
|
|
@ -110,18 +110,18 @@ int getentropy(void *buf, size_t buflen) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
watch_disable_TRNG(TRNG);
|
watch_disable_TRNG();
|
||||||
hri_mclk_clear_APBCMASK_TRNG_bit(MCLK);
|
hri_mclk_clear_APBCMASK_TRNG_bit(MCLK);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void watch_disable_TRNG(Trng *hw) {
|
void watch_disable_TRNG() {
|
||||||
hri_trng_clear_CTRLA_ENABLE_bit(hw);
|
// per Microchip datasheet clarification DS80000782,
|
||||||
// silicon erratum: the TRNG may leave internal components powered after disable.
|
// silicon erratum 1.16.1 indicates that the TRNG may leave internal components powered after being disabled.
|
||||||
// the workaround is to clear the register twice.
|
// the workaround is to disable the TRNG by clearing the control register, twice.
|
||||||
hri_trng_write_CTRLA_reg(hw, 0);
|
hri_trng_write_CTRLA_reg(TRNG, 0);
|
||||||
hri_trng_write_CTRLA_reg(hw, 0);
|
hri_trng_write_CTRLA_reg(TRNG, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -96,12 +96,8 @@ void watch_reset_to_bootloader(void);
|
||||||
*/
|
*/
|
||||||
int read(int file, char *ptr, int len);
|
int read(int file, char *ptr, int len);
|
||||||
|
|
||||||
#ifdef __EMSCRIPTEN__
|
/** @brief Disables the TRNG twice in order to work around silicon erratum 1.16.1.
|
||||||
typedef void* Trng;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @brief Disables the TRNG, working around a silicon erratum.
|
|
||||||
*/
|
*/
|
||||||
void watch_disable_TRNG(Trng* hw);
|
void watch_disable_TRNG();
|
||||||
|
|
||||||
#endif /* WATCH_H_ */
|
#endif /* WATCH_H_ */
|
||||||
|
|
|
@ -57,7 +57,7 @@ void _watch_disable_tcc(void) {}
|
||||||
|
|
||||||
void _watch_enable_usb(void) {}
|
void _watch_enable_usb(void) {}
|
||||||
|
|
||||||
void watch_disable_TRNG(Trng* hw) {}
|
void watch_disable_TRNG() {}
|
||||||
|
|
||||||
// this function ends up getting called by printf to log stuff to the USB console.
|
// this function ends up getting called by printf to log stuff to the USB console.
|
||||||
int _write(int file, char *ptr, int len) {
|
int _write(int file, char *ptr, int len) {
|
||||||
|
|
Loading…
Reference in a new issue