colibri_t20: migrate
authorMarcel Ziswiler <marcel.ziswiler@toradex.com>
Tue, 28 Apr 2015 00:07:36 +0000 (02:07 +0200)
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>
Tue, 28 Apr 2015 00:07:36 +0000 (02:07 +0200)
Migrate Colibri T20 to U-Boot 2015.04.

board/toradex/colibri_t20/Kconfig
board/toradex/colibri_t20/Makefile
board/toradex/colibri_t20/colibri_t20.c
include/configs/colibri_t20.h

index 7f373b2d26b4a66c83ca447b99515d176c868fa7..29bb33013cc0f3a90b4f75b8ccecdc2bf60c80c4 100644 (file)
@@ -9,4 +9,13 @@ config SYS_VENDOR
 config SYS_CONFIG_NAME
        default "colibri_t20"
 
+config TRDX_CFG_BLOCK
+       default y
+
+config TRDX_HAVE_NAND
+       default y
+
+config TRDX_CFG_BLOCK_OFFSET
+       default "2097152"
+
 endif
index 86f78d9d9d645dfd334da021404a4e64bb5aca1a..0bbe9c6810a12e7999127bc5e10e7236598af0d7 100644 (file)
@@ -1,8 +1,5 @@
-#
-#  (C) Copyright 2012 Lucas Stach
-#
-# SPDX-License-Identifier:     GPL-2.0+
-#
+# Copyright (c) 2011-2015 Toradex, Inc.
+# SPDX-License-Identifier:      GPL-2.0+
 
 include $(srctree)/board/nvidia/common/common.mk
 
index cf57650cbd4e0999750883318767da6fdcc4e93e..e20004e4cf3aedee9a5d13c8e231a35fdd8b2b2d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  Copyright (C) 2012 Lucas Stach
+ * Copyright (c) 2011-2015 Toradex, Inc.
  *
  * SPDX-License-Identifier:    GPL-2.0+
  */
@@ -8,8 +8,158 @@
 #include <asm/arch/clock.h>
 #include <asm/arch/funcmux.h>
 #include <asm/arch/pinmux.h>
+#include <asm/arch-tegra/ap.h>
 #include <asm/arch-tegra/board.h>
 #include <asm/gpio.h>
