drivers/gpu/drm/amd/amdgpu/mxgpu_vi.c
Source file repositories/reference/linux-study-clean/drivers/gpu/drm/amd/amdgpu/mxgpu_vi.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpu/drm/amd/amdgpu/mxgpu_vi.c- Extension
.c- Size
- 21444 bytes
- Lines
- 634
- 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
amdgpu.hvi.hbif/bif_5_0_d.hbif/bif_5_0_sh_mask.hvid.hgca/gfx_8_0_d.hgca/gfx_8_0_sh_mask.hgmc_v8_0.hgfx_v8_0.hsdma_v3_0.htonga_ih.hgmc/gmc_8_2_d.hgmc/gmc_8_2_sh_mask.hoss/oss_3_0_d.hoss/oss_3_0_sh_mask.hdce/dce_10_0_d.hdce/dce_10_0_sh_mask.hsmu/smu_7_1_3_d.hmxgpu_vi.hamdgpu_reset.h
Detected Declarations
function xgpu_vi_init_golden_registersfunction xgpu_vi_mailbox_send_ackfunction xgpu_vi_mailbox_set_validfunction xgpu_vi_mailbox_trans_msgfunction xgpu_vi_mailbox_rcv_msgfunction xgpu_vi_poll_ackfunction xgpu_vi_poll_msgfunction xgpu_vi_send_access_requestsfunction xgpu_vi_request_resetfunction xgpu_vi_wait_reset_cmplfunction xgpu_vi_request_full_gpu_accessfunction xgpu_vi_release_full_gpu_accessfunction xgpu_vi_mailbox_ack_irqfunction xgpu_vi_set_mailbox_ack_irqfunction xgpu_vi_mailbox_flr_workfunction xgpu_vi_set_mailbox_rcv_irqfunction xgpu_vi_mailbox_rcv_irqfunction xgpu_vi_mailbox_set_irq_funcsfunction xgpu_vi_mailbox_add_irq_idfunction xgpu_vi_mailbox_get_irqfunction xgpu_vi_mailbox_put_irq
Annotated Snippet
if (timeout <= 0) {
pr_err("RCV_MSG_VALID is not cleared\n");
break;
}
mdelay(1);
timeout -= 1;
reg = RREG32_NO_KIQ(mmMAILBOX_CONTROL);
}
}
static void xgpu_vi_mailbox_set_valid(struct amdgpu_device *adev, bool val)
{
u32 reg;
reg = RREG32_NO_KIQ(mmMAILBOX_CONTROL);
reg = REG_SET_FIELD(reg, MAILBOX_CONTROL,
TRN_MSG_VALID, val ? 1 : 0);
WREG32_NO_KIQ(mmMAILBOX_CONTROL, reg);
}
static void xgpu_vi_mailbox_trans_msg(struct amdgpu_device *adev,
enum idh_request req)
{
u32 reg;
reg = RREG32_NO_KIQ(mmMAILBOX_MSGBUF_TRN_DW0);
reg = REG_SET_FIELD(reg, MAILBOX_MSGBUF_TRN_DW0,
MSGBUF_DATA, req);
WREG32_NO_KIQ(mmMAILBOX_MSGBUF_TRN_DW0, reg);
xgpu_vi_mailbox_set_valid(adev, true);
}
static int xgpu_vi_mailbox_rcv_msg(struct amdgpu_device *adev,
enum idh_event event)
{
u32 reg;
u32 mask = REG_FIELD_MASK(MAILBOX_CONTROL, RCV_MSG_VALID);
/* workaround: host driver doesn't set VALID for CMPL now */
if (event != IDH_FLR_NOTIFICATION_CMPL) {
reg = RREG32_NO_KIQ(mmMAILBOX_CONTROL);
if (!(reg & mask))
return -ENOENT;
}
reg = RREG32_NO_KIQ(mmMAILBOX_MSGBUF_RCV_DW0);
if (reg != event)
return -ENOENT;
/* send ack to PF */
xgpu_vi_mailbox_send_ack(adev);
return 0;
}
static int xgpu_vi_poll_ack(struct amdgpu_device *adev)
{
int r = 0, timeout = VI_MAILBOX_TIMEDOUT;
u32 mask = REG_FIELD_MASK(MAILBOX_CONTROL, TRN_MSG_ACK);
u32 reg;
reg = RREG32_NO_KIQ(mmMAILBOX_CONTROL);
while (!(reg & mask)) {
if (timeout <= 0) {
pr_err("Doesn't get ack from pf.\n");
r = -ETIME;
break;
}
mdelay(5);
timeout -= 5;
reg = RREG32_NO_KIQ(mmMAILBOX_CONTROL);
}
return r;
}
static int xgpu_vi_poll_msg(struct amdgpu_device *adev, enum idh_event event)
{
int r = 0, timeout = VI_MAILBOX_TIMEDOUT;
r = xgpu_vi_mailbox_rcv_msg(adev, event);
while (r) {
if (timeout <= 0) {
pr_err("Doesn't get ack from pf.\n");
r = -ETIME;
break;
}
Annotation
- Immediate include surface: `amdgpu.h`, `vi.h`, `bif/bif_5_0_d.h`, `bif/bif_5_0_sh_mask.h`, `vid.h`, `gca/gfx_8_0_d.h`, `gca/gfx_8_0_sh_mask.h`, `gmc_v8_0.h`.
- Detected declarations: `function xgpu_vi_init_golden_registers`, `function xgpu_vi_mailbox_send_ack`, `function xgpu_vi_mailbox_set_valid`, `function xgpu_vi_mailbox_trans_msg`, `function xgpu_vi_mailbox_rcv_msg`, `function xgpu_vi_poll_ack`, `function xgpu_vi_poll_msg`, `function xgpu_vi_send_access_requests`, `function xgpu_vi_request_reset`, `function xgpu_vi_wait_reset_cmpl`.
- 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.