cgtqmx6eval: Add SPI NOR flash support
Subsystems (2)
PATCH v3 1/6 cgtqmx6eval: Add SPI NOR flash support
Add SPI NOR support:
=> sf probe
SF: Detected SST25VF032B with page size 256 Bytes, erase size 4 KiB, total 4 MiB
---
board/congatec/cgtqmx6eval/cgtqmx6eval.c | 23 +++++++++++++++++++++++ include/configs/cgtqmx6eval.h | 12 ++++++++++++ 2 files changed, 35 insertions(+)
board/congatec/cgtqmx6eval/cgtqmx6eval.c +23 -0
@@ -45,6 +45,10 @@ DECLARE_GLOBAL_DATA_PTR; PAD_CTL_DSE_40ohm | PAD_CTL_HYS | \ PAD_CTL_ODE | PAD_CTL_SRE_FAST) +#define SPI_PAD_CTRL (PAD_CTL_HYS | \ + PAD_CTL_SPEED_MED | \ + PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST) +#define MX6Q_QMX6_PFUZE_MUX IMX_GPIO_NR(6, 9)
@@ -152,6 +156,13 @@ static iomux_v3_cfg_t enet_pads_ar8035[] = { MX6_PAD_RGMII_RX_CTL__RGMII_RX_CTL | MUX_PAD_CTRL(ENET_PAD_CTRL), }; +static iomux_v3_cfg_t const ecspi1_pads[] = { +MX6_PAD_EIM_D16__ECSPI1_SCLK |MUX_PAD_CTRL (SPI_PAD_CTRL ), +MX6_PAD_EIM_D17__ECSPI1_MISO |MUX_PAD_CTRL (SPI_PAD_CTRL ), +MX6_PAD_EIM_D18__ECSPI1_MOSI |MUX_PAD_CTRL (SPI_PAD_CTRL ), +MX6_PAD_EIM_D19__GPIO3_IO19 |MUX_PAD_CTRL (NO_PAD_CTRL ), +}; +#define PC MUX_PAD_CTRL(I2C_PAD_CTRL)struct i2c_pads_info i2c_pad_info1 = { .scl = {
@@ -381,6 +392,12 @@ static void setup_iomux_uart(void)imx_iomux_v3_setup_multiple_pads (uart2_pads,ARRAY_SIZE (uart2_pads)); } +void setup_spinor (void ) +{ +imx_iomux_v3_setup_multiple_pads (ecspi1_pads,ARRAY_SIZE (ecspi1_pads)); +gpio_direction_output (IMX_GPIO_NR (3 ,19 ),0 ); +} +#ifdef CONFIG_FSL_ESDHC static struct fsl_esdhc_cfg usdhc_cfg[] = { {USDHC2_BASE_ADDR},
@@ -646,6 +663,7 @@ int board_early_init_f(void) {setup_iomux_uart ();setup_display (); +setup_spinor ();return 0 ; }
@@ -671,6 +689,11 @@ int checkboard(void)return 0 ; } +int board_spi_cs_gpio (unsigned bus,unsigned cs) +{ +return (bus ==0 && cs ==0 ) ? (IMX_GPIO_NR (3 ,19 )) : -EINVAL ; +} +#ifdef CONFIG_CMD_BMODE static const struct boot_mode board_boot_modes[] = { /* 4 bit bus width */
include/configs/cgtqmx6eval.h +12 -0
@@ -29,6 +29,16 @@/* MMC Configs */ #define CONFIG_SYS_FSL_ESDHC_ADDR 0 +/* SPI NOR */ +#define CONFIG_CMD_SF +#define CONFIG_SPI_FLASH +#define CONFIG_SPI_FLASH_STMICRO +#define CONFIG_SPI_FLASH_SST +#define CONFIG_MXC_SPI +#define CONFIG_SF_DEFAULT_BUS 0 +#define CONFIG_SF_DEFAULT_SPEED 20000000 +#define CONFIG_SF_DEFAULT_MODE (SPI_MODE_0) +/* Miscellaneous commands */ #define CONFIG_CMD_BMODE
@@ -200,8 +210,10 @@"else " \"bootz; " \"fi;\0" \ +"spilock=sf probe && sf protect lock 0x3f0000 0x10000;" \ #define CONFIG_BOOTCOMMAND \ +"run spilock;" \"mmc dev ${mmcdev};" \"if mmc rescan; then " \"if run loadbootscript; then " \
Signature · 1 line
2.6.2
PATCH v3 2/6 cgtqmx6eval: Use SPI NOR to store the environment
Congatec boards boot from SPI NOR, so it makes more sense to use SPI NOR to store the environment variables.
---
include/configs/cgtqmx6eval.h | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-)
include/configs/cgtqmx6eval.h +14 -4
@@ -245,11 +245,21 @@ (CONFIG_SYS_INIT_RAM_ADDR +CONFIG_SYS_INIT_SP_OFFSET ) /* Environment organization */ -#define CONFIG_ENV_SIZE (8 * 1024) - -#define CONFIG_ENV_IS_IN_MMC - +#if defined (CONFIG_ENV_IS_IN_MMC )#define CONFIG_ENV_OFFSET (6 * 64 * 1024)#define CONFIG_SYS_MMC_ENV_DEV 0 +#endif + +#define CONFIG_ENV_SIZE (8 * 1024) + +#define CONFIG_ENV_IS_IN_SPI_FLASH +#if defined(CONFIG_ENV_IS_IN_SPI_FLASH ) +#define CONFIG_ENV_OFFSET (768 * 1024) +#define CONFIG_ENV_SECT_SIZE (64 * 1024) +#define CONFIG_ENV_SPI_BUS CONFIG_SF_DEFAULT_BUS +#define CONFIG_ENV_SPI_CS CONFIG_SF_DEFAULT_CS +#define CONFIG_ENV_SPI_MODE CONFIG_SF_DEFAULT_MODE +#define CONFIG_ENV_SPI_MAX_HZ CONFIG_SF_DEFAULT_SPEED +#endif #endif /* __CONFIG_CGTQMX6EVAL_H */
Signature · 1 line
2.6.2
PATCH v3 3/6 cgtqmx6eval: Add fastboot support
In reply to Otavio SalvadorTested basic fastboot commands, such as:
On the U-boot prompt:
=> fastboot 0
On the host PC:
$ fastboot getvar bootloader-version -i 0x0525 bootloader-version: U-Boot 2015.10-rc2-09654-g8f41d27 finished. total time: 0.000s
$ fastboot reboot -i 0x0525 --> board reboots fine.
---
include/configs/cgtqmx6eval.h | 6 ++++++ 1 file changed, 6 insertions(+)
include/configs/cgtqmx6eval.h +6 -0
@@ -89,6 +89,12 @@#define CONFIG_G_DNL_PRODUCT_NUM 0xa4a5#define CONFIG_G_DNL_MANUFACTURER "Congatec" +#define CONFIG_USB_FUNCTION_FASTBOOT +#define CONFIG_CMD_FASTBOOT +#define CONFIG_ANDROID_BOOT_IMAGE +#define CONFIG_FASTBOOT_BUF_ADDR CONFIG_SYS_LOAD_ADDR +#define CONFIG_FASTBOOT_BUF_SIZE 0x07000000 +/* Framebuffer */ #define CONFIG_VIDEO #define CONFIG_VIDEO_IPUV3
Signature · 1 line
2.6.2
PATCH v3 4/6 cgtqmx6eval: Add SPL support
In reply to Otavio SalvadorCongatec has several MX6 boards based on quad, dual, dual-lite and solo.
Add SPL support so that all the variants can be supported.
---
arch/arm/cpu/armv7/mx6/Kconfig | 3 +
board/congatec/cgtqmx6eval/README | 78 ++-
board/congatec/cgtqmx6eval/cgtqmx6eval.c | 580 +++++++++++++++++----
board/congatec/cgtqmx6eval/imximage.cfg | 143 -----
...gtqmx6qeval_defconfig => cgtqmx6eval_defconfig} | 5 +-
include/configs/cgtqmx6eval.h | 21 +-
6 files changed, 569 insertions(+), 261 deletions(-)
delete mode 100644 board/congatec/cgtqmx6eval/imximage.cfg
rename configs/{cgtqmx6qeval_defconfig => cgtqmx6eval_defconfig} (57%)arch/arm/cpu/armv7/mx6/Kconfig +3 -0
@@ -44,6 +44,9 @@ config TARGET_ARISTAINETOS2B config TARGET_CGTQMX6EVAL bool "cgtqmx6eval" + select SUPPORT_SPL + select DM + select DM_THERMAL config TARGET_CM_FX6 bool "CM-FX6"
board/congatec/cgtqmx6eval/README +60 -18
88 lines not on this page · raw message
board/congatec/cgtqmx6eval/cgtqmx6eval.c +483 -97
701 lines not on this page · raw message
board/congatec/cgtqmx6eval/imximage.cfg deleted +0 -143
143 lines not on this page · raw message
configs/cgtqmx6eval_defconfig renamed from configs/cgtqmx6qeval_defconfig +3 -2
@@ -1,10 +1,11 @@ CONFIG_ARM=y CONFIG_ARCH_MX6=y CONFIG_TARGET_CGTQMX6EVAL=y -CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/congatec/cgtqmx6eval/imximage.cfg,MX6Q" -CONFIG_SYS_PROMPT="CGT-QMX6-Quad U-Boot > " +CONFIG_SPL=y +CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/imx-common/spl_sd.cfg,SPL,MX6QDL" # CONFIG_CMD_IMLS is not set # CONFIG_CMD_FLASH is not set # CONFIG_CMD_SETEXPR is not set +CONFIG_SYS_PROMPT="CGT-QMX6 U-Boot > " CONFIG_DM=y CONFIG_DM_THERMAL=y
include/configs/cgtqmx6eval.h +20 -1
@@ -17,6 +17,16 @@#define CONFIG_MACH_TYPE 4122 +#ifdef CONFIG_SPL +#define CONFIG_SPL_LIBCOMMON_SUPPORT +#define CONFIG_SPL_MMC_SUPPORT +#define CONFIG_SPL_SPI_SUPPORT +#define CONFIG_SPL_SPI_FLASH_SUPPORT +#define CONFIG_SYS_SPI_U_BOOT_OFFS (64 * 1024) +#define CONFIG_SPL_SPI_LOAD +#include "imx6_spl.h" +#endif +/* Size of malloc() pool */ #define CONFIG_SYS_MALLOC_LEN (10 * 1024 * 1024)
@@ -144,10 +154,11 @@#define CONFIG_MMCROOT "/dev/mmcblk0p2"#define CONFIG_SYS_MMC_ENV_DEV 0 +#define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG #define CONFIG_EXTRA_ENV_SETTINGS \ "script=boot.scr\0" \ "image=zImage\0" \ - "fdtfile=imx6q-qmx6.dtb\0" \ + "fdtfile=undefined\0" \ "fdt_addr_r=0x18000000\0" \ "boot_fdt=try\0" \ "ip_dyn=yes\0" \
@@ -192,6 +203,13 @@"else " \"bootz; " \"fi;\0" \ +"findfdt=" \ +"if test $board_rev = MX6Q ; then " \ +"setenv fdtfile imx6q-qmx6.dtb; fi; " \ +"if test $board_rev = MX6DL ; then " \ +"setenv fdtfile imx6dl-qmx6.dtb; fi; " \ +"if test $fdtfile = undefined; then " \ +"echo WARNING: Could not determine dtb to use; fi; \0" \"netargs=setenv bootargs console=${console},${baudrate} " \"root=/dev/nfs " \"ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0" \
@@ -220,6 +238,7 @@#define CONFIG_BOOTCOMMAND \ "run spilock;" \ + "run findfdt; " \ "mmc dev ${mmcdev};" \ "if mmc rescan; then " \ "if run loadbootscript; then " \
Signature · 1 line
2.6.2
PATCH v3 4/6 cgtqmx6eval: Add SPL support
Quoted 68 lines · Otavio Salvador
Congatec has several MX6 boards based on quad, dual, dual-lite and solo.
Add SPL support so that all the variants can be supported.
Signed-off-by Otavio Salvador <[email protected]>---
arch/arm/cpu/armv7/mx6/Kconfig | 3 + board/congatec/cgtqmx6eval/README | 78 ++- board/congatec/cgtqmx6eval/cgtqmx6eval.c | 580 +++++++++++++++++---- board/congatec/cgtqmx6eval/imximage.cfg | 143 ----- ...gtqmx6qeval_defconfig => cgtqmx6eval_defconfig} | 5 +- include/configs/cgtqmx6eval.h | 21 +- 6 files changed, 569 insertions(+), 261 deletions(-) delete mode 100644 board/congatec/cgtqmx6eval/imximage.cfg rename configs/{cgtqmx6qeval_defconfig => cgtqmx6eval_defconfig} (57%)(quoted diff) +0
-0b/arch/arm/cpu/armv7/mx6/Kconfig index 0b02e9e..9ee509e 100644
arch/arm/cpu/armv7/mx6/Kconfig +3
-0@@ -44,6 +44,9 @@ config TARGET_ARISTAINETOS2B config TARGET_CGTQMX6EVAL bool "cgtqmx6eval" + select SUPPORT_SPL + select DM + select DM_THERMAL config TARGET_CM_FX6 bool "CM-FX6"(quoted diff) +0
-0b/board/congatec/cgtqmx6eval/README index 5e76d2a..b339cd0 100644
board/congatec/cgtqmx6eval/README +17
-9@@ -1,28 +1,70 @@ -U-Boot for the Congatec Conga-QEVAl Evaluation Carrier board with -qmx6 quad module. +U-Boot for the Congatec QMX6 boards This file contains information for the port of U-Boot to the Congatec -Conga-QEVAl Evaluation Carrier board with qmx6 quad module. +QMX6 boards. -1. Boot source, boot from SD card +1. Building U-boot +------------------ + +- Build U-boot for Congatec QMX6 boards: + +$ make mrproper +$ make cgtqmx6eval_defconfig +$ make + +This will generate the following binaries: + +- SPL +- u-boot.img + +2. Flashing U-boot in the SPI NOR --------------------------------- -By default, the Congatec board can boot only from the SPI-NOR. -But, with the u-boot version provided with the board you can write boot -registers to force the board to reboot and boot from the SD slot. If -"bmode" command is not available from your pre-installed u-boot, these -instruction will produce the same effect:
board/congatec/cgtqmx6eval/README line 32
Quoted 10 lines
board/congatec/cgtqmx6eval/README +10
-0+Copy SPL and u-boot.img to the exported TFTP directory of the +host PC (/tftpboot , for example). + +=> sf probe + +=> tftp SPL + +=> sf erase 0x0 0x10000 + +=> sf write 0x12000000 0x400 0x10000
sf update would suffice.
board/congatec/cgtqmx6eval/README line 38
Quoted 5 lines
board/congatec/cgtqmx6eval/README +5
-0+=> tftp u-boot.img + +=> sf erase 0x10000 0x70000 + +=> sf write 0x12000000 0x10000 0x70000
DTTO.
Quoted 2 lines
board/congatec/cgtqmx6eval/README +2
-0+Reboot the board and the new U-boot should come up. +
[...]
Quoted 29 lines
board/congatec/cgtqmx6eval/README +29
-0+static void conv_ascii(unsigned char *dst, unsigned char *src, int len) +{ + int remain = len; + unsigned char *sptr = src; + unsigned char *dptr = dst; + + while (remain) + { + if (*sptr) { + *dptr = *sptr; + dptr++; + } + sptr++; + remain--; + } + *dptr = 0x0; +} + +#define CFG_MFG_ADDR_OFFSET (spi->size - SZ_16K) +static bool is_2gb(void) +{ + struct spi_flash *spi; + int ret; + char buf[sizeof(struct mfgdata)]; + struct mfgdata *data = (struct mfgdata *)buf; + unsigned char outbuf[32]; + + spi = spi_flash_probe(CONFIG_ENV_SPI_BUS, + CONFIG_ENV_SPI_CS,
board/congatec/cgtqmx6eval/README
Quoted 10 lines
board/congatec/cgtqmx6eval/README +10
-0+ CONFIG_ENV_SPI_MAX_HZ, CONFIG_ENV_SPI_MODE); + ret = spi_flash_read(spi, CFG_MFG_ADDR_OFFSET, sizeof(struct mfgdata), + buf); + if (ret) + return false; + + /* Congatec Part Numbers 104 and 105 have 2GiB of RAM */ + conv_ascii(outbuf, data->pn, sizeof(data->pn)); + if (!strcmp((const char *)outbuf, "016104") || + !strcmp((const char *)outbuf, "016105"))
So why exactly don't you use memcmp() here and drop the abomination above ?
Quoted 4 lines
board/congatec/cgtqmx6eval/README +4
-0+ return true; + else + return false; +}
[...]
PATCH v3 5/6 iomux-v3: Take MX6D in consideration for imx_iomux_v3_setup_pad()
In reply to Otavio SalvadorWe should also take MX6D option in consideration when defining imx_iomux_v3_setup_pad().
---
arch/arm/include/asm/imx-common/iomux-v3.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/include/asm/imx-common/iomux-v3.h +1 -1
@@ -236,7 +236,7 @@ void imx_iomux_gpio_get_function(unsigned int gpio,#if defined(CONFIG_MX6QDL )#define IOMUX_PADS (x) (MX6Q_##x), (MX6DL_##x)#define SETUP_IOMUX_PAD (def) \ -if (is_cpu_type(MXC_CPU_MX6Q)) { \ +if (is_cpu_type(MXC_CPU_MX6Q) || is_cpu_type(MXC_CPU_MX6D)) { \ imx_iomux_v3_setup_pad(MX6Q_##def); \ } else { \ imx_iomux_v3_setup_pad(MX6DL_##def); \
Signature · 1 line
2.6.2
PATCH v3 6/6 cgtqmx6eval: Add DFU support
In reply to Otavio SalvadorAdd MMC and SPI DFU support.
---
include/configs/cgtqmx6eval.h | 10 ++++++++++ 1 file changed, 10 insertions(+)
include/configs/cgtqmx6eval.h +10 -0
@@ -99,6 +99,12 @@#define CONFIG_G_DNL_PRODUCT_NUM 0xa4a5#define CONFIG_G_DNL_MANUFACTURER "Congatec" +/* USB Device Firmware Update support */ +#define CONFIG_CMD_DFU +#define CONFIG_USB_FUNCTION_DFU +#define CONFIG_DFU_MMC +#define CONFIG_DFU_SF +#define CONFIG_USB_FUNCTION_FASTBOOT #define CONFIG_CMD_FASTBOOT #define CONFIG_ANDROID_BOOT_IMAGE
@@ -163,6 +169,10 @@"boot_fdt=try\0" \"ip_dyn=yes\0" \"console=" CONFIG_CONSOLE_DEV "\0" \ +"dfuspi=dfu 0 sf 0:0:10000000:0\0" \ +"dfu_alt_info_spl=spl raw 0x400\0" \ +"dfu_alt_info_img=u-boot raw 0x10000\0" \ +"dfu_alt_info=spl raw 0x400\0" \"bootm_size=0x10000000\0" \ "mmcdev=" __stringify(CONFIG_SYS_MMC_ENV_DEV) "\0" \"mmcpart=1\0" \
Signature · 1 line
2.6.2