From: Markus Niebel <markus.nie...@tqs.de>

This patch adds support for booting from SPI NOR flash and
having the environment also in SPI NOR. Also all environment
settings to allow update of bootloader and kernel are added.

Signed-off-by: Markus Niebel <markus.nie...@tq-group.com>
---
 board/tqc/tqma6/README  |    4 ++
 boards.cfg              |    2 +
 include/configs/tqma6.h |  103 +++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 109 insertions(+)

diff --git a/board/tqc/tqma6/README b/board/tqc/tqma6/README
index 096cd17..2c012e7 100644
--- a/board/tqc/tqma6/README
+++ b/board/tqc/tqma6/README
@@ -9,6 +9,7 @@ U-Boot to the TQ Systems TQMa6 modules.
 The following boot source is supported:
 
 - SD/eMMC
+- SPI NOR
 
 2. Building
 ------------
@@ -24,8 +25,11 @@ s - means i.MX6S: TQMa6S  (i.MX6S)
 
 baseboard is a placeholder for the boot device
 mmc - means eMMC
+spi - mean SPI NOR
 
 This gives the following configurations:
 
 tqma6q_mba6_mmc_config
+tqma6q_mba6_spi_config
 tqma6s_mba6_mmc_config
+tqma6s_mba6_spi_config
diff --git a/boards.cfg b/boards.cfg
index 4868ed9..d41288a 100644
--- a/boards.cfg
+++ b/boards.cfg
@@ -331,7 +331,9 @@ Active  arm         armv7          mx6         freescale    
   mx6slevk
 Active  arm         armv7          mx6         gateworks       gw_ventana      
    gwventana                            
gw_ventana:IMX_CONFIG=board/gateworks/gw_ventana/gw_ventana.cfg,MX6QDL,SPL      
                                            Tim Harvey <thar...@gateworks.com>
 Active  arm         armv7          mx6         solidrun        hummingboard    
    hummingboard_solo                     
hummingboard:IMX_CONFIG=board/solidrun/hummingboard/solo.cfg,MX6S,DDR_MB=512    
                                                  Jon Nettleton 
<jon.nettle...@gmail.com>
 Active  arm         armv7          mx6         tqc             tqma6           
    tqma6q_mba6_mmc                       
tqma6:IMX_CONFIG=board/tqc/tqma6/tqma6q.cfg,MX6Q,MBA6,TQMA6X_MMC_BOOT           
                                                 Markus Niebel 
<markus.nie...@tq-group.com>
+Active  arm         armv7          mx6         tqc             tqma6           
    tqma6q_mba6_spi                       
tqma6:IMX_CONFIG=board/tqc/tqma6/tqma6q.cfg,MX6Q,MBA6,TQMA6X_SPI_BOOT           
                                                 Markus Niebel 
<markus.nie...@tq-group.com>
 Active  arm         armv7          mx6         tqc             tqma6           
    tqma6s_mba6_mmc                       
tqma6:IMX_CONFIG=board/tqc/tqma6/tqma6s.cfg,MX6S,MBA6,TQMA6X_MMC_BOOT           
                                                 Markus Niebel 
<markus.nie...@tq-group.com>
+Active  arm         armv7          mx6         tqc             tqma6           
    tqma6s_mba6_spi                       
tqma6:IMX_CONFIG=board/tqc/tqma6/tqma6s.cfg,MX6S,MBA6,TQMA6X_SPI_BOOT           
                                                 Markus Niebel 
<markus.nie...@tq-group.com>
 Active  arm         armv7          omap3       -               overo           
    omap3_overo                           -                                     
                                                                                
            Steve Sakoman <sako...@gmail.com>
 Active  arm         armv7          omap3       -               pandora         
    omap3_pandora                         -                                     
                                                                                
            Grazvydas Ignotas <nota...@gmail.com>
 Active  arm         armv7          omap3       8dtech          eco5pk          
    eco5pk                                -                                     
                                                                                
            Raphael Assenat <r...@8d.com>
diff --git a/include/configs/tqma6.h b/include/configs/tqma6.h
index c5c5741..a5ccd06 100644
--- a/include/configs/tqma6.h
+++ b/include/configs/tqma6.h
@@ -212,6 +212,109 @@
 #define CONFIG_BOOTCOMMAND \
        "run mmcboot; run netboot; run panicboot"
 
+#elif defined(CONFIG_TQMA6X_SPI_BOOT)
+
+#define CONFIG_FLASH_SECTOR_SIZE       0x10000
+
+#define CONFIG_UBOOT_OFFSET            0x400
+#define CONFIG_UBOOT_SECTOR_START      0x0
+/* max u-boot size: 512k */
+#define CONFIG_UBOOT_SECTOR_SIZE       CONFIG_FLASH_SECTOR_SIZE
+#define CONFIG_UBOOT_SECTOR_COUNT      0x8
+#define CONFIG_UBOOT_SIZE              (CONFIG_UBOOT_SECTOR_SIZE * \
+                                        CONFIG_UBOOT_SECTOR_COUNT)
+
+#define CONFIG_ENV_IS_IN_SPI_FLASH
+#define CONFIG_SYS_REDUNDAND_ENVIRONMENT
+#define CONFIG_ENV_OFFSET              (CONFIG_UBOOT_SIZE)
+#define CONFIG_ENV_SECT_SIZE           CONFIG_FLASH_SECTOR_SIZE
+#define CONFIG_ENV_OFFSET_REDUND       (CONFIG_ENV_OFFSET + \
+                                        CONFIG_ENV_SECT_SIZE)
+
+#define CONFIG_ENV_SPI_BUS             (CONFIG_SF_DEFAULT_BUS)
+#define CONFIG_ENV_SPI_CS              (CONFIG_SF_DEFAULT_CS)
+#define CONFIG_ENV_SPI_MAX_HZ          (CONFIG_SF_DEFAULT_SPEED)
+#define CONFIG_ENV_SPI_MODE            (CONFIG_SF_DEFAULT_MODE)
+
+#define CONFIG_FDT_OFFSET              (CONFIG_ENV_OFFSET_REDUND + \
+                                        CONFIG_ENV_SECT_SIZE)
+#define CONFIG_FDT_SECT_SIZE           (CONFIG_FLASH_SECTOR_SIZE)
+
+#define CONFIG_FDT_SECTOR_START                0x0a /* 8 Sector u-boot, 2 
Sector env */
+#define CONFIG_FDT_SECTOR_COUNT                0x01
+
+#define CONFIG_KERNEL_SECTOR_START     0x10
+#define CONFIG_KERNEL_SECTOR_COUNT     0x60
+
+#define CONFIG_EXTRA_BOOTDEV_ENV_SETTINGS                                      
\
+       "mmcblkdev=0\0"                                                        \
+       "uboot_offset="__stringify(CONFIG_UBOOT_OFFSET)"\0"                    \
+       "uboot_sectors="__stringify(CONFIG_UBOOT_SECTOR_COUNT)"\0"             \
+       "fdt_start="__stringify(CONFIG_FDT_SECTOR_START)"\0"                   \
+       "fdt_sectors="__stringify(CONFIG_FDT_SECTOR_COUNT)"\0"                 \
+       "kernel_start="__stringify(CONFIG_KERNEL_SECTOR_START)"\0"             \
+       "kernel_sectors="__stringify(CONFIG_KERNEL_SECTOR_COUNT)"\0"           \
+       "update_uboot=if tftp ${uboot}; then "                                 \
+               "if itest ${filesize} > 0; then "                              \
+                       "setexpr blkc ${filesize} + "                          \
+                               __stringify(CONFIG_UBOOT_OFFSET) "; "          \
+                       "setexpr size ${uboot_sectors} * "                     \
+                               __stringify(CONFIG_FLASH_SECTOR_SIZE)"; "      \
+                       "if itest ${blkc} <= ${size}; then "                   \
+                               "sf probe; "                                   \
+                               "sf erase 0 ${size}; "                         \
+                               "sf write ${loadaddr} ${uboot_offset} "        \
+                                       "${filesize}; "                        \
+                       "fi; "                                                 \
+               "fi; fi; "                                                     \
+               "setenv filesize 0; setenv blkc; setenv size \0"               \
+       "update_kernel=run kernel_name; if tftp ${kernel}; then "              \
+               "if itest ${filesize} > 0; then "                              \
+                       "setexpr size ${kernel_sectors} * "                    \
+                               __stringify(CONFIG_FLASH_SECTOR_SIZE)"; "      \
+                       "setexpr offset ${kernel_start} * "                    \
+                               __stringify(CONFIG_FLASH_SECTOR_SIZE)"; "      \
+                       "if itest ${filesize} <= ${size}; then "               \
+                               "sf probe; "                                   \
+                               "sf erase ${offset} ${size}; "                 \
+                               "sf write ${loadaddr} ${offset} "              \
+                                       "${filesize}; "                        \
+                       "fi; "                                                 \
+               "fi; fi; "                                                     \
+               "setenv filesize 0; setenv size ; setenv offset\0"             \
+       "update_fdt=if tftp ${fdt_file}; then "                                \
+               "if itest ${filesize} > 0; then "                              \
+                       "setexpr size ${fdt_sectors} * "                       \
+                               __stringify(CONFIG_FLASH_SECTOR_SIZE)"; "      \
+                       "setexpr offset ${fdt_start} * "                       \
+                               __stringify(CONFIG_FLASH_SECTOR_SIZE)"; "      \
+                       "if itest ${filesize} <= ${size}; then "               \
+                               "sf probe; "                                   \
+                               "sf erase ${offset} ${size}; "                 \
+                               "sf write ${loadaddr} ${offset} "              \
+                                       "${filesize}; "                        \
+                       "fi; "                                                 \
+               "fi; fi; "                                                     \
+               "setenv filesize 0; setenv size ; setenv offset\0"             \
+       "loadimage=sf probe; "                                                 \
+               "setexpr size ${kernel_sectors} * "                            \
+                       __stringify(CONFIG_FLASH_SECTOR_SIZE)"; "              \
+               "setexpr offset ${kernel_start} * "                            \
+                       __stringify(CONFIG_FLASH_SECTOR_SIZE)"; "              \
+               "sf read ${loadaddr} ${offset} ${size}; "                      \
+               "setenv size ; setenv offset\0"                                \
+       "loadfdt=sf probe; "                                                   \
+               "setexpr size ${fdt_sectors} * "                               \
+                       __stringify(CONFIG_FLASH_SECTOR_SIZE)"; "              \
+               "setexpr offset ${fdt_start} * "                               \
+                       __stringify(CONFIG_FLASH_SECTOR_SIZE)"; "              \
+               "sf read ${${fdt_addr}} ${offset} ${size}; "                   \
+               "setenv size ; setenv offset\0"                                \
+
+
+#define CONFIG_BOOTCOMMAND                                                     
\
+       "sf probe; run mmcboot; run netboot; run panicboot"                    \
+
 #else
 
 #error "need to define boot source"
-- 
1.7.9.5

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to