strongarm: convert to memory API
Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
		
							parent
							
								
									7cc09e6c4b
								
							
						
					
					
						commit
						eb2fefbc44
					
				@ -13,6 +13,7 @@
 | 
			
		||||
#include "arm-misc.h"
 | 
			
		||||
#include "flash.h"
 | 
			
		||||
#include "blockdev.h"
 | 
			
		||||
#include "exec-memory.h"
 | 
			
		||||
 | 
			
		||||
static struct arm_boot_info collie_binfo = {
 | 
			
		||||
    .loader_start = SA_SDCS0,
 | 
			
		||||
@ -26,12 +27,13 @@ static void collie_init(ram_addr_t ram_size,
 | 
			
		||||
{
 | 
			
		||||
    StrongARMState *s;
 | 
			
		||||
    DriveInfo *dinfo;
 | 
			
		||||
    MemoryRegion *sysmem = get_system_memory();
 | 
			
		||||
 | 
			
		||||
    if (!cpu_model) {
 | 
			
		||||
        cpu_model = "sa1110";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    s = sa1110_init(collie_binfo.ram_size, cpu_model);
 | 
			
		||||
    s = sa1110_init(sysmem, collie_binfo.ram_size, cpu_model);
 | 
			
		||||
 | 
			
		||||
    dinfo = drive_get(IF_PFLASH, 0, 0);
 | 
			
		||||
    pflash_cfi01_register(SA_CS0, NULL, "collie.fl1", 0x02000000,
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										171
									
								
								hw/strongarm.c
									
									
									
									
									
								
							
							
						
						
									
										171
									
								
								hw/strongarm.c
									
									
									
									
									
								
							@ -68,6 +68,7 @@ static struct {
 | 
			
		||||
/* Interrupt Controller */
 | 
			
		||||
typedef struct {
 | 
			
		||||
    SysBusDevice busdev;
 | 
			
		||||
    MemoryRegion iomem;
 | 
			
		||||
    qemu_irq    irq;
 | 
			
		||||
    qemu_irq    fiq;
 | 
			
		||||
 | 
			
		||||
@ -109,7 +110,8 @@ static void strongarm_pic_set_irq(void *opaque, int irq, int level)
 | 
			
		||||
    strongarm_pic_update(s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static uint32_t strongarm_pic_mem_read(void *opaque, target_phys_addr_t offset)
 | 
			
		||||
static uint64_t strongarm_pic_mem_read(void *opaque, target_phys_addr_t offset,
 | 
			
		||||
                                       unsigned size)
 | 
			
		||||
{
 | 
			
		||||
    StrongARMPICState *s = opaque;
 | 
			
		||||
 | 
			
		||||
@ -134,7 +136,7 @@ static uint32_t strongarm_pic_mem_read(void *opaque, target_phys_addr_t offset)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void strongarm_pic_mem_write(void *opaque, target_phys_addr_t offset,
 | 
			
		||||
                uint32_t value)
 | 
			
		||||
                                    uint64_t value, unsigned size)
 | 
			
		||||
{
 | 
			
		||||
    StrongARMPICState *s = opaque;
 | 
			
		||||
 | 
			
		||||
@ -156,27 +158,19 @@ static void strongarm_pic_mem_write(void *opaque, target_phys_addr_t offset,
 | 
			
		||||
    strongarm_pic_update(s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static CPUReadMemoryFunc * const strongarm_pic_readfn[] = {
 | 
			
		||||
    strongarm_pic_mem_read,
 | 
			
		||||
    strongarm_pic_mem_read,
 | 
			
		||||
    strongarm_pic_mem_read,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static CPUWriteMemoryFunc * const strongarm_pic_writefn[] = {
 | 
			
		||||
    strongarm_pic_mem_write,
 | 
			
		||||
    strongarm_pic_mem_write,
 | 
			
		||||
    strongarm_pic_mem_write,
 | 
			
		||||
static const MemoryRegionOps strongarm_pic_ops = {
 | 
			
		||||
    .read = strongarm_pic_mem_read,
 | 
			
		||||
    .write = strongarm_pic_mem_write,
 | 
			
		||||
    .endianness = DEVICE_NATIVE_ENDIAN,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static int strongarm_pic_initfn(SysBusDevice *dev)
 | 
			
		||||
{
 | 
			
		||||
    StrongARMPICState *s = FROM_SYSBUS(StrongARMPICState, dev);
 | 
			
		||||
    int iomemtype;
 | 
			
		||||
 | 
			
		||||
    qdev_init_gpio_in(&dev->qdev, strongarm_pic_set_irq, SA_PIC_SRCS);
 | 
			
		||||
    iomemtype = cpu_register_io_memory(strongarm_pic_readfn,
 | 
			
		||||
                    strongarm_pic_writefn, s, DEVICE_NATIVE_ENDIAN);
 | 
			
		||||
    sysbus_init_mmio(dev, 0x1000, iomemtype);
 | 
			
		||||
    memory_region_init_io(&s->iomem, &strongarm_pic_ops, s, "pic", 0x1000);
 | 
			
		||||
    sysbus_init_mmio_region(dev, &s->iomem);
 | 
			
		||||
    sysbus_init_irq(dev, &s->irq);
 | 
			
		||||
    sysbus_init_irq(dev, &s->fiq);
 | 
			
		||||
 | 
			
		||||
@ -229,6 +223,7 @@ static SysBusDeviceInfo strongarm_pic_info = {
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
    SysBusDevice busdev;
 | 
			
		||||
    MemoryRegion iomem;
 | 
			
		||||
    uint32_t rttr;
 | 
			
		||||
    uint32_t rtsr;
 | 
			
		||||
    uint32_t rtar;
 | 
			
		||||
@ -287,7 +282,8 @@ static inline void strongarm_rtc_hz_tick(void *opaque)
 | 
			
		||||
    strongarm_rtc_int_update(s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static uint32_t strongarm_rtc_read(void *opaque, target_phys_addr_t addr)
 | 
			
		||||
static uint64_t strongarm_rtc_read(void *opaque, target_phys_addr_t addr,
 | 
			
		||||
                                   unsigned size)
 | 
			
		||||
{
 | 
			
		||||
    StrongARMRTCState *s = opaque;
 | 
			
		||||
 | 
			
		||||
@ -309,7 +305,7 @@ static uint32_t strongarm_rtc_read(void *opaque, target_phys_addr_t addr)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void strongarm_rtc_write(void *opaque, target_phys_addr_t addr,
 | 
			
		||||
                uint32_t value)
 | 
			
		||||
                                uint64_t value, unsigned size)
 | 
			
		||||
{
 | 
			
		||||
    StrongARMRTCState *s = opaque;
 | 
			
		||||
    uint32_t old_rtsr;
 | 
			
		||||
@ -349,23 +345,16 @@ static void strongarm_rtc_write(void *opaque, target_phys_addr_t addr,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static CPUReadMemoryFunc * const strongarm_rtc_readfn[] = {
 | 
			
		||||
    strongarm_rtc_read,
 | 
			
		||||
    strongarm_rtc_read,
 | 
			
		||||
    strongarm_rtc_read,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static CPUWriteMemoryFunc * const strongarm_rtc_writefn[] = {
 | 
			
		||||
    strongarm_rtc_write,
 | 
			
		||||
    strongarm_rtc_write,
 | 
			
		||||
    strongarm_rtc_write,
 | 
			
		||||
static const MemoryRegionOps strongarm_rtc_ops = {
 | 
			
		||||
    .read = strongarm_rtc_read,
 | 
			
		||||
    .write = strongarm_rtc_write,
 | 
			
		||||
    .endianness = DEVICE_NATIVE_ENDIAN,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static int strongarm_rtc_init(SysBusDevice *dev)
 | 
			
		||||
{
 | 
			
		||||
    StrongARMRTCState *s = FROM_SYSBUS(StrongARMRTCState, dev);
 | 
			
		||||
    struct tm tm;
 | 
			
		||||
    int iomemtype;
 | 
			
		||||
 | 
			
		||||
    s->rttr = 0x0;
 | 
			
		||||
    s->rtsr = 0;
 | 
			
		||||
@ -381,9 +370,8 @@ static int strongarm_rtc_init(SysBusDevice *dev)
 | 
			
		||||
    sysbus_init_irq(dev, &s->rtc_irq);
 | 
			
		||||
    sysbus_init_irq(dev, &s->rtc_hz_irq);
 | 
			
		||||
 | 
			
		||||
    iomemtype = cpu_register_io_memory(strongarm_rtc_readfn,
 | 
			
		||||
                    strongarm_rtc_writefn, s, DEVICE_NATIVE_ENDIAN);
 | 
			
		||||
    sysbus_init_mmio(dev, 0x10000, iomemtype);
 | 
			
		||||
    memory_region_init_io(&s->iomem, &strongarm_rtc_ops, s, "rtc", 0x10000);
 | 
			
		||||
    sysbus_init_mmio_region(dev, &s->iomem);
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
@ -443,6 +431,7 @@ static SysBusDeviceInfo strongarm_rtc_sysbus_info = {
 | 
			
		||||
typedef struct StrongARMGPIOInfo StrongARMGPIOInfo;
 | 
			
		||||
struct StrongARMGPIOInfo {
 | 
			
		||||
    SysBusDevice busdev;
 | 
			
		||||
    MemoryRegion iomem;
 | 
			
		||||
    qemu_irq handler[28];
 | 
			
		||||
    qemu_irq irqs[11];
 | 
			
		||||
    qemu_irq irqX;
 | 
			
		||||
@ -507,7 +496,8 @@ static void strongarm_gpio_handler_update(StrongARMGPIOInfo *s)
 | 
			
		||||
    s->prev_level = level;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static uint32_t strongarm_gpio_read(void *opaque, target_phys_addr_t offset)
 | 
			
		||||
static uint64_t strongarm_gpio_read(void *opaque, target_phys_addr_t offset,
 | 
			
		||||
                                    unsigned size)
 | 
			
		||||
{
 | 
			
		||||
    StrongARMGPIOInfo *s = opaque;
 | 
			
		||||
 | 
			
		||||
@ -548,8 +538,8 @@ static uint32_t strongarm_gpio_read(void *opaque, target_phys_addr_t offset)
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void strongarm_gpio_write(void *opaque,
 | 
			
		||||
                target_phys_addr_t offset, uint32_t value)
 | 
			
		||||
static void strongarm_gpio_write(void *opaque, target_phys_addr_t offset,
 | 
			
		||||
                                 uint64_t value, unsigned size)
 | 
			
		||||
{
 | 
			
		||||
    StrongARMGPIOInfo *s = opaque;
 | 
			
		||||
 | 
			
		||||
@ -592,16 +582,10 @@ static void strongarm_gpio_write(void *opaque,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static CPUReadMemoryFunc * const strongarm_gpio_readfn[] = {
 | 
			
		||||
    strongarm_gpio_read,
 | 
			
		||||
    strongarm_gpio_read,
 | 
			
		||||
    strongarm_gpio_read
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static CPUWriteMemoryFunc * const strongarm_gpio_writefn[] = {
 | 
			
		||||
    strongarm_gpio_write,
 | 
			
		||||
    strongarm_gpio_write,
 | 
			
		||||
    strongarm_gpio_write
 | 
			
		||||
static const MemoryRegionOps strongarm_gpio_ops = {
 | 
			
		||||
    .read = strongarm_gpio_read,
 | 
			
		||||
    .write = strongarm_gpio_write,
 | 
			
		||||
    .endianness = DEVICE_NATIVE_ENDIAN,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static DeviceState *strongarm_gpio_init(target_phys_addr_t base,
 | 
			
		||||
@ -623,7 +607,6 @@ static DeviceState *strongarm_gpio_init(target_phys_addr_t base,
 | 
			
		||||
 | 
			
		||||
static int strongarm_gpio_initfn(SysBusDevice *dev)
 | 
			
		||||
{
 | 
			
		||||
    int iomemtype;
 | 
			
		||||
    StrongARMGPIOInfo *s;
 | 
			
		||||
    int i;
 | 
			
		||||
 | 
			
		||||
@ -632,10 +615,9 @@ static int strongarm_gpio_initfn(SysBusDevice *dev)
 | 
			
		||||
    qdev_init_gpio_in(&dev->qdev, strongarm_gpio_set, 28);
 | 
			
		||||
    qdev_init_gpio_out(&dev->qdev, s->handler, 28);
 | 
			
		||||
 | 
			
		||||
    iomemtype = cpu_register_io_memory(strongarm_gpio_readfn,
 | 
			
		||||
                    strongarm_gpio_writefn, s, DEVICE_NATIVE_ENDIAN);
 | 
			
		||||
    memory_region_init_io(&s->iomem, &strongarm_gpio_ops, s, "gpio", 0x1000);
 | 
			
		||||
 | 
			
		||||
    sysbus_init_mmio(dev, 0x1000, iomemtype);
 | 
			
		||||
    sysbus_init_mmio_region(dev, &s->iomem);
 | 
			
		||||
    for (i = 0; i < 11; i++) {
 | 
			
		||||
        sysbus_init_irq(dev, &s->irqs[i]);
 | 
			
		||||
    }
 | 
			
		||||
@ -678,6 +660,7 @@ static SysBusDeviceInfo strongarm_gpio_info = {
 | 
			
		||||
typedef struct StrongARMPPCInfo StrongARMPPCInfo;
 | 
			
		||||
struct StrongARMPPCInfo {
 | 
			
		||||
    SysBusDevice busdev;
 | 
			
		||||
    MemoryRegion iomem;
 | 
			
		||||
    qemu_irq handler[28];
 | 
			
		||||
 | 
			
		||||
    uint32_t ilevel;
 | 
			
		||||
@ -716,7 +699,8 @@ static void strongarm_ppc_handler_update(StrongARMPPCInfo *s)
 | 
			
		||||
    s->prev_level = level;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static uint32_t strongarm_ppc_read(void *opaque, target_phys_addr_t offset)
 | 
			
		||||
static uint64_t strongarm_ppc_read(void *opaque, target_phys_addr_t offset,
 | 
			
		||||
                                   unsigned size)
 | 
			
		||||
{
 | 
			
		||||
    StrongARMPPCInfo *s = opaque;
 | 
			
		||||
 | 
			
		||||
@ -745,8 +729,8 @@ static uint32_t strongarm_ppc_read(void *opaque, target_phys_addr_t offset)
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void strongarm_ppc_write(void *opaque,
 | 
			
		||||
                target_phys_addr_t offset, uint32_t value)
 | 
			
		||||
static void strongarm_ppc_write(void *opaque, target_phys_addr_t offset,
 | 
			
		||||
                                uint64_t value, unsigned size)
 | 
			
		||||
{
 | 
			
		||||
    StrongARMPPCInfo *s = opaque;
 | 
			
		||||
 | 
			
		||||
@ -778,21 +762,14 @@ static void strongarm_ppc_write(void *opaque,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static CPUReadMemoryFunc * const strongarm_ppc_readfn[] = {
 | 
			
		||||
    strongarm_ppc_read,
 | 
			
		||||
    strongarm_ppc_read,
 | 
			
		||||
    strongarm_ppc_read
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static CPUWriteMemoryFunc * const strongarm_ppc_writefn[] = {
 | 
			
		||||
    strongarm_ppc_write,
 | 
			
		||||
    strongarm_ppc_write,
 | 
			
		||||
    strongarm_ppc_write
 | 
			
		||||
static const MemoryRegionOps strongarm_ppc_ops = {
 | 
			
		||||
    .read = strongarm_ppc_read,
 | 
			
		||||
    .write = strongarm_ppc_write,
 | 
			
		||||
    .endianness = DEVICE_NATIVE_ENDIAN,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static int strongarm_ppc_init(SysBusDevice *dev)
 | 
			
		||||
{
 | 
			
		||||
    int iomemtype;
 | 
			
		||||
    StrongARMPPCInfo *s;
 | 
			
		||||
 | 
			
		||||
    s = FROM_SYSBUS(StrongARMPPCInfo, dev);
 | 
			
		||||
@ -800,10 +777,9 @@ static int strongarm_ppc_init(SysBusDevice *dev)
 | 
			
		||||
    qdev_init_gpio_in(&dev->qdev, strongarm_ppc_set, 22);
 | 
			
		||||
    qdev_init_gpio_out(&dev->qdev, s->handler, 22);
 | 
			
		||||
 | 
			
		||||
    iomemtype = cpu_register_io_memory(strongarm_ppc_readfn,
 | 
			
		||||
                    strongarm_ppc_writefn, s, DEVICE_NATIVE_ENDIAN);
 | 
			
		||||
    memory_region_init_io(&s->iomem, &strongarm_ppc_ops, s, "ppc", 0x1000);
 | 
			
		||||
 | 
			
		||||
    sysbus_init_mmio(dev, 0x1000, iomemtype);
 | 
			
		||||
    sysbus_init_mmio_region(dev, &s->iomem);
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
@ -871,6 +847,7 @@ static SysBusDeviceInfo strongarm_ppc_info = {
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
    SysBusDevice busdev;
 | 
			
		||||
    MemoryRegion iomem;
 | 
			
		||||
    CharDriverState *chr;
 | 
			
		||||
    qemu_irq irq;
 | 
			
		||||
 | 
			
		||||
@ -1079,7 +1056,8 @@ static void strongarm_uart_tx(void *opaque)
 | 
			
		||||
    strongarm_uart_update_int_status(s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static uint32_t strongarm_uart_read(void *opaque, target_phys_addr_t addr)
 | 
			
		||||
static uint64_t strongarm_uart_read(void *opaque, target_phys_addr_t addr,
 | 
			
		||||
                                    unsigned size)
 | 
			
		||||
{
 | 
			
		||||
    StrongARMUARTState *s = opaque;
 | 
			
		||||
    uint16_t ret;
 | 
			
		||||
@ -1121,7 +1099,7 @@ static uint32_t strongarm_uart_read(void *opaque, target_phys_addr_t addr)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void strongarm_uart_write(void *opaque, target_phys_addr_t addr,
 | 
			
		||||
                uint32_t value)
 | 
			
		||||
                                 uint64_t value, unsigned size)
 | 
			
		||||
{
 | 
			
		||||
    StrongARMUARTState *s = opaque;
 | 
			
		||||
 | 
			
		||||
@ -1176,26 +1154,18 @@ static void strongarm_uart_write(void *opaque, target_phys_addr_t addr,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static CPUReadMemoryFunc * const strongarm_uart_readfn[] = {
 | 
			
		||||
    strongarm_uart_read,
 | 
			
		||||
    strongarm_uart_read,
 | 
			
		||||
    strongarm_uart_read,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static CPUWriteMemoryFunc * const strongarm_uart_writefn[] = {
 | 
			
		||||
    strongarm_uart_write,
 | 
			
		||||
    strongarm_uart_write,
 | 
			
		||||
    strongarm_uart_write,
 | 
			
		||||
static const MemoryRegionOps strongarm_uart_ops = {
 | 
			
		||||
    .read = strongarm_uart_read,
 | 
			
		||||
    .write = strongarm_uart_write,
 | 
			
		||||
    .endianness = DEVICE_NATIVE_ENDIAN,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static int strongarm_uart_init(SysBusDevice *dev)
 | 
			
		||||
{
 | 
			
		||||
    StrongARMUARTState *s = FROM_SYSBUS(StrongARMUARTState, dev);
 | 
			
		||||
    int iomemtype;
 | 
			
		||||
 | 
			
		||||
    iomemtype = cpu_register_io_memory(strongarm_uart_readfn,
 | 
			
		||||
                    strongarm_uart_writefn, s, DEVICE_NATIVE_ENDIAN);
 | 
			
		||||
    sysbus_init_mmio(dev, 0x10000, iomemtype);
 | 
			
		||||
    memory_region_init_io(&s->iomem, &strongarm_uart_ops, s, "uart", 0x10000);
 | 
			
		||||
    sysbus_init_mmio_region(dev, &s->iomem);
 | 
			
		||||
    sysbus_init_irq(dev, &s->irq);
 | 
			
		||||
 | 
			
		||||
    s->rx_timeout_timer = qemu_new_timer_ns(vm_clock, strongarm_uart_rx_to, s);
 | 
			
		||||
@ -1288,6 +1258,7 @@ static SysBusDeviceInfo strongarm_uart_info = {
 | 
			
		||||
/* Synchronous Serial Ports */
 | 
			
		||||
typedef struct {
 | 
			
		||||
    SysBusDevice busdev;
 | 
			
		||||
    MemoryRegion iomem;
 | 
			
		||||
    qemu_irq irq;
 | 
			
		||||
    SSIBus *bus;
 | 
			
		||||
 | 
			
		||||
@ -1355,7 +1326,8 @@ static void strongarm_ssp_fifo_update(StrongARMSSPState *s)
 | 
			
		||||
    strongarm_ssp_int_update(s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static uint32_t strongarm_ssp_read(void *opaque, target_phys_addr_t addr)
 | 
			
		||||
static uint64_t strongarm_ssp_read(void *opaque, target_phys_addr_t addr,
 | 
			
		||||
                                   unsigned size)
 | 
			
		||||
{
 | 
			
		||||
    StrongARMSSPState *s = opaque;
 | 
			
		||||
    uint32_t retval;
 | 
			
		||||
@ -1388,7 +1360,7 @@ static uint32_t strongarm_ssp_read(void *opaque, target_phys_addr_t addr)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void strongarm_ssp_write(void *opaque, target_phys_addr_t addr,
 | 
			
		||||
                uint32_t value)
 | 
			
		||||
                                uint64_t value, unsigned size)
 | 
			
		||||
{
 | 
			
		||||
    StrongARMSSPState *s = opaque;
 | 
			
		||||
 | 
			
		||||
@ -1397,7 +1369,7 @@ static void strongarm_ssp_write(void *opaque, target_phys_addr_t addr,
 | 
			
		||||
        s->sscr[0] = value & 0xffbf;
 | 
			
		||||
        if ((s->sscr[0] & SSCR0_SSE) && SSCR0_DSS(value) < 4) {
 | 
			
		||||
            printf("%s: Wrong data size: %i bits\n", __func__,
 | 
			
		||||
                            SSCR0_DSS(value));
 | 
			
		||||
                   (int)SSCR0_DSS(value));
 | 
			
		||||
        }
 | 
			
		||||
        if (!(value & SSCR0_SSE)) {
 | 
			
		||||
            s->sssr = 0;
 | 
			
		||||
@ -1452,16 +1424,10 @@ static void strongarm_ssp_write(void *opaque, target_phys_addr_t addr,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static CPUReadMemoryFunc * const strongarm_ssp_readfn[] = {
 | 
			
		||||
    strongarm_ssp_read,
 | 
			
		||||
    strongarm_ssp_read,
 | 
			
		||||
    strongarm_ssp_read,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static CPUWriteMemoryFunc * const strongarm_ssp_writefn[] = {
 | 
			
		||||
    strongarm_ssp_write,
 | 
			
		||||
    strongarm_ssp_write,
 | 
			
		||||
    strongarm_ssp_write,
 | 
			
		||||
static const MemoryRegionOps strongarm_ssp_ops = {
 | 
			
		||||
    .read = strongarm_ssp_read,
 | 
			
		||||
    .write = strongarm_ssp_write,
 | 
			
		||||
    .endianness = DEVICE_NATIVE_ENDIAN,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static int strongarm_ssp_post_load(void *opaque, int version_id)
 | 
			
		||||
@ -1475,15 +1441,12 @@ static int strongarm_ssp_post_load(void *opaque, int version_id)
 | 
			
		||||
 | 
			
		||||
static int strongarm_ssp_init(SysBusDevice *dev)
 | 
			
		||||
{
 | 
			
		||||
    int iomemtype;
 | 
			
		||||
    StrongARMSSPState *s = FROM_SYSBUS(StrongARMSSPState, dev);
 | 
			
		||||
 | 
			
		||||
    sysbus_init_irq(dev, &s->irq);
 | 
			
		||||
 | 
			
		||||
    iomemtype = cpu_register_io_memory(strongarm_ssp_readfn,
 | 
			
		||||
                                       strongarm_ssp_writefn, s,
 | 
			
		||||
                                       DEVICE_NATIVE_ENDIAN);
 | 
			
		||||
    sysbus_init_mmio(dev, 0x1000, iomemtype);
 | 
			
		||||
    memory_region_init_io(&s->iomem, &strongarm_ssp_ops, s, "ssp", 0x1000);
 | 
			
		||||
    sysbus_init_mmio_region(dev, &s->iomem);
 | 
			
		||||
 | 
			
		||||
    s->bus = ssi_create_bus(&dev->qdev, "ssi");
 | 
			
		||||
    return 0;
 | 
			
		||||
@ -1523,7 +1486,8 @@ static SysBusDeviceInfo strongarm_ssp_info = {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Main CPU functions */
 | 
			
		||||
StrongARMState *sa1110_init(unsigned int sdram_size, const char *rev)
 | 
			
		||||
StrongARMState *sa1110_init(MemoryRegion *sysmem,
 | 
			
		||||
                            unsigned int sdram_size, const char *rev)
 | 
			
		||||
{
 | 
			
		||||
    StrongARMState *s;
 | 
			
		||||
    qemu_irq *pic;
 | 
			
		||||
@ -1547,9 +1511,8 @@ StrongARMState *sa1110_init(unsigned int sdram_size, const char *rev)
 | 
			
		||||
        exit(1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    cpu_register_physical_memory(SA_SDCS0,
 | 
			
		||||
                    sdram_size, qemu_ram_alloc(NULL, "strongarm.sdram",
 | 
			
		||||
                                                sdram_size) | IO_MEM_RAM);
 | 
			
		||||
    memory_region_init_ram(&s->sdram, NULL, "strongarm.sdram", sdram_size);
 | 
			
		||||
    memory_region_add_subregion(sysmem, SA_SDCS0, &s->sdram);
 | 
			
		||||
 | 
			
		||||
    pic = arm_pic_init_cpu(s->env);
 | 
			
		||||
    s->pic = sysbus_create_varargs("strongarm_pic", 0x90050000,
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,8 @@
 | 
			
		||||
#ifndef _STRONGARM_H
 | 
			
		||||
#define _STRONGARM_H
 | 
			
		||||
 | 
			
		||||
#include "memory.h"
 | 
			
		||||
 | 
			
		||||
#define SA_CS0          0x00000000
 | 
			
		||||
#define SA_CS1          0x08000000
 | 
			
		||||
#define SA_CS2          0x10000000
 | 
			
		||||
@ -52,6 +54,7 @@ enum {
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
    CPUState *env;
 | 
			
		||||
    MemoryRegion sdram;
 | 
			
		||||
    DeviceState *pic;
 | 
			
		||||
    DeviceState *gpio;
 | 
			
		||||
    DeviceState *ppc;
 | 
			
		||||
@ -59,6 +62,7 @@ typedef struct {
 | 
			
		||||
    SSIBus *ssp_bus;
 | 
			
		||||
} StrongARMState;
 | 
			
		||||
 | 
			
		||||
StrongARMState *sa1110_init(unsigned int sdram_size, const char *rev);
 | 
			
		||||
StrongARMState *sa1110_init(MemoryRegion *sysmem,
 | 
			
		||||
                            unsigned int sdram_size, const char *rev);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user