Enable 4k UHD HDMI-out on Android 14

Which system do you use? Android, Ubuntu, OOWOW or others?

Android 14, self-built

Please describe your issue below:

Previosuly there was a patch released for Android 11 to enable true 4K UHD resolution on HDMI-out (not upscaled FHD) https://forum.khadas.com/t/4k-uhd-hdmi-out-on-android-11/20505/15

The patch does not apply to Android 14. Please advise on how to modify the patch for Android 14.

@xavier I will follow up on this issue, please be patient!

@xavier

bootloader/uboot$ git diff
diff --git a/board/khadas/configs/kvim4.h b/board/khadas/configs/kvim4.h
index 4b3e914700..e559df0fb5 100644
--- a/board/khadas/configs/kvim4.h
+++ b/board/khadas/configs/kvim4.h
@@ -100,7 +100,7 @@
        "outputmode=1080x1920p60hz\0" \
        "outputmode2=2160p60hz\0" \
        "cvbsmode=576cvbs\0" \
-       "connector1_type=HDMI-A-C\0" \
+       "connector0_type=HDMI-A-C\0" \
        "connector2_type=NULL\0" \
        "storeargs_hdmitx="\
                "setenv bootargs ${bootargs} powermode=${powermode} "\
@@ -443,7 +443,7 @@
        "setenv fb_width 1920;setenv fb_height 1080;"\
        "setenv display_width 1920;setenv display_height 1080;"\
        "setenv display_layer viu2_osd0;vout2 prepare ${outputmode2};"\
-       "osd open;osd clear;run load_bmp_logo;vout2 output ${outputmode2};bmp scale;"\
+       "osd open;osd clear;run load_bmp_logo;bmp scale;vout2 output ${outputmode2};"\
        "if test ${outputmode2} = ${save_outputmode}; then "\
                "dovi set;dovi pkg;vpp hdrpkt;"\
        "fi; "\
@@ -471,7 +471,7 @@
        "setenv fb_width 1920;setenv fb_height 1080;"\
        "setenv fb_width 1920;setenv fb_height 1080;"\
        "setenv display_layer viu2_osd0;vout2 prepare ${outputmode2};"\
-       "osd open;osd clear;run load_bmp_logo;vout2 output ${outputmode2};bmp scale;"\
+       "osd open;osd clear;run load_bmp_logo;bmp scale;vout2 output ${outputmode2};"\
        "if test ${outputmode2} = ${save_outputmode}; then "\
                "dovi set;dovi pkg;vpp hdrpkt;"\
        "fi; "\
@@ -506,7 +506,7 @@
        "else "\
         "setenv fb_width 1920;setenv fb_height 1080;"\
         "setenv display_width 1920;setenv display_height 1080;"\
-        "setenv display_layer osd0;osd open;osd clear;run load_bmp_logo;bmp scale;vout output ${outputmode};"\
+        "setenv display_layer viu2_osd0;vout2 prepare ${outputmode2};osd open;osd clear;run load_bmp_logo;bmp scale;vout2 output ${outputmode2};"\
        "fi;fi;"\
        "if test ${outputmode} = ${save_outputmode}; then "\
                "dovi set;dovi pkg;vpp hdrpkt;"\
