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(-)
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;
--
2.34.1
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);
© 2016 - 2024 Red Hat, Inc.