summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaoran.Wang <elven.wang@nxp.com>2017-12-29 16:35:56 +0800
committerHaoran.Wang <elven.wang@nxp.com>2018-01-04 12:33:35 +0800
commitbc823433658f2446f71643cdef91cc875eb56229 (patch)
tree762fb535a0b4de4ad214250736447c402ef181a2
parentc565f70162ba1041fc376dd476f07f54f9b49ad0 (diff)
MA-10983 Load HDMI firmware before boot
Load HDMI firmware to make HDMI module work. The firmware stored in /system partition. Now choose the target boot slot's system partition to load the firmware. Change-Id: Icfcd5f6c8237ee0c8875317395cf86c07d53c58e Signed-off-by: Haoran.Wang <elven.wang@nxp.com>
-rw-r--r--configs/mx8qm_mek_android_defconfig1
-rwxr-xr-x[-rw-r--r--]drivers/usb/gadget/f_fastboot.c42
-rw-r--r--include/configs/imx8qm_mek_android.h5
3 files changed, 48 insertions, 0 deletions
diff --git a/configs/mx8qm_mek_android_defconfig b/configs/mx8qm_mek_android_defconfig
index 80c5e497ff..6d1c798966 100644
--- a/configs/mx8qm_mek_android_defconfig
+++ b/configs/mx8qm_mek_android_defconfig
@@ -18,6 +18,7 @@ CONFIG_DM_I2C=y
# CONFIG_DM_I2C_COMPAT is not set
CONFIG_SYS_I2C_IMX_LPI2C=y
CONFIG_CMD_I2C=y
+CONFIG_CMD_EXT4=y
CONFIG_CMD_USB=y
CONFIG_USB=y
diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c
index 2c93ccbceb..5a5ddff913 100644..100755
--- a/drivers/usb/gadget/f_fastboot.c
+++ b/drivers/usb/gadget/f_fastboot.c
@@ -263,6 +263,10 @@ enum {
};
static unsigned int download_bytes_unpadded;
+#ifdef IMX_LOAD_HDMI_FIMRWARE
+int hdmi_firmware_load(char* slot);
+#endif
+
static struct cmd_fastboot_interface interface = {
.rx_handler = NULL,
.reset_handler = NULL,
@@ -1585,6 +1589,10 @@ int do_boota(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) {
avb_out_data->ab_suffix);
}
setenv("bootargs_sec", bootargs_sec);
+#ifdef IMX_LOAD_HDMI_FIMRWARE
+ hdmi_firmware_load(avb_out_data->ab_suffix);
+#endif
+
#ifdef CONFIG_SYSTEM_RAMDISK_SUPPORT
if(!is_recovery_mode)
fastboot_setup_system_boot_args(avb_out_data->ab_suffix);
@@ -1635,6 +1643,9 @@ int do_boota(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) {
sprintf(bootargs_sec,
"androidboot.verifiedbootstate=orange androidboot.slot_suffix=%s", slot);
setenv("bootargs_sec", bootargs_sec);
+#ifdef IMX_LOAD_HDMI_FIMRWARE
+ hdmi_firmware_load(slot);
+#endif
#ifdef CONFIG_SYSTEM_RAMDISK_SUPPORT
if(!is_recovery_mode)
fastboot_setup_system_boot_args(slot);
@@ -2637,6 +2648,37 @@ static void cb_continue(struct usb_ep *ep, struct usb_request *req)
fastboot_tx_write_str("OKAY");
}
+#ifdef IMX_LOAD_HDMI_FIMRWARE
+int hdmi_firmware_load(char *slot) {
+ int mmcc = mmc_get_env_dev();
+ int mmc_id;
+ char part_str[32];
+ char command[256];
+ int ret;
+
+ sprintf(part_str, "%s%s", IMX_HDMI_FIRMWARE_PART, slot);
+ mmc_id = fastboot_flash_find_index(part_str);
+ if (mmc_id <= 0)
+ return -1;
+
+ sprintf(command, "ext4load mmc %x:%x 0x%x %s",
+ mmcc, mmc_id, IMX_HDMI_FIRMWARE_LOAD_ADDR, IMX_HDMI_FIRMWARE_PATH);
+
+ ret = run_command(command, 0);
+ if (ret) {
+ printf("execute command '%s' error!\n", command);
+ return -1;
+ }
+
+ sprintf(command, "hdp load 0x%x", IMX_HDMI_FIRMWARE_LOAD_ADDR);
+
+ ret = run_command(command, 0);
+ if (ret) {
+ printf("execute command '%s' error!\n", command);
+ return -1;
+ }
+}
+#endif
#ifdef CONFIG_FASTBOOT_LOCK
diff --git a/include/configs/imx8qm_mek_android.h b/include/configs/imx8qm_mek_android.h
index 55056bf2f8..4b4cb1929f 100644
--- a/include/configs/imx8qm_mek_android.h
+++ b/include/configs/imx8qm_mek_android.h
@@ -25,6 +25,11 @@
#define CONFIG_FASTBOOT_LOCK
#define FSL_FASTBOOT_FB_DEV "mmc"
+#define IMX_LOAD_HDMI_FIMRWARE
+#define IMX_HDMI_FIRMWARE_PATH "etc/firmware/hdmi/hdmitxfw.bin"
+#define IMX_HDMI_FIRMWARE_PART "system"
+#define IMX_HDMI_FIRMWARE_LOAD_ADDR (CONFIG_SYS_SDRAM_BASE + SZ_256M)
+
#ifdef CONFIG_SYS_MALLOC_LEN
#undef CONFIG_SYS_MALLOC_LEN
#define CONFIG_SYS_MALLOC_LEN (64 * SZ_1M)