mirror of
https://git.proxmox.com/git/qemu
synced 2025-08-14 12:07:25 +00:00
PPC: Add timer handler for newworld mac-io
Mac OS X accesses fancy timer registers inside of the mac-io on bootup. These really should be ticking at the mac-io bus frequency, but I don't see anyone upset when we just make them as fast as we want to. With this patch on top of my previous patch queue and latest OpenBIOS I am able to boot Mac OS X 10.4 with -M mac99. Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
80fc95d8bd
commit
a0f9fdfd98
@ -234,11 +234,39 @@ static void macio_oldworld_init(Object *obj)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void timer_write(void *opaque, hwaddr addr, uint64_t value,
|
||||||
|
unsigned size)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint64_t timer_read(void *opaque, hwaddr addr, unsigned size)
|
||||||
|
{
|
||||||
|
uint32_t value = 0;
|
||||||
|
|
||||||
|
switch (addr) {
|
||||||
|
case 0x38:
|
||||||
|
value = qemu_get_clock_ns(vm_clock);
|
||||||
|
break;
|
||||||
|
case 0x3c:
|
||||||
|
value = qemu_get_clock_ns(vm_clock) >> 32;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const MemoryRegionOps timer_ops = {
|
||||||
|
.read = timer_read,
|
||||||
|
.write = timer_write,
|
||||||
|
.endianness = DEVICE_NATIVE_ENDIAN,
|
||||||
|
};
|
||||||
|
|
||||||
static int macio_newworld_initfn(PCIDevice *d)
|
static int macio_newworld_initfn(PCIDevice *d)
|
||||||
{
|
{
|
||||||
MacIOState *s = MACIO(d);
|
MacIOState *s = MACIO(d);
|
||||||
NewWorldMacIOState *ns = NEWWORLD_MACIO(d);
|
NewWorldMacIOState *ns = NEWWORLD_MACIO(d);
|
||||||
SysBusDevice *sysbus_dev;
|
SysBusDevice *sysbus_dev;
|
||||||
|
MemoryRegion *timer_memory = g_new(MemoryRegion, 1);
|
||||||
int i;
|
int i;
|
||||||
int cur_irq = 0;
|
int cur_irq = 0;
|
||||||
int ret = macio_common_initfn(d);
|
int ret = macio_common_initfn(d);
|
||||||
@ -265,6 +293,11 @@ static int macio_newworld_initfn(PCIDevice *d)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Timer */
|
||||||
|
memory_region_init_io(timer_memory, OBJECT(s), &timer_ops, NULL, "timer",
|
||||||
|
0x1000);
|
||||||
|
memory_region_add_subregion(&s->bar, 0x15000, timer_memory);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user