summaryrefslogtreecommitdiffstats
path: root/watch-library
diff options
context:
space:
mode:
authorAlex Maestas <git@se30.xyz>2024-01-22 00:30:25 +0000
committerAlex Maestas <git@se30.xyz>2024-01-22 00:39:18 +0000
commit83a0e4e992388e6aaba9390cc1212649ae44d239 (patch)
tree6a1fb4ed17700ba859cb5f148cff92e3517c1b4a /watch-library
parentde692e05e243c88cb1bd1c0fabcb0976f6a343d0 (diff)
downloadSensor-Watch-83a0e4e992388e6aaba9390cc1212649ae44d239.tar.gz
Sensor-Watch-83a0e4e992388e6aaba9390cc1212649ae44d239.tar.bz2
Sensor-Watch-83a0e4e992388e6aaba9390cc1212649ae44d239.zip
annotate TRNG erratum, address review comment
Diffstat (limited to 'watch-library')
-rw-r--r--watch-library/hardware/watch/watch_private.c14
-rw-r--r--watch-library/shared/watch/watch.h8
-rw-r--r--watch-library/simulator/watch/watch_private.c2
3 files changed, 10 insertions, 14 deletions
diff --git a/watch-library/hardware/watch/watch_private.c b/watch-library/hardware/watch/watch_private.c
index 20f4ee54..1a33e5c5 100644
--- a/watch-library/hardware/watch/watch_private.c
+++ b/watch-library/hardware/watch/watch_private.c
@@ -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);
return 0;
}
-void watch_disable_TRNG(Trng *hw) {
- hri_trng_clear_CTRLA_ENABLE_bit(hw);
- // silicon erratum: the TRNG may leave internal components powered after disable.
- // the workaround is to clear the register twice.
- hri_trng_write_CTRLA_reg(hw, 0);
- hri_trng_write_CTRLA_reg(hw, 0);
+void watch_disable_TRNG() {
+ // per Microchip datasheet clarification DS80000782,
+ // silicon erratum 1.16.1 indicates that the TRNG may leave internal components powered after being disabled.
+ // the workaround is to disable the TRNG by clearing the control register, twice.
+ hri_trng_write_CTRLA_reg(TRNG, 0);
+ hri_trng_write_CTRLA_reg(TRNG, 0);
}
diff --git a/watch-library/shared/watch/watch.h b/watch-library/shared/watch/watch.h
index 8ede1f63..d23954ec 100644
--- a/watch-library/shared/watch/watch.h
+++ b/watch-library/shared/watch/watch.h
@@ -96,12 +96,8 @@ void watch_reset_to_bootloader(void);
*/
int read(int file, char *ptr, int len);
-#ifdef __EMSCRIPTEN__
-typedef void* Trng;
-#endif
-
-/** @brief Disables the TRNG, working around a silicon erratum.
+/** @brief Disables the TRNG twice in order to work around silicon erratum 1.16.1.
*/
-void watch_disable_TRNG(Trng* hw);
+void watch_disable_TRNG();
#endif /* WATCH_H_ */
diff --git a/watch-library/simulator/watch/watch_private.c b/watch-library/simulator/watch/watch_private.c
index 509a30b9..03e1f08b 100644
--- a/watch-library/simulator/watch/watch_private.c
+++ b/watch-library/simulator/watch/watch_private.c
@@ -57,7 +57,7 @@ void _watch_disable_tcc(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.
int _write(int file, char *ptr, int len) {