27 Mar, 2012

2 commits

  • Flash device drivers initialize 'ecc_strength' in struct mtd_info, which is the
    maximum number of bit errors that can be corrected in one writesize region.

    Drivers using the nand interface intitialize 'strength' in struct nand_ecc_ctrl,
    which is the maximum number of bit errors that can be corrected in one ecc step.
    Nand infrastructure code translates this to 'ecc_strength'.

    Also for nand drivers, the nand infrastructure code sets ecc.strength for ecc
    modes NAND_ECC_SOFT, NAND_ECC_SOFT_BCH, and NAND_ECC_NONE. It is set in the
    driver for all other modes.

    Signed-off-by: Mike Dunn
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    Mike Dunn
     
  • The first 3 arguments of 'mtd_device_parse_register()' are pointers,
    but many callers pass '0' instead of 'NULL'. Fix this globally. Thanks
    to coccinelle for making it easy to do with the following semantic patch:

    @@
    expression mtd, types, parser_data, parts, nr_parts;
    @@
    (
    -mtd_device_parse_register(mtd, 0, parser_data, parts, nr_parts)
    +mtd_device_parse_register(mtd, NULL, parser_data, parts, nr_parts)
    |
    -mtd_device_parse_register(mtd, types, 0, parts, nr_parts)
    +mtd_device_parse_register(mtd, types, NULL, parts, nr_parts)
    |
    -mtd_device_parse_register(mtd, types, parser_data, 0, nr_parts)
    +mtd_device_parse_register(mtd, types, parser_data, NULL, nr_parts)
    )

    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    Artem Bityutskiy
     

10 Jan, 2012

1 commit


11 Sep, 2011

5 commits

  • Replace custom invocations of parse_mtd_partitions and mtd_device_register
    with common mtd_device_parse_register call. This would bring: standard
    handling of all errors, fallback to default partitions, etc.

    Signed-off-by: Dmitry Eremin-Solenikov
    Signed-off-by: Artem Bityutskiy

    Dmitry Eremin-Solenikov
     
  • mtd_device_unregister is done in nand_release(),
    thus no need to call it in nand_davinci_remove().

    Signed-off-by: Axel Lin
    Signed-off-by: Artem Bityutskiy

    Axel Lin
     
  • Since 'cmdline, NULL' is now a default for parse_mtd_partitions, don't specify
    this in every driver, instead pass NULL to force parse_mtd_partitions
    to use default.

    Signed-off-by: Dmitry Eremin-Solenikov
    Signed-off-by: Artem Bityutskiy

    Dmitry Eremin-Solenikov
     
  • Recall the recently added prefix requirements:
    * "NAND_" for flags in nand.h, used in nand_chip.options
    * "NAND_BBT_" for flags in bbm.h, used in nand_chip.bbt_options
    or in nand_bbt_descr.options

    Thus, I am changing NAND_USE_FLASH_BBT to NAND_BBT_USE_FLASH.

    Again, this flag is found in bbm.h and so should NOT be used in the
    "nand_chip.options" field.

    Signed-off-by: Brian Norris
    Signed-off-by: Artem Bityutskiy

    Brian Norris
     
  • This patch works with the following three flags from two headers (nand.h
    and bbm.h):
    (1) NAND_USE_FLASH_BBT (nand.h)
    (2) NAND_USE_FLASH_BBT_NO_OOB (nand.h)
    (3) NAND_BBT_NO_OOB (bbm.h)

    These flags are all related and interdependent, yet they were in
    different headers. Flag (2) is simply the combination of (1) and (3) and
    can be eliminated.

    This patch accomplishes the following:
    * eliminate NAND_USE_FLASH_BBT_NO_OOB (i.e., flag (2))
    * move NAND_USE_FLASH_BBT (i.e., flag (1)) to bbm.h

    It's important to note that because (1) and (3) are now both found in
    bbm.h, they should NOT be used in the "nand_chip.options" field.

    I removed a small section from the mtdnand DocBook because it referes to
    NAND_USE_FLASH_BBT in nand.h, which has been moved to bbm.h.

    Signed-off-by: Brian Norris
    Signed-off-by: Artem Bityutskiy

    Brian Norris
     

