/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */ /* * Copyright (c) 2019 Amlogic, Inc. All rights reserved. */ #ifndef __BASE_ENV_H__ #define __BASE_ENV_H__ #include #ifdef CONFIG_ENABLE_AML_GPIO_UPGRADE #define _AML_GPIO_UPGRADE_ \ "if gpio input " CONFIG_AML_GPIO_UPGRADE_KEY "; then "\ "echo detect upgrade key;"\ "if test ${upgrade_key_flag} = 0; then "\ "echo enter recovery; setenv upgrade_key_flag 1; saveenv;"\ "setenv dolby_status 0;"\ "run init_display;run storeargs; run recovery_from_flash;"\ "else if test ${upgrade_key_flag} = 1; then "\ "echo enter update; setenv upgrade_key_flag 2; saveenv; run update;"\ "else "\ "echo enter fastboot; setenv upgrade_key_flag 0; saveenv; fastboot 0;"\ "fi;fi;" \ "fi;" #else #define _AML_GPIO_UPGRADE_ "echo base env no upgrade key;" #endif //#ifdef CONFIG_ENABLE_AML_GPIO_UPGRADE #ifdef CONFIG_DTB_BIND_KERNEL //load dtb from kernel, such as boot partition #define CONFIG_DTB_LOAD "imgread dtb ${boot_part} ${dtb_mem_addr}" #else #define CONFIG_DTB_LOAD "imgread dtb _aml_dtb ${dtb_mem_addr}" #endif//#ifdef CONFIG_DTB_BIND_KERNEL //load dtb from kernel, such as boot partition #ifdef CONFIG_AB_SYSTEM #define CINFIG_KNL_READ "if imgread kernel ${recovery_part} ${loadaddr}; then bootm ${loadaddr}; fi;" #else #define CINFIG_KNL_READ "if imgread kernel ${boot_part} ${loadaddr}; then bootm ${loadaddr}; fi;" #endif #ifndef CONFIG_AML_PRODUCT_MODE #define _AML_RUN_UPDATE_ENV \ /*first usb burning, second sdc_burn, third ext-sd autoscr/recovery*/\ /*last udisk autoscr/recovery*/\ "run usb_burning;"\ "run recovery_from_sdcard;"\ "run recovery_from_udisk;" #else #define _AML_RUN_UPDATE_ENV "echo aml_update;" #endif// #ifndef CONFIG_AML_PRODUCT_MODE #ifdef CONFIG_ARMV8_MULTIENTRY #define INIT_DISPLAY "if test ${display_on_smp} = 0; then "\ "run init_display;" \ "fi; " #define VOUT_CMD "if test ${display_on_smp} = 1; then "\ "vout prepare ${outputmode};"\ "else "\ "vout output ${outputmode};"\ "fi; " #else #define INIT_DISPLAY "run init_display; " #define VOUT_CMD "vout output ${outputmode}; " #endif #ifdef CONFIG_YOCTO #define IR_WAKEUP "irkey_wakeup 0 2 0x0 0xef10fe01 0xac53fe01" #else #define IR_WAKEUP "echo ir wakeup" #endif #ifdef CONFIG_NOVERBOSE_BUILD #define PAGE_TRACE "page_trace=off\0" #else #define PAGE_TRACE "page_trace=on\0" #endif /* args/envs */ #define CONFIG_SYS_MAXARGS 64 #define CONFIG_EXTRA_ENV_SETTINGS_BASE \ "firstboot=1\0"\ PAGE_TRACE \ "upgrade_step=0\0"\ "loadaddr=0x00020000\0"\ "os_ident_addr=0x00500000\0"\ "loadaddr_rtos=0x00080000\0"\ "loadaddr_kernel=0x03000000\0"\ "decaddr_kernel=0x01800000\0"\ "fb_addr=0x00300000\0" \ "dv_fw_dir_odm_ext=/odm_ext/firmware/dovi_fw.bin\0" \ "dv_fw_dir_vendor=/vendor/firmware/dovi_fw.bin\0" \ "dv_fw_dir=/oem/firmware/dovi_fw.bin\0" \ "lock=10101000\0"\ "recovery_offset=0\0"\ "active_slot=normal\0"\ "boot_part=boot\0"\ "vendor_boot_part=vendor_boot\0"\ "board_logo_part=odm_ext\0" \ "rollback_flag=0\0"\ "write_boot=0\0"\ "ddr_size=0B\0"\ "fastboot_step=0\0"\ "recovery_mode=false\0"\ "retry_recovery_times=7\0"\ "androidboot.dtbo_idx=0\0"\ "recovery_check_part=0\0"\ "arb_reboot_flag=0\0"\ "common_dtb_load=" CONFIG_DTB_LOAD "\0"\ "get_os_type=if store read ${os_ident_addr} ${boot_part} 0 0x1000; then "\ "os_ident ${os_ident_addr}; fi\0"\ "fatload_dev=usb\0"\ "fs_type=""rootfstype=ramfs""\0"\ "disable_ir=0\0"\ "cpuid_env=0\0"\ "rc_level=3\0"\ "bootperf=0\0"\ "default_governor=performance\0"\ "init_ir_wakeup=" IR_WAKEUP "\0"\ "upgrade_check_base="\ "echo recovery_status=${recovery_status};"\ "if itest.s \"${recovery_status}\" == \"in_progress\"; then "\ "run init_display;run storeargs; run recovery_from_flash;"\ "else fi;"\ "echo upgrade_step=${upgrade_step}; "\ "if itest ${upgrade_step} == 3; then "\ "run init_display;run storeargs; run update; fi;"\ "\0"\ "storeargs_base="\ "run init_bootreason_base;"\ "setenv bootargs ${initargs} otg_device=${otg_device} "\ "logo=${display_layer},loaded,${fb_addr} display_bpp=${display_bpp} "\ "vout=${outputmode},${vout_init} page_trace=${page_trace} "\ "hdmitx=${colorattribute},scan_info:${scan_info} "\ "dolby_vision_on=${dolby_vision_on} "\ "hdr_policy=${hdr_policy} hdr_priority=${hdr_priority} "\ "dolby_status=${dolby_status} "\ "frac_rate_policy=${actual_frac_rate} "\ "cpufreq.default_governor=${default_governor} "\ "osd_reverse=${osd_reverse} video_reverse=${video_reverse} "\ "disable_ir=${disable_ir} kvm-arm.mode=none;"\ "setenv bootconfig ${initconfig} androidboot.selinux=${EnableSelinux} "\ "androidboot.firstboot=${firstboot} "\ "androidboot.bootloader=${bootloader_version} "\ "androidboot.hardware=amlogic "\ "androidboot.production_mode=${production_mode} "\ "androidboot.chipid=${cpuid_env} "\ "androidboot.ddr_size=${ddr_size} "\ "androidboot.rc_level=${rc_level} "\ "androidboot.arb_reboot_flag=${arb_reboot_flag} "\ "androidboot.bootperf=${bootperf} ;"\ "\0"\ "storeboot_base="\ "run get_os_type;"\ "run storage_param;"\ "if test ${os_type} = rtos; then "\ "setenv loadaddr ${loadaddr_rtos};"\ "store read ${loadaddr} ${boot_part} 0 0x400000;"\ "bootm ${loadaddr};"\ "else if test ${os_type} = kernel; then "\ "get_system_as_root_mode;"\ "if test ${system_mode} = 1; then "\ "setenv bootargs \"${bootargs} ro rootwait skip_initramfs\";"\ "else "\ "setenv bootconfig \"${bootconfig} "\ "androidboot.force_normal_boot=1\";"\ "fi;"\ "if test ${active_slot} != normal; then "\ "setenv bootconfig \"${bootconfig} "\ "androidboot.slot_suffix=${active_slot}\";"\ "fi;"\ "setenv bootconfig \"${bootconfig} "\ "androidboot.rollback=${rollback_flag}\";"\ "if fdt addr ${dtb_mem_addr}; then else "\ "echo retry common dtb; run common_dtb_load; fi;"\ "setenv loadaddr ${loadaddr_kernel};"\ "if imgread kernel ${boot_part} ${loadaddr}; then bootm ${loadaddr}; fi;"\ "else echo wrong OS format ${os_type}; fi;fi;"\ "echo try upgrade as booting failure; check_ab; run update;"\ "\0" \ "update_base=" _AML_RUN_UPDATE_ENV \ "run recovery_from_flash;" \ "\0"\ "recovery_from_fat_dev_base="\ "setenv loadaddr ${loadaddr_kernel};"\ "if fatload ${fatload_dev} 0 ${loadaddr} aml_autoscript; then "\ "if avb memory recovery ${loadaddr}; then " \ "avb recovery 1;" \ "autoscr ${loadaddr}; fi;"\ "fi;" \ "if fatload ${fatload_dev} 0 ${loadaddr} recovery.img; then "\ "if avb memory recovery ${loadaddr}; then " \ "avb recovery 1;" \ "if fatload ${fatload_dev} 0 ${dtb_mem_addr} dtb.img; then "\ "echo ${fatload_dev} dtb.img loaded; fi;"\ "setenv bootargs ${bootargs} ${fs_type};"\ "bootm ${loadaddr};fi;"\ "fi;" \ "\0"\ "recovery_from_udisk_base="\ "setenv fatload_dev usb;"\ "if usb start 0; then run recovery_from_fat_dev; fi;"\ "\0"\ "recovery_from_sdcard_base="\ "setenv fatload_dev mmc;"\ "if mmcinfo; then run recovery_from_fat_dev; fi;"\ "\0"\ "recovery_from_flash_base="\ "echo active_slot: ${active_slot};"\ "setenv loadaddr ${loadaddr_kernel};"\ "setenv recovery_mode true;"\ "if test ${active_slot} = normal; then "\ "setenv bootargs ${bootargs} ${fs_type} aml_dt=${aml_dt} "\ "recovery_part=${recovery_part} recovery_offset=${recovery_offset};"\ "avb recovery 1;" \ "if test ${upgrade_step} = 3; then "\ "if ext4load mmc 1:2 ${dtb_mem_addr} /recovery/dtb.img; then "\ "echo cache dtb.img loaded;"\ "else "\ "imgread dtb recovery ${dtb_mem_addr};"\ "fi;"\ "if test ${vendor_boot_mode} = true; then "\ "if imgread kernel ${recovery_part} ${loadaddr} "\ "${recovery_offset}; then bootm ${loadaddr}; fi;"\ "else "\ "if ext4load mmc 1:2 ${loadaddr} /recovery/recovery.img;"\ "then echo cache recovery.img loaded; bootm ${loadaddr}; fi;"\ "fi;"\ "else "\ "if imgread dtb recovery ${dtb_mem_addr}; then "\ "else echo restore dtb; run common_dtb_load;"\ "fi;"\ "fi;"\ "if imgread kernel ${recovery_part} ${loadaddr} ${recovery_offset}; then "\ "bootm ${loadaddr}; fi;"\ "else "\ "if fdt addr ${dtb_mem_addr}; then else "\ "echo retry common dtb; run common_dtb_load; fi;"\ "if test ${partition_mode} = normal; then "\ "setenv bootargs ${bootargs} ${fs_type} aml_dt=${aml_dt} "\ "recovery_part=${recovery_part} recovery_offset=${recovery_offset};"\ "setenv bootconfig ${bootconfig} "\ "androidboot.slot_suffix=${active_slot};"\ CINFIG_KNL_READ \ "else "\ "if test ${vendor_boot_mode} = true; then "\ "setenv bootargs ${bootargs} ${fs_type} aml_dt=${aml_dt};"\ "setenv bootconfig ${bootconfig} "\ "androidboot.slot_suffix=${active_slot};"\ "if imgread kernel ${boot_part} ${loadaddr}; then "\ "bootm ${loadaddr}; fi;"\ "else "\ "setenv bootargs ${bootargs} ${fs_type} aml_dt=${aml_dt} "\ "recovery_part=${recovery_part} "\ "recovery_offset=${recovery_offset};"\ "setenv bootconfig ${bootconfig} "\ "androidboot.slot_suffix=${active_slot};"\ "if imgread kernel ${recovery_part} ${loadaddr} "\ "${recovery_offset}; then bootm ${loadaddr}; fi;"\ "fi;"\ "fi;"\ "fi;"\ "\0"\ "bcb_cmd_base="\ "get_avb_mode;"\ "get_valid_slot;"\ "if test ${active_slot} != normal; then "\ "echo ab mode, read dtb from kernel;"\ "setenv common_dtb_load ""imgread dtb ${boot_part} ${dtb_mem_addr}"";"\ "else if test ${gpt_mode} = true; then "\ "echo gpt mode, read dtb from kernel;"\ "setenv common_dtb_load ""imgread dtb ${boot_part} ${dtb_mem_addr}"";"\ "fi;fi;"\ "\0"\ "load_bmp_logo_base="\ "if rdext4pic ${board_logo_part} $loadaddr; then bmp display $logoLoadAddr; " \ "else if imgread pic logo bootup $loadaddr; then "\ "bmp display $bootup_offset; fi; fi;" \ "\0"\ "init_bootreason_base="\ "get_rebootmode;"\ "echo reboot_mode:::: ${reboot_mode};"\ "if test ${reboot_mode} = quiescent; then "\ "setenv reboot_mode_android quiescent;"\ "setenv initconfig androidboot.quiescent=1 "\ "androidboot.bootreason=${reboot_mode};"\ "else if test ${reboot_mode} = recovery_quiescent; then "\ "setenv reboot_mode_android quiescent;"\ "setenv initconfig androidboot.quiescent=1 "\ "androidboot.bootreason=recovery,quiescent;"\ "else "\ "setenv reboot_mode_android normal;"\ "setenv initconfig "\ "androidboot.bootreason=${reboot_mode};"\ "fi;fi;"\ "\0"\ "init_display_base="\ "setenv bootargs ${bootargs} connector0_type=${connector0_type}; "\ "if test ${reboot_mode} = quiescent; then "\ "setenv dolby_status 0;"\ "setenv dolby_vision_on 0;"\ "osd open;osd clear;bmp scale;"\ "setenv vout_init enable;"\ "else if test ${reboot_mode} = recovery_quiescent; then "\ "setenv dolby_status 0;"\ "setenv dolby_vision_on 0;"\ "osd open;osd clear;bmp scale;"\ "setenv vout_init enable;"\ "else "\ "setenv reboot_mode_android ""normal"";"\ "hdmitx hpd;hdmitx get_parse_edid;"\ "dovi process;watermark_init;osd open;osd clear;run load_bmp_logo;"\ "bmp scale;vout output ${outputmode};dovi set;dovi pkg;vpp hdrpkt;"\ "fi;fi;"\ "\0"\ "storage_param_base="\ "store param;"\ "\0"\ "cmdline_keys_base="\ "setenv region_code US;"\ "if keyman init 0x1234; then "\ "if keyman read usid ${loadaddr} str; then fi;"\ "if keyman read region_code ${loadaddr} str; then fi;"\ "if keyman read mac ${loadaddr} str; then "\ "setenv bootargs ${bootargs} mac=${mac};"\ "setenv bootconfig ${bootconfig} androidboot.mac=${mac};"\ "fi;"\ "if keyman read odmsn ${loadaddr} str; then "\ "setenv bootargs ${bootargs} odmsn=${odmsn};"\ "setenv bootconfig ${bootconfig} androidboot.odmsn=${odmsn};"\ "fi;"\ "if keyman read deviceid ${loadaddr} str; then "\ "setenv bootconfig ${bootconfig} androidboot.deviceid=${deviceid};"\ "fi;"\ "fi;"\ "setenv bootconfig ${bootconfig} androidboot.wificountrycode=${region_code};"\ "setenv bootconfig ${bootconfig} androidboot.serialno=${usid};"\ "setenv serial ${usid}; setenv serial# ${usid};"\ "factory_provision init;"\ "\0"\ "upgrade_key_base=" _AML_GPIO_UPGRADE_ "\0" #endif