diff --git a/cmd/amlogic/cmd_kbi.c b/cmd/amlogic/cmd_kbi.c
index c282463c49..dbe2091f43 100644
--- a/cmd/amlogic/cmd_kbi.c
+++ b/cmd/amlogic/cmd_kbi.c
@@ -1159,12 +1159,12 @@ static int do_check_panel(cmd_tbl_t * cmdtp, int flag, int argc, char * const ar
                khadas_mipi_id = 1;
                setenv("khadas_mipi_id", "1");
                setenv("panel_type", "mipi_0");
-               setenv("connector0_type", "MIPI-A");
+               setenv("connector1_type", "MIPI-A");
        }else if(khadas_mipi_id == 0x79){//new TS050
                khadas_mipi_id = 3;
                setenv("khadas_mipi_id", "3");
                setenv("panel_type", "mipi_2");
-               setenv("connector0_type", "MIPI-A");
+               setenv("connector1_type", "MIPI-A");
        }else{
                khadas_mipi_id = tp_i2c_read(0x9e,TP10_CHIP_ADDR);
                printf("TP10 id=0x%x\n",khadas_mipi_id);
@@ -1172,12 +1172,12 @@ static int do_check_panel(cmd_tbl_t * cmdtp, int flag, int argc, char * const ar
                        khadas_mipi_id = 2;
                        setenv("khadas_mipi_id", "2");
                        setenv("panel_type", "mipi_1");
-                       setenv("connector0_type", "MIPI-A");
+                       setenv("connector1_type", "MIPI-A");
                }else {
                        khadas_mipi_id = 0;
                        setenv("khadas_mipi_id", "0");//VBO
                        setenv("panel_type", "mipi_0");
-                       setenv("connector0_type", "VBYONE-B");
+                       setenv("connector1_type", "VBYONE-B");
                }

device/khadas/kvim4$ git diff
diff --git a/kvim4/BoardConfig.mk b/kvim4/BoardConfig.mk
index 42d346a..fbaa4df 100644
--- a/kvim4/BoardConfig.mk
+++ b/kvim4/BoardConfig.mk
@@ -100,13 +100,13 @@ $(warning 'hdmi tx only will be set')
 else
 HWC_EXTEND_FRAMEBUFFER_WIDTH := 1920
 HWC_EXTEND_FRAMEBUFFER_HEIGHT := 1080
-HWC_PRIMARY_CONNECTOR_TYPE := MIPI-A
-HWC_EXTEND_CONNECTOR_TYPE := HDMI-A
+HWC_PRIMARY_CONNECTOR_TYPE := HDMI-A
+HWC_EXTEND_CONNECTOR_TYPE := MIPI-A
 HWC_DYNAMIC_SWITCH_VIU := false
 endif
 
 HWC_ENABLE_PRE_DISPLAY_CALIBRATE := false
-HWC_ENABLE_PRIMARY_HOTPLUG := false
+HWC_ENABLE_PRIMARY_HOTPLUG := true
 #HWC_ENABLE_SECURE_LAYER_PROCESS := true
 #HWC_DISABLE_CURSOR_PLANE := true

@goenjoy
The patches did not apply cleanly :cry:
I have tried to adapt the patches but I don’t get the expected results in an incremental build. Next step is to do a complete clean/rebuild of bootloader+Android…

These are my versions of the patches, do you see any errors?

.../bootloader/uboot ((6ef47ccc851...) *)$ git diff
diff --git a/board/khadas/configs/kvim4.h b/board/khadas/configs/kvim4.h
index 94c1a464856..7585ae86213 100644
--- a/board/khadas/configs/kvim4.h
+++ b/board/khadas/configs/kvim4.h
@@ -100,7 +100,7 @@
        "outputmode=1080x1920p60hz\0" \
        "outputmode2=2160p60hz\0" \
        "cvbsmode=576cvbs\0" \
-       "connector1_type=HDMI-A-C\0" \
+       "connector0_type=HDMI-A-C\0" \
        "connector2_type=NULL\0" \
        "storeargs_hdmitx="\
                "setenv bootargs ${bootargs} powermode=${powermode} "\
@@ -443,7 +443,7 @@
        "setenv fb_width 1920;setenv fb_height 1080;"\
        "setenv display_width 1920;setenv display_height 1080;"\
        "setenv display_layer viu2_osd0;vout2 prepare ${outputmode2};"\
-       "osd open;osd clear;run load_bmp_logo;vout2 output ${outputmode2};bmp scale;"\
+       "osd open;osd clear;run load_bmp_logo;bmp scale;vout2 output ${outputmode2};"\
        "if test ${outputmode2} = ${save_outputmode}; then "\
                "dovi set;dovi pkg;vpp hdrpkt;"\
        "fi; "\
@@ -471,7 +471,7 @@
        "setenv fb_width 1920;setenv fb_height 1080;"\
        "setenv fb_width 1920;setenv fb_height 1080;"\
        "setenv display_layer viu2_osd0;vout2 prepare ${outputmode2};"\
-       "osd open;osd clear;run load_bmp_logo;vout2 output ${outputmode2};bmp scale;"\
+       "osd open;osd clear;run load_bmp_logo;bmp scale;vout2 output ${outputmode2};"\
        "if test ${outputmode2} = ${save_outputmode}; then "\
                "dovi set;dovi pkg;vpp hdrpkt;"\
        "fi; "\
@@ -486,7 +486,7 @@
        "else "\
         "setenv fb_width 1920;setenv fb_height 1080;"\
         "setenv display_width 1920;setenv display_height 1080;"\
-        "setenv display_layer osd0;osd open;osd clear;run load_bmp_logo;bmp scale;vout output ${outputmode};"\
+        "setenv display_layer viu2_osd0;vout2 prepare ${outputmode2};osd open;osd clear;run load_bmp_logo;bmp scale;vout2 output ${outputmode2};"\
        "fi;fi;"\
        "if test ${outputmode} = ${save_outputmode}; then "\
                "dovi set;dovi pkg;vpp hdrpkt;"\
diff --git a/cmd/amlogic/cmd_kbi.c b/cmd/amlogic/cmd_kbi.c
index aea7587884e..b905a91aa7a 100644
--- a/cmd/amlogic/cmd_kbi.c
+++ b/cmd/amlogic/cmd_kbi.c
@@ -1177,12 +1177,12 @@ static int do_check_panel(cmd_tbl_t * cmdtp, int flag, int argc, char * const ar
                khadas_mipi_id = 1;
                setenv("khadas_mipi_id", "1");
                setenv("panel_type", "mipi_0");
-               setenv("connector0_type", "MIPI-A");
+               setenv("connector1_type", "MIPI-A");
        }else if(khadas_mipi_id == 0x79){//new TS050
                khadas_mipi_id = 3;
                setenv("khadas_mipi_id", "3");
                setenv("panel_type", "mipi_2");
-               setenv("connector0_type", "MIPI-A");
+               setenv("connector1_type", "MIPI-A");
        }else{
                khadas_mipi_id = tp_i2c_read(0x9e,TP10_CHIP_ADDR);
                printf("TP10 id=0x%x\n",khadas_mipi_id);
@@ -1190,12 +1190,12 @@ static int do_check_panel(cmd_tbl_t * cmdtp, int flag, int argc, char * const ar
                        khadas_mipi_id = 2;
                        setenv("khadas_mipi_id", "2");
                        setenv("panel_type", "mipi_1");
-                       setenv("connector0_type", "MIPI-A");
+                       setenv("connector1_type", "MIPI-A");
                }else {
                        khadas_mipi_id = 0;
                        setenv("khadas_mipi_id", "0");//VBO
                        setenv("panel_type", "mipi_0");
-                       setenv("connector0_type", "VBYONE-B");
+                       setenv("connector1_type", "VBYONE-B");
                }
        }
        printf("hlm khadas_mipi_id=%d\n",khadas_mipi_id);

and

../khadas/kvim4 ((731fdbc...) *)$ git diff
diff --git a/kvim4/BoardConfig.mk b/kvim4/BoardConfig.mk
index 42d346a..fbaa4df 100644
--- a/kvim4/BoardConfig.mk
+++ b/kvim4/BoardConfig.mk
@@ -100,13 +100,13 @@ $(warning 'hdmi tx only will be set')
 else
 HWC_EXTEND_FRAMEBUFFER_WIDTH := 1920
 HWC_EXTEND_FRAMEBUFFER_HEIGHT := 1080
-HWC_PRIMARY_CONNECTOR_TYPE := MIPI-A
-HWC_EXTEND_CONNECTOR_TYPE := HDMI-A
+HWC_PRIMARY_CONNECTOR_TYPE := HDMI-A
+HWC_EXTEND_CONNECTOR_TYPE := MIPI-A
 HWC_DYNAMIC_SWITCH_VIU := false
 endif
 
 HWC_ENABLE_PRE_DISPLAY_CALIBRATE := false
-HWC_ENABLE_PRIMARY_HOTPLUG := false
+HWC_ENABLE_PRIMARY_HOTPLUG := true
 #HWC_ENABLE_SECURE_LAYER_PROCESS := true
 #HWC_DISABLE_CURSOR_PLANE := true
 #disable hwc uvm dettach

@xavier There’s no problem with that.
Please provide a complete serial port boot log.

@goenjoy here are both build and boot logs

Also i believe the entire HDMI pipeline is FHD only:

Log.d(TAG, "Display mode: " + display?.mode)

returns

Display mode: {id=209, width=1920, height=1080, fps=59.94006, alternativeRefreshRates=, supportedHdrTypes=[2, 3]}

@xavier By comparing my logs, you will understand. Your output is 1080p.

[    0.000000][0 T0     ..] Kernel command line: console=ttynull stack_depot_disable=on cgroup_disable=pressure kasan.page_alloc.sample=10 kasan.stacktrace=off bootconfig ioremap_guard kvm-arm.mode=protected init=/init console=ttyS0,921600 no_console_suspend earlycon=aml-uart,0xfe078000 loop.max_part=4 scsi_mod.scan=async xhci_hcd.quirks=0x800000 scramble_reg=0xfe02e030 otg_device=1 logo=osd0,loaded,0x3fbf4800 vout=2160p60hz,enable panel_type=mipi_0 hdmitx=,422,12bit hdmimode=none hdmichecksum=0x81c00000 dolby_status=fb_width=1920 fb_height=1080 frac_rate_policy=1 cvbsmode=576cvbs osd_reverse=0 video_reverse=0 kvm-arm.mode=none  init_on_alloc=0 connector0_type=HDMI-A-C connector1_type=VBYONE-B connector2_type=NULL nn_adj_vol=0 powermode=on lcd_ctrl=0x3c000083 outputmode=2160p60hz  vout2=2160p60hz,enable panel1_type=vbyone_1 lcd1_ctrl=0x3c0000a2 panel2_type=lvds_1 lcd2_ctrl=0x3c000081 dptx0_ctrl=0x00000000 dptx1_ctrl=0x00000000   androidboot.serialno=0000000000 mac=c8:63:14:74:6e:75 andr
[    0.000000][0 T0     ..] Unknown kernel command line parameters "scramble_reg=0xfe02e030 otg_device=1 logo=osd0,loaded,0x3fbf4800 vout=2160p60hz,enable panel_type=mipi_0 hdmitx=,422,12bit hdmimode=none hdmichecksum=0x81c00000 dolby_status=fb_width=1920 fb_height=1080 frac_rate_policy=1 cvbsmode=576cvbs osd_reverse=0 video_reverse=0 connector0_type=HDMI-A-C connector1_type=VBYONE-B connector2_type=NULL nn_adj_vol=0 powermode=on lcd_ctrl=0x3c000083 outputmode=2160p60hz vout2=2160p60hz,enable panel1_type=vbyone_1 lcd1_ctrl=0x3c0000a2 panel2_type=lvds_1 lcd2_ctrl=0x3c000081 dptx0_ctrl=0x00000000 dptx1_ctrl=0x00000000 mac=c8:63:14:74:6e:75 khadas_mipi_id=0 t7c_check_camera=2 khadas_camera_id=2 wol_enable=0 ffv_freeze=off reboot_mode=cold_boot", will be passed to user space.