drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c
Source file repositories/reference/linux-study-clean/drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpu/drm/amd/amdgpu/mxgpu_ai.c- Extension
.c- Size
- 14173 bytes
- Lines
- 482
- 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.hnbio/nbio_6_1_offset.hnbio/nbio_6_1_sh_mask.hgc/gc_9_0_offset.hgc/gc_9_0_sh_mask.hmp/mp_9_0_offset.hsoc15.hvega10_ih.hsoc15_common.hmxgpu_ai.hamdgpu_reset.h
Detected Declarations
function filesfunction xgpu_ai_mailbox_set_validfunction xgpu_ai_mailbox_peek_msgfunction xgpu_ai_mailbox_rcv_msgfunction xgpu_ai_peek_ackfunction xgpu_ai_poll_ackfunction xgpu_ai_poll_msgfunction xgpu_ai_mailbox_trans_msgfunction xgpu_ai_send_access_requestsfunction xgpu_ai_request_resetfunction xgpu_ai_request_full_gpu_accessfunction xgpu_ai_release_full_gpu_accessfunction xgpu_ai_mailbox_ack_irqfunction xgpu_ai_set_mailbox_ack_irqfunction xgpu_ai_ready_to_resetfunction xgpu_ai_wait_resetfunction xgpu_ai_mailbox_flr_workfunction xgpu_ai_mailbox_req_bad_pages_workfunction xgpu_ai_mailbox_handle_bad_pages_workfunction xgpu_ai_set_mailbox_rcv_irqfunction xgpu_ai_mailbox_rcv_irqfunction xgpu_ai_mailbox_set_irq_funcsfunction xgpu_ai_mailbox_add_irq_idfunction xgpu_ai_mailbox_get_irqfunction xgpu_ai_mailbox_put_irqfunction xgpu_ai_request_init_datafunction xgpu_ai_ras_poison_handlerfunction xgpu_ai_rcvd_ras_intr
Annotated Snippet
static uint8_t xgpu_ai_peek_ack(struct amdgpu_device *adev) {
return RREG8(AI_MAIBOX_CONTROL_TRN_OFFSET_BYTE) & 2;
}
static int xgpu_ai_poll_ack(struct amdgpu_device *adev)
{
int timeout = AI_MAILBOX_POLL_ACK_TIMEDOUT;
u8 reg;
do {
reg = RREG8(AI_MAIBOX_CONTROL_TRN_OFFSET_BYTE);
if (reg & 2)
return 0;
mdelay(5);
timeout -= 5;
} while (timeout > 1);
dev_err(adev->dev, "Doesn't get TRN_MSG_ACK from pf in %d msec\n", AI_MAILBOX_POLL_ACK_TIMEDOUT);
return -ETIME;
}
static int xgpu_ai_poll_msg(struct amdgpu_device *adev, enum idh_event event)
{
int r, timeout = AI_MAILBOX_POLL_MSG_TIMEDOUT;
do {
r = xgpu_ai_mailbox_rcv_msg(adev, event);
if (!r)
return 0;
msleep(10);
timeout -= 10;
} while (timeout > 1);
dev_err(adev->dev, "Doesn't get msg:%d from pf, error=%d\n", event, r);
return -ETIME;
}
static void xgpu_ai_mailbox_trans_msg (struct amdgpu_device *adev,
enum idh_request req, u32 data1, u32 data2, u32 data3) {
u32 reg;
int r;
uint8_t trn;
/* IMPORTANT:
* clear TRN_MSG_VALID valid to clear host's RCV_MSG_ACK
* and with host's RCV_MSG_ACK cleared hw automatically clear host's RCV_MSG_ACK
* which lead to VF's TRN_MSG_ACK cleared, otherwise below xgpu_ai_poll_ack()
* will return immediatly
*/
do {
xgpu_ai_mailbox_set_valid(adev, false);
trn = xgpu_ai_peek_ack(adev);
if (trn) {
dev_err_ratelimited(adev->dev, "trn=%x ACK should not assert! wait again !\n", trn);
msleep(1);
}
} while(trn);
reg = RREG32_NO_KIQ(SOC15_REG_OFFSET(NBIO, 0,
mmBIF_BX_PF0_MAILBOX_MSGBUF_TRN_DW0));
reg = REG_SET_FIELD(reg, BIF_BX_PF0_MAILBOX_MSGBUF_TRN_DW0,
MSGBUF_DATA, req);
WREG32_NO_KIQ(SOC15_REG_OFFSET(NBIO, 0, mmBIF_BX_PF0_MAILBOX_MSGBUF_TRN_DW0),
reg);
WREG32_NO_KIQ(SOC15_REG_OFFSET(NBIO, 0, mmBIF_BX_PF0_MAILBOX_MSGBUF_TRN_DW1),
data1);
WREG32_NO_KIQ(SOC15_REG_OFFSET(NBIO, 0, mmBIF_BX_PF0_MAILBOX_MSGBUF_TRN_DW2),
data2);
WREG32_NO_KIQ(SOC15_REG_OFFSET(NBIO, 0, mmBIF_BX_PF0_MAILBOX_MSGBUF_TRN_DW3),
data3);
xgpu_ai_mailbox_set_valid(adev, true);
/* start to poll ack */
r = xgpu_ai_poll_ack(adev);
if (r)
dev_err(adev->dev, "Doesn't get ack from pf, continue\n");
xgpu_ai_mailbox_set_valid(adev, false);
}
static int xgpu_ai_send_access_requests(struct amdgpu_device *adev,
enum idh_request req)
{
int r;
Annotation
- Immediate include surface: `amdgpu.h`, `nbio/nbio_6_1_offset.h`, `nbio/nbio_6_1_sh_mask.h`, `gc/gc_9_0_offset.h`, `gc/gc_9_0_sh_mask.h`, `mp/mp_9_0_offset.h`, `soc15.h`, `vega10_ih.h`.
- Detected declarations: `function files`, `function xgpu_ai_mailbox_set_valid`, `function xgpu_ai_mailbox_peek_msg`, `function xgpu_ai_mailbox_rcv_msg`, `function xgpu_ai_peek_ack`, `function xgpu_ai_poll_ack`, `function xgpu_ai_poll_msg`, `function xgpu_ai_mailbox_trans_msg`, `function xgpu_ai_send_access_requests`, `function xgpu_ai_request_reset`.
- 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.