-LINUX_VERSION-6.6 = .84
-LINUX_KERNEL_HASH-6.6.84 = 7fd20721551a61db347c5ac6ca05818e24058682be4e4389dc51e88d4ac17ba7
+LINUX_VERSION-6.6 = .85
+LINUX_KERNEL_HASH-6.6.85 = 5ebaccf4ca3428cd26817bae62171f4efd270eed866a3e3d0a1d9e970b7b7529
v3d_switch_perfmon(v3d, &job->base);
/* XXX: Set the QCFG */
-@@ -190,6 +301,7 @@ v3d_tfu_job_run(struct drm_sched_job *sc
+@@ -194,6 +305,7 @@ v3d_tfu_job_run(struct drm_sched_job *sc
trace_v3d_submit_tfu(dev, to_v3d_fence(fence)->seqno);
V3D_WRITE(V3D_TFU_IIA, job->args.iia);
V3D_WRITE(V3D_TFU_IIS, job->args.iis);
V3D_WRITE(V3D_TFU_ICA, job->args.ica);
-@@ -231,6 +343,7 @@ v3d_csd_job_run(struct drm_sched_job *sc
+@@ -238,6 +350,7 @@ v3d_csd_job_run(struct drm_sched_job *sc
trace_v3d_submit_csd(dev, to_v3d_fence(fence)->seqno);
v3d_switch_perfmon(v3d, &job->base);
for (i = 1; i <= 6; i++)
-@@ -247,7 +360,10 @@ v3d_cache_clean_job_run(struct drm_sched
+@@ -254,7 +367,10 @@ v3d_cache_clean_job_run(struct drm_sched
struct v3d_job *job = to_v3d_job(sched_job);
struct v3d_dev *v3d = job->v3d;
return NULL;
}
-@@ -385,8 +501,18 @@ v3d_sched_init(struct v3d_dev *v3d)
+@@ -392,8 +508,18 @@ v3d_sched_init(struct v3d_dev *v3d)
int hw_jobs_limit = 1;
int job_hang_limit = 0;
int hang_limit_ms = 500;
ret = drm_sched_init(&v3d->queue[V3D_BIN].sched,
&v3d_bin_sched_ops,
hw_jobs_limit, job_hang_limit,
-@@ -440,9 +566,20 @@ void
+@@ -447,9 +573,20 @@ void
v3d_sched_fini(struct v3d_dev *v3d)
{
enum v3d_queue q;
static struct dma_fence *
v3d_tfu_job_run(struct drm_sched_job *sched_job)
{
-@@ -302,20 +304,22 @@ v3d_tfu_job_run(struct drm_sched_job *sc
+@@ -306,20 +308,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);
return fence;
}
-@@ -327,7 +331,7 @@ v3d_csd_job_run(struct drm_sched_job *sc
+@@ -331,7 +335,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;
- v3d->csd_job = job;
-
-@@ -346,10 +350,12 @@ v3d_csd_job_run(struct drm_sched_job *sc
+ if (unlikely(job->base.base.s_fence->finished.error))
+ return NULL;
+@@ -353,10 +357,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);
return fence;
}
-@@ -452,7 +458,8 @@ v3d_csd_job_timedout(struct drm_sched_jo
+@@ -459,7 +465,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;
+++ /dev/null
-From 87fc066350358ce45f5ad52424c8a2e351b1720c Mon Sep 17 00:00:00 2001
-From: Phil Elwell <phil@raspberrypi.com>
-Date: Tue, 7 Jan 2025 12:05:41 +0000
-Subject: [PATCH] dts: bcm2711: PL011 UARTs are actually r1p5
-
-The ARM PL011 UART instances in BCM2711 are r1p5 spec, which means they
-have 32-entry FIFOs. The correct periphid value for this is 0x00341011.
-Thanks to N Buchwitz for pointing this out.
-
-Signed-off-by: Phil Elwell <phil@raspberrypi.com>
----
- arch/arm/boot/dts/broadcom/bcm2711.dtsi | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
---- a/arch/arm/boot/dts/broadcom/bcm2711.dtsi
-+++ b/arch/arm/boot/dts/broadcom/bcm2711.dtsi
-@@ -134,7 +134,7 @@
- clocks = <&clocks BCM2835_CLOCK_UART>,
- <&clocks BCM2835_CLOCK_VPU>;
- clock-names = "uartclk", "apb_pclk";
-- arm,primecell-periphid = <0x00241011>;
-+ arm,primecell-periphid = <0x00341011>;
- status = "disabled";
- };
-
-@@ -145,7 +145,7 @@
- clocks = <&clocks BCM2835_CLOCK_UART>,
- <&clocks BCM2835_CLOCK_VPU>;
- clock-names = "uartclk", "apb_pclk";
-- arm,primecell-periphid = <0x00241011>;
-+ arm,primecell-periphid = <0x00341011>;
- status = "disabled";
- };
-
-@@ -156,7 +156,7 @@
- clocks = <&clocks BCM2835_CLOCK_UART>,
- <&clocks BCM2835_CLOCK_VPU>;
- clock-names = "uartclk", "apb_pclk";
-- arm,primecell-periphid = <0x00241011>;
-+ arm,primecell-periphid = <0x00341011>;
- status = "disabled";
- };
-
-@@ -167,7 +167,7 @@
- clocks = <&clocks BCM2835_CLOCK_UART>,
- <&clocks BCM2835_CLOCK_VPU>;
- clock-names = "uartclk", "apb_pclk";
-- arm,primecell-periphid = <0x00241011>;
-+ arm,primecell-periphid = <0x00341011>;
- status = "disabled";
- };
-
-@@ -1155,6 +1155,7 @@
- };
-
- &uart0 {
-+ arm,primecell-periphid = <0x00341011>;
- interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
- };
-
arch/arm64/boot/dts/broadcom/bcm2712.dtsi | 2 --
2 files changed, 4 deletions(-)
---- a/arch/arm/boot/dts/broadcom/bcm2711.dtsi
-+++ b/arch/arm/boot/dts/broadcom/bcm2711.dtsi
-@@ -451,8 +451,6 @@
- IRQ_TYPE_LEVEL_LOW)>,
- <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) |
- IRQ_TYPE_LEVEL_LOW)>;
-- /* This only applies to the ARMv7 stub */
-- arm,cpu-registers-not-fw-configured;
- };
-
- cpus: cpus {
--- a/arch/arm64/boot/dts/broadcom/bcm2712.dtsi
+++ b/arch/arm64/boot/dts/broadcom/bcm2712.dtsi
@@ -741,8 +741,6 @@
+++ /dev/null
-From 5258ca4ad089548a72657522443b9c3e46fd125b Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Ma=C3=ADra=20Canal?= <mcanal@igalia.com>
-Date: Sat, 22 Feb 2025 14:40:21 -0300
-Subject: [PATCH] drm/v3d: Don't run jobs that have errors flagged in its fence
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The V3D driver still relies on `drm_sched_increase_karma()` and
-`drm_sched_resubmit_jobs()` for resubmissions when a timeout occurs.
-The function `drm_sched_increase_karma()` marks the job as guilty, while
-`drm_sched_resubmit_jobs()` sets an error (-ECANCELED) in the DMA fence of
-that guilty job.
-
-Because of this, we must check whether the job’s DMA fence has been
-flagged with an error before executing the job. Otherwise, the same guilty
-job may be resubmitted indefinitely, causing repeated GPU resets.
-
-This patch adds a check for an error on the job's fence to prevent running
-a guilty job that was previously flagged when the GPU timed out.
-
-Note that the CPU and CACHE_CLEAN queues do not require this check, as
-their jobs are executed synchronously once the DRM scheduler starts them.
-
-Cc: stable@vger.kernel.org
-Fixes: d223f98f0209 ("drm/v3d: Add support for compute shader dispatch.")
-Fixes: 1584f16ca96e ("drm/v3d: Add support for submitting jobs to the TFU.")
-Signed-off-by: Maíra Canal <mcanal@igalia.com>
----
- drivers/gpu/drm/v3d/v3d_sched.c | 9 ++++++++-
- 1 file changed, 8 insertions(+), 1 deletion(-)
-
---- a/drivers/gpu/drm/v3d/v3d_sched.c
-+++ b/drivers/gpu/drm/v3d/v3d_sched.c
-@@ -292,11 +292,15 @@ 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))
-+ return NULL;
-+
-+ v3d->tfu_job = job;
-+
- fence = v3d_fence_create(v3d, V3D_TFU);
- if (IS_ERR(fence))
- return NULL;
-
-- v3d->tfu_job = job;
- if (job->base.irq_fence)
- dma_fence_put(job->base.irq_fence);
- job->base.irq_fence = dma_fence_get(fence);
-@@ -333,6 +337,9 @@ 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))
-+ return NULL;
-+
- v3d->csd_job = job;
-
- v3d_invalidate_caches(v3d);
case RTN_THROW:
case RTN_UNREACHABLE:
default:
-@@ -4551,6 +4570,17 @@ static int ip6_pkt_prohibit_out(struct n
+@@ -4554,6 +4573,17 @@ static int ip6_pkt_prohibit_out(struct n
return ip6_pkt_drop(skb, ICMPV6_ADM_PROHIBITED, IPSTATS_MIB_OUTNOROUTES);
}
/*
* Allocate a dst for local (unicast / anycast) address.
*/
-@@ -5042,7 +5072,8 @@ static int rtm_to_fib6_config(struct sk_
+@@ -5045,7 +5075,8 @@ static int rtm_to_fib6_config(struct sk_
if (rtm->rtm_type == RTN_UNREACHABLE ||
rtm->rtm_type == RTN_BLACKHOLE ||
rtm->rtm_type == RTN_PROHIBIT ||
cfg->fc_flags |= RTF_REJECT;
if (rtm->rtm_type == RTN_LOCAL)
-@@ -6304,6 +6335,8 @@ static int ip6_route_dev_notify(struct n
+@@ -6307,6 +6338,8 @@ static int ip6_route_dev_notify(struct n
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
net->ipv6.ip6_prohibit_entry->dst.dev = dev;
net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
#endif
-@@ -6315,6 +6348,7 @@ static int ip6_route_dev_notify(struct n
+@@ -6318,6 +6351,7 @@ static int ip6_route_dev_notify(struct n
in6_dev_put_clear(&net->ipv6.ip6_null_entry->rt6i_idev);
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
in6_dev_put_clear(&net->ipv6.ip6_prohibit_entry->rt6i_idev);
in6_dev_put_clear(&net->ipv6.ip6_blk_hole_entry->rt6i_idev);
#endif
}
-@@ -6515,6 +6549,8 @@ static int __net_init ip6_route_net_init
+@@ -6518,6 +6552,8 @@ static int __net_init ip6_route_net_init
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
net->ipv6.fib6_has_custom_rules = false;
net->ipv6.ip6_prohibit_entry = kmemdup(&ip6_prohibit_entry_template,
sizeof(*net->ipv6.ip6_prohibit_entry),
GFP_KERNEL);
-@@ -6525,11 +6561,21 @@ static int __net_init ip6_route_net_init
+@@ -6528,11 +6564,21 @@ static int __net_init ip6_route_net_init
ip6_template_metrics, true);
INIT_LIST_HEAD(&net->ipv6.ip6_prohibit_entry->dst.rt_uncached);
net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
ip6_template_metrics, true);
-@@ -6556,6 +6602,8 @@ out:
+@@ -6559,6 +6605,8 @@ out:
return ret;
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
out_ip6_prohibit_entry:
kfree(net->ipv6.ip6_prohibit_entry);
out_ip6_null_entry:
-@@ -6575,6 +6623,7 @@ static void __net_exit ip6_route_net_exi
+@@ -6578,6 +6626,7 @@ static void __net_exit ip6_route_net_exi
kfree(net->ipv6.ip6_null_entry);
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
kfree(net->ipv6.ip6_prohibit_entry);
kfree(net->ipv6.ip6_blk_hole_entry);
#endif
dst_entries_destroy(&net->ipv6.ip6_dst_ops);
-@@ -6658,6 +6707,9 @@ void __init ip6_route_init_special_entri
+@@ -6661,6 +6710,9 @@ void __init ip6_route_init_special_entri
init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev;
init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);