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:
Hendra Manudinata 2026-05-16 15:58:48 +07:00 committed by The Friendly Meow (merge) Bot
parent 92fa3601f6
commit ef935a7584
No known key found for this signature in database
6 changed files with 105 additions and 42 deletions

View file

@ -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

View file

@ -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) {

View file

@ -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;

View file

@ -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
"