
I'd like to get some feedback on this patch set which adds support for our Nitrogen6X series of boards because this patch introduces some additional feature for i.MX6x processors specifically, but possibly other i.MX processors as well.
To give a little background, we're supporting a variety of i.MX6 processors with out Nitrogen6X product, including the Dual-Lite and Solo processors.
Some of this has been discussed on the mailing list, most recently here: http://lists.denx.de/pipermail/u-boot/2013-January/#144323
To give a little background, the i.MX6x architecture has three major variants: i.MX6 Quad and i.MX6 Dual i.MX6 Dual-Lite and i.MX6 Solo i.MX6 Solo Lite
Because the first two are pin compatible, those variants are what we're supporting in this product line.
Unfortunately, they have differing register locations, and also support different DDR clock rates (1066MHz on Quad/Dual and 800MHz on Dual-Lite/Solo).
To simplify support for the two, we recently pushed patches adding support for the preprocessor to the 'imximage' utility and these have been merged.
This allows us to define a single set of DCD data to configure portions of the device setup like this line from board/boundary/ddr-setup.cfg:
DATA 4, IOM_DRAM_SDQS0, 0x00000030
The address of IOM_DRAM_SDQS0 depends on which processor variant is used. To resolve this, we've introduced header files arch/arm/include/asm/arch-mx6/mx6q-ddr.h and arch/arm/include/asm/arch-mx6/mx6dl-ddr.h
The 'q' refers to Quad/Dual. The 'dl' refers to Dual-Lite/Solo.
To make things simpler, we've added this header file, which includes one of the headers above based on whether we're compiling for MX6Q or MX6DL.
arch/arm/include/asm/arch-mx6/mx6-ddr.h
The net result seems to be fairly clean. We're able to express the various boards concisely in these files within board/boundary/nitrogen6x: board/boundary/nitrogen6x/nitrogen6dl2g.cfg board/boundary/nitrogen6x/nitrogen6dl.cfg board/boundary/nitrogen6x/nitrogen6q2g.cfg board/boundary/nitrogen6x/nitrogen6q.cfg board/boundary/nitrogen6x/nitrogen6s1g.cfg board/boundary/nitrogen6x/nitrogen6s.cfg
By using the preprocessor, we were also able to separate common setup for clocks and DDR from the specific memory arrangements that differentiate some of our boards: clocks.cfg ddr-setup.cfg 1066mhz_4x128mx16.cfg 1066mhz_4x256mx16.cfg 800mhz_2x128mx16.cfg 800mhz_2x256mx16.cfg 800mhz_4x128mx16.cfg 800mhz_4x256mx16.cfg
We're trying to keep the nomenclature consistent: 6x - refers to things that are independent of the variant used 6q - refers to the 6Quad/6Dual variant 6dl - refers to the 6Dual-Lite/6Solo
Note that this differs from what's currently done in some other i.MX6 headers.
For example, arch/arm/include/asm/arch-mx6/mx6x_pins.h defines the pad setting for UART2 using symbol MX6Q_PAD_EIM_D26__UART2_TXD while arch/arm/include/asm/arch-mx6/mx6dl_pins.h defines MX6DL_PAD_EIM_D26__UART2_TXD
This necessitated a bit of preprocessor-fu in nitrogen6x.c where we create a common MX6PAD macro:
#ifdef FOR_DL_SOLO #define MX6PAD(a) MX6DL_PAD_##a #else #define MX6PAD(a) MX6Q_PAD_##a #endif
and use it later like this: MX6PAD(EIM_D26__UART2_TXD)
It seems worthwhile to rename mx6x_pins.h to mx6q_pins.h and also change the pad declarations so that other boards can avoid the MX6PAD() macro.
I also suggest that we add an intermediate mx6_pins.h or mx6x_pins.h file that includes the appropriate file based on the processor macro.
There are a couple of other changes to common files that I'll break out before submitting this officially, but I'm hoping to get some feedback first.
Eric Nelson (1): Add support for Boundary Devices Nitrogen6x boards
MAINTAINERS | 8 + arch/arm/include/asm/arch-mx6/crm_regs.h | 12 + arch/arm/include/asm/arch-mx6/iomux.h | 5 + arch/arm/include/asm/arch-mx6/mx6-ddr.h | 73 ++ arch/arm/include/asm/arch-mx6/mx6dl-ddr.h | 59 ++ arch/arm/include/asm/arch-mx6/mx6dl_pins.h | 3 + arch/arm/include/asm/arch-mx6/mx6q-ddr.h | 57 ++ board/boundary/nitrogen6x/1066mhz_4x128mx16.cfg | 37 + board/boundary/nitrogen6x/1066mhz_4x256mx16.cfg | 37 + board/boundary/nitrogen6x/6x_bootscript.txt | 58 ++ .../boundary/nitrogen6x/6x_bootscript_android.txt | 64 ++ .../nitrogen6x/6x_bootscript_android_recovery.txt | 64 ++ board/boundary/nitrogen6x/6x_upgrade.txt | 46 + board/boundary/nitrogen6x/800mhz_2x128mx16.cfg | 37 + board/boundary/nitrogen6x/800mhz_2x256mx16.cfg | 37 + board/boundary/nitrogen6x/800mhz_4x128mx16.cfg | 37 + board/boundary/nitrogen6x/800mhz_4x256mx16.cfg | 37 + board/boundary/nitrogen6x/Makefile | 41 + board/boundary/nitrogen6x/README | 93 ++ board/boundary/nitrogen6x/clocks.cfg | 31 + board/boundary/nitrogen6x/ddr-setup.cfg | 94 ++ board/boundary/nitrogen6x/nitrogen6dl.cfg | 46 + board/boundary/nitrogen6x/nitrogen6dl2g.cfg | 46 + board/boundary/nitrogen6x/nitrogen6q.cfg | 46 + board/boundary/nitrogen6x/nitrogen6q2g.cfg | 46 + board/boundary/nitrogen6x/nitrogen6s.cfg | 46 + board/boundary/nitrogen6x/nitrogen6s1g.cfg | 46 + board/boundary/nitrogen6x/nitrogen6x.c | 901 ++++++++++++++++++++ boards.cfg | 6 + drivers/usb/host/ehci-mx6.c | 1 - include/configs/nitrogen6x.h | 284 ++++++ 31 files changed, 2397 insertions(+), 1 deletion(-) create mode 100644 arch/arm/include/asm/arch-mx6/mx6-ddr.h create mode 100644 arch/arm/include/asm/arch-mx6/mx6dl-ddr.h create mode 100644 arch/arm/include/asm/arch-mx6/mx6q-ddr.h create mode 100644 board/boundary/nitrogen6x/1066mhz_4x128mx16.cfg create mode 100644 board/boundary/nitrogen6x/1066mhz_4x256mx16.cfg create mode 100644 board/boundary/nitrogen6x/6x_bootscript.txt create mode 100644 board/boundary/nitrogen6x/6x_bootscript_android.txt create mode 100644 board/boundary/nitrogen6x/6x_bootscript_android_recovery.txt create mode 100644 board/boundary/nitrogen6x/6x_upgrade.txt create mode 100644 board/boundary/nitrogen6x/800mhz_2x128mx16.cfg create mode 100644 board/boundary/nitrogen6x/800mhz_2x256mx16.cfg create mode 100644 board/boundary/nitrogen6x/800mhz_4x128mx16.cfg create mode 100644 board/boundary/nitrogen6x/800mhz_4x256mx16.cfg create mode 100644 board/boundary/nitrogen6x/Makefile create mode 100644 board/boundary/nitrogen6x/README create mode 100644 board/boundary/nitrogen6x/clocks.cfg create mode 100644 board/boundary/nitrogen6x/ddr-setup.cfg create mode 100644 board/boundary/nitrogen6x/nitrogen6dl.cfg create mode 100644 board/boundary/nitrogen6x/nitrogen6dl2g.cfg create mode 100644 board/boundary/nitrogen6x/nitrogen6q.cfg create mode 100644 board/boundary/nitrogen6x/nitrogen6q2g.cfg create mode 100644 board/boundary/nitrogen6x/nitrogen6s.cfg create mode 100644 board/boundary/nitrogen6x/nitrogen6s1g.cfg create mode 100644 board/boundary/nitrogen6x/nitrogen6x.c create mode 100644 include/configs/nitrogen6x.h