+#include <asm/io.h>
+#include <g_dnl.h>
+#include <i2c.h>
+#include <nand.h>
+
+#include "../common/configblock.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define PMU_I2C_ADDRESS                0x34
+#define MAX_I2C_RETRY          3
+#define PMU_SUPPLYENE          0x14
+#define PMU_SUPPLYENE_SYSINEN  (1<<5)
+#define PMU_SUPPLYENE_EXITSLREQ        (1<<1)
+
+u32 get_board_rev(void);
+
+int arch_misc_init(void)
+{
+       /* Disable PMIC sleep mode on low supply voltage */
+       struct udevice *dev;
+       u8 addr, data[1];
+       int err;
+
+       err = i2c_get_chip_for_busnum(0, PMU_I2C_ADDRESS, 1, &dev);
+       if (err) {
+               debug("%s: Cannot find PMIC I2C chip\n", __func__);
+               return err;
+       }
+
+       addr = PMU_SUPPLYENE;
+
+       err = dm_i2c_read(dev, addr, data, 1);
+       if (err) {
+               debug("failed to get PMU_SUPPLYENE\n");
+               return err;
+       }
+
+       data[0] &= ~PMU_SUPPLYENE_SYSINEN;
+       data[0] |= PMU_SUPPLYENE_EXITSLREQ;
+
+       err = dm_i2c_write(dev, addr, data, 1);
+       if (err) {
+               debug("failed to set PMU_SUPPLYENE\n");
+               return err;
+       }
+
+       /* HW version */
+       if (!getenv("hw-version")) {
+               switch (get_board_rev()) {
+               case 0x011b:
+               case 0x011c:
+                       setenv("hw-version", "v11");
+                       break;
+               case 0x012a:
+                       setenv("hw-version", "v12");
+                       break;
+               default:
+                       setenv("hw-version", (nand_info[0].erasesize >> 10
+                                             == 512)?"v11":"v12");
+               }
+       }
+
+       /* Default memory arguments */
+       if (!getenv("memargs")) {
+               switch (gd->ram_size) {
+               case 0x10000000:
+                       /* 256 MB */
+                       setenv("memargs", "mem=148M@0M fbmem=12M@148M "
+                              "nvmem=96M@160M");
+                       setenv("ram-size", "256");
+                       break;
+               case 0x20000000:
+                       /* 512 MB */
+                       setenv("memargs", "mem=372M@0M fbmem=12M@372M "
+                              "nvmem=128M@384M");
+                       setenv("ram-size", "512");
+                       break;
+               default:
+                       printf("Failed detecting RAM size.\n");
+               }
+       }
+
+       /* NAND parameters */
+       if (!getenv("leb-size")) {
+               switch (nand_info[0].erasesize >> 10) {
+               case 256:
+                       /* 256 KiB */
+                       setenv("leb-size", "248KiB");
+                       break;
+               case 512:
+                       /* 512 KiB */
+                       setenv("leb-size", "504KiB");
+                       break;
+               default:
+                       printf("Failed detecting NAND block erase size.\n");
+               }
+       }
+
+       if (readl(NV_PA_BASE_SRAM + NVBOOTINFOTABLE_BOOTTYPE) ==
+           NVBOOTTYPE_RECOVERY) {
+               printf("USB recovery mode, disabled autoboot\n");
+               setenv("bootdelay", "-1");
+       }
+
+       return 0;
+}
+
+int checkboard(void)
+{
+#ifdef CONFIG_TRDX_CFG_BLOCK
+       if (read_trdx_cfg_block())
+               printf("Missing Toradex config block\n");
+       else {
+               display_board_info();
+               return 0;
+       }
+#endif
+       printf("Model: Toradex Colibri T20 %dMB V%s\n",
+              (gd->ram_size == 0x10000000)?256:512, (nand_info[0].erasesize >> 10
+               == 512)?((gd->ram_size == 0x10000000)?"1.1B":"1.1C"):"1.2A");
+
+       return 0;
+}
+
+int g_dnl_bind_fixup(struct usb_device_descriptor *dev, const char *name)
+{
+       unsigned short prodnr = 0;
+       unsigned short usb_pid;
+
+       get_board_product_number(&prodnr);
+
+       put_unaligned(CONFIG_TRDX_VID, &dev->idVendor);
+
+       if ((prodnr != 22) && (prodnr != 24))
+               if (gd->ram_size == 0x10000000)
+                       usb_pid = CONFIG_TRDX_PID_COLIBRI_T20_256;
+               else
+                       usb_pid = CONFIG_TRDX_PID_COLIBRI_T20_512;
+       else
+               if (gd->ram_size == 0x10000000)
+                       usb_pid = CONFIG_TRDX_PID_COLIBRI_T20_256_IT;
+               else
+                       usb_pid = CONFIG_TRDX_PID_COLIBRI_T20_512_IT;
+
+       put_unaligned(usb_pid, &dev->idProduct);
+
+       return 0;
+}
 
 #ifdef CONFIG_TEGRA_MMC
 /*
index 5ce930cdbf86971c4a6b6b14a3af5cc2f3583bb9..475edee6fdedf2f979462822f7de47c554a6b871 100644 (file)
@@ -1,5 +1,7 @@
 /*
- * Copyright (C) 2012 Lucas Stach
+ * Copyright (c) 2011-2015 Toradex, Inc.
+ *
+ * Configuration settings for the Toradex Colibri T20 modules.
  *
  * SPDX-License-Identifier:    GPL-2.0+
  */
@@ -9,9 +11,14 @@
 
 #include "tegra20-common.h"
 
+#undef CONFIG_SYS_DCACHE_OFF           /* breaks L4T kernel boot */
+#define CONFIG_ARCH_MISC_INIT
+
 /* High-level configuration options */
 #define V_PROMPT                       "Colibri T20 # "
-#define CONFIG_TEGRA_BOARD_STRING      "Toradex Colibri T20"
+#define CONFIG_CUSTOM_BOARDINFO                /* not from device-tree model node */
+#undef CONFIG_DISPLAY_BOARDINFO
+#define CONFIG_DISPLAY_BOARDINFO_LATE
 
 /* Board-specific serial config */
 #define CONFIG_SERIAL_MULTI
 
 #define CONFIG_MACH_TYPE               MACH_TYPE_COLIBRI_T20
 
+#define CONFIG_INITRD_TAG
+#define CONFIG_REVISION_TAG
+#define CONFIG_SERIAL_TAG
+
+/* Make the HW version stuff available in U-Boot env */
+#define CONFIG_VERSION_VARIABLE                /* ver environment variable */
+#define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
+#define CONFIG_CMD_ASKENV
+
 /* I2C */
 #define CONFIG_SYS_I2C_TEGRA
 #define CONFIG_CMD_I2C
 #define CONFIG_TEGRA_MMC
 #define CONFIG_CMD_MMC
 
+/* USB client support */
+#define CONFIG_TRDX_VID                                0x1B67
+/* TBD */
+#define CONFIG_TRDX_PID_COLIBRI_T20_256                0x0020
+#define CONFIG_TRDX_PID_COLIBRI_T20_512                0x0021
+#define CONFIG_TRDX_PID_COLIBRI_T20_256_IT     0x0022
+#define CONFIG_TRDX_PID_COLIBRI_T20_512_IT     0x0023
+#define CONFIG_G_DNL_MANUFACTURER              "Toradex"
+#define CONFIG_G_DNL_VENDOR_NUM                        CONFIG_TRDX_VID
+#define CONFIG_G_DNL_PRODUCT_NUM               CONFIG_TRDX_PID_COLIBRI_T20_256
+
+/* USB DFU */
+#define CONFIG_DFU_NAND
+
 /* USB host support */
 #define CONFIG_USB_EHCI
 #define CONFIG_USB_EHCI_TEGRA
 /* NAND support */
 #define CONFIG_CMD_NAND
 #define CONFIG_TEGRA_NAND
-#define CONFIG_SYS_MAX_NAND_DEVICE     1
+#define CONFIG_SYS_MAX_NAND_DEVICE     1
+#define CONFIG_SYS_NAND_ONFI_DETECTION
+
+/* Dynamic MTD partition support */
+#define CONFIG_CMD_MTDPARTS    /* Enable 'mtdparts' command line support */
+#define CONFIG_MTD_PARTITIONS
+#define CONFIG_MTD_DEVICE      /* needed for mtdparts commands */
+#define MTDIDS_DEFAULT         "nand0=tegra_nand"
+#define MTDPARTS_DEFAULT       "mtdparts=tegra_nand:"          \
+                               "2m(u-boot)ro,"                 \
+                               "512k(cfgblock)ro,"             \
+                               "512k(u-boot-env),"             \
+                               "-(ubi)"
+
+#undef CONFIG_CMD_IMLS
 
 /* Environment in NAND, 64K is a bit excessive but erase block is 512K anyway */
 #define CONFIG_ENV_IS_IN_NAND
-#define CONFIG_ENV_OFFSET              (SZ_2M)
-#undef  CONFIG_ENV_SIZE /* undef size from tegra20-common.h */
-#define CONFIG_ENV_SIZE                (SZ_64K)
+#define CONFIG_ENV_OFFSET              (SZ_2M + SZ_512K)
+#undef CONFIG_ENV_SIZE /* undef size from tegra20-common.h */
+#define CONFIG_ENV_SIZE                        (SZ_64K)
+
+#define CONFIG_RBTREE
+#define CONFIG_LZO
+#define CONFIG_CMD_BOOTZ
+#define CONFIG_CMD_UBI
+#define CONFIG_MTD_UBI_FASTMAP
+#define CONFIG_CMD_UBIFS       /* increases size by almost 60 KB */
 
 /* Debug commands */
 #define CONFIG_CMD_BDI
 #define CONFIG_CMD_SETEXPR
 #define CONFIG_FAT_WRITE
 
+#undef CONFIG_BOOTDELAY
+#define CONFIG_BOOTDELAY       1
+#undef CONFIG_IPADDR
+#define CONFIG_IPADDR          192.168.10.2
+#define CONFIG_NETMASK         255.255.255.0
+#undef CONFIG_SERVERIP
+#define CONFIG_SERVERIP                192.168.10.1
+
+#define CONFIG_BOOTCOMMAND \
+       "run ubiboot; echo; echo ubiboot failed; " \
+       "run sdboot; echo; echo sdboot failed; " \
+       "run usbboot; echo; echo usbboot failed; " \
+       "run nfsboot; echo; echo nfsboot failed"
+
+#define DFU_ALT_NAND_INFO      "u-boot part 0,0;ubi part 0,3"
+
+#define NFS_BOOTCMD \
+       "nfsargs=ip=:::::eth0:on root=/dev/nfs rw netdevwait\0" \
+       "nfsboot=usb start; run setup; setenv bootargs ${defargs} ${mtdparts}" \
+               " ${nfsargs} ${setupargs} ${vidargs}; echo Booting via DHCP/" \
+               "TFTP/NFS...; run nfsdtbload; dhcp ${kernel_addr_r} " \
+               "&& bootz ${kernel_addr_r} - ${dtbparam}\0" \
+       "nfsdtbload=setenv dtbparam; tftp ${fdt_addr_r} " \
+               "${soc}-colibri-${fdt_board}.dtb " \
+               "&& setenv dtbparam ${fdt_addr_r}\0"
+
+#define SD_BOOTCMD \
+       "sdargs=ip=off root=/dev/mmcblk0p2 rw,noatime rootfstype=ext3 " \
+               "rootwait\0" \
+       "sdboot=run setup; setenv bootargs ${defargs} ${mtdparts} ${sdargs} " \
+               "${setupargs} ${vidargs}; echo Booting from SD card...; " \
+               "run sddtbload; load mmc 1:1 ${kernel_addr_r} ${boot_file} " \
+               "&& bootz ${kernel_addr_r} - ${dtbparam}\0" \
+       "sddtbload=setenv dtbparam; load mmc 1:1 ${fdt_addr_r} " \
+               "${soc}-colibri-${fdt_board}.dtb " \
+               "&& setenv dtbparam ${fdt_addr_r}\0"
+
+#define UBI_BOOTCMD \
+       "ubiargs=ubi.mtd=ubi root=ubi0:rootfs rootfstype=ubifs " \
+               "ubi.fm_autoconvert=1\0" \
+       "ubiboot=run setup; setenv bootargs ${defargs} ${ubiargs} ${mtdparts}" \
+               " ${setupargs} ${vidargs}; echo Booting from NAND...; " \
+               "ubi part ubi && ubifsmount ubi0:rootfs && run ubidtbload; " \
+               "ubifsload ${kernel_addr_r} /boot/${boot_file} && " \
+               "bootz ${kernel_addr_r} - ${dtbparam}\0" \
+       "ubidtbload=setenv dtbparam; ubifsload ${fdt_addr_r} " \
+               "/boot/${soc}-colibri-${fdt_board}.dtb && " \
+               "setenv dtbparam ${fdt_addr_r}\0"
+
+#define USB_BOOTCMD \
+       "usbargs=ip=off root=/dev/sda2 rw,noatime rootfstype=ext3 " \
+               "rootwait\0" \
+       "usbboot=run setup; setenv bootargs ${defargs} ${mtdparts} " \
+               "${setupargs} ${usbargs} ${vidargs}; echo Booting from USB " \
+               "stick...; usb start && run usbdtbload; load usb 0:1 " \
+               "${kernel_addr_r} ${boot_file} && " \
+               "bootz ${kernel_addr_r} - ${dtbparam}\0" \
+       "usbdtbload=setenv dtbparam; load usb 0:1 ${fdt_addr_r} " \
+               "${soc}-colibri-${fdt_board}.dtb " \
+               "&& setenv dtbparam ${fdt_addr_r}\0"
+
+#define BOARD_EXTRA_ENV_SETTINGS \
+       "boot_file=zImage\0" \
+       "console=ttyS0\0" \
+       "defargs=vmalloc=128M usb_high_speed=1\0" \
+       "dfu_alt_info=" DFU_ALT_NAND_INFO "\0" \
+       "fdt_board=eval-v3\0" \
+       "mtdparts=" MTDPARTS_DEFAULT "\0" \
+       NFS_BOOTCMD \
+       SD_BOOTCMD \
+       "setethupdate=tftpboot ${kernel_addr_r} flash_eth.img\0" \
+       "setsdupdate=setenv interface mmc; setenv drive 0; mmc rescan; " \
+               "load ${interface} ${drive}:1 ${kernel_addr_r} " \
+               "flash_blk.img\0" \
+       "setup=setenv setupargs asix_mac=${ethaddr} " \
+               "consoleblank=0 no_console_suspend=1 console=tty1 " \
+               "console=${console},${baudrate}n8 debug_uartport=lsport,0 " \
+               "${memargs}\0" \
+       "setusbupdate=usb start && setenv interface usb; setenv drive 0; " \
+               "load ${interface} ${drive}:1 ${kernel_addr_r} " \
+               "flash_blk.img\0" \
+       "setupdate=run setsdupdate || run setusbupdate || run setethupdate &&" \
+               " source ${loadaddr}\0" \
+       UBI_BOOTCMD \
+       USB_BOOTCMD \
+       "vidargs=video=tegrafb0:640x480-16@60\0"
+
 /* Increase console I/O buffer size */
 #undef CONFIG_SYS_CBSIZE
 #define CONFIG_SYS_CBSIZE              1024
 #undef CONFIG_SYS_MAXARGS
 #define CONFIG_SYS_MAXARGS             32
 
+#define CONFIG_CMD_TIME
+#define CONFIG_CMD_MEMTEST
+#define CONFIG_SYS_ALT_MEMTEST
+
 #include "tegra-common-usb-gadget.h"
 #include "tegra-common-post.h"