25 May, 2011

1 commit


11 Mar, 2011

1 commit

  • The DaVinci NAND driver was including the mach-types.h header
    file.
    This prevented the DaVinci NAND driver from getting used
    in a DSP only device. The linux port on c6x devices can make
    use of the same driver and does not define a corresponding
    header file.

    This header file was required in the driver because earlier there was code
    dependent on a machine_* check. This piece of code has now been factored out
    and is in arch/arm/mach-davinci/aemif.c

    Thus removing the header file is harmless

    Signed-off-by: Sandeep Paulraj
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    Sandeep Paulraj
     

30 Oct, 2010

1 commit

  • * git://git.infradead.org/mtd-2.6: (82 commits)
    mtd: fix build error in m25p80.c
    mtd: Remove redundant mutex from mtd_blkdevs.c
    MTD: Fix wrong check register_blkdev return value
    Revert "mtd: cleanup Kconfig dependencies"
    mtd: cfi_cmdset_0002: make sector erase command variable
    mtd: cfi_cmdset_0002: add CFI detection for SST 38VF640x chips
    mtd: cfi_util: add support for switching SST 39VF640xB chips into QRY mode
    mtd: cfi_cmdset_0001: use defined value of P_ID_INTEL_PERFORMANCE instead of hardcoded one
    block2mtd: dubious assignment
    P4080/mtd: Fix the freescale lbc issue with 36bit mode
    P4080/eLBC: Make Freescale elbc interrupt common to elbc devices
    mtd: phram: use KBUILD_MODNAME
    mtd: OneNAND: S5PC110: Fix double call suspend & resume function
    mtd: nand: fix MTD_MODE_RAW writes
    jffs2: use kmemdup
    mtd: sm_ftl: cosmetic, use bool when possible
    mtd: r852: remove useless pci powerup/down from suspend/resume routines
    mtd: blktrans: fix a race vs kthread_stop
    mtd: blktrans: kill BKL
    mtd: allow to unload the mtdtrans module if its block devices aren't open
    ...

    Fix up trivial whitespace-introduced conflict in drivers/mtd/mtdchar.c

    Linus Torvalds
     

25 Oct, 2010

3 commits

  • Sudhakar found out that 100µs are enough. Sadly, his updated patch was
    overlooked and an older version still using 100ms was merged. Fix this.

    Reference: http://patchwork.ozlabs.org/patch/59180/

    Signed-off-by: Wolfram Sang
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    Wolfram Sang
     
  • Signed-off-by: Wolfram Sang
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    Wolfram Sang
     
  • struct nand_ecclayout is too small for many new chips; OOB regions can be as
    large as 448 bytes and may increase more in the future. Thus, copying that
    struct to user-space with the ECCGETLAYOUT ioctl is not a good idea; the ioctl
    would have to be updated every time there's a change to the current largest
    size.

    Instead, the old nand_ecclayout is renamed to nand_ecclayout_user and a
    new struct nand_ecclayout is created that can accomodate larger sizes and
    expand without affecting the user-space. struct nand_ecclayout can still
    be used in board drivers without modification -- at least for now.

    A new function is provided to convert from the new to the old in order to
    allow the deprecated ioctl to continue to work with truncated data. Perhaps
    the ioctl, the conversion process, and the struct nand_ecclayout_user can be
    removed altogether in the future.

    Note: There are comments in nand/davinci_nand.c::nand_davinci_probe()
    regarding this issue; this driver (and maybe others) can be updated to
    account for extra space. All kernel drivers can use the expanded
    nand_ecclayout as a drop-in replacement and ignore its benefits.

    Signed-off-by: Brian Norris
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    Brian Norris
     

24 Sep, 2010

