Diff for /qemu/hw/etraxfs.c between versions 1.1.1.5 and 1.1.1.6

version 1.1.1.5, 2018/04/24 17:38:52 version 1.1.1.6, 2018/04/24 18:29:31
Line 30 Line 30
 #include "etraxfs.h"  #include "etraxfs.h"
 #include "loader.h"  #include "loader.h"
 #include "elf.h"  #include "elf.h"
   #include "cris-boot.h"
   
 #define FLASH_SIZE 0x2000000  #define FLASH_SIZE 0x2000000
 #define INTMEM_SIZE (128 * 1024)  #define INTMEM_SIZE (128 * 1024)
   
 static uint32_t bootstrap_pc;  static struct cris_load_info li;
   
 static void main_cpu_reset(void *opaque)  static void flash_cpu_reset(void *opaque)
 {  {
     CPUState *env = opaque;      CPUState *env = opaque;
     cpu_reset(env);      cpu_reset(env);
   
     env->pc = bootstrap_pc;  
 }  }
   
 static  static
Line 56  void bareetraxfs_init (ram_addr_t ram_si Line 55  void bareetraxfs_init (ram_addr_t ram_si
     qemu_irq irq[30], nmi[2], *cpu_irq;       qemu_irq irq[30], nmi[2], *cpu_irq; 
     void *etraxfs_dmac;      void *etraxfs_dmac;
     struct etraxfs_dma_client *eth[2] = {NULL, NULL};      struct etraxfs_dma_client *eth[2] = {NULL, NULL};
     int kernel_size;  
     DriveInfo *dinfo;      DriveInfo *dinfo;
     int i;      int i;
     ram_addr_t phys_ram;      ram_addr_t phys_ram;
Line 68  void bareetraxfs_init (ram_addr_t ram_si Line 66  void bareetraxfs_init (ram_addr_t ram_si
         cpu_model = "crisv32";          cpu_model = "crisv32";
     }      }
     env = cpu_init(cpu_model);      env = cpu_init(cpu_model);
     qemu_register_reset(main_cpu_reset, env);  
   
     /* allocate RAM */      /* allocate RAM */
     phys_ram = qemu_ram_alloc(ram_size);      phys_ram = qemu_ram_alloc(NULL, "etraxfs.ram", ram_size);
     cpu_register_physical_memory(0x40000000, ram_size, phys_ram | IO_MEM_RAM);      cpu_register_physical_memory(0x40000000, ram_size, phys_ram | IO_MEM_RAM);
   
     /* The ETRAX-FS has 128Kb on chip ram, the docs refer to it as the       /* The ETRAX-FS has 128Kb on chip ram, the docs refer to it as the 
        internal memory.  */         internal memory.  */
     phys_intmem = qemu_ram_alloc(INTMEM_SIZE);      phys_intmem = qemu_ram_alloc(NULL, "etraxfs.chipram", INTMEM_SIZE);
     cpu_register_physical_memory(0x38000000, INTMEM_SIZE,      cpu_register_physical_memory(0x38000000, INTMEM_SIZE,
                                  phys_intmem | IO_MEM_RAM);                                   phys_intmem | IO_MEM_RAM);
   
   
     phys_flash = qemu_ram_alloc(FLASH_SIZE);      phys_flash = qemu_ram_alloc(NULL, "etraxfs.flash", FLASH_SIZE);
     dinfo = drive_get(IF_PFLASH, 0, 0);      dinfo = drive_get(IF_PFLASH, 0, 0);
     pflash_cfi02_register(0x0, phys_flash,      pflash_cfi02_register(0x0, phys_flash,
                           dinfo ? dinfo->bdrv : NULL, (64 * 1024),                            dinfo ? dinfo->bdrv : NULL, (64 * 1024),
                           FLASH_SIZE >> 16,                            FLASH_SIZE >> 16,
                           1, 2, 0x0000, 0x0000, 0x0000, 0x0000,                            1, 2, 0x0000, 0x0000, 0x0000, 0x0000,
                           0x555, 0x2aa);                            0x555, 0x2aa, 0);
     cpu_irq = cris_pic_init_cpu(env);      cpu_irq = cris_pic_init_cpu(env);
     dev = qdev_create(NULL, "etraxfs,pic");      dev = qdev_create(NULL, "etraxfs,pic");
     /* FIXME: Is there a proper way to signal vectors to the CPU core?  */      /* FIXME: Is there a proper way to signal vectors to the CPU core?  */
Line 132  void bareetraxfs_init (ram_addr_t ram_si Line 129  void bareetraxfs_init (ram_addr_t ram_si
     }      }
   
     if (kernel_filename) {      if (kernel_filename) {
         uint64_t entry, high;          li.image_filename = kernel_filename;
         int kcmdline_len;          li.cmdline = kernel_cmdline;
           cris_load_image(env, &li);
         /* Boots a kernel elf binary, os/linux-2.6/vmlinux from the axis       } else {
            devboard SDK.  */          if (!dinfo) {
         kernel_size = load_elf(kernel_filename, -0x80000000LL,              fprintf(stderr,
                                &entry, NULL, &high, 0, ELF_MACHINE, 0);                      "Provide a kernel image or a flash image to boot from.\n");
         bootstrap_pc = entry;             exit(1);
         if (kernel_size < 0) {  
             /* Takes a kimage from the axis devboard SDK.  */  
             kernel_size = load_image_targphys(kernel_filename, 0x40004000,  
                                               ram_size);  
             bootstrap_pc = 0x40004000;  
             env->regs[9] = 0x40004000 + kernel_size;  
         }          }
         env->regs[8] = 0x56902387; /* RAM init magic.  */  
   
         if (kernel_cmdline && (kcmdline_len = strlen(kernel_cmdline))) {          /* Nothing more to do for flash images, those boot from addr 0.  */
             if (kcmdline_len > 256) {          qemu_register_reset(flash_cpu_reset, env);
                 fprintf(stderr, "Too long CRIS kernel cmdline (max 256)\n");  
                 exit(1);  
             }  
             /* Let the kernel know we are modifying the cmdline.  */  
             env->regs[10] = 0x87109563;  
             env->regs[11] = 0x40000000;  
             pstrcpy_targphys("cmdline", env->regs[11], 256, kernel_cmdline);  
         }  
     }      }
     env->pc = bootstrap_pc;  
   
     printf ("pc =%x\n", env->pc);  
     printf ("ram size =%ld\n", ram_size);  
 }  }
   
 static QEMUMachine bareetraxfs_machine = {  static QEMUMachine bareetraxfs_machine = {

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


unix.superglobalmegacorp.com