This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Support for raw SLC NAND device in DM8148

Hi,

One of my customers wants to use the following SLC NAND part in their design with DM8148:

Sno

 

Parameter

 

MT29F16G08ABABA (Micron)

 

Unit

1

 

Total Size

 

2G

 

Bytes

2

 

Data Bus  Width

 

8

 

Bit

3

 

Page Size

 

4096 + 224

 

Bytes

4

 

Block Size

 

512K

 

Bytes

5

 

Block Erase Time

 

3.5

 

ms


Kindly let me know if the GPMC can be interfaced to this device and are there any constraints in interfacing. I understand that we have used SLC NAND on our EVM where the page size is 2KB and block size is 128KB. How much software effort is required in case it needs a modification in the driver?

For your reference, I have attached the datasheet of the NAND under consideration here.

Thanks.

Datasheet:

8322.Micron MT29FxxxG08Axxxx.pdf

  • Hello,

    I will try to involve someone to address this. Thank you.

    BR

    Vladimir

  • Anuj,

    The mentioned NAND part can be used with existing TI814x GPMC. However customer needs to do following modifications in-order to get the NAND correctly initialized and detected.

    ----------------------------------------------------------------

    (1) Update NAND interface signal timings.

    File: $KERNEL/arch/arm/mach-omap2/board-flash.c                 

    Location: static struct gpmc_timings nand_timings_ti814x = { ... };

    OR

    If NAND part timings are not available or confirmed, use the more pessimistic timings for initial bring-up, as given in 'static struct gpmc_timings nand_timings = { ... };'

    ----------------------------------------------------------------

    (2) Update NAND partition information

    File: $KERNEL/arch/arm/mach-omap2/board-ti8148evm.c

    Location: static struct mtd_partition ti814x_nand_partitions[] = { ... };

    ----------------------------------------------------------------

    (3) Update NAND Device configurations (may be hard-coded from data-sheet)

    File:$KERNEL/drivers/mtd/nand/nand_base.c

    Location: static struct nand_flash_dev *nand_get_flash_type( ... );

    ----------------------------------------------------------------

    (4)Add debug prints to check whether all correct NAND device configurations are populated in 'nand_chip' structure

    File:$KERNEL/drivers/mtd/nand/nand_base.c

    Location: int nand_scan_ident ( ... );

    ----------------------------------------------------------------

    (5) Also, currently auto-detection of DEVSIZE (16bit/8bit width) is not supported, so user has to specifically set SW_BTM(8) = 1 on board to indicate that a 16-bit NAND device is present on the board. Corresponding switch setting detection code is in..

    File: $KERNEL/arch/arm/mach-omap2/board-ti8148evm.c

    Location: __init board_nand_init( ... );

    ----------------------------------------------------------------

    Hope this is helpful.

    with regards, pekon

  • Pekon, thank you very much for your feedback.

    BR

    Vladimir

  • Thanks Pekon for your response. I will pass this to the customer and will revert in case he has further queries.

  • Hi Anuj,

    Just update, We have pushed patches for "AUTO-DETECTION OF NAND BUS-WIDTH" on arago/omap3.git. Following are subjects for patches.

    (a) omap3 nand : use NAND_BUSWIDTH_AUTO
    (b) mtd nand : add NAND_BUSWIDTH_AUTO to autodetect bus...
    (c) ti81xx: nand: fixed detection of bus-width and version...
    (d) ti81xx: nand: BUSWIDTH-AUTO-DETECTION fixed for all...

    With this patches the linux code will automatically detect the bus-width of NAND connected on board. And user needs not to explicitly tell that in code or using EVM BTM_MODE_SW[8].

      

    with regards, pekon

  • Thanks Pekon for the update.

  • Hi,pekon
    Do you know the nand_timings_ti814x for MT29F4G16ABAEA?The default configuration in arch/arm/mach-omap2/board-flash.c are as follow:
    static struct gpmc_timings nand_timings_ti814x = {

    .sync_clk = 0,

    .cs_on = 0,
    .cs_rd_off = 31,
    .cs_wr_off = 31,

    .adv_on = 5,
    .adv_rd_off = 21,
    .adv_wr_off = 31,

    .we_off = 26,
    .oe_off = 42,

    .access = 47,
    .rd_cycle = 63,
    .wr_cycle = 63,

    .wr_access = 26,
    .wr_data_mux_bus = 0,
    };
    When I debug in drivers/mtd/nand/nand_base.c nand_flash_detect_onfi(...)  function, after chip->cmdfunc(mtd, NAND_CMD_READID, 0x20, -1); I cannot get the

    the result as the datasheet.But chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1) can get the Manufacturer,Page size,etc.

    with regards, vefone