nuttx/arch/arm/src
Marco Casaroli 7fc26fd50c
Some checks are pending
Build Documentation / build-html (push) Waiting to run
MemBrowse Memory Report / changes-filter (push) Waiting to run
MemBrowse Memory Report / load-targets (push) Waiting to run
MemBrowse Memory Report / identical (push) Blocked by required conditions
MemBrowse Memory Report / analyze (push) Blocked by required conditions
rp23xx: Add an OTP driver on the efuse interface.
The rp2350 holds 4096 rows of 24 bit one-time-programmable memory, which
the port did not expose at all.  This adds a driver on the NuttX efuse
interface, registered by the common board bringup as /dev/efuse.

The driver uses the ECC interpretation of a row, in which 16 bits carry
data and the remaining 8 carry a Hamming code, so the OTP appears as a
flat space of 4096 * 16 bits for the efuse field descriptors to index: a
descriptor at bit offset N refers to bit N % 16 of row N / 16.  That
matches the row numbers already listed in hardware/rp23xx_otp_data.h.

Reads come from the chip's ECC-translated window and have no side
effects.  Rows are locked in pages of 64; a page locked against reads
would raise a bus fault, so the lock is checked first and reported as an
error instead.

Programming needs the separate RP23XX_OTP_WRITE option, which defaults to
off; without it a write returns EPERM and no programming code is built at
all.  When enabled, a row is programmed as a whole through the bootrom,
since the ECC bits cover the whole row.  For the same reason a row that
already holds data cannot be modified, and such a write is rejected
rather than left to corrupt the row's ECC.

