From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KoJ7y-0004ZU-Rd for qemu-devel@nongnu.org; Fri, 10 Oct 2008 10:38:03 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KoJ7w-0004WY-WF for qemu-devel@nongnu.org; Fri, 10 Oct 2008 10:38:01 -0400 Received: from [199.232.76.173] (port=60641 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KoJ7w-0004WN-IQ for qemu-devel@nongnu.org; Fri, 10 Oct 2008 10:38:00 -0400 Received: from mail.free-electrons.com ([88.191.76.200]:39794) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KoJ7w-0005ut-31 for qemu-devel@nongnu.org; Fri, 10 Oct 2008 10:38:00 -0400 Date: Fri, 10 Oct 2008 16:37:56 +0200 From: Thomas Petazzoni Subject: Re: [Qemu-devel] [patch 2/2] Add Flash support to the Versatile PB platform Message-ID: <20081010163756.2b884e48@surf> In-Reply-To: <200810101432.23151.paul@codesourcery.com> References: <20081010083602.692750032@free-electrons.com> <200810101402.18569.paul@codesourcery.com> <20081010151716.1407f4ba@surf> <200810101432.23151.paul@codesourcery.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: paul@codesourcery.com, michael@free-electrons.com Le Fri, 10 Oct 2008 14:32:22 +0100, Paul Brook a =C3=A9crit : > > Yes, makes sense. How should it behave when neither -kernel nor > > -pflash are present ? Just display an error message and exit ? >=20 > Yes. The following patch implements this, except that the case where neither -kernel nor -pflash are present is already handled by vl.c:main(), so we don't bother handling it again in the machine-specific code. Thanks a lot for your feedback ! Thomas --- Add Flash support to the Versatile PB platform This patch adds the emulation of the 64 MB Intel Flash present at address 0x34000000 on the ARM Versatile PB platform, with a 256 KB sector size. This flash emulation is enabled using the -pflash option. If a -pflash option is present but no -kernel option has been specified, Qemu starts execution at the flash starting address. If a -kernel option has been specified together with a -pflash option, then Qemu normally boots from the kernel (but the flash is still emulated, of course). The case where neither -kernel nor -pflash have been specified is already catched by the Qemu main function : if (!linux_boot && net_boot =3D=3D 0 && !machine->nodisk_ok && nb_drives_opt =3D=3D 0) help(1); Signed-off-by: Thomas Petazzoni --- hw/versatilepb.c | 43 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 7 deletions(-) Index: qemu/hw/versatilepb.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- qemu.orig/hw/versatilepb.c +++ qemu/hw/versatilepb.c @@ -15,6 +15,7 @@ #include "sysemu.h" #include "pci.h" #include "boards.h" +#include "flash.h" =20 /* Primary interrupt controller. */ =20 @@ -159,6 +160,10 @@ =20 static struct arm_boot_info versatile_binfo; =20 +#define VERSATILE_FLASH_ADDR 0x34000000 +#define VERSATILE_FLASH_SIZE (64 * 1024 * 1024) +#define VERSATILE_FLASH_SECT_SIZE (256 * 1024) + static void versatile_init(ram_addr_t ram_size, int vga_ram_size, const char *boot_device, DisplayState *ds, const char *kernel_filename, const char *kernel_cmd= line, @@ -174,6 +179,7 @@ int n; int done_smc =3D 0; int index; + int hasflash =3D 0; =20 if (!cpu_model) cpu_model =3D "arm926"; @@ -184,7 +190,8 @@ } /* ??? RAM should repeat to fill physical memory space. */ /* SDRAM at address zero. */ - cpu_register_physical_memory(0, ram_size, IO_MEM_RAM); + cpu_register_physical_memory(0, ram_size, + qemu_ram_alloc(ram_size) | IO_MEM_RAM); =20 arm_sysctl_init(0x10000000, 0x41007004); pic =3D arm_pic_init_cpu(env); @@ -249,6 +256,21 @@ /* Add PL031 Real Time Clock. */ pl031_init(0x101e8000,pic[10]); =20 + index =3D drive_get_index(IF_PFLASH, 0, 0); + if (index !=3D -1) { + if (!pflash_cfi01_register(VERSATILE_FLASH_ADDR, + qemu_ram_alloc(VERSATILE_FLASH_SIZE), + drives_table[index].bdrv, + VERSATILE_FLASH_SECT_SIZE, + VERSATILE_FLASH_SIZE / VERSATILE_FLASH_SECT_SIZE, + 4, 0, 0, 0, 0)) { + fprintf(stderr, "qemu: error registering flash memory.\n"); + exit(1); + } + + hasflash =3D 1; + } + /* Memory map for Versatile/PB: */ /* 0x10000000 System registers. */ /* 0x10001000 PCI controller config registers. */ @@ -285,12 +307,17 @@ /* 0x101f3000 UART2. */ /* 0x101f4000 SSPI. */ =20 - versatile_binfo.ram_size =3D ram_size; - versatile_binfo.kernel_filename =3D kernel_filename; - versatile_binfo.kernel_cmdline =3D kernel_cmdline; - versatile_binfo.initrd_filename =3D initrd_filename; - versatile_binfo.board_id =3D board_id; - arm_load_kernel(env, &versatile_binfo); + if (kernel_filename) { + versatile_binfo.ram_size =3D ram_size; + versatile_binfo.kernel_filename =3D kernel_filename; + versatile_binfo.kernel_cmdline =3D kernel_cmdline; + versatile_binfo.initrd_filename =3D initrd_filename; + versatile_binfo.board_id =3D board_id; + arm_load_kernel(env, &versatile_binfo); + } + else if (hasflash) { + env->regs[15] =3D VERSATILE_FLASH_ADDR; + } } =20 static void vpb_init(ram_addr_t ram_size, int vga_ram_size, @@ -321,6 +348,7 @@ .init =3D vpb_init, .use_scsi =3D 1, .max_cpus =3D 1, + .ram_require =3D VERSATILE_FLASH_SIZE, }; =20 QEMUMachine versatileab_machine =3D { @@ -329,4 +357,5 @@ .init =3D vab_init, .use_scsi =3D 1, .max_cpus =3D 1, + .ram_require =3D VERSATILE_FLASH_SIZE, }; --=20 Thomas Petazzoni, Free Electrons Kernel, drivers and embedded Linux development, consulting, training and support. http://free-electrons.com