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
6 static struct mtd_partition bcm7XXX_nand_parts[] =
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 },
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 },
21 + /* modified for Dreambox DM800 */
25 + .size = 64*1024*1024
33 + .name = "boot partition",
35 + .size = (4*1024-256)*1024
38 + .name = "root partition",
39 + .offset = 4*1024*1024,
40 + .size = 60*1024*1024
44 struct brcmnand_info {
48 //EXPORT_SYMBOL(get_brcmnand_handle);
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.
56 -static void __devinit
57 -brcmnanddrv_setup_mtd_partitions(struct brcmnand_info* nandinfo, int* numParts)
59 - struct mtd_info* mtd = &nandinfo->mtd;
62 - unsigned int ecm_size = DEFAULT_ECM_SIZE;
63 - unsigned int ocap_size = DEFAULT_OCAP_SIZE;
64 - unsigned int avail1_size = DEFAULT_AVAIL1_SIZE;
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;
73 - *numParts = ARRAY_SIZE(bcm7XXX_nand_parts);
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;
84 - int factor = size / (64 << 20); // Remember size is capped at 512MB
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;
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);
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)
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;
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);
116 - if (mtd->size > (512 << 20)) { // For total flash size > 512MB, we must split the rootfs into 2 partitions
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);
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);
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;
138 - bcm7XXX_nand_parts[*numParts].offset = 0;
139 - bcm7XXX_nand_parts[*numParts].size = 0;
144 static int __devinit brcmnanddrv_probe(struct device *dev)
146 struct platform_device *pdev = to_platform_device(dev);
147 @@ -234,14 +149,12 @@
148 if (brcmnand_scan(&info->mtd, MAX_NAND_CS)) {
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);
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");
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
172 .options = NAND_USE_FLASH_BBT,
173 .timing1 = 0, .timing2 = 0,
178 + .chipId = HYNIX_HY27US08121A,
179 + .mafId = FLASHTYPE_HYNIX,
180 + .chipIdStr = "Hynix HY27US08121A (dream)",
181 + .options = NAND_USE_FLASH_BBT,
182 + .timing1 = 0, .timing2 = 0,
185 { /* LAST DUMMY ENTRY */