diff options
Diffstat (limited to 'hw/mainstone.c')
-rw-r--r-- | hw/mainstone.c | 56 |
1 files changed, 25 insertions, 31 deletions
diff --git a/hw/mainstone.c b/hw/mainstone.c index 63f17840de..5856791a45 100644 --- a/hw/mainstone.c +++ b/hw/mainstone.c @@ -64,19 +64,24 @@ static void mainstone_common_init(int ram_size, int vga_ram_size, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model, enum mainstone_model_e model, int arm_id) { - uint32_t mainstone_ram = 0x04000000; - uint32_t mainstone_rom = 0x00800000; + uint32_t mainstone_ram = 0x04000000; + uint32_t mainstone_rom = 0x00800000; + uint32_t mainstone_flash = 0x02000000; + uint32_t sector_len = 256 * 1024; + target_phys_addr_t mainstone_flash_base[] = { MST_FLASH_0, MST_FLASH_1 }; struct pxa2xx_state_s *cpu; qemu_irq *mst_irq; - int index; + int i, index; if (!cpu_model) cpu_model = "pxa270-c5"; /* Setup CPU & memory */ - if (ram_size < mainstone_ram + mainstone_rom + PXA2XX_INTERNAL_SIZE) { + if (ram_size < mainstone_ram + mainstone_rom + 2 * mainstone_flash + + PXA2XX_INTERNAL_SIZE) { fprintf(stderr, "This platform requires %i bytes of memory\n", - mainstone_ram + mainstone_rom + PXA2XX_INTERNAL_SIZE); + mainstone_ram + mainstone_rom + 2 * mainstone_flash + + PXA2XX_INTERNAL_SIZE); exit(1); } @@ -88,32 +93,21 @@ static void mainstone_common_init(int ram_size, int vga_ram_size, cpu->env->regs[15] = PXA2XX_SDRAM_BASE; /* There are two 32MiB flash devices on the board */ - index = drive_get_index(IF_PFLASH, 0, 0); - if (index == -1) { - fprintf(stderr, "Two flash images must be given with the " - "'pflash' parameter\n"); - exit(1); - } - if (!pflash_cfi01_register(MST_FLASH_0, - mainstone_ram + PXA2XX_INTERNAL_SIZE, - drives_table[index].bdrv, - 256 * 1024, 128, 4, 0, 0, 0, 0)) { - fprintf(stderr, "qemu: Error registering flash memory.\n"); - exit(1); - } - - index = drive_get_index(IF_PFLASH, 0, 1); - if (index == -1) { - fprintf(stderr, "Two flash images must be given with the " - "'pflash' parameter\n"); - exit(1); - } - if (!pflash_cfi01_register(MST_FLASH_1, - mainstone_ram + PXA2XX_INTERNAL_SIZE, - drives_table[index].bdrv, - 256 * 1024, 128, 4, 0, 0, 0, 0)) { - fprintf(stderr, "qemu: Error registering flash memory.\n"); - exit(1); + for (i = 0; i < 2; i ++) { + index = drive_get_index(IF_PFLASH, 0, i); + if (index == -1) { + fprintf(stderr, "Two flash images must be given with the " + "'pflash' parameter\n"); + exit(1); + } + + if (!pflash_cfi01_register(mainstone_flash_base[i], + qemu_ram_alloc(mainstone_flash), + drives_table[index].bdrv, sector_len, + mainstone_flash / sector_len, 4, 0, 0, 0, 0)) { + fprintf(stderr, "qemu: Error registering flash memory.\n"); + exit(1); + } } mst_irq = mst_irq_init(cpu, MST_FPGA_PHYS, PXA2XX_PIC_GPIO_0); |