Message ID | 20240510141010.656561-3-rayhan.faizel@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Initial support for One-Time Programmable Memory (OTP) in BCM2835 | expand |
Hi Rayhan, On 10/5/24 16:10, Rayhan Faizel wrote: > Signed-off-by: Rayhan Faizel <rayhan.faizel@gmail.com> > --- > hw/arm/bcm2835_peripherals.c | 13 ++++++++++++- > include/hw/arm/bcm2835_peripherals.h | 3 ++- > 2 files changed, 14 insertions(+), 2 deletions(-) > @@ -500,7 +512,6 @@ void bcm_soc_peripherals_common_realize(DeviceState *dev, Error **errp) > create_unimp(s, &s->i2s, "bcm2835-i2s", I2S_OFFSET, 0x100); > create_unimp(s, &s->smi, "bcm2835-smi", SMI_OFFSET, 0x100); > create_unimp(s, &s->bscsl, "bcm2835-spis", BSC_SL_OFFSET, 0x100); > - create_unimp(s, &s->otp, "bcm2835-otp", OTP_OFFSET, 0x80); Maybe worth noting in the description, before we were covering a range of 0x80 and now 0x28, so a range of 0x58 I/O ends in RAM. Maybe better keep a region of 0x80 in the previous patch? Flatview diff: (qemu) info mtree -f FlatView #0 AS "memory", root: system Root memory region: system 0000000000000000-000000003f002fff (prio 0, ram): ram ... - 000000003f20f000-000000003f20f07f (prio -1000, i/o): bcm2835-otp - 000000003f20f080-000000003f211fff (prio 0, ram): ram @000000003f20f080 + 000000003f20f000-000000003f20f027 (prio 0, i/o): bcm2835-otp + 000000003f20f028-000000003f211fff (prio 0, ram): ram @000000003f20f028 FlatView #3 Root memory region: bcm2835-gpu 0000000000000000-000000003fffffff (prio 0, ram): ram 0000000040000000-000000007e002fff (prio 0, ram): ram ... - 000000007e20f000-000000007e20f07f (prio -1000, i/o): bcm2835-otp - 000000007e20f080-000000007e211fff (prio 0, ram): ram @000000003e20f080 + 000000007e20f000-000000007e20f027 (prio 0, i/o): bcm2835-otp + 000000007e20f028-000000007e211fff (prio 0, ram): ram @000000003e20f028 > create_unimp(s, &s->dbus, "bcm2835-dbus", DBUS_OFFSET, 0x8000); > create_unimp(s, &s->ave0, "bcm2835-ave0", AVE0_OFFSET, 0x8000); > create_unimp(s, &s->v3d, "bcm2835-v3d", V3D_OFFSET, 0x1000);
diff --git a/hw/arm/bcm2835_peripherals.c b/hw/arm/bcm2835_peripherals.c index 1695d8b453..7d735bb56c 100644 --- a/hw/arm/bcm2835_peripherals.c +++ b/hw/arm/bcm2835_peripherals.c @@ -116,6 +116,10 @@ static void raspi_peripherals_base_init(Object *obj) object_property_add_const_link(OBJECT(&s->fb), "dma-mr", OBJECT(&s->gpu_bus_mr)); + /* OTP */ + object_initialize_child(obj, "bcm2835-otp", &s->otp, + TYPE_BCM2835_OTP); + /* Property channel */ object_initialize_child(obj, "property", &s->property, TYPE_BCM2835_PROPERTY); @@ -374,6 +378,14 @@ void bcm_soc_peripherals_common_realize(DeviceState *dev, Error **errp) sysbus_connect_irq(SYS_BUS_DEVICE(&s->fb), 0, qdev_get_gpio_in(DEVICE(&s->mboxes), MBOX_CHAN_FB)); + /* OTP */ + if (!sysbus_realize(SYS_BUS_DEVICE(&s->otp), errp)) { + return; + } + + memory_region_add_subregion(&s->peri_mr, OTP_OFFSET, + sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->otp), 0)); + /* Property channel */ if (!sysbus_realize(SYS_BUS_DEVICE(&s->property), errp)) { return; @@ -500,7 +512,6 @@ void bcm_soc_peripherals_common_realize(DeviceState *dev, Error **errp) create_unimp(s, &s->i2s, "bcm2835-i2s", I2S_OFFSET, 0x100); create_unimp(s, &s->smi, "bcm2835-smi", SMI_OFFSET, 0x100); create_unimp(s, &s->bscsl, "bcm2835-spis", BSC_SL_OFFSET, 0x100); - create_unimp(s, &s->otp, "bcm2835-otp", OTP_OFFSET, 0x80); create_unimp(s, &s->dbus, "bcm2835-dbus", DBUS_OFFSET, 0x8000); create_unimp(s, &s->ave0, "bcm2835-ave0", AVE0_OFFSET, 0x8000); create_unimp(s, &s->v3d, "bcm2835-v3d", V3D_OFFSET, 0x1000); diff --git a/include/hw/arm/bcm2835_peripherals.h b/include/hw/arm/bcm2835_peripherals.h index 636203baa5..1eeaeec9e0 100644 --- a/include/hw/arm/bcm2835_peripherals.h +++ b/include/hw/arm/bcm2835_peripherals.h @@ -33,6 +33,7 @@ #include "hw/usb/hcd-dwc2.h" #include "hw/ssi/bcm2835_spi.h" #include "hw/i2c/bcm2835_i2c.h" +#include "hw/nvram/bcm2835_otp.h" #include "hw/misc/unimp.h" #include "qom/object.h" @@ -71,7 +72,7 @@ struct BCMSocPeripheralBaseState { BCM2835SPIState spi[1]; BCM2835I2CState i2c[3]; OrIRQState orgated_i2c_irq; - UnimplementedDeviceState otp; + BCM2835OTPState otp; UnimplementedDeviceState dbus; UnimplementedDeviceState ave0; UnimplementedDeviceState v3d;
Signed-off-by: Rayhan Faizel <rayhan.faizel@gmail.com> --- hw/arm/bcm2835_peripherals.c | 13 ++++++++++++- include/hw/arm/bcm2835_peripherals.h | 3 ++- 2 files changed, 14 insertions(+), 2 deletions(-)