Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 207807
b: refs/heads/master
c: 08b9ab9
h: refs/heads/master
i:
  207805: df3c4ee
  207803: 42e807a
  207799: 942dd53
  207791: ca0c07b
  207775: 580e551
  207743: 2d510f4
v: v3
  • Loading branch information
Chuanxiao Dong authored and David Woodhouse committed Aug 6, 2010
1 parent 7683537 commit 79917b2
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: db9a321049ead6424848b1040a714290d5df39d7
refs/heads/master: 08b9ab9996c7e582f86da319f43d2dcb8ff55993
22 changes: 21 additions & 1 deletion trunk/drivers/mtd/nand/denali.c
Original file line number Diff line number Diff line change
Expand Up @@ -1677,6 +1677,25 @@ static int denali_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
goto failed_nand;
}

/* support for multi nand
* MTD known nothing about multi nand,
* so we should tell it the real pagesize
* and anything necessery
*/
denali->devnum = ioread32(denali->flash_reg + DEVICES_CONNECTED);
denali->nand.chipsize <<= (denali->devnum - 1);
denali->nand.page_shift += (denali->devnum - 1);
denali->nand.pagemask = (denali->nand.chipsize >>
denali->nand.page_shift) - 1;
denali->nand.bbt_erase_shift += (denali->devnum - 1);
denali->nand.phys_erase_shift = denali->nand.bbt_erase_shift;
denali->nand.chip_shift += (denali->devnum - 1);
denali->mtd.writesize <<= (denali->devnum - 1);
denali->mtd.oobsize <<= (denali->devnum - 1);
denali->mtd.erasesize <<= (denali->devnum - 1);
denali->mtd.size = denali->nand.numchips * denali->nand.chipsize;
denali->bbtskipbytes *= denali->devnum;

/* second stage of the NAND scan
* this stage requires information regarding ECC and
* bad block management. */
Expand Down Expand Up @@ -1713,6 +1732,7 @@ static int denali_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
denali_write32(8, denali->flash_reg + ECC_CORRECTION);
}

denali->nand.ecc.bytes *= denali->devnum;
denali->nand.ecc.layout->eccbytes *=
denali->mtd.writesize / ECC_SECTOR_SIZE;
denali->nand.ecc.layout->oobfree[0].offset =
Expand All @@ -1738,7 +1758,7 @@ static int denali_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
denali->nand.ecc.hwctl = denali_ecc_hwctl;

/* override the default read operations */
denali->nand.ecc.size = denali->mtd.writesize;
denali->nand.ecc.size = ECC_SECTOR_SIZE * denali->devnum;
denali->nand.ecc.read_page = denali_read_page;
denali->nand.ecc.read_page_raw = denali_read_page_raw;
denali->nand.ecc.write_page = denali_write_page;
Expand Down
1 change: 1 addition & 0 deletions trunk/drivers/mtd/nand/denali.h
Original file line number Diff line number Diff line change
Expand Up @@ -764,6 +764,7 @@ struct denali_nand_info {
int irq_debug_array[32];
int idx;

uint32_t devnum; /* represent how many nands connected */
uint32_t fwblks; /* represent how many blocks FW used */
uint32_t totalblks;
uint32_t blksperchip;
Expand Down

0 comments on commit 79917b2

Please sign in to comment.