| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- --- a/arch/cris/arch-v10/lib/hw_settings.S
- +++ b/arch/cris/arch-v10/lib/hw_settings.S
- @@ -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
- --- a/arch/cris/arch-v10/drivers/axisflashmap.c
- +++ b/arch/cris/arch-v10/drivers/axisflashmap.c
- @@ -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;
|