On Fri, Mar 15, 2013 at 10:20:58AM -0500, Jon Hunter wrote: > While adding device-tree support for NOR memories, it became apparent > that there is no common way for configuring various GPMC settings for > devices that interface to the GPMC. These settings include bus-width, > synchronous/asynchronous mode, burst settings, wait monitoring etc. > Therefore, to simplify the GPMC code and add device-tree support for > NOR, it was first necessary to consolidate how these settings are > programmed. > > Series based upon Mark Jackson's patch [1] and Ezequiel Garcia GPMC > clean-up series [2]. Entire series available here [3]. > > V3 changes: > - Rebased on RMK's IS_ERR_VALUE() patch and removed usage of > IS_ERR_VALUE() from series. > - Fixed BUG in NAND code introduced in V2 by making gpmc_settings > structure a local variable (I forgot to initialise structure to zero). > - Added fix from Javier to correct return value from gpmc_probe_nor(). > > V2 changes: > - Made gpmc_settings structure local in gpmc_nand_init(). > - Use resource_size() API in probe_nor(). > - Add kernel-doc for gpmc_cs_program_settings() function. > - Use of_platform_device_create() to register NOR devices in probe_nor(). > - Add support for GPMC address-address-data multiplexing which required > changing GPMC DT property "gpmc,mux-add-data" to store a 32-bit value > and changing mux_add_data member of gpmc_settings to be a 32-bit type > instead of bool. > - Add detection for incorrect GPMC chip-select base addresses. > - Cleaned-up code in gpmc_mem_init() and changed gpmc_mem_init() so that > it would not return an error when the GPMC driver is being probed. > > V1 changes: > - Clean-up/simplification of ONENAND initialisation code. > - Add a new GPMC structure to unify storage of various GPMC settings > (that are non-timing related) for client devices and add a new > function to program these settings in a common way. > - Migrate initialisation code for existing flash, usb and networking > devices to use the new structure and function for GPMC settings. > - Add device-tree support for NOR flash memories. > - Add additional GPMC timing parameters to GPMC device-tree binding. > - Update GPMC NAND and ONENAND device-tree support to retrieve GPMC > settings from device-tree. > > Testing includes: > - Boot testing on OMAP2420 H4, OMAP3430 SDP and OMAP4430 SDP with > and without device-tree present. > - OMAP2420 H4 board has NOR flash and OMAP3430 SDP has NOR, NAND > and ONENAND flash. So verified that flash is detected on boot > as expected. Note additional patches [4] are required for OMAP2420 > H4 and OMAP3430 SDP dts files in order to enable flash memory > support. > - All of the above boards use GPMC for interfacing to a networking > chip and so verified that networking is working wit this series. > However, please note that networking is not currently supported > on these boards when booting with DT and so networking is only > tested without DT. > > [1] http://permalink.gmane.org/gmane.linux.ports.arm.omap/94765 > [2] http://comments.gmane.org/gmane.linux.ports.arm.omap/93784 > [3] https://github.com/jonhunter/linux/tree/omap-gpmc-for-v3.10 > [4] https://github.com/jonhunter/linux/tree/omap-dt-for-v3.10 > > Javier Martinez Canillas (1): > ARM: OMAP2+: return -ENODEV if GPMC child device creation fails > > Jon Hunter (17): > ARM: OMAP2+: Simplify code configuring ONENAND devices > ARM: OMAP2+: Add variable to store number of GPMC waitpins > ARM: OMAP2+: Add structure for storing GPMC settings > ARM: OMAP2+: Add function for configuring GPMC settings > ARM: OMAP2+: Convert ONENAND to use gpmc_cs_program_settings() > ARM: OMAP2+: Convert NAND to use gpmc_cs_program_settings() > ARM: OMAP2+: Convert SMC91x to use gpmc_cs_program_settings() > ARM: OMAP2+: Convert TUSB to use gpmc_cs_program_settings() > ARM: OMAP2+: Don't configure of chip-select options in > gpmc_cs_configure() > ARM: OMAP2+: Add function to read GPMC settings from device-tree > ARM: OMAP2+: Add device-tree support for NOR flash > ARM: OMAP2+: Add additional GPMC timing parameters > ARM: OMAP2+: Convert NAND to retrieve GPMC settings from DT > ARM: OMAP2+: Convert ONENAND to retrieve GPMC settings from DT > ARM: OMAP2+: Detect incorrectly aligned GPMC base address > ARM: OMAP2+: Remove unnecesssary GPMC definitions and variable > ARM: OMAP2+: Allow GPMC probe to complete even if CS mapping fails > > Documentation/devicetree/bindings/bus/ti-gpmc.txt | 48 +- > Documentation/devicetree/bindings/mtd/gpmc-nor.txt | 98 ++++ > .../devicetree/bindings/mtd/gpmc-onenand.txt | 3 + > arch/arm/mach-omap2/gpmc-nand.c | 39 +- > arch/arm/mach-omap2/gpmc-onenand.c | 110 ++-- > arch/arm/mach-omap2/gpmc-smc91x.c | 30 +- > arch/arm/mach-omap2/gpmc.c | 524 +++++++++++++++----- > arch/arm/mach-omap2/gpmc.h | 37 +- > arch/arm/mach-omap2/usb-tusb6010.c | 62 ++- > 9 files changed, 691 insertions(+), 260 deletions(-) > create mode 100644 Documentation/devicetree/bindings/mtd/gpmc-nor.txt > > -- > 1.7.10.4 > Looks really good! FWIW, On my OMAP3630 (IGEPv2) board, both DT and non-DT booted and read the OneNAND device. Tested-by: Ezequiel Garcia <ezequiel.garcia@xxxxxxxxxxxxxxxxxx> Thanks, -- Ezequiel García, Free Electrons Embedded Linux, Kernel and Android Engineering http://free-electrons.com -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html