1*4882a593Smuzhiyun // SPDX-License-Identifier: MIT 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright © 2020 Intel Corporation 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #include <asm/msr.h> 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #include "librapl.h" 9*4882a593Smuzhiyun librapl_energy_uJ(void)10*4882a593Smuzhiyunu64 librapl_energy_uJ(void) 11*4882a593Smuzhiyun { 12*4882a593Smuzhiyun unsigned long long power; 13*4882a593Smuzhiyun u32 units; 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun if (rdmsrl_safe(MSR_RAPL_POWER_UNIT, &power)) 16*4882a593Smuzhiyun return 0; 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun units = (power & 0x1f00) >> 8; 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun if (rdmsrl_safe(MSR_PP1_ENERGY_STATUS, &power)) 21*4882a593Smuzhiyun return 0; 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun return (1000000 * power) >> units; /* convert to uJ */ 24*4882a593Smuzhiyun } 25