Merge branch 'org.openembedded.dev' of git://git.openembedded.net/openembedded into...
[vuplus_openembedded] / packages / linux / linux-dm800 / linux-2.6.12-dm800-flash-layout.patch
1 diff -Naur stblinux-2.6.12-org/drivers/mtd/brcmnand/bcm7xxx-nand.c stblinux-2.6.12/drivers/mtd/brcmnand/bcm7xxx-nand.c
2 --- stblinux-2.6.12-org/drivers/mtd/brcmnand/bcm7xxx-nand.c     2008-02-28 18:40:17.000000000 +0100
3 +++ stblinux-2.6.12/drivers/mtd/brcmnand/bcm7xxx-nand.c 2008-02-28 18:45:03.000000000 +0100
4 @@ -78,19 +78,28 @@
5  
6  static struct mtd_partition bcm7XXX_nand_parts[] = 
7  {
8 -       { name: "rootfs",               offset: 0,                                      size: DEFAULT_ROOTFS_SIZE },    
9 -#ifdef CONFIG_MTD_ECM_PARTITION
10 -#define AVAIL1_PART    (1)
11 -#define OCAP_PART      (2)
12 -       { name: "avail1",               offset: DEFAULT_ROOTFS_SIZE,    size: DEFAULT_AVAIL1_SIZE },
13 -       { name: "ocap",         offset: DEFAULT_ROOTFS_SIZE+DEFAULT_AVAIL1_SIZE,        size: DEFAULT_OCAP_SIZE },      
14 -#endif
15 -       { name: "kernel",               offset: 0x00800000,                     size: 4<<20 },
16 -       { name: "cfe",          offset: 0x00C00000,                     size: 2<<20 },
17 -       { name: "nvm",          offset: 0x00E00000,                     size: 1<<20 },
18 -       /* BBT 1MB not mountable by anyone */
19 -       { name: "data",                 offset: 0x400000000,                    size: 0 },
20 -};
21 +               /* modified for Dreambox DM800 */
22 +       {
23 +               .name   = "complete",
24 +               .offset = 0,
25 +               .size   = 64*1024*1024
26 +       },
27 +       {
28 +               .name   = "loader",
29 +               .offset = 0,
30 +               .size   = 256*1024
31 +       },
32 +       {
33 +               .name   = "boot partition",
34 +               .offset = 256*1024,
35 +               .size   = (4*1024-256)*1024
36 +       },
37 +       {
38 +               .name   = "root partition",
39 +               .offset = 4*1024*1024,
40 +               .size   = 60*1024*1024
41 +       },
42 + };
43  
44  struct brcmnand_info {
45         struct mtd_info         mtd;
46 @@ -106,100 +115,6 @@
47  }
48  //EXPORT_SYMBOL(get_brcmnand_handle);
49  
50 -
51 -/* 
52 - * Size and offset are variable, depending on the size of the chip, but 
53 - * cfe_kernel always starts at 1FC0_0000 and is 4MB size.
54 - * The entire reserved area (kernel + CFE + BBT) occupies the last 8 MB of the flash.
55 - */
56 -static void __devinit 
57 -brcmnanddrv_setup_mtd_partitions(struct brcmnand_info* nandinfo, int* numParts)
58 -{
59 -       struct mtd_info* mtd = &nandinfo->mtd;
60 -       unsigned long size; 
61 -       int i = 0;
62 -       unsigned int ecm_size = DEFAULT_ECM_SIZE;
63 -       unsigned int ocap_size = DEFAULT_OCAP_SIZE;
64 -       unsigned int avail1_size = DEFAULT_AVAIL1_SIZE;
65 -
66 -       if (mtd->size <= (512<<20)) {
67 -               size = mtd->size;       // mtd->size may be different than nandinfo->size
68 -                                               // Relies on this being called after brcmnand_scan
69 -               *numParts = ARRAY_SIZE(bcm7XXX_nand_parts) - 1;
70 -       }
71 -       else {
72 -               size = 512 << 20;
73 -               *numParts = ARRAY_SIZE(bcm7XXX_nand_parts);
74 -       }
75 -
76 -#ifdef CONFIG_MTD_ECM_PARTITION
77 -       /* Do not generate AVAIL1 partition if usable flash size is less than 64MB */
78 -       if (size < (64<<20)) {
79 -               ecm_size = DEFAULT_OCAP_SIZE;
80 -               bcm7XXX_nand_parts[AVAIL1_PART].size = avail1_size = 0;
81 -               (*numParts)--;
82 -       }
83 -       else {
84 -               int factor = size / (64 << 20); // Remember size is capped at 512MB
85 -               
86 -               bcm7XXX_nand_parts[OCAP_PART].size = ocap_size = factor*DEFAULT_OCAP_SIZE;
87 -               bcm7XXX_nand_parts[AVAIL1_PART].size = avail1_size = factor*DEFAULT_AVAIL1_SIZE;
88 -               ecm_size = ocap_size + avail1_size;
89 -       }
90 -
91 -#endif
92 -       nandinfo->parts = bcm7XXX_nand_parts;
93 -       bcm7XXX_nand_parts[0].size = size - DEFAULT_RESERVED_SIZE - ecm_size;
94 -       bcm7XXX_nand_parts[0].oobsel = &mtd->oobinfo;
95 -printk("Part[%d] name=%s, size=%x, offset=%x\n", i, bcm7XXX_nand_parts[0].name, 
96 -bcm7XXX_nand_parts[0].size, bcm7XXX_nand_parts[0].offset);
97 -
98 -       for (i=1; i<  ARRAY_SIZE(bcm7XXX_nand_parts) - 1; i++) {
99 -#ifdef CONFIG_MTD_ECM_PARTITION
100 -               //if (0 == bcm7XXX_nand_parts[i].size)
101 -               //      continue;
102 -               /* Skip avail1 if size is less than 64 MB) */
103 -               if (0 == avail1_size && AVAIL1_PART == i) {
104 -                       bcm7XXX_nand_parts[i].offset = bcm7XXX_nand_parts[i-1].size + bcm7XXX_nand_parts[i-1].offset;
105 -                       continue;
106 -               }
107 -#endif
108 -               bcm7XXX_nand_parts[i].offset = bcm7XXX_nand_parts[i-1].size + bcm7XXX_nand_parts[i-1].offset;
109 -               // For now every partition uses the same oobinfo
110 -               bcm7XXX_nand_parts[i].oobsel = &mtd->oobinfo;
111 -printk("Part[%d] name=%s, size=%x, offset=%x\n", i, bcm7XXX_nand_parts[i].name, 
112 -bcm7XXX_nand_parts[i].size, bcm7XXX_nand_parts[i].offset);
113 -       }
114 -
115 -       
116 -       if  (mtd->size > (512 << 20)) { // For total flash size > 512MB, we must split the rootfs into 2 partitions
117 -               i = *numParts - 1;
118 -               bcm7XXX_nand_parts[i].offset = 512 << 20;
119 -               bcm7XXX_nand_parts[i].size = mtd->size - (513 << 20);
120 -               bcm7XXX_nand_parts[i].oobsel = &mtd->oobinfo;
121 -#ifdef CONFIG_MTD_ECM_PARTITION
122 -printk("Part[%d] name=%s, size=%x, offset=%x\n", avail1_size? i: i-1, bcm7XXX_nand_parts[i].name, 
123 -bcm7XXX_nand_parts[i].size, bcm7XXX_nand_parts[i].offset);
124 -#else
125 -printk("Part[%d] name=%s, size=%x, offset=%x\n", i, bcm7XXX_nand_parts[i].name, 
126 -bcm7XXX_nand_parts[i].size, bcm7XXX_nand_parts[i].offset);
127 -#endif
128 -
129 -       }
130 -
131 -#ifdef CONFIG_MTD_ECM_PARTITION
132 -       /* Shift partitions 1 up if avail1_size is 0 */
133 -       if (0 == avail1_size) {
134 -               for (i=AVAIL1_PART; i < *numParts; i++) {
135 -                       bcm7XXX_nand_parts[i].offset = bcm7XXX_nand_parts[i+1].offset;
136 -                       bcm7XXX_nand_parts[i].size = bcm7XXX_nand_parts[i+1].size;
137 -               }
138 -               bcm7XXX_nand_parts[*numParts].offset = 0;
139 -               bcm7XXX_nand_parts[*numParts].size = 0;
140 -       }
141 -#endif
142 -}
143 -
144  static int __devinit brcmnanddrv_probe(struct device *dev)
145  {
146         struct platform_device *pdev = to_platform_device(dev);
147 @@ -234,14 +149,12 @@
148         if (brcmnand_scan(&info->mtd, MAX_NAND_CS)) {
149                 err = -ENXIO;
150                 goto out_free_info;
151 -       }
152 -
153 -       printk("        numchips=%d, size=%08x\n", info->brcmnand.numchips, info->mtd.size);
154 -       brcmnanddrv_setup_mtd_partitions(info, &numParts);
155 -//printk("     add_mtd_partitions\n");
156 -       add_mtd_partitions(&info->mtd, info->parts, numParts);
157 -//printk("     dev_set_drvdata\n");    
158 -       dev_set_drvdata(&pdev->dev, info);
159 +       }
160
161 +       printk("        numchips=%d, size=%08x\n", info->brcmnand.numchips, info->mtd.size);
162 +       add_mtd_partitions(&info->mtd, bcm7XXX_nand_parts, 4);
163 +//printk("     dev_set_drvdata\n");
164 +       dev_set_drvdata(&pdev->dev, info);
165  //printk("<-- brcmnanddrv_probe\n");
166         return 0;
167  
168 diff -Naur stblinux-2.6.12-org/drivers/mtd/brcmnand/brcmnand_base.c stblinux-2.6.12/drivers/mtd/brcmnand/brcmnand_base.c
169 --- stblinux-2.6.12-org/drivers/mtd/brcmnand/brcmnand_base.c    2008-02-28 18:40:17.000000000 +0100
170 +++ stblinux-2.6.12/drivers/mtd/brcmnand/brcmnand_base.c        2008-02-28 18:46:02.000000000 +0100
171 @@ -296,7 +296,15 @@
172                 .options = NAND_USE_FLASH_BBT,
173                 .timing1 = 0, .timing2 = 0,
174         },
175 -       
176 +
177 +       {       /* 20 */
178 +               .chipId = HYNIX_HY27US08121A,
179 +               .mafId = FLASHTYPE_HYNIX,
180 +               .chipIdStr = "Hynix HY27US08121A (dream)",
181 +               .options = NAND_USE_FLASH_BBT,
182 +               .timing1 = 0, .timing2 = 0,
183 +       },
184 +
185         {       /* LAST DUMMY ENTRY */
186                 .chipId = 0,
187                 .mafId = 0,