From 7282dcdcbb71954f6c4714f96c55cb4d74b66b35 Mon Sep 17 00:00:00 2001 From: Danct12 Date: Sat, 11 Apr 2020 01:57:29 +0700 Subject: [PATCH] linux-xiaomi-lavender: add patch to fix framebuffer on X11 (MR 1142) Signed-off-by: Danct12 [ci:skip-build] --- .../0006-mdss-panel-to-fb-var.patch | 118 ++++++++++++++++++ device/testing/linux-xiaomi-lavender/APKBUILD | 7 +- 2 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 device/testing/linux-xiaomi-lavender/0006-mdss-panel-to-fb-var.patch diff --git a/device/testing/linux-xiaomi-lavender/0006-mdss-panel-to-fb-var.patch b/device/testing/linux-xiaomi-lavender/0006-mdss-panel-to-fb-var.patch new file mode 100644 index 000000000..d943737f4 --- /dev/null +++ b/device/testing/linux-xiaomi-lavender/0006-mdss-panel-to-fb-var.patch @@ -0,0 +1,118 @@ +From fe5131b250c373d152b7e73895f17846d1f1e6bd 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 3e632076639d..2d2b37bffa5d 100644 +--- a/drivers/video/fbdev/msm/mdss_fb.c ++++ b/drivers/video/fbdev/msm/mdss_fb.c +@@ -2339,7 +2339,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"); +@@ -2452,7 +2452,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) +@@ -3196,7 +3196,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) +@@ -3900,7 +3900,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, +@@ -4149,9 +4149,14 @@ static void mdss_fb_var_to_panelinfo(struct fb_var_screeninfo *var, + pinfo->lcdc.v_polarity = 1; + } + +-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); +@@ -4185,7 +4190,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 c6e8d37d7bc8..bbd17e1c72e2 100644 +--- a/drivers/video/fbdev/msm/mdss_fb.h ++++ b/drivers/video/fbdev/msm/mdss_fb.h +@@ -484,8 +484,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 81218319d58b..cee8a8e5e449 100644 +--- a/drivers/video/fbdev/msm/mdss_mdp_overlay.c ++++ b/drivers/video/fbdev/msm/mdss_mdp_overlay.c +@@ -3534,7 +3534,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.25.1 + diff --git a/device/testing/linux-xiaomi-lavender/APKBUILD b/device/testing/linux-xiaomi-lavender/APKBUILD index 01014a4ef..fd7d0ee43 100644 --- a/device/testing/linux-xiaomi-lavender/APKBUILD +++ b/device/testing/linux-xiaomi-lavender/APKBUILD @@ -2,11 +2,12 @@ # Kernel config based on: arch/arm64/configs/lavender-perf_defconfig # Original defconfig was: arch/arm64/configs/sdm660-perf_defconfig # Contributor: Alexey Min +# Contributor: Danct12 # Maintainer: Alexey Min pkgname=linux-xiaomi-lavender pkgver=4.4.156 -pkgrel=0 +pkgrel=1 pkgdesc="Xiaomi Redmi Note 7 kernel fork" arch="aarch64" _carch="arm64" @@ -35,6 +36,7 @@ source=" 0003-Add-config-option-to-fix-bootloader-cmdline-args.patch 0004-Reduce-battery-spam-in-dmesg.patch 0005-Adds-and-sets-BGRA-as-default.patch + 0006-mdss-panel-to-fb-var.patch " builddir="$srcdir/$_repository-$_commit" @@ -64,4 +66,5 @@ sha512sums="797586ac2757c9b27a5f8fc1c1ff460d959b32de322ff00509d1b3b060dbcc909a15 a8713d22404a5e2c0d2add3deb4cb033e972bd1983e10f1557d4de640c1329af50be2bfd92dc3cf76df711a6b4a422b920da76c2d6c4435e3624c85f7d07ae52 0002-Fix-TRACE_INCLUDE_PATH-paths.patch 9ce867c4254b537ef5d2485780c26b72da8a3a8767ba71557f3b48d6c550e0e14c8c3e575b31bf65d2878f08a8a4926e48a1c2f1be534bf80a7a57f58313b0fd 0003-Add-config-option-to-fix-bootloader-cmdline-args.patch 066ac4b77388fd2001df227db216da9f435e06d29ce1be59d8a8923613f3390e154cb5b6cb7785614a3a4b12c01d9f1b84dfd09b884dede3fa6d0e5b1ddb9045 0004-Reduce-battery-spam-in-dmesg.patch -f2a97a9500b6155a11f2341a8fd4b083ceb25a17d656c7975e34b9f3d8bacb495ae687f823db5fd07ddee27b2d95021f193bfadb5274185334255cda12bc85ce 0005-Adds-and-sets-BGRA-as-default.patch" +f2a97a9500b6155a11f2341a8fd4b083ceb25a17d656c7975e34b9f3d8bacb495ae687f823db5fd07ddee27b2d95021f193bfadb5274185334255cda12bc85ce 0005-Adds-and-sets-BGRA-as-default.patch +d5b868c64b8ebddcf74cb3aa478f30f0897af1e14e4fc42d977921104a6c568cc0bf36fc8a3b0f538cd3ca2ebf59244fdf23186a903259e5acc14d1c4ef4ccc3 0006-mdss-panel-to-fb-var.patch"