[U-Boot] NAND 16 bit buswidth issue

Scott Wood scottwood at freescale.com
Thu Aug 19 22:46:22 CEST 2010


On Thu, 19 Aug 2010 16:22:40 -0400
Pete Murray <pmurray at dawning.com> wrote:

> 
>     The controller driver being used is ndfc.c, it doesn't set the 
> options though.  From what I can tell, nand.c calls nand_scan without 
> actually setting the nand options.  I have been setting chip->options to 
> include NAND_BUSWIDTH_16, but want to move all my changes back to board 
> specific code to eventually submit for review.  
> 
> 
> 
>  /* Lookup the flash id */
>         for (i = 0; nand_flash_ids[i].name != NULL; i++) {
>                 if (dev_id == nand_flash_ids[i].id) {
>                         type =  &nand_flash_ids[i];
>                         break;
>                 }
>         }
> 
>         if (!type)
>                 return ERR_PTR(-ENODEV);
> 
>         if (!mtd->name)
>                 mtd->name = type->name;
> 
>         chip->chipsize = type->chipsize << 20;
>         
>    
>  Since type is set to the options read from nand_flash_ids in the 
> nand_get_flash_type function, would it be appropriate to just set 
> chip->options to type->options as is done with the chipsize?  If not, 
> what would be the most acceptable way to do this?

The controller driver isn't sufficiently board-specific, so you want to
change the generic code instead? :-)

The problem with autodetection is that you need to issue accesses to
the chip in order to read the ID data.  What word size are you going
to use to make *those* accesses?  Maybe doing 8-bit accesses happens to
work well enough for ID on your 16-bit chip and controller combination,
but that's not something we can assume generically.

Find a way to have your board config file tell the controller driver
what bus width to specify.

-Scott



More information about the U-Boot mailing list