Assisted-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Marco Casaroli <marco.casaroli@gmail.com>
2026-07-27 10:33:13 +08:00
..
a1x
am67 boards/arm/am67: Add support for t3-gem-o1 board. 2026-05-28 14:16:03 +02:00
am335x
arm arm/arm: remove duplicate .globl for up_saveusercontext 2026-06-26 15:16:20 -03:00
armv6-m arm/armv6-m: remove duplicate .globl for up_saveusercontext 2026-06-26 15:16:20 -03:00
armv7-a arm/armv7-a: remove duplicate .globl for up_saveusercontext 2026-06-26 15:16:20 -03:00
armv7-m arm/armv7-m: remove duplicate .globl for up_saveusercontext 2026-06-26 15:16:20 -03:00
armv7-r arm/armv7-r: remove duplicate .globl for up_saveusercontext 2026-06-26 15:16:20 -03:00
armv8-m arch/arm: set PSPLIM to top of TLS region to protect it from overflow 2026-07-20 20:59:06 -03:00
armv8-r arm/armv8-r: remove duplicate .globl for up_saveusercontext 2026-06-26 15:16:20 -03:00
at32 drivers: Fix comment typos — 'Pubic' → 'Public' across drivers and headers. 2026-07-02 13:29:48 +08:00
c5471 drivers/efuse/efuse: Drivers Registered With World Write Permissions(Part 1) 2026-07-13 12:08:01 +02:00
cmake cmake/elf: Fix ELF entry point from __start to _start 2026-06-08 16:03:21 +08:00
common stm32h7/dac: add DMA stream mode with ioctl-driven double-buffering 2026-07-26 14:26:47 -03:00
csk6
cxd32xx
cxd56xx drivers/efuse/efuse: Drivers Registered With World Write Permissions(Part 1) 2026-07-13 12:08:01 +02:00
dm320
efm32 arch: remove PULSECOUNT references from PWM drivers 2026-05-25 14:33:11 +02:00
eoss3
fvp-v8r-aarch32
gd32f4 arch/arm/gd32f4: fix missing CTL selector bits in up_disableusartint. 2026-06-11 09:18:15 -03:00
goldfish
ht32f491x3
imx1
imx6
imx9 arch: imx9: allow last CCM root index 2026-07-06 22:04:14 +08:00
imxrt
kinetis
kl
lc823450 libs/libc: Fix divide-by-zero in stat() with large filesystem block sizes 2026-07-16 23:37:22 +08:00
lpc17xx_40xx
lpc31xx
lpc43xx
lpc54xx
lpc214x arch/lpc214x: Fix LPC214x to work again 2026-07-01 03:00:43 +08:00
lpc2378 arch/arm: Fix LPC2378 to work again 2026-06-30 03:28:12 +08:00
max326xx
mcx-nxxx
moxart
mps
mx8mp
nrf52 arch/arm/nrf52,nrf53: don't pass HCI messages under the lock 2026-07-27 10:16:22 +08:00
nrf53 arch/arm/nrf52,nrf53: don't pass HCI messages under the lock 2026-07-27 10:16:22 +08:00
nrf91 arch/arm: nrf91: bound modem version parsing 2026-07-06 07:58:13 +02:00
nuc1xx
phy62xx drivers/efuse/efuse: Drivers Registered With World Write Permissions(Part 1) 2026-07-13 12:08:01 +02:00
qemu
ra4
rp23xx rp23xx: Add an OTP driver on the efuse interface. 2026-07-27 10:33:13 +08:00
rp2040 rp2040/rp23xx: preserve SIE_CTRL.PULLUP_EN in usbdev_register 2026-07-16 15:45:19 +08:00
rtl8720c drivers/efuse/efuse: Drivers Registered With World Write Permissions(Part 1) 2026-07-13 12:08:01 +02:00
rtl8720f arch/arm/ameba: pack fwlib/wifi archives from an explicit object list 2026-07-17 08:30:47 -03:00
rtl8721dx arch/arm/rtl8721dx: add shared Ameba GPIO driver. 2026-07-21 08:34:05 +02:00
s32k1xx libs/libc: Fix divide-by-zero in stat() with large filesystem block sizes 2026-07-16 23:37:22 +08:00
s32k3xx
sam34
sama5 drivers/efuse/efuse: Drivers Registered With World Write Permissions(Part 1) 2026-07-13 12:08:01 +02:00
samd2l2
samd5e5
samv7 drivers/audio/i2s: Fix unsigned integers in function signatures 2026-07-05 15:06:04 +08:00
stm32c0 arch/arm/src/stm32: unify pulse count driver into common/stm32 2026-07-12 09:35:51 +08:00
stm32f0 arch/arm/src/stm32: unify pulse count driver into common/stm32 2026-07-12 09:35:51 +08:00
stm32f1 !arch/stm32: unify and commonize stm32_uid for all STM32 families. 2026-07-04 18:47:45 +08:00
stm32f2 !arch/stm32: unify and commonize stm32_uid for all STM32 families. 2026-07-04 18:47:45 +08:00
stm32f3 !arch/stm32: unify and commonize stm32_uid for all STM32 families. 2026-07-04 18:47:45 +08:00
stm32f4 !arch/stm32: unify and commonize stm32_uid for all STM32 families. 2026-07-04 18:47:45 +08:00
stm32f7 arch/arm/src/stm32{h7,f7,l4}: add 4-bit wide bus support for MMC/eMMC cards 2026-07-21 08:51:38 -03:00
stm32g0 stm32g0: Fix FLASHIF typo 2026-07-24 11:04:08 -03:00
stm32g4 arch/arm/src/stm32: add G4 RNG base address 2026-07-09 09:59:02 -04:00
stm32h5 arch/arm/src/stm32: unify pulse count driver into common/stm32 2026-07-12 09:35:51 +08:00
stm32h7 stm32h7/dac: add DMA stream mode with ioctl-driven double-buffering 2026-07-26 14:26:47 -03:00
stm32l0 arch/arm/src/stm32: unify pulse count driver into common/stm32 2026-07-12 09:35:51 +08:00
stm32l1 !arch/stm32: unify and commonize stm32_uid for all STM32 families. 2026-07-04 18:47:45 +08:00
stm32l4 arch/arm/src/stm32{h7,f7,l4}: add 4-bit wide bus support for MMC/eMMC cards 2026-07-21 08:51:38 -03:00
stm32l5 arch/stm32/serial: simplify ifdefs in ioctl 2026-07-07 01:57:51 +08:00
stm32n6 arch/stm32/serial: simplify ifdefs in ioctl 2026-07-07 01:57:51 +08:00
stm32u5 arch/stm32/serial: simplify ifdefs in ioctl 2026-07-07 01:57:51 +08:00
stm32wb arch/stm32/serial: simplify ifdefs in ioctl 2026-07-07 01:57:51 +08:00
stm32wl5 arch/stm32/serial: simplify ifdefs in ioctl 2026-07-07 01:57:51 +08:00
str71x
tiva arch/arm/src/at32/at32_can: Division by Zero in CAN Bit Timing Commands 2026-06-17 09:01:52 -03:00
tlsr82 drivers/efuse/efuse: Drivers Registered With World Write Permissions(Part 1) 2026-07-13 12:08:01 +02:00
tms570
xmc4 arch/arm: xmc4: fix VADC index bounds checks 2026-07-06 07:47:17 +02:00
.gitignore
CMakeLists.txt
Makefile