mirror of
https://github.com/torvalds/linux.git
synced 2026-06-05 13:06:59 +02:00
drm/xe/guc: Add support GuC MMIO send / recv
SRIOV has a use case of GuC MMIO send / recv, add a function for it. Signed-off-by: Matthew Brost <matthew.brost@intel.com> Reviewed-by: Philippe Lecluse <philippe.lecluse1@gmail.com> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
This commit is contained in:
parent
f900725af8
commit
5e37266307
|
|
@ -630,7 +630,8 @@ int xe_guc_auth_huc(struct xe_guc *guc, u32 rsa_addr)
|
|||
#define MEDIA_SOFT_SCRATCH(n) _MMIO(0x190310 + (n) * 4)
|
||||
#define MEDIA_SOFT_SCRATCH_COUNT 4
|
||||
|
||||
int xe_guc_mmio_send(struct xe_guc *guc, const u32 *request, u32 len)
|
||||
int xe_guc_mmio_send_recv(struct xe_guc *guc, const u32 *request,
|
||||
u32 len, u32 *response_buf)
|
||||
{
|
||||
struct xe_device *xe = guc_to_xe(guc);
|
||||
struct xe_gt *gt = guc_to_gt(guc);
|
||||
|
|
@ -640,6 +641,7 @@ int xe_guc_mmio_send(struct xe_guc *guc, const u32 *request, u32 len)
|
|||
int ret;
|
||||
int i;
|
||||
|
||||
BUILD_BUG_ON(GEN11_SOFT_SCRATCH_COUNT != MEDIA_SOFT_SCRATCH_COUNT);
|
||||
XE_BUG_ON(guc->ct.enabled);
|
||||
XE_BUG_ON(!len);
|
||||
XE_BUG_ON(len > GEN11_SOFT_SCRATCH_COUNT);
|
||||
|
|
@ -723,10 +725,24 @@ int xe_guc_mmio_send(struct xe_guc *guc, const u32 *request, u32 len)
|
|||
return -EPROTO;
|
||||
}
|
||||
|
||||
/* Just copy entire possible message response */
|
||||
if (response_buf) {
|
||||
response_buf[0] = header;
|
||||
|
||||
for (i = 1; i < GEN11_SOFT_SCRATCH_COUNT; i++)
|
||||
response_buf[i] =
|
||||
xe_mmio_read32(gt, reply_reg + i * sizeof(u32));
|
||||
}
|
||||
|
||||
/* Use data from the GuC response as our return value */
|
||||
return FIELD_GET(GUC_HXG_RESPONSE_MSG_0_DATA0, header);
|
||||
}
|
||||
|
||||
int xe_guc_mmio_send(struct xe_guc *guc, const u32 *request, u32 len)
|
||||
{
|
||||
return xe_guc_mmio_send_recv(guc, request, len, NULL);
|
||||
}
|
||||
|
||||
static int guc_self_cfg(struct xe_guc *guc, u16 key, u16 len, u64 val)
|
||||
{
|
||||
u32 request[HOST2GUC_SELF_CFG_REQUEST_MSG_LEN] = {
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@ int xe_guc_suspend(struct xe_guc *guc);
|
|||
void xe_guc_notify(struct xe_guc *guc);
|
||||
int xe_guc_auth_huc(struct xe_guc *guc, u32 rsa_addr);
|
||||
int xe_guc_mmio_send(struct xe_guc *guc, const u32 *request, u32 len);
|
||||
int xe_guc_mmio_send_recv(struct xe_guc *guc, const u32 *request, u32 len,
|
||||
u32 *response_buf);
|
||||
int xe_guc_self_cfg32(struct xe_guc *guc, u16 key, u32 val);
|
||||
int xe_guc_self_cfg64(struct xe_guc *guc, u16 key, u64 val);
|
||||
void xe_guc_irq_handler(struct xe_guc *guc, const u16 iir);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user