Skip to content
This repository was archived by the owner on Nov 8, 2023. It is now read-only.

Commit 903eb9f

Browse files
zhang-ruirafaeljw
authored andcommitted
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: 9eef7f9 ("powercap: intel_rapl: Introduce RAPL TPMI interface driver") Signed-off-by: Zhang Rui <[email protected]> Cc: 6.5+ <[email protected]> # 6.5+ Signed-off-by: Rafael J. Wysocki <[email protected]>
1 parent faa9130 commit 903eb9f

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

drivers/powercap/intel_rapl_tpmi.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,12 @@ static void trp_release(struct tpmi_rapl_package *trp)
131131
mutex_unlock(&tpmi_rapl_lock);
132132
}
133133

134+
/*
135+
* Bit 0 of TPMI_RAPL_REG_DOMAIN_INFO indicates if the current package is a domain
136+
* root or not. Only domain root packages can enumerate System (Psys) Domain.
137+
*/
138+
#define TPMI_RAPL_DOMAIN_ROOT BIT(0)
139+
134140
static int parse_one_domain(struct tpmi_rapl_package *trp, u32 offset)
135141
{
136142
u8 tpmi_domain_version;
@@ -140,6 +146,7 @@ static int parse_one_domain(struct tpmi_rapl_package *trp, u32 offset)
140146
enum rapl_domain_reg_id reg_id;
141147
int tpmi_domain_size, tpmi_domain_flags;
142148
u64 tpmi_domain_header = readq(trp->base + offset);
149+
u64 tpmi_domain_info;
143150

144151
/* Domain Parent bits are ignored for now */
145152
tpmi_domain_version = tpmi_domain_header & 0xff;
@@ -170,6 +177,13 @@ static int parse_one_domain(struct tpmi_rapl_package *trp, u32 offset)
170177
domain_type = RAPL_DOMAIN_PACKAGE;
171178
break;
172179
case TPMI_RAPL_DOMAIN_SYSTEM:
180+
if (!(tpmi_domain_flags & BIT(TPMI_RAPL_REG_DOMAIN_INFO))) {
181+
pr_warn(FW_BUG "System domain must support Domain Info register\n");
182+
return -ENODEV;
183+
}
184+
tpmi_domain_info = readq(trp->base + offset + TPMI_RAPL_REG_DOMAIN_INFO);
185+
if (!(tpmi_domain_info & TPMI_RAPL_DOMAIN_ROOT))
186+
return 0;
173187
domain_type = RAPL_DOMAIN_PLATFORM;
174188
break;
175189
case TPMI_RAPL_DOMAIN_MEMORY:

0 commit comments

Comments
 (0)