mirror of
https://github.com/openwrt/openwrt.git
synced 2026-07-12 22:44:49 +04:00
kernel: bump 6.6 to 6.6.144
Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.6.144 Manual rebased patch: bcm27xx/patches-6.6/950-0464-drm-v3d-New-debugfs-end-points-to-query-GPU-usage-st.patch [1] Removes upstreamed patch: bcm27xx/patches-6.6/950-1552-drm-v3d-Set-job-pointer-to-NULL-when-the-job-s-fence.patch [2] All other patches autorefreshed. [1] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit?h=v6.6.144&id=756724002c5a65b07af067849ba365a51fc6f207 [2] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit?h=v6.6.144&id=756724002c5a65b07af067849ba365a51fc6f207 Signed-off-by: Goetz Goerisch <ggoerisch@gmail.com> Link: https://github.com/openwrt/openwrt/pull/24082 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
committed by
Hauke Mehrtens
parent
95d0ca014c
commit
25920e8425
+2
-2
@@ -1,2 +1,2 @@
|
||||
LINUX_VERSION-6.6 = .143
|
||||
LINUX_KERNEL_HASH-6.6.143 = dace1f8dc9c0dbf5df14f47e3229cd62c298e83049681731ef229f2ba7592932
|
||||
LINUX_VERSION-6.6 = .144
|
||||
LINUX_KERNEL_HASH-6.6.144 = ec19b8307b495078cdc03749e63cb3802ac23cf6122c82eb9719feeb4557ecc3
|
||||
|
||||
+1
-1
@@ -59,7 +59,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
irq_disable:
|
||||
--- a/drivers/gpu/drm/v3d/v3d_drv.h
|
||||
+++ b/drivers/gpu/drm/v3d/v3d_drv.h
|
||||
@@ -84,6 +84,12 @@ struct v3d_dev {
|
||||
@@ -87,6 +87,12 @@ struct v3d_dev {
|
||||
void __iomem *bridge_regs;
|
||||
void __iomem *gca_regs;
|
||||
struct clk *clk;
|
||||
|
||||
+3
-3
@@ -13,7 +13,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
--- a/drivers/gpu/drm/v3d/v3d_irq.c
|
||||
+++ b/drivers/gpu/drm/v3d/v3d_irq.c
|
||||
@@ -189,6 +189,7 @@ v3d_hub_irq(int irq, void *arg)
|
||||
@@ -193,6 +193,7 @@ v3d_hub_irq(int irq, void *arg)
|
||||
"GMP",
|
||||
};
|
||||
const char *client = "?";
|
||||
@@ -21,7 +21,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
V3D_WRITE(V3D_MMU_CTL, V3D_READ(V3D_MMU_CTL));
|
||||
|
||||
@@ -198,6 +199,7 @@ v3d_hub_irq(int irq, void *arg)
|
||||
@@ -202,6 +203,7 @@ v3d_hub_irq(int irq, void *arg)
|
||||
client = v3d41_axi_ids[axi_id];
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
dev_err(v3d->drm.dev, "MMU error from client %s (%d) at 0x%llx%s%s%s\n",
|
||||
client, axi_id, (long long)vio_addr,
|
||||
((intsts & V3D_HUB_INT_MMU_WRV) ?
|
||||
@@ -206,6 +208,7 @@ v3d_hub_irq(int irq, void *arg)
|
||||
@@ -210,6 +212,7 @@ v3d_hub_irq(int irq, void *arg)
|
||||
", pte invalid" : ""),
|
||||
((intsts & V3D_HUB_INT_MMU_CAP) ?
|
||||
", cap exceeded" : ""));
|
||||
|
||||
+20
-20
@@ -156,8 +156,8 @@ Signed-off-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
|
||||
struct v3d_queue_state {
|
||||
struct drm_gpu_scheduler sched;
|
||||
|
||||
@@ -28,6 +41,44 @@ struct v3d_queue_state {
|
||||
u64 emit_seqno;
|
||||
@@ -31,6 +44,44 @@ struct v3d_queue_state {
|
||||
struct v3d_job *active_job;
|
||||
};
|
||||
|
||||
+struct v3d_queue_pid_stats {
|
||||
@@ -201,7 +201,7 @@ Signed-off-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
|
||||
/* Performance monitor object. The perform lifetime is controlled by userspace
|
||||
* using perfmon related ioctls. A perfmon can be attached to a submit_cl
|
||||
* request, and when this is the case, HW perf counters will be activated just
|
||||
@@ -155,6 +206,8 @@ struct v3d_dev {
|
||||
@@ -153,6 +204,8 @@ struct v3d_dev {
|
||||
u32 num_allocated;
|
||||
u32 pages_allocated;
|
||||
} bo_stats;
|
||||
@@ -210,7 +210,7 @@ Signed-off-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
|
||||
};
|
||||
|
||||
static inline struct v3d_dev *
|
||||
@@ -252,6 +305,11 @@ struct v3d_job {
|
||||
@@ -250,6 +303,11 @@ struct v3d_job {
|
||||
*/
|
||||
struct v3d_perfmon *perfmon;
|
||||
|
||||
@@ -222,7 +222,7 @@ Signed-off-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
|
||||
/* Callback for the freeing of the job on refcount going to 0. */
|
||||
void (*free)(struct kref *ref);
|
||||
};
|
||||
@@ -416,6 +474,7 @@ void v3d_mmu_remove_ptes(struct v3d_bo *
|
||||
@@ -414,6 +472,7 @@ void v3d_mmu_remove_ptes(struct v3d_bo *
|
||||
/* v3d_sched.c */
|
||||
int v3d_sched_init(struct v3d_dev *v3d);
|
||||
void v3d_sched_fini(struct v3d_dev *v3d);
|
||||
@@ -250,34 +250,34 @@ Signed-off-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
|
||||
|
||||
#include "v3d_drv.h"
|
||||
#include "v3d_regs.h"
|
||||
@@ -100,6 +101,7 @@ v3d_irq(int irq, void *arg)
|
||||
@@ -104,6 +105,7 @@ v3d_irq(int irq, void *arg)
|
||||
if (intsts & V3D_INT_FLDONE) {
|
||||
struct v3d_fence *fence =
|
||||
to_v3d_fence(v3d->bin_job->base.irq_fence);
|
||||
to_v3d_fence(v3d->queue[V3D_BIN].active_job->irq_fence);
|
||||
+ v3d->gpu_queue_stats[V3D_BIN].last_exec_end = local_clock();
|
||||
|
||||
trace_v3d_bcl_irq(&v3d->drm, fence->seqno);
|
||||
|
||||
@@ -112,6 +114,7 @@ v3d_irq(int irq, void *arg)
|
||||
@@ -116,6 +118,7 @@ v3d_irq(int irq, void *arg)
|
||||
if (intsts & V3D_INT_FRDONE) {
|
||||
struct v3d_fence *fence =
|
||||
to_v3d_fence(v3d->render_job->base.irq_fence);
|
||||
to_v3d_fence(v3d->queue[V3D_RENDER].active_job->irq_fence);
|
||||
+ v3d->gpu_queue_stats[V3D_RENDER].last_exec_end = local_clock();
|
||||
|
||||
trace_v3d_rcl_irq(&v3d->drm, fence->seqno);
|
||||
|
||||
@@ -124,6 +127,7 @@ v3d_irq(int irq, void *arg)
|
||||
@@ -128,6 +131,7 @@ v3d_irq(int irq, void *arg)
|
||||
if (intsts & V3D_INT_CSDDONE) {
|
||||
struct v3d_fence *fence =
|
||||
to_v3d_fence(v3d->csd_job->base.irq_fence);
|
||||
to_v3d_fence(v3d->queue[V3D_CSD].active_job->irq_fence);
|
||||
+ v3d->gpu_queue_stats[V3D_CSD].last_exec_end = local_clock();
|
||||
|
||||
trace_v3d_csd_irq(&v3d->drm, fence->seqno);
|
||||
|
||||
@@ -163,6 +167,7 @@ v3d_hub_irq(int irq, void *arg)
|
||||
@@ -167,6 +171,7 @@ v3d_hub_irq(int irq, void *arg)
|
||||
if (intsts & V3D_HUB_INT_TFUC) {
|
||||
struct v3d_fence *fence =
|
||||
to_v3d_fence(v3d->tfu_job->base.irq_fence);
|
||||
to_v3d_fence(v3d->queue[V3D_TFU].active_job->irq_fence);
|
||||
+ v3d->gpu_queue_stats[V3D_TFU].last_exec_end = local_clock();
|
||||
|
||||
trace_v3d_tfu_irq(&v3d->drm, fence->seqno);
|
||||
@@ -407,7 +407,7 @@ Signed-off-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
|
||||
static struct dma_fence *v3d_bin_job_run(struct drm_sched_job *sched_job)
|
||||
{
|
||||
struct v3d_bin_job *job = to_bin_job(sched_job);
|
||||
@@ -107,6 +216,7 @@ static struct dma_fence *v3d_bin_job_run
|
||||
@@ -111,6 +220,7 @@ static struct dma_fence *v3d_bin_job_run
|
||||
trace_v3d_submit_cl(dev, false, to_v3d_fence(fence)->seqno,
|
||||
job->start, job->end);
|
||||
|
||||
@@ -415,7 +415,7 @@ Signed-off-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
|
||||
v3d_switch_perfmon(v3d, &job->base);
|
||||
|
||||
/* Set the current and end address of the control list.
|
||||
@@ -158,6 +268,7 @@ static struct dma_fence *v3d_render_job_
|
||||
@@ -164,6 +274,7 @@ static struct dma_fence *v3d_render_job_
|
||||
trace_v3d_submit_cl(dev, true, to_v3d_fence(fence)->seqno,
|
||||
job->start, job->end);
|
||||
|
||||
@@ -423,7 +423,7 @@ Signed-off-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
|
||||
v3d_switch_perfmon(v3d, &job->base);
|
||||
|
||||
/* XXX: Set the QCFG */
|
||||
@@ -194,6 +305,7 @@ v3d_tfu_job_run(struct drm_sched_job *sc
|
||||
@@ -202,6 +313,7 @@ v3d_tfu_job_run(struct drm_sched_job *sc
|
||||
|
||||
trace_v3d_submit_tfu(dev, to_v3d_fence(fence)->seqno);
|
||||
|
||||
@@ -431,7 +431,7 @@ Signed-off-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
|
||||
V3D_WRITE(V3D_TFU_IIA, job->args.iia);
|
||||
V3D_WRITE(V3D_TFU_IIS, job->args.iis);
|
||||
V3D_WRITE(V3D_TFU_ICA, job->args.ica);
|
||||
@@ -238,6 +350,7 @@ v3d_csd_job_run(struct drm_sched_job *sc
|
||||
@@ -258,6 +370,7 @@ v3d_csd_job_run(struct drm_sched_job *sc
|
||||
|
||||
trace_v3d_submit_csd(dev, to_v3d_fence(fence)->seqno);
|
||||
|
||||
@@ -439,7 +439,7 @@ Signed-off-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
|
||||
v3d_switch_perfmon(v3d, &job->base);
|
||||
|
||||
for (i = 1; i <= 6; i++)
|
||||
@@ -254,7 +367,10 @@ v3d_cache_clean_job_run(struct drm_sched
|
||||
@@ -274,7 +387,10 @@ v3d_cache_clean_job_run(struct drm_sched
|
||||
struct v3d_job *job = to_v3d_job(sched_job);
|
||||
struct v3d_dev *v3d = job->v3d;
|
||||
|
||||
@@ -450,7 +450,7 @@ Signed-off-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
|
||||
|
||||
return NULL;
|
||||
}
|
||||
@@ -406,8 +522,18 @@ v3d_sched_init(struct v3d_dev *v3d)
|
||||
@@ -426,8 +542,18 @@ v3d_sched_init(struct v3d_dev *v3d)
|
||||
int hw_jobs_limit = 1;
|
||||
int job_hang_limit = 0;
|
||||
int hang_limit_ms = 500;
|
||||
@@ -469,7 +469,7 @@ Signed-off-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
|
||||
ret = drm_sched_init(&v3d->queue[V3D_BIN].sched,
|
||||
&v3d_bin_sched_ops,
|
||||
hw_jobs_limit, job_hang_limit,
|
||||
@@ -461,9 +587,20 @@ void
|
||||
@@ -481,9 +607,20 @@ void
|
||||
v3d_sched_fini(struct v3d_dev *v3d)
|
||||
{
|
||||
enum v3d_queue q;
|
||||
|
||||
+14
-14
@@ -295,7 +295,7 @@ v2: fix kernel panic with debug-fs interface to list registers
|
||||
|
||||
static irqreturn_t
|
||||
v3d_hub_irq(int irq, void *arg);
|
||||
@@ -124,7 +125,8 @@ v3d_irq(int irq, void *arg)
|
||||
@@ -128,7 +129,8 @@ v3d_irq(int irq, void *arg)
|
||||
status = IRQ_HANDLED;
|
||||
}
|
||||
|
||||
@@ -303,9 +303,9 @@ v2: fix kernel panic with debug-fs interface to list registers
|
||||
+ if ((v3d->ver < 71 && (intsts & V3D_INT_CSDDONE)) ||
|
||||
+ (v3d->ver >= 71 && (intsts & V3D_V7_INT_CSDDONE))) {
|
||||
struct v3d_fence *fence =
|
||||
to_v3d_fence(v3d->csd_job->base.irq_fence);
|
||||
to_v3d_fence(v3d->queue[V3D_CSD].active_job->irq_fence);
|
||||
v3d->gpu_queue_stats[V3D_CSD].last_exec_end = local_clock();
|
||||
@@ -140,7 +142,7 @@ v3d_irq(int irq, void *arg)
|
||||
@@ -144,7 +146,7 @@ v3d_irq(int irq, void *arg)
|
||||
/* We shouldn't be triggering these if we have GMP in
|
||||
* always-allowed mode.
|
||||
*/
|
||||
@@ -314,7 +314,7 @@ v2: fix kernel panic with debug-fs interface to list registers
|
||||
dev_err(v3d->drm.dev, "GMP violation\n");
|
||||
|
||||
/* V3D 4.2 wires the hub and core IRQs together, so if we &
|
||||
@@ -217,6 +219,11 @@ v3d_hub_irq(int irq, void *arg)
|
||||
@@ -221,6 +223,11 @@ v3d_hub_irq(int irq, void *arg)
|
||||
status = IRQ_HANDLED;
|
||||
}
|
||||
|
||||
@@ -326,7 +326,7 @@ v2: fix kernel panic with debug-fs interface to list registers
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -231,8 +238,8 @@ v3d_irq_init(struct v3d_dev *v3d)
|
||||
@@ -235,8 +242,8 @@ v3d_irq_init(struct v3d_dev *v3d)
|
||||
* for us.
|
||||
*/
|
||||
for (core = 0; core < v3d->cores; core++)
|
||||
@@ -337,7 +337,7 @@ v2: fix kernel panic with debug-fs interface to list registers
|
||||
|
||||
irq = platform_get_irq_optional(v3d_to_pdev(v3d), 1);
|
||||
if (irq == -EPROBE_DEFER)
|
||||
@@ -287,12 +294,12 @@ v3d_irq_enable(struct v3d_dev *v3d)
|
||||
@@ -291,12 +298,12 @@ v3d_irq_enable(struct v3d_dev *v3d)
|
||||
|
||||
/* Enable our set of interrupts, masking out any others. */
|
||||
for (core = 0; core < v3d->cores; core++) {
|
||||
@@ -354,7 +354,7 @@ v2: fix kernel panic with debug-fs interface to list registers
|
||||
}
|
||||
|
||||
void
|
||||
@@ -313,8 +320,8 @@ v3d_irq_disable(struct v3d_dev *v3d)
|
||||
@@ -317,8 +324,8 @@ v3d_irq_disable(struct v3d_dev *v3d)
|
||||
|
||||
/* Clear any pending interrupts we might have left. */
|
||||
for (core = 0; core < v3d->cores; core++)
|
||||
@@ -591,7 +591,7 @@ v2: fix kernel panic with debug-fs interface to list registers
|
||||
# define V3D_CSD_CURRENT_ID0_WG_Y_MASK V3D_MASK(15, 0)
|
||||
--- a/drivers/gpu/drm/v3d/v3d_sched.c
|
||||
+++ b/drivers/gpu/drm/v3d/v3d_sched.c
|
||||
@@ -282,6 +282,8 @@ static struct dma_fence *v3d_render_job_
|
||||
@@ -288,6 +288,8 @@ static struct dma_fence *v3d_render_job_
|
||||
return fence;
|
||||
}
|
||||
|
||||
@@ -600,7 +600,7 @@ v2: fix kernel panic with debug-fs interface to list registers
|
||||
static struct dma_fence *
|
||||
v3d_tfu_job_run(struct drm_sched_job *sched_job)
|
||||
{
|
||||
@@ -306,20 +308,22 @@ v3d_tfu_job_run(struct drm_sched_job *sc
|
||||
@@ -314,20 +316,22 @@ v3d_tfu_job_run(struct drm_sched_job *sc
|
||||
trace_v3d_submit_tfu(dev, to_v3d_fence(fence)->seqno);
|
||||
|
||||
v3d_sched_stats_add_job(&v3d->gpu_queue_stats[V3D_TFU], sched_job);
|
||||
@@ -635,16 +635,16 @@ v2: fix kernel panic with debug-fs interface to list registers
|
||||
|
||||
return fence;
|
||||
}
|
||||
@@ -331,7 +335,7 @@ v3d_csd_job_run(struct drm_sched_job *sc
|
||||
@@ -339,7 +343,7 @@ v3d_csd_job_run(struct drm_sched_job *sc
|
||||
struct v3d_dev *v3d = job->base.v3d;
|
||||
struct drm_device *dev = &v3d->drm;
|
||||
struct dma_fence *fence;
|
||||
- int i;
|
||||
+ int i, csd_cfg0_reg, csd_cfg_reg_count;
|
||||
|
||||
if (unlikely(job->base.base.s_fence->finished.error))
|
||||
return NULL;
|
||||
@@ -353,10 +357,12 @@ v3d_csd_job_run(struct drm_sched_job *sc
|
||||
if (unlikely(job->base.base.s_fence->finished.error)) {
|
||||
v3d->queue[V3D_CSD].active_job = NULL;
|
||||
@@ -373,10 +377,12 @@ v3d_csd_job_run(struct drm_sched_job *sc
|
||||
v3d_sched_stats_add_job(&v3d->gpu_queue_stats[V3D_CSD], sched_job);
|
||||
v3d_switch_perfmon(v3d, &job->base);
|
||||
|
||||
@@ -660,7 +660,7 @@ v2: fix kernel panic with debug-fs interface to list registers
|
||||
|
||||
return fence;
|
||||
}
|
||||
@@ -471,7 +477,8 @@ v3d_csd_job_timedout(struct drm_sched_jo
|
||||
@@ -491,7 +497,8 @@ v3d_csd_job_timedout(struct drm_sched_jo
|
||||
{
|
||||
struct v3d_csd_job *job = to_csd_job(sched_job);
|
||||
struct v3d_dev *v3d = job->base.v3d;
|
||||
|
||||
+2
-2
@@ -96,8 +96,8 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
static inline char *
|
||||
--- a/drivers/gpu/drm/v3d/v3d_irq.c
|
||||
+++ b/drivers/gpu/drm/v3d/v3d_irq.c
|
||||
@@ -70,7 +70,7 @@ v3d_overflow_mem_work(struct work_struct
|
||||
list_add_tail(&bo->unref_head, &v3d->bin_job->render->unref_list);
|
||||
@@ -74,7 +74,7 @@ v3d_overflow_mem_work(struct work_struct
|
||||
list_add_tail(&bo->unref_head, &bin_job->render->unref_list);
|
||||
spin_unlock_irqrestore(&v3d->job_lock, irqflags);
|
||||
|
||||
- V3D_CORE_WRITE(0, V3D_PTB_BPOA, bo->node.start << PAGE_SHIFT);
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ Cc: “Rafael J. Wysocki" <rafael@kernel.org>
|
||||
|
||||
--- a/arch/arm64/Kconfig
|
||||
+++ b/arch/arm64/Kconfig
|
||||
@@ -1551,6 +1551,16 @@ config NODES_SHIFT
|
||||
@@ -1552,6 +1552,16 @@ config NODES_SHIFT
|
||||
Specify the maximum number of NUMA Nodes available on the target
|
||||
system. Increases memory reserved to accommodate various tables.
|
||||
|
||||
|
||||
-84
@@ -1,84 +0,0 @@
|
||||
From 131564261399a36a5cf2ac2731ed1ceffba93d10 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Ma=C3=ADra=20Canal?= <mcanal@igalia.com>
|
||||
Date: Sat, 22 Feb 2025 14:56:46 -0300
|
||||
Subject: [PATCH] drm/v3d: Set job pointer to NULL when the job's fence has an
|
||||
error
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Similar to commit e4b5ccd392b9 ("drm/v3d: Ensure job pointer is set to
|
||||
NULL after job completion"), ensure the job pointer is set to `NULL` when
|
||||
a job's fence has an error. Failing to do so can trigger kernel warnings
|
||||
in specific scenarios, such as:
|
||||
|
||||
1. v3d_csd_job_run() assigns `v3d->csd_job = job`
|
||||
2. CSD job exceeds hang limit, causing a timeout → v3d_gpu_reset_for_timeout()
|
||||
3. GPU reset
|
||||
4. drm_sched_resubmit_jobs() sets the job's fence to `-ECANCELED`.
|
||||
5. v3d_csd_job_run() detects the fence error and returns NULL, not
|
||||
submitting the job to the GPU
|
||||
6. User-space runs `modprobe -r v3d`
|
||||
7. v3d_gem_destroy()
|
||||
|
||||
v3d_gem_destroy() triggers a warning indicating that the CSD job never
|
||||
ended, as we didn't set `v3d->csd_job` to NULL after the timeout. The same
|
||||
can also happen to BIN, RENDER, and TFU jobs.
|
||||
|
||||
Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
---
|
||||
drivers/gpu/drm/v3d/v3d_sched.c | 18 ++++++++++++++----
|
||||
1 file changed, 14 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/v3d/v3d_sched.c
|
||||
+++ b/drivers/gpu/drm/v3d/v3d_sched.c
|
||||
@@ -189,8 +189,12 @@ static struct dma_fence *v3d_bin_job_run
|
||||
struct dma_fence *fence;
|
||||
unsigned long irqflags;
|
||||
|
||||
- if (unlikely(job->base.base.s_fence->finished.error))
|
||||
+ if (unlikely(job->base.base.s_fence->finished.error)) {
|
||||
+ spin_lock_irqsave(&v3d->job_lock, irqflags);
|
||||
+ v3d->bin_job = NULL;
|
||||
+ spin_unlock_irqrestore(&v3d->job_lock, irqflags);
|
||||
return NULL;
|
||||
+ }
|
||||
|
||||
/* Lock required around bin_job update vs
|
||||
* v3d_overflow_mem_work().
|
||||
@@ -244,8 +248,10 @@ static struct dma_fence *v3d_render_job_
|
||||
struct drm_device *dev = &v3d->drm;
|
||||
struct dma_fence *fence;
|
||||
|
||||
- if (unlikely(job->base.base.s_fence->finished.error))
|
||||
+ if (unlikely(job->base.base.s_fence->finished.error)) {
|
||||
+ v3d->render_job = NULL;
|
||||
return NULL;
|
||||
+ }
|
||||
|
||||
v3d->render_job = job;
|
||||
|
||||
@@ -292,8 +298,10 @@ v3d_tfu_job_run(struct drm_sched_job *sc
|
||||
struct drm_device *dev = &v3d->drm;
|
||||
struct dma_fence *fence;
|
||||
|
||||
- if (unlikely(job->base.base.s_fence->finished.error))
|
||||
+ if (unlikely(job->base.base.s_fence->finished.error)) {
|
||||
+ v3d->tfu_job = NULL;
|
||||
return NULL;
|
||||
+ }
|
||||
|
||||
v3d->tfu_job = job;
|
||||
|
||||
@@ -337,8 +345,10 @@ v3d_csd_job_run(struct drm_sched_job *sc
|
||||
struct dma_fence *fence;
|
||||
int i, csd_cfg0_reg, csd_cfg_reg_count;
|
||||
|
||||
- if (unlikely(job->base.base.s_fence->finished.error))
|
||||
+ if (unlikely(job->base.base.s_fence->finished.error)) {
|
||||
+ v3d->csd_job = NULL;
|
||||
return NULL;
|
||||
+ }
|
||||
|
||||
v3d->csd_job = job;
|
||||
|
||||
+9
-9
@@ -275,7 +275,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
goto clk_disable;
|
||||
--- a/drivers/gpu/drm/v3d/v3d_drv.h
|
||||
+++ b/drivers/gpu/drm/v3d/v3d_drv.h
|
||||
@@ -121,13 +121,20 @@ enum v3d_irq {
|
||||
@@ -124,13 +124,20 @@ enum v3d_irq {
|
||||
V3D_MAX_IRQS,
|
||||
};
|
||||
|
||||
@@ -297,7 +297,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
bool single_irq_line;
|
||||
|
||||
int irq[V3D_MAX_IRQS];
|
||||
@@ -221,7 +228,7 @@ to_v3d_dev(struct drm_device *dev)
|
||||
@@ -219,7 +226,7 @@ to_v3d_dev(struct drm_device *dev)
|
||||
static inline bool
|
||||
v3d_has_csd(struct v3d_dev *v3d)
|
||||
{
|
||||
@@ -362,7 +362,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
V3D_CORE_WRITE(core, V3D_CTL_L2CACTL,
|
||||
--- a/drivers/gpu/drm/v3d/v3d_irq.c
|
||||
+++ b/drivers/gpu/drm/v3d/v3d_irq.c
|
||||
@@ -125,8 +125,8 @@ v3d_irq(int irq, void *arg)
|
||||
@@ -129,8 +129,8 @@ v3d_irq(int irq, void *arg)
|
||||
status = IRQ_HANDLED;
|
||||
}
|
||||
|
||||
@@ -371,9 +371,9 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
+ if ((v3d->ver < V3D_GEN_71 && (intsts & V3D_INT_CSDDONE)) ||
|
||||
+ (v3d->ver >= V3D_GEN_71 && (intsts & V3D_V7_INT_CSDDONE))) {
|
||||
struct v3d_fence *fence =
|
||||
to_v3d_fence(v3d->csd_job->base.irq_fence);
|
||||
to_v3d_fence(v3d->queue[V3D_CSD].active_job->irq_fence);
|
||||
v3d->gpu_queue_stats[V3D_CSD].last_exec_end = local_clock();
|
||||
@@ -142,7 +142,7 @@ v3d_irq(int irq, void *arg)
|
||||
@@ -146,7 +146,7 @@ v3d_irq(int irq, void *arg)
|
||||
/* We shouldn't be triggering these if we have GMP in
|
||||
* always-allowed mode.
|
||||
*/
|
||||
@@ -382,7 +382,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
dev_err(v3d->drm.dev, "GMP violation\n");
|
||||
|
||||
/* V3D 4.2 wires the hub and core IRQs together, so if we &
|
||||
@@ -200,7 +200,7 @@ v3d_hub_irq(int irq, void *arg)
|
||||
@@ -204,7 +204,7 @@ v3d_hub_irq(int irq, void *arg)
|
||||
|
||||
V3D_WRITE(V3D_MMU_CTL, V3D_READ(V3D_MMU_CTL));
|
||||
|
||||
@@ -391,7 +391,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
axi_id = axi_id >> 5;
|
||||
if (axi_id < ARRAY_SIZE(v3d41_axi_ids))
|
||||
client = v3d41_axi_ids[axi_id];
|
||||
@@ -219,7 +219,7 @@ v3d_hub_irq(int irq, void *arg)
|
||||
@@ -223,7 +223,7 @@ v3d_hub_irq(int irq, void *arg)
|
||||
status = IRQ_HANDLED;
|
||||
}
|
||||
|
||||
@@ -425,7 +425,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
V3D_WRITE(V3D_TFU_REG(COEF1), job->args.coef[1]);
|
||||
V3D_WRITE(V3D_TFU_REG(COEF2), job->args.coef[2]);
|
||||
V3D_WRITE(V3D_TFU_REG(COEF3), job->args.coef[3]);
|
||||
@@ -367,8 +367,8 @@ v3d_csd_job_run(struct drm_sched_job *sc
|
||||
@@ -377,8 +377,8 @@ v3d_csd_job_run(struct drm_sched_job *sc
|
||||
v3d_sched_stats_add_job(&v3d->gpu_queue_stats[V3D_CSD], sched_job);
|
||||
v3d_switch_perfmon(v3d, &job->base);
|
||||
|
||||
@@ -436,7 +436,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
for (i = 1; i <= csd_cfg_reg_count; i++)
|
||||
V3D_CORE_WRITE(0, csd_cfg0_reg + 4 * i, job->args.cfg[i]);
|
||||
/* CFG0 write kicks off the job. */
|
||||
@@ -487,7 +487,7 @@ v3d_csd_job_timedout(struct drm_sched_jo
|
||||
@@ -497,7 +497,7 @@ v3d_csd_job_timedout(struct drm_sched_jo
|
||||
{
|
||||
struct v3d_csd_job *job = to_csd_job(sched_job);
|
||||
struct v3d_dev *v3d = job->base.v3d;
|
||||
|
||||
+3
-3
@@ -98,7 +98,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
|
||||
--- a/drivers/gpu/drm/v3d/v3d_drv.h
|
||||
+++ b/drivers/gpu/drm/v3d/v3d_drv.h
|
||||
@@ -143,6 +143,7 @@ struct v3d_dev {
|
||||
@@ -146,6 +146,7 @@ struct v3d_dev {
|
||||
void __iomem *core_regs[3];
|
||||
void __iomem *bridge_regs;
|
||||
void __iomem *gca_regs;
|
||||
@@ -106,7 +106,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
struct clk *clk;
|
||||
struct delayed_work clk_down_work;
|
||||
unsigned long clk_up_rate, clk_down_rate;
|
||||
@@ -285,6 +286,15 @@ to_v3d_fence(struct dma_fence *fence)
|
||||
@@ -283,6 +284,15 @@ to_v3d_fence(struct dma_fence *fence)
|
||||
#define V3D_GCA_READ(offset) readl(v3d->gca_regs + offset)
|
||||
#define V3D_GCA_WRITE(offset, val) writel(val, v3d->gca_regs + offset)
|
||||
|
||||
@@ -122,7 +122,7 @@ Signed-off-by: Maíra Canal <mcanal@igalia.com>
|
||||
#define V3D_CORE_READ(core, offset) readl(v3d->core_regs[core] + offset)
|
||||
#define V3D_CORE_WRITE(core, offset, val) writel(val, v3d->core_regs[core] + offset)
|
||||
|
||||
@@ -463,6 +473,7 @@ int v3d_wait_bo_ioctl(struct drm_device
|
||||
@@ -461,6 +471,7 @@ int v3d_wait_bo_ioctl(struct drm_device
|
||||
struct drm_file *file_priv);
|
||||
void v3d_job_cleanup(struct v3d_job *job);
|
||||
void v3d_job_put(struct v3d_job *job);
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/netfilter/nf_tables_api.c
|
||||
+++ b/net/netfilter/nf_tables_api.c
|
||||
@@ -8530,7 +8530,7 @@ static int nft_register_flowtable_net_ho
|
||||
@@ -8528,7 +8528,7 @@ static int nft_register_flowtable_net_ho
|
||||
err = flowtable->data.type->setup(&flowtable->data,
|
||||
hook->ops.dev,
|
||||
FLOW_BLOCK_BIND);
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
* CONFIG_CMDLINE is meant to be a default in case nothing else
|
||||
--- a/arch/arm64/Kconfig
|
||||
+++ b/arch/arm64/Kconfig
|
||||
@@ -2360,6 +2360,14 @@ config CMDLINE_FORCE
|
||||
@@ -2361,6 +2361,14 @@ config CMDLINE_FORCE
|
||||
|
||||
endchoice
|
||||
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@ Link: https://lore.kernel.org/all/20250216221634.364158-2-dmitry.osipenko@collab
|
||||
| Fujitsu | A64FX | E#010001 | FUJITSU_ERRATUM_010001 |
|
||||
--- a/arch/arm64/Kconfig
|
||||
+++ b/arch/arm64/Kconfig
|
||||
@@ -1318,6 +1318,15 @@ config NVIDIA_CARMEL_CNP_ERRATUM
|
||||
@@ -1319,6 +1319,15 @@ config NVIDIA_CARMEL_CNP_ERRATUM
|
||||
|
||||
If unsure, say Y.
|
||||
|
||||
|
||||
+2
-2
@@ -12,7 +12,7 @@ Signed-off-by: William Qiu <william.qiu@starfivetech.com>
|
||||
|
||||
--- a/drivers/tty/serial/8250/8250_dw.c
|
||||
+++ b/drivers/tty/serial/8250/8250_dw.c
|
||||
@@ -747,6 +747,8 @@ static int dw8250_runtime_suspend(struct
|
||||
@@ -749,6 +749,8 @@ static int dw8250_runtime_suspend(struct
|
||||
{
|
||||
struct dw8250_data *data = dev_get_drvdata(dev);
|
||||
|
||||
@@ -21,7 +21,7 @@ Signed-off-by: William Qiu <william.qiu@starfivetech.com>
|
||||
clk_disable_unprepare(data->clk);
|
||||
|
||||
clk_disable_unprepare(data->pclk);
|
||||
@@ -769,6 +771,8 @@ static int dw8250_runtime_resume(struct
|
||||
@@ -771,6 +773,8 @@ static int dw8250_runtime_resume(struct
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ Signed-off-by: Emil Renner Berthing <kernel@esmil.dk>
|
||||
|
||||
--- a/drivers/tty/serial/8250/8250_dw.c
|
||||
+++ b/drivers/tty/serial/8250/8250_dw.c
|
||||
@@ -812,6 +812,7 @@ static const struct of_device_id dw8250_
|
||||
@@ -814,6 +814,7 @@ static const struct of_device_id dw8250_
|
||||
{ .compatible = "marvell,armada-38x-uart", .data = &dw8250_armada_38x_data },
|
||||
{ .compatible = "renesas,rzn1-uart", .data = &dw8250_renesas_rzn1_data },
|
||||
{ .compatible = "sophgo,sg2044-uart", .data = &dw8250_skip_set_rate_data },
|
||||
|
||||
Reference in New Issue
Block a user