1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * (C) Copyright 2016 3*4882a593Smuzhiyun * Heiko Schocher, DENX Software Engineering, hs@denx.de. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Based on: 6*4882a593Smuzhiyun * am335x_evm.h 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 11*4882a593Smuzhiyun */ 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #ifndef __CONFIG_AM335X_SHC_H 14*4882a593Smuzhiyun #define __CONFIG_AM335X_SHC_H 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #include <configs/ti_am335x_common.h> 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun /* settings we don;t want on this board */ 19*4882a593Smuzhiyun #undef CONFIG_SPL_AM33XX_ENABLE_RTC32K_OSC 20*4882a593Smuzhiyun #undef CONFIG_CMD_EXT4 21*4882a593Smuzhiyun #undef CONFIG_CMD_EXT4_WRITE 22*4882a593Smuzhiyun #undef CONFIG_CMD_SPI 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun #define CONFIG_CMD_CACHE 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #ifndef CONFIG_SPL_BUILD 27*4882a593Smuzhiyun # define CONFIG_TIMESTAMP 28*4882a593Smuzhiyun #endif 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun #define CONFIG_SYS_BOOTM_LEN (16 << 20) 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun /* Clock Defines */ 33*4882a593Smuzhiyun #define V_OSCK 24000000 /* Clock output from T2 */ 34*4882a593Smuzhiyun #define V_SCLK (V_OSCK) 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun /* 37*4882a593Smuzhiyun * in case of SD Card or Network boot we want to have a possibility to 38*4882a593Smuzhiyun * debrick the shc, therefore do not read environment from eMMC 39*4882a593Smuzhiyun */ 40*4882a593Smuzhiyun #if defined(CONFIG_SHC_SDBOOT) || defined(CONFIG_SHC_NETBOOT) 41*4882a593Smuzhiyun #define CONFIG_SYS_MMC_ENV_DEV 0 42*4882a593Smuzhiyun #else 43*4882a593Smuzhiyun #define CONFIG_SYS_MMC_ENV_DEV 1 44*4882a593Smuzhiyun #endif 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun /* 47*4882a593Smuzhiyun * Info when using boot partitions: As environment resides within first 48*4882a593Smuzhiyun * 128 kB, MLO must start at 128 kB == 0x20000 49*4882a593Smuzhiyun * ENV at MMC Boot0 Partition - 0/Undefined=user, 1=boot0, 2=boot1, 50*4882a593Smuzhiyun * 4..7=general0..3 51*4882a593Smuzhiyun */ 52*4882a593Smuzhiyun #define CONFIG_ENV_SIZE 0x1000 /* 4 KB */ 53*4882a593Smuzhiyun #define CONFIG_ENV_OFFSET 0x7000 /* 28 kB */ 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun #define CONFIG_HSMMC2_8BIT 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun #define CONFIG_ENV_OFFSET_REDUND 0x9000 /* 36 kB */ 58*4882a593Smuzhiyun #define CONFIG_ENV_SIZE_REDUND CONFIG_ENV_SIZE 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun #ifndef CONFIG_SHC_ICT 61*4882a593Smuzhiyun /* 62*4882a593Smuzhiyun * In builds other than ICT, reset to retry after timeout 63*4882a593Smuzhiyun * Define a timeout after which a stopped bootloader continues autoboot 64*4882a593Smuzhiyun * (only works with CONFIG_RESET_TO_RETRY) 65*4882a593Smuzhiyun */ 66*4882a593Smuzhiyun # define CONFIG_BOOT_RETRY_TIME 30 67*4882a593Smuzhiyun # define CONFIG_RESET_TO_RETRY 68*4882a593Smuzhiyun #endif 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun #define CONFIG_ENV_VARS_UBOOT_CONFIG 71*4882a593Smuzhiyun #define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun #ifndef CONFIG_SPL_BUILD 74*4882a593Smuzhiyun #define CONFIG_EXTRA_ENV_SETTINGS \ 75*4882a593Smuzhiyun "loadaddr=0x80200000\0" \ 76*4882a593Smuzhiyun "kloadaddr=0x84000000\0" \ 77*4882a593Smuzhiyun "fdtaddr=0x85000000\0" \ 78*4882a593Smuzhiyun "fdt_high=0xffffffff\0" \ 79*4882a593Smuzhiyun "rdaddr=0x81000000\0" \ 80*4882a593Smuzhiyun "bootfile=uImage\0" \ 81*4882a593Smuzhiyun "fdtfile=am335x-shc.dtb\0" \ 82*4882a593Smuzhiyun "verify=no\0" \ 83*4882a593Smuzhiyun "serverip=10.55.152.184\0" \ 84*4882a593Smuzhiyun "rootpath=/srv/nfs/shc-rootfs\0" \ 85*4882a593Smuzhiyun "console=ttyO0,115200n8\0" \ 86*4882a593Smuzhiyun "optargs=quiet\0" \ 87*4882a593Smuzhiyun "mmcdev=1\0" \ 88*4882a593Smuzhiyun "harakiri=0\0" \ 89*4882a593Smuzhiyun "mmcpart=2\0" \ 90*4882a593Smuzhiyun "active_root=root1\0" \ 91*4882a593Smuzhiyun "inactive_root=root2\0" \ 92*4882a593Smuzhiyun "mmcrootfstype=ext4 rootwait\0" \ 93*4882a593Smuzhiyun "nfsopts=nolock\0" \ 94*4882a593Smuzhiyun "static_ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}" \ 95*4882a593Smuzhiyun "::off\0" \ 96*4882a593Smuzhiyun "ip_method=none\0" \ 97*4882a593Smuzhiyun "bootargs_defaults=setenv bootargs " \ 98*4882a593Smuzhiyun "console=${console} " \ 99*4882a593Smuzhiyun "${optargs}\0" \ 100*4882a593Smuzhiyun "mmcargs=run bootargs_defaults;" \ 101*4882a593Smuzhiyun "setenv bootargs ${bootargs} " \ 102*4882a593Smuzhiyun "root=${mmcroot} " \ 103*4882a593Smuzhiyun "rootfstype=${mmcrootfstype} ip=${ip_method}\0" \ 104*4882a593Smuzhiyun "netargs=setenv bootargs console=${console} " \ 105*4882a593Smuzhiyun "${optargs} " \ 106*4882a593Smuzhiyun "root=/dev/nfs " \ 107*4882a593Smuzhiyun "nfsroot=${serverip}:${rootpath},${nfsopts} rw " \ 108*4882a593Smuzhiyun "ip=dhcp\0" \ 109*4882a593Smuzhiyun "bootenv=uEnv.txt\0" \ 110*4882a593Smuzhiyun "loadbootenv=if fatload mmc ${mmcdev} ${loadaddr} ${bootenv}; then " \ 111*4882a593Smuzhiyun "echo Loaded environment from ${bootenv}; " \ 112*4882a593Smuzhiyun "run importbootenv; " \ 113*4882a593Smuzhiyun "fi;\0" \ 114*4882a593Smuzhiyun "importbootenv=echo Importing environment variables from uEnv.txt ...; " \ 115*4882a593Smuzhiyun "env import -t $loadaddr $filesize\0" \ 116*4882a593Smuzhiyun "loaduimagefat=fatload mmc ${mmcdev} ${kloadaddr} ${bootfile}\0" \ 117*4882a593Smuzhiyun "loaduimage=ext2load mmc ${mmcdev}:${mmcpart} ${kloadaddr} /boot/${bootfile}\0" \ 118*4882a593Smuzhiyun "loadfdt=ext2load mmc ${mmcdev}:${mmcpart} ${fdtaddr} /boot/${fdtfile}\0" \ 119*4882a593Smuzhiyun "netloaduimage=tftp ${loadaddr} ${bootfile}\0" \ 120*4882a593Smuzhiyun "netloadfdt=tftp ${fdtaddr} ${fdtfile}\0" \ 121*4882a593Smuzhiyun "mmcboot=echo Booting Linux from ${mmcdevice} ...; " \ 122*4882a593Smuzhiyun "run mmcargs; " \ 123*4882a593Smuzhiyun "if run loadfdt; then " \ 124*4882a593Smuzhiyun "echo device tree detected; " \ 125*4882a593Smuzhiyun "bootm ${kloadaddr} - ${fdtaddr}; " \ 126*4882a593Smuzhiyun "else " \ 127*4882a593Smuzhiyun "bootm ${kloadaddr}; " \ 128*4882a593Smuzhiyun "fi; \0" \ 129*4882a593Smuzhiyun "netboot=echo Booting from network ...; " \ 130*4882a593Smuzhiyun "setenv autoload no; " \ 131*4882a593Smuzhiyun "dhcp; " \ 132*4882a593Smuzhiyun "run netloaduimage; " \ 133*4882a593Smuzhiyun "run netargs; " \ 134*4882a593Smuzhiyun "echo NFS path: ${serverip}:${rootpath};" \ 135*4882a593Smuzhiyun "if run netloadfdt; then " \ 136*4882a593Smuzhiyun "echo device tree detected; " \ 137*4882a593Smuzhiyun "bootm ${loadaddr} - ${fdtaddr}; " \ 138*4882a593Smuzhiyun "else " \ 139*4882a593Smuzhiyun "bootm ${loadaddr}; " \ 140*4882a593Smuzhiyun "fi; \0" \ 141*4882a593Smuzhiyun "emmc_erase=if test ${harakiri} = 1 ; then echo erase emmc ...; setenv mmcdev 1; mmc erase 0 200; reset; fi; \0" \ 142*4882a593Smuzhiyun "mmcpart_gp=mmcpart gp 1 40; \0" \ 143*4882a593Smuzhiyun "mmcpart_enhance=mmcpart enhance 0 64; \0" \ 144*4882a593Smuzhiyun "mmcpart_rel_write=mmcpart rel_write 1f; \0" \ 145*4882a593Smuzhiyun "mmcpart_commit=mmcpart commit 1; \0" \ 146*4882a593Smuzhiyun "mmc_hw_part=run mmcpart_gp; run mmcpart_enhance; run mmcpart_rel_write; run mmcpart_commit; \0" \ 147*4882a593Smuzhiyun "led_success=gpio set 22; \0" \ 148*4882a593Smuzhiyun "fusecmd=mmc dev 1; if mmcpart iscommitted; then echo HW Partitioning already committed; mmcpart list; else run mmc_hw_part; fi; run led_success; \0" \ 149*4882a593Smuzhiyun "uenv_exec=if test -n $uenvcmd; then " \ 150*4882a593Smuzhiyun "echo Running uenvcmd ...; " \ 151*4882a593Smuzhiyun "run uenvcmd; " \ 152*4882a593Smuzhiyun "fi;\0" \ 153*4882a593Smuzhiyun "sd_setup=echo SD/MMC-Card detected on device 0; " \ 154*4882a593Smuzhiyun "setenv mmcdevice SD; " \ 155*4882a593Smuzhiyun "setenv mmcdev 0; " \ 156*4882a593Smuzhiyun "setenv mmcpart 2; " \ 157*4882a593Smuzhiyun "setenv mmcroot /dev/mmcblk${mmcdev}p${mmcpart};\0" \ 158*4882a593Smuzhiyun "emmc_setup=echo eMMC detected on device 1; " \ 159*4882a593Smuzhiyun "setenv mmcdevice eMMC; " \ 160*4882a593Smuzhiyun "setenv mmcdev 1; " \ 161*4882a593Smuzhiyun "run emmc_erase; " \ 162*4882a593Smuzhiyun "if test ${active_root} = root2; then " \ 163*4882a593Smuzhiyun "echo Active root is partition 6 (root2); " \ 164*4882a593Smuzhiyun "setenv mmcpart 6; " \ 165*4882a593Smuzhiyun "else " \ 166*4882a593Smuzhiyun "echo Active root is partition 5 (root1); " \ 167*4882a593Smuzhiyun "setenv mmcpart 5; " \ 168*4882a593Smuzhiyun "fi; " \ 169*4882a593Smuzhiyun "setenv mmcroot /dev/mmcblk${mmcdev}p${mmcpart};\0" 170*4882a593Smuzhiyun #endif /* #ifndef CONFIG_SPL_BUILD */ 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun #if defined CONFIG_SHC_NETBOOT 173*4882a593Smuzhiyun /* Network Boot */ 174*4882a593Smuzhiyun # define CONFIG_BOOTCOMMAND \ 175*4882a593Smuzhiyun "run fusecmd; " \ 176*4882a593Smuzhiyun "if run netboot; then " \ 177*4882a593Smuzhiyun "echo Booting from network; " \ 178*4882a593Smuzhiyun "else " \ 179*4882a593Smuzhiyun "echo ERROR: Cannot boot from network!; " \ 180*4882a593Smuzhiyun "panic; " \ 181*4882a593Smuzhiyun "fi; " 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun #elif defined CONFIG_SHC_SDBOOT /* !defined CONFIG_SHC_NETBOOT */ 184*4882a593Smuzhiyun /* SD-Card Boot */ 185*4882a593Smuzhiyun # define CONFIG_BOOTCOMMAND \ 186*4882a593Smuzhiyun "if mmc dev 0; mmc rescan; then " \ 187*4882a593Smuzhiyun "run sd_setup; " \ 188*4882a593Smuzhiyun "else " \ 189*4882a593Smuzhiyun "echo ERROR: SD/MMC-Card not detected!; " \ 190*4882a593Smuzhiyun "panic; " \ 191*4882a593Smuzhiyun "fi; " \ 192*4882a593Smuzhiyun "if run loaduimage; then " \ 193*4882a593Smuzhiyun "echo Bootable SD/MMC-Card inserted, booting from it!; " \ 194*4882a593Smuzhiyun "run mmcboot; " \ 195*4882a593Smuzhiyun "else " \ 196*4882a593Smuzhiyun "echo ERROR: Unable to load uImage from SD/MMC-Card!; " \ 197*4882a593Smuzhiyun "panic; " \ 198*4882a593Smuzhiyun "fi; " 199*4882a593Smuzhiyun 200*4882a593Smuzhiyun #elif defined CONFIG_SHC_ICT 201*4882a593Smuzhiyun /* ICT adapter boots only u-boot and does HW partitioning */ 202*4882a593Smuzhiyun # define CONFIG_BOOTCOMMAND \ 203*4882a593Smuzhiyun "if mmc dev 0; mmc rescan; then " \ 204*4882a593Smuzhiyun "run sd_setup; " \ 205*4882a593Smuzhiyun "else " \ 206*4882a593Smuzhiyun "echo ERROR: SD/MMC-Card not detected!; " \ 207*4882a593Smuzhiyun "panic; " \ 208*4882a593Smuzhiyun "fi; " \ 209*4882a593Smuzhiyun "run fusecmd; " 210*4882a593Smuzhiyun 211*4882a593Smuzhiyun #else /* !defined CONFIG_SHC_NETBOOT, !defined CONFIG_SHC_SDBOOT */ 212*4882a593Smuzhiyun /* Regular Boot from internal eMMC */ 213*4882a593Smuzhiyun # define CONFIG_BOOTCOMMAND \ 214*4882a593Smuzhiyun "if mmc dev 1; mmc rescan; then " \ 215*4882a593Smuzhiyun "run emmc_setup; " \ 216*4882a593Smuzhiyun "else " \ 217*4882a593Smuzhiyun "echo ERROR: eMMC device not detected!; " \ 218*4882a593Smuzhiyun "panic; " \ 219*4882a593Smuzhiyun "fi; " \ 220*4882a593Smuzhiyun "if run loaduimage; then " \ 221*4882a593Smuzhiyun "run mmcboot; " \ 222*4882a593Smuzhiyun "else " \ 223*4882a593Smuzhiyun "echo ERROR Unable to load uImage from eMMC!; " \ 224*4882a593Smuzhiyun "echo Performing Rollback!; " \ 225*4882a593Smuzhiyun "setenv _active_ ${active_root}; " \ 226*4882a593Smuzhiyun "setenv _inactive_ ${inactive_root}; " \ 227*4882a593Smuzhiyun "setenv active_root ${_inactive_}; " \ 228*4882a593Smuzhiyun "setenv inactive_root ${_active_}; " \ 229*4882a593Smuzhiyun "saveenv; " \ 230*4882a593Smuzhiyun "reset; " \ 231*4882a593Smuzhiyun "fi; " 232*4882a593Smuzhiyun 233*4882a593Smuzhiyun #endif /* Regular Boot */ 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun /* NS16550 Configuration */ 236*4882a593Smuzhiyun #define CONFIG_SYS_NS16550_COM1 0x44e09000 /* UART0 */ 237*4882a593Smuzhiyun #define CONFIG_SYS_NS16550_COM2 0x48022000 /* UART1 */ 238*4882a593Smuzhiyun #define CONFIG_SYS_NS16550_COM3 0x48024000 /* UART2 */ 239*4882a593Smuzhiyun #define CONFIG_SYS_NS16550_COM4 0x481a6000 /* UART3 */ 240*4882a593Smuzhiyun #define CONFIG_SYS_NS16550_COM5 0x481a8000 /* UART4 */ 241*4882a593Smuzhiyun #define CONFIG_SYS_NS16550_COM6 0x481aa000 /* UART5 */ 242*4882a593Smuzhiyun #define CONFIG_CONS_INDEX 1 243*4882a593Smuzhiyun 244*4882a593Smuzhiyun /* PMIC support */ 245*4882a593Smuzhiyun #define CONFIG_POWER_TPS65217 246*4882a593Smuzhiyun 247*4882a593Smuzhiyun /* SPL */ 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun /* 250*4882a593Smuzhiyun * Disable MMC DM for SPL build and can be re-enabled after adding 251*4882a593Smuzhiyun * DM support in SPL 252*4882a593Smuzhiyun */ 253*4882a593Smuzhiyun #ifdef CONFIG_SPL_BUILD 254*4882a593Smuzhiyun #undef CONFIG_DM_MMC 255*4882a593Smuzhiyun #undef CONFIG_TIMER 256*4882a593Smuzhiyun #endif 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun #define CONFIG_CMD_DHCP 259*4882a593Smuzhiyun #define CONFIG_CMD_PING 260*4882a593Smuzhiyun #define CONFIG_DRIVER_TI_CPSW 261*4882a593Smuzhiyun #define CONFIG_MII 262*4882a593Smuzhiyun #define CONFIG_BOOTP_DEFAULT 263*4882a593Smuzhiyun #define CONFIG_BOOTP_DNS 264*4882a593Smuzhiyun #define CONFIG_BOOTP_DNS2 265*4882a593Smuzhiyun #define CONFIG_BOOTP_SEND_HOSTNAME 266*4882a593Smuzhiyun #define CONFIG_BOOTP_GATEWAY 267*4882a593Smuzhiyun #define CONFIG_BOOTP_SUBNETMASK 268*4882a593Smuzhiyun #define CONFIG_NET_RETRY_COUNT 10 269*4882a593Smuzhiyun #define CONFIG_NET_MULTI 270*4882a593Smuzhiyun #define CONFIG_PHY_ADDR 0 271*4882a593Smuzhiyun #define CONFIG_PHY_SMSC 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun /* I2C configuration */ 274*4882a593Smuzhiyun #define CONFIG_SYS_I2C_EEPROM_ADDR 0x50 /* Main EEPROM */ 275*4882a593Smuzhiyun #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2 276*4882a593Smuzhiyun #define CONFIG_SYS_I2C_SPEED 400000 277*4882a593Smuzhiyun #define CONFIG_SYS_I2C_SLAVE 1 278*4882a593Smuzhiyun 279*4882a593Smuzhiyun #define CONFIG_SHOW_BOOT_PROGRESS 280*4882a593Smuzhiyun #endif /* ! __CONFIG_AM335X_SHC_H */ 281