2 commits

  • This patch modifies the DaVinci NAND driver to use the
    new AEMIF timing setup API to configure the NAND access
    timings.

    Earlier, AEMIF configuration was being done as a special
    case for DM644x board, but now more boards emerge which have
    capability to boot for other media (SPI flash, NOR flash) and
    have the kernel access NAND flash. This means that kernel cannot
    always depend on the bootloader to setup the NAND.

    Also, on platforms such as da850/omap-l138, the aemif input
    frequency changes as cpu frequency changes; necessiating
    re-calculation of timimg values as part of cpufreq transtitions.
    This patch forms the basis for adding that support.

    Signed-off-by: Sekhar Nori
    Acked-by: Kevin Hilman
    Signed-off-by: Artem Bityutskiy

    Sekhar Nori
     
  • This patch adds support to configure the AEMIF interface
    with supplied timing values.

    Since this capability is useful both from NOR and NAND
    flashes, it is provided as a new interface and in a file
    of its own.

    AEMIF timing configuration is required in cases:

    1) Where the AEMIF clock rate can change at runtime (a side
    affect of cpu frequency change).

    2) Where U-Boot does not support NAND/NOR but supports other
    media like SPI Flash or MMC/SD and thus does not care about
    setting up the AEMIF timing for kernel to use.

    3) Where U-Boot just hasn't configured the timing values and
    cannot be upgraded because the box is already in the field.

    Since there is now a header file for AEMIF interface, the
    common (non-NAND specific) defines for AEMIF registers have
    been moved from nand.h into the newly created aemif.h

    Signed-off-by: Sekhar Nori
    Acked-by: Kevin Hilman
    Signed-off-by: Kevin Hilman

    Sekhar Nori
     

02 Aug, 2010

1 commit

  • On TI's DA830/OMAP-L137, DA850/OMAP-L138 and DM365, after setting the
    4BITECC_ADD_CALC_START bit in the NAND Flash control register to 1 and
    before waiting for the NAND Flash status register to be equal to 1, 2 or
    3, we have to wait till the ECC HW goes to correction state. Without this
    wait, ECC correction calculations will not be proper.

    This has been tested on DA830/OMAP-L137, DA850/OMAP-L138, DM355 and DM365
    EVMs.

    Signed-off-by: Sudhakar Rajashekhara
    Acked-by: Sneha Narnakaje
    Signed-off-by: Andrew Morton
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    Sudhakar Rajashekhara
     

10 May, 2010

1 commit


30 Mar, 2010

