[U-Boot] [RFC/PATCH 1/4] Enable multi chip support in the NAND layer

Wolfgang Grandegger wg at grandegger.com
Tue Jan 20 09:36:44 CET 2009


Stefan Roese wrote:
> Hi Wolfgang,
> 
> On Monday 19 January 2009, Wolfgang Grandegger wrote:
>>>> Are they accessed as 2 NAND controllers, or 2 chips on one controller?
>>> 2 chips on one controller.
>>>
>>>> We can make it "#define NAND_MAX_CHIPS 2" if that's appropriate, but
>>>> defining it to CONFIG_SYS_MAX_NAND_DEVICE doesn't seem to make sense.
>>> OK with me.
>> NAND_MAX_CHIPS should be set to 1!
>>
>> NAND_MAX_CHIPS defines the number of NAND chips (or dies) *per* NAND
>> device (or bank) meaning two or more identical NAND chips can be mapped
>> to one device. So far this was not supported, because nand_scan() was
>> always called with maxchips=1 in nand_init_chip:
>>
>> $ cat drivers/mtd/nand/nand.c:
>> ...
>> static void nand_init_chip(struct mtd_info *mtd, struct nand_chip *nand,
>>                            ulong base_addr)
>> {
>>         mtd->priv = nand;
>>
>>         nand->IO_ADDR_R = nand->IO_ADDR_W = (void  __iomem *)base_addr;
>>         if (board_nand_init(nand) == 0) {
>>                 if (nand_scan(mtd, 1) == 0) {
>>                     ^^^^^^^^^^^^^^^^^
>>                         if (!mtd->name)
>>                                 mtd->name = (char *)default_nand_name;
>>                 } else
>>                         mtd->name = NULL;
>>         } else {
>>                 mtd->name = NULL;
>>                 mtd->size = 0;
>>         }
>> }
>>
>> Furthermore, the callback chip->select_chip() must be provided by the
>> NAND driver to select the chips properly. It's seems not to be
>> implemented for NDFC and therefore you do not have this choice.
>> Therefore NAND_MAX_CHIPS should be set to 1 for the Bamboo.
> 
> The 4xx NDFC driver uses the board_nand_select_device() function to select the 
> NAND chip (other platforms do it this way as well). IIRC, this function was 
> already introduced with old legacy NAND driver. Could be that it is 
> deprecated now and should be replaced with the ->select_device() function.

NAND device selection is a different issue. The NAND FLASHes are
presented to the user as separate devices. I don't think it's
deprecated, it's just an option, the only one so far.

Wolfgang.


More information about the U-Boot mailing list