From: Tim R. <tim...@us...> - 2002-05-02 04:17:01
|
Update of /cvsroot/blob/blob/src/blob In directory usw-pr-cvs1:/tmp/cvs-serv1097/src/blob Modified Files: flash.c load_kernel.c main.c Log Message: fix "reload kernel" for non-jffs2 systems Index: flash.c =================================================================== RCS file: /cvsroot/blob/blob/src/blob/flash.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -d -r1.16 -r1.17 --- flash.c 30 Apr 2002 23:28:47 -0000 1.16 +++ flash.c 2 May 2002 04:16:58 -0000 1.17 @@ -336,6 +336,14 @@ } +/* given an address, return the size of that flash block */ +int flash_get_block_size(u32 address) +{ + int block = find_block(address); + if (block == -ERANGE) + return 0; + return flash_blocks[block].size; +} /* convert address range to range of flash blocks. returns 0 on Index: load_kernel.c =================================================================== RCS file: /cvsroot/blob/blob/src/blob/load_kernel.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- load_kernel.c 1 May 2002 00:02:10 -0000 1.7 +++ load_kernel.c 2 May 2002 04:16:58 -0000 1.8 @@ -38,6 +38,7 @@ #include <blob/error.h> #include <blob/load_kernel.h> #include <blob/util.h> +#include <blob/flash.h> #ifdef CONFIG_CRAMFS_SUPPORT extern struct kernel_loader cramfs_load; @@ -73,13 +74,22 @@ printf("."); } -int load_kernel_part(blob_status_t *blob_status, struct part_info *part) +int load_kernel(blob_status_t *blob_status) { int i; u32 size; - u32 digest[4]; + struct part_info part; - for (i = 0; loader[i] && !loader[i]->check_magic(part); i++) +#if defined(CONFIG_CRAMFS_SUPPORT) || defined(CONFIG_ZIMAGE_SUPPORT) || defined(CONFIG_JFFS2_SUPPORT) + part.offset = (char *) RAMDISK_FLASH_BASE; + part.size = RAMDISK_FLASH_LEN; +#else + part.offset = (char *) KERNEL_FLASH_BASE; + part.size = KERNEL_FLASH_LEN; +#endif + part.erasesize = flash_get_block_size(part.offset); + + for (i = 0; loader[i] && !loader[i]->check_magic(&part); i++) ; if (!loader[i]) { @@ -90,7 +100,7 @@ } else { printf("loading kernel from %s ...", loader[i]->name); if ((size = loader[i]->load_kernel((u32 *)KERNEL_RAM_BASE, - part, "/boot/linux")) == 0) { + &part, "/boot/linux")) == 0) { eprintf("error loading kernel!\n"); return(EINVAL); } @@ -102,47 +112,3 @@ printf("loaded 0x%08x (%d) bytes\n", size, size); return(ENOERROR); } - -int load_kernel(blob_status_t *blob_status) -{ - struct part_info part; - -/* FIXME this is hardcoded, should use flash[].size */ -#define MAIN_BLOCK_SIZE 2 * 64 * 1024 - part.erasesize = MAIN_BLOCK_SIZE; - part.size = KERNEL_FLASH_LEN; - part.offset = (char *) KERNEL_FLASH_BASE; - - return load_kernel_part(blob_status, &part); -} - -#if defined(CONFIG_CRAMFS_SUPPORT) || defined(CONFIG_ZIMAGE_SUPPORT) || defined(CONFIG_JFFS2_SUPPORT) -static int loadkernel_cmd(int argc, char *argv[]) -{ - struct part_info part; - static blob_status_t blob_status; - -/* FIXME this is hardcoded, should use flash[].size */ -#define RAMDISK_BLOCK_SIZE 2 * 64 * 1024 - part.erasesize = RAMDISK_BLOCK_SIZE; - part.size = RAMDISK_FLASH_LEN; - part.offset = (char *) RAMDISK_FLASH_BASE; - blob_status.kernelSize = 0; - return load_kernel_part(&blob_status, &part); -} - -static char loadkernel_help[] = "loadkernel\n" -"Use dynamic methods: " -#ifdef CONFIG_CRAMFS_SUPPORT -"cramfs " -#endif -#ifdef CONFIG_ZIMAGE_SUPPORT -"zImage " -#endif -#ifdef CONFIG_JFFS2_SUPPORT -"jffs2 " -#endif -"to load the kernel from ramdisk\n"; - -__commandlist(loadkernel_cmd, "loadkernel", loadkernel_help); -#endif Index: main.c =================================================================== RCS file: /cvsroot/blob/blob/src/blob/main.c,v retrieving revision 1.48 retrieving revision 1.49 diff -u -d -r1.48 -r1.49 --- main.c 1 May 2002 08:58:04 -0000 1.48 +++ main.c 2 May 2002 04:16:58 -0000 1.49 @@ -129,8 +129,7 @@ /* Load kernel and ramdisk from flash to RAM */ do_reload("blob"); - /* do_reload("kernel"); does not work for jffs2 but the next line does?!? TimRiker */ - parse_command("load kernel"); + do_reload("kernel"); if(blob_status.load_ramdisk) do_reload("ramdisk"); |