All BCM2835 boards have on-board OTP memory with 66 32-bit rows. Usually,
its contents are accessible via mailbox commands.
[Changes in v2]
- Replace read/write with get/set in bcm2835_otp.c.
- Use impl instead of valid in bcm2835_otp.c.
- Replace all constant values with macros defined in bcm2835_otp.h.
- Change memory region size of OTP device to 0x80.
- After further testing on a real Raspberry Pi 3, I noticed a few things
contrary to my initial assumptions:
-- The customer OTP lock bit is bit 6 of row 32, NOT bit 30 of row 30. This is
currently undocumented to my knowledge.
-- The above lock indeed applies to the private key as well.
Rayhan Faizel (3):
hw/nvram: Add BCM2835 OTP device
hw/arm: Connect OTP device to BCM2835
hw/misc: Implement mailbox properties for customer OTP and device
specific private keys
hw/arm/bcm2835_peripherals.c | 15 ++-
hw/misc/bcm2835_property.c | 87 +++++++++++++
hw/nvram/bcm2835_otp.c | 187 +++++++++++++++++++++++++++
hw/nvram/meson.build | 1 +
include/hw/arm/bcm2835_peripherals.h | 3 +-
include/hw/arm/raspberrypi-fw-defs.h | 2 +
include/hw/misc/bcm2835_property.h | 2 +
include/hw/nvram/bcm2835_otp.h | 67 ++++++++++
8 files changed, 362 insertions(+), 2 deletions(-)
create mode 100644 hw/nvram/bcm2835_otp.c
create mode 100644 include/hw/nvram/bcm2835_otp.h
--
2.34.1