Commit a0f9fdfd authored by Alexander Graf's avatar Alexander Graf
Browse files

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: default avatarAlexander Graf <agraf@suse.de>
parent 80fc95d8
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -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)
{
    MacIOState *s = MACIO(d);
    NewWorldMacIOState *ns = NEWWORLD_MACIO(d);
    SysBusDevice *sysbus_dev;
    MemoryRegion *timer_memory = g_new(MemoryRegion, 1);
    int i;
    int cur_irq = 0;
    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;
}