mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-07-17 02:59:58 +02:00
powercap: intel_rapl_tpmi: Fix System Domain probing
Only domain root packages can enumerate System (Psys) domain.
Whether a package is domain root or not is described in the Bit 0 of the
Domain Info register.
Add support for Domain Info register and fix the System domain probing
accordingly.
Fixes: 9eef7f9da9
("powercap: intel_rapl: Introduce RAPL TPMI interface driver")
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Cc: 6.5+ <stable@vger.kernel.org> # 6.5+
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
faa9130ce7
commit
903eb9fb85
|
@ -131,6 +131,12 @@ static void trp_release(struct tpmi_rapl_package *trp)
|
||||||
mutex_unlock(&tpmi_rapl_lock);
|
mutex_unlock(&tpmi_rapl_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Bit 0 of TPMI_RAPL_REG_DOMAIN_INFO indicates if the current package is a domain
|
||||||
|
* root or not. Only domain root packages can enumerate System (Psys) Domain.
|
||||||
|
*/
|
||||||
|
#define TPMI_RAPL_DOMAIN_ROOT BIT(0)
|
||||||
|
|
||||||
static int parse_one_domain(struct tpmi_rapl_package *trp, u32 offset)
|
static int parse_one_domain(struct tpmi_rapl_package *trp, u32 offset)
|
||||||
{
|
{
|
||||||
u8 tpmi_domain_version;
|
u8 tpmi_domain_version;
|
||||||
|
@ -140,6 +146,7 @@ static int parse_one_domain(struct tpmi_rapl_package *trp, u32 offset)
|
||||||
enum rapl_domain_reg_id reg_id;
|
enum rapl_domain_reg_id reg_id;
|
||||||
int tpmi_domain_size, tpmi_domain_flags;
|
int tpmi_domain_size, tpmi_domain_flags;
|
||||||
u64 tpmi_domain_header = readq(trp->base + offset);
|
u64 tpmi_domain_header = readq(trp->base + offset);
|
||||||
|
u64 tpmi_domain_info;
|
||||||
|
|
||||||
/* Domain Parent bits are ignored for now */
|
/* Domain Parent bits are ignored for now */
|
||||||
tpmi_domain_version = tpmi_domain_header & 0xff;
|
tpmi_domain_version = tpmi_domain_header & 0xff;
|
||||||
|
@ -170,6 +177,13 @@ static int parse_one_domain(struct tpmi_rapl_package *trp, u32 offset)
|
||||||
domain_type = RAPL_DOMAIN_PACKAGE;
|
domain_type = RAPL_DOMAIN_PACKAGE;
|
||||||
break;
|
break;
|
||||||
case TPMI_RAPL_DOMAIN_SYSTEM:
|
case TPMI_RAPL_DOMAIN_SYSTEM:
|
||||||
|
if (!(tpmi_domain_flags & BIT(TPMI_RAPL_REG_DOMAIN_INFO))) {
|
||||||
|
pr_warn(FW_BUG "System domain must support Domain Info register\n");
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
tpmi_domain_info = readq(trp->base + offset + TPMI_RAPL_REG_DOMAIN_INFO);
|
||||||
|
if (!(tpmi_domain_info & TPMI_RAPL_DOMAIN_ROOT))
|
||||||
|
return 0;
|
||||||
domain_type = RAPL_DOMAIN_PLATFORM;
|
domain_type = RAPL_DOMAIN_PLATFORM;
|
||||||
break;
|
break;
|
||||||
case TPMI_RAPL_DOMAIN_MEMORY:
|
case TPMI_RAPL_DOMAIN_MEMORY:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user