linux-samsung-j4lte: Update patches for recent boot fixes
Recent test shows that j4lte requires these patches to be able to boot into postmarketOS, as well as some additional features to make it a little bit more usable: 1. Disabling direct I/O patch This is required to fix kernel panic during e2fsck performed by initramfs. The root cause is still unknown and thus needs further investigation. But for now, while we're in downstream kernel, temporarily add this hacky patch. 2. Initialize framebuffer later This fixes kernel panics when `CONFIG_FRAMEBUFFER_CONSOLE` is enabled, caused by unitialized pointers & mutex. This could be applied on other older Samsung devices that use similar DECON. Signed-off-by: Hendra Manudinata <hm@ndraa.xyz> Part-of: <https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/8574>
This commit is contained in:
parent
92fa3601f6
commit
ef935a7584
6 changed files with 105 additions and 42 deletions
|
|
@ -1,35 +0,0 @@
|
|||
From 8c520ab87b8213a340c0c86a88b24e4d90e3a457 Mon Sep 17 00:00:00 2001
|
||||
From: Hendra Manudinata <manoedinata@daunscape.tech>
|
||||
Date: Tue, 24 Jun 2025 22:44:50 +0700
|
||||
Subject: [PATCH 5/7] HACK: decon_7570: Swap red & blue offset
|
||||
|
||||
Based on [1], to make red & blue properly rendered.
|
||||
|
||||
[1] https://gitlab.postmarketos.org/postmarketOS/pmaports/-/blob/master/device/testing/linux-samsung-xcover4lte/02-swap-red-blue.patch?ref_type=heads
|
||||
|
||||
Signed-off-by: Hendra Manudinata <manoedinata@gmail.com>
|
||||
---
|
||||
drivers/video/fbdev/exynos/decon_7570/decon-int_drv.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/fbdev/exynos/decon_7570/decon-int_drv.c b/drivers/video/fbdev/exynos/decon_7570/decon-int_drv.c
|
||||
index 7695b674..b3010c98 100644
|
||||
--- a/drivers/video/fbdev/exynos/decon_7570/decon-int_drv.c
|
||||
+++ b/drivers/video/fbdev/exynos/decon_7570/decon-int_drv.c
|
||||
@@ -440,11 +440,11 @@ int decon_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
|
||||
case 24:
|
||||
/* our 24bpp is unpacked, so 32bpp */
|
||||
var->bits_per_pixel = 32;
|
||||
- var->red.offset = 16;
|
||||
+ var->red.offset = 0;
|
||||
var->red.length = 8;
|
||||
var->green.offset = 8;
|
||||
var->green.length = 8;
|
||||
- var->blue.offset = 0;
|
||||
+ var->blue.offset = 16;
|
||||
var->blue.length = 8;
|
||||
break;
|
||||
|
||||
--
|
||||
2.43.0
|
||||
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
From 9ff4d93a4b27eb57278e6721e8b485726b87f25d Mon Sep 17 00:00:00 2001
|
||||
From: Hendra Manudinata <manoedinata@daunscape.tech>
|
||||
Date: Tue, 10 Mar 2026 21:45:59 +0700
|
||||
Subject: [PATCH] fbdev: decon_7570: Initialize framebuffer more late
|
||||
|
||||
register_framebuffer() broadcasts the display as ready to be used by
|
||||
other subsystem such as fbcon. However, since the frame is registered
|
||||
way early, some things haven't done preparing yet, including mutex
|
||||
locks. Thus, by enabling e.g. framebuffer console, the kernel panics
|
||||
about non-existent memory pointer.
|
||||
|
||||
Move register_framebuffer() to the bottom of the decon_probe() to ensure
|
||||
that DECON has been initialized before handing over the control of the
|
||||
display.
|
||||
|
||||
Signed-off-by: Hendra Manudinata <manoedinata@daunscape.tech>
|
||||
---
|
||||
.../video/fbdev/exynos/decon_7570/decon_core.c | 16 ++++++++--------
|
||||
1 file changed, 8 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/fbdev/exynos/decon_7570/decon_core.c b/drivers/video/fbdev/exynos/decon_7570/decon_core.c
|
||||
index 16f4ebcb3..e7903dcde 100644
|
||||
--- a/drivers/video/fbdev/exynos/decon_7570/decon_core.c
|
||||
+++ b/drivers/video/fbdev/exynos/decon_7570/decon_core.c
|
||||
@@ -3520,14 +3520,6 @@ static int decon_probe(struct platform_device *pdev)
|
||||
goto fail_iovmm;
|
||||
|
||||
|
||||
- /* register framebuffer */
|
||||
- fbinfo = decon->windows[decon->pdata->default_win]->fbinfo;
|
||||
- ret = register_framebuffer(fbinfo);
|
||||
- if (ret < 0) {
|
||||
- decon_err("failed to register framebuffer\n");
|
||||
- goto fail_iovmm;
|
||||
- }
|
||||
-
|
||||
/* mutex mechanism */
|
||||
mutex_init(&decon->output_lock);
|
||||
mutex_init(&decon->mutex);
|
||||
@@ -3679,6 +3671,14 @@ static int decon_probe(struct platform_device *pdev)
|
||||
#endif
|
||||
decon->state = DECON_STATE_INIT;
|
||||
|
||||
+ /* register framebuffer */
|
||||
+ fbinfo = decon->windows[decon->pdata->default_win]->fbinfo;
|
||||
+ ret = register_framebuffer(fbinfo);
|
||||
+ if (ret < 0) {
|
||||
+ decon_err("failed to register framebuffer\n");
|
||||
+ goto fail_iovmm;
|
||||
+ }
|
||||
+
|
||||
/* [W/A] prevent sleep enter during LCD on */
|
||||
ret = device_init_wakeup(decon->dev, true);
|
||||
if (ret) {
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
From a285560a29a910bb51bd8d392ccb4be2f6bf2d7e Mon Sep 17 00:00:00 2001
|
||||
From: Hendra Manudinata <manoedinata@daunscape.tech>
|
||||
Date: Wed, 11 Mar 2026 11:31:11 +0700
|
||||
Subject: [PATCH] [HACK] loop: Force disable Direct I/O operations
|
||||
|
||||
This somehow fixes kernel crash during boot, while initramfs performs
|
||||
e2fsck. Still unknown what's the reason of the crash, but for now,
|
||||
bypassing direct I/O operation seems to work.
|
||||
|
||||
Signed-off-by: Hendra Manudinata <manoedinata@daunscape.tech>
|
||||
---
|
||||
drivers/block/loop.c | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
|
||||
index 15157a3ea..2d2b752ac 100644
|
||||
--- a/drivers/block/loop.c
|
||||
+++ b/drivers/block/loop.c
|
||||
@@ -687,6 +687,11 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
|
||||
if (!file)
|
||||
goto out;
|
||||
|
||||
+ /* POSTMARKETOS:
|
||||
+ * Disable Direct I/O to prevent kernel panics during e2fsck
|
||||
+ */
|
||||
+ file->f_flags &= ~O_DIRECT;
|
||||
+
|
||||
error = loop_validate_file(file, bdev);
|
||||
if (error)
|
||||
goto out_putf;
|
||||
@@ -864,6 +869,11 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode,
|
||||
if (!file)
|
||||
goto out;
|
||||
|
||||
+ /* POSTMARKETOS:
|
||||
+ * Disable Direct I/O to prevent kernel panics during e2fsck
|
||||
+ */
|
||||
+ file->f_flags &= ~O_DIRECT;
|
||||
+
|
||||
error = -EBUSY;
|
||||
if (lo->lo_state != Lo_unbound)
|
||||
goto out_putf;
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
maintainer="Hendra Manudinata <hendra@manoedinata.com>"
|
||||
pkgname=linux-samsung-j4lte
|
||||
pkgver=3.18.140
|
||||
pkgrel=1
|
||||
pkgrel=2
|
||||
pkgdesc="Samsung Galaxy J4 kernel fork"
|
||||
arch="aarch64"
|
||||
_carch="arm64"
|
||||
|
|
@ -34,9 +34,10 @@ source="
|
|||
0002-zram-Set-zstd-as-the-default-compressor.patch
|
||||
0003-drivers-usb-u_ether-Force-setting-random-MAC-address.patch
|
||||
0004-staging-samsung-sec_batt-Force-disable-low-power-cha.patch
|
||||
0005-HACK-decon_7570-Swap-red-blue-offset.patch
|
||||
0006-drivers-samsung-scsc-Fix-FW_LOCATION_AUTO-symbol.patch
|
||||
0007-drivers-samsung-scsc-Skip-mount-point-check.patch
|
||||
0005-drivers-samsung-scsc-Fix-FW_LOCATION_AUTO-symbol.patch
|
||||
0006-drivers-samsung-scsc-Skip-mount-point-check.patch
|
||||
0007-fbdev-decon_7570-Initialize-framebuffer-more-late.patch
|
||||
0008-HACK-loop-Force-disable-Direct-I-O-operations.patch
|
||||
linux3.7to4.5-ARM64-remove-Sun-Solaris-style-flag-on-section.patch
|
||||
"
|
||||
builddir="$srcdir/$_repository-$_commit"
|
||||
|
|
@ -75,8 +76,9 @@ fafed0c79633b50f9c62febeb1198bc863ddcaf7d3140bf58b87f574a75a16c1b73d563ce849ab84
|
|||
f81dc234b7c37e5c33472a22f96299c435d4e2728e24164dc375abbc80912ce5a9045178deb2338f1f484a52296ad558541c01c101f244a62bf6149e75e0406b 0002-zram-Set-zstd-as-the-default-compressor.patch
|
||||
f69b9363ffd543f98f7799256bb3cfccc84623b69d8c7ee3ea291b52cecac7d961d4b491db6b5477bdd527ad3e9cbd738d67647fc074adcd2927b5eb6d2478dd 0003-drivers-usb-u_ether-Force-setting-random-MAC-address.patch
|
||||
8f17a56957476832df48f90c229302958ec848300ea7dff76c2e9fc9433c301b28239bbc7404cf9c1bac5410dd9984dce39d132bbb29650324b9136777185583 0004-staging-samsung-sec_batt-Force-disable-low-power-cha.patch
|
||||
a5d4afc22f514525f362884a618a770cf5301d4b0ae89d7f819d60c27aff9cb04f1ee823ebefe49872ac01e84a429d9619e0df7ec1c7b83793bc0dfb1da62e39 0005-HACK-decon_7570-Swap-red-blue-offset.patch
|
||||
e0f5e505e794d4db1ed87a86dadf8321199c8c749a2b1a9b31fc572320b95d9cc004664eea2f3e20163d2993bfe0f50bdcecf027b70ce551d02abb2874985f9a 0006-drivers-samsung-scsc-Fix-FW_LOCATION_AUTO-symbol.patch
|
||||
f0da70e3b5cc498e19430936422cf89476d68a5bbe45d593ab3c8bf353a81401a9133df983d3f1f84d0127670ad32b8adcb91e1beb821eb2efddd831f22f79dc 0007-drivers-samsung-scsc-Skip-mount-point-check.patch
|
||||
e0f5e505e794d4db1ed87a86dadf8321199c8c749a2b1a9b31fc572320b95d9cc004664eea2f3e20163d2993bfe0f50bdcecf027b70ce551d02abb2874985f9a 0005-drivers-samsung-scsc-Fix-FW_LOCATION_AUTO-symbol.patch
|
||||
f0da70e3b5cc498e19430936422cf89476d68a5bbe45d593ab3c8bf353a81401a9133df983d3f1f84d0127670ad32b8adcb91e1beb821eb2efddd831f22f79dc 0006-drivers-samsung-scsc-Skip-mount-point-check.patch
|
||||
76700ecaea56f15d4204ff3064e640552eca35d3713fddaaaee204d7bf983ef419c08c7d759ca58430a27bd10d4bda7d1b6a7ec34ba27f503256f4ee6e42649d 0007-fbdev-decon_7570-Initialize-framebuffer-more-late.patch
|
||||
ee281f9a6d5bab871d83e02cea6e222c6883e452c7b22ac65b512eca37d007218cad50e297189a4ad46be8d3d5a70f26f62867c75de30387cb4777a0c3a3e5e0 0008-HACK-loop-Force-disable-Direct-I-O-operations.patch
|
||||
75545ccd0082a119b9ad95fcef3523c939a5c946f8f3a5c3dde15cee1502f6c1011050a0ad5359426f018bb7ceea1c97a28c7665941bc89f365c8d11065ce0f6 linux3.7to4.5-ARM64-remove-Sun-Solaris-style-flag-on-section.patch
|
||||
"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue