From bc74163a46208d1f9af8bfd2d06859b62145ef56 Mon Sep 17 00:00:00 2001 From: Andreas Dannenberg Date: Thu, 15 Aug 2019 15:55:32 -0500 Subject: board: ti: am65x: Add UART boot procedure in README am65x ROM support booting over UART. And U-Boot built for am65x EVM supports UART boot as well. Add the UART boot procedure into the README also providing a corresponding example command sequence for execution on a host PC. Signed-off-by: Andreas Dannenberg --- board/ti/am65x/README | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'board') diff --git a/board/ti/am65x/README b/board/ti/am65x/README index 16384e05ea..2e3fd9c4a8 100644 --- a/board/ti/am65x/README +++ b/board/ti/am65x/README @@ -261,3 +261,35 @@ To boot kernel from eMMC, use the following commands: => setenv mmcdev 0 => setenv bootpart 0 => boot + +UART: +----- +ROM supports booting from MCU_UART0 via X-Modem protocol. The entire UART-based +boot process up to U-Boot (proper) prompt goes through different stages and uses +different UART peripherals as follows: + + WHO | Loading WHAT | HW Module | Protocol +----------+---------------+-------------+------------ +Boot ROM | tiboot3.bin | MCU_UART0 | X-Modem(*) +R5 SPL | sysfw.itb | MCU_UART0 | Y-Modem(*) +R5 SPL | tispl.bin | MAIN_UART0 | Y-Modem +A53 SPL | u-boot.img | MAIN_UART0 | Y-Modem + +(*) Note that in addition to X/Y-Modem related protocol timeouts the DMSC + watchdog timeout of 3min (typ.) needs to be observed until System Firmware + is fully loaded (from sysfw.itb) and started. + +Example bash script sequence for running on a Linux host PC feeding all boot +artifacts needed to the device: + +MCU_DEV=/dev/ttyUSB1 +MAIN_DEV=/dev/ttyUSB0 + +stty -F $MCU_DEV 115200 cs8 -cstopb -parenb +stty -F $MAIN_DEV 115200 cs8 -cstopb -parenb + +sb --xmodem tiboot3.bin > $MCU_DEV < $MCU_DEV +sb --ymodem sysfw.itb > $MCU_DEV < $MCU_DEV +sb --ymodem tispl.bin > $MAIN_DEV < $MAIN_DEV +sleep 1 +sb --xmodem u-boot.img > $MAIN_DEV < $MAIN_DEV -- cgit From 3d95fc523e818f786cf505403052399a3236623f Mon Sep 17 00:00:00 2001 From: Lokesh Vutla Date: Wed, 4 Sep 2019 16:01:51 +0530 Subject: board: j721e: Add README Add README file explaining the build and boot procedure for J721E evm. Signed-off-by: Lokesh Vutla --- board/ti/j721e/README | 227 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 board/ti/j721e/README (limited to 'board') diff --git a/board/ti/j721e/README b/board/ti/j721e/README new file mode 100644 index 0000000000..5be7d099db --- /dev/null +++ b/board/ti/j721e/README @@ -0,0 +1,227 @@ +Introduction: +------------- +The J721e family of SoCs are part of K3 Multicore SoC architecture platform +targeting automotive applications. They are designed as a low power, high +performance and highly integrated device architecture, adding significant +enhancement on processing power, graphics capability, video and imaging +processing, virtualization and coherent memory support. + +The device is partitioned into three functional domains, each containing +specific processing cores and peripherals: +1. Wake-up (WKUP) domain: + - Device Management and Security Controller (DMSC) +2. Microcontroller (MCU) domain: + - Dual Core ARM Cortex-R5F processor +3. MAIN domain: + - Dual core 64-bit ARM Cortex-A72 + - 2 x Dual cortex ARM Cortex-R5 subsystem + - 2 x C66x Digital signal processor sub system + - C71x Digital signal processor sub-system with MMA. + +More info can be found in TRM: http://www.ti.com/lit/pdf/spruil1 + +Boot Flow: +---------- +Boot flow is similar to that of AM65x SoC and extending it with remoteproc +support. Below is the pictorial representation of boot flow: + ++------------------------------------------------------------------------+-----------------------+ +| DMSC | MCU R5 | A72 | MAIN R5/C66x/C7x | ++------------------------------------------------------------------------+-----------------------+ +| +--------+ | | | | +| | Reset | | | | | +| +--------+ | | | | +| : | | | | +| +--------+ | +-----------+ | | | +| | *ROM* |----------|-->| Reset rls | | | | +| +--------+ | +-----------+ | | | +| | | | : | | | +| | ROM | | : | | | +| |services| | : | | | +| | | | +-------------+ | | | +| | | | | *R5 ROM* | | | | +| | | | +-------------+ | | | +| | |<---------|---|Load and auth| | | | +| | | | | tiboot3.bin | | | | +| | | | +-------------+ | | | +| | | | : | | | +| | | | : | | | +| | | | : | | | +| | | | +-------------+ | | | +| | | | | *R5 SPL* | | | | +| | | | +-------------+ | | | +| | | | | Load | | | | +| | | | | sysfw.itb | | | | +| | Start | | +-------------+ | | | +| | System |<---------|---| Start | | | | +| |Firmware| | | SYSFW | | | | +| +--------+ | +-------------+ | | | +| : | | | | | | +| +---------+ | | Load | | | | +| | *SYSFW* | | | system | | | | +| +---------+ | | Config data | | | | +| | |<--------|---| | | | | +| | | | +-------------+ | | | +| | | | | DDR | | | | +| | | | | config | | | | +| | | | +-------------+ | | | +| | | | | Load | | | | +| | | | | tispl.bin | | | | +| | | | +-------------+ | | | +| | | | | Load R5 | | | | +| | | | | firmware | | | | +| | | | +-------------+ | | | +| | |<--------|---| Start A72 | | | | +| | | | | and jump to | | | | +| | | | | next image | | | | +| | | | +-------------+ | | | +| | | | | +-----------+ | | +| | |---------|-----------------------|---->| Reset rls | | | +| | | | | +-----------+ | | +| | DMSC | | | : | | +| |Services | | | +-----------+ | | +| | |<--------|-----------------------|---->|*ATF/OPTEE*| | | +| | | | | +-----------+ | | +| | | | | : | | +| | | | | +-----------+ | | +| | |<--------|-----------------------|---->| *A72 SPL* | | | +| | | | | +-----------+ | | +| | | | | | Load | | | +| | | | | | u-boot.img| | | +| | | | | +-----------+ | | +| | | | | : | | +| | | | | +-----------+ | | +| | |<--------|-----------------------|---->| *U-Boot* | | | +| | | | | +-----------+ | | +| | | | | | prompt | | | +| | | | | +-----------+ | | +| | | | | | Load R5 | | | +| | | | | | Firmware | | | +| | | | | +-----------+ | | +| | |<--------|-----------------------|-----| Start R5 | | +-----------+ | +| | |---------|-----------------------|-----+-----------+-----|----->| R5 starts | | +| | | | | | Load C6 | | +-----------+ | +| | | | | | Firmware | | | +| | | | | +-----------+ | | +| | |<--------|-----------------------|-----| Start C6 | | +-----------+ | +| | |---------|-----------------------|-----+-----------+-----|----->| C6 starts | | +| | | | | | Load C7 | | +-----------+ | +| | | | | | Firmware | | | +| | | | | +-----------+ | | +| | |<--------|-----------------------|-----| Start C7 | | +-----------+ | +| | |---------|-----------------------|-----+-----------+-----|----->| C7 starts | | +| +---------+ | | | +-----------+ | +| | | | | ++------------------------------------------------------------------------+-----------------------+ + +- Here DMSC acts as master and provides all the critical services. R5/A72 +requests DMSC to get these services done as shown in the above diagram. + +Sources: +-------- +1. SYSFW: + Tree: git://git.ti.com/processor-firmware/system-firmware-image-gen.git + Branch: master + +2. ATF: + Tree: https://github.com/ARM-software/arm-trusted-firmware.git + Branch: master + +3. OPTEE: + Tree: https://github.com/OP-TEE/optee_os.git + Branch: master + +4. U-Boot: + Tree: https://gitlab.denx.de/u-boot/u-boot + Branch: master + +Build procedure: +---------------- +1. SYSFW: +$ make CROSS_COMPILE=arm-linux-gnueabihf- + +2. ATF: +$ make CROSS_COMPILE=aarch64-linux-gnu- ARCH=aarch64 PLAT=k3 TARGET_BOARD=generic SPD=opteed + +3. OPTEE: +$ make PLATFORM=k3-j721e CFG_ARM64_core=y + +4. U-Boot: + +4.1. R5: +$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- j721e_evm_r5_defconfig O=/tmp/r5 +$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- O=/tmp/r5 + +4.2. A72: +$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- j721e_evm_a72_defconfig O=/tmp/a72 +$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- ATF=/build/k3/generic/release/bl31.bin TEE=/out/arm-plat-k3/core/tee-pager.bin O=/tmp/a72 + +Target Images +-------------- +Copy the below images to an SD card and boot: +- sysfw.itb from step 1 +- tiboot3.bin from step 4.1 +- tispl.bin, u-boot.img from 4.2 + +Image formats: +-------------- + +- tiboot3.bin: + +-----------------------+ + | X.509 | + | Certificate | + | +-------------------+ | + | | | | + | | R5 | | + | | u-boot-spl.bin | | + | | | | + | +-------------------+ | + | | | | + | | FIT header | | + | | +---------------+ | | + | | | | | | + | | | DTB 1...N | | | + | | +---------------+ | | + | +-------------------+ | + +-----------------------+ + +- tispl.bin + +-----------------------+ + | | + | FIT HEADER | + | +-------------------+ | + | | | | + | | A72 ATF | | + | +-------------------+ | + | | | | + | | A72 OPTEE | | + | +-------------------+ | + | | | | + | | A72 SPL | | + | +-------------------+ | + | | | | + | | SPL DTB 1...N | | + | +-------------------+ | + +-----------------------+ + +- sysfw.itb + +-----------------------+ + | | + | FIT HEADER | + | +-------------------+ | + | | | | + | | sysfw.bin | | + | +-------------------+ | + | | | | + | | board config | | + | +-------------------+ | + | | | | + | | PM config | | + | +-------------------+ | + | | | | + | | RM config | | + | +-------------------+ | + | | | | + | | Secure config | | + | +-------------------+ | + +-----------------------+ -- cgit From b1476b52b3bbac8f1e5b49e930d431259a6a7a0a Mon Sep 17 00:00:00 2001 From: Moses Christopher Date: Tue, 17 Sep 2019 14:25:37 +0000 Subject: am335x, guardian: update guardian board - add BOARD_LATE_INIT function calls in board.c - add swi_status detection in board.c - mux: add guardian interfaces to single pinmux structure - am33xx, kconfig: add BOARD_LATE_INIT for GUARDIAN board Signed-off-by: Moses Christopher Reviewed-by: Tom Rini --- board/bosch/guardian/board.c | 53 ++++++++++++++++++++++++++++++++++++++++++++ board/bosch/guardian/mux.c | 32 +++++++++----------------- 2 files changed, 64 insertions(+), 21 deletions(-) (limited to 'board') diff --git a/board/bosch/guardian/board.c b/board/bosch/guardian/board.c index ec0c4a17f6..072aa4ebb8 100644 --- a/board/bosch/guardian/board.c +++ b/board/bosch/guardian/board.c @@ -172,6 +172,8 @@ void sdram_init(void) int board_init(void) { + save_omap_boot_params(); + #if defined(CONFIG_HW_WATCHDOG) hw_watchdog_init(); #endif @@ -183,3 +185,54 @@ int board_init(void) #endif return 0; } + +#ifdef CONFIG_BOARD_LATE_INIT +static void set_bootmode_env(void) +{ + char *boot_device_name = NULL; + char *boot_mode_gpio = "gpio@44e07000_14"; + int ret; + int value; + + struct gpio_desc boot_mode_desc; + + switch (gd->arch.omap_boot_device) { + case BOOT_DEVICE_NAND: + boot_device_name = "nand"; + break; + case BOOT_DEVICE_USBETH: + boot_device_name = "usbeth"; + break; + default: + break; + } + + if (boot_device_name) + env_set("boot_device", boot_device_name); + + ret = dm_gpio_lookup_name(boot_mode_gpio, &boot_mode_desc); + if (ret) { + printf("%s is not found\n", boot_mode_gpio); + goto err; + } + + ret = dm_gpio_request(&boot_mode_desc, "setup_bootmode_env"); + if (ret && ret != -EBUSY) { + printf("requesting gpio: %s failed\n", boot_mode_gpio); + goto err; + } + + value = dm_gpio_get_value(&boot_mode_desc); + value ? env_set("swi_status", "0") : env_set("swi_status", "1"); + return; + +err: + env_set("swi_status", "err"); +} + +int board_late_init(void) +{ + set_bootmode_env(); + return 0; +} +#endif /* CONFIG_BOARD_LATE_INIT */ diff --git a/board/bosch/guardian/mux.c b/board/bosch/guardian/mux.c index 708c3e7fdd..20a1f2522f 100644 --- a/board/bosch/guardian/mux.c +++ b/board/bosch/guardian/mux.c @@ -26,24 +26,16 @@ static struct module_pin_mux i2c0_pin_mux[] = { {-1}, }; -static struct module_pin_mux adc_voltages_en[] = { - {OFFSET(mcasp0_ahclkx), (MODE(7) | PULLUP_EN)}, - {-1}, -}; - -static struct module_pin_mux asp_power_en[] = { - {OFFSET(mcasp0_aclkx), (MODE(7) | PULLUP_EN)}, - {-1}, -}; - -static struct module_pin_mux switch_off_3v6_pin_mux[] = { - {OFFSET(mii1_txd0), (MODE(7) | PULLUP_EN)}, - /* - * The uart1 lines are made floating inputs, based on the Guardian - * A2 Sample Power Supply Schematics - */ - {OFFSET(uart1_rxd), (MODE(7) | PULLUDDIS)}, - {OFFSET(uart1_txd), (MODE(7) | PULLUDDIS)}, +static struct module_pin_mux guardian_interfaces_pin_mux[] = { + {OFFSET(mcasp0_ahclkx), (MODE(7) | PULLDOWN_EN)}, + {OFFSET(mcasp0_aclkx), (MODE(7) | PULLUP_EN)}, + {OFFSET(mii1_txd0), (MODE(7) | PULLUP_EN)}, + {OFFSET(uart1_rxd), (MODE(7) | RXACTIVE | PULLUDDIS)}, + {OFFSET(uart1_txd), (MODE(7) | PULLUDDIS)}, + {OFFSET(mii1_crs), (MODE(7) | PULLDOWN_EN)}, + {OFFSET(rmii1_refclk), (MODE(7) | PULLDOWN_EN)}, + {OFFSET(mii1_txd3), (MODE(7) | PULLUDDIS)}, + {OFFSET(mii1_rxdv), (MODE(7) | PULLDOWN_EN)}, {-1}, }; @@ -93,7 +85,5 @@ void enable_board_pin_mux(void) #ifdef CONFIG_NAND configure_module_pin_mux(nand_pin_mux); #endif - configure_module_pin_mux(adc_voltages_en); - configure_module_pin_mux(asp_power_en); - configure_module_pin_mux(switch_off_3v6_pin_mux); + configure_module_pin_mux(guardian_interfaces_pin_mux); } -- cgit From bd8f138f5a1ed9bcd1339b0fb1daa2d024b472d1 Mon Sep 17 00:00:00 2001 From: Lokesh Vutla Date: Fri, 27 Sep 2019 13:32:12 +0530 Subject: board: am65x: Print board name and version during boot Print the board name and ver along with the DT Model. While at it print the ver for all the detected daughter cards. Signed-off-by: Lokesh Vutla --- board/ti/am65x/evm.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'board') diff --git a/board/ti/am65x/evm.c b/board/ti/am65x/evm.c index ad333ad883..544f872459 100644 --- a/board/ti/am65x/evm.c +++ b/board/ti/am65x/evm.c @@ -127,6 +127,19 @@ int do_board_detect(void) return ret; } +int checkboard(void) +{ + struct ti_am6_eeprom *ep = TI_AM6_EEPROM_DATA; + + if (do_board_detect()) + /* EEPROM not populated */ + printf("Board: %s rev %s\n", "AM6-COMPROCEVM", "E3"); + else + printf("Board: %s rev %s\n", ep->name, ep->version); + + return 0; +} + static void setup_board_eeprom_env(void) { char *name = "am65x"; @@ -272,7 +285,7 @@ static int probe_daughtercards(void) if (strncmp(ep.name, cards[i].card_name, sizeof(ep.name))) continue; - printf("detected %s\n", cards[i].card_name); + printf("Detected: %s rev %s\n", ep.name, ep.version); /* * Populate any MAC addresses from daughtercard into the U-Boot -- cgit From e8e683d33b0ccd43e03809bf4ea88a899a867473 Mon Sep 17 00:00:00 2001 From: Tero Kristo Date: Fri, 27 Sep 2019 19:14:27 +0300 Subject: board: ti: am57xx-idk: Configure the CDCE913 clock synthesizer AM57xx-IDK boards contain the CDCE913 clock synthesizer, and their reset crystal capacitance load value of 10pF is wrong leading into lost packets in certain networking tests. Add DT data for this device, and probe it from the board file to program the crystal capacitance load value to 0pF to avoid any problems. Signed-off-by: Tero Kristo --- board/ti/am57xx/board.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'board') diff --git a/board/ti/am57xx/board.c b/board/ti/am57xx/board.c index f78e6c2e1f..237a834c53 100644 --- a/board/ti/am57xx/board.c +++ b/board/ti/am57xx/board.c @@ -30,6 +30,7 @@ #include #include #include +#include #include "../common/board_detect.h" #include "mux_data.h" @@ -689,6 +690,7 @@ int board_late_init(void) { setup_board_eeprom_env(); u8 val; + struct udevice *dev; /* * DEV_CTRL.DEV_ON = 1 please - else palmas switches off in 8 seconds @@ -720,6 +722,9 @@ int board_late_init(void) am57x_idk_lcd_detect(); + /* Just probe the potentially supported cdce913 device */ + uclass_get_device(UCLASS_CLK, 0, &dev); + #if !defined(CONFIG_SPL_BUILD) board_ti_set_ethaddr(2); #endif -- cgit From 9850d4e52f7f8da1bab7fae32f90e8eba7b4f6af Mon Sep 17 00:00:00 2001 From: Tero Kristo Date: Fri, 27 Sep 2019 19:14:28 +0300 Subject: board: ti: am43xx-idk: Configure the CDCE913 clock synthesizer AM43xx-IDK boards contain the CDCE913 clock synthesizer, and their reset crystal capacitance load value of 10pF is wrong leading into lost packets in certain networking tests. Add DT data for this device, and probe it from the board file to program the crystal capacitance load value to 0pF to avoid any problems. Signed-off-by: Tero Kristo --- board/ti/am43xx/board.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'board') diff --git a/board/ti/am43xx/board.c b/board/ti/am43xx/board.c index 2e09cc20e8..f5ecf871bc 100644 --- a/board/ti/am43xx/board.c +++ b/board/ti/am43xx/board.c @@ -720,6 +720,7 @@ static int device_okay(const char *path) int board_late_init(void) { + struct udevice *dev; #ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG set_board_info_env(NULL); @@ -737,6 +738,10 @@ int board_late_init(void) if (device_okay("/ocp/omap_dwc3@483c0000")) enable_usb_clocks(1); #endif + + /* Just probe the potentially supported cdce913 device */ + uclass_get_device(UCLASS_CLK, 0, &dev); + return 0; } #endif -- cgit From 752a45a153c778bb8b2cdcd0933180b311858b86 Mon Sep 17 00:00:00 2001 From: Tero Kristo Date: Fri, 27 Sep 2019 19:14:29 +0300 Subject: board: ti: am335x-ice: Configure the CDCE913 clock synthesizer AM335x-ICE boards contain the CDCE913 clock synthesizer, and their reset crystal capacitance load value of 10pF is wrong leading into lost packets in certain networking tests. Add DT data for this device, and probe it from the board file to program the crystal capacitance load value to 0pF to avoid any problems. Signed-off-by: Tero Kristo --- board/ti/am335x/board.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'board') diff --git a/board/ti/am335x/board.c b/board/ti/am335x/board.c index 7eaa6cd96d..499c872227 100644 --- a/board/ti/am335x/board.c +++ b/board/ti/am335x/board.c @@ -791,6 +791,7 @@ int board_init(void) #ifdef CONFIG_BOARD_LATE_INIT int board_late_init(void) { + struct udevice *dev; #if !defined(CONFIG_SPL_BUILD) uint8_t mac_addr[6]; uint32_t mac_hi, mac_lo; @@ -871,6 +872,9 @@ int board_late_init(void) env_set("serial#", board_serial); } + /* Just probe the potentially supported cdce913 device */ + uclass_get_device(UCLASS_CLK, 0, &dev); + return 0; } #endif -- cgit