diff options
author | blogic <blogic@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2008-05-03 19:40:15 +0000 |
---|---|---|
committer | blogic <blogic@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2008-05-03 19:40:15 +0000 |
commit | b5759397ba3e57a88d70ecac177a29d6620fe8cd (patch) | |
tree | 6f0c7e0ab874d0188435df51dc244b2d3660dae5 | |
parent | 861113bc9759549df046c92938ea6d8c91c4a711 (diff) |
implement openwrt compliant flashmap
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@11035 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r-- | target/linux/etrax/patches/201-flashsize.patch | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/target/linux/etrax/patches/201-flashsize.patch b/target/linux/etrax/patches/201-flashsize.patch new file mode 100644 index 000000000..4982963d3 --- /dev/null +++ b/target/linux/etrax/patches/201-flashsize.patch @@ -0,0 +1,92 @@ +Index: linux-2.6.25.1/arch/cris/arch-v10/lib/hw_settings.S +=================================================================== +--- linux-2.6.25.1.orig/arch/cris/arch-v10/lib/hw_settings.S 2008-05-03 20:25:16.000000000 +0100 ++++ linux-2.6.25.1/arch/cris/arch-v10/lib/hw_settings.S 2008-05-03 20:25:35.000000000 +0100 +@@ -60,3 +60,5 @@ + .dword R_PORT_PB_SET + .dword PB_SET_VALUE + .dword 0 ; No more register values ++ .ascii "ACME_PART_MAGIC" ++ .dword 0xdeadc0de +Index: linux-2.6.25.1/arch/cris/arch-v10/drivers/axisflashmap.c +=================================================================== +--- linux-2.6.25.1.orig/arch/cris/arch-v10/drivers/axisflashmap.c 2008-05-03 20:27:28.000000000 +0100 ++++ linux-2.6.25.1/arch/cris/arch-v10/drivers/axisflashmap.c 2008-05-03 20:34:54.000000000 +0100 +@@ -113,7 +113,7 @@ + + /* If no partition-table was found, we use this default-set. */ + #define MAX_PARTITIONS 7 +-#define NUM_DEFAULT_PARTITIONS 3 ++#define NUM_DEFAULT_PARTITIONS 2 + + /* + * Default flash size is 2MB. CONFIG_ETRAX_PTABLE_SECTOR is most likely the +@@ -122,19 +122,14 @@ + */ + static struct mtd_partition axis_default_partitions[NUM_DEFAULT_PARTITIONS] = { + { +- .name = "boot firmware", +- .size = CONFIG_ETRAX_PTABLE_SECTOR, +- .offset = 0 +- }, +- { + .name = "kernel", +- .size = 0x200000 - (6 * CONFIG_ETRAX_PTABLE_SECTOR), +- .offset = CONFIG_ETRAX_PTABLE_SECTOR ++ .size = 0x00, ++ .offset = 0 + }, + { +- .name = "filesystem", +- .size = 5 * CONFIG_ETRAX_PTABLE_SECTOR, +- .offset = 0x200000 - (5 * CONFIG_ETRAX_PTABLE_SECTOR) ++ .name = "rootfs", ++ .size = 0x200000 , ++ .offset = 0x200000 + } + }; + +@@ -281,6 +276,11 @@ + struct partitiontable_entry *ptable; + int use_default_ptable = 1; /* Until proven otherwise. */ + const char pmsg[] = " /dev/flash%d at 0x%08x, size 0x%08x\n"; ++ unsigned int kernel_part_size = 0; ++ unsigned char *flash_mem = (unsigned char*)(FLASH_CACHED_ADDR); ++ unsigned int flash_scan_count = 0; ++ const char *part_magic = "ACME_PART_MAGIC"; ++ unsigned int magic_len = strlen(part_magic); + + if (!(mymtd = flash_probe())) { + /* There's no reason to use this module if no flash chip can +@@ -292,6 +292,31 @@ + mymtd->name, mymtd->size); + axisflash_mtd = mymtd; + } ++ /* scan flash to findout where out partition starts */ ++ ++ printk(KERN_INFO "Scanning flash for end of kernel magic\n"); ++ for(flash_scan_count = 0; flash_scan_count < 100000; flash_scan_count++){ ++ if(strncmp(&flash_mem[flash_scan_count], part_magic, magic_len - 1) == 0) ++ { ++ kernel_part_size = flash_mem[flash_scan_count + magic_len ]; ++ kernel_part_size <<= 8; ++ kernel_part_size += flash_mem[flash_scan_count + magic_len + 2]; ++ kernel_part_size <<= 8; ++ kernel_part_size += flash_mem[flash_scan_count + magic_len + 1]; ++ kernel_part_size <<= 8; ++ kernel_part_size += flash_mem[flash_scan_count + magic_len + 3]; ++ printk(KERN_INFO "Kernel ends at 0x%.08X\n", kernel_part_size); ++ flash_scan_count = 1100000; ++ } ++ } ++ ++ ++ if(kernel_part_size){ ++ kernel_part_size = (kernel_part_size & 0xffff0000); ++ axis_default_partitions[0].size = kernel_part_size; ++ axis_default_partitions[1].size = mymtd->size - axis_default_partitions[0].size; ++ axis_default_partitions[1].offset = axis_default_partitions[0].size; ++ } + + if (mymtd) { + mymtd->owner = THIS_MODULE; |