# Set defaults for missing env variables. setenv boot_dir ${prefix} test -n ${loader_rev} || setenv loader_rev 0 test -n ${id} || setenv id SWANDR test -n ${emmc} || setenv emmc 0 test -n ${fbconsole} || setenv fbconsole 9 test -n ${uart_port} || setenv uart_port 0 test -n ${earlycon} || setenv earlycon 0 test -n ${r2p_action} || setenv r2p_action bootloader test -n ${autoboot} || setenv autoboot 0 test -n ${autoboot_list} || setenv autoboot_list 0 # Set logging params for each serial type. setenv uarta "no_console_suspend console=ttyS0,115200,8n1 loglevel=8 androidboot.console=ttyS0" setenv uartb "no_console_suspend console=ttyS1,115200,8n1 loglevel=8 androidboot.console=ttyS1" setenv uartc "no_console_suspend console=ttyS2,115200,8n1 loglevel=8 androidboot.console=ttyS2" setenv no_args "console=null" setenv usblg "usb_logging loglevel=8" setenv uarta_early "earlycon=uart,mmio32,0x70006000" setenv uartb_early "earlycon=uart,mmio32,0x70006040" setenv uartc_early "earlycon=uart,mmio32,0x70006200" # Set important addresses. setenv kernload 0xA0000000 setenv initaddr 0x92000000 setenv fdtrload 0xA8000000 setenv fdtraddr 0x8d000000 # Set temp addresses. setenv enviraddr 0x8d100000 setenv fdtovaddr 0x8d200000 # L4T Loader check. Min rev 4. if test "${loader_rev}" < 4; then echoe Old L4T Loader! Update bootloader folder!; echoe Rebooting in 10s..; sleep 10; reset; fi # Set SoC info. if test ${t210b01} = 1; then setenv plat_info T210B01; else setenv plat_info T210; fi # Set SKU info. Frig is used instead of Fric for compatibility reasons. if test ${sku} = 0; then setenv sku_info ODIN; setenv sku_rev a00; setenv variant odin elif test ${sku} = 1; then setenv sku_info ODIN; setenv sku_rev b01; setenv variant modin elif test ${sku} = 2; then setenv sku_info VALI; setenv sku_rev a00; setenv variant vali elif test ${sku} = 3; then setenv sku_info FRIG; setenv sku_rev a00; setenv variant fric fi # Print platform info. echo PLAT: ${plat_info} SKU: ${sku_info} echo Serial: ${device_serial_restricted} echo BT MAC: ${device_bt_mac} echo WF MAC: ${device_wifi_mac} # Set MMC device. setenv mmcnum 1 if test ${emmc} = 1; then echoe emmc enabled setenv mmcnum 0 fi mmc dev ${mmcnum} # Load Kernel. if gpio input 190 && test ${recovery} = "0"; then # Normal Kernel. if part start mmc ${mmcnum} boot boot_start; then echo Boot partition found else echoe Boot partition not found!; echoe Rebooting in 10s..; sleep 10; reset; fi part size mmc ${mmcnum} boot boot_size else # Recovery. if part start mmc ${mmcnum} recovery boot_start; then echo Recovery partition found else echoe Recovery partition not found!; echoe Rebooting in 10s..; sleep 10; reset; fi part size mmc ${mmcnum} recovery boot_size echo Applying WAR: USB3 required for recovery setenv usb3_enable 1 fi mmc read ${kernload} ${boot_start} ${boot_size}; # Load DT img. if part start mmc ${mmcnum} dtb dtb_start; then echo DTB partition found else echoe DTB partition not found!; echoe Rebooting in 10s..; sleep 10; reset; fi part size mmc ${mmcnum} dtb dtb_size mmc read ${fdtrload} ${dtb_start} ${dtb_size} # Check for Super. if part start mmc ${mmcnum} super super_start; then echo Super partition found else echoe Super partition not found!; echoe Rebooting in 10s..; sleep 10; reset; fi # Get DT from image. if dtimg load ${fdtrload} ${sku} ${fdtraddr} fdtrsize; then echo Device Tree for SKU ${sku_info} loaded else echoe Device Tree load for SKU ${sku_info} failed!; echoe Rebooting in 10s..; sleep 10; reset; fi # Load dtb and resize to fit overlays. fdt addr ${fdtraddr} ${fdtrsize} fdt resize 16384 # Dtb sanity checks. if test ${sku_info} != ${fdt_id_text} -o ${sku_rev} != ${fdt_rev}; then echoe Device Tree loaded not correct! (SKU: ${fdt_id_text}, Rev: ${fdt_rev}) echoe Expected SKU: ${sku_info}, Rev: ${sku_rev} echoe Rebooting in 10s..; sleep 10; reset fi # Patch dtb with overlays if they exist. if test -n ${dtb_overlays}; then echo loading dtb overlays: ${dtb_overlays} for ov in ${dtb_overlays}; do echo Setting ${ov}... # Check if DT overlay and apply it. if load mmc ${devnum}:${distro_bootpart} ${fdtovaddr} ${boot_dir}/overlays/${ov}.dtbo; then if fdt apply ${fdtovaddr}; then echo Successfully loaded ${ov}.dtbo... else echoe Overlay ${ov}.dtbo loading failed!; echoe Rebooting in 10s..; sleep 10; reset; fi fi done fi # UART Logging. if test ${uart_port} = 1; then echoe UART-A logging enabled setenv bootargs_extra ${bootargs_extra} ${uarta} fdt set /serial@70006000 compatible nvidia,tegra20-uart fdt set /serial@70006000 status okay if test ${earlycon} = 1; then echoe Early logging enabled setenv bootargs_extra ${bootargs_extra} ${uarta_early} fdt set /serial@70006000 reset-names noreset fi elif test ${uart_port} = 2; then echoe UART-B logging enabled setenv bootargs_extra ${bootargs_extra} ${uartb} fdt set /serial@70006040 compatible nvidia,tegra20-uart fdt set /serial@70006040/joyconr status disabled if test ${earlycon} = 1; then echoe Early logging enabled setenv bootargs_extra ${bootargs_extra} ${uartb_early} fdt set /serial@70006040 reset-names noreset fi elif test ${uart_port} = 3; then echoe UART-C logging enabled setenv bootargs_extra ${bootargs_extra} ${uartc} fdt set /serial@70006200 compatible nvidia,tegra20-uart fdt set /serial@70006200/joyconl status disabled if test ${earlycon} = 1; then echoe Early logging enabled setenv bootargs_extra ${bootargs_extra} ${uartc_early} fdt set /serial@70006200 reset-names noreset fi else setenv bootargs_extra ${bootargs_extra} ${no_args} fi # USB Serial Logging. if test ${uart_port} = 4; then setenv bootargs_extra ${usblg} ${bootargs_extra}; echoe USB Serial logging enabled; fi # Disable Joycon Rails. if test ${jc_rail_disable} = 1; then echoe Joycon Rails disabled fdt set /serial@70006040 status disabled fdt set /serial@70006040/joyconr status disabled fdt set /serial@70006200 status disabled fdt set /serial@70006200/joyconl status disabled fi # Disable CEC. if test ${sku} = 2 -o ${cec_disable} = 1; then setenv bootargs_extra ${bootargs_extra} "androidboot.cec_disable=1"; fi # Disable Touch panel tuning. if test ${touch_skip_tuning} = 1; then setenv bootargs_extra ${bootargs_extra} "ftm4.skip_tuning=1"; fi # Disable Bluetooth ERTM. if test ${bt_ertm_disable} = 1; then setenv bootargs_extra ${bootargs_extra} "bluetooth.disable_ertm=1"; fi # Enable eMMC. if test ${emmc} = 1; then fdt set /mmc@700b0600 status okay fdt set /firmware/android boot_devices 700b0600.mmc # Check if eMMC is initialized in 1-bit mode. if test "${mmc_1bit}" = 1; then echoe eMMC is initialized in 1-bit mode! fdt set /mmc@700b0600 bus-width <0x1> fdt set /mmc@700b0600 uhs-mask <0x7F> fi else fdt set /firmware/android boot_devices 700b0000.mmc fi # Check if SD is initialized in 1-bit mode. if test "${sd_1bit}" = 1; then echoe SD Card is initialized in 1-bit mode! fdt set /mmc@700b0600 bus-width <0x1> fdt set /mmc@700b0600 uhs-mask <0x7F> fi # Set serial number. if test -n ${device_serial_restricted}; then fdt set / serial-number ${device_serial_restricted}; fi # Load mac address info file from sd if fatload mmc 1:1 ${enviraddr} switchroot/joycon_mac.ini; then if ini "joycon_00" ${enviraddr}; then echo Found Joycon Pairing Info; else echoe Malformed joycon_mac.ini!; fi if test -n "${host}" -a "${host}" = "00:00:00:00:00:00"; then ini "joycon_01" ${enviraddr}; fi fi # Set BT mac. if test ! -n "${bt_mac}"; then if test -n "${host}" -a "${host}" != "00:00:00:00:00:00"; then setenv bt_mac ${host}; else setenv bt_mac ${device_bt_mac}; fi; fi # Set Wi-Fi mac. Use BT MAC with FF as the last byte. if test ! -n "${wifi_mac}"; then if test -n "${host}" -a "${host}" != "00:00:00:00:00:00"; then setexpr wifi_mac sub "\:..$" ":FF" ${host}; else setenv wifi_mac ${device_wifi_mac}; fi; fi echo CAL0 BT MAC: ${bt_mac} echo CAL0 WF MAC: ${wifi_mac} # Import to DT. fdt set /chosen nvidia,wifi-mac ${wifi_mac} fdt set /chosen nvidia,bluetooth-mac ${bt_mac} # Set kernel cmdline. setenv bootargs ${bootargs_extra} "ro init=/init firmware_class.path=/vendor/firmware \ pmc_r2p.enabled=1 pmc_r2p.action=${r2p_action} \ pmc_r2p.param1=${autoboot} pmc_r2p.param2=${autoboot_list} \ fbcon=map:${fbconsole} consoleblank=0 \ latency_allowance.ptsa_rework \ nvdec_enabled=0 tegra_fbmem=0x800000@0xf5a00000 \ androidboot.bootloader=${blver} androidboot.hardware=nx \ androidboot.hardware.sku=${variant} androidboot.serialno=${device_serial_restricted} \ androidboot.modem=none androidboot.dtb_idx=${sku} " # Boot kernel. echo Launching Kernel! bootm ${kernload} ${kernload} ${fdtraddr} echoe Failed to launch Kernel! echoe echoe Rebooting in 10s.. sleep 10 reset