1 commit

  • …it slab.h inclusion from percpu.h

    percpu.h is included by sched.h and module.h and thus ends up being
    included when building most .c files. percpu.h includes slab.h which
    in turn includes gfp.h making everything defined by the two files
    universally available and complicating inclusion dependencies.

    percpu.h -> slab.h dependency is about to be removed. Prepare for
    this change by updating users of gfp and slab facilities include those
    headers directly instead of assuming availability. As this conversion
    needs to touch large number of source files, the following script is
    used as the basis of conversion.

    http://userweb.kernel.org/~tj/misc/slabh-sweep.py

    The script does the followings.

    * Scan files for gfp and slab usages and update includes such that
    only the necessary includes are there. ie. if only gfp is used,
    gfp.h, if slab is used, slab.h.

    * When the script inserts a new include, it looks at the include
    blocks and try to put the new include such that its order conforms
    to its surrounding. It's put in the include block which contains
    core kernel includes, in the same order that the rest are ordered -
    alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
    doesn't seem to be any matching order.

    * If the script can't find a place to put a new include (mostly
    because the file doesn't have fitting include block), it prints out
    an error message indicating which .h file needs to be added to the
    file.

    The conversion was done in the following steps.

    1. The initial automatic conversion of all .c files updated slightly
    over 4000 files, deleting around 700 includes and adding ~480 gfp.h
    and ~3000 slab.h inclusions. The script emitted errors for ~400
    files.

    2. Each error was manually checked. Some didn't need the inclusion,
    some needed manual addition while adding it to implementation .h or
    embedding .c file was more appropriate for others. This step added
    inclusions to around 150 files.

    3. The script was run again and the output was compared to the edits
    from #2 to make sure no file was left behind.

    4. Several build tests were done and a couple of problems were fixed.
    e.g. lib/decompress_*.c used malloc/free() wrappers around slab
    APIs requiring slab.h to be added manually.

    5. The script was run on all .h files but without automatically
    editing them as sprinkling gfp.h and slab.h inclusions around .h
    files could easily lead to inclusion dependency hell. Most gfp.h
    inclusion directives were ignored as stuff from gfp.h was usually
    wildly available and often used in preprocessor macros. Each
    slab.h inclusion directive was examined and added manually as
    necessary.

    6. percpu.h was updated not to include slab.h.

    7. Build test were done on the following configurations and failures
    were fixed. CONFIG_GCOV_KERNEL was turned off for all tests (as my
    distributed build env didn't work with gcov compiles) and a few
    more options had to be turned off depending on archs to make things
    build (like ipr on powerpc/64 which failed due to missing writeq).

    * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
    * powerpc and powerpc64 SMP allmodconfig
    * sparc and sparc64 SMP allmodconfig
    * ia64 SMP allmodconfig
    * s390 SMP allmodconfig
    * alpha SMP allmodconfig
    * um on x86_64 SMP allmodconfig

    8. percpu.h modifications were reverted so that it could be applied as
    a separate patch and serve as bisection point.

    Given the fact that I had only a couple of failures from tests on step
    6, I'm fairly confident about the coverage of this conversion patch.
    If there is a breakage, it's likely to be something in one of the arch
    headers which should be easily discoverable easily on most builds of
    the specific arch.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>

    Tejun Heo
     

27 Feb, 2010

1 commit


01 Jan, 2010

1 commit


30 Nov, 2009

1 commit

  • The existing NAND infrastructure allows the default main and
    mirror bad block tables to be overridden in nand_default_bbt().
    However, the davinci_nand driver does not support this. Add
    that support by adding fields to the davinci driver's platform
    data so platform code can pass in their own bbt's and make the
    davinci_nand driver honor them.

    Signed-off-by: Mark A. Greer
    Signed-off-by: Kevin Hilman
    CC: Sudhakar Rajashekhara

    Signed-off-by: David Woodhouse

    Mark A. Greer
     

05 Oct, 2009

1 commit


20 Sep, 2009

1 commit

  • This patch adds 4-bit ECC support for large page NAND chips using the new
    ECC mode NAND_ECC_HW_OOB_FIRST. The platform data from board-dm355-evm
    has been adjusted to use this mode.

    The patches have been verified on DM355 device with 2KiB-page Micron
    devices using mtd-tests and JFFS2. Error correction up to 4 bits has
    also been verified using nandwrite/nanddump utilities.

    Reviewed-by: David Brownell
    Signed-off-by: Sneha Narnakaje
    Signed-off-by: Sandeep Paulraj
    Cc: Thomas Gleixner
    Cc: Troy Kisky
    Signed-off-by: Andrew Morton
    Signed-off-by: David Woodhouse

    Sneha Narnakaje
     

23 Jun, 2009

1 commit

  • * git://git.infradead.org/mtd-2.6: (63 commits)
    mtd: OneNAND: Allow setting of boundary information when built as module
    jffs2: leaking jffs2_summary in function jffs2_scan_medium
    mtd: nand: Fix memory leak on txx9ndfmc probe failure.
    mtd: orion_nand: use burst reads with double word accesses
    mtd/nand: s3c6400 support for s3c2410 driver
    [MTD] [NAND] S3C2410: Use DIV_ROUND_UP
    [MTD] [NAND] S3C2410: Deal with unaligned lengths in S3C2440 buffer read/write
    [MTD] [NAND] S3C2410: Allow the machine code to get the BBT table from NAND
    [MTD] [NAND] S3C2410: Added a kerneldoc for s3c2410_nand_set
    mtd: physmap_of: Add multiple regions and concatenation support
    mtd: nand: max_retries off by one in mxc_nand
    mtd: nand: s3c2410_nand_setrate(): use correct macros for 2412/2440
    mtd: onenand: add bbt_wait & unlock_all as replaceable for some platform
    mtd: Flex-OneNAND support
    mtd: nand: add OMAP2/OMAP3 NAND driver
    mtd: maps: Blackfin async: fix memory leaks in probe/remove funcs
    mtd: uclinux: mark local stuff static
    mtd: uclinux: do not allow to be built as a module
    mtd: uclinux: allow systems to override map addr/size
    mtd: blackfin NFC: fix hang when using NAND on BF527-EZKITs
    ...

    Linus Torvalds
     

06 Jun, 2009

4 commits

  • DaVinci clock support has been updated in mainline.
    Update clock names accordingly.

    Signed-off-by: Kevin Hilman
    Acked-by: David Brownell
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse
    Signed-off-by: Linus Torvalds

    Kevin Hilman
     
  • Remove some legacy code from the davinci_nand driver, which made
    cmdlinepart ignore the the MTD ID passed to it. Boards can have
    multiple NAND chips, and some do (like the DM357 EVM), so this
    dated hack is undesirable.

    Correct labels are like "davinci_nand.0" (for chipselect 0).

    Signed-off-by: David Brownell
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    David Brownell
     
  • Minimal support for the 4-bit ECC engine found on DM355, DM365,
    DA830/OMAP-L137, and similar recent DaVinci-family chips.

    This is limited to small-page flash for now; there are some page
    layout issues for large page chips. Note that most boards using
    this engine (like the DM355 EVM) include 2GiB large page chips.

    Sanity tested on DM355 EVM after swapping the socketed NAND for
    a small-page one.

    Signed-off-by: David Brownell
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    David Brownell
     
  • Make the DaVinci NAND driver require platform_data with
    board-specific configuration. We can't actually do any
    kind of sane job of configuring it otherwise.

    Also fix the comment about picking the "best" ECC mode.

    We can't do those any more; that relied on knowing what kind
    of CPU we're using (they don't all support 4-bit ECC), and
    current policy is that drivers not have cpu_is_*() checks.

    Signed-off-by: David Brownell
    Signed-off-by: Artem Bityutskiy
    Signed-off-by: David Woodhouse

    David Brownell
     

