As raised by Rickard, certain chips like Toshiba/Kioxia TH58NVG2S3HBAI4 are not ONFI compliant and because of that, work at a very slow pace. This chip in particular supports running at a pace "close" to ONFI mode 4. This series provides a way to manufacturer drivers to propose a data interface to the core with a very simple interface. While at it, I did some cleanup and prepared the introduction of NV-DDR timings. Cheers, Miquèl Changes in v7: * Fixed typos/reworded commit logs. * Collected R-by tags. * Added a patch to turn timing_mode an unsigned int (one parameter of onfi_fill_data_interface/interface_config). * Thanks to Boris comments, I realized I could not introduce the "reset timing helper" before the change allocating the interface configuration dynamically. Nor it would make sense to do it afterwards, so I merged the two patches. * s/nand_choose_interface/nand_choose_interface_config/. * s/->choose_interface()/->choose_interface_config()/. * Moved the patch hiding the ->data_interface indirection before the patch renaming data_interface into interface_config. This had the effect of dropping two patches (legacy_nand and marvell_nand updates). * Dropped an always wrong condition in nand_reset() spotted by Boris. Changes in v6: * Collected R-by tags. * Inserted a patch renaming massively the "data interface" name into "interface configuration". Followed this naming for the rest of the series, in particular for the new hooks. * Re-added a comment about the specific tCCS, tR, tBERS and tPROG timings. * Inverted the conditions in onfi_find_closest_sdr_mode() as advised. * Created a helper to retrieve the reset interface configuration. * Dropped nand_extract_sdr_timings() and kept nand_get_sdr_timings(). * Created nand_get_interface_config() instead, to retrieve an interface configuration provided a nand_chip object. * Changed the scope of a variable. * Turned onfi_fill_interface_config() into a void helper. * Fixed typos. * Used strncmp() to compare NAND chip model names. * Prevented applying timing mode 0 twice. * Created a ->current_interface_config entry in nand_chip, always pointing to the right interface configuration. * Renamed the other entry ->best_interface_config. Changes in v5: * Collected R-by tags. * Dropped the rename of onfi_timing_mode_default, got rid of it instead. * Converted Hynix and Toshiba drivers to ->choose_data_interface(). * Created a static default reset data interface object. * Allocated dynamically the timings. * Renamed onfi_find_closest_sdr_mode() and its parameter. * Dropped the comparison with maximum values in onfi_find_closest_sdr_mode(). * Use "best_timings" instead of "best_iface" as DDR is not supported yet. * Dropped choose_best_vendor_sdr_timings() and unifed its content with choose_best_sdr_timings(). * If the specific timing set close to ONFI mode X is not supported, fallback to ONFI mode X first, not X - 1. Changes in v4: * Took Rickard patch based on my previous proposals over Github and tweaked a few more things: - Added a "generic" helper to fallback on slower ONFI modes when the proposed interface is not supported by the controller. - Fixed more kdoc. - Simplified the vendor driver side by providing additional helpers. * Tweaked a little bit Rickard patch to fit the latest changes. Miquel Raynal (27): mtd: rawnand: Use unsigned types for nand_chip unsigned values mtd: rawnand: Only use u8 instead of uint8_t in nand_chip structure mtd: rawnand: Create a nand_chip operations structure mtd: rawnand: Rename the manufacturer structure mtd: rawnand: Declare the nand_manufacturer structure out of nand_chip mtd: rawnand: Reorganize the nand_chip structure mtd: rawnand: Compare the actual timing values mtd: rawnand: Use the data interface mode entry when relevant mtd: rawnand: Rename nand_has_setup_data_iface() mtd: rawnand: Fix nand_setup_data_interface() description mtd: rawnand: Rename nand_init_data_interface() mtd: rawnand: timings: Update onfi_fill_data_interface() kernel doc mtd: rawnand: timings: Provide onfi_fill_data_interface() with a data interface mtd: rawnand: timings: onfi_fill_data_interface timing mode is unsigned mtd: rawnand: timings: Add a helper to find the closest ONFI mode mtd: rawnand: timings: Avoid redefining tR_max and tCCS_min mtd: rawnand: timings: Use default values for tPROG_max and tBERS_max mtd: rawnand: Hide the chip->data_interface indirection mtd: rawnand: s/data_interface/interface_config/ mtd: rawnand: timings: Make onfi_fill_interface_config() a void helper mtd: rawnand: Introduce nand_choose_best_sdr_timings() mtd: rawnand: Add the ->choose_interface_config() hook mtd: rawnand: toshiba: Implement ->choose_interface_config() for TC58TEG5DCLTA00 mtd: rawnand: toshiba: Implement ->choose_interface_config() for TC58NVG0S3E mtd: rawnand: hynix: Implement ->choose_interface_config() for H27UCG8T2ATR-BC mtd: rawnand: Get rid of the default ONFI timing mode mtd: rawnand: Allocate the interface configurations dynamically Rickard x Andersson (1): mtd: rawnand: toshiba: Choose the interface configuration for TH58NVG2S3HBAI4 drivers/mtd/nand/raw/ams-delta.c | 6 +- drivers/mtd/nand/raw/arasan-nand-controller.c | 6 +- drivers/mtd/nand/raw/atmel/nand-controller.c | 34 +-- .../mtd/nand/raw/cadence-nand-controller.c | 6 +- drivers/mtd/nand/raw/denali.c | 8 +- drivers/mtd/nand/raw/fsmc_nand.c | 6 +- drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c | 6 +- drivers/mtd/nand/raw/internals.h | 22 +- drivers/mtd/nand/raw/marvell_nand.c | 18 +- drivers/mtd/nand/raw/meson_nand.c | 14 +- drivers/mtd/nand/raw/mtk_nand.c | 6 +- drivers/mtd/nand/raw/mxc_nand.c | 20 +- drivers/mtd/nand/raw/mxic_nand.c | 6 +- drivers/mtd/nand/raw/nand_base.c | 264 +++++++++-------- drivers/mtd/nand/raw/nand_hynix.c | 16 +- drivers/mtd/nand/raw/nand_ids.c | 24 +- drivers/mtd/nand/raw/nand_legacy.c | 7 +- drivers/mtd/nand/raw/nand_macronix.c | 10 +- drivers/mtd/nand/raw/nand_micron.c | 2 +- drivers/mtd/nand/raw/nand_timings.c | 116 ++++++-- drivers/mtd/nand/raw/nand_toshiba.c | 72 ++++- drivers/mtd/nand/raw/s3c2410.c | 6 +- drivers/mtd/nand/raw/stm32_fmc2_nand.c | 6 +- drivers/mtd/nand/raw/sunxi_nand.c | 6 +- drivers/mtd/nand/raw/tango_nand.c | 4 +- drivers/mtd/nand/raw/tegra_nand.c | 6 +- include/linux/mtd/rawnand.h | 270 +++++++++--------- 27 files changed, 579 insertions(+), 388 deletions(-) -- 2.20.1 ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/