amdsmu: Read and dump idlemask

Read and dump the SMU's idlemask value in `dev.amdsmu.0.idlemask`
sysctl.

The idlemask is used internally by AMD and its value is not documented
anywhere. This patch exposes it mainly to help AMD diagnose issues with
S0i3 entry on FreeBSD.

Reviewed by:	cem, emaste, kib, mckusick (mentor)
Approved by:	emaste, kib, mckusick (mentor)
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D51487
This commit is contained in:
Aymeric Wibo 2025-06-19 00:17:09 -04:00
parent 438cbb622c
commit f2de5a6dd7
No known key found for this signature in database
GPG key ID: 4CC540EC0B39382D
3 changed files with 17 additions and 0 deletions

View file

@ -281,6 +281,14 @@ amdsmu_dump_metrics(device_t dev)
return (0);
}
static void
amdsmu_fetch_idlemask(device_t dev)
{
struct amdsmu_softc *sc = device_get_softc(dev);
sc->idlemask = amdsmu_read4(sc, SMU_REG_IDLEMASK);
}
static int
amdsmu_attach(device_t dev)
{
@ -407,6 +415,13 @@ amdsmu_attach(device_t dev)
if (err != 0)
goto err_dump;
/* Get idlemask & add sysctl. */
amdsmu_fetch_idlemask(dev);
SYSCTL_ADD_U32(sc->sysctlctx, SYSCTL_CHILDREN(sc->sysctlnode), OID_AUTO,
"idlemask", CTLFLAG_RD, &sc->idlemask, 0, "SMU idlemask. This "
"value is not documented - only used to help AMD internally debug "
"issues");
return (0);
err_dump:
bus_space_unmap(sc->bus_tag, sc->reg_space, SMU_MEM_SIZE);

View file

@ -77,6 +77,7 @@ struct amdsmu_softc {
bus_space_handle_t metrics_space;
struct amdsmu_metrics metrics;
uint32_t idlemask;
};
static inline uint32_t

View file

@ -32,6 +32,7 @@
#define SMU_REG_MESSAGE 0x538
#define SMU_REG_RESPONSE 0x980
#define SMU_REG_ARGUMENT 0x9BC
#define SMU_REG_IDLEMASK 0xD14
enum amdsmu_res {
SMU_RES_WAIT = 0x00,