Diff for /qemu/hw/armv7m.c between versions 1.1.1.5 and 1.1.1.9

version 1.1.1.5, 2018/04/24 18:28:47 version 1.1.1.9, 2018/04/24 19:47:34
Line 4 Line 4
  * Copyright (c) 2006-2007 CodeSourcery.   * Copyright (c) 2006-2007 CodeSourcery.
  * Written by Paul Brook   * Written by Paul Brook
  *   *
  * This code is licenced under the GPL.   * This code is licensed under the GPL.
  */   */
   
 #include "sysbus.h"  #include "sysbus.h"
 #include "arm-misc.h"  #include "arm-misc.h"
 #include "sysemu.h"  
 #include "loader.h"  #include "loader.h"
 #include "elf.h"  #include "elf.h"
   
 /* Bitbanded IO.  Each word corresponds to a single bit.  */  /* Bitbanded IO.  Each word corresponds to a single bit.  */
   
 /* Get the byte address of the real memory for a bitband acess.  */  /* Get the byte address of the real memory for a bitband access.  */
 static inline uint32_t bitband_addr(void * opaque, uint32_t addr)  static inline uint32_t bitband_addr(void * opaque, uint32_t addr)
 {  {
     uint32_t res;      uint32_t res;
Line 107  static void bitband_writel(void *opaque, Line 106  static void bitband_writel(void *opaque,
     cpu_physical_memory_write(addr, (uint8_t *)&v, 4);      cpu_physical_memory_write(addr, (uint8_t *)&v, 4);
 }  }
   
 static CPUReadMemoryFunc * const bitband_readfn[] = {  static const MemoryRegionOps bitband_ops = {
    bitband_readb,      .old_mmio = {
    bitband_readw,          .read = { bitband_readb, bitband_readw, bitband_readl, },
    bitband_readl          .write = { bitband_writeb, bitband_writew, bitband_writel, },
 };      },
       .endianness = DEVICE_NATIVE_ENDIAN,
 static CPUWriteMemoryFunc * const bitband_writefn[] = {  
    bitband_writeb,  
    bitband_writew,  
    bitband_writel  
 };  };
   
 typedef struct {  typedef struct {
     SysBusDevice busdev;      SysBusDevice busdev;
       MemoryRegion iomem;
     uint32_t base;      uint32_t base;
 } BitBandState;  } BitBandState;
   
 static int bitband_init(SysBusDevice *dev)  static int bitband_init(SysBusDevice *dev)
 {  {
     BitBandState *s = FROM_SYSBUS(BitBandState, dev);      BitBandState *s = FROM_SYSBUS(BitBandState, dev);
     int iomemtype;  
   
     iomemtype = cpu_register_io_memory(bitband_readfn, bitband_writefn,      memory_region_init_io(&s->iomem, &bitband_ops, &s->base, "bitband",
                                        &s->base);                            0x02000000);
     sysbus_init_mmio(dev, 0x02000000, iomemtype);      sysbus_init_mmio(dev, &s->iomem);
     return 0;      return 0;
 }  }
   
Line 154  static void armv7m_bitband_init(void) Line 149  static void armv7m_bitband_init(void)
   
 static void armv7m_reset(void *opaque)  static void armv7m_reset(void *opaque)
 {  {
     cpu_reset((CPUState *)opaque);      cpu_state_reset((CPUARMState *)opaque);
 }  }
   
 /* Init CPU and memory for a v7-M based board.  /* Init CPU and memory for a v7-M based board.
    flash_size and sram_size are in kb.     flash_size and sram_size are in kb.
    Returns the NVIC array.  */     Returns the NVIC array.  */
   
 qemu_irq *armv7m_init(int flash_size, int sram_size,  qemu_irq *armv7m_init(MemoryRegion *address_space_mem,
                         int flash_size, int sram_size,
                       const char *kernel_filename, const char *cpu_model)                        const char *kernel_filename, const char *cpu_model)
 {  {
     CPUState *env;      CPUARMState *env;
     DeviceState *nvic;      DeviceState *nvic;
     /* FIXME: make this local state.  */      /* FIXME: make this local state.  */
     static qemu_irq pic[64];      static qemu_irq pic[64];
Line 174  qemu_irq *armv7m_init(int flash_size, in Line 170  qemu_irq *armv7m_init(int flash_size, in
     uint64_t lowaddr;      uint64_t lowaddr;
     int i;      int i;
     int big_endian;      int big_endian;
       MemoryRegion *sram = g_new(MemoryRegion, 1);
       MemoryRegion *flash = g_new(MemoryRegion, 1);
       MemoryRegion *hack = g_new(MemoryRegion, 1);
   
     flash_size *= 1024;      flash_size *= 1024;
     sram_size *= 1024;      sram_size *= 1024;
Line 199  qemu_irq *armv7m_init(int flash_size, in Line 198  qemu_irq *armv7m_init(int flash_size, in
 #endif  #endif
   
     /* Flash programming is done via the SCU, so pretend it is ROM.  */      /* Flash programming is done via the SCU, so pretend it is ROM.  */
     cpu_register_physical_memory(0, flash_size,      memory_region_init_ram(flash, "armv7m.flash", flash_size);
                                  qemu_ram_alloc(NULL, "armv7m.flash",      vmstate_register_ram_global(flash);
                                                 flash_size) | IO_MEM_ROM);      memory_region_set_readonly(flash, true);
     cpu_register_physical_memory(0x20000000, sram_size,      memory_region_add_subregion(address_space_mem, 0, flash);
                                  qemu_ram_alloc(NULL, "armv7m.sram",      memory_region_init_ram(sram, "armv7m.sram", sram_size);
                                                 sram_size) | IO_MEM_RAM);      vmstate_register_ram_global(sram);
       memory_region_add_subregion(address_space_mem, 0x20000000, sram);
     armv7m_bitband_init();      armv7m_bitband_init();
   
     nvic = qdev_create(NULL, "armv7m_nvic");      nvic = qdev_create(NULL, "armv7m_nvic");
Line 237  qemu_irq *armv7m_init(int flash_size, in Line 237  qemu_irq *armv7m_init(int flash_size, in
     /* Hack to map an additional page of ram at the top of the address      /* Hack to map an additional page of ram at the top of the address
        space.  This stops qemu complaining about executing code outside RAM         space.  This stops qemu complaining about executing code outside RAM
        when returning from an exception.  */         when returning from an exception.  */
     cpu_register_physical_memory(0xfffff000, 0x1000,      memory_region_init_ram(hack, "armv7m.hack", 0x1000);
                                  qemu_ram_alloc(NULL, "armv7m.hack",       vmstate_register_ram_global(hack);
                                                 0x1000) | IO_MEM_RAM);      memory_region_add_subregion(address_space_mem, 0xfffff000, hack);
   
     qemu_register_reset(armv7m_reset, env);      qemu_register_reset(armv7m_reset, env);
     return pic;      return pic;
 }  }
   
 static SysBusDeviceInfo bitband_info = {  static Property bitband_properties[] = {
     .init = bitband_init,      DEFINE_PROP_UINT32("base", BitBandState, base, 0),
     .qdev.name  = "ARM,bitband-memory",      DEFINE_PROP_END_OF_LIST(),
     .qdev.size  = sizeof(BitBandState),  };
     .qdev.props = (Property[]) {  
         DEFINE_PROP_UINT32("base", BitBandState, base, 0),  static void bitband_class_init(ObjectClass *klass, void *data)
         DEFINE_PROP_END_OF_LIST(),  {
     }      DeviceClass *dc = DEVICE_CLASS(klass);
       SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
   
       k->init = bitband_init;
       dc->props = bitband_properties;
   }
   
   static TypeInfo bitband_info = {
       .name          = "ARM,bitband-memory",
       .parent        = TYPE_SYS_BUS_DEVICE,
       .instance_size = sizeof(BitBandState),
       .class_init    = bitband_class_init,
 };  };
   
 static void armv7m_register_devices(void)  static void armv7m_register_types(void)
 {  {
     sysbus_register_withprop(&bitband_info);      type_register_static(&bitband_info);
 }  }
   
 device_init(armv7m_register_devices)  type_init(armv7m_register_types)

Removed from v.1.1.1.5  
changed lines
  Added in v.1.1.1.9


unix.superglobalmegacorp.com