From 7ca3d647219dab4d2a19476166453aef47215593 Mon Sep 17 00:00:00 2001 From: Rian McGuire Date: Sun, 23 Aug 2020 16:59:54 +1000 Subject: [PATCH] linux-xiaomi-tissot: Re-add Xorg support (MR 1502) This fix for Xorg was lost during the 4.9.188 upgrade (!1485). --- device/testing/linux-xiaomi-tissot/APKBUILD | 6 +- .../fix-xorg-mdss-update-fb-info.patch | 118 ++++++++++++++++++ 2 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 device/testing/linux-xiaomi-tissot/fix-xorg-mdss-update-fb-info.patch diff --git a/device/testing/linux-xiaomi-tissot/APKBUILD b/device/testing/linux-xiaomi-tissot/APKBUILD index 0d11c9b26..d0e2e1cf1 100644 --- a/device/testing/linux-xiaomi-tissot/APKBUILD +++ b/device/testing/linux-xiaomi-tissot/APKBUILD @@ -3,7 +3,7 @@ pkgname=linux-xiaomi-tissot pkgver=4.9.188 -pkgrel=0 +pkgrel=1 pkgdesc="Xiaomi A1 kernel fork" arch="aarch64" _carch="arm64" @@ -28,6 +28,7 @@ source=" 0006-narrow-down-include-path-for-msm_camera.patch 0007-narrow-down-trace-include-paths.patch 0008-Add-config-option-to-fix-bootloader-cmdline-args.patch + fix-xorg-mdss-update-fb-info.patch " builddir="$srcdir/$_repository-$_commit" _outdir="out" @@ -56,4 +57,5 @@ c9f5e6de01ce31bdf0c599a5a8569d901d35d767c3965183f706670cc5c4823cf60af90ea9867e3a d2da0e6d6945e7396d2cb7e30e64806be2473f0fb67e0117a0b9dc5204a105873828bd8d0c6cfbec26881deb31184db3f42d19e8700ac9226822fcf6d2eec6e3 0005-narrow-down-include-path-for-msm_isp.patch 34d588925668b730aad131ec6b899d0f06538fffeb4a913ed0d1765e2caea417a8711a98c4a06bb100e98c0dd3ab43b762dc3a36a288b664af337ff1803eeeb6 0006-narrow-down-include-path-for-msm_camera.patch 0ee10f54d0a66d4ee4b32599847e977262a3d906093efd34216b91aa12b9f7b46bcd28fffa8b054931eb77c82496d474eee9c5d28c59fc33f8903e6c536189e2 0007-narrow-down-trace-include-paths.patch -cf5c7f3df4bb62617f0d6e3ece29fe2f316fd8d6d38ca352706cb207947ded2bfe7a6b65f9480843204610d6dffe52e6b11df24d3d0cae7812de56bc41081b20 0008-Add-config-option-to-fix-bootloader-cmdline-args.patch" +cf5c7f3df4bb62617f0d6e3ece29fe2f316fd8d6d38ca352706cb207947ded2bfe7a6b65f9480843204610d6dffe52e6b11df24d3d0cae7812de56bc41081b20 0008-Add-config-option-to-fix-bootloader-cmdline-args.patch +4f73a06557207733707ca08c9991e04734e56386f3ce8e9cc5b640f4b47e1ae607ae3ea14a7003cb98a04f9df943e22c1baf316d520724237533c2c337cc56f2 fix-xorg-mdss-update-fb-info.patch" diff --git a/device/testing/linux-xiaomi-tissot/fix-xorg-mdss-update-fb-info.patch b/device/testing/linux-xiaomi-tissot/fix-xorg-mdss-update-fb-info.patch new file mode 100644 index 000000000..dce6cc5f4 --- /dev/null +++ b/device/testing/linux-xiaomi-tissot/fix-xorg-mdss-update-fb-info.patch @@ -0,0 +1,118 @@ +From d47aab08a1bdb726976bd657411fcae58c40d038 Mon Sep 17 00:00:00 2001 +From: Ion Agorria +Date: Thu, 24 Jan 2019 18:52:58 +0100 +Subject: [PATCH] mdss: update fb mode at mdss_panelinfo_to_fb_var to fix Xorg + +When mdss_panelinfo_to_fb_var is called at +screen unblank it updates the values in fb_info->var, +meanwhile the fb_info->mode and modelist remain with old +values set at registering the fb causing mismatch when +Xorg attempts to set mode. +--- + drivers/video/fbdev/msm/mdss_fb.c | 25 ++++++++++++++++------ + drivers/video/fbdev/msm/mdss_fb.h | 3 +-- + drivers/video/fbdev/msm/mdss_mdp_overlay.c | 2 +- + 3 files changed, 20 insertions(+), 10 deletions(-) + +diff --git a/drivers/video/fbdev/msm/mdss_fb.c b/drivers/video/fbdev/msm/mdss_fb.c +index dcb068813e88..c64ff1cd75c7 100644 +--- a/drivers/video/fbdev/msm/mdss_fb.c ++++ b/drivers/video/fbdev/msm/mdss_fb.c +@@ -1923,7 +1923,7 @@ static void mdss_panel_validate_debugfs_info(struct msm_fb_data_type *mfd) + if (is_panel_split(mfd) && pdata->next) + mdss_fb_validate_split(pdata->panel_info.xres, + pdata->next->panel_info.xres, mfd); +- mdss_panelinfo_to_fb_var(panel_info, var); ++ mdss_panelinfo_to_fb_var(mfd); + if (mdss_fb_send_panel_event(mfd, MDSS_EVENT_CHECK_PARAMS, + panel_info)) + pr_err("Failed to send panel event CHECK_PARAMS\n"); +@@ -2053,7 +2053,7 @@ static int mdss_fb_blank_unblank(struct msm_fb_data_type *mfd) + * programmed in the controller. + * Update this info in the upstream structs. + */ +- mdss_panelinfo_to_fb_var(panel_info, var); ++ mdss_panelinfo_to_fb_var(mfd); + + /* Start the work thread to signal idle time */ + if (mfd->idle_time) +@@ -2787,7 +2787,7 @@ static int mdss_fb_register(struct msm_fb_data_type *mfd) + return ret; + } + +- mdss_panelinfo_to_fb_var(panel_info, var); ++ mdss_panelinfo_to_fb_var(mfd); + + fix->type = panel_info->is_3d_panel; + if (mfd->mdp.fb_stride) +@@ -3512,7 +3512,7 @@ static void mdss_fb_update_resolution(struct msm_fb_data_type *mfd, + } + var->xres_virtual = var->xres; + var->yres_virtual = pinfo->yres * mfd->fb_page; +- mdss_panelinfo_to_fb_var(pinfo, var); ++ mdss_panelinfo_to_fb_var(mfd); + } + + int mdss_fb_atomic_commit(struct fb_info *info, +@@ -3743,9 +3743,14 @@ static void mdss_fb_var_to_panelinfo(struct fb_var_screeninfo *var, + pinfo->mipi.dsi_pclk_rate = pinfo->clk_rate; + } + +-void mdss_panelinfo_to_fb_var(struct mdss_panel_info *pinfo, +- struct fb_var_screeninfo *var) ++void mdss_panelinfo_to_fb_var(struct msm_fb_data_type *mfd) + { ++ if (!mfd) ++ return -EINVAL; ++ ++ struct mdss_panel_info *pinfo = mfd->panel_info; ++ struct fb_info *fbi = mfd->fbi; ++ struct fb_var_screeninfo *var = &fbi->var; + u32 frame_rate; + + var->xres = mdss_fb_get_panel_xres(pinfo); +@@ -3780,7 +3785,13 @@ void mdss_panelinfo_to_fb_var(struct mdss_panel_info *pinfo, + if (pinfo->physical_height) + var->height = pinfo->physical_height; + +- pr_debug("ScreenInfo: res=%dx%d [%d, %d] [%d, %d]\n", ++ //Hack to update current fbi->mode according to fbi->var when var is updated from panel info ++ if (fbi->mode) { ++ printk("Updating mdss fb mode from fb var\n"); ++ fb_var_to_videomode(fbi->mode, var); ++ } ++ ++ printk("ScreenInfo: res=%dx%d [%d, %d] [%d, %d]\n", + var->xres, var->yres, var->left_margin, + var->right_margin, var->upper_margin, + var->lower_margin); +diff --git a/drivers/video/fbdev/msm/mdss_fb.h b/drivers/video/fbdev/msm/mdss_fb.h +index b068d96044d0..1a55482d99ce 100644 +--- a/drivers/video/fbdev/msm/mdss_fb.h ++++ b/drivers/video/fbdev/msm/mdss_fb.h +@@ -479,8 +479,7 @@ int mdss_fb_async_position_update(struct fb_info *info, + + u32 mdss_fb_get_mode_switch(struct msm_fb_data_type *mfd); + void mdss_fb_report_panel_dead(struct msm_fb_data_type *mfd); +-void mdss_panelinfo_to_fb_var(struct mdss_panel_info *pinfo, +- struct fb_var_screeninfo *var); ++void mdss_panelinfo_to_fb_var(struct msm_fb_data_type *mfd); + void mdss_fb_calc_fps(struct msm_fb_data_type *mfd); + void mdss_fb_idle_pc(struct msm_fb_data_type *mfd); + #endif /* MDSS_FB_H */ +diff --git a/drivers/video/fbdev/msm/mdss_mdp_overlay.c b/drivers/video/fbdev/msm/mdss_mdp_overlay.c +index 7c8a273ce538..606200e5f2a9 100644 +--- a/drivers/video/fbdev/msm/mdss_mdp_overlay.c ++++ b/drivers/video/fbdev/msm/mdss_mdp_overlay.c +@@ -3846,7 +3846,7 @@ int mdss_mdp_dfps_update_params(struct msm_fb_data_type *mfd, + * data, so any further call to get the screen + * info has the updated timings. + */ +- mdss_panelinfo_to_fb_var(&pdata->panel_info, var); ++ mdss_panelinfo_to_fb_var(mfd); + + MDSS_XLOG(dfps); + mutex_unlock(&mdp5_data->dfps_lock); +-- +2.28.0 +