From nobody Mon Oct 6 15:13:23 2025 Received: from mail-pf1-f182.google.com (mail-pf1-f182.google.com [209.85.210.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DC2394A0C for ; Sun, 20 Jul 2025 00:02:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752969726; cv=none; b=AyVhe5kfFjW4OFoSh4S0nhCdZ6B/0v2GRRHkrapjbbnSrkNurisUdO1ClpmBvMWfAZznXorlxEerUEoVl2g5ux6Dr2CjEWfhd/R/bKrEAxMesjHzowxcRKK96jywwPgoao68vg6o9udMUOHPx67II6R+C0bRfjjzn+Htc70rmJI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752969726; c=relaxed/simple; bh=f3sPNOmbz1cAUjjRTAPczKdJrJRbDvuZnqA6J4bL/HY=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=R9JNxnsaTqTPZbUf7PoXuEU+9ZcZB2AtRsAmf8U6CRWRI8Qe5vaKTHAPdj41JFU0wdRVeZHe5Y7wHKdHYXYqH+HcQe8svNk5oS91JuPVA1IWgbhApOtYpceKUjRGXl2CIZyOVqKg1IhLbm8ORFyAv/gOkY94lZEGfr4zN9vgsIk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=jGnv63t8; arc=none smtp.client-ip=209.85.210.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="jGnv63t8" Received: by mail-pf1-f182.google.com with SMTP id d2e1a72fcca58-7494999de5cso2217119b3a.3 for ; Sat, 19 Jul 2025 17:02:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752969724; x=1753574524; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Qbck2cXbd/qwtXMK5uvo6QmQLG1NWHGRr9q0m8lydtU=; b=jGnv63t8lF68FpZ1WQaPJrk0p5/7eSdsuLU5AElWSPr/OjJMq0R6NbBVDHhntxLvSD a8HuSqlDfPlfEcT/HtFcGp1WUTNhS7gwaFjt9ft8CZ2V4MHJ13EbReVacuVIhcTTgxh+ OTShJcvEWw9sNKH/fgkgt4EXJ+LMqwq05HCXq+LtOy2RXcvMew36Oo/xQ66HrJZO/TmH mFJraopyi2tBQb6QJ7DsWTDAwLFLf03MellrYjjmsTkURb4e+tAqPdLKDWJ2aKZT5xFG guB3NA+n3jl1Z9s5HwSDwHcEPZQCqRXKFks3FZv5EVEVS2B5AZEO9bHDUFY5S/6EehMR g7qQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752969724; x=1753574524; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Qbck2cXbd/qwtXMK5uvo6QmQLG1NWHGRr9q0m8lydtU=; b=rpF1BFYtIgAXDbG59pdzNJSg8quxE6eHiwJp18hErQrUr4NsWxX0j94THEqfzVrcMP vVJtQU6q93CV6WGzItMbWcS48oxr/jLpYxAwJLxl1z4J7lojNZtZdwyu53flvsUpddDU fwgT5e++HJlUbcr8cJSTjf7gmA2H+FriXMlYzL+xVV2l0IGh2h0Jy2XPwTOZxRMgnq9Y EGQeSgAA4G7QdpR7nrMDqhYGIzVfK+milIG6YJ8Y/Cbv7nEL+xci0W39g8AmvC6YYU4Y Sg7OO76EZouHGGZvjhskuwZ+CqJh6bmBYNbg/vTPW40cqM06DzCRq80GVvxuaXQFmMzc NaHg== X-Forwarded-Encrypted: i=1; AJvYcCU26t5r307oi9HNqzIY8KIjN8QJXhtmy5mYhPZqybL/Bb0ZI+C03WdDQQQK0a1rjx8cDXrFW+lkwcgYtTI=@vger.kernel.org X-Gm-Message-State: AOJu0YywDjVEfNYu+ry8YWxMwcD1dNUW1skM57Z7gPX5TSNrfuofvwx5 Bq5zT3mqhZCSfFtNsx43rkBOlxWyuraSLxPAwRjdSxzXpRGZc4hnxmUz X-Gm-Gg: ASbGncuj7HfIEgme872W6x8OoMrN+VjGEWDDNhh0tsor9l6sP0xQJdQwSrxxQ7LcCXo 2SmFUdIQQKqo6afHoyNr31vjEPN+h56HGXjRocWEYUlbuKsqsOEALT7mm1vfcB9DBu2QMRe8Bob SIkuiItk4bm9/ohv3xOzME2iN77J98ZNr0eon6fJCv5W6j5uUqbyGjWaTRZ0cQV4d9aJ7tQBQ6a ERDbhPSXoHyIbRZunfK7dQa8gAHRP3u7gA0CFGimB3kej7LY9s5p4FwSoVoI+BMUQfuUB3rlAY4 G2uF4TI0zDw92KEttEuVabxazppBr0cDWx3INeeXqFJDeryLblOzrc1HdkdwbbmmgLVC8P3fDGx 0+J/2gzzytdlWiuscs9uvrVsCBPEUZ9I8jFyptVNAC/y0A4j6or2S X-Google-Smtp-Source: AGHT+IGTyHeal7qpSuk24k+kmdTSfU/jDB9NEhtXDS5aRUxd2kJfVqKFdl+w9iLB63bRKZ/TZkcysA== X-Received: by 2002:a05:6a00:189b:b0:736:4e67:d631 with SMTP id d2e1a72fcca58-756eacb7658mr24256274b3a.23.1752969723929; Sat, 19 Jul 2025 17:02:03 -0700 (PDT) Received: from localhost (111-252-5-201.dynamic-ip.hinet.net. [111.252.5.201]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-759cb76de4fsm3300978b3a.114.2025.07.19.17.02.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Jul 2025 17:02:03 -0700 (PDT) From: Chia-I Wu To: Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH 1/9] drm/panthor: add devcoredump support Date: Sat, 19 Jul 2025 17:01:38 -0700 Message-ID: <20250720000146.1405060-2-olvaffe@gmail.com> X-Mailer: git-send-email 2.50.0.727.gbf7dc18ff4-goog In-Reply-To: <20250720000146.1405060-1-olvaffe@gmail.com> References: <20250720000146.1405060-1-olvaffe@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Create a devcoredump on any faulty or fatal event. The coredump data is in YAML format for readability and flexibility. Only panthor_group state is captured for now. Signed-off-by: Chia-I Wu --- drivers/gpu/drm/panthor/Makefile | 2 + drivers/gpu/drm/panthor/panthor_coredump.c | 225 +++++++++++++++++++++ drivers/gpu/drm/panthor/panthor_coredump.h | 68 +++++++ drivers/gpu/drm/panthor/panthor_device.h | 6 + drivers/gpu/drm/panthor/panthor_sched.c | 69 +++++++ drivers/gpu/drm/panthor/panthor_sched.h | 5 + 6 files changed, 375 insertions(+) create mode 100644 drivers/gpu/drm/panthor/panthor_coredump.c create mode 100644 drivers/gpu/drm/panthor/panthor_coredump.h diff --git a/drivers/gpu/drm/panthor/Makefile b/drivers/gpu/drm/panthor/Mak= efile index 15294719b09c..9fd1e74af1df 100644 --- a/drivers/gpu/drm/panthor/Makefile +++ b/drivers/gpu/drm/panthor/Makefile @@ -11,4 +11,6 @@ panthor-y :=3D \ panthor_mmu.o \ panthor_sched.o =20 +panthor-$(CONFIG_DEV_COREDUMP) +=3D panthor_coredump.o + obj-$(CONFIG_DRM_PANTHOR) +=3D panthor.o diff --git a/drivers/gpu/drm/panthor/panthor_coredump.c b/drivers/gpu/drm/p= anthor/panthor_coredump.c new file mode 100644 index 000000000000..767f3327e3e8 --- /dev/null +++ b/drivers/gpu/drm/panthor/panthor_coredump.c @@ -0,0 +1,225 @@ +// SPDX-License-Identifier: GPL-2.0 or MIT +/* Copyright 2025 Google LLC */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "panthor_coredump.h" +#include "panthor_device.h" +#include "panthor_sched.h" + +/** + * enum panthor_coredump_mask - Coredump state + */ +enum panthor_coredump_mask { + PANTHOR_COREDUMP_GROUP =3D BIT(0), +}; + +/** + * struct panthor_coredump_header - Coredump header + */ +struct panthor_coredump_header { + enum panthor_coredump_reason reason; + ktime_t timestamp; +}; + +/** + * struct panthor_coredump - Coredump + */ +struct panthor_coredump { + /** @ptdev: Device. */ + struct panthor_device *ptdev; + + /** @work: Bottom half of panthor_coredump_capture. */ + struct work_struct work; + + /** @header: Header. */ + struct panthor_coredump_header header; + + /** @mask: Bitmask of captured states. */ + u32 mask; + + struct panthor_coredump_group_state group; + + /* @data: Serialized coredump data. */ + void *data; + + /* @size: Serialized coredump size. */ + size_t size; +}; + +static const char *reason_str(enum panthor_coredump_reason reason) +{ + switch (reason) { + case PANTHOR_COREDUMP_REASON_MMU_FAULT: + return "MMU_FAULT"; + case PANTHOR_COREDUMP_REASON_CSG_REQ_TIMEOUT: + return "CSG_REQ_TIMEOUT"; + case PANTHOR_COREDUMP_REASON_CSG_UNKNOWN_STATE: + return "CSG_UNKNOWN_STATE"; + case PANTHOR_COREDUMP_REASON_CSG_PROGRESS_TIMEOUT: + return "CSG_PROGRESS_TIMEOUT"; + case PANTHOR_COREDUMP_REASON_CS_FATAL: + return "CS_FATAL"; + case PANTHOR_COREDUMP_REASON_CS_FAULT: + return "CS_FAULT"; + case PANTHOR_COREDUMP_REASON_CS_TILER_OOM: + return "CS_TILER_OOM"; + case PANTHOR_COREDUMP_REASON_JOB_TIMEOUT: + return "JOB_TIMEOUT"; + default: + return "UNKNOWN"; + } +} + +static void print_group(struct drm_printer *p, + const struct panthor_coredump_group_state *group) +{ + drm_puts(p, "group:\n"); + drm_printf(p, " priority: %d\n", group->priority); + drm_printf(p, " queue_count: %u\n", group->queue_count); + drm_printf(p, " pid: %d\n", group->pid); + drm_printf(p, " comm: %s\n", group->comm); + drm_printf(p, " destroyed: %d\n", group->destroyed); + drm_printf(p, " csg_id: %d\n", group->csg_id); +} + +static void print_header(struct drm_printer *p, + const struct panthor_coredump_header *header, + const struct drm_driver *drv) +{ + drm_puts(p, "header:\n"); + drm_puts(p, " kernel: " UTS_RELEASE "\n"); + drm_puts(p, " module: " KBUILD_MODNAME "\n"); + drm_printf(p, " driver_version: %d.%d\n", drv->major, drv->minor); + + drm_printf(p, " reason: %s\n", reason_str(header->reason)); + drm_printf(p, " timestamp: %lld\n", ktime_to_ns(header->timestamp)); +} + +static void print_cd(struct drm_printer *p, const struct panthor_coredump = *cd) +{ + /* in YAML format */ + drm_puts(p, "---\n"); + print_header(p, &cd->header, cd->ptdev->base.driver); + + if (cd->mask & PANTHOR_COREDUMP_GROUP) + print_group(p, &cd->group); +} + +static void process_cd(struct panthor_device *ptdev, + struct panthor_coredump *cd) +{ + struct drm_print_iterator iter =3D { + .remain =3D SSIZE_MAX, + }; + struct drm_printer p =3D drm_coredump_printer(&iter); + + print_cd(&p, cd); + + iter.remain =3D SSIZE_MAX - iter.remain; + iter.data =3D kvmalloc(iter.remain, GFP_USER); + if (!iter.data) + return; + + cd->data =3D iter.data; + cd->size =3D iter.remain; + + drm_info(&ptdev->base, "generating coredump of size %zu\n", cd->size); + + p =3D drm_coredump_printer(&iter); + print_cd(&p, cd); +} + +static void capture_cd(struct panthor_device *ptdev, + struct panthor_coredump *cd, struct panthor_group *group) +{ + drm_info(&ptdev->base, "capturing coredump states\n"); + + if (group) { + panthor_group_capture_coredump(group, &cd->group); + cd->mask |=3D PANTHOR_COREDUMP_GROUP; + } +} + +static void panthor_coredump_free(void *data) +{ + struct panthor_coredump *cd =3D data; + struct panthor_device *ptdev =3D cd->ptdev; + + kvfree(cd->data); + kfree(cd); + + atomic_set(&ptdev->coredump.pending, 0); +} + +static ssize_t panthor_coredump_read(char *buffer, loff_t offset, size_t c= ount, + void *data, size_t datalen) +{ + const struct panthor_coredump *cd =3D data; + + if (offset >=3D cd->size) + return 0; + + if (count > cd->size - offset) + count =3D cd->size - offset; + + memcpy(buffer, cd->data + offset, count); + + return count; +} + +static void panthor_coredump_process_work(struct work_struct *work) +{ + struct panthor_coredump *cd =3D + container_of(work, struct panthor_coredump, work); + struct panthor_device *ptdev =3D cd->ptdev; + + process_cd(ptdev, cd); + + dev_coredumpm(ptdev->base.dev, THIS_MODULE, cd, 0, GFP_KERNEL, + panthor_coredump_read, panthor_coredump_free); +} + +void panthor_coredump_capture(struct panthor_coredump *cd, + struct panthor_group *group) +{ + struct panthor_device *ptdev =3D cd->ptdev; + + capture_cd(ptdev, cd, group); + + queue_work(system_unbound_wq, &cd->work); +} + +struct panthor_coredump * +panthor_coredump_alloc(struct panthor_device *ptdev, + enum panthor_coredump_reason reason, gfp_t gfp) +{ + struct panthor_coredump *cd; + + /* reject all but the first coredump until it is handled */ + if (atomic_cmpxchg(&ptdev->coredump.pending, 0, 1)) { + drm_dbg(&ptdev->base, "skip subsequent coredump\n"); + return NULL; + } + + cd =3D kzalloc(sizeof(*cd), gfp); + if (!cd) { + atomic_set(&ptdev->coredump.pending, 0); + return NULL; + } + + cd->ptdev =3D ptdev; + INIT_WORK(&cd->work, panthor_coredump_process_work); + + cd->header.reason =3D reason; + cd->header.timestamp =3D ktime_get_real(); + + return cd; +} diff --git a/drivers/gpu/drm/panthor/panthor_coredump.h b/drivers/gpu/drm/p= anthor/panthor_coredump.h new file mode 100644 index 000000000000..dd1fe1c2e175 --- /dev/null +++ b/drivers/gpu/drm/panthor/panthor_coredump.h @@ -0,0 +1,68 @@ +/* SPDX-License-Identifier: GPL-2.0 or MIT */ +/* Copyright 2019 Collabora ltd. */ + +#ifndef __PANTHOR_COREDUMP_H__ +#define __PANTHOR_COREDUMP_H__ + +#include +#include +#include + +struct panthor_coredump; +struct panthor_device; +struct panthor_group; + +/** + * enum panthor_coredump_reason - Coredump reason + */ +enum panthor_coredump_reason { + PANTHOR_COREDUMP_REASON_MMU_FAULT, + PANTHOR_COREDUMP_REASON_CSG_REQ_TIMEOUT, + PANTHOR_COREDUMP_REASON_CSG_UNKNOWN_STATE, + PANTHOR_COREDUMP_REASON_CSG_PROGRESS_TIMEOUT, + PANTHOR_COREDUMP_REASON_CS_FATAL, + PANTHOR_COREDUMP_REASON_CS_FAULT, + PANTHOR_COREDUMP_REASON_CS_TILER_OOM, + PANTHOR_COREDUMP_REASON_JOB_TIMEOUT, +}; + +/** + * struct panthor_coredump_group_state - Coredump group state + * + * Interesting panthor_group fields. + */ +struct panthor_coredump_group_state { + enum drm_panthor_group_priority priority; + u32 queue_count; + pid_t pid; + char comm[TASK_COMM_LEN]; + bool destroyed; + int csg_id; +}; + +#ifdef CONFIG_DEV_COREDUMP + +struct panthor_coredump * +panthor_coredump_alloc(struct panthor_device *ptdev, + enum panthor_coredump_reason reason, gfp_t gfp); + +void panthor_coredump_capture(struct panthor_coredump *cd, + struct panthor_group *group); + +#else /* CONFIG_DEV_COREDUMP */ + +static inline struct panthor_coredump * +panthor_coredump_alloc(struct panthor_device *ptdev, + enum panthor_coredump_reason reason, gfp_t gfp) +{ + return NULL; +} + +static inline void panthor_coredump_capture(struct panthor_coredump *cd, + struct panthor_group *group) +{ +} + +#endif /* CONFIG_DEV_COREDUMP */ + +#endif /* __PANTHOR_COREDUMP_H__ */ diff --git a/drivers/gpu/drm/panthor/panthor_device.h b/drivers/gpu/drm/pan= thor/panthor_device.h index 4fc7cf2aeed5..766e53c25cfa 100644 --- a/drivers/gpu/drm/panthor/panthor_device.h +++ b/drivers/gpu/drm/panthor/panthor_device.h @@ -197,6 +197,12 @@ struct panthor_device { atomic_t recovery_needed; } pm; =20 + /** @coredump: Coredump-related data. */ + struct { + /** @pending: True if there is a pending coredump. */ + atomic_t pending; + } coredump; + /** @profile_mask: User-set profiling flags for job accounting. */ u32 profile_mask; =20 diff --git a/drivers/gpu/drm/panthor/panthor_sched.c b/drivers/gpu/drm/pant= hor/panthor_sched.c index a2248f692a03..eb45b5ad9774 100644 --- a/drivers/gpu/drm/panthor/panthor_sched.c +++ b/drivers/gpu/drm/panthor/panthor_sched.c @@ -23,6 +23,7 @@ #include #include =20 +#include "panthor_coredump.h" #include "panthor_devfreq.h" #include "panthor_device.h" #include "panthor_fw.h" @@ -1031,6 +1032,10 @@ group_unbind_locked(struct panthor_group *group) return 0; } =20 +static void panthor_sched_coredump_locked(struct panthor_device *ptdev, + enum panthor_coredump_reason reason, + struct panthor_group *group); + /** * cs_slot_prog_locked() - Program a queue slot * @ptdev: Device. @@ -1249,6 +1254,10 @@ csg_slot_sync_state_locked(struct panthor_device *pt= dev, u32 csg_id) drm_err(&ptdev->base, "Invalid state on CSG %d (state=3D%d)", csg_id, csg_state); new_state =3D PANTHOR_CS_GROUP_UNKNOWN_STATE; + + panthor_sched_coredump_locked( + ptdev, PANTHOR_COREDUMP_REASON_CSG_UNKNOWN_STATE, + group); break; } =20 @@ -1378,6 +1387,9 @@ cs_slot_process_fatal_event_locked(struct panthor_dev= ice *ptdev, panthor_exception_name(ptdev, CS_EXCEPTION_TYPE(fatal)), (unsigned int)CS_EXCEPTION_DATA(fatal), info); + + panthor_sched_coredump_locked(ptdev, PANTHOR_COREDUMP_REASON_CS_FATAL, + group); } =20 static void @@ -1426,6 +1438,9 @@ cs_slot_process_fault_event_locked(struct panthor_dev= ice *ptdev, panthor_exception_name(ptdev, CS_EXCEPTION_TYPE(fault)), (unsigned int)CS_EXCEPTION_DATA(fault), info); + + panthor_sched_coredump_locked(ptdev, PANTHOR_COREDUMP_REASON_CS_FAULT, + group); } =20 static int group_process_tiler_oom(struct panthor_group *group, u32 cs_id) @@ -1480,6 +1495,10 @@ static int group_process_tiler_oom(struct panthor_gr= oup *group, u32 cs_id) drm_warn(&ptdev->base, "Failed to extend the tiler heap\n"); group->fatal_queues |=3D BIT(cs_id); sched_queue_delayed_work(sched, tick, 0); + + panthor_sched_coredump_locked( + ptdev, PANTHOR_COREDUMP_REASON_CS_TILER_OOM, group); + goto out_put_heap_pool; } =20 @@ -1639,6 +1658,9 @@ csg_slot_process_progress_timer_event_locked(struct p= anthor_device *ptdev, u32 c group->timedout =3D true; =20 sched_queue_delayed_work(sched, tick, 0); + + panthor_sched_coredump_locked( + ptdev, PANTHOR_COREDUMP_REASON_CSG_PROGRESS_TIMEOUT, group); } =20 static void sched_process_csg_irq_locked(struct panthor_device *ptdev, u32= csg_id) @@ -1858,8 +1880,16 @@ static int csgs_upd_ctx_apply_locked(struct panthor_= device *ptdev, =20 if (ret && acked !=3D req_mask && ((csg_iface->input->req ^ csg_iface->output->ack) & req_mask) !=3D 0= ) { + struct panthor_csg_slot *csg_slot =3D + &sched->csg_slots[csg_id]; + struct panthor_group *group =3D csg_slot->group; + drm_err(&ptdev->base, "CSG %d update request timedout", csg_id); ctx->timedout_mask |=3D BIT(csg_id); + + panthor_sched_coredump_locked( + ptdev, PANTHOR_COREDUMP_REASON_CSG_REQ_TIMEOUT, + group); } } =20 @@ -2027,6 +2057,10 @@ tick_ctx_init(struct panthor_scheduler *sched, * CSG IRQs, so we can flag the faulty queue. */ if (panthor_vm_has_unhandled_faults(group->vm)) { + panthor_sched_coredump_locked( + ptdev, PANTHOR_COREDUMP_REASON_MMU_FAULT, + group); + sched_process_csg_irq_locked(ptdev, i); =20 /* No fatal fault reported, flag all queues as faulty. */ @@ -3237,6 +3271,10 @@ queue_timedout_job(struct drm_sched_job *sched_job) =20 group_queue_work(group, term); } + + panthor_sched_coredump_locked( + ptdev, PANTHOR_COREDUMP_REASON_JOB_TIMEOUT, group); + mutex_unlock(&sched->lock); =20 queue_start(queue); @@ -3627,6 +3665,37 @@ int panthor_group_get_state(struct panthor_file *pfi= le, return 0; } =20 +static void panthor_sched_coredump_locked(struct panthor_device *ptdev, + enum panthor_coredump_reason reason, + struct panthor_group *group) +{ + struct panthor_coredump *cd; + + lockdep_assert_held(&ptdev->scheduler->lock); + + /* GFP_NOWAIT because this may be called from fence signaling path */ + cd =3D panthor_coredump_alloc(ptdev, reason, GFP_NOWAIT); + if (!cd) + return; + + panthor_coredump_capture(cd, group); +} + +void panthor_group_capture_coredump(const struct panthor_group *group, + struct panthor_coredump_group_state *state) +{ + const struct panthor_device *ptdev =3D group->ptdev; + + /* this is called from panthor_coredump_capture */ + lockdep_assert_held(&ptdev->scheduler->lock); + + state->priority =3D group->priority; + state->queue_count =3D group->queue_count; + /* TODO state->pid and state->comm */ + state->destroyed =3D group->destroyed; + state->csg_id =3D group->csg_id; +} + int panthor_group_pool_create(struct panthor_file *pfile) { struct panthor_group_pool *gpool; diff --git a/drivers/gpu/drm/panthor/panthor_sched.h b/drivers/gpu/drm/pant= hor/panthor_sched.h index 742b0b4ff3a3..6c564153133e 100644 --- a/drivers/gpu/drm/panthor/panthor_sched.h +++ b/drivers/gpu/drm/panthor/panthor_sched.h @@ -14,8 +14,10 @@ struct drm_panthor_group_create; struct drm_panthor_queue_create; struct drm_panthor_group_get_state; struct drm_panthor_queue_submit; +struct panthor_coredump_group_state; struct panthor_device; struct panthor_file; +struct panthor_group; struct panthor_group_pool; struct panthor_job; =20 @@ -26,6 +28,9 @@ int panthor_group_destroy(struct panthor_file *pfile, u32= group_handle); int panthor_group_get_state(struct panthor_file *pfile, struct drm_panthor_group_get_state *get_state); =20 +void panthor_group_capture_coredump(const struct panthor_group *group, + struct panthor_coredump_group_state *state); + struct drm_sched_job * panthor_job_create(struct panthor_file *pfile, u16 group_handle, --=20 2.50.0.727.gbf7dc18ff4-goog From nobody Mon Oct 6 15:13:23 2025 Received: from mail-pg1-f173.google.com (mail-pg1-f173.google.com [209.85.215.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E8BBF173 for ; Sun, 20 Jul 2025 00:02:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752969728; cv=none; b=fWdKA1dfLKhcmHzW8EVhjCsIPJG1kk0f3Ptrjv2ysEUVjN+hrHsCnX8ggsBgfP3umzSKFoWKwfVYJ11tcPVKQp6ZiJqgw52Mk5hF6OG9x//4zGvKaZgDIGrhaOySOm7s9442t+MeWqRC189nJdOsR9rnuerMlsTZZPmHJYPNtoE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752969728; c=relaxed/simple; bh=8yJUJ2DDyiQAgECxiARFB6PAas4OoaWYicZbQbx+bbU=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=COKIQ6vwKbwrkHHoh1J2nK1t0ojNEe8JOurBpS88QQiuvFZjrZstPANJu7cf24bxCk2V4Q+2OatippMOHl8dJ9vIfwqabAeoRds8/7/WAF/xtp4z0YzyjBTdZKk5m4SFPCjqIGefaOKLQ/0xCOfb2dJRBrmIhk6M6g/8HWU/ZeU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ThrpivbG; arc=none smtp.client-ip=209.85.215.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ThrpivbG" Received: by mail-pg1-f173.google.com with SMTP id 41be03b00d2f7-b3226307787so2474536a12.1 for ; Sat, 19 Jul 2025 17:02:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752969726; x=1753574526; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Kw76Jz9i353hbrop8cGWiVe9vi282Q4+/utlvXSv3b8=; b=ThrpivbGydbri7RWmkBc2nxNjlKvuvwXZgT1wB2oXbbrUFt+P/hWntmjHnz6CS8SiA HBf4EKgXSWgejhilQh8SHAte6NkfUTtEMr26ZKZx3wgBGIvJzoRXCX+vmlsuF1Ti+Xor p/P3eWdl/2cskYIe4Dbsl9H79pSOaVvK7YXyguo2Q/pdC/01WUeWaZfI6N9tsKsiyyel x1ns/friyUQbQUw9Z5bGNsPXmAUC6IcEa+3R4DPn393VSEddixGmbZiBgsL/bTnrITw2 n+jb4s243cbaEKxMG3/2GXPsY2kiMlHUVxeM5hmIiVpR2geuFIgNQxN4sIJfIypOQ5bT GDvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752969726; x=1753574526; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Kw76Jz9i353hbrop8cGWiVe9vi282Q4+/utlvXSv3b8=; b=mE+lTwQM0Q7cBhajBsg3lPPjZ/QxfLAEdYGMocBAblBNx1hT3Hv5Tx4X0wZZgQdTHl uPAJoolEk+p7zqREcRHMSHSQ+fOkGpaDUhn0vyp/Vckihvcw3P8rCas474QIxyEk/8Zx sjj2FbTqX9Nsn1Kprw+6vRlv4KW3zrfx9ZfJOpV5czBxohFgkdr/8QUxQBg85dDs1iUC I42I5PEQaG+0kt7+tMkbODhve9b/ATDYlvPKfQ29rsy+7Osn9QGLTVgduUDorN3nebv2 rS8IhQazDxDCx0J+baCZPOHpohQUyXOvhksvmIIAj127zMLga9VmChZZ12nmYGj2+yIo oqqg== X-Forwarded-Encrypted: i=1; AJvYcCXuSJCttOLiIjXqbHUe6iKczuftQwbYQXz+thltpEFitvZCH01Yf1PpHolu1LzSGNyfJt58fpt0UDMjsP8=@vger.kernel.org X-Gm-Message-State: AOJu0YySBRWzQ8URhGbhfRedidTC5CK0/apDvdn7n90IPJwBfLLxRMok 6RBneUPvz6bLsqenjP8gc6iLBWSPXTeCBft4hmFtCo2sJ9W2iK2/hbXU X-Gm-Gg: ASbGncsSpryjtNBsLRyvJ7a1uHGc05nMTkRiYb0LvW2X0LT69dw4Zab02NToTMh3lzN NmfsUhyJ/NFb/LqFhzmwHc5JNe1o+2/GPQ+dnFqEMXy29fTO9ok9GTCmK7z9z6+EofXsQv3P3Qq sZ0zF3Xjurc+CNf5IlzppwhVARPx2wMV5dA6ZdOS6YfQv0MPHVlY8bU76zkwFYJOrt+Jmzh/PWW K1TNyHxJIpCyQL5n1kO8O+Pr2PvIYkXHy1+UPmK3SySdzThGJhoHCgqPxd3mMl8JDJpczjQCxmj m2qiBc+ndn7sQRRfpIExSxMsiJNE0oHNe5yb7voq87WZ7eiEsXDzCWQ3k0kl3unfNyQ0Ln4D3TA kw4v6+D+NGR0mr2N9OQJun/Q5Nhnug8mKLUUgiEIiPefsJz2YTbWd X-Google-Smtp-Source: AGHT+IGlu7vwH4vb6IK8SrRyjdHZdH5dvylEyVKd3I8vsGLrRQ7fxBW5rkDN3rKRn6mncsVcnVib+Q== X-Received: by 2002:a17:903:166e:b0:234:c5c1:9b63 with SMTP id d9443c01a7336-23e256b73f3mr172523095ad.18.1752969725966; Sat, 19 Jul 2025 17:02:05 -0700 (PDT) Received: from localhost (111-252-5-201.dynamic-ip.hinet.net. [111.252.5.201]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-23e3b5e2e3bsm34010605ad.31.2025.07.19.17.02.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Jul 2025 17:02:05 -0700 (PDT) From: Chia-I Wu To: Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH 2/9] drm/panthor: capture GPU state for devcoredump Date: Sat, 19 Jul 2025 17:01:39 -0700 Message-ID: <20250720000146.1405060-3-olvaffe@gmail.com> X-Mailer: git-send-email 2.50.0.727.gbf7dc18ff4-goog In-Reply-To: <20250720000146.1405060-1-olvaffe@gmail.com> References: <20250720000146.1405060-1-olvaffe@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Capture interesting GPU_CONTROL regs for devcoredump. Signed-off-by: Chia-I Wu --- drivers/gpu/drm/panthor/panthor_coredump.c | 85 ++++++++++++++++++++++ drivers/gpu/drm/panthor/panthor_coredump.h | 16 ++++ drivers/gpu/drm/panthor/panthor_regs.h | 6 ++ drivers/gpu/drm/panthor/panthor_sched.c | 6 ++ 4 files changed, 113 insertions(+) diff --git a/drivers/gpu/drm/panthor/panthor_coredump.c b/drivers/gpu/drm/p= anthor/panthor_coredump.c index 767f3327e3e8..a41d0bbcb4f1 100644 --- a/drivers/gpu/drm/panthor/panthor_coredump.c +++ b/drivers/gpu/drm/panthor/panthor_coredump.c @@ -7,11 +7,13 @@ #include #include #include +#include #include #include =20 #include "panthor_coredump.h" #include "panthor_device.h" +#include "panthor_regs.h" #include "panthor_sched.h" =20 /** @@ -19,6 +21,7 @@ */ enum panthor_coredump_mask { PANTHOR_COREDUMP_GROUP =3D BIT(0), + PANTHOR_COREDUMP_GPU =3D BIT(1), }; =20 /** @@ -46,6 +49,7 @@ struct panthor_coredump { u32 mask; =20 struct panthor_coredump_group_state group; + struct panthor_coredump_gpu_state gpu; =20 /* @data: Serialized coredump data. */ void *data; @@ -78,6 +82,63 @@ static const char *reason_str(enum panthor_coredump_reas= on reason) } } =20 +static void print_gpu(struct drm_printer *p, + const struct panthor_coredump_gpu_state *gpu, + const struct drm_panthor_gpu_info *info) +{ + drm_puts(p, "gpu:\n"); + drm_printf(p, " GPU_ID: 0x%x\n", info->gpu_id); + drm_printf(p, " L2_FEATURES: 0x%x\n", info->l2_features); + drm_printf(p, " CORE_FEATURES: 0x%x\n", info->core_features); + drm_printf(p, " TILER_FEATURES: 0x%x\n", info->tiler_features); + drm_printf(p, " MEM_FEATURES: 0x%x\n", info->mem_features); + drm_printf(p, " MMU_FEATURES: 0x%x\n", info->mmu_features); + drm_printf(p, " AS_PRESENT: 0x%x\n", info->as_present); + drm_printf(p, " CSF_ID: 0x%x\n", info->csf_id); + drm_printf(p, " MMU_FEATURES: 0x%x\n", info->mmu_features); + + if (gpu) { + drm_printf(p, " GPU_STATUS: 0x%x\n", gpu->gpu_status); + drm_printf(p, " GPU_FAULTSTATUS: 0x%x\n", + gpu->gpu_faultstatus); + drm_printf(p, " GPU_FAULTADDRESS: 0x%llx\n", + gpu->gpu_faultaddress); + drm_printf(p, " L2_CONFIG: 0x%x\n", gpu->l2_config); + } + + drm_printf(p, " THREAD_MAX_THREADS: 0x%x\n", info->max_threads); + drm_printf(p, " THREAD_MAX_WORKGROUP_SIZE: 0x%x\n", + info->thread_max_workgroup_size); + drm_printf(p, " THREAD_MAX_BARRIER_SIZE: 0x%x\n", + info->thread_max_barrier_size); + drm_printf(p, " THREAD_FEATURES: 0x%x\n", info->thread_features); + drm_printf(p, " TEXTURE_FEATURES_0: 0x%x\n", + info->texture_features[0]); + drm_printf(p, " TEXTURE_FEATURES_1: 0x%x\n", + info->texture_features[1]); + drm_printf(p, " TEXTURE_FEATURES_2: 0x%x\n", + info->texture_features[2]); + drm_printf(p, " TEXTURE_FEATURES_3: 0x%x\n", + info->texture_features[3]); + + if (gpu) { + drm_printf(p, " DOORBELL_FEATURES: 0x%x\n", + gpu->doorbell_features); + } + + drm_printf(p, " SHADER_PRESENT: 0x%llx\n", info->shader_present); + drm_printf(p, " TILER_PRESENT: 0x%llx\n", info->tiler_present); + drm_printf(p, " L2_PRESENT: 0x%llx\n", info->l2_present); + drm_printf(p, " REVIDR: 0x%x\n", info->gpu_rev); + drm_printf(p, " AMBA_FEATURES: 0x%x\n", info->coherency_features); + + if (gpu) { + drm_printf(p, " AMBA_ENABLE: 0x%x\n", gpu->amba_enable); + drm_printf(p, " MCU_STATUS: 0x%x\n", gpu->mcu_status); + drm_printf(p, " MCU_FEATURES: 0x%x\n", gpu->mcu_features); + } +} + static void print_group(struct drm_printer *p, const struct panthor_coredump_group_state *group) { @@ -111,6 +172,10 @@ static void print_cd(struct drm_printer *p, const stru= ct panthor_coredump *cd) =20 if (cd->mask & PANTHOR_COREDUMP_GROUP) print_group(p, &cd->group); + + /* many gpu states are static and are captured in drm_panthor_gpu_info */ + print_gpu(p, cd->mask & PANTHOR_COREDUMP_GPU ? &cd->gpu : NULL, + &cd->ptdev->gpu_info); } =20 static void process_cd(struct panthor_device *ptdev, @@ -137,6 +202,19 @@ static void process_cd(struct panthor_device *ptdev, print_cd(&p, cd); } =20 +static void capture_gpu(struct panthor_device *ptdev, + struct panthor_coredump_gpu_state *gpu) +{ + gpu->gpu_status =3D gpu_read(ptdev, GPU_STATUS); + gpu->gpu_faultstatus =3D gpu_read(ptdev, GPU_FAULT_STATUS); + gpu->gpu_faultaddress =3D gpu_read64(ptdev, GPU_FAULT_ADDR); + gpu->l2_config =3D gpu_read(ptdev, GPU_L2_CONFIG); + gpu->doorbell_features =3D gpu_read(ptdev, GPU_DOORBELL_FEATURES); + gpu->amba_enable =3D gpu_read(ptdev, GPU_COHERENCY_PROTOCOL); + gpu->mcu_status =3D gpu_read(ptdev, MCU_STATUS); + gpu->mcu_features =3D gpu_read(ptdev, MCU_FEATURES); +} + static void capture_cd(struct panthor_device *ptdev, struct panthor_coredump *cd, struct panthor_group *group) { @@ -146,6 +224,13 @@ static void capture_cd(struct panthor_device *ptdev, panthor_group_capture_coredump(group, &cd->group); cd->mask |=3D PANTHOR_COREDUMP_GROUP; } + + /* remaining states require the device to be powered on */ + if (!pm_runtime_active(ptdev->base.dev)) + return; + + capture_gpu(ptdev, &cd->gpu); + cd->mask |=3D PANTHOR_COREDUMP_GPU; } =20 static void panthor_coredump_free(void *data) diff --git a/drivers/gpu/drm/panthor/panthor_coredump.h b/drivers/gpu/drm/p= anthor/panthor_coredump.h index dd1fe1c2e175..9e30c02ab962 100644 --- a/drivers/gpu/drm/panthor/panthor_coredump.h +++ b/drivers/gpu/drm/panthor/panthor_coredump.h @@ -40,6 +40,22 @@ struct panthor_coredump_group_state { int csg_id; }; =20 +/** + * struct panthor_coredump_gpu_state - Coredump GPU state + * + * Interesting GPU_CONTROL regs. + */ +struct panthor_coredump_gpu_state { + u32 gpu_status; + u32 gpu_faultstatus; + u64 gpu_faultaddress; + u32 l2_config; + u32 doorbell_features; + u32 amba_enable; + u32 mcu_status; + u32 mcu_features; +}; + #ifdef CONFIG_DEV_COREDUMP =20 struct panthor_coredump * diff --git a/drivers/gpu/drm/panthor/panthor_regs.h b/drivers/gpu/drm/panth= or/panthor_regs.h index 48bbfd40138c..062f939e075c 100644 --- a/drivers/gpu/drm/panthor/panthor_regs.h +++ b/drivers/gpu/drm/panthor/panthor_regs.h @@ -65,6 +65,8 @@ #define GPU_FAULT_STATUS 0x3C #define GPU_FAULT_ADDR 0x40 =20 +#define GPU_L2_CONFIG 0x48 + #define GPU_PWR_KEY 0x50 #define GPU_PWR_KEY_UNLOCK 0x2968A819 #define GPU_PWR_OVERRIDE0 0x54 @@ -81,6 +83,8 @@ =20 #define GPU_TEXTURE_FEATURES(n) (0xB0 + ((n) * 4)) =20 +#define GPU_DOORBELL_FEATURES 0xC0 + #define GPU_SHADER_PRESENT 0x100 #define GPU_TILER_PRESENT 0x110 #define GPU_L2_PRESENT 0x120 @@ -126,6 +130,8 @@ #define MCU_STATUS_HALT 2 #define MCU_STATUS_FATAL 3 =20 +#define MCU_FEATURES 0x708 + /* Job Control regs */ #define JOB_INT_RAWSTAT 0x1000 #define JOB_INT_CLEAR 0x1004 diff --git a/drivers/gpu/drm/panthor/panthor_sched.c b/drivers/gpu/drm/pant= hor/panthor_sched.c index eb45b5ad9774..a9fd71fa984b 100644 --- a/drivers/gpu/drm/panthor/panthor_sched.c +++ b/drivers/gpu/drm/panthor/panthor_sched.c @@ -3670,6 +3670,7 @@ static void panthor_sched_coredump_locked(struct pant= hor_device *ptdev, struct panthor_group *group) { struct panthor_coredump *cd; + int pm_active; =20 lockdep_assert_held(&ptdev->scheduler->lock); =20 @@ -3678,7 +3679,12 @@ static void panthor_sched_coredump_locked(struct pan= thor_device *ptdev, if (!cd) return; =20 + pm_active =3D pm_runtime_get_if_active(ptdev->base.dev); + panthor_coredump_capture(cd, group); + + if (pm_active =3D=3D 1) + pm_runtime_put(ptdev->base.dev); } =20 void panthor_group_capture_coredump(const struct panthor_group *group, --=20 2.50.0.727.gbf7dc18ff4-goog From nobody Mon Oct 6 15:13:23 2025 Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com [209.85.210.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D043112B73 for ; Sun, 20 Jul 2025 00:02:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752969730; cv=none; b=gzrxQs+DPWOfRUj1jvn22wU4UVSFC1T0aNdIbKPcqY5d93V7hn4ZpXoYYzKfLrRO93hbb0P0isOPKKxZTBo6vD+HhJq48fgrFrNdeH7G14q5eqnd/uQeB/4bjzvE4+OpCXDso4A2qR1KcefbIa0XeVAV+dpLbui0gnkQ7hMIGdI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752969730; c=relaxed/simple; bh=2/UP4Rkp4EWjlgeu7OzH5YrA8dxVfBIEjU7ZCeuNtZM=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tPk6+JLABS5jlE/R1b4uoXl9DXBKIkvPgKKy8oV6c+xQA4LPsQTF/Xv04hPn1BeRSdeeFqotR6vK+NGSxTNdYsvBhmQcLHt/vQ+4Eq8NF9Mw2k+k1B950BmoULfZGiiUGMLHfA1EUeZLHjLZWzYCygMDSKp4Tzjw6ztysptjQT4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=e9V2oK1E; arc=none smtp.client-ip=209.85.210.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="e9V2oK1E" Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-749068b9b63so2210545b3a.0 for ; Sat, 19 Jul 2025 17:02:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752969728; x=1753574528; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=PZeYcpA6IdS13N6yNi+0iixf2PMyZBsbsEjnpcTFZhg=; b=e9V2oK1ERQ7U5AU0Eo9KKUUv6oNPlhpMka7wKihejlH8NIFSISm+FZqTzQqMhPVaU/ X1JgNg1D3XnMTc6k9qfj/EDuGZkXn6w5tWzmZ51m8Proo9O5CaOaDj256IWBx2VJmlQV WMXciZ88VBoeKDjliSUCFHY8MQwb+rFUDOpYOAAnvW0jhzWJTQslZmmFqrzYtAmh76fn uyw/oGGRDO+6Ygs6AADrcTlAmom/Ze/RKRDFZRpdJoI/ozjG4Jq7fP1nzKXvV3PRuiJO EQAm14wU9PkL7734k83VPr9V/qduqwcar8fJ3y0Y+1cwn3sy0AufSDv3uVoZf8UM1GA4 7Abw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752969728; x=1753574528; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=PZeYcpA6IdS13N6yNi+0iixf2PMyZBsbsEjnpcTFZhg=; b=oATt5/bzEpqED8HuFd4b2IOIuRMlh91kFPa/+13waz03U5R1asq1RZc6l1iQuskkBM ntXlERowxQCj+3HVGlOAAf13k7W5V3nDGY2sPGbO2P8gZegJZYvtdl9D+0TOZ1IKQ12M aq2j/2uibnGzbNdR1QeaCAKHuHXv+DCVH/ja4lizOYkHXPD9d2IyS8of4vffc0D4Y011 +d8lq3w4zhinDUerluwlwlInAZFnnTPAkPdPn6CgLJWdXmKnXqQFlTKoC5wCdiTqg04s gzZKBsqUJ0x6MR13RtfOB0yco/Pnpr7MNzAI+MYrdG4HwgmGr873oPdnsXE/GjlFBKst 7DOw== X-Forwarded-Encrypted: i=1; AJvYcCWnIxnwTQHBza0ALK2XAwXSujngEVwldIPDA15kfrO+Qzt+7RUGnTm28QllGyhaWFsD1do1LZFECbpZfv8=@vger.kernel.org X-Gm-Message-State: AOJu0YwTe0EoP7t3I347b9rlg3X72WaqUbXvC3FbRYFdTYX1fBLYDX+T rrri1m9U4kwaqFv1WWDFIdky8ZYrKx/gQkTFj34AYJjd+N44CcjdLmp9 X-Gm-Gg: ASbGnct3bHNu3GfsqqKjZxhOmXrfKskCbBZf3oY/4M+xgHHhAsa96lOaQuVdspvjWrg yMQdsUlUl8RPc6gLtz2MufgF/pvFAe/QOI+Vu881Y9z/ESZQLBIhSlO1rlyBIjnMgA25vE9FQkX PlPNXYkRoFu/ilClkZu6WWk4qpLYE+ArCUn+7b24SIrNsDvT86mmsQopgKLIi8IUCu48LLXvChB rJ9pj3bZ4eYqE2xFZ+o1g46yDGVVEYaa3g9ii0VgPCzSLxabRl+rT2osRsUMgf6LvnjSH3qFvJ4 bBInHRrupJxw9Xx0NGw67pOJPgG58VD0CRexAQFYi323qLOR7Jp5YY3xulbrerKBjaGwMlQoUqa CjXiw0AvbbPnxX8b6Y7bB2mdA72zA3avLWAOcIHOMIQZyKNc/vsT3 X-Google-Smtp-Source: AGHT+IE0yL2u0gWC2G8gFvnVzCy8pgRZN9a5E7q265PK7M+9WprYx0FEIcD+l9N/ZjvdqeMkM4NFCQ== X-Received: by 2002:a05:6a00:1248:b0:748:f6a0:7731 with SMTP id d2e1a72fcca58-756ea6c7d8amr23238232b3a.23.1752969728038; Sat, 19 Jul 2025 17:02:08 -0700 (PDT) Received: from localhost (111-252-5-201.dynamic-ip.hinet.net. [111.252.5.201]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-759c89d31c1sm3386221b3a.48.2025.07.19.17.02.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Jul 2025 17:02:07 -0700 (PDT) From: Chia-I Wu To: Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH 3/9] drm/panthor: capture GLB state for devcoredump Date: Sat, 19 Jul 2025 17:01:40 -0700 Message-ID: <20250720000146.1405060-4-olvaffe@gmail.com> X-Mailer: git-send-email 2.50.0.727.gbf7dc18ff4-goog In-Reply-To: <20250720000146.1405060-1-olvaffe@gmail.com> References: <20250720000146.1405060-1-olvaffe@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Capture interesting panthor_fw_global_iface fields for devcoredump. Signed-off-by: Chia-I Wu --- drivers/gpu/drm/panthor/panthor_coredump.c | 33 ++++++++++++++++++++++ drivers/gpu/drm/panthor/panthor_coredump.h | 13 +++++++++ 2 files changed, 46 insertions(+) diff --git a/drivers/gpu/drm/panthor/panthor_coredump.c b/drivers/gpu/drm/p= anthor/panthor_coredump.c index a41d0bbcb4f1..44d711e2f310 100644 --- a/drivers/gpu/drm/panthor/panthor_coredump.c +++ b/drivers/gpu/drm/panthor/panthor_coredump.c @@ -13,6 +13,7 @@ =20 #include "panthor_coredump.h" #include "panthor_device.h" +#include "panthor_fw.h" #include "panthor_regs.h" #include "panthor_sched.h" =20 @@ -22,6 +23,7 @@ enum panthor_coredump_mask { PANTHOR_COREDUMP_GROUP =3D BIT(0), PANTHOR_COREDUMP_GPU =3D BIT(1), + PANTHOR_COREDUMP_GLB =3D BIT(2), }; =20 /** @@ -50,6 +52,7 @@ struct panthor_coredump { =20 struct panthor_coredump_group_state group; struct panthor_coredump_gpu_state gpu; + struct panthor_coredump_glb_state glb; =20 /* @data: Serialized coredump data. */ void *data; @@ -82,6 +85,17 @@ static const char *reason_str(enum panthor_coredump_reas= on reason) } } =20 +static void print_glb(struct drm_printer *p, + const struct panthor_coredump_glb_state *glb) +{ + drm_puts(p, "glb:\n"); + drm_printf(p, " GLB_VERSION: 0x%x\n", glb->version); + drm_printf(p, " GLB_FEATURES: 0x%x\n", glb->features); + drm_printf(p, " GLB_GROUP_NUM: 0x%x\n", glb->group_num); + drm_printf(p, " GLB_REQ: 0x%x\n", glb->req); + drm_printf(p, " GLB_ACK: 0x%x\n", glb->ack); +} + static void print_gpu(struct drm_printer *p, const struct panthor_coredump_gpu_state *gpu, const struct drm_panthor_gpu_info *info) @@ -176,6 +190,9 @@ static void print_cd(struct drm_printer *p, const struc= t panthor_coredump *cd) /* many gpu states are static and are captured in drm_panthor_gpu_info */ print_gpu(p, cd->mask & PANTHOR_COREDUMP_GPU ? &cd->gpu : NULL, &cd->ptdev->gpu_info); + + if (cd->mask & PANTHOR_COREDUMP_GLB) + print_glb(p, &cd->glb); } =20 static void process_cd(struct panthor_device *ptdev, @@ -202,6 +219,19 @@ static void process_cd(struct panthor_device *ptdev, print_cd(&p, cd); } =20 +static void capture_glb(struct panthor_device *ptdev, + struct panthor_coredump_glb_state *glb) +{ + const struct panthor_fw_global_iface *glb_iface =3D + panthor_fw_get_glb_iface(ptdev); + + glb->version =3D glb_iface->control->version; + glb->features =3D glb_iface->control->features; + glb->group_num =3D glb_iface->control->group_num; + glb->req =3D glb_iface->input->req; + glb->ack =3D glb_iface->output->ack; +} + static void capture_gpu(struct panthor_device *ptdev, struct panthor_coredump_gpu_state *gpu) { @@ -231,6 +261,9 @@ static void capture_cd(struct panthor_device *ptdev, =20 capture_gpu(ptdev, &cd->gpu); cd->mask |=3D PANTHOR_COREDUMP_GPU; + + capture_glb(ptdev, &cd->glb); + cd->mask |=3D PANTHOR_COREDUMP_GLB; } =20 static void panthor_coredump_free(void *data) diff --git a/drivers/gpu/drm/panthor/panthor_coredump.h b/drivers/gpu/drm/p= anthor/panthor_coredump.h index 9e30c02ab962..e578298e9b57 100644 --- a/drivers/gpu/drm/panthor/panthor_coredump.h +++ b/drivers/gpu/drm/panthor/panthor_coredump.h @@ -56,6 +56,19 @@ struct panthor_coredump_gpu_state { u32 mcu_features; }; =20 +/** + * struct panthor_coredump_glb_state - Coredump GLB state + * + * Interesting panthor_fw_global_iface fields. + */ +struct panthor_coredump_glb_state { + u32 version; + u32 features; + u32 group_num; + u32 req; + u32 ack; +}; + #ifdef CONFIG_DEV_COREDUMP =20 struct panthor_coredump * --=20 2.50.0.727.gbf7dc18ff4-goog From nobody Mon Oct 6 15:13:23 2025 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 951481F92E for ; Sun, 20 Jul 2025 00:02:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752969732; cv=none; b=W961qj/YYnTZpnBnqz4adRpKGdPMg+eDFBABciHzwlJhUTk9ktTO/lzj3Zw88tTjeuU/38Autb2jiHl9GhV9KPCULzZF/UpPjhFWhnHg9qPT6LMzaJcDyFf0kgVjpNGPihlbVcQbDx9ISIwZMoieYpbRH8+78OcUaaDkjRpvlJM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752969732; c=relaxed/simple; bh=kWH481rQxHSgO2aYYrKtU7VjD5qYBOXbDaNzIknywTY=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KdhxzHFV07yrYm1WpQqq9VxPq/Kg0K2eXbONCerDg7SlbaTkdpnJPyANC9UMeJh3e4U+yQKAFiK65juf0m+X0ASZAL3Vj+Y1A1AVWyidR2CbP3YWe1LXbcdzlQY+btFuuWcHsuX/RSYyMEwKpcwTAyR2dZgxAZP9gw0zS2Md2mo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=UnqOvKxU; arc=none smtp.client-ip=209.85.214.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UnqOvKxU" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-23526264386so29388675ad.2 for ; Sat, 19 Jul 2025 17:02:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752969730; x=1753574530; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=wRoDb+voU8lgHdTpaHOsovTOL2n5XlnH2FXsWKtkNow=; b=UnqOvKxU2Qom57Iqm6TtyEdW7/7fCCflecqydNkcNlAH3a6CVWr630Ol34oheDl549 WpOATyXCF6FsLgfkKloofrxnGNjEIBdmOlABzEkfxVvIgxmRiD0Js+PsTsG4OuPKUyM/ UTXnehp/lcmjY+hTKO/sPvaKmN63EBF2oqO14ZbVZOEbRl2zr5dAxYATJfH9Y22J79aS wYZfnaIqLxH0v8PiUmQ19l7y+WICtmluPWUg4qmpRSkVd4vcOeINB60w5PoRx2BSYfbG zBeF/LilbnJddkkBsh4xOBYOKj2Hb10cBC30UZRE4/IDQ8m3ya+06j++suD5Oa4idkht QElQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752969730; x=1753574530; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wRoDb+voU8lgHdTpaHOsovTOL2n5XlnH2FXsWKtkNow=; b=DeWMA0Qo9KfwtRZZGmMPJG+R02EaO6ntfPSvvNgY6FnFimVUwmrv2FbRv5f+bT2432 5f5fZsyRMc50T7wSSJO7upJKdxtr7xl9Ykbro8mxpkEqapVnYcXPKzneMsnYkgbRAZ0H bwLCniNCnRR2016RtfWIYkPo0emzMcMKtMgNZkecY5DqDEZlm769PX9w8hym4+LOZbg4 C7QY37bsgwzcqODXfIqlYhDe7aXZHT464S+skPImAJQPkR8onDf3jtG1qjUi9fZKcxrm ld/Ztaciejaob0R8xWfiLQkMezhoM28nh51xVmo4Ejui9YY+wZWAm+F1ltcKvjvtNs6F Tijw== X-Forwarded-Encrypted: i=1; AJvYcCVdnzNZ+X0f3MO8a7La6HmDLyCjVwrHa58Od4vjhufF3i0wfJj/KdbXW0+2g5asNvgF4qcx7FWDS8SVfsE=@vger.kernel.org X-Gm-Message-State: AOJu0Yzz2m4RbNrqaOTVDcau+TIPWvVP7oADQRXo9rqxO7XRz7HGQ+mA EpXndUFseyL2HZr4fI5AhnyX4FfYwRTOCA/pqUTFatszgFM8y0TCR09u X-Gm-Gg: ASbGncs+vJr7D6MpVsXxgwt//sp0mGkOw0+5aqH5W3sbBQoYmIx860AEHQYO82P557I jD4+n2ATFvrrZOBtz11bEOPZ5e3q7Nc9LqJaOSsovtU8LR8RpfgmlI7qd40uIMVnX4flDjOzLUC 0QqbSKUPKlWMXHk6sHLm/Ny48jNBGDKl/Qvl5KVcXOf8yJDW+ZnwnleJTN4d9px889z3O7dT1kT raveOXFGBqpcayiS7W1shTGmCpQiZH6Q/Q3jIQ2uj7rlBLtRskRH7F7VCTQKcd1dsOPb3qml+ck 1ImIic1m5C/IvNadRR6nDlfpXv0CSxNhvUr3rNZ1UXquydCWv5lhAuk/YsnuDn5P3dNdbjLfTOT 5WfdjB8pxhdS84HWvT9O0rEe1fiWJNscFDUwRC5hUhgJK29V3swHeerrxyNmKBq4= X-Google-Smtp-Source: AGHT+IHqeh5H+cwZXLynkz1KvJ7nhaok/k4EEbnFVlyCAAZG/xRcLSYxwJPT96memS9fpzyST0sY9g== X-Received: by 2002:a17:902:e84f:b0:234:9094:3fb1 with SMTP id d9443c01a7336-23e25763da2mr244183835ad.35.1752969729849; Sat, 19 Jul 2025 17:02:09 -0700 (PDT) Received: from localhost (111-252-5-201.dynamic-ip.hinet.net. [111.252.5.201]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-23e3b6cfdb1sm34053625ad.139.2025.07.19.17.02.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Jul 2025 17:02:09 -0700 (PDT) From: Chia-I Wu To: Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH 4/9] drm/panthor: capture CSG state for devcoredump Date: Sat, 19 Jul 2025 17:01:41 -0700 Message-ID: <20250720000146.1405060-5-olvaffe@gmail.com> X-Mailer: git-send-email 2.50.0.727.gbf7dc18ff4-goog In-Reply-To: <20250720000146.1405060-1-olvaffe@gmail.com> References: <20250720000146.1405060-1-olvaffe@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Capture interesting panthor_fw_csg_iface fields for devcoredump. Signed-off-by: Chia-I Wu --- drivers/gpu/drm/panthor/panthor_coredump.c | 58 ++++++++++++++++++++++ drivers/gpu/drm/panthor/panthor_coredump.h | 23 +++++++++ drivers/gpu/drm/panthor/panthor_sched.c | 13 +++++ 3 files changed, 94 insertions(+) diff --git a/drivers/gpu/drm/panthor/panthor_coredump.c b/drivers/gpu/drm/p= anthor/panthor_coredump.c index 44d711e2f310..e08bd33b3554 100644 --- a/drivers/gpu/drm/panthor/panthor_coredump.c +++ b/drivers/gpu/drm/panthor/panthor_coredump.c @@ -24,6 +24,7 @@ enum panthor_coredump_mask { PANTHOR_COREDUMP_GROUP =3D BIT(0), PANTHOR_COREDUMP_GPU =3D BIT(1), PANTHOR_COREDUMP_GLB =3D BIT(2), + PANTHOR_COREDUMP_CSG =3D BIT(3), }; =20 /** @@ -53,6 +54,7 @@ struct panthor_coredump { struct panthor_coredump_group_state group; struct panthor_coredump_gpu_state gpu; struct panthor_coredump_glb_state glb; + struct panthor_coredump_csg_state csg; =20 /* @data: Serialized coredump data. */ void *data; @@ -85,6 +87,28 @@ static const char *reason_str(enum panthor_coredump_reas= on reason) } } =20 +static void print_csg(struct drm_printer *p, + const struct panthor_coredump_csg_state *csg, u32 csg_id) +{ + drm_printf(p, "csg%d:\n", csg_id); + drm_printf(p, " GROUP_FEATURES: 0x%x\n", csg->features); + drm_printf(p, " GROUP_STREAM_NUM: 0x%x\n", csg->stream_num); + + drm_printf(p, " CSG_REQ: 0x%x\n", csg->req); + drm_printf(p, " CSG_ALLOW_COMPUTE: 0x%llx\n", csg->allow_compute); + drm_printf(p, " CSG_ALLOW_FRAGMENT: 0x%llx\n", csg->allow_fragment); + drm_printf(p, " CSG_ALLOW_OTHER: 0x%x\n", csg->allow_other); + drm_printf(p, " CSG_EP_REQ: 0x%x\n", csg->ep_req); + drm_printf(p, " CSG_CONFIG: 0x%x\n", csg->config); + + drm_printf(p, " CSG_ACK: 0x%x\n", csg->ack); + drm_printf(p, " CSG_STATUS_EP_CURRENT: 0x%x\n", + csg->status_ep_current); + drm_printf(p, " CSG_STATUS_EP_REQ: 0x%x\n", csg->status_ep_req); + drm_printf(p, " CSG_STATUS_STATE: 0x%x\n", csg->status_state); + drm_printf(p, " CSG_RESOURCE_DEP: 0x%x\n", csg->resource_dep); +} + static void print_glb(struct drm_printer *p, const struct panthor_coredump_glb_state *glb) { @@ -193,6 +217,10 @@ static void print_cd(struct drm_printer *p, const stru= ct panthor_coredump *cd) =20 if (cd->mask & PANTHOR_COREDUMP_GLB) print_glb(p, &cd->glb); + + if (cd->mask & PANTHOR_COREDUMP_CSG) { + print_csg(p, &cd->csg, cd->group.csg_id); + } } =20 static void process_cd(struct panthor_device *ptdev, @@ -219,6 +247,29 @@ static void process_cd(struct panthor_device *ptdev, print_cd(&p, cd); } =20 +static void capture_csg(struct panthor_device *ptdev, + struct panthor_coredump_csg_state *csg, u32 csg_id) +{ + const struct panthor_fw_csg_iface *csg_iface =3D + panthor_fw_get_csg_iface(ptdev, csg_id); + + csg->features =3D csg_iface->control->features; + csg->stream_num =3D csg_iface->control->stream_num; + + csg->req =3D csg_iface->input->req; + csg->allow_compute =3D csg_iface->input->allow_compute; + csg->allow_fragment =3D csg_iface->input->allow_fragment; + csg->allow_other =3D csg_iface->input->allow_other; + csg->ep_req =3D csg_iface->input->endpoint_req; + csg->config =3D csg_iface->input->config; + + csg->ack =3D csg_iface->output->ack; + csg->status_ep_current =3D csg_iface->output->status_endpoint_current; + csg->status_ep_req =3D csg_iface->output->status_endpoint_req; + csg->status_state =3D csg_iface->output->status_state; + csg->resource_dep =3D csg_iface->output->resource_dep; +} + static void capture_glb(struct panthor_device *ptdev, struct panthor_coredump_glb_state *glb) { @@ -264,6 +315,13 @@ static void capture_cd(struct panthor_device *ptdev, =20 capture_glb(ptdev, &cd->glb); cd->mask |=3D PANTHOR_COREDUMP_GLB; + + /* remaining states require an active group */ + if (!group || cd->group.csg_id < 0) + return; + + capture_csg(ptdev, &cd->csg, cd->group.csg_id); + cd->mask |=3D PANTHOR_COREDUMP_CSG; } =20 static void panthor_coredump_free(void *data) diff --git a/drivers/gpu/drm/panthor/panthor_coredump.h b/drivers/gpu/drm/p= anthor/panthor_coredump.h index e578298e9b57..d965ebc545d3 100644 --- a/drivers/gpu/drm/panthor/panthor_coredump.h +++ b/drivers/gpu/drm/panthor/panthor_coredump.h @@ -69,6 +69,29 @@ struct panthor_coredump_glb_state { u32 ack; }; =20 +/** + * struct panthor_coredump_csg_state - Coredump CSG state + * + * Interesting panthor_fw_csg_iface fields. + */ +struct panthor_coredump_csg_state { + u32 features; + u32 stream_num; + + u32 req; + u64 allow_compute; + u64 allow_fragment; + u32 allow_other; + u32 ep_req; + u32 config; + + u32 ack; + u32 status_ep_current; + u32 status_ep_req; + u32 status_state; + u32 resource_dep; +}; + #ifdef CONFIG_DEV_COREDUMP =20 struct panthor_coredump * diff --git a/drivers/gpu/drm/panthor/panthor_sched.c b/drivers/gpu/drm/pant= hor/panthor_sched.c index a9fd71fa984b..504fc097ebfe 100644 --- a/drivers/gpu/drm/panthor/panthor_sched.c +++ b/drivers/gpu/drm/panthor/panthor_sched.c @@ -3681,6 +3681,19 @@ static void panthor_sched_coredump_locked(struct pan= thor_device *ptdev, =20 pm_active =3D pm_runtime_get_if_active(ptdev->base.dev); =20 + /* force a CSG_STATUS_UPDATE */ + if (pm_active && group && group->csg_id >=3D 0) { + struct panthor_fw_csg_iface *csg_iface; + u32 acked; + + csg_iface =3D panthor_fw_get_csg_iface(ptdev, group->csg_id); + + panthor_fw_toggle_reqs(csg_iface, req, ack, CSG_STATUS_UPDATE); + panthor_fw_ring_csg_doorbells(ptdev, BIT(group->csg_id)); + panthor_fw_csg_wait_acks(ptdev, group->csg_id, + CSG_STATUS_UPDATE, &acked, 100); + } + panthor_coredump_capture(cd, group); =20 if (pm_active =3D=3D 1) --=20 2.50.0.727.gbf7dc18ff4-goog From nobody Mon Oct 6 15:13:23 2025 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 68A652EAE5 for ; Sun, 20 Jul 2025 00:02:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752969734; cv=none; b=h4kySDPSg1gVpL9S46vfD0+fv0I5LONLk7pSZDJBPxnKDgSHoqN29co5CtGn8bdw41/R1193KLGKJpWW3TJrL+ASQv0lQnzTxEFx+pstYxUCoAGBiodsJDxZzdXaxkDsUmdB7Qf4OUFKRb8iVtwTzLShuuTrBC9/93zlr8ZtErQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752969734; c=relaxed/simple; bh=co8fM46et2XKKPzi9MfgCvG3Np+xylx1AxLZfq6r8tc=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AhJKVrXNM5aoZ6ityeuEcw/jajTpjK8aenGMzice5qDZpTXhm5F8H9O9emSCfNu2JykxpB5TUBKp8WkUNHqC68FxaJpvdkzf9Y/ZXvPdGL8//hK7QmhTPu2o9luS75+tUtckB3gvnuD/RmHdijBUVKScdH7g6joJdLqN0kFiumA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=lkQnKe/m; arc=none smtp.client-ip=209.85.214.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lkQnKe/m" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-2353a2bc210so29131785ad.2 for ; Sat, 19 Jul 2025 17:02:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752969732; x=1753574532; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=CVtZY+hbxyEft7E0UMwAw5SSHtVdumRHG0qI/Dby8iI=; b=lkQnKe/mlIpxt27snzYPAQ87ZrHRXMn6F5nFGFERUZVsTufRZ1QR5eAA9godt7IOFY 1s4ZjR430a2uBXSXD3wN1mLgnWYk9dHfSrNcSNLQ8VwEyV9BhsjC/uXz6oMfC+Ayd271 Mzk/Y9krHj5gHQyYmx/fkjU0hIwShLb74mDEekaYrGOIxRtFZgLJZECHNtgXyiU9HUJ7 7eK2Uta9Pt5WQZzdcZNOznaQ6pkZ4jQFRINo47Iq2gzTqjZr56ZarN8g+B8nYuFzLFS7 4ndVkccNu1phTWQ1SqnviRIW+RVBtbvohdsDRnY0axGsQFg0/3QFXsw4YpOfRCi+u9RU Re/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752969732; x=1753574532; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CVtZY+hbxyEft7E0UMwAw5SSHtVdumRHG0qI/Dby8iI=; b=Utr3N+il3ljJl0e5x3HCfuD5fF8BH4c5ums4/mTy7J1bv1QbxPUPuDZTLZf0GgxF28 mScvcxYb8Oxlc6OT39qnon2iKHtDRGR/qHSQEQE1dBq+3MdOZgokQcD1CU6ELFN3vgP5 DA8wK/J6v2Dndjo9IlhcInyghPPW4CtE4Uc4ekPIpUJmfW5XbX5/p3l5tJaBNN3t107G q2/A4l6F7I40zQn5Rd/7YFnWpVTwn8bvJwD1MfSBo5YtXR3G2qciv7xJeAbOgbyg/GLd kx8VEa27NRphExKpYQZ5HlERSz0GUeeQKuAs6R5/GuA2CJ2x7VtIaDw6SIgCj/XPtjMu CZ/w== X-Forwarded-Encrypted: i=1; AJvYcCXRytaz+5oGTxjZp02VNzgm46iXTagUB3MZl03a6ZXebbrVLV+XSwwhM9d9hrpBVritznKSVbZfgsn80Og=@vger.kernel.org X-Gm-Message-State: AOJu0YxcY94aynlBz3rBgjl+d4C169+T6BmxhsCBXI/Khrm3XBpvj/OI nwCZ//7DLXqpJMUZFrzLw/SOTi1eWpfo6n82fyTTUVBc26mkgBYaw/ZR X-Gm-Gg: ASbGncskwz0NFBI8+Q+tnRPoH6U4Rh6VSo3ePIuQraS3a3d1xQFVOYk392cWqxMAa6C wyuqCKHYjb8wXm4Mxrpy1tIuvmORPcNH+sKIL+875sPOM3KHz7v29cnq/rVIIZABSGKyNS/l8Le eRLzR3ffaN0qpKnF3sLmi5J5QFFXBM+DTxZ8suoCZDveYAexDrOJ+fFYqSYoSG3WT827byzGWco 1tqGRi5Vxuzzg0rk8JogAJUN4LZ/Fnbg/uvp1Kp/B66my3WhzwEhxDP0IDlhlDBqaQB1bp3HVkb qivVM4FE16YU663sVkwpFALFHPzrMOexSwHuNmtfq+z1VoIv8oMbdw1dh1hYcHTy6BEpYXe29aP xSoK6/O1OiCjgPI6mOFfzS3beFCZLTgCLXwTIBMa3SWnPbP/BHLs7CK/ePBSpdCU= X-Google-Smtp-Source: AGHT+IE3g0H2IGEty7OhpxZ667vS3887RUste0udZafjm+IR47P3+I/iGpe0nwovRH288hXuWM64KA== X-Received: by 2002:a17:903:acb:b0:215:8d49:e2a7 with SMTP id d9443c01a7336-23e25791562mr203157935ad.50.1752969731631; Sat, 19 Jul 2025 17:02:11 -0700 (PDT) Received: from localhost (111-252-5-201.dynamic-ip.hinet.net. [111.252.5.201]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-23e3b6d672asm33905825ad.178.2025.07.19.17.02.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Jul 2025 17:02:11 -0700 (PDT) From: Chia-I Wu To: Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH 5/9] drm/panthor: capture CS state for devcoredump Date: Sat, 19 Jul 2025 17:01:42 -0700 Message-ID: <20250720000146.1405060-6-olvaffe@gmail.com> X-Mailer: git-send-email 2.50.0.727.gbf7dc18ff4-goog In-Reply-To: <20250720000146.1405060-1-olvaffe@gmail.com> References: <20250720000146.1405060-1-olvaffe@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Capture interesting panthor_fw_cs_iface, panthor_fw_ringbuf_input_iface, and panthor_fw_ringbuf_output_iface fields for devcoredump. Signed-off-by: Chia-I Wu --- drivers/gpu/drm/panthor/panthor_coredump.c | 79 ++++++++++++++++++++++ drivers/gpu/drm/panthor/panthor_coredump.h | 32 +++++++++ drivers/gpu/drm/panthor/panthor_sched.c | 11 +++ drivers/gpu/drm/panthor/panthor_sched.h | 7 ++ 4 files changed, 129 insertions(+) diff --git a/drivers/gpu/drm/panthor/panthor_coredump.c b/drivers/gpu/drm/p= anthor/panthor_coredump.c index e08bd33b3554..60d651a8468a 100644 --- a/drivers/gpu/drm/panthor/panthor_coredump.c +++ b/drivers/gpu/drm/panthor/panthor_coredump.c @@ -25,6 +25,7 @@ enum panthor_coredump_mask { PANTHOR_COREDUMP_GPU =3D BIT(1), PANTHOR_COREDUMP_GLB =3D BIT(2), PANTHOR_COREDUMP_CSG =3D BIT(3), + PANTHOR_COREDUMP_CS =3D BIT(4), }; =20 /** @@ -55,6 +56,7 @@ struct panthor_coredump { struct panthor_coredump_gpu_state gpu; struct panthor_coredump_glb_state glb; struct panthor_coredump_csg_state csg; + struct panthor_coredump_cs_state cs[MAX_CS_PER_CSG]; =20 /* @data: Serialized coredump data. */ void *data; @@ -87,6 +89,37 @@ static const char *reason_str(enum panthor_coredump_reas= on reason) } } =20 +static void print_cs(struct drm_printer *p, + const struct panthor_coredump_cs_state *cs, u32 cs_id) +{ + drm_printf(p, "cs%d:\n", cs_id); + drm_printf(p, " STREAM_FEATURES: 0x%x\n", cs->features); + + drm_printf(p, " CS_REQ: 0x%x\n", cs->req); + drm_printf(p, " CS_CONFIG: 0x%x\n", cs->config); + drm_printf(p, " CS_BASE: 0x%llx\n", cs->base); + drm_printf(p, " CS_SIZE: 0x%x\n", cs->size); + + drm_printf(p, " CS_ACK: 0x%x\n", cs->ack); + drm_printf(p, " CS_STATUS_CMD_PTR: 0x%llx\n", cs->status_cmd_ptr); + drm_printf(p, " CS_STATUS_WAIT: 0x%x\n", cs->status_wait); + drm_printf(p, " CS_STATUS_REQ_RESOURCE: 0x%x\n", + cs->status_req_resource); + drm_printf(p, " CS_STATUS_SCOREBOARDS: 0x%x\n", + cs->status_scoreboards); + drm_printf(p, " CS_STATUS_BLOCKED_REASON: 0x%x\n", + cs->status_blocked_reason); + drm_printf(p, " CS_FAULT: 0x%x\n", cs->fault); + drm_printf(p, " CS_FATAL: 0x%x\n", cs->fatal); + drm_printf(p, " CS_FAULT_INFO: 0x%llx\n", cs->fault_info); + drm_printf(p, " CS_FATAL_INFO: 0x%llx\n", cs->fatal_info); + + drm_printf(p, " CS_INSERT: 0x%llx\n", cs->insert); + drm_printf(p, " CS_EXTRACT_INIT: 0x%llx\n", cs->extract_init); + drm_printf(p, " CS_EXTRACT: 0x%llx\n", cs->extract); + drm_printf(p, " CS_ACTIVE: 0x%x\n", cs->active); +} + static void print_csg(struct drm_printer *p, const struct panthor_coredump_csg_state *csg, u32 csg_id) { @@ -221,6 +254,11 @@ static void print_cd(struct drm_printer *p, const stru= ct panthor_coredump *cd) if (cd->mask & PANTHOR_COREDUMP_CSG) { print_csg(p, &cd->csg, cd->group.csg_id); } + + if (cd->mask & PANTHOR_COREDUMP_CS) { + for (u32 i =3D 0; i < cd->group.queue_count; i++) + print_cs(p, &cd->cs[i], i); + } } =20 static void process_cd(struct panthor_device *ptdev, @@ -247,6 +285,43 @@ static void process_cd(struct panthor_device *ptdev, print_cd(&p, cd); } =20 +static void capture_cs(struct panthor_device *ptdev, + struct panthor_coredump_cs_state *cs, u32 csg_id, + u32 cs_id, const struct panthor_group *group) +{ + const struct panthor_fw_cs_iface *cs_iface =3D + panthor_fw_get_cs_iface(ptdev, csg_id, cs_id); + const struct panthor_fw_ringbuf_input_iface *input_iface; + const struct panthor_fw_ringbuf_output_iface *output_iface; + + cs->features =3D cs_iface->control->features; + + cs->req =3D cs_iface->input->req; + cs->config =3D cs_iface->input->config; + cs->base =3D cs_iface->input->ringbuf_base; + cs->size =3D cs_iface->input->ringbuf_size; + + cs->ack =3D cs_iface->output->ack; + cs->status_cmd_ptr =3D cs_iface->output->status_cmd_ptr; + cs->status_wait =3D cs_iface->output->status_wait; + cs->status_req_resource =3D cs_iface->output->status_req_resource; + cs->status_scoreboards =3D cs_iface->output->status_scoreboards; + cs->status_blocked_reason =3D cs_iface->output->status_blocked_reason; + cs->fault =3D cs_iface->output->fault; + cs->fatal =3D cs_iface->output->fatal; + cs->fault_info =3D cs_iface->output->fault_info; + cs->fatal_info =3D cs_iface->output->fatal_info; + + panthor_group_get_ringbuf_iface(group, cs_id, &input_iface, + &output_iface); + + cs->insert =3D input_iface->insert; + cs->extract_init =3D input_iface->extract; + + cs->extract =3D output_iface->extract; + cs->active =3D output_iface->active; +} + static void capture_csg(struct panthor_device *ptdev, struct panthor_coredump_csg_state *csg, u32 csg_id) { @@ -322,6 +397,10 @@ static void capture_cd(struct panthor_device *ptdev, =20 capture_csg(ptdev, &cd->csg, cd->group.csg_id); cd->mask |=3D PANTHOR_COREDUMP_CSG; + + for (u32 i =3D 0; i < cd->group.queue_count; i++) + capture_cs(ptdev, &cd->cs[i], cd->group.csg_id, i, group); + cd->mask |=3D PANTHOR_COREDUMP_CS; } =20 static void panthor_coredump_free(void *data) diff --git a/drivers/gpu/drm/panthor/panthor_coredump.h b/drivers/gpu/drm/p= anthor/panthor_coredump.h index d965ebc545d3..44402c6142cb 100644 --- a/drivers/gpu/drm/panthor/panthor_coredump.h +++ b/drivers/gpu/drm/panthor/panthor_coredump.h @@ -92,6 +92,38 @@ struct panthor_coredump_csg_state { u32 resource_dep; }; =20 +/** + * struct panthor_coredump_cs_state - Coredump CS state + * + * Interesting panthor_fw_cs_iface, panthor_fw_ringbuf_input_iface, and + * panthor_fw_ringbuf_output_iface fields. + */ +struct panthor_coredump_cs_state { + u32 features; + + u32 req; + u32 config; + u64 base; + u32 size; + + u32 ack; + u64 status_cmd_ptr; + u32 status_wait; + u32 status_req_resource; + u32 status_scoreboards; + u32 status_blocked_reason; + u32 fault; + u32 fatal; + u64 fault_info; + u64 fatal_info; + + u64 insert; + u64 extract_init; + + u64 extract; + u32 active; +}; + #ifdef CONFIG_DEV_COREDUMP =20 struct panthor_coredump * diff --git a/drivers/gpu/drm/panthor/panthor_sched.c b/drivers/gpu/drm/pant= hor/panthor_sched.c index 504fc097ebfe..4bc31c5f667d 100644 --- a/drivers/gpu/drm/panthor/panthor_sched.c +++ b/drivers/gpu/drm/panthor/panthor_sched.c @@ -3715,6 +3715,17 @@ void panthor_group_capture_coredump(const struct pan= thor_group *group, state->csg_id =3D group->csg_id; } =20 +void panthor_group_get_ringbuf_iface( + const struct panthor_group *group, u32 cs_id, + const struct panthor_fw_ringbuf_input_iface **input_iface, + const struct panthor_fw_ringbuf_output_iface **output_iface) +{ + const struct panthor_queue *queue =3D group->queues[cs_id]; + + *input_iface =3D queue->iface.input; + *output_iface =3D queue->iface.output; +} + int panthor_group_pool_create(struct panthor_file *pfile) { struct panthor_group_pool *gpool; diff --git a/drivers/gpu/drm/panthor/panthor_sched.h b/drivers/gpu/drm/pant= hor/panthor_sched.h index 6c564153133e..284ba39f958a 100644 --- a/drivers/gpu/drm/panthor/panthor_sched.h +++ b/drivers/gpu/drm/panthor/panthor_sched.h @@ -17,6 +17,8 @@ struct drm_panthor_queue_submit; struct panthor_coredump_group_state; struct panthor_device; struct panthor_file; +struct panthor_fw_ringbuf_input_iface; +struct panthor_fw_ringbuf_output_iface; struct panthor_group; struct panthor_group_pool; struct panthor_job; @@ -31,6 +33,11 @@ int panthor_group_get_state(struct panthor_file *pfile, void panthor_group_capture_coredump(const struct panthor_group *group, struct panthor_coredump_group_state *state); =20 +void panthor_group_get_ringbuf_iface( + const struct panthor_group *group, u32 cs_id, + const struct panthor_fw_ringbuf_input_iface **input_iface, + const struct panthor_fw_ringbuf_output_iface **output_iface); + struct drm_sched_job * panthor_job_create(struct panthor_file *pfile, u16 group_handle, --=20 2.50.0.727.gbf7dc18ff4-goog From nobody Mon Oct 6 15:13:23 2025 Received: from mail-pj1-f45.google.com (mail-pj1-f45.google.com [209.85.216.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C2E116BFCE for ; Sun, 20 Jul 2025 00:02:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752969736; cv=none; b=hD2Buh+v3y3dC2o7+CcTREPlTebDMi6TCNNM8pa4wojRD29ztt36qyfJOo441EGeCzrvFtDLpY4eUi6Zg7AfA5JMtEifbhFfkH0ruIabfnCzc/JBKutkJ4UN7e1NtCtgTgmnZQ+f2HNIHQ0BJ0z0//arbRb5wrvQvB5HtAj59Ec= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752969736; c=relaxed/simple; bh=uRAdNF6Jy9+amgIWPSgHQ0mMj0tXsU8HG62Urzi3/UU=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Zo8apjWgLFfi/ifk2iN9U0/4ApPF4DGbChHhfm5CAVrvZRAGrKEGhfIVm0SFxe/8e7SjQ2MybfYnUd5gdL0n73fEgd5r3btFHNZM6YZ+TmFagarE+p/5WVnSsXi8aVfCO2ZuBpH+FLjcKzAeHkYDgJewHxaZMYx2AJiJuheLGLo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Bcnj9pMr; arc=none smtp.client-ip=209.85.216.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Bcnj9pMr" Received: by mail-pj1-f45.google.com with SMTP id 98e67ed59e1d1-311e2cc157bso2758968a91.2 for ; Sat, 19 Jul 2025 17:02:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752969734; x=1753574534; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=AIIypzxyxw4ilus6tCRx6o71Sqrl2VuTVaY8aIA09xM=; b=Bcnj9pMrg4Bgbih0A3vfEvVZilfFYGPCzdnHcAIowFJGgxvp957Zrqd7w3dI8UqRYA s8jE7BI+UydtZ7GCkI2EmCsdAn+6Ix3eCSt8piiIasigdHyb0hW7+R7n62A4bF038XoZ ssAx++e0JndLzjHf58/HikYnnSeZJznbExpF9Eaeew+BUEjZLT042zY72qK/fY2XEvT7 hD16FH/6kb89N7NQ4u6K43eL2FUkcldgdn3NmH+XB3MXbXi4+vDB5H/HfxdhhGHD56/q gBob1m7Yz8IyEH2n0kagTylQMr4rnENhi9IZG6HBtZXRQY04etzOnku+iluBvyeLkPQG X2qA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752969734; x=1753574534; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AIIypzxyxw4ilus6tCRx6o71Sqrl2VuTVaY8aIA09xM=; b=Fi20jU0YnFMhzW4zWnr/zmncw6y9yR3dkGcD4hXfMmhiqCPZKYpYm80BY575v3QDQ4 n6e5HcQbr85f1tWmI+PQq4bU2K89lMl/W2/AC/VeGRyIH+G0/F7von5D0GrTQXuvrlDD 2zemkOjaj3l37eE9i84o8ifB1Vrk77NRp35gqkLre3jAV4+y70kWilCgzsoTLF5PmX5P 0zkZbxqZZsM07ChZsEPh6GP849FN79raK+eFkfYxOxW+xVpSZOtsJOyaCrDfoYipY6yk Wex0gwfQUZiw7s+cDHWoAhZxGMXi8tE6h4zeoKvA82Ui7hUr8h9STkgE3piu2h09Nb/S aaFA== X-Forwarded-Encrypted: i=1; AJvYcCWajp71FNtqMrhWmeUObYC0J7MoIoWoi9N7rR3tBntvHoRb/+egLPSDNPIDuySfzwLQ8SoPZw8LoSwCThg=@vger.kernel.org X-Gm-Message-State: AOJu0Ywcgep8gosW4K98aOJQH0XUurDfmXdSM4vSAspPXSWsyQRCqpKT gC63+VRngbDmbnBfspTVlw69k+8ABF4ALE9YfDk4hgaJEqEloPzbTtoQ X-Gm-Gg: ASbGncuxpIseE+xJXVwMnWEY6M+y6VbQoRCKG9Rk61kpaGOoX6QZs4CqkjGG3NSDdm1 6gbq4//Rnyy5Wb3CzsbZXmo4TdlCtjNm56JPruqzUINWkTqsom80GFoZkPfzMmDZ3yQEXPvAEXV zn3EnSh2QEcsyoHI5zF9a4mzVSkrvSpJZrfGNBO3VgiSeKqJc9wWVQia65kRm3ImJ7O+A9hAmdM 0EXr3kqzPigos9DBi2f5bWdU9uYPavl/yv1pchShZgtYToy4Byd2AjhSo+6+0zG44jm8h9RSTon C3/OQ1ny/6d8YIMgzSlsr+19NQbzZv4/0JM8iuWkRL+gnnj5fx+ZtZ84chKTep9LvuvKFNUL8IL iGWlfYoLoyNNk+rJDyO7xl6crcakvzy5Mk1kqbx3ahGmRB5jtrpIv X-Google-Smtp-Source: AGHT+IENKAtKxiYYD9bXkKzeXW2rcn+4YIt1xanpaUa2JbcOsT+ugDOwm9jl0S5A1UNw1ayq7YzY0g== X-Received: by 2002:a17:90b:4fcc:b0:312:e1ec:de44 with SMTP id 98e67ed59e1d1-31c9e77050fmr23930785a91.27.1752969733978; Sat, 19 Jul 2025 17:02:13 -0700 (PDT) Received: from localhost (111-252-5-201.dynamic-ip.hinet.net. [111.252.5.201]) by smtp.gmail.com with UTF8SMTPSA id 98e67ed59e1d1-31cc3f2dbd9sm3583595a91.32.2025.07.19.17.02.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Jul 2025 17:02:13 -0700 (PDT) From: Chia-I Wu To: Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH 6/9] drm/panthor: capture AS state for devcoredump Date: Sat, 19 Jul 2025 17:01:43 -0700 Message-ID: <20250720000146.1405060-7-olvaffe@gmail.com> X-Mailer: git-send-email 2.50.0.727.gbf7dc18ff4-goog In-Reply-To: <20250720000146.1405060-1-olvaffe@gmail.com> References: <20250720000146.1405060-1-olvaffe@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Capture interesting MMU_AS_CONTROL regs for devcoredump. Signed-off-by: Chia-I Wu --- drivers/gpu/drm/panthor/panthor_coredump.c | 33 ++++++++++++++++++++++ drivers/gpu/drm/panthor/panthor_coredump.h | 11 ++++++++ drivers/gpu/drm/panthor/panthor_sched.c | 5 ++++ drivers/gpu/drm/panthor/panthor_sched.h | 2 ++ 4 files changed, 51 insertions(+) diff --git a/drivers/gpu/drm/panthor/panthor_coredump.c b/drivers/gpu/drm/p= anthor/panthor_coredump.c index 60d651a8468a..acc8ad4cc498 100644 --- a/drivers/gpu/drm/panthor/panthor_coredump.c +++ b/drivers/gpu/drm/panthor/panthor_coredump.c @@ -14,6 +14,7 @@ #include "panthor_coredump.h" #include "panthor_device.h" #include "panthor_fw.h" +#include "panthor_mmu.h" #include "panthor_regs.h" #include "panthor_sched.h" =20 @@ -26,6 +27,7 @@ enum panthor_coredump_mask { PANTHOR_COREDUMP_GLB =3D BIT(2), PANTHOR_COREDUMP_CSG =3D BIT(3), PANTHOR_COREDUMP_CS =3D BIT(4), + PANTHOR_COREDUMP_AS =3D BIT(5), }; =20 /** @@ -57,6 +59,7 @@ struct panthor_coredump { struct panthor_coredump_glb_state glb; struct panthor_coredump_csg_state csg; struct panthor_coredump_cs_state cs[MAX_CS_PER_CSG]; + struct panthor_coredump_as_state as; =20 /* @data: Serialized coredump data. */ void *data; @@ -89,6 +92,15 @@ static const char *reason_str(enum panthor_coredump_reas= on reason) } } =20 +static void print_as(struct drm_printer *p, + const struct panthor_coredump_as_state *as, u32 as_id) +{ + drm_printf(p, "as%d:\n", as_id); + drm_printf(p, " FAULTSTATUS: 0x%x\n", as->faultstatus); + drm_printf(p, " FAULTADDRESS: 0x%llx\n", as->faultaddress); + drm_printf(p, " FAULTEXTRA: 0x%llx\n", as->faultextra); +} + static void print_cs(struct drm_printer *p, const struct panthor_coredump_cs_state *cs, u32 cs_id) { @@ -259,6 +271,12 @@ static void print_cd(struct drm_printer *p, const stru= ct panthor_coredump *cd) for (u32 i =3D 0; i < cd->group.queue_count; i++) print_cs(p, &cd->cs[i], i); } + + if (cd->mask & PANTHOR_COREDUMP_AS) { + const u32 as_id =3D cd->csg.config & 0xf; + + print_as(p, &cd->as, as_id); + } } =20 static void process_cd(struct panthor_device *ptdev, @@ -285,6 +303,14 @@ static void process_cd(struct panthor_device *ptdev, print_cd(&p, cd); } =20 +static void capture_as(struct panthor_device *ptdev, + struct panthor_coredump_as_state *as, u32 as_id) +{ + as->faultstatus =3D gpu_read(ptdev, AS_FAULTSTATUS(as_id)); + as->faultaddress =3D gpu_read64(ptdev, AS_FAULTADDRESS(as_id)); + as->faultextra =3D gpu_read64(ptdev, AS_FAULTEXTRA(as_id)); +} + static void capture_cs(struct panthor_device *ptdev, struct panthor_coredump_cs_state *cs, u32 csg_id, u32 cs_id, const struct panthor_group *group) @@ -374,6 +400,8 @@ static void capture_gpu(struct panthor_device *ptdev, static void capture_cd(struct panthor_device *ptdev, struct panthor_coredump *cd, struct panthor_group *group) { + struct panthor_vm *vm; + drm_info(&ptdev->base, "capturing coredump states\n"); =20 if (group) { @@ -401,6 +429,11 @@ static void capture_cd(struct panthor_device *ptdev, for (u32 i =3D 0; i < cd->group.queue_count; i++) capture_cs(ptdev, &cd->cs[i], cd->group.csg_id, i, group); cd->mask |=3D PANTHOR_COREDUMP_CS; + + vm =3D panthor_group_vm(group); + + capture_as(ptdev, &cd->as, panthor_vm_as(vm)); + cd->mask |=3D PANTHOR_COREDUMP_AS; } =20 static void panthor_coredump_free(void *data) diff --git a/drivers/gpu/drm/panthor/panthor_coredump.h b/drivers/gpu/drm/p= anthor/panthor_coredump.h index 44402c6142cb..8aceb0c7d0d4 100644 --- a/drivers/gpu/drm/panthor/panthor_coredump.h +++ b/drivers/gpu/drm/panthor/panthor_coredump.h @@ -124,6 +124,17 @@ struct panthor_coredump_cs_state { u32 active; }; =20 +/** + * struct panthor_coredump_as_state - Coredump AS state + * + * Interesting MMU_AS_CONTROL regs. + */ +struct panthor_coredump_as_state { + u32 faultstatus; + u64 faultaddress; + u64 faultextra; +}; + #ifdef CONFIG_DEV_COREDUMP =20 struct panthor_coredump * diff --git a/drivers/gpu/drm/panthor/panthor_sched.c b/drivers/gpu/drm/pant= hor/panthor_sched.c index 4bc31c5f667d..82e43b7ca7aa 100644 --- a/drivers/gpu/drm/panthor/panthor_sched.c +++ b/drivers/gpu/drm/panthor/panthor_sched.c @@ -3726,6 +3726,11 @@ void panthor_group_get_ringbuf_iface( *output_iface =3D queue->iface.output; } =20 +struct panthor_vm *panthor_group_vm(struct panthor_group *group) +{ + return group->vm; +} + int panthor_group_pool_create(struct panthor_file *pfile) { struct panthor_group_pool *gpool; diff --git a/drivers/gpu/drm/panthor/panthor_sched.h b/drivers/gpu/drm/pant= hor/panthor_sched.h index 284ba39f958a..0cb58212fd44 100644 --- a/drivers/gpu/drm/panthor/panthor_sched.h +++ b/drivers/gpu/drm/panthor/panthor_sched.h @@ -38,6 +38,8 @@ void panthor_group_get_ringbuf_iface( const struct panthor_fw_ringbuf_input_iface **input_iface, const struct panthor_fw_ringbuf_output_iface **output_iface); =20 +struct panthor_vm *panthor_group_vm(struct panthor_group *group); + struct drm_sched_job * panthor_job_create(struct panthor_file *pfile, u16 group_handle, --=20 2.50.0.727.gbf7dc18ff4-goog From nobody Mon Oct 6 15:13:23 2025 Received: from mail-pj1-f51.google.com (mail-pj1-f51.google.com [209.85.216.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C6BD884D13 for ; Sun, 20 Jul 2025 00:02:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752969738; cv=none; b=Bt2YAQPBVm52bV6L++QkIFESYlqRMpmYInuhub6CxDHWuVx351Ft9voN+zpGWwRd5ZcR7XyjrwtZEC/i7gZhmaJmBEeI2VGBsoAhBtCo+hJLS6K1P6BSln0zYmH/3ij9Fa/TqO0v74xxNHrS3eWCMVF6nIw3YFT2Ju8XD4fuopY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752969738; c=relaxed/simple; bh=joTG/gyzlU12QP6ZdQeWZiq6PIvE8HoH+TkNL7bb6ZI=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=k1docHbMO566w1yND+cdR1GnpO8oeE2QNcm8r/Pn0Xf1Hg+1IdLNCXgOgONVX9UL1IU+BIylBbOOQ36ubGaFv0AtboK/ut6AFuPI2heAy7N/E8X+M+hpIurVUeiXIfZvNBDzXYbJK2CGveEFYs4xK2gWTmjT5ZIf9r0YT/RghqE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=IqDloBrT; arc=none smtp.client-ip=209.85.216.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="IqDloBrT" Received: by mail-pj1-f51.google.com with SMTP id 98e67ed59e1d1-3134c67a173so3205311a91.1 for ; Sat, 19 Jul 2025 17:02:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752969736; x=1753574536; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=58f3tD8aPkmsl5w2Gd3Jc7Y+VkmK8hdA51D4qILTFqg=; b=IqDloBrTkDdAEru62qIVraULov7UcRMgNPtaxYJTBPwfBk6nqscsynRxwbNcMDgoh1 Vi5GFJ1JZXdx8AgPVZL9e3LTQ3uL16XdvMBtH/WFZB1DIvVxu9hE3XixJcquiN51a/3b 7CnhNNFGn4IxvEJ6x20yP2D3mfY8aik7GBjASCj8VZl/fCKpVwAKPNkgflCRyYtpJbPM Aa/pmTQuVakNSuJU/1hdiLX8e3og4R1LoRgnBrBT7MunrJRHUOen2F1kFdU8n6nD2H2D FA+IgUgW8ZiGVr2LaJpDUUWkOnrygBdCx3SnKlhuHPJDHNoY0Gkv2xC7ggs5kKnxBL7S Rd9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752969736; x=1753574536; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=58f3tD8aPkmsl5w2Gd3Jc7Y+VkmK8hdA51D4qILTFqg=; b=k73Vh++w3AXuhvlPVLjjFd4bzL15VkoyEVHu08BkeDSBNlIIpk1TN1zw9f2UG4Eb6Y y/NTetHdz2D8IzGDwylCS84VuCYaTfhxwKVWPzC8kknS2ZT/L34Wd5csGthdlsi8m4aI uaqcbtCDySp2MhB8yHyDPFIeYq0er8n0sOvjvPRuX2gEIiTg0On+01DVa0+nPWv2Y2XC nofrQroMouZSsVhmzmqsaWYaUyMLUOS77UzpIcZ3NsMawBxMvMQiajQQdhh9xeGL/7+X GE501ucrQD/k968j4AEE1uI+yUak4uz9DXbq42kohXPgpHqoB8b0P4K4LCAbbCvlQMY5 dDgQ== X-Forwarded-Encrypted: i=1; AJvYcCV8YysjP8wUAWC7xYidyoDZ7kUq259ID3foIaMU8gd+LDCZn5miO0moj6xJcqkLOcHjAc4hZ/AzwIpMpwk=@vger.kernel.org X-Gm-Message-State: AOJu0YyMJl2O9mGHwiTjWZuB/46HSHhyvB/kZOmHl/AKTnoEqDOMeY8F BnlHDUt/1Qdjf0V6voUE4xTsQdqxT9CSwBcKmz6gNApR5B3b8CEHRvPm X-Gm-Gg: ASbGncv6LovwNihU3ECbqWdlz3n8UKnfL5O0EU5TZW9FoNDXtis0NXHQ/b9OqWH1Ka4 sZ6WmSwOmxKt3TcSiP7mLPtdLI+W+PAozh9/n4VvziipuYot/0Lg7soqVXNS1P39RKupzrO3gex iRYQDuZdRW1WgNcuKie5ubgZwLLbO0SUU6C20vycB9e6hQNGHYoXs/nzL9RbHMi4RvUyZ5YVSiD j64n/v9cbLWjphgzAh4quRLyNWoN5qPogR2gC9hHlHjJMjfTv89dbOzaoXxRyo1Fl1yx5q6PmWF LWpFYD476AFD11X5elfJlTKCIroxORnmUG00OBl9dsk5BfAl79r3qzud5GvHrdf+iOUe7zxRBHe XpOXuamWmXVColbmGmWyJUkw2tC2qsUIGAZ9NWwdxL5ZqBLRayQFO X-Google-Smtp-Source: AGHT+IG7aiwX/LxwDcgqsWHtJ3RqmQqG9q/LvmOIMnalP+OJlsLNCbZzZqEvjL/4wT5Ii8TtkPIJvw== X-Received: by 2002:a17:90b:2650:b0:311:baa0:89ce with SMTP id 98e67ed59e1d1-31c9f3fc33bmr23604543a91.12.1752969736028; Sat, 19 Jul 2025 17:02:16 -0700 (PDT) Received: from localhost (111-252-5-201.dynamic-ip.hinet.net. [111.252.5.201]) by smtp.gmail.com with UTF8SMTPSA id 98e67ed59e1d1-31cc3f2e1fesm3575853a91.31.2025.07.19.17.02.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Jul 2025 17:02:15 -0700 (PDT) From: Chia-I Wu To: Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH 7/9] drm/panthor: capture VMA state for devcoredump Date: Sat, 19 Jul 2025 17:01:44 -0700 Message-ID: <20250720000146.1405060-8-olvaffe@gmail.com> X-Mailer: git-send-email 2.50.0.727.gbf7dc18ff4-goog In-Reply-To: <20250720000146.1405060-1-olvaffe@gmail.com> References: <20250720000146.1405060-1-olvaffe@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Capture interesting panthor_vma fields for devcoredump. Because bo->label can change at anytime, we cap it to 32 chars to simplify size estimation. Signed-off-by: Chia-I Wu --- drivers/gpu/drm/panthor/panthor_coredump.c | 78 ++++++++++++++++++++-- drivers/gpu/drm/panthor/panthor_coredump.h | 15 +++++ drivers/gpu/drm/panthor/panthor_mmu.c | 43 ++++++++++++ drivers/gpu/drm/panthor/panthor_mmu.h | 4 ++ 4 files changed, 135 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_coredump.c b/drivers/gpu/drm/p= anthor/panthor_coredump.c index acc8ad4cc498..5502452a5baa 100644 --- a/drivers/gpu/drm/panthor/panthor_coredump.c +++ b/drivers/gpu/drm/panthor/panthor_coredump.c @@ -14,6 +14,7 @@ #include "panthor_coredump.h" #include "panthor_device.h" #include "panthor_fw.h" +#include "panthor_gem.h" #include "panthor_mmu.h" #include "panthor_regs.h" #include "panthor_sched.h" @@ -28,6 +29,7 @@ enum panthor_coredump_mask { PANTHOR_COREDUMP_CSG =3D BIT(3), PANTHOR_COREDUMP_CS =3D BIT(4), PANTHOR_COREDUMP_AS =3D BIT(5), + PANTHOR_COREDUMP_VMA =3D BIT(6), }; =20 /** @@ -45,6 +47,9 @@ struct panthor_coredump { /** @ptdev: Device. */ struct panthor_device *ptdev; =20 + /** @gfp: Allocation flags for panthor_coredump_capture. */ + gfp_t gfp; + /** @work: Bottom half of panthor_coredump_capture. */ struct work_struct work; =20 @@ -60,6 +65,8 @@ struct panthor_coredump { struct panthor_coredump_csg_state csg; struct panthor_coredump_cs_state cs[MAX_CS_PER_CSG]; struct panthor_coredump_as_state as; + struct panthor_coredump_vma_state *vma; + u32 vma_count; =20 /* @data: Serialized coredump data. */ void *data; @@ -92,6 +99,38 @@ static const char *reason_str(enum panthor_coredump_reas= on reason) } } =20 +static void print_vma(struct drm_printer *p, + const struct panthor_coredump_vma_state *vma, u32 vma_id, + size_t *max_dyn_size) +{ + struct panthor_gem_object *bo =3D vma->bo; + + if (!vma_id) + drm_puts(p, "vma:\n"); + + drm_printf(p, " - flags: 0x%x\n", vma->flags); + drm_printf(p, " iova: 0x%llx\n", vma->iova); + drm_printf(p, " size: 0x%llx\n", vma->size); + + if (!bo) + return; + + /* bo->label is dynamic */ + if (max_dyn_size) { + drm_puts(p, " label: |\n"); + drm_puts(p, " \n"); + *max_dyn_size +=3D 32; + } else { + scoped_guard(mutex, &bo->label.lock) + { + if (bo->label.str) { + drm_puts(p, " label: |\n"); + drm_printf(p, " %.32s\n", bo->label.str); + } + } + } +} + static void print_as(struct drm_printer *p, const struct panthor_coredump_as_state *as, u32 as_id) { @@ -247,7 +286,8 @@ static void print_header(struct drm_printer *p, drm_printf(p, " timestamp: %lld\n", ktime_to_ns(header->timestamp)); } =20 -static void print_cd(struct drm_printer *p, const struct panthor_coredump = *cd) +static void print_cd(struct drm_printer *p, const struct panthor_coredump = *cd, + size_t *max_dyn_size) { /* in YAML format */ drm_puts(p, "---\n"); @@ -277,6 +317,11 @@ static void print_cd(struct drm_printer *p, const stru= ct panthor_coredump *cd) =20 print_as(p, &cd->as, as_id); } + + if (cd->mask & PANTHOR_COREDUMP_VMA) { + for (u32 i =3D 0; i < cd->vma_count; i++) + print_vma(p, &cd->vma[i], i, max_dyn_size); + } } =20 static void process_cd(struct panthor_device *ptdev, @@ -286,10 +331,13 @@ static void process_cd(struct panthor_device *ptdev, .remain =3D SSIZE_MAX, }; struct drm_printer p =3D drm_coredump_printer(&iter); + size_t max_dyn_size =3D 0; =20 - print_cd(&p, cd); + print_cd(&p, cd, &max_dyn_size); + if (max_dyn_size > iter.remain) + return; =20 - iter.remain =3D SSIZE_MAX - iter.remain; + iter.remain =3D SSIZE_MAX - iter.remain + max_dyn_size; iter.data =3D kvmalloc(iter.remain, GFP_USER); if (!iter.data) return; @@ -297,10 +345,25 @@ static void process_cd(struct panthor_device *ptdev, cd->data =3D iter.data; cd->size =3D iter.remain; =20 - drm_info(&ptdev->base, "generating coredump of size %zu\n", cd->size); + drm_info(&ptdev->base, "generating coredump of estimated size %zu\n", + cd->size); =20 p =3D drm_coredump_printer(&iter); - print_cd(&p, cd); + print_cd(&p, cd, NULL); + + cd->size -=3D iter.remain; + + /* free vma now */ + if (cd->mask & PANTHOR_COREDUMP_VMA) { + for (u32 i =3D 0; i < cd->vma_count; i++) { + struct panthor_coredump_vma_state *vma =3D &cd->vma[i]; + + drm_gem_object_put(&vma->bo->base.base); + } + kfree(cd->vma); + + cd->mask &=3D ~PANTHOR_COREDUMP_VMA; + } } =20 static void capture_as(struct panthor_device *ptdev, @@ -434,6 +497,10 @@ static void capture_cd(struct panthor_device *ptdev, =20 capture_as(ptdev, &cd->as, panthor_vm_as(vm)); cd->mask |=3D PANTHOR_COREDUMP_AS; + + cd->vma =3D panthor_vm_capture_coredump(vm, &cd->vma_count, cd->gfp); + if (cd->vma_count) + cd->mask |=3D PANTHOR_COREDUMP_VMA; } =20 static void panthor_coredump_free(void *data) @@ -504,6 +571,7 @@ panthor_coredump_alloc(struct panthor_device *ptdev, } =20 cd->ptdev =3D ptdev; + cd->gfp =3D gfp; INIT_WORK(&cd->work, panthor_coredump_process_work); =20 cd->header.reason =3D reason; diff --git a/drivers/gpu/drm/panthor/panthor_coredump.h b/drivers/gpu/drm/p= anthor/panthor_coredump.h index 8aceb0c7d0d4..8a89c39cf2f5 100644 --- a/drivers/gpu/drm/panthor/panthor_coredump.h +++ b/drivers/gpu/drm/panthor/panthor_coredump.h @@ -10,6 +10,7 @@ =20 struct panthor_coredump; struct panthor_device; +struct panthor_gem_object; struct panthor_group; =20 /** @@ -135,6 +136,20 @@ struct panthor_coredump_as_state { u64 faultextra; }; =20 +/** + * struct panthor_coredump_vma_state - Coredump VMA state + * + * Interesting panthor_vma fields. + */ +struct panthor_coredump_vma_state { + u32 flags; + u64 iova; + u64 size; + + struct panthor_gem_object *bo; + u64 bo_offset; +}; + #ifdef CONFIG_DEV_COREDUMP =20 struct panthor_coredump * diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c b/drivers/gpu/drm/pantho= r/panthor_mmu.c index b39ea6acc6a9..a857a0dd1099 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.c +++ b/drivers/gpu/drm/panthor/panthor_mmu.c @@ -27,6 +27,7 @@ #include #include =20 +#include "panthor_coredump.h" #include "panthor_device.h" #include "panthor_gem.h" #include "panthor_heap.h" @@ -2694,6 +2695,48 @@ int panthor_vm_prepare_mapped_bos_resvs(struct drm_e= xec *exec, struct panthor_vm return drm_gpuvm_prepare_objects(&vm->base, exec, slot_count); } =20 +struct panthor_coredump_vma_state * +panthor_vm_capture_coredump(struct panthor_vm *vm, u32 *vma_count, gfp_t g= fp) +{ + struct drm_gpuva *gpuva; + u32 count; + + guard(mutex)(&vm->op_lock); + + count =3D 0; + drm_gpuvm_for_each_va(gpuva, &vm->base) + count++; + + struct panthor_coredump_vma_state *states =3D + kcalloc(count, sizeof(*states), gfp); + if (!states) { + *vma_count =3D 0; + return NULL; + } + + count =3D 0; + drm_gpuvm_for_each_va(gpuva, &vm->base) { + const struct panthor_vma *vma =3D + container_of(gpuva, struct panthor_vma, base); + struct panthor_coredump_vma_state *state =3D &states[count]; + + state->flags =3D vma->flags; + state->iova =3D vma->base.va.addr; + state->size =3D vma->base.va.range; + if (vma->base.gem.obj) { + state->bo =3D to_panthor_bo(vma->base.gem.obj); + state->bo_offset =3D vma->base.gem.offset; + drm_gem_object_get(&state->bo->base.base); + } + + count++; + } + + *vma_count =3D count; + + return states; +} + /** * panthor_mmu_unplug() - Unplug the MMU logic * @ptdev: Device. diff --git a/drivers/gpu/drm/panthor/panthor_mmu.h b/drivers/gpu/drm/pantho= r/panthor_mmu.h index fc274637114e..c775b92d0502 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.h +++ b/drivers/gpu/drm/panthor/panthor_mmu.h @@ -10,6 +10,7 @@ struct drm_exec; struct drm_sched_job; struct drm_memory_stats; +struct panthor_coredump_vma_state; struct panthor_gem_object; struct panthor_heap_pool; struct panthor_vm; @@ -97,6 +98,9 @@ void panthor_vm_update_resvs(struct panthor_vm *vm, struc= t drm_exec *exec, enum dma_resv_usage private_usage, enum dma_resv_usage extobj_usage); =20 +struct panthor_coredump_vma_state * +panthor_vm_capture_coredump(struct panthor_vm *vm, u32 *vma_count, gfp_t g= fp); + int panthor_mmu_pt_cache_init(void); void panthor_mmu_pt_cache_fini(void); =20 --=20 2.50.0.727.gbf7dc18ff4-goog From nobody Mon Oct 6 15:13:23 2025 Received: from mail-pf1-f181.google.com (mail-pf1-f181.google.com [209.85.210.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DAF891624EA for ; Sun, 20 Jul 2025 00:02:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752969740; cv=none; b=NlRon/b9DXJAYPwTqKjP50ZT43s6DMzsPcFaO2HcmThSaKHTw/ty04P872iGMPl+IxxEgU6vyzo1gWGFKLKOBm5lHmjcM9f8BbCe8HLBAWDcncGX3/CwH6YU7FjFfHtpFwDDC28Ueu10axQYXC9T4BU+j6HA+dvYzDMFpOclTCE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752969740; c=relaxed/simple; bh=euR2VwgCkRIWXyTzig6yI4wtQ7awSnyxjngi6S8bOig=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=r9FXZvrmA9PHEHnEFzpkMSae/9bOYSePYEshmRDmt6SMdBXb387hoMZX9ZEdsnFzAHvA0a5+Ar7bFN56YQ+P7A1Gr/kSJpCunFTaLfEyetFaCDkBfwy7sb2pNmxfGyvpGqjoASMdUjlwexEcqOXKDCpr2enx/3Br3tzpjhIUGho= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=dl09NeZp; arc=none smtp.client-ip=209.85.210.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dl09NeZp" Received: by mail-pf1-f181.google.com with SMTP id d2e1a72fcca58-7494999de5cso2217153b3a.3 for ; Sat, 19 Jul 2025 17:02:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752969738; x=1753574538; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=f0g8euYzh4PVKXcq3yGRqIgxnHvB130Kw4K5TtkFvGs=; b=dl09NeZpQLugQWg0fK/KZE3Vem4sM84FPRvcZ4egazCX7Mq/4bUMKjLrCDvbJyRXLV xjyD8jmNE/PlHU9j4ecTEhPq0LSWLc2k27ouepK07zUiiVmRvDxSCFe3hw0xuDYpVdsB LttCImjzqL0mrS70Ew1+98pzHK2IK27/DpWLPojyUxBajU3CwYijt7h7CVbGcohag/GL h1cMXl60lNOyOXrlktYkcobLcbPxZ6iP2MjvfD20IVfsK3uWDoTLOv/qshS5n9R7InLu gY7ehClje8BQkmeNJUsxnde9UGctPKW5qN2Hws0FwHeD9w13BRRX11g1O7l1imZdP9eu 7NxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752969738; x=1753574538; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=f0g8euYzh4PVKXcq3yGRqIgxnHvB130Kw4K5TtkFvGs=; b=a4IRxm0CqsrT/mVB4WSG/+7jU5OyY8zzNbeya59XI3pVHO7WVdMlg88iz6RQQ1f8El WX1dKKw51Xpha/yXPG5j2Wjn8Fjj08C7bL9F/lF8/ocMpQOrnvUQ72u0HM2EYbJmlnR+ kuavcVgu6T6P+Jt3zxFwC0deGdDoj9641IQzVKYv1Qtz2kjTdPPuFbKGbdkkgsMdDwM/ 3xX5n6VE9uz+lc/OHqCKsHYreu+XGbrxQ55Wk8HBW7krFEeMwvhjHZ3fR84coYYaVdrq AKuimqUzLOZEdjJ7M0w/F6bhsWEomrRY9u7v96SiVMaGwNc8zTkyJ746QOXltF6P3dI7 a8Wg== X-Forwarded-Encrypted: i=1; AJvYcCUXKpys52W/asa0SMySzNnNywOsmpuoO6RHegmJSH5vDrdfW07JWELT93SagDXPbsnqtTYZeT7K1AlLzmo=@vger.kernel.org X-Gm-Message-State: AOJu0YxoHOBCg2A9QQLoPP1ot7yDiJdGMY4MOhxokAatWBXtzm8Kn8aj K6m2WP2q6qkcsiBi5hWcDYH1idW5ZSG5PyEXPMSsdt8pbkxSfK7UtDGU X-Gm-Gg: ASbGnctIIx46wXdG0BvEY4LWkR/6IJnJeQiSgkzWF4z1F2vhcGbw8yX/qfZmBAhJ/zA EmqdCKrJKeopK+0yk0h5Vc7J/jw3cvvNd11YQWwNnAavpvkZZ2Q3gsudStuGUzQhJ/w5sBcaOmd eJriv0KmhHEy7LFtwJZCFcSyAYhqA3ecpR/JtsQsdVNPQyqTxThT5fUh2Bv5dGXX4jAJePFsDtG CBZzZbBIj+FkKtyRJVVqiJ9nNvmuCmRKQJDdKKUeIN3jGDdz6JCnd0Srv1cq0W6fAo+MjQKP3tI mgrWs7rPQATbUreY2EiJ5RfYaklzqjWH4Z9nxqyh7iHC1uDmyES8ZSf2JLvD9xvdMc2bwfMH5SI Cy9Xkl6I1Ro3hxowMRNkZoquEOhwo73Shrxw14RvCflBCzITueCsv X-Google-Smtp-Source: AGHT+IH0XzEBS9bAnV+/bToDYJIzXvhemGCeVDQs7hDsvK1S65xaiAr4na/7QXrJig0yY3pxRhrAMw== X-Received: by 2002:a05:6a00:9298:b0:73e:2dc5:a93c with SMTP id d2e1a72fcca58-756ea1ddca4mr24913433b3a.11.1752969738104; Sat, 19 Jul 2025 17:02:18 -0700 (PDT) Received: from localhost (111-252-5-201.dynamic-ip.hinet.net. [111.252.5.201]) by smtp.gmail.com with UTF8SMTPSA id d2e1a72fcca58-759cb678d9bsm3377982b3a.109.2025.07.19.17.02.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Jul 2025 17:02:17 -0700 (PDT) From: Chia-I Wu To: Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH 8/9] drm/panthor: check bo offset alignment in vm bind Date: Sat, 19 Jul 2025 17:01:45 -0700 Message-ID: <20250720000146.1405060-9-olvaffe@gmail.com> X-Mailer: git-send-email 2.50.0.727.gbf7dc18ff4-goog In-Reply-To: <20250720000146.1405060-1-olvaffe@gmail.com> References: <20250720000146.1405060-1-olvaffe@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Fail early from panthor_vm_bind_prepare_op_ctx instead of late from ops->map_pages. Signed-off-by: Chia-I Wu Reviewed-by: Boris Brezillon --- drivers/gpu/drm/panthor/panthor_mmu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c b/drivers/gpu/drm/pantho= r/panthor_mmu.c index a857a0dd1099..7862c99984b6 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.c +++ b/drivers/gpu/drm/panthor/panthor_mmu.c @@ -1206,7 +1206,7 @@ static int panthor_vm_prepare_map_op_ctx(struct panth= or_vm_op_ctx *op_ctx, (flags & DRM_PANTHOR_VM_BIND_OP_TYPE_MASK) !=3D DRM_PANTHOR_VM_BIND_O= P_TYPE_MAP) return -EINVAL; =20 - /* Make sure the VA and size are aligned and in-bounds. */ + /* Make sure the VA and size are in-bounds. */ if (size > bo->base.base.size || offset > bo->base.base.size - size) return -EINVAL; =20 @@ -2423,7 +2423,7 @@ panthor_vm_bind_prepare_op_ctx(struct drm_file *file, int ret; =20 /* Aligned on page size. */ - if (!IS_ALIGNED(op->va | op->size, vm_pgsz)) + if (!IS_ALIGNED(op->va | op->size | op->bo_offset, vm_pgsz)) return -EINVAL; =20 switch (op->flags & DRM_PANTHOR_VM_BIND_OP_TYPE_MASK) { --=20 2.50.0.727.gbf7dc18ff4-goog From nobody Mon Oct 6 15:13:23 2025 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0619E195811 for ; Sun, 20 Jul 2025 00:02:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752969743; cv=none; b=kUyJzstp+BxwadywLBM0ZPkfLPwrOB1wlCYJVu1oztr/SmSJgSus7bB8+O/jezOaJf30OMesYm+N/kjUrr9BW7NTRrJC58eHDA/hnxu6Wi5WzJ+x42SLfyqMq6ccz4P8pOoAEpkP8SDLcWGPgQMzspr9ZUFOqrSp2BkLKcC4Uxg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752969743; c=relaxed/simple; bh=gxOUApwD6a6hVLA4HlyQvzWI6akY3VWjxBUdWvLj68E=; h=From:To:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LRtDke4/VeglyjPwHbqgqFm3vI+W4c+WbdlVAP1m2sex+EJgNvQGpv8neE1CwLzI96JzFjAVV50TQrsyYVs04E8rTAxIZPATFHmaUN0NZyDALvQUSQt80vgVfGbBERNU7vzv9aO9j+IfKOmAoZPGI510wJFgpSfy1XiK0F2EoMw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=M2m8MpzV; arc=none smtp.client-ip=209.85.214.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="M2m8MpzV" Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-235ef62066eso38565045ad.3 for ; Sat, 19 Jul 2025 17:02:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752969740; x=1753574540; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=84kX2XXjEmF3ERut/9hhHijiazxXV8Nw4X0UoQzs5OY=; b=M2m8MpzVmzD6N5UgJXWT2fTbPEszK7cV6gQq7vXxaqxDNWcJi+PEGHBQW4poHBItbl p4eiXgwrIivXbM1P/460pa0qM5YWxVlLo0Wim+RoaxfxTWToj1H0lyMm7VmYD1OQlLAf sQzdSt1Zukw74XPlBXpIBXV1UFBe5Q+Rs1VfpobBlaVE8s32PCMF8EpsWFgmeWq1Tn9r qFQD0H6MqlKjkE3Acc5yWCkxRONnY5DH7sH0cDFjvDrvLOE7o7zdQ4eoATWdVLNE0ebE f6B0dFJXkmL3aCjeUyy+f2ifrSGUtdZvchYh/CPDVUi46hTHvI6Lubl3nC/DBypdBVLd H9sQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752969740; x=1753574540; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=84kX2XXjEmF3ERut/9hhHijiazxXV8Nw4X0UoQzs5OY=; b=AosfmW+jwniVkAXpo2yIfOYiEn2sr46VSko5ble2PR0fPS2mBmptaKTeJiQzel3JGF Yduf35btrr0kwzmQmj+spaJrbqOVT/k0iKTvAxGR0Avr9OlLBpoe/vMBY9pocPGqs9JE 2o+mjNUhMco78FydyoYuxu+I5l9IK97C7iQJWVKtVs1OnA/2MK+NB3Z6of0nszqoaxxR 78EekF0eVsOZfKccvmNkoijwos/q9MEWGs46J0UtgipSOzMMOTuVUUwV0wcPvA1xpvSx Bnn2agd0xR4Vk+rIxtDqfKLn4Ij5e2Jri2hPoRrz3N8Aiu5uIfVrjymSVQr2hHJ/jwTH C8Hw== X-Forwarded-Encrypted: i=1; AJvYcCUp8eYqCMIDRo6Yv+48OLS9IQ9EURz6u86RxWqbNKIZoGGb5sW/K4QgMWGSLOmJTTOMjGIy9u98jxI8P00=@vger.kernel.org X-Gm-Message-State: AOJu0YyYRgpd0R/Kp4/PDWaz7y9rkWS0PB/Gu1VZNno8BaQb0WEWPdJn l7Qhgr5Rto9DtH8UlUfzA+kK6iSZ+aNHr66768x8UMC31tzM3RmccTwy X-Gm-Gg: ASbGncvTX2nwDGofVHWfvWLHxHLhsuCdBDjPslHrSGSwNQWmX7SeqO/2lBOWp0I7jhV bkpL4YdEQ8fEFo024hN4r0EdlYIprrdqYzS/EVvT1sPZEC5M7MhpkK5uM6ijgEPGPhUT1U+4bKt ulDgdiZfg9b4Okulu1g0G36k1S52J5IvYX7sWmVHfxRj3gIq53lNqBLTPg8cFQoqYEgglpfyGcu HvUe9l5rdZL3ZWBPDlSyGWZKjsKHaYcGiAekWR5sX6Epxof8vI3iSwik38RWYeasgZvCmbpusc7 nP8RThTj2JwkYiFgQuiye+f7H8o5A/9Z2ITz57HlUUFQ9ZbXBTk+3u3JEb6ezmpnocUqxbGrpEK t/JImbApWy4Q7LHHDUMq62njGTmbWj5Rzd+2qvZ43r5l8hOJo7cc8 X-Google-Smtp-Source: AGHT+IGrdnG0OWJunucDj7yzg7E2yLnTs0LAdIZYU4n36wPhEob7h9C1DqLDA0cQ6ZgUGwr9uA3FPQ== X-Received: by 2002:a17:903:8c5:b0:23d:da20:1685 with SMTP id d9443c01a7336-23e302821f4mr152125815ad.4.1752969740108; Sat, 19 Jul 2025 17:02:20 -0700 (PDT) Received: from localhost (111-252-5-201.dynamic-ip.hinet.net. [111.252.5.201]) by smtp.gmail.com with UTF8SMTPSA id d9443c01a7336-23e3b708763sm33826375ad.230.2025.07.19.17.02.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Jul 2025 17:02:19 -0700 (PDT) From: Chia-I Wu To: Boris Brezillon , Steven Price , Liviu Dudau , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH 9/9] drm/panthor: add DRM_PANTHOR_VM_BIND_OP_MAP_DUMPABLE Date: Sat, 19 Jul 2025 17:01:46 -0700 Message-ID: <20250720000146.1405060-10-olvaffe@gmail.com> X-Mailer: git-send-email 2.50.0.727.gbf7dc18ff4-goog In-Reply-To: <20250720000146.1405060-1-olvaffe@gmail.com> References: <20250720000146.1405060-1-olvaffe@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When the flag is set, bo data is captured for devcoredump. Signed-off-by: Chia-I Wu --- drivers/gpu/drm/panthor/panthor_coredump.c | 36 ++++++++++++++++++++++ drivers/gpu/drm/panthor/panthor_drv.c | 3 +- drivers/gpu/drm/panthor/panthor_mmu.c | 7 +++-- include/uapi/drm/panthor_drm.h | 7 +++++ 4 files changed, 49 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_coredump.c b/drivers/gpu/drm/p= anthor/panthor_coredump.c index 5502452a5baa..db5695b38c2d 100644 --- a/drivers/gpu/drm/panthor/panthor_coredump.c +++ b/drivers/gpu/drm/panthor/panthor_coredump.c @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -99,6 +100,26 @@ static const char *reason_str(enum panthor_coredump_rea= son reason) } } =20 +static void print_bo(struct drm_printer *p, struct panthor_gem_object *bo, + u64 offset, u64 size) +{ + struct iosys_map map; + const u32 *vals; + u64 count; + char buf[ASCII85_BUFSZ]; + + if (drm_gem_vmap(&bo->base.base, &map)) + return; + + /* offset and size are aligned to panthor_vm_page_size, which is SZ_4K */ + vals =3D map.vaddr + offset; + count =3D size / sizeof(u32); + for (u64 i =3D 0; i < count; i++) + drm_puts(p, ascii85_encode(vals[i], buf)); + + drm_gem_vunmap(&bo->base.base, &map); +} + static void print_vma(struct drm_printer *p, const struct panthor_coredump_vma_state *vma, u32 vma_id, size_t *max_dyn_size) @@ -129,6 +150,21 @@ static void print_vma(struct drm_printer *p, } } } + + if (vma->flags & DRM_PANTHOR_VM_BIND_OP_MAP_DUMPABLE) { + drm_puts(p, " data: |\n"); + drm_puts(p, " "); + + /* bo data is dynamic */ + if (max_dyn_size) { + *max_dyn_size +=3D + vma->size / sizeof(u32) * (ASCII85_BUFSZ - 1); + } else { + print_bo(p, bo, vma->bo_offset, vma->size); + } + + drm_puts(p, "\n"); + } } =20 static void print_as(struct drm_printer *p, diff --git a/drivers/gpu/drm/panthor/panthor_drv.c b/drivers/gpu/drm/pantho= r/panthor_drv.c index 1116f2d2826e..6c4de1e73cd1 100644 --- a/drivers/gpu/drm/panthor/panthor_drv.c +++ b/drivers/gpu/drm/panthor/panthor_drv.c @@ -1608,6 +1608,7 @@ static void panthor_debugfs_init(struct drm_minor *mi= nor) * - 1.3 - adds DRM_PANTHOR_GROUP_STATE_INNOCENT flag * - 1.4 - adds DRM_IOCTL_PANTHOR_BO_SET_LABEL ioctl * - 1.5 - adds DRM_PANTHOR_SET_USER_MMIO_OFFSET ioctl + * - 1.6 - adds DRM_PANTHOR_VM_BIND_OP_MAP_DUMPABLE flag */ static const struct drm_driver panthor_drm_driver =3D { .driver_features =3D DRIVER_RENDER | DRIVER_GEM | DRIVER_SYNCOBJ | @@ -1621,7 +1622,7 @@ static const struct drm_driver panthor_drm_driver =3D= { .name =3D "panthor", .desc =3D "Panthor DRM driver", .major =3D 1, - .minor =3D 5, + .minor =3D 6, =20 .gem_create_object =3D panthor_gem_create_object, .gem_prime_import_sg_table =3D drm_gem_shmem_prime_import_sg_table, diff --git a/drivers/gpu/drm/panthor/panthor_mmu.c b/drivers/gpu/drm/pantho= r/panthor_mmu.c index 7862c99984b6..72b1b2799b65 100644 --- a/drivers/gpu/drm/panthor/panthor_mmu.c +++ b/drivers/gpu/drm/panthor/panthor_mmu.c @@ -2045,10 +2045,11 @@ static void panthor_vma_init(struct panthor_vma *vm= a, u32 flags) vma->flags =3D flags; } =20 -#define PANTHOR_VM_MAP_FLAGS \ +#define PANTHOR_VM_MAP_FLAGS \ (DRM_PANTHOR_VM_BIND_OP_MAP_READONLY | \ - DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC | \ - DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED) + DRM_PANTHOR_VM_BIND_OP_MAP_NOEXEC | \ + DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED | \ + DRM_PANTHOR_VM_BIND_OP_MAP_DUMPABLE) =20 static int panthor_gpuva_sm_step_map(struct drm_gpuva_op *op, void *priv) { diff --git a/include/uapi/drm/panthor_drm.h b/include/uapi/drm/panthor_drm.h index e1f43deb7eca..c4c5e38365e9 100644 --- a/include/uapi/drm/panthor_drm.h +++ b/include/uapi/drm/panthor_drm.h @@ -496,6 +496,13 @@ enum drm_panthor_vm_bind_op_flags { */ DRM_PANTHOR_VM_BIND_OP_MAP_UNCACHED =3D 1 << 2, =20 + /** + * @DRM_PANTHOR_VM_BIND_OP_MAP_DUMPABLE: Dump the VMA for devcoredump. + * + * Only valid with DRM_PANTHOR_VM_BIND_OP_TYPE_MAP. + */ + DRM_PANTHOR_VM_BIND_OP_MAP_DUMPABLE =3D 1 << 3, + /** * @DRM_PANTHOR_VM_BIND_OP_TYPE_MASK: Mask used to determine the type of = operation. */ --=20 2.50.0.727.gbf7dc18ff4-goog