• Masahiro Yamada's avatar
    mtd: nand: denali: handle timing parameters by setup_data_interface() · 1bb88666
    Masahiro Yamada authored
    Handling timing parameters in a driver's own way should be avoided
    because it duplicates efforts of drivers/mtd/nand/nand_timings.c
    Besides, this driver hard-codes Intel specific parameters such as
    CLK_X=5, CLK_MULTI=4.  Taking a certain device (Samsung K9WAG08U1A)
    into account by get_samsung_nand_para() is weird as well.
    
    Now, the core framework provides .setup_data_interface() hook, which
    handles timing parameters in a generic manner.
    
    While I am working on this, I found even more issues in the current
    code, so fixed the following as well:
    
    - In recent IP versions, WE_2_RE and TWHR2 share the same register.
      Likewise for ADDR_2_DATA and TCWAW, CS_SETUP_CNT and TWB.  When
      updating one, the other must be masked.  Otherwise, the other will
      be set to 0, then timing settings will be broken.
    
    - The recent IP release expanded the ADDR_2_DATA to 7-bit wide.
      This register is related to tADL.  As commit 74a332e7 ("mtd:
      nand: timings: Fix tADL_min for ONFI 4.0 chips") addressed, the
      ONFi 4.0 increased the minimum of tADL to 400 nsec.  This may not
      fit in the 6-bit ADDR_2_DATA in older versions.  Check the IP
      revision and handle this correctly, otherwise the register value
      would wrap around.
    Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
    Signed-off-by: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
    1bb88666
denali.h 10.5 KB