From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KpU92-0004C0-27 for qemu-devel@nongnu.org; Mon, 13 Oct 2008 16:36:00 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KpU8z-0004Bo-8O for qemu-devel@nongnu.org; Mon, 13 Oct 2008 16:35:58 -0400 Received: from [199.232.76.173] (port=37825 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KpU8z-0004Bl-2q for qemu-devel@nongnu.org; Mon, 13 Oct 2008 16:35:57 -0400 Received: from rv-out-0708.google.com ([209.85.198.248]:64571) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KpU8y-0000Ow-GB for qemu-devel@nongnu.org; Mon, 13 Oct 2008 16:35:56 -0400 Received: by rv-out-0708.google.com with SMTP id f25so1610770rvb.22 for ; Mon, 13 Oct 2008 13:35:54 -0700 (PDT) Message-ID: <34115e380810131335u7dd35f65g2a5203adbb5f585a@mail.gmail.com> Date: Mon, 13 Oct 2008 22:35:54 +0200 From: "Cedric Hombourger" Subject: Re: [Qemu-devel] [patch 1/2] Add Flash support to the Versatile PB platform In-Reply-To: <20081013082655.952440747@free-electrons.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <20081013082238.042379564@free-electrons.com> <20081013082655.952440747@free-electrons.com> 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: Thomas Petazzoni , michael@free-electrons.com Hi Thomas, Well done! I have had a modified qemu for sometime now to do this as well but never got to the point where the Linux kernel could mount the root file-system from flash. I quickly gave a try to your patch using the latest svn and it seems to be the same (i.e. u-boot ok, kernel gets loaded from flash to memory and then boots but it fails to mount a root file-system). I have started to look into this but not yet deep enough to understand what is going on.... my kernel seems to be reading zeros instead of the cramfs magic number while the address that I am reading from seems to be correct. Is this something that you have tested and works for you? I will be happy to help if you also have issues. Cedric 2008/10/13 Thomas Petazzoni : > 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 == 0 && > !machine->nodisk_ok && nb_drives_opt == 0) > help(1); > > Signed-off-by: Thomas Petazzoni > --- > hw/versatilepb.c | 43 ++++++++++++++++++++++++++++++++++++------- > 1 file changed, 36 insertions(+), 7 deletions(-) > > Index: qemu/hw/versatilepb.c > =================================================================== > --- 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" > > /* Primary interrupt controller. */ > > @@ -159,6 +160,10 @@ > > static struct arm_boot_info versatile_binfo; > > +#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_cmdline, > @@ -174,6 +179,7 @@ > int n; > int done_smc = 0; > int index; > + int hasflash = 0; > > if (!cpu_model) > cpu_model = "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); > > arm_sysctl_init(0x10000000, 0x41007004); > pic = arm_pic_init_cpu(env); > @@ -249,6 +256,21 @@ > /* Add PL031 Real Time Clock. */ > pl031_init(0x101e8000,pic[10]); > > + index = drive_get_index(IF_PFLASH, 0, 0); > + if (index != -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 = 1; > + } > + > /* Memory map for Versatile/PB: */ > /* 0x10000000 System registers. */ > /* 0x10001000 PCI controller config registers. */ > @@ -285,12 +307,17 @@ > /* 0x101f3000 UART2. */ > /* 0x101f4000 SSPI. */ > > - versatile_binfo.ram_size = ram_size; > - versatile_binfo.kernel_filename = kernel_filename; > - versatile_binfo.kernel_cmdline = kernel_cmdline; > - versatile_binfo.initrd_filename = initrd_filename; > - versatile_binfo.board_id = board_id; > - arm_load_kernel(env, &versatile_binfo); > + if (kernel_filename) { > + versatile_binfo.ram_size = ram_size; > + versatile_binfo.kernel_filename = kernel_filename; > + versatile_binfo.kernel_cmdline = kernel_cmdline; > + versatile_binfo.initrd_filename = initrd_filename; > + versatile_binfo.board_id = board_id; > + arm_load_kernel(env, &versatile_binfo); > + } > + else if (hasflash) { > + env->regs[15] = VERSATILE_FLASH_ADDR; > + } > } > > static void vpb_init(ram_addr_t ram_size, int vga_ram_size, > @@ -321,6 +348,7 @@ > .init = vpb_init, > .use_scsi = 1, > .max_cpus = 1, > + .ram_require = VERSATILE_FLASH_SIZE, > }; > > QEMUMachine versatileab_machine = { > @@ -329,4 +357,5 @@ > .init = vab_init, > .use_scsi = 1, > .max_cpus = 1, > + .ram_require = VERSATILE_FLASH_SIZE, > }; > > -- > Thomas Petazzoni, Free Electrons > Kernel, drivers and embedded Linux development, > consulting, training and support. > http://free-electrons.com > > >