diff --git a/device/downstream/linux-samsung-j4lte/0005-HACK-decon_7570-Swap-red-blue-offset.patch b/device/downstream/linux-samsung-j4lte/0005-HACK-decon_7570-Swap-red-blue-offset.patch deleted file mode 100644 index 26af84c85..000000000 --- a/device/downstream/linux-samsung-j4lte/0005-HACK-decon_7570-Swap-red-blue-offset.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 8c520ab87b8213a340c0c86a88b24e4d90e3a457 Mon Sep 17 00:00:00 2001 -From: Hendra Manudinata -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 ---- - 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 - diff --git a/device/downstream/linux-samsung-j4lte/0006-drivers-samsung-scsc-Fix-FW_LOCATION_AUTO-symbol.patch b/device/downstream/linux-samsung-j4lte/0005-drivers-samsung-scsc-Fix-FW_LOCATION_AUTO-symbol.patch similarity index 100% rename from device/downstream/linux-samsung-j4lte/0006-drivers-samsung-scsc-Fix-FW_LOCATION_AUTO-symbol.patch rename to device/downstream/linux-samsung-j4lte/0005-drivers-samsung-scsc-Fix-FW_LOCATION_AUTO-symbol.patch diff --git a/device/downstream/linux-samsung-j4lte/0007-drivers-samsung-scsc-Skip-mount-point-check.patch b/device/downstream/linux-samsung-j4lte/0006-drivers-samsung-scsc-Skip-mount-point-check.patch similarity index 100% rename from device/downstream/linux-samsung-j4lte/0007-drivers-samsung-scsc-Skip-mount-point-check.patch rename to device/downstream/linux-samsung-j4lte/0006-drivers-samsung-scsc-Skip-mount-point-check.patch diff --git a/device/downstream/linux-samsung-j4lte/0007-fbdev-decon_7570-Initialize-framebuffer-more-late.patch b/device/downstream/linux-samsung-j4lte/0007-fbdev-decon_7570-Initialize-framebuffer-more-late.patch new file mode 100644 index 000000000..0601fdaad --- /dev/null +++ b/device/downstream/linux-samsung-j4lte/0007-fbdev-decon_7570-Initialize-framebuffer-more-late.patch @@ -0,0 +1,54 @@ +From 9ff4d93a4b27eb57278e6721e8b485726b87f25d Mon Sep 17 00:00:00 2001 +From: Hendra Manudinata +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 +--- + .../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) { diff --git a/device/downstream/linux-samsung-j4lte/0008-HACK-loop-Force-disable-Direct-I-O-operations.patch b/device/downstream/linux-samsung-j4lte/0008-HACK-loop-Force-disable-Direct-I-O-operations.patch new file mode 100644 index 000000000..5454b657c --- /dev/null +++ b/device/downstream/linux-samsung-j4lte/0008-HACK-loop-Force-disable-Direct-I-O-operations.patch @@ -0,0 +1,42 @@ +From a285560a29a910bb51bd8d392ccb4be2f6bf2d7e Mon Sep 17 00:00:00 2001 +From: Hendra Manudinata +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 +--- + 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; diff --git a/device/downstream/linux-samsung-j4lte/APKBUILD b/device/downstream/linux-samsung-j4lte/APKBUILD index 0edb704c1..08a6d231f 100644 --- a/device/downstream/linux-samsung-j4lte/APKBUILD +++ b/device/downstream/linux-samsung-j4lte/APKBUILD @@ -3,7 +3,7 @@ maintainer="Hendra Manudinata " 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 "