[U-Boot] [RFC PATCH v2] Add support for ReachTech G2C1 board
Graeme Russ
gruss at tss-engineering.com
Mon Jan 26 06:29:11 CET 2015
This patch adds U-Boot support for the Reachtech G2C1 board. G2C1 U-Boot
images created with this patch will perform the following:
- Initialise the MX28 for 'No Battery' mode
- Configure all IOMUXs
- Configure GPIO directions for all IOMUXs designed for GPIO use
- Inilialise the MMC sub-system
- Initialise the Ethernet sub-system
NOTE: The 'arm: mxs: Enable booting of mx28 without battery' patch MUST be
applied prior to building G2C1 images using this patch
Refer to the README file for detailed documentation
Signed-off-by: Graeme Russ <gruss at tss-engineering.com>
Cc: Albert Aribaud <albert.u.boot at aribaud.net>
Cc: Stefano Babic <sbabic at denx.de>
Cc: Marek Vasut <marex at denx.de>
Cc: u-boot at lists.denx.de
Cc: Brent Larson <blarson at reachtech.com>
Cc: Jonathan More <jmore at reachtech.com>
Cc: Jeff Horn <jhorn at reachtech.com>
Cc: Wolfgang Denk <wd at denx.de>
---
Changes in v2
- Moved IOMUX documenations into README file
- Expanded README file to cover considerably more information
- Setup all GPIO pins in g2c1.c
- Created two configurations - g2c1_mmc_defconfig for building for MMC image
and g2c1_nand_defconfig for building NAND image
- Fixed up Ethernet initialisation
arch/arm/Kconfig | 13 ++
board/reachtech/g2c1/Kconfig | 15 ++
board/reachtech/g2c1/MAINTAINERS | 7 +
board/reachtech/g2c1/Makefile | 12 ++
board/reachtech/g2c1/README | 438 +++++++++++++++++++++++++++++++++++++++
board/reachtech/g2c1/g2c1.c | 142 +++++++++++++
board/reachtech/g2c1/spl_boot.c | 236 +++++++++++++++++++++
configs/g2c1_mmc_defconfig | 4 +
configs/g2c1_nand_defconfig | 4 +
include/configs/g2c1.h | 307 +++++++++++++++++++++++++++
10 files changed, 1178 insertions(+)
create mode 100644 board/reachtech/g2c1/Kconfig
create mode 100644 board/reachtech/g2c1/MAINTAINERS
create mode 100644 board/reachtech/g2c1/Makefile
create mode 100644 board/reachtech/g2c1/README
create mode 100644 board/reachtech/g2c1/g2c1.c
create mode 100644 board/reachtech/g2c1/spl_boot.c
create mode 100644 configs/g2c1_mmc_defconfig
create mode 100644 configs/g2c1_nand_defconfig
create mode 100644 include/configs/g2c1.h
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 5eb1d03..320041e 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -278,6 +278,18 @@ config TARGET_XFI3
select CPU_ARM926EJS
select SUPPORT_SPL
+config TARGET_G2C1
+ bool "Support ReachTech G2C1"
+ select CPU_ARM926EJS
+ select SUPPORT_SPL
+ help
+ This is the Reachtech G2C1 development board. It contains a
+ Freescale MX28 SoC, 128MB DDR2 SDRAM, 128MB SLC NAND, 1x Ethernet
+ port, 2x USB Host ports, 1x USB OTG port, 1x RS-232 Debug port,
+ 1x RS-232 User port, 2x RS485 ports, Onboard audio, LCD Touch
+ screen interface, SD Card slot, I2C and SPI (with 2x slave select
+ lines) interfaces, CAN interface, and 8 GPIO (I2C slave interface)
+
config TARGET_M28EVK
bool "Support m28evk"
select CPU_ARM926EJS
@@ -940,6 +952,7 @@ source "board/phytec/pcm051/Kconfig"
source "board/ppcag/bg0900/Kconfig"
source "board/pxa255_idp/Kconfig"
source "board/raspberrypi/rpi/Kconfig"
+source "board/reachtech/g2c1/Kconfig"
source "board/ronetix/pm9261/Kconfig"
source "board/ronetix/pm9263/Kconfig"
source "board/ronetix/pm9g45/Kconfig"
diff --git a/board/reachtech/g2c1/Kconfig b/board/reachtech/g2c1/Kconfig
new file mode 100644
index 0000000..5ef821f
--- /dev/null
+++ b/board/reachtech/g2c1/Kconfig
@@ -0,0 +1,15 @@
+if TARGET_G2C1
+
+config SYS_BOARD
+ default "g2c1"
+
+config SYS_VENDOR
+ default "reachtech"
+
+config SYS_SOC
+ default "mxs"
+
+config SYS_CONFIG_NAME
+ default "g2c1"
+
+endif
diff --git a/board/reachtech/g2c1/MAINTAINERS b/board/reachtech/g2c1/MAINTAINERS
new file mode 100644
index 0000000..257888b
--- /dev/null
+++ b/board/reachtech/g2c1/MAINTAINERS
@@ -0,0 +1,7 @@
+G2C1 BOARD
+M: Graeme Russ <gruss at tss-engineering.com>
+S: Maintained
+F: board/reachtech/g2c1/
+F: include/configs/mx28evk.h
+F: configs/g2c1_mmcconfig
+F: configs/g2c1_nandconfig
diff --git a/board/reachtech/g2c1/Makefile b/board/reachtech/g2c1/Makefile
new file mode 100644
index 0000000..9bb55e8
--- /dev/null
+++ b/board/reachtech/g2c1/Makefile
@@ -0,0 +1,12 @@
+#
+# (C) Copyright 2000-2006
+# Wolfgang Denk, DENX Software Engineering, wd at denx.de.
+#
+# SPDX-License-Identifier: GPL-2.0+
+#
+
+ifndef CONFIG_SPL_BUILD
+obj-y := g2c1.o
+else
+obj-y := spl_boot.o
+endif
diff --git a/board/reachtech/g2c1/README b/board/reachtech/g2c1/README
new file mode 100644
index 0000000..745bcdc
--- /dev/null
+++ b/board/reachtech/g2c1/README
@@ -0,0 +1,438 @@
+ReachTech G2C1
+==================
+
+Supported hardware: ReachTech G2C1
+
+Reference Documentation
+-----------------------
+doc/README.mxs
+
+Files of the G2C1 port
+--------------------------
+arch/arm/cpu/arm926ejs/mxs/ - The CPU support code for the Freescale i.MX28
+arch/arm/include/asm/arch-mxs/ - Header files for the Freescale i.MX28
+board/reachtech/g2c1/ - G2C1 board specific files
+include/configs/g2c1.h - G2C1 configuration file
+configs/g2c1_mmc_config - G2C1 MMC Target configuration file
+configs/g2c1_nand_config - G2C1 NAND Target configuration file
+
+2) Compiling U-Boot for a MXS based board
+-------------------------------------------
+doc/README.mxs contains detailed information for compiling U-Boot for mx28
+based boards. The following instructions are a minimal set of instructions
+required to build a U-Boot image for the G2C1 board.
+
+Step 0) - Ensure the 'MXS No Battery' Patch is applied
+Refer below to 'No LiIon Battery' in the 'G2C1 Features' of this README
+
+Step 1) - Clean
+Clean the U-Boot build tree of all stale output files by running the following
+command:
+
+ $ make mrproper
+
+Step 2) - Configure
+Configure the U-Boot build system to build either an MMC or NAND image by
+running one of the following commands:
+
+ $ make g2c1_mmc_config
+
+or;
+
+ $ make g2c1_nand_config
+
+NOTE: The environment variables will be stored on the same target as the U-Boot
+image. i.e. running 'make g2c1_mmc_config' will generate a U-Boot image with
+the environment stored on the MMC card.
+
+Step 3) - Build U-Boot
+Compile U-Boot and prepare an MXS "BootStream" by running the following
+command:
+
+ $ make u-boot.sb
+
+Step 4) - Prepare Image
+Prepare the "BootStream" for writing to the SD card or NAND flash
+
+ - If preparing an SD card image, run the following command:
+
+ $ ./tools/mxsboot sd u-boot.sb u-boot.sd
+
+ - If preparing a NAND flash image, run the following command:
+
+ $ ./tools/mxsboot nand u-boot.sb u-boot.nand
+
+Step 5) - Install Image
+Write the processed "BootStream" to the SD card or NAND flash (Refer to
+doc/README.mxs for instructions)
+
+U-Boot Environment Storage
+--------------------------
+The U-Boot environment variable will be stored either on the SD/MMC card or in
+NAND flash depending on the configuration selected in step 2 of the build
+process. The U-Boot environment size is configured to 16Kib.
+
+SD/MMC:
+If the environment is stored on the SD/MMC card, the environment will be stored
+at the end of the partition reserved for U-Boot (see doc/README.mxs)
+
+NAND:
+If the environment is stored in NAND flash, the environment will be stored at
+an offset of 3MiB from the beginning of the NAND flash. 4 NAND Pages (512KiB)
+are reserved for each of the primary and redundant environment stores (the
+additional space allows for bad NAND blocks)
+
+Jumper configuration
+---------------------
+Pins 3 & 4 of JP2 determine if the board boots from an SD Card or the
+onboard NAND Flash:
+ - Jumper in - Boot from NAND Flash
+ - Jumper out - Boot from SD Card
+
+G2C1 Features
+-------------
+ - No LiIon Battery
+ The G2C1 board does not contain a 4.2v lithium ion battery (refer to
+ Freescale Application Note AN4199). The U-Boot patch 'arm: mxs: Enable
+ booting of mx28 without battery' MUST be applied in order for the G2C1
+ board to boot.
+
+ - Run Led
+ GPIO Bank 3, Pin 27 controls the board's Run LED. This output is Active Low
+ U-Boot turns on the Run LED after SPL has completed and U-Boot has been
+ loaded into memory
+
+ - NAND Write Protect
+ NAND can be write protected via hardware (by inserting a jumper across pins
+ 1 and 2 of J2) or software (by setting GPIO Bank 0, Pin 28 to logic 0). NAND
+ write protected if EITHER of the two mechanisms are active.
+
+ WARNING: U-Boot disabled the software NAND write protect (in order to allow
+ U-Boot to write updated U-Boot images to the NAND)
+
+ - 8-bit GPIO with Interrupt
+ The G2C1 includes a PCA9534 '8-bit I 2 C-bus and SMBus low power I/O port
+ with interrupt' to provide 8 configurable digital GPIO pins. The interrupt
+ output of the PCA9534 is connected to GPIO Bank 0, Pin 18
+
+ - RTC
+ The G2C1 includes a PCF8523 'Real-Time Clock (RTC) and calendar' connected
+ to the I2C bus (slave address 0b1101000). The interrupt output of the
+ PCF8523 is NOT connected to any MX28 input.
+
+ NOTE: The G2C1 schematics document the I2C slave address of this device
+ being 0b0111110. However, the PCA9534 data sheet states that the slave
+ address is 0b0100xxx, with the 3 LSBs set via hardware (in the case of the
+ G2C1, the LSBs are set to 110). Therefore, the slave address might actually
+ be 0b0100110, not 0b0111110.
+
+ - LCD Panel
+ Power to the LCD panel can be turned off by setting GPIO Bank 3, Pin 30 to
+ logic 0.
+
+ The LCD backlight is enabled by setting GPIO Bank 3, Pin 2 to logic 1
+ Backlight brightness is controlled by PWM3
+
+ The LCD display is enabled by setting GPIO Bank 0, Pin 19 to logic 1
+
+ - Debug Port CTS
+ The CTS line of the RS-232 Debug port is controlled by GPIO Bank 2, Pin 5.
+ U-Boot sets the Debug Port CTS to logic 1 (enabled)
+
+ - Ethernet
+ The G2C1 board utilises a LAN8720A 'Small Footprint RMII 10/100 Ethernet
+ Transceiver with HP Auto-MDIX Support' PHY. The PHY can be reset by holding
+ GPIO Bank 3, Pin 20 at logic 0 for a minimum of 100us
+
+ The Interrupt output of the PHY is connected to GPIO Bank 2, Pin 6. This
+ input is active low
+
+ - USB (General)
+ The G2C1 utilises a USB2512B 'USB 2.0 Hi-Speed Hub Controller' to provide
+ two USB host ports. The USB2512B is connect to USB1 of the MX28, while USB0
+ is connected to the USB OTG port.
+
+ - USB OTG Power Enable
+ Power to the USB OTG connector is enabled by setting GPIO Bank 2, Pin 4 to
+ logic level 1. U-Boot disables power to the USB OTG connector
+
+ - USB Overcurrent (USB OTG Only)
+ Only the USB OTG port is monitored for overcurrent condition. In the event
+ of an overcurrent detected on the USB OTG port, the USB0_OVRCURRENT input of
+ the MX28 will be asserted (active low input)
+
+ - USB Reset (USB1 Only)
+ The USB2512B Hub Controller can be reset by by holding GPIO Bank 2, Pin 7 at
+ logic 0 for a minimum of 1us
+
+ - Onboard Audio
+ The G2C1 board includes an onboard speaker. Pitch and volume of the audio
+ output is controlled via PWM4 and PWM7
+
+ NOTE: Consult Rechtech regarding generating audio using PWM4 and PWM7
+
+What Isn't Implemented
+----------------------
+ - Control of 8-bit GPIO (No U-Boot driver for the PCA9534)
+ - External RTC (No U-Boot driver for the PCF8523)
+ - LCD Backlight control (see Note)
+ - Onboard Audio control (see Note)
+ - Change state of Software Write Protect of NAND (can probably be done via
+ the gpio command)
+
+NOTE: LCD Backlight and Onboard Audio control control require configuration of
+the MXS PWMs
+
+IOMUX Configuration
+-------------------
+Bank. SoC
+Pin Pin Function Comments
+--------------------------------------------------------------------------
+0.0 U8 GPMI_D0
+0.1 T8 GPMI_D1
+0.2 R8 GPMI_D2
+0.3 U7 GPMI_D3
+0.4 T7 GPMI_D4
+0.5 R7 GPMI_D5
+0.6 U6 GPMI_D6
+0.7 T6 GPMI_D7
+0.8 - - Reserved
+0.9 - - Reserved
+0.10 - - Reserved
+0.11 - - Reserved
+0.12 - - Reserved
+0.13 - - Reserved
+0.14 - - Reserved
+0.15 - - Reserved
+0.16 N7 GPMI_CE0N
+0.17 N9 GPMI_CE1N
+0.18 M7 GPIO_INTERUPT GPIO, Input, 3V3, 4mA, External Pullup
+0.19 M9 DISP_ON GPIO, Output, 3V3, 4mA, No Pollup
+0.20 N6 GPMI_READY0
+0.21 N8 GPMI_READY1
+0.22 M8 CAN0_TX
+0.23 L8 CAN0_RX
+0.24 R6 GPMI_RDN
+0.25 P8 GPMI_WRN
+0.26 P6 GPMI_ALE
+0.27 P7 GPMI_CLE
+0.28 L9 NAND_WP GPIO, 3V3, 4mA, External Pullup, Active Low
+0.29 - - Reserved
+0.30 - - Reserved
+0.31 - - Reserved
+
+Bank. SoC
+Pin Pin Function Comments
+--------------------------------------------------------------------------
+1.0 K2 LCD_D0
+1.1 K3 LCD_D1
+1.2 L2 LCD_D2
+1.3 L3 LCD_D3
+1.4 M2 LCD_D4
+1.5 M3 LCD_D5
+1.6 N2 LCD_D6
+1.7 P1 LCD_D7
+1.8 P2 LCD_D8
+1.9 P3 LCD_D9
+1.10 R1 LCD_D10
+1.11 R2 LCD_D11
+1.12 T1 LCD_D12
+1.13 T2 LCD_D13
+1.14 U2 LCD_D14
+1.15 U3 LCD_D15
+1.16 T3 LCD_D16
+1.17 R3 LCD_D17
+1.18 U4 LCD_D18
+1.19 T4 LCD_D19
+1.20 R4 LCD_D20
+1.21 U5 LCD_D21
+1.22 T5 LCD_D22
+1.23 R5 LCD_D23
+1.24 P4 LCD_VSYNC
+1.25 K1 LCD_HSYNC
+1.26 M4 LCD_DOTCLK
+1.27 P5 LCD_ENABLE
+1.28 L1 LCD_VSYNC Not Connected
+1.29 M1 LCD_HSYNC Not Connected
+1.30 N1 LCD_DOTCLK Not Connected
+1.31 N5 LCD_ENABLE Not Connected
+ *
+Bank. SoC
+Pin Pin Function Comments
+--------------------------------------------------------------------------
+2.0 B6 SSP0_D0
+2.1 C6 SSP0_D1
+2.2 D6 SSP0_D2
+2.3 A5 SSP0_D3
+2.4 B5 USB_0_PWR_EN GPIO, Output, 3V3, 4mA, External Pulldown
+2.5 C5 DUART_CTS GPIO, Output, 3V3, 4mA, External Pullup
+2.6 D5 ENET_INT GPIO, Input, 3V3, 4mA, External Pullup
+2.7 B4 USB_RESET_B GPIO, Output, 3V3, 4mA, External Pullup
+2.8 A4 SSP0_CMD
+2.9 D10 SSP0_CARD_DTCT
+2.10 A6 SSP0_SCK
+2.11 - - Reserved
+2.12 B1 SSP1_SCK Not Connected
+2.13 C1 SSP1_CMD Not Connected
+2.14 D1 SSP1_DATA0 Not Connected
+2.15 E1 SSP1_DATA3 Not Connected
+2.16 A3 SSP2_SCK SPI Clock - 3V3, 4mA, No Pullup
+2.17 C3 SSP2_MOSI SPI MOSI - 3V3, 4mA, No Pullup
+2.18 B3 SSP2_MISO SPI MISO - 3V3, 4mA, No Pullup
+2.19 C4 SSP2_SS0 SPI Slave Select 0 - 3V3, 4mA, No Pullup
+2.20 D3 SSP2_SS1 SPI Slave Select 1 - 3V3, 4mA, No Pullup
+2.21 D4 USB0_OVRCURRENT USB Overcurrent
+2.22 - - Reserved
+2.23 - - Reserved
+2.24 A2 SSP3_SCK Not Connected
+2.25 C2 SSP3_MOSI Not Connected
+2.26 B2 SSP3_MISO Not Connected
+2.27 D2 SSP3_SS0 Not Connected
+2.28 - - Reserved
+2.29 - - Reserved
+2.30 - - Reserved
+2.31 - - Reserved
+
+Bank. SoC
+Pin Pin Function Comments
+--------------------------------------------------------------------------
+3.0 G5 AUART0_RX RS485
+3.1 H5 AUART0_TX RS485
+3.2 J6 BACKLIGHT_EN GPIO, Output, 3V3, 4mA, External Pulldown
+3.3 J7 AUART0_RTS RS485
+3.4 L4 AUART1_RX
+3.5 K4 AUART1_TX
+3.6 K5 AUART1_CTS Not Connected
+3.7 J5 AUART1_RTS Not Connected
+3.8 F6 AUART2_RX Not Connected
+3.9 F5 AUART2_TX Not Connected
+3.10 H6 AUART2_CTS Not Connected
+3.11 H7 AUART2_RTS Not Connected
+3.12 M5 AUART3_RX Not Connected
+3.13 L5 AUART3_TX Not Connected
+3.14 L6 AUART3_CTS Not Connected
+3.15 K6 AUART3_RTS Not Connected
+3.16 K7 I2C1_SCL
+3.17 L7 I2C1_SDA
+3.18 K8 USB0_ID USB OTG ID
+3.19 - - Reserved
+3.20 G7 ENET_FEC_RESET GPIO, Output, 3V3, 4mA, External Pullup, Active Low
+3.21 G6 AUART4_RTS RS485 hardware issue
+3.22 F7 AUART4_RX RS485 hardware issue
+3.23 E7 AUART4_TX RS485 hardware issue
+3.24 C7 DUART_RX
+3.25 D8 DUART_TX
+3.26 E8 PWM7 Onboard Audio (Frequency or Volume?)
+3.27 D7 RUN_LED GPIO, Output, 3V3, Active Low
+3.28 E9 PWM_3 LCD Backlight Brightness
+3.29 E10 PWM_4 Onboard Audio (Frequency or Volume?)
+3.30 M6 LCD_PWR_EN GPIO, Output, 3V3, 4mA, External Pullup
+3.31 - - Reserved
+
+Bank. SoC
+Pin Pin Function Comments
+--------------------------------------------------------------------------
+4.0 G4 ENET0_MDC 3V3, 4mA, Internal Pullup
+4.1 H4 ENET0_MDIO 3V3, 4mA, Internal Pullup
+4.2 E4 ENET0_RX_EN 3V3, 4mA, Internal Pullup
+4.3 H1 ENET0_RXD0 3V3, 4mA, Internal Pullup
+4.4 H2 ENET0_RXD1 3V3, 4mA, Internal Pullup
+4.5 E3 ENET0_TX_CLK Not Connected
+4.6 F4 ENET0_TX_EN
+4.7 F1 ENET0_TXD0
+4.8 F2 ENET0_TXD1
+4.9 J1 ENET0_RX_D2 Not Connected
+4.10 J2 ENET0_RX_D3 Not Connected
+4.11 G1 ENET0_TX_D2 Not Connected
+4.12 G2 ENET0_TX_D2 Not Connected
+4.13 F3 ENET0_RX_CLK Not Connected
+4.14 J4 ENET0_COL Not Connected
+4.15 J3 ENET0_CRS Not Connected
+4.16 E2 CLKCTRL_ENET
+4.17 - - Reserved
+4.18 - - Reserved
+4.19 - - Reserved
+4.20 E14 JTAG_RTCK 3V3, 4mA, External Pullup
+4.21 - - Reserved
+4.22 - - Reserved
+4.23 - - Reserved
+4.24 - - Reserved
+4.25 - - Reserved
+4.26 - - Reserved
+4.27 - - Reserved
+4.28 - - Reserved
+4.29 - - Reserved
+4.30 - - Reserved
+4.31 - - Reserved
+
+Bank. SoC
+Pin Pin Function Comments
+--------------------------------------------------------------------------
+5.0 N16 EMI_DATA0
+5.1 M13 EMI_DATA1
+5.2 P15 EMI_DATA2
+5.3 N14 EMI_DATA3
+5.4 P13 EMI_DATA4
+5.5 P17 EMI_DATA5
+5.6 L14 EMI_DATA6
+5.7 M17 EMI_DATA7
+5.8 G16 EMI_DATA8
+5.9 H15 EMI_DATA9
+5.10 G14 EMI_DATA10
+5.11 J14 EMI_DATA11
+5.12 H13 EMI_DATA12
+5.13 H17 EMI_DATA13
+5.14 F13 EMI_DATA14
+5.15 F17 EMI_DATA15
+5.16 R17 EMI_ODT0
+5.17 M15 EMI_DQM0
+5.18 T17 EMI_ODT1 Not Connected
+5.19 F15 EMI_DQM1
+5.20 L15 EMI_DDR_OPEN_FB
+5.21 L16/L17 EMI_CLK
+5.22 K16/K17 EMI_DQS0
+5.23 J16/J17 EMI_DQS1
+5.24 - - Reserved
+5.25 - - Reserved
+5.26 K14 EMI_DDR_OPEN
+5.27 - - Reserved
+5.28 - - Reserved
+5.29 - - Reserved
+5.30 - - Reserved
+5.31 - - Reserved
+
+Bank. SoC
+Pin Pin Function Comments
+--------------------------------------------------------------------------
+6.0 U15 EMI_ADDR0
+6.1 U12 EMI_ADDR1
+6.2 U14 EMI_ADDR2
+6.3 T11 EMI_ADDR3
+6.4 U10 EMI_ADDR4
+6.5 R11 EMI_ADDR5
+6.6 R9 EMI_ADDR6
+6.7 N11 EMI_ADDR7
+6.8 U9 EMI_ADDR8
+6.9 P10 EMI_ADDR9
+6.10 U13 EMI_ADDR10
+6.11 T10 EMI_ADDR11
+6.12 U11 EMI_ADDR12
+6.13 T9 EMI_ADDR13
+6.14 N10 EMI_ADDR14
+6.15 - - Reserved
+6.16 T16 EMI_BA0
+6.17 T12 EMI_BA1
+6.18 N12 EMI_BA2
+6.19 U16 EMI_CASN
+6.20 R16 EMI_RASN
+6.21 T15 EMI_WEN
+6.22 P12 EMI_CE0N
+6.23 P9 EMI_CE1N Not Connected
+6.24 T13 EMI_CKE
+6.25 - - Reserved
+6.26 - - Reserved
+6.27 - - Reserved
+6.28 - - Reserved
+6.29 - - Reserved
+6.30 - - Reserved
+6.31 - - Reserved
diff --git a/board/reachtech/g2c1/g2c1.c b/board/reachtech/g2c1/g2c1.c
new file mode 100644
index 0000000..b54dbc6
--- /dev/null
+++ b/board/reachtech/g2c1/g2c1.c
@@ -0,0 +1,142 @@
+/*
+ * Reachtech G2C1 board
+ *
+ * Copyright (C) 2015 Graeme Russ <gruss at tss-engineering.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * Author: Graeme Russ <gruss at tss-engineering.com>
+ *
+ * Based on m28evk.c:
+ * Copyright (C) 2011 Marek Vasut <marek.vasut at gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/gpio.h>
+#include <asm/io.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/iomux-mx28.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/sys_proto.h>
+#include <linux/mii.h>
+#include <miiphy.h>
+#include <netdev.h>
+#include <errno.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/*
+ * Functions
+ */
+int board_early_init_f(void)
+{
+ /* IO0 clock at 480MHz */
+ mxs_set_ioclk(MXC_IOCLK0, 480000);
+ /* IO1 clock at 480MHz */
+ mxs_set_ioclk(MXC_IOCLK1, 480000);
+
+ /* SSP0 clock at 96MHz */
+ mxs_set_sspclk(MXC_SSPCLK0, 96000, 0);
+ /* SSP2 clock at 160MHz */
+ mxs_set_sspclk(MXC_SSPCLK2, 160000, 0);
+
+ /* Turn the Run LED On */
+ gpio_direction_output(MX28_PAD_SPDIF__GPIO_3_27, 0);
+
+ /* Turn off software write protect of NAND */
+ gpio_direction_output(MX28_PAD_GPMI_RESETN__GPIO_0_28, 1);
+
+ /* Power on LCD */
+ gpio_direction_output(MX28_PAD_LCD_RESET__GPIO_3_30, 1);
+
+ /* Enable the LCD display */
+ gpio_direction_output(MX28_PAD_GPMI_CE3N__GPIO_0_19, 1);
+
+ /* Turn on the LCD backlight */
+ gpio_direction_output(MX28_PAD_AUART0_CTS__GPIO_3_2, 1);
+
+ /* TODO: Set the LCD backlight to maximum brightness */
+
+ /* Disbale power to the USB OTG Port */
+ gpio_direction_output(MX28_PAD_SSP0_DATA4__GPIO_2_4, 0);
+
+ /* Turn on DEBUG port CTS */
+ gpio_direction_output(MX28_PAD_SSP0_DATA5__GPIO_2_5, 1);
+
+ /* Configure the Ethernet Interrupt Input */
+ gpio_direction_input(MX28_PAD_SSP0_DATA6__GPIO_2_6);
+
+ /* Configure the 8-bit GPIO Interrupt Input */
+ gpio_direction_input(MX28_PAD_GPMI_CE2N__GPIO_0_18);
+
+
+ return 0;
+}
+
+int dram_init(void)
+{
+ return mxs_dram_init();
+}
+
+int board_init(void)
+{
+ /* Adress of boot parameters */
+ gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
+
+ return 0;
+}
+
+#ifdef CONFIG_CMD_MMC
+
+int board_mmc_init(bd_t *bis)
+{
+ return mxsmmc_initialize(bis, 0, NULL, NULL);
+}
+#endif
+
+#ifdef CONFIG_CMD_NET
+
+#define MII_OPMODE_STRAP_OVERRIDE 0x16
+#define MII_PHY_CTRL1 0x1e
+#define MII_PHY_CTRL2 0x1f
+
+int board_eth_init(bd_t *bis)
+{
+ struct mxs_clkctrl_regs *clkctrl_regs =
+ (struct mxs_clkctrl_regs *)MXS_CLKCTRL_BASE;
+ struct eth_device *dev;
+ int ret;
+
+ ret = cpu_eth_init(bis);
+ if (ret)
+ return ret;
+
+ clrsetbits_le32(&clkctrl_regs->hw_clkctrl_enet,
+ CLKCTRL_ENET_TIME_SEL_MASK,
+ CLKCTRL_ENET_TIME_SEL_RMII_CLK |
+ CLKCTRL_ENET_CLK_OUT_EN);
+
+ /* Reset the PHY */
+ gpio_direction_output(MX28_PAD_SAIF0_MCLK__GPIO_3_20, 0);
+ mdelay(10);
+ gpio_set_value(MX28_PAD_SAIF0_MCLK__GPIO_3_20, 1);
+ mdelay(10);
+
+ ret = fecmxc_initialize_multi(bis, 0, 0, MXS_ENET0_BASE);
+ if (ret) {
+ printf("FEC MXS: Unable to init FEC0\n");
+ return ret;
+ }
+
+ dev = eth_get_dev_by_name("FEC0");
+ if (!dev) {
+ printf("FEC MXS: Unable to get FEC0 device entry\n");
+ return -EINVAL;
+ }
+
+ return ret;
+}
+
+#endif
diff --git a/board/reachtech/g2c1/spl_boot.c b/board/reachtech/g2c1/spl_boot.c
new file mode 100644
index 0000000..bca9dad
--- /dev/null
+++ b/board/reachtech/g2c1/spl_boot.c
@@ -0,0 +1,236 @@
+/*
+ * DENX M28 Boot setup
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut at gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <common.h>
+#include <config.h>
+#include <asm/io.h>
+#include <asm/arch/iomux-mx28.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/sys_proto.h>
+
+#define MUX_CONFIG_I2C (MXS_PAD_1V8 | MXS_PAD_4MA | MXS_PAD_NOPULL)
+#define MUX_CONFIG_SPI (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL)
+#define MUX_CONFIG_CAN (MXS_PAD_1V8 | MXS_PAD_4MA | MXS_PAD_NOPULL)
+#define MUX_CONFIG_LED (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL)
+#define MUX_CONFIG_LCD (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL)
+#define MUX_CONFIG_SSP0 (MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_PULLUP)
+#define MUX_CONFIG_GPMI (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL)
+#define MUX_CONFIG_ENET (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_PULLUP)
+#define MUX_CONFIG_EMI (MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_NOPULL)
+#define MUX_CONFIG_JTAG (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL)
+#define MUX_CONFIG_UART (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL)
+#define MUX_CONFIG_GPIO (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL)
+#define MUX_CONFIG_PWM (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL)
+
+const iomux_cfg_t iomux_setup[] = {
+ /* Run LED */
+ MX28_PAD_SPDIF__GPIO_3_27 | MUX_CONFIG_LED,
+
+ /* JTAG */
+ MX28_PAD_JTAG_RTCK__JTAG_RTCK | MUX_CONFIG_JTAG,
+
+ /* LCD Framebuffer */
+ MX28_PAD_LCD_D00__LCD_D0 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D01__LCD_D1 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D02__LCD_D2 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D03__LCD_D3 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D04__LCD_D4 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D05__LCD_D5 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D06__LCD_D6 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D07__LCD_D7 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D08__LCD_D8 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D09__LCD_D9 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D10__LCD_D10 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D11__LCD_D11 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D12__LCD_D12 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D13__LCD_D13 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D14__LCD_D14 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D15__LCD_D15 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D16__LCD_D16 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D17__LCD_D17 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D18__LCD_D18 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D19__LCD_D19 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D20__LCD_D20 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D21__LCD_D21 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D22__LCD_D22 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_D23__LCD_D23 | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_RD_E__LCD_VSYNC | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_WR_RWN__LCD_HSYNC | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_RS__LCD_DOTCLK | MUX_CONFIG_LCD,
+ MX28_PAD_LCD_CS__LCD_ENABLE | MUX_CONFIG_LCD,
+
+ /* LCD Panel Power Enable */
+ MX28_PAD_LCD_RESET__GPIO_3_30 | (MXS_PAD_3V3 | MXS_PAD_4MA),
+
+ /* LCD Backlight Enable */
+ MX28_PAD_AUART0_CTS__GPIO_3_2 | (MXS_PAD_3V3 | MXS_PAD_4MA),
+
+ /* LCD Brightness */
+ MX28_PAD_PWM3__PWM_3 | MUX_CONFIG_PWM,
+
+ /* Display On */
+ MX28_PAD_GPMI_CE3N__GPIO_0_19 | MUX_CONFIG_GPIO,
+
+ /* DUART with GPIO CTS Control - RS232 DEBUG Port */
+ MX28_PAD_I2C0_SDA__DUART_TX | MUX_CONFIG_UART,
+ MX28_PAD_I2C0_SCL__DUART_RX | MUX_CONFIG_UART,
+ MX28_PAD_SSP0_DATA5__GPIO_2_5 | MUX_CONFIG_UART,
+
+ /* AUART1 - RS232 */
+ MX28_PAD_AUART1_RX__AUART1_RX | MUX_CONFIG_UART,
+ MX28_PAD_AUART1_TX__AUART1_TX | MUX_CONFIG_UART,
+
+ /* AUART0 - RS485 */
+ MX28_PAD_AUART0_RX__AUART0_RX | MUX_CONFIG_UART,
+ MX28_PAD_AUART0_TX__AUART0_TX | MUX_CONFIG_UART,
+ MX28_PAD_AUART0_RTS__AUART0_RTS | MUX_CONFIG_UART,
+
+ /* AUART4 - RS485 */
+ MX28_PAD_SAIF0_BITCLK__AUART4_RX | MUX_CONFIG_UART,
+ MX28_PAD_SAIF0_SDATA0__AUART4_TX | MUX_CONFIG_UART,
+ MX28_PAD_SAIF0_LRCLK__AUART4_RTS | MUX_CONFIG_UART,
+
+ /* I2C */
+ MX28_PAD_PWM0__I2C1_SCL | MUX_CONFIG_I2C,
+ MX28_PAD_PWM1__I2C1_SDA | MUX_CONFIG_I2C,
+
+ /* CAN */
+ MX28_PAD_GPMI_RDY2__CAN0_TX | MUX_CONFIG_CAN,
+ MX28_PAD_GPMI_RDY3__CAN0_RX | MUX_CONFIG_CAN,
+
+ /* SPI */
+ MX28_PAD_SSP2_SCK__SSP2_SCK | MUX_CONFIG_SPI,
+ MX28_PAD_SSP2_MOSI__SSP2_CMD | MUX_CONFIG_SPI,
+ MX28_PAD_SSP2_MISO__SSP2_D0 | MUX_CONFIG_SPI,
+ MX28_PAD_SSP2_SS0__SSP2_D3 | MUX_CONFIG_SPI,
+ MX28_PAD_SSP2_SS1__SSP2_D4 | MUX_CONFIG_SPI,
+
+ /* MMC0 */
+ MX28_PAD_SSP0_DATA0__SSP0_D0 | MUX_CONFIG_SSP0,
+ MX28_PAD_SSP0_DATA1__SSP0_D1 | MUX_CONFIG_SSP0,
+ MX28_PAD_SSP0_DATA2__SSP0_D2 | MUX_CONFIG_SSP0,
+ MX28_PAD_SSP0_DATA3__SSP0_D3 | MUX_CONFIG_SSP0,
+ MX28_PAD_SSP0_CMD__SSP0_CMD | MUX_CONFIG_SSP0,
+ MX28_PAD_SSP0_DETECT__SSP0_CARD_DETECT | MUX_CONFIG_SSP0,
+ MX28_PAD_SSP0_SCK__SSP0_SCK | MUX_CONFIG_SSP0,
+
+ /* GPIO Interrupt */
+ MX28_PAD_GPMI_CE2N__GPIO_0_18 | MUX_CONFIG_GPIO,
+
+ /* USB Reset */
+ MX28_PAD_SSP0_DATA7__GPIO_2_7 | MUX_CONFIG_GPIO,
+
+ /* USB Power Enable */
+ MX28_PAD_SSP0_DATA4__GPIO_2_4 | MUX_CONFIG_GPIO,
+
+ /* USB Overcurrent */
+ MX28_PAD_SSP2_SS2__USB0_OVERCURRENT | (MXS_PAD_3V3 | MXS_PAD_4MA),
+
+ /* USB OTG ID */
+ MX28_PAD_PWM2__USB0_ID | (MXS_PAD_3V3 | MXS_PAD_4MA),
+
+ /* Onboard Audio */
+ MX28_PAD_SAIF1_SDATA0__PWM_7 | MUX_CONFIG_PWM,
+ MX28_PAD_PWM4__PWM_4 | MUX_CONFIG_PWM,
+
+ /* GPMI NAND */
+ MX28_PAD_GPMI_D00__GPMI_D0 | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_D01__GPMI_D1 | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_D02__GPMI_D2 | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_D03__GPMI_D3 | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_D04__GPMI_D4 | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_D05__GPMI_D5 | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_D06__GPMI_D6 | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_D07__GPMI_D7 | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_CE0N__GPMI_CE0N | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_CE1N__GPMI_CE1N | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_RDY0__GPMI_READY0 | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_RDY1__GPMI_READY1 | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_RDN__GPMI_RDN | (MXS_PAD_3V3 |
+ MXS_PAD_8MA |
+ MXS_PAD_PULLUP),
+ MX28_PAD_GPMI_WRN__GPMI_WRN | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_ALE__GPMI_ALE | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_CLE__GPMI_CLE | MUX_CONFIG_GPMI,
+
+ /* NAND WP */
+ MX28_PAD_GPMI_RESETN__GPIO_0_28 | MUX_CONFIG_GPIO,
+
+ /* FEC Ethernet */
+ MX28_PAD_ENET0_MDC__ENET0_MDC | MUX_CONFIG_ENET,
+ MX28_PAD_ENET0_MDIO__ENET0_MDIO | MUX_CONFIG_ENET,
+ MX28_PAD_ENET0_RX_EN__ENET0_RX_EN | MUX_CONFIG_ENET,
+ MX28_PAD_ENET0_TX_EN__ENET0_TX_EN | MUX_CONFIG_ENET,
+ MX28_PAD_ENET0_RXD0__ENET0_RXD0 | MUX_CONFIG_ENET,
+ MX28_PAD_ENET0_RXD1__ENET0_RXD1 | MUX_CONFIG_ENET,
+ MX28_PAD_ENET0_TXD0__ENET0_TXD0 | MUX_CONFIG_ENET,
+ MX28_PAD_ENET0_TXD1__ENET0_TXD1 | MUX_CONFIG_ENET,
+ MX28_PAD_ENET_CLK__CLKCTRL_ENET | MUX_CONFIG_ENET,
+
+ /* PHY reset */
+ MX28_PAD_SAIF0_MCLK__GPIO_3_20 | MUX_CONFIG_ENET,
+
+ /* Ethernet Interrupt */
+ MX28_PAD_SSP0_DATA6__GPIO_2_6 | MUX_CONFIG_ENET,
+
+ /* EMI */
+ MX28_PAD_EMI_D00__EMI_DATA0 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_D01__EMI_DATA1 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_D02__EMI_DATA2 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_D03__EMI_DATA3 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_D04__EMI_DATA4 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_D05__EMI_DATA5 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_D06__EMI_DATA6 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_D07__EMI_DATA7 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_D08__EMI_DATA8 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_D09__EMI_DATA9 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_D10__EMI_DATA10 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_D11__EMI_DATA11 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_D12__EMI_DATA12 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_D13__EMI_DATA13 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_D14__EMI_DATA14 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_D15__EMI_DATA15 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_ODT0__EMI_ODT0 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_DQM0__EMI_DQM0 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_DQM1__EMI_DQM1 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_DDR_OPEN_FB__EMI_DDR_OPEN_FEEDBACK | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_CLK__EMI_CLK | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_DQS0__EMI_DQS0 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_DQS1__EMI_DQS1 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_DDR_OPEN__EMI_DDR_OPEN | MUX_CONFIG_EMI,
+
+ MX28_PAD_EMI_A00__EMI_ADDR0 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_A01__EMI_ADDR1 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_A02__EMI_ADDR2 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_A03__EMI_ADDR3 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_A04__EMI_ADDR4 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_A05__EMI_ADDR5 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_A06__EMI_ADDR6 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_A07__EMI_ADDR7 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_A08__EMI_ADDR8 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_A09__EMI_ADDR9 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_A10__EMI_ADDR10 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_A11__EMI_ADDR11 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_A12__EMI_ADDR12 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_A13__EMI_ADDR13 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_A14__EMI_ADDR14 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_BA0__EMI_BA0 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_BA1__EMI_BA1 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_BA2__EMI_BA2 | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_CASN__EMI_CASN | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_RASN__EMI_RASN | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_WEN__EMI_WEN | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_CE0N__EMI_CE0N | MUX_CONFIG_EMI,
+ MX28_PAD_EMI_CKE__EMI_CKE | MUX_CONFIG_EMI,
+};
+
+void board_init_ll(const uint32_t arg, const uint32_t *resptr)
+{
+ mxs_common_spl_init(arg, resptr, iomux_setup, ARRAY_SIZE(iomux_setup));
+}
diff --git a/configs/g2c1_mmc_defconfig b/configs/g2c1_mmc_defconfig
new file mode 100644
index 0000000..9ec2379
--- /dev/null
+++ b/configs/g2c1_mmc_defconfig
@@ -0,0 +1,4 @@
+CONFIG_SPL=y
+CONFIG_SYS_EXTRA_OPTIONS="ENV_IS_IN_MMC"
++S:CONFIG_ARM=y
++S:CONFIG_TARGET_G2C1=y
diff --git a/configs/g2c1_nand_defconfig b/configs/g2c1_nand_defconfig
new file mode 100644
index 0000000..443eeeb
--- /dev/null
+++ b/configs/g2c1_nand_defconfig
@@ -0,0 +1,4 @@
+CONFIG_SPL=y
+CONFIG_SYS_EXTRA_OPTIONS="ENV_IS_IN_NAND"
++S:CONFIG_ARM=y
++S:CONFIG_TARGET_G2C1=y
diff --git a/include/configs/g2c1.h b/include/configs/g2c1.h
new file mode 100644
index 0000000..ddc12de
--- /dev/null
+++ b/include/configs/g2c1.h
@@ -0,0 +1,307 @@
+/*
+ * Copyright (C) 2015 Graeme Russ <gruss at tss-engineering.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+#ifndef __CONFIGS_G2C1_H__
+#define __CONFIGS_G2C1_H__
+
+#ifdef DEBUG
+#define CONFIG_SPL_SERIAL_SUPPORT
+#endif
+
+/* System configurations */
+#define CONFIG_MX28 /* i.MX28 SoC */
+#define CONFIG_SYS_MXS_VDD5V_ONLY /* No Battery */
+
+/* TODO: Remove all references to MACH_TYPE
+#define MACH_TYPE_G2C1 3613
+#define CONFIG_MACH_TYPE MACH_TYPE_G2C1
+*/
+
+#define CONFIG_FIT
+
+#define CONFIG_TIMESTAMP /* Print image info with timestamp */
+
+/* U-Boot Commands */
+#define CONFIG_SYS_NO_FLASH
+#include <config_cmd_default.h>
+#define CONFIG_DISPLAY_CPUINFO
+#define CONFIG_DOS_PARTITION
+#define CONFIG_FAT_WRITE
+
+#define CONFIG_CMD_ASKENV
+#define CONFIG_CMD_BMP
+#define CONFIG_CMD_CACHE
+#define CONFIG_CMD_DATE
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_EEPROM
+#define CONFIG_CMD_EXT4
+#define CONFIG_CMD_EXT4_WRITE
+#define CONFIG_CMD_FAT
+#define CONFIG_CMD_FS_GENERIC
+#define CONFIG_CMD_FUSE
+#define CONFIG_CMD_GPIO
+#define CONFIG_CMD_GREPENV
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_MMC
+#define CONFIG_CMD_NAND
+#define CONFIG_CMD_NAND_TRIMFFS
+#define CONFIG_CMD_NET
+#define CONFIG_CMD_NFS
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_SETEXPR
+#define CONFIG_CMD_SF
+#define CONFIG_CMD_SPI
+#define CONFIG_CMD_USB
+#define CONFIG_VIDEO
+
+#define CONFIG_REGEX /* Enable regular expression support */
+
+/* Memory configuration */
+#define CONFIG_NR_DRAM_BANKS 1 /* 1 bank of DRAM */
+#define PHYS_SDRAM_1 0x40000000 /* Base address */
+#define PHYS_SDRAM_1_SIZE 0x08000000 /* Max 128 MB RAM */
+#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1
+
+/* Environment */
+#define CONFIG_ENV_SIZE (16 * 1024)
+
+#if defined(CONFIG_ENV_IS_IN_NAND) && defined(CONFIG_ENV_IS_IN_MMC)
+#error "CONFIG_ENV_IS_IN_NAND and CONFIG_ENV_IS_IN_MMC cannot both be defined"
+#elif defined(CONFIG_ENV_IS_IN_NAND)
+/* Environment is in NAND - CONFIG_CMD_NAND must be defined*/
+#if !defined(CONFIG_CMD_NAND)
+#define CONFIG_CMD_NAND
+#endif
+#define CONFIG_ENV_SIZE_REDUND CONFIG_ENV_SIZE
+#define CONFIG_ENV_SECT_SIZE (128 * 1024)
+#define CONFIG_ENV_RANGE (4 * CONFIG_ENV_SECT_SIZE)
+#define CONFIG_ENV_OFFSET (24 * CONFIG_ENV_SECT_SIZE) /* 3 MiB */
+#define CONFIG_ENV_OFFSET_REDUND (CONFIG_ENV_OFFSET + CONFIG_ENV_RANGE)
+#elif defined(CONFIG_ENV_IS_IN_MMC)
+/* Environment is in NAND - CONFIG_CMD_MMC must be defined*/
+#if !defined(CONFIG_CMD_MMC)
+#define CONFIG_CMD_MMC
+#endif
+#define CONFIG_ENV_OFFSET (-CONFIG_ENV_SIZE)
+#define CONFIG_SYS_MMC_ENV_DEV 0
+#else
+#error "Either CONFIG_ENV_IS_IN_NAND or CONFIG_ENV_IS_IN_MMC must be defined"
+#endif
+
+#define CONFIG_CMD_UBI
+#define CONFIG_CMD_UBIFS
+#define CONFIG_CMD_MTDPARTS
+#define CONFIG_RBTREE
+#define CONFIG_LZO
+#define CONFIG_MTD_DEVICE
+#define CONFIG_MTD_PARTITIONS
+#define MTDIDS_DEFAULT "nand0=gpmi-nand"
+#define MTDPARTS_DEFAULT \
+ "mtdparts=gpmi-nand:" \
+ "3m(u-boot)," \
+ "512k(env1)," \
+ "512k(env2)," \
+ "14m(boot)," \
+ "238m(data)," \
+ "- at 4096k(UBI)"
+
+/* FEC Ethernet on SoC */
+#ifdef CONFIG_CMD_NET
+#define CONFIG_FEC_MXC
+#define CONFIG_PHYLIB
+#define CONFIG_PHY_SMSC
+#endif
+
+/* EEPROM */
+#ifdef CONFIG_CMD_EEPROM
+#define CONFIG_SYS_I2C_MULTI_EEPROMS
+#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2
+#endif
+
+/* RTC */
+#ifdef CONFIG_CMD_DATE
+#define CONFIG_RTC_MXS
+#endif
+
+/* USB */
+#ifdef CONFIG_CMD_USB
+#define CONFIG_EHCI_MXS_PORT0
+#define CONFIG_EHCI_MXS_PORT1
+#define CONFIG_USB_MAX_CONTROLLER_COUNT 2
+#define CONFIG_USB_STORAGE
+#endif
+
+/* SPI */
+#ifdef CONFIG_CMD_SPI
+#define CONFIG_DEFAULT_SPI_BUS 2
+#define CONFIG_DEFAULT_SPI_CS 0
+#define CONFIG_DEFAULT_SPI_MODE SPI_MODE_0
+
+/* SPI FLASH */
+#ifdef CONFIG_CMD_SF
+#define CONFIG_SPI_FLASH
+#define CONFIG_SPI_FLASH_STMICRO
+#define CONFIG_SF_DEFAULT_BUS 2
+#define CONFIG_SF_DEFAULT_CS 0
+#define CONFIG_SF_DEFAULT_SPEED 40000000
+#define CONFIG_SF_DEFAULT_MODE SPI_MODE_0
+
+#define CONFIG_ENV_SPI_BUS 2
+#define CONFIG_ENV_SPI_CS 0
+#define CONFIG_ENV_SPI_MAX_HZ 40000000
+#define CONFIG_ENV_SPI_MODE SPI_MODE_0
+#endif
+
+#endif
+
+/* LCD */
+#ifdef CONFIG_VIDEO
+#define CONFIG_VIDEO_LOGO
+#define CONFIG_SPLASH_SCREEN
+#define CONFIG_CMD_BMP
+#define CONFIG_BMP_16BPP
+#define CONFIG_VIDEO_BMP_RLE8
+#define CONFIG_VIDEO_BMP_GZIP
+#define CONFIG_SYS_VIDEO_LOGO_MAX_SIZE (2 << 20)
+#endif
+
+/* Booting Linux */
+#define CONFIG_BOOTDELAY 3
+#define CONFIG_BOOTFILE "fitImage"
+#define CONFIG_BOOTARGS "console=ttyAMA0,115200n8 "
+#define CONFIG_BOOTCOMMAND "run mmc_mmc"
+#define CONFIG_LOADADDR 0x42000000
+#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR
+
+/* Extra Environment */
+#define CONFIG_PREBOOT "run try_bootscript"
+#define CONFIG_HOSTNAME g2c1
+
+#define CONFIG_EXTRA_ENV_SETTINGS \
+ "consdev=ttyAMA0\0" \
+ "baudrate=115200\0" \
+ "bootscript=boot.scr\0" \
+ "bootdev=/dev/mmcblk0p2\0" \
+ "rootdev=/dev/mmcblk0p3\0" \
+ "netdev=eth0\0" \
+ "hostname=g2c1\0" \
+ "kernel_addr_r=0x42000000\0" \
+ "videomode=video=ctfb:x:800,y:480,depth:18,mode:0,pclk:30066," \
+ "le:0,ri:256,up:0,lo:45,hs:1,vs:1,sync:100663296," \
+ "vmode:0\0" \
+ "update_nand_full_filename=u-boot.nand\0" \
+ "update_nand_firmware_filename=u-boot.sb\0" \
+ "update_sd_firmware_filename=u-boot.sd\0" \
+ "update_nand_firmware_maxsz=0x100000\0" \
+ "update_nand_stride=0x40\0" /* MX28 datasheet ch. 12.12 */ \
+ "update_nand_count=0x4\0" /* MX28 datasheet ch. 12.12 */ \
+ "update_nand_get_fcb_size=" /* Get size of FCB blocks */ \
+ "nand device 0 ; " \
+ "nand info ; " \
+ "setexpr fcb_sz ${update_nand_stride} * ${update_nand_count};" \
+ "setexpr update_nand_fcb ${fcb_sz} * ${nand_writesize}\0" \
+ "update_nand_full=" /* Update FCB, DBBT and FW */ \
+ "if tftp ${update_nand_full_filename} ; then " \
+ "run update_nand_get_fcb_size ; " \
+ "nand scrub -y 0x0 ${filesize} ; " \
+ "nand write.raw ${loadaddr} 0x0 ${fcb_sz} ; " \
+ "setexpr update_off ${loadaddr} + ${update_nand_fcb} ; " \
+ "setexpr update_sz ${filesize} - ${update_nand_fcb} ; " \
+ "nand write ${update_off} ${update_nand_fcb} ${update_sz} ; " \
+ "fi\0" \
+ "update_nand_firmware=" /* Update only firmware */ \
+ "if tftp ${update_nand_firmware_filename} ; then " \
+ "run update_nand_get_fcb_size ; " \
+ "setexpr fcb_sz ${update_nand_fcb} * 2 ; " /* FCB + DBBT */ \
+ "setexpr fw_sz ${update_nand_firmware_maxsz} * 2 ; " \
+ "setexpr fw_off ${fcb_sz} + ${update_nand_firmware_maxsz};" \
+ "nand erase ${fcb_sz} ${fw_sz} ; " \
+ "nand write ${loadaddr} ${fcb_sz} ${filesize} ; " \
+ "nand write ${loadaddr} ${fw_off} ${filesize} ; " \
+ "fi\0" \
+ "update_sd_firmware=" /* Update the SD firmware partition */ \
+ "if mmc rescan ; then " \
+ "if tftp ${update_sd_firmware_filename} ; then " \
+ "setexpr fw_sz ${filesize} / 0x200 ; " /* SD block size */ \
+ "setexpr fw_sz ${fw_sz} + 1 ; " \
+ "mmc write ${loadaddr} 0x800 ${fw_sz} ; " \
+ "fi ; " \
+ "fi\0" \
+ "addcons=" \
+ "setenv bootargs ${bootargs} " \
+ "console=${consdev},${baudrate}\0" \
+ "addip=" \
+ "setenv bootargs ${bootargs} " \
+ "ip=${ipaddr}:${serverip}:${gatewayip}:" \
+ "${netmask}:${hostname}:${netdev}:off\0" \
+ "addmisc=" \
+ "setenv bootargs ${bootargs} ${miscargs}\0" \
+ "adddfltmtd=" \
+ "if test \"x${mtdparts}\" == \"x\" ; then " \
+ "mtdparts default ; " \
+ "fi\0" \
+ "addmtd=" \
+ "run adddfltmtd ; " \
+ "setenv bootargs ${bootargs} ${mtdparts}\0" \
+ "addargs=run addcons addmtd addmisc\0" \
+ "mmcload=" \
+ "mmc rescan ; " \
+ "load mmc 0:2 ${kernel_addr_r} ${bootfile}\0" \
+ "ubiload=" \
+ "ubi part UBI ; ubifsmount ubi0:rootfs ; " \
+ "ubifsload ${kernel_addr_r} /boot/${bootfile}\0" \
+ "netload=" \
+ "tftp ${kernel_addr_r} ${hostname}/${bootfile}\0" \
+ "miscargs=nohlt panic=1\0" \
+ "mmcargs=setenv bootargs root=${rootdev} rw rootwait\0" \
+ "ubiargs=" \
+ "setenv bootargs ubi.mtd=5 " \
+ "root=ubi0:rootfs rootfstype=ubifs\0" \
+ "nfsargs=" \
+ "setenv bootargs root=/dev/nfs rw " \
+ "nfsroot=${serverip}:${rootpath},v3,tcp\0" \
+ "mmc_mmc=" \
+ "run mmcload mmcargs addargs ; " \
+ "bootm ${kernel_addr_r}\0" \
+ "mmc_ubi=" \
+ "run mmcload ubiargs addargs ; " \
+ "bootm ${kernel_addr_r}\0" \
+ "mmc_nfs=" \
+ "run mmcload nfsargs addip addargs ; " \
+ "bootm ${kernel_addr_r}\0" \
+ "ubi_mmc=" \
+ "run ubiload mmcargs addargs ; " \
+ "bootm ${kernel_addr_r}\0" \
+ "ubi_ubi=" \
+ "run ubiload ubiargs addargs ; " \
+ "bootm ${kernel_addr_r}\0" \
+ "ubi_nfs=" \
+ "run ubiload nfsargs addip addargs ; " \
+ "bootm ${kernel_addr_r}\0" \
+ "net_mmc=" \
+ "run netload mmcargs addargs ; " \
+ "bootm ${kernel_addr_r}\0" \
+ "net_ubi=" \
+ "run netload ubiargs addargs ; " \
+ "bootm ${kernel_addr_r}\0" \
+ "net_nfs=" \
+ "run netload nfsargs addip addargs ; " \
+ "bootm ${kernel_addr_r}\0" \
+ "try_bootscript=" \
+ "mmc rescan;" \
+ "if test -e mmc 0:2 ${bootscript} ; then " \
+ "if load mmc 0:2 ${kernel_addr_r} ${bootscript};" \
+ "then ; " \
+ "echo Running bootscript... ; " \
+ "source ${kernel_addr_r} ; " \
+ "fi ; " \
+ "fi\0"
+
+/* The rest of the configuration is shared */
+#include <configs/mxs.h>
+
+#endif /* __CONFIGS_G2C1_H__ */
--
1.9.3
More information about the U-Boot
mailing list