04 Apr, 2009

1 commit

  • Follow-on patch to the previous driver model patch for the MTD
    framework. This one makes various MTD drivers connect to the
    driver model tree, so /sys/devices/virtual/mtd/* nodes are no
    longer present ... mostly drivers used on boards I have handy.

    Based on a patch from Kay Sievers.

    Signed-off-by: David Brownell
    Signed-off-by: David Woodhouse

    David Brownell
     

20 Mar, 2009

3 commits

  • Move mtd_has_partitions() and mtd_has_cmdlinepart() inlines from a
    DaVinci-specific driver to the header.

    Use those to eliminate #ifdefs in two drivers which had their own
    definitions of mtd_has_partitions().

    Quite a lot of other MTD drivers could benefit from using use one or both
    of these to remove #ifdeffery. Maybe some Janitors would like to help.

    Signed-off-by: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: David Woodhouse

    David Brownell
     
  • Usage of davinci-specific cpu_is macros is not allowed in drivers.
    These options should be passed in through platform_data.

    Signed-off-by: Kevin Hilman
    Cc: David Brownell
    Signed-off-by: Andrew Morton
    Signed-off-by: David Woodhouse

    Kevin Hilman
     
  • This is a device driver for the NAND flash controller found on the various
    DaVinci family chips. It handles up to four SoC chipselects, and some
    flavors of secondary chipselect (e.g. based on upper bits of the address
    bus) as used with some multichip packages. (Including the 2 GiB chips
    used on some TI devel boards.)

    The 1-bit ECC hardware is supported (3 bytes ECC per 512 bytes data); but
    not yet the newer 4-bit ECC (10 bytes ECC per 512 bytes data), as
    available on chips like the DM355 or OMAP-L137 and needed with the more
    error-prone MLC NAND chips.

    This is a cleaned-up version of code that's been in use for several years
    now; sanity checked with the new drivers/mtd/tests.

    Signed-off-by: David Brownell
    Signed-off-by: Sudhakar Rajashekhara
    Signed-off-by: Andrew Morton
    Signed-off-by: David Woodhouse

    David Brownell