drivers/gpu/drm/imagination/pvr_dump.c
Source file repositories/reference/linux-study-clean/drivers/gpu/drm/imagination/pvr_dump.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpu/drm/imagination/pvr_dump.c- Extension
.c- Size
- 3517 bytes
- Lines
- 114
- Domain
- Driver Families
- Bucket
- drivers/gpu
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
pvr_device.hpvr_dump.hpvr_rogue_fwif.hdrm/drm_print.hlinux/types.h
Detected Declarations
function get_reset_reason_descfunction get_dm_namefunction pvr_dump_context_reset_notification
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0 OR MIT
/* Copyright (c) 2026 Imagination Technologies Ltd. */
#include "pvr_device.h"
#include "pvr_dump.h"
#include "pvr_rogue_fwif.h"
#include <drm/drm_print.h>
#include <linux/types.h>
static const char *
get_reset_reason_desc(enum rogue_context_reset_reason reason)
{
switch (reason) {
case ROGUE_CONTEXT_RESET_REASON_NONE:
return "None";
case ROGUE_CONTEXT_RESET_REASON_GUILTY_LOCKUP:
return "Guilty lockup";
case ROGUE_CONTEXT_RESET_REASON_INNOCENT_LOCKUP:
return "Innocent lockup";
case ROGUE_CONTEXT_RESET_REASON_GUILTY_OVERRUNING:
return "Guilty overrunning";
case ROGUE_CONTEXT_RESET_REASON_INNOCENT_OVERRUNING:
return "Innocent overrunning";
case ROGUE_CONTEXT_RESET_REASON_HARD_CONTEXT_SWITCH:
return "Hard context switch";
case ROGUE_CONTEXT_RESET_REASON_WGP_CHECKSUM:
return "CDM Mission/safety checksum mismatch";
case ROGUE_CONTEXT_RESET_REASON_TRP_CHECKSUM:
return "TRP checksum mismatch";
case ROGUE_CONTEXT_RESET_REASON_GPU_ECC_OK:
return "GPU ECC error (corrected, OK)";
case ROGUE_CONTEXT_RESET_REASON_GPU_ECC_HWR:
return "GPU ECC error (uncorrected, HWR)";
case ROGUE_CONTEXT_RESET_REASON_FW_ECC_OK:
return "Firmware ECC error (corrected, OK)";
case ROGUE_CONTEXT_RESET_REASON_FW_ECC_ERR:
return "Firmware ECC error (uncorrected, ERR)";
case ROGUE_CONTEXT_RESET_REASON_FW_WATCHDOG:
return "Firmware watchdog";
case ROGUE_CONTEXT_RESET_REASON_FW_PAGEFAULT:
return "Firmware pagefault";
case ROGUE_CONTEXT_RESET_REASON_FW_EXEC_ERR:
return "Firmware execution error";
case ROGUE_CONTEXT_RESET_REASON_HOST_WDG_FW_ERR:
return "Host watchdog";
case ROGUE_CONTEXT_GEOM_OOM_DISABLED:
return "Geometry OOM disabled";
default:
return "Unknown";
}
}
static const char *
get_dm_name(u32 dm)
{
switch (dm) {
case PVR_FWIF_DM_GP:
return "General purpose";
/* PVR_FWIF_DM_TDM has the same index, but is discriminated by a device feature */
case PVR_FWIF_DM_2D:
return "2D or TDM";
case PVR_FWIF_DM_GEOM:
return "Geometry";
case PVR_FWIF_DM_FRAG:
return "Fragment";
case PVR_FWIF_DM_CDM:
return "Compute";
case PVR_FWIF_DM_RAY:
return "Raytracing";
case PVR_FWIF_DM_GEOM2:
return "Geometry 2";
case PVR_FWIF_DM_GEOM3:
return "Geometry 3";
case PVR_FWIF_DM_GEOM4:
return "Geometry 4";
default:
return "Unknown";
}
}
/**
* pvr_dump_context_reset_notification() - Handle context reset notification from FW
* @pvr_dev: Device pointer.
* @data: Data provided by FW.
*
* This will decode the data structure provided by FW and print the results via drm_info().
*/
Annotation
- Immediate include surface: `pvr_device.h`, `pvr_dump.h`, `pvr_rogue_fwif.h`, `drm/drm_print.h`, `linux/types.h`.
- Detected declarations: `function get_reset_reason_desc`, `function get_dm_name`, `function pvr_dump_context_reset_notification`.
- Atlas domain: Driver Families / drivers/gpu.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.