mtd: denali: set some registers after nand_scan_ident()
Some but not all of implementations of the Denali NAND controller have hardware circuits to detect the device parameters such as page_size, erase_size, etc. Even on those SoCs with such hardware supported, the hardware is known to detect wrong parameters for some nasty (almost buggy) NAND devices. The device parameters detected during nand_scan_ident() are more trustworthy. This commit sets some hardware registers to mtd->pagesize, mtd->oobsize, etc. in the code between nand_scan_ident() and nand_scan_tail(). Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com> Cc: Scott Wood <scottwood@freescale.com> Cc: Chin Liang See <clsee@altera.com>
This commit is contained in:
		
							parent
							
								
									65e4145a20
								
							
						
					
					
						commit
						f09eb52b3f
					
				| 
						 | 
				
			
			@ -1209,6 +1209,17 @@ static int denali_init(struct denali_nand_info *denali)
 | 
			
		|||
	nand_oob.eccbytes = denali->nand.ecc.bytes;
 | 
			
		||||
	denali->nand.ecc.layout = &nand_oob;
 | 
			
		||||
 | 
			
		||||
	writel(denali->mtd->erasesize / denali->mtd->writesize,
 | 
			
		||||
	       denali->flash_reg + PAGES_PER_BLOCK);
 | 
			
		||||
	writel(denali->nand.options & NAND_BUSWIDTH_16 ? 1 : 0,
 | 
			
		||||
	       denali->flash_reg + DEVICE_WIDTH);
 | 
			
		||||
	writel(denali->mtd->writesize,
 | 
			
		||||
	       denali->flash_reg + DEVICE_MAIN_AREA_SIZE);
 | 
			
		||||
	writel(denali->mtd->oobsize,
 | 
			
		||||
	       denali->flash_reg + DEVICE_SPARE_AREA_SIZE);
 | 
			
		||||
	if (readl(denali->flash_reg + DEVICES_CONNECTED) == 0)
 | 
			
		||||
		writel(1, denali->flash_reg + DEVICES_CONNECTED);
 | 
			
		||||
 | 
			
		||||
	/* override the default operations */
 | 
			
		||||
	denali->nand.ecc.read_page = denali_read_page;
 | 
			
		||||
	denali->nand.ecc.read_page_raw = denali_read_page_raw;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue