1 Index: linux-2.6.25.4/arch/cris/arch-v10/lib/hw_settings.S
2 ===================================================================
3 --- linux-2.6.25.4.orig/arch/cris/arch-v10/lib/hw_settings.S
4 +++ linux-2.6.25.4/arch/cris/arch-v10/lib/hw_settings.S
8 .dword 0 ; No more register values
9 + .ascii "ACME_PART_MAGIC"
11 Index: linux-2.6.25.4/arch/cris/arch-v10/drivers/axisflashmap.c
12 ===================================================================
13 --- linux-2.6.25.4.orig/arch/cris/arch-v10/drivers/axisflashmap.c
14 +++ linux-2.6.25.4/arch/cris/arch-v10/drivers/axisflashmap.c
15 @@ -113,7 +113,7 @@ static struct map_info map_cse1 = {
17 /* If no partition-table was found, we use this default-set. */
18 #define MAX_PARTITIONS 7
19 -#define NUM_DEFAULT_PARTITIONS 3
20 +#define NUM_DEFAULT_PARTITIONS 2
23 * Default flash size is 2MB. CONFIG_ETRAX_PTABLE_SECTOR is most likely the
24 @@ -122,19 +122,14 @@ static struct map_info map_cse1 = {
26 static struct mtd_partition axis_default_partitions[NUM_DEFAULT_PARTITIONS] = {
28 - .name = "boot firmware",
29 - .size = CONFIG_ETRAX_PTABLE_SECTOR,
34 - .size = 0x200000 - (6 * CONFIG_ETRAX_PTABLE_SECTOR),
35 - .offset = CONFIG_ETRAX_PTABLE_SECTOR
40 - .name = "filesystem",
41 - .size = 5 * CONFIG_ETRAX_PTABLE_SECTOR,
42 - .offset = 0x200000 - (5 * CONFIG_ETRAX_PTABLE_SECTOR)
49 @@ -281,6 +276,11 @@ static int __init init_axis_flash(void)
50 struct partitiontable_entry *ptable;
51 int use_default_ptable = 1; /* Until proven otherwise. */
52 const char pmsg[] = " /dev/flash%d at 0x%08x, size 0x%08x\n";
53 + unsigned int kernel_part_size = 0;
54 + unsigned char *flash_mem = (unsigned char*)(FLASH_CACHED_ADDR);
55 + unsigned int flash_scan_count = 0;
56 + const char *part_magic = "ACME_PART_MAGIC";
57 + unsigned int magic_len = strlen(part_magic);
59 if (!(mymtd = flash_probe())) {
60 /* There's no reason to use this module if no flash chip can
61 @@ -292,6 +292,31 @@ static int __init init_axis_flash(void)
62 mymtd->name, mymtd->size);
63 axisflash_mtd = mymtd;
65 + /* scan flash to findout where out partition starts */
67 + printk(KERN_INFO "Scanning flash for end of kernel magic\n");
68 + for(flash_scan_count = 0; flash_scan_count < 100000; flash_scan_count++){
69 + if(strncmp(&flash_mem[flash_scan_count], part_magic, magic_len - 1) == 0)
71 + kernel_part_size = flash_mem[flash_scan_count + magic_len ];
72 + kernel_part_size <<= 8;
73 + kernel_part_size += flash_mem[flash_scan_count + magic_len + 2];
74 + kernel_part_size <<= 8;
75 + kernel_part_size += flash_mem[flash_scan_count + magic_len + 1];
76 + kernel_part_size <<= 8;
77 + kernel_part_size += flash_mem[flash_scan_count + magic_len + 3];
78 + printk(KERN_INFO "Kernel ends at 0x%.08X\n", kernel_part_size);
79 + flash_scan_count = 1100000;
84 + if(kernel_part_size){
85 + kernel_part_size = (kernel_part_size & 0xffff0000);
86 + axis_default_partitions[0].size = kernel_part_size;
87 + axis_default_partitions[1].size = mymtd->size - axis_default_partitions[0].size;
88 + axis_default_partitions[1].offset = axis_default_partitions[0].size;
92 mymtd->owner = THIS_MODULE;