Message ID | 0dd50184cd4b0848808c8a1faddaf84bd2cf0fcd.1592315226.git.balaton@eik.bme.hu (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Mac Old World ROM experiment | expand |
On 16/06/2020 14:47, BALATON Zoltan wrote: > The G3 beige machine has a machine ID register that is accessed by the > firmware to deternine the board config. Add basic emulation of it. > > Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu> > --- > v4: Move MermoryRegion to MachineState, use constants > > hw/ppc/mac.h | 1 + > hw/ppc/mac_oldworld.c | 24 ++++++++++++++++++++++++ > 2 files changed, 25 insertions(+) > > diff --git a/hw/ppc/mac.h b/hw/ppc/mac.h > index 79ccf8775d..32b7928a96 100644 > --- a/hw/ppc/mac.h > +++ b/hw/ppc/mac.h > @@ -64,6 +64,7 @@ typedef struct HeathrowMachineState { > /*< private >*/ > MachineState parent; > > + MemoryRegion machine_id; > PCIDevice *macio; > } HeathrowMachineState; > > diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c > index 13562e26e6..14a191ff88 100644 > --- a/hw/ppc/mac_oldworld.c > +++ b/hw/ppc/mac_oldworld.c > @@ -52,6 +52,9 @@ > > #define MAX_IDE_BUS 2 > #define CFG_ADDR 0xf0000510 > +#define MACHINE_ID_ADDR 0xff000004 > +#define MACHINE_ID_VAL 0x3d8c > + > #define TBFREQ 16600000UL > #define CLOCKFREQ 266000000UL > #define BUSFREQ 66000000UL > @@ -89,6 +92,22 @@ static void ppc_heathrow_cpu_reset(void *opaque) > cpu_reset(CPU(cpu)); > } > > +static uint64_t machine_id_read(void *opaque, hwaddr addr, unsigned size) > +{ > + return (addr == 0 && size == 2 ? MACHINE_ID_VAL : 0); > +} > + > +static void machine_id_write(void *opaque, hwaddr addr, > + uint64_t val, unsigned size) > +{ > + return; > +} > + > +const MemoryRegionOps machine_id_reg_ops = { > + .read = machine_id_read, > + .write = machine_id_write, > +}; static const here? > static void ppc_heathrow_init(MachineState *machine) > { > HeathrowMachineState *hm = HEATHROW_MACHINE(machine); > @@ -239,6 +258,11 @@ static void ppc_heathrow_init(MachineState *machine) > } > } > > + memory_region_init_io(&hm->machine_id, OBJECT(machine), > + &machine_id_reg_ops, NULL, "machine_id", 2); > + memory_region_add_subregion(get_system_memory(), MACHINE_ID_ADDR, > + &hm->machine_id); > + > /* XXX: we register only 1 output pin for heathrow PIC */ > pic_dev = qdev_new(TYPE_HEATHROW); > sysbus_realize_and_unref(SYS_BUS_DEVICE(pic_dev), &error_fatal); Have you done some boot tests with MacOS 9 and X to ensure that it doesn't cause any regressions there? ATB, Mark.
diff --git a/hw/ppc/mac.h b/hw/ppc/mac.h index 79ccf8775d..32b7928a96 100644 --- a/hw/ppc/mac.h +++ b/hw/ppc/mac.h @@ -64,6 +64,7 @@ typedef struct HeathrowMachineState { /*< private >*/ MachineState parent; + MemoryRegion machine_id; PCIDevice *macio; } HeathrowMachineState; diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c index 13562e26e6..14a191ff88 100644 --- a/hw/ppc/mac_oldworld.c +++ b/hw/ppc/mac_oldworld.c @@ -52,6 +52,9 @@ #define MAX_IDE_BUS 2 #define CFG_ADDR 0xf0000510 +#define MACHINE_ID_ADDR 0xff000004 +#define MACHINE_ID_VAL 0x3d8c + #define TBFREQ 16600000UL #define CLOCKFREQ 266000000UL #define BUSFREQ 66000000UL @@ -89,6 +92,22 @@ static void ppc_heathrow_cpu_reset(void *opaque) cpu_reset(CPU(cpu)); } +static uint64_t machine_id_read(void *opaque, hwaddr addr, unsigned size) +{ + return (addr == 0 && size == 2 ? MACHINE_ID_VAL : 0); +} + +static void machine_id_write(void *opaque, hwaddr addr, + uint64_t val, unsigned size) +{ + return; +} + +const MemoryRegionOps machine_id_reg_ops = { + .read = machine_id_read, + .write = machine_id_write, +}; + static void ppc_heathrow_init(MachineState *machine) { HeathrowMachineState *hm = HEATHROW_MACHINE(machine); @@ -239,6 +258,11 @@ static void ppc_heathrow_init(MachineState *machine) } } + memory_region_init_io(&hm->machine_id, OBJECT(machine), + &machine_id_reg_ops, NULL, "machine_id", 2); + memory_region_add_subregion(get_system_memory(), MACHINE_ID_ADDR, + &hm->machine_id); + /* XXX: we register only 1 output pin for heathrow PIC */ pic_dev = qdev_new(TYPE_HEATHROW); sysbus_realize_and_unref(SYS_BUS_DEVICE(pic_dev), &error_fatal);
The G3 beige machine has a machine ID register that is accessed by the firmware to deternine the board config. Add basic emulation of it. Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu> --- v4: Move MermoryRegion to MachineState, use constants hw/ppc/mac.h | 1 + hw/ppc/mac_oldworld.c | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+)