mirror of https://github.com/torvalds/linux.git
drm/xe/pcode: Rework error mapping
The sparse array used for error decoding from is unnecessarily big. It should be better handled by a switch statement that will also allow us to more easily improve this code. Add a CASE_ERR() macro to keep the table compact and use it instead of the 256-entries array, which saves some space: $ bloat-o-meter xe_pcode.o.old xe_pcode.o add/remove: 0/1 grow/shrink: 2/0 up/down: 190/-4096 (-3906) Function old new delta __pcode_mailbox_rw 363 465 +102 __pcode_mailbox_rw.cold 58 146 +88 err_decode 4096 - -4096 Total: Before=7890, After=3984, chg -49.51% Reviewed-by: Raag Jadav <raag.jadav@intel.com> Link: https://patch.msgid.link/20251110-pcode-errmap-v2-1-cb18c8f54238@intel.com Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
This commit is contained in:
parent
53361aa64f
commit
459a0ce8dc
|
|
@ -32,27 +32,39 @@
|
|||
|
||||
static int pcode_mailbox_status(struct xe_tile *tile)
|
||||
{
|
||||
const char *err_str;
|
||||
int err_decode;
|
||||
u32 err;
|
||||
static const struct pcode_err_decode err_decode[] = {
|
||||
[PCODE_ILLEGAL_CMD] = {-ENXIO, "Illegal Command"},
|
||||
[PCODE_TIMEOUT] = {-ETIMEDOUT, "Timed out"},
|
||||
[PCODE_ILLEGAL_DATA] = {-EINVAL, "Illegal Data"},
|
||||
[PCODE_ILLEGAL_SUBCOMMAND] = {-ENXIO, "Illegal Subcommand"},
|
||||
[PCODE_LOCKED] = {-EBUSY, "PCODE Locked"},
|
||||
[PCODE_GT_RATIO_OUT_OF_RANGE] = {-EOVERFLOW,
|
||||
"GT ratio out of range"},
|
||||
[PCODE_REJECTED] = {-EACCES, "PCODE Rejected"},
|
||||
[PCODE_ERROR_MASK] = {-EPROTO, "Unknown"},
|
||||
};
|
||||
|
||||
#define CASE_ERR(_err, _err_decode, _err_str) \
|
||||
case _err: \
|
||||
err_decode = _err_decode; \
|
||||
err_str = _err_str; \
|
||||
break
|
||||
|
||||
err = xe_mmio_read32(&tile->mmio, PCODE_MAILBOX) & PCODE_ERROR_MASK;
|
||||
switch (err) {
|
||||
CASE_ERR(PCODE_ILLEGAL_CMD, -ENXIO, "Illegal Command");
|
||||
CASE_ERR(PCODE_TIMEOUT, -ETIMEDOUT, "Timed out");
|
||||
CASE_ERR(PCODE_ILLEGAL_DATA, -EINVAL, "Illegal Data");
|
||||
CASE_ERR(PCODE_ILLEGAL_SUBCOMMAND, -ENXIO, "Illegal Subcommand");
|
||||
CASE_ERR(PCODE_LOCKED, -EBUSY, "PCODE Locked");
|
||||
CASE_ERR(PCODE_GT_RATIO_OUT_OF_RANGE, -EOVERFLOW, "GT ratio out of range");
|
||||
CASE_ERR(PCODE_REJECTED, -EACCES, "PCODE Rejected");
|
||||
default:
|
||||
err_decode = -EPROTO;
|
||||
err_str = "Unknown";
|
||||
}
|
||||
|
||||
if (err) {
|
||||
drm_err(&tile_to_xe(tile)->drm, "PCODE Mailbox failed: %d %s", err,
|
||||
err_decode[err].str ?: "Unknown");
|
||||
return err_decode[err].errno ?: -EPROTO;
|
||||
drm_err(&tile_to_xe(tile)->drm, "PCODE Mailbox failed: %d %s",
|
||||
err_decode, err_str);
|
||||
|
||||
return err_decode;
|
||||
}
|
||||
|
||||
return 0;
|
||||
#undef CASE_ERR
|
||||
}
|
||||
|
||||
static int __pcode_mailbox_rw(struct xe_tile *tile, u32 mbox, u32 *data0, u32 *data1,
|
||||
|
|
|
|||
|
|
@ -92,9 +92,3 @@
|
|||
#define BMG_PCIE_CAP XE_REG(0x138340)
|
||||
#define LINK_DOWNGRADE REG_GENMASK(1, 0)
|
||||
#define DOWNGRADE_CAPABLE 2
|
||||
|
||||
struct pcode_err_decode {
|
||||
int errno;
|
||||
const char *str;
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue