From 141e6918279366c5058992290d4822cc0b2f39e9 Mon Sep 17 00:00:00 2001 From: shekar-adv <164714854+shekar-adv@users.noreply.github.com> Date: Wed, 2 Apr 2025 17:54:33 +0800 Subject: [PATCH 01/21] Create build-kernel.yml --- .github/workflow/build-kernel.yml | 51 +++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 .github/workflow/build-kernel.yml diff --git a/.github/workflow/build-kernel.yml b/.github/workflow/build-kernel.yml new file mode 100644 index 0000000000000..392e62e212238 --- /dev/null +++ b/.github/workflow/build-kernel.yml @@ -0,0 +1,51 @@ +name: Build RK3566 Kernel + +on: + push: + branches: + - main + pull_request: + branches: + - main + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout Kernel Source + uses: actions/checkout@v4 + + - name: Install Dependencies + run: | + sudo apt update + sudo apt install -y build-essential gcc-aarch64-linux-gnu bc bison flex libssl-dev libncurses-dev + + - name: Configure Kernel + run: | + make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- rk356x_defconfig + + - name: Compile Kernel + run: | + make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc) + + - name: Upload Kernel Image + uses: actions/upload-artifact@v4 + with: + name: rk3566-kernel + path: arch/arm64/boot/Image.gz + + - name: Create Boot Image + run: | + mkbootimg --kernel arch/arm64/boot/Image.gz \ + --ramdisk ramdisk.img \ + --cmdline "console=ttyFIQ0 root=/dev/mmcblk0p5 rw" \ + --output boot.img + + - name: Upload Boot Image + uses: actions/upload-artifact@v4 + with: + name: boot-image + path: boot.img + From 58ff82b32a136c5f7524a677b48d8aadad6b69f7 Mon Sep 17 00:00:00 2001 From: shekar-adv <164714854+shekar-adv@users.noreply.github.com> Date: Wed, 2 Apr 2025 17:57:17 +0800 Subject: [PATCH 02/21] Create build-kernel.yml --- .github/workflows/build-kernel.yml | 51 ++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 .github/workflows/build-kernel.yml diff --git a/.github/workflows/build-kernel.yml b/.github/workflows/build-kernel.yml new file mode 100644 index 0000000000000..1117e239b346b --- /dev/null +++ b/.github/workflows/build-kernel.yml @@ -0,0 +1,51 @@ +name: Build RK3566 Kernel + +on: + push: + branches: + - main + pull_request: + branches: + - main + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout Kernel Source + uses: actions/checkout@v4 + + - name: Install Dependencies + run: | + sudo apt update + sudo apt install -y build-essential gcc-aarch64-linux-gnu bc bison flex libssl-dev libncurses-dev + + - name: Configure Kernel + run: | + make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- rk356x_defconfig + + - name: Compile Kernel + run: | + make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc) + + - name: Upload Kernel Image + uses: actions/upload-artifact@v4 + with: + name: rk3566-kernel + path: arch/arm64/boot/Image.gz + + - name: Create Boot Image + run: | + mkbootimg --kernel arch/arm64/boot/Image.gz \ + --ramdisk ramdisk.img \ + --cmdline "console=ttyFIQ0 root=/dev/mmcblk0p5 rw" \ + --output boot.img + + - name: Upload Boot Image + uses: actions/upload-artifact@v4 + with: + name: boot-image + path: boot.img + From 1f767e8ab17d1628f9d5700c762ec86ab4c59e59 Mon Sep 17 00:00:00 2001 From: shekar-adv <164714854+shekar-adv@users.noreply.github.com> Date: Wed, 2 Apr 2025 17:59:15 +0800 Subject: [PATCH 03/21] Delete .github/workflow directory --- .github/workflow/build-kernel.yml | 51 ------------------------------- 1 file changed, 51 deletions(-) delete mode 100644 .github/workflow/build-kernel.yml diff --git a/.github/workflow/build-kernel.yml b/.github/workflow/build-kernel.yml deleted file mode 100644 index 392e62e212238..0000000000000 --- a/.github/workflow/build-kernel.yml +++ /dev/null @@ -1,51 +0,0 @@ -name: Build RK3566 Kernel - -on: - push: - branches: - - main - pull_request: - branches: - - main - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - name: Checkout Kernel Source - uses: actions/checkout@v4 - - - name: Install Dependencies - run: | - sudo apt update - sudo apt install -y build-essential gcc-aarch64-linux-gnu bc bison flex libssl-dev libncurses-dev - - - name: Configure Kernel - run: | - make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- rk356x_defconfig - - - name: Compile Kernel - run: | - make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc) - - - name: Upload Kernel Image - uses: actions/upload-artifact@v4 - with: - name: rk3566-kernel - path: arch/arm64/boot/Image.gz - - - name: Create Boot Image - run: | - mkbootimg --kernel arch/arm64/boot/Image.gz \ - --ramdisk ramdisk.img \ - --cmdline "console=ttyFIQ0 root=/dev/mmcblk0p5 rw" \ - --output boot.img - - - name: Upload Boot Image - uses: actions/upload-artifact@v4 - with: - name: boot-image - path: boot.img - From 47d76171946b4d191928cdc5c7256ef6a54879ec Mon Sep 17 00:00:00 2001 From: shekar-adv <164714854+shekar-adv@users.noreply.github.com> Date: Wed, 2 Apr 2025 18:08:15 +0800 Subject: [PATCH 04/21] Create build-kernel.ym --- .github/workflows/build-kernel.ym | 50 +++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 .github/workflows/build-kernel.ym diff --git a/.github/workflows/build-kernel.ym b/.github/workflows/build-kernel.ym new file mode 100644 index 0000000000000..938972350c62c --- /dev/null +++ b/.github/workflows/build-kernel.ym @@ -0,0 +1,50 @@ +name: Build RK3566 Kernel + +on: + push: + branches: + - main + pull_request: + branches: + - main + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout Kernel Source + uses: actions/checkout@v4 + + - name: Install Dependencies + run: | + sudo apt update + sudo apt install -y build-essential gcc-aarch64-linux-gnu bc bison flex libssl-dev libncurses-dev + + - name: Configure Kernel + run: | + make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- rk356x_defconfig + + - name: Compile Kernel + run: | + make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc) + + - name: Upload Kernel Image + uses: actions/upload-artifact@v4 + with: + name: rk3566-kernel + path: arch/arm64/boot/Image.gz + - name: Create Boot Image + run: | + mkbootimg --kernel arch/arm64/boot/Image.gz \ + --ramdisk ramdisk.img \ + --cmdline "console=ttyFIQ0 root=/dev/mmcblk0p5 rw" \ + --output boot.img + + - name: Upload Boot Image + uses: actions/upload-artifact@v4 + with: + name: boot-image + path: boot.img + From f19f3587f8201dd3be74fd6851650547e527aabb Mon Sep 17 00:00:00 2001 From: shekar-adv <164714854+shekar-adv@users.noreply.github.com> Date: Wed, 2 Apr 2025 18:25:27 +0800 Subject: [PATCH 05/21] Create configsrk356x_defconfig --- arch/arm64/configs/configsrk356x_defconfig | 70 ++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 arch/arm64/configs/configsrk356x_defconfig diff --git a/arch/arm64/configs/configsrk356x_defconfig b/arch/arm64/configs/configsrk356x_defconfig new file mode 100644 index 0000000000000..0af25acbfa567 --- /dev/null +++ b/arch/arm64/configs/configsrk356x_defconfig @@ -0,0 +1,70 @@ +# Sample rk356x_defconfig for RK3566 + +CONFIG_ARCH_ROCKCHIP=y +CONFIG_ARCH_ARM64=y +CONFIG_ARCH_MULTI_V7=y +CONFIG_ARM64=y +CONFIG_ARM64_32=y +CONFIG_ARM64_64=y +CONFIG_ARM64_PA_BITS=40 +CONFIG_ARM64_VA_BITS=48 +CONFIG_ARMV8_DEPRECATED=y +CONFIG_ARMV8_CRYPTO=y + +# CPU features +CONFIG_CPU_PABRT=y +CONFIG_CPU_PAN=y +CONFIG_CPU_V7=y +CONFIG_CPU_V8=y + +# Memory configuration +CONFIG_ARM64_COHERENT_POOL=y +CONFIG_PHYS_ADDR_T_64BIT=y +CONFIG_ARM64_PA_BITS=40 + +# Rockchip specific configuration +CONFIG_ROCKCHIP_PHY=y +CONFIG_ROCKCHIP_VOP=y +CONFIG_ROCKCHIP_DRM=y +CONFIG_ROCKCHIP_HDMI=y +CONFIG_ROCKCHIP_RGA=y +CONFIG_ROCKCHIP_CE=y +CONFIG_ROCKCHIP_SDMA=y + +# Kernel features +CONFIG_NETFILTER=y +CONFIG_NETFILTER_ADVANCED=y +CONFIG_INET=y +CONFIG_IP_NF_IPTABLES=y +CONFIG_IP_NF_TARGET_MASQUERADE=y +CONFIG_IPV6=y +CONFIG_INET6=y +CONFIG_NETDEVICES=y +CONFIG_PACKET=y +CONFIG_UNIX=y + +# File system support +CONFIG_EXT4_FS=y +CONFIG_F2FS_FS=y +CONFIG_SQUASHFS=y +CONFIG_FUSE_FS=y +CONFIG_OVERLAY_FS=y + +# Power management +CONFIG_PM=y +CONFIG_PM_SLEEP=y +CONFIG_ARM64_CPU_IDLE=y +CONFIG_ARM64_RAS=y + +# Debugging +CONFIG_DEBUG_INFO=y +CONFIG_KGDB=y +CONFIG_KDB=y + +# Networking +CONFIG_NET=y +CONFIG_NETFILTER=y +CONFIG_NETFILTER_XT_MATCH_IPVS=y + +# Generic defconfig +CONFIG_CMDLINE="root=/dev/mmcblk0p2 rootwait rw" From ce84dee28e66687b402e4d7c88ea970ad7c55ce3 Mon Sep 17 00:00:00 2001 From: shekar-adv <164714854+shekar-adv@users.noreply.github.com> Date: Wed, 2 Apr 2025 18:31:52 +0800 Subject: [PATCH 06/21] Rename configsrk356x_defconfig to rk356x_defconfig --- arch/arm64/configs/{configsrk356x_defconfig => rk356x_defconfig} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename arch/arm64/configs/{configsrk356x_defconfig => rk356x_defconfig} (100%) diff --git a/arch/arm64/configs/configsrk356x_defconfig b/arch/arm64/configs/rk356x_defconfig similarity index 100% rename from arch/arm64/configs/configsrk356x_defconfig rename to arch/arm64/configs/rk356x_defconfig From 1977c48dd9c2723d389b7ab545fd2b6bd4877035 Mon Sep 17 00:00:00 2001 From: shekar-adv <164714854+shekar-adv@users.noreply.github.com> Date: Wed, 2 Apr 2025 18:38:25 +0800 Subject: [PATCH 07/21] Update cpu.c --- kernel/cpu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/cpu.c b/kernel/cpu.c index 977b1add6fc95..514924bf97eb0 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c @@ -748,7 +748,7 @@ void notify_cpu_starting(unsigned int cpu) unsigned long val = CPU_STARTING; #ifdef CONFIG_PM_SLEEP_SMP - if (frozen_cpus != NULL && cpumask_test_cpu(cpu, frozen_cpus)) + if (cpumask_test_cpu(cpu, frozen_cpus)) val = CPU_STARTING_FROZEN; #endif /* CONFIG_PM_SLEEP_SMP */ cpu_notify(val, (void *)(long)cpu); From 6c7a62abe2571f5a7ed8a0a531314368e40ed3ba Mon Sep 17 00:00:00 2001 From: shekar-adv <164714854+shekar-adv@users.noreply.github.com> Date: Thu, 3 Apr 2025 11:10:50 +0800 Subject: [PATCH 08/21] Update page_alloc.c --- mm/page_alloc.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 6bd339ca6faff..d13b615f9d327 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -5934,16 +5934,15 @@ void __init mem_init_print_info(const char *str) */ #define adj_init_size(start, end, size, pos, adj) \ do { \ - if (start <= pos && pos < end && size > adj) \ + if (&(start)[0] <= &(pos)[0] && &(pos)[0] < &(end)[0] && size > adj) \ size -= adj; \ } while (0) - adj_init_size(__init_begin, __init_end, init_data_size, - _sinittext, init_code_size); - adj_init_size(_stext, _etext, codesize, _sinittext, init_code_size); - adj_init_size(_sdata, _edata, datasize, __init_begin, init_data_size); - adj_init_size(_stext, _etext, codesize, __start_rodata, rosize); - adj_init_size(_sdata, _edata, datasize, __start_rodata, rosize); +adj_init_size(__init_begin, __init_end, init_data_size, _sinittext, init_code_size); +adj_init_size(_stext, _etext, codesize, _sinittext, init_code_size); +adj_init_size(_sdata, _edata, datasize, __init_begin, init_data_size); +adj_init_size(_stext, _etext, codesize, __start_rodata, rosize); +adj_init_size(_sdata, _edata, datasize, __start_rodata, rosize); #undef adj_init_size From d96b33e96f9f03c006460092d05dbaaccebe93a2 Mon Sep 17 00:00:00 2001 From: shekar-adv <164714854+shekar-adv@users.noreply.github.com> Date: Thu, 3 Apr 2025 11:15:29 +0800 Subject: [PATCH 09/21] Update extable.c --- kernel/extable.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/extable.c b/kernel/extable.c index 4f06fc34313fc..c000ec880a19e 100644 --- a/kernel/extable.c +++ b/kernel/extable.c @@ -41,7 +41,7 @@ u32 __initdata __visible main_extable_sort_needed = 1; /* Sort the kernel's built-in exception table */ void __init sort_main_extable(void) { - if (main_extable_sort_needed && __stop___ex_table > __start___ex_table) { + if (main_extable_sort_needed && &__stop___ex_table[0] > &__start___ex_table[0]) { pr_notice("Sorting __ex_table...\n"); sort_extable(__start___ex_table, __stop___ex_table); } From 392aa514b5ace56b449dfed14bee4a3fc5053ff8 Mon Sep 17 00:00:00 2001 From: shekar-adv <164714854+shekar-adv@users.noreply.github.com> Date: Thu, 3 Apr 2025 11:23:05 +0800 Subject: [PATCH 10/21] Update mutex.c --- kernel/locking/mutex.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c index a70b90db3909c..f84b134aacebd 100644 --- a/kernel/locking/mutex.c +++ b/kernel/locking/mutex.c @@ -507,13 +507,17 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, struct ww_acquire_ctx *ww_ctx, const bool use_ww_ctx) { struct task_struct *task = current; - struct mutex_waiter waiter; + struct mutex_waiter *waiter; + waiter = kmalloc(sizeof(*waiter), GFP_KERNEL); + if (!waiter) + return -ENOMEM; // Handle allocation failure unsigned long flags; int ret; if (use_ww_ctx) { struct ww_mutex *ww = container_of(lock, struct ww_mutex, base); if (unlikely(ww_ctx == READ_ONCE(ww->ctx))) + kfree(waiter); return -EALREADY; } @@ -523,6 +527,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, if (mutex_optimistic_spin(lock, ww_ctx, use_ww_ctx)) { /* got the lock, yay! */ preempt_enable(); + kfree(waiter); return 0; } @@ -602,6 +607,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, spin_unlock_mutex(&lock->wait_lock, flags); preempt_enable(); + kfree(waiter); return 0; err: @@ -610,6 +616,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, debug_mutex_free_waiter(&waiter); mutex_release(&lock->dep_map, 1, ip); preempt_enable(); + kfree(waiter); return ret; } From 4151809b09cfc8f8573e235206434af615b685c4 Mon Sep 17 00:00:00 2001 From: shekar-adv <164714854+shekar-adv@users.noreply.github.com> Date: Thu, 3 Apr 2025 11:30:22 +0800 Subject: [PATCH 11/21] Update mutex.c --- kernel/locking/mutex.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c index f84b134aacebd..0790356ff3f4c 100644 --- a/kernel/locking/mutex.c +++ b/kernel/locking/mutex.c @@ -26,6 +26,7 @@ #include #include #include +#include // Required for kmalloc() and kfree() /* * In the DEBUG case we are using the "NULL fastpath" for mutexes, @@ -511,6 +512,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, waiter = kmalloc(sizeof(*waiter), GFP_KERNEL); if (!waiter) return -ENOMEM; // Handle allocation failure + unsigned long flags; int ret; @@ -541,12 +543,12 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, (atomic_xchg_acquire(&lock->count, 0) == 1)) goto skip_wait; - debug_mutex_lock_common(lock, &waiter); - debug_mutex_add_waiter(lock, &waiter, task); + debug_mutex_lock_common(lock, waiter); + debug_mutex_add_waiter(lock, waiter, task); /* add waiting tasks to the end of the waitqueue (FIFO): */ - list_add_tail(&waiter.list, &lock->wait_list); - waiter.task = task; + list_add_tail(&waiter->list, &lock->wait_list); + waiter->task = task; lock_contended(&lock->dep_map, ip); From 3395fb8f9d2d7bd8f10739c211fe6f451692822b Mon Sep 17 00:00:00 2001 From: shekar-adv <164714854+shekar-adv@users.noreply.github.com> Date: Thu, 3 Apr 2025 11:43:40 +0800 Subject: [PATCH 12/21] Update mutex.c --- kernel/locking/mutex.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c index 0790356ff3f4c..9cfdcc2a90581 100644 --- a/kernel/locking/mutex.c +++ b/kernel/locking/mutex.c @@ -509,12 +509,17 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, { struct task_struct *task = current; struct mutex_waiter *waiter; - waiter = kmalloc(sizeof(*waiter), GFP_KERNEL); - if (!waiter) - return -ENOMEM; // Handle allocation failure - unsigned long flags; int ret; + + waiter = kmalloc(sizeof(*waiter), GFP_KERNEL); + if (!waiter) + return -ENOMEM; + + if (unlikely(ww_ctx == READ_ONCE(ww->ctx))) { + kfree(waiter); + return -EALREADY; + } if (use_ww_ctx) { struct ww_mutex *ww = container_of(lock, struct ww_mutex, base); @@ -591,11 +596,11 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, } __set_task_state(task, TASK_RUNNING); - mutex_remove_waiter(lock, &waiter, task); + mutex_remove_waiter(lock, waiter, task); /* set it to 0 if there are no waiters left: */ if (likely(list_empty(&lock->wait_list))) atomic_set(&lock->count, 0); - debug_mutex_free_waiter(&waiter); + debug_mutex_free_waiter(waiter); skip_wait: /* got the lock - cleanup and rejoice! */ @@ -613,9 +618,9 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, return 0; err: - mutex_remove_waiter(lock, &waiter, task); + mutex_remove_waiter(lock, waiter, task); spin_unlock_mutex(&lock->wait_lock, flags); - debug_mutex_free_waiter(&waiter); + debug_mutex_free_waiter(waiter); mutex_release(&lock->dep_map, 1, ip); preempt_enable(); kfree(waiter); From aa3fc57cc9fb82a5946d995efbef9f5d4d8ec25c Mon Sep 17 00:00:00 2001 From: shekar-adv <164714854+shekar-adv@users.noreply.github.com> Date: Thu, 3 Apr 2025 11:56:21 +0800 Subject: [PATCH 13/21] Update mutex.c --- kernel/locking/mutex.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c index 9cfdcc2a90581..d3a65ef42cbab 100644 --- a/kernel/locking/mutex.c +++ b/kernel/locking/mutex.c @@ -516,10 +516,6 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, if (!waiter) return -ENOMEM; - if (unlikely(ww_ctx == READ_ONCE(ww->ctx))) { - kfree(waiter); - return -EALREADY; - } if (use_ww_ctx) { struct ww_mutex *ww = container_of(lock, struct ww_mutex, base); From 0e739a222865d59a23ab71a9e0b66df7f96d6fce Mon Sep 17 00:00:00 2001 From: shekar-adv <164714854+shekar-adv@users.noreply.github.com> Date: Thu, 3 Apr 2025 12:04:33 +0800 Subject: [PATCH 14/21] Update mutex.c --- kernel/locking/mutex.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c index d3a65ef42cbab..500fb818924d5 100644 --- a/kernel/locking/mutex.c +++ b/kernel/locking/mutex.c @@ -520,8 +520,10 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, if (use_ww_ctx) { struct ww_mutex *ww = container_of(lock, struct ww_mutex, base); if (unlikely(ww_ctx == READ_ONCE(ww->ctx))) + { kfree(waiter); return -EALREADY; + } } preempt_disable(); From 50894e50d165e208abddc831756be333e57e6062 Mon Sep 17 00:00:00 2001 From: shekar-adv <164714854+shekar-adv@users.noreply.github.com> Date: Thu, 3 Apr 2025 12:13:34 +0800 Subject: [PATCH 15/21] Update semaphore.c --- kernel/locking/semaphore.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/kernel/locking/semaphore.c b/kernel/locking/semaphore.c index b8120abe594b8..97e237231a273 100644 --- a/kernel/locking/semaphore.c +++ b/kernel/locking/semaphore.c @@ -32,6 +32,7 @@ #include #include #include +#include // Required for kmalloc() and kfree() static noinline void __down(struct semaphore *sem); static noinline int __down_interruptible(struct semaphore *sem); @@ -205,11 +206,14 @@ static inline int __sched __down_common(struct semaphore *sem, long state, long timeout) { struct task_struct *task = current; - struct semaphore_waiter waiter; + struct semaphore_waiter *waiter; + waiter = kmalloc(sizeof(*waiter), GFP_KERNEL); + if (!waiter) + return -ENOMEM; // Handle allocation failure - list_add_tail(&waiter.list, &sem->wait_list); - waiter.task = task; - waiter.up = false; + list_add_tail(&waiter->list, &sem->wait_list); + waiter->task = task; + waiter->up = false; for (;;) { if (signal_pending_state(state, task)) @@ -220,16 +224,21 @@ static inline int __sched __down_common(struct semaphore *sem, long state, raw_spin_unlock_irq(&sem->lock); timeout = schedule_timeout(timeout); raw_spin_lock_irq(&sem->lock); - if (waiter.up) + if (waiter->up) + { + kfree(waiter); return 0; + } } timed_out: - list_del(&waiter.list); + list_del(&waiter->list); + kfree(waiter); return -ETIME; interrupted: - list_del(&waiter.list); + list_del(&waiter->list); + kfree(waiter); return -EINTR; } From e69a66a6acdb091498c2cdb54d2eda680e47f6ab Mon Sep 17 00:00:00 2001 From: shekar-adv <164714854+shekar-adv@users.noreply.github.com> Date: Thu, 3 Apr 2025 12:19:40 +0800 Subject: [PATCH 16/21] Update core.c --- kernel/sched/core.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 3e047ad4e8b72..14eed96cf2d00 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -7947,8 +7947,8 @@ void __init sched_init(void) #ifdef CONFIG_SMP zalloc_cpumask_var(&sched_domains_tmpmask, GFP_NOWAIT); /* May be allocated at isolcpus cmdline parse time */ - if (cpu_isolated_map == NULL) - zalloc_cpumask_var(&cpu_isolated_map, GFP_NOWAIT); + // if (cpu_isolated_map == NULL) + // zalloc_cpumask_var(&cpu_isolated_map, GFP_NOWAIT); idle_thread_set_boot_cpu(); set_cpu_rq_start_time(); #endif From a38477106be8143204f97c081100f8ee0edf9fe7 Mon Sep 17 00:00:00 2001 From: shekar-adv <164714854+shekar-adv@users.noreply.github.com> Date: Thu, 3 Apr 2025 12:53:19 +0800 Subject: [PATCH 17/21] Update completion.c --- kernel/sched/completion.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kernel/sched/completion.c b/kernel/sched/completion.c index 8d0f35debf356..2aed284301a9a 100644 --- a/kernel/sched/completion.c +++ b/kernel/sched/completion.c @@ -13,7 +13,8 @@ #include #include - +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdangling-pointer" /** * complete: - signals a single thread waiting on this completion * @x: holds the state of this particular completion @@ -315,3 +316,5 @@ bool completion_done(struct completion *x) return true; } EXPORT_SYMBOL(completion_done); + +#pragma GCC diagnostic pop From 3ac8bfb90f5357685fb29a4f4cd17e61f7d85224 Mon Sep 17 00:00:00 2001 From: shekar-adv <164714854+shekar-adv@users.noreply.github.com> Date: Thu, 3 Apr 2025 13:03:18 +0800 Subject: [PATCH 18/21] Update eth.c --- net/ethernet/eth.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c index 52dcd414c2afb..429ad86d7a6dc 100644 --- a/net/ethernet/eth.c +++ b/net/ethernet/eth.c @@ -61,6 +61,9 @@ #include #include +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wstringop-overread" + __setup("ether=", netdev_boot_setup); /** @@ -486,3 +489,5 @@ static int __init eth_offload_init(void) } fs_initcall(eth_offload_init); + +#pragma GCC diagnostic pop From 098ed2d681b48ddb1b4c0db002e7656bd896a98e Mon Sep 17 00:00:00 2001 From: shekar-adv <164714854+shekar-adv@users.noreply.github.com> Date: Thu, 3 Apr 2025 13:12:28 +0800 Subject: [PATCH 19/21] Update rk356x_defconfig --- arch/arm64/configs/rk356x_defconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/arm64/configs/rk356x_defconfig b/arch/arm64/configs/rk356x_defconfig index 0af25acbfa567..2e0613f05375d 100644 --- a/arch/arm64/configs/rk356x_defconfig +++ b/arch/arm64/configs/rk356x_defconfig @@ -68,3 +68,6 @@ CONFIG_NETFILTER_XT_MATCH_IPVS=y # Generic defconfig CONFIG_CMDLINE="root=/dev/mmcblk0p2 rootwait rw" + +CONFIG_DMA_BUF=y +CONFIG_DMA_SHARED_BUFFER=y From 964d7d8812edbcfaa37181487ce8fe2e7df59279 Mon Sep 17 00:00:00 2001 From: shekar-adv <164714854+shekar-adv@users.noreply.github.com> Date: Thu, 3 Apr 2025 13:29:58 +0800 Subject: [PATCH 20/21] Update rk356x_defconfig --- arch/arm64/configs/rk356x_defconfig | 49 +++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/arch/arm64/configs/rk356x_defconfig b/arch/arm64/configs/rk356x_defconfig index 2e0613f05375d..eab0d17d8d5ab 100644 --- a/arch/arm64/configs/rk356x_defconfig +++ b/arch/arm64/configs/rk356x_defconfig @@ -1,5 +1,6 @@ # Sample rk356x_defconfig for RK3566 +# Basic architecture configuration CONFIG_ARCH_ROCKCHIP=y CONFIG_ARCH_ARM64=y CONFIG_ARCH_MULTI_V7=y @@ -69,5 +70,53 @@ CONFIG_NETFILTER_XT_MATCH_IPVS=y # Generic defconfig CONFIG_CMDLINE="root=/dev/mmcblk0p2 rootwait rw" +# DMA configuration CONFIG_DMA_BUF=y CONFIG_DMA_SHARED_BUFFER=y + +# Enable USART (UART) ports +# Enabling driver support for UART +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 # Change this to the number of UARTs you have +CONFIG_SERIAL_8250_DW=y + +# Enable specific USART port driver +CONFIG_SERIAL_8250_PNP=y +CONFIG_SERIAL_8250_RSA=y # For Rockchip-specific UART support (if applicable) +CONFIG_SERIAL_8250_RSA_NR_PORTS=4 # Change this to your port number if needed + +# Enable specific console ports for UART (use ttyS0, ttyS1, etc.) +CONFIG_CONSOLE_POLL=y +CONFIG_SERIAL_8250_PNP=y +CONFIG_SERIAL_8250_EXTENDED=y + +# Enable DMA for UARTs if needed +CONFIG_SERIAL_8250_DMA=y + +# Ensure all ports are enabled for use (if not specified, you might need to check with hardware configuration) +CONFIG_SERIAL_8250_NR_UARTS=4 # Change this based on how many UART ports you have +CONFIG_SERIAL_8250_SHARE_IRQ=y + +# Enable debugging for serial (optional) +CONFIG_SERIAL_DEBUG=y + +# Miscellaneous kernel options +CONFIG_ZLIB_DEFLATE=y +CONFIG_SQUASHFS=y + +# Enable DMA and DMA Buffer Subsystem +CONFIG_DMA_ENGINE=y +CONFIG_DMA_VIRTUAL=y +CONFIG_DMA_DIRECT=y + +# Enable specific Rockchip DMA options (if applicable) +CONFIG_ROCKCHIP_DMA=y +CONFIG_ROCKCHIP_DRM_DMA=y + +# Ensure proper support for `dma-buf` buffer management +CONFIG_DMA_BUF=y +CONFIG_DMA_SHARED_BUFFER=y +CONFIG_DMA_CMA=y # Contiguous Memory Allocator for DMA +CONFIG_DMA_API=y # Enable the DMA API interface + From 181aea3b10ddc5cbf4b05739048c8152d0ba567b Mon Sep 17 00:00:00 2001 From: shekar-adv <164714854+shekar-adv@users.noreply.github.com> Date: Thu, 3 Apr 2025 13:36:45 +0800 Subject: [PATCH 21/21] Update rga_drv.c --- drivers/video/rockchip/rga/rga_drv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/video/rockchip/rga/rga_drv.c b/drivers/video/rockchip/rga/rga_drv.c index 353857f721f72..8823c732a5eb6 100644 --- a/drivers/video/rockchip/rga/rga_drv.c +++ b/drivers/video/rockchip/rga/rga_drv.c @@ -44,8 +44,8 @@ #include #include #include -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0)) #include +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0)) #include #endif