diff options
author | Marcel Ziswiler <marcel.ziswiler@toradex.com> | 2015-04-28 02:07:36 +0200 |
---|---|---|
committer | Marcel Ziswiler <marcel.ziswiler@toradex.com> | 2015-04-28 02:07:36 +0200 |
commit | 92d747bf338ceb8d6dbdd3e5e5f7f72226ce0792 (patch) | |
tree | fa0799533bc44115939977c52973254f514d49ba | |
parent | dcca76ea36fc778fa750473aee09fa0297dc5e2b (diff) |
colibri_t20: migrate
Migrate Colibri T20 to U-Boot 2015.04.
-rw-r--r-- | board/toradex/colibri_t20/Kconfig | 9 | ||||
-rw-r--r-- | board/toradex/colibri_t20/Makefile | 7 | ||||
-rw-r--r-- | board/toradex/colibri_t20/colibri_t20.c | 152 | ||||
-rw-r--r-- | include/configs/colibri_t20.h | 154 |
4 files changed, 310 insertions, 12 deletions
diff --git a/board/toradex/colibri_t20/Kconfig b/board/toradex/colibri_t20/Kconfig index 7f373b2d26..29bb33013c 100644 --- a/board/toradex/colibri_t20/Kconfig +++ b/board/toradex/colibri_t20/Kconfig @@ -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 diff --git a/board/toradex/colibri_t20/Makefile b/board/toradex/colibri_t20/Makefile index 86f78d9d9d..0bbe9c6810 100644 --- a/board/toradex/colibri_t20/Makefile +++ b/board/toradex/colibri_t20/Makefile @@ -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 diff --git a/board/toradex/colibri_t20/colibri_t20.c b/board/toradex/colibri_t20/colibri_t20.c index cf57650cbd..e20004e4cf 100644 --- a/board/toradex/colibri_t20/colibri_t20.c +++ b/board/toradex/colibri_t20/colibri_t20.c @@ -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 /* diff --git a/include/configs/colibri_t20.h b/include/configs/colibri_t20.h index 5ce930cdbf..475edee6fd 100644 --- a/include/configs/colibri_t20.h +++ b/include/configs/colibri_t20.h @@ -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 @@ -21,6 +28,15 @@ #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 @@ -31,6 +47,20 @@ #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 @@ -61,13 +91,34 @@ /* 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 @@ -77,6 +128,93 @@ #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 @@ -92,6 +230,10 @@ #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" |