actually fix gpu real hz
This commit is contained in:
1 parent
d8c6a86bb0
commit
a36d861e49
4 files changed
+26
-4
No files matched your search
@@ -52,7 +52,7 @@
|
||||
|
||||
namespace board {
|
||||
|
||||
u64 clkVirtAddr, dsiVirtAddr, apbVirtAddr, fuseVirtAddr, sysVirtAddr, actmonVirtAddr;
|
||||
u64 clkVirtAddr, dsiVirtAddr, apbVirtAddr, fuseVirtAddr, sysVirtAddr, actmonVirtAddr, gpuVirtAddr;
|
||||
|
||||
HocClkSocType gSocType;
|
||||
u8 gDramID;
|
||||
@@ -157,6 +157,9 @@ namespace board {
|
||||
ASSERT_RESULT_OK(rc, "QueryMemoryMapping (sys)");
|
||||
actmonVirtAddr = sysVirtAddr + 0x800;
|
||||
|
||||
rc = QueryMemoryMapping(&gpuVirtAddr, 0x57000000, 0x1000000);
|
||||
ASSERT_RESULT_OK(rc, "QueryMemoryMapping (gpu)");
|
||||
|
||||
FetchHardwareInfos();
|
||||
|
||||
Result nvCheck = 1;
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
#define HOSSVC_HAS_TC (hosversionAtLeast(5, 0, 0))
|
||||
|
||||
namespace board {
|
||||
extern u64 clkVirtAddr, dsiVirtAddr, apbVirtAddr, fuseVirtAddr, sysVirtAddr, actmonVirtAddr;
|
||||
extern u64 clkVirtAddr, dsiVirtAddr, apbVirtAddr, fuseVirtAddr, sysVirtAddr, actmonVirtAddr, gpuVirtAddr;
|
||||
extern HocClkSocType gSocType;
|
||||
extern u8 gDramID;
|
||||
extern HocClkConsoleType gConsoleType;
|
||||
|
||||
@@ -180,8 +180,27 @@ namespace board {
|
||||
switch (module) {
|
||||
case HocClkModule_CPU:
|
||||
return bpmp::GetSharedInfo()->freqCpu * 1000;
|
||||
case HocClkModule_GPU:
|
||||
return bpmp::GetSharedInfo()->freqGpu * 1000;
|
||||
case HocClkModule_GPU: {
|
||||
constexpr u32 ClkOutEnbX = 0x280;
|
||||
constexpr u32 RstDevicesX = 0x28C;
|
||||
constexpr u32 GpuBit = (1u << 24);
|
||||
|
||||
const bool gpuEnabled = (*reinterpret_cast<volatile u32 *>(clkVirtAddr + ClkOutEnbX) & GpuBit) &&
|
||||
!(*reinterpret_cast<volatile u32 *>(clkVirtAddr + RstDevicesX) & GpuBit);
|
||||
if (!gpuEnabled) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const u32 coeff = *reinterpret_cast<volatile u32 *>(gpuVirtAddr + 0x137004);
|
||||
const u32 divm = coeff & 0xFF;
|
||||
const u32 divn = (coeff >> 8) & 0xFF;
|
||||
const u32 divp = (coeff >> 16) & 0x3F;
|
||||
if (divm == 0 || divp == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return static_cast<u32>((static_cast<u64>(38400000) * divn) / (divm * divp) / 2);
|
||||
}
|
||||
case HocClkModule_MEM:
|
||||
return config::GetConfigValue(HocClkConfigValue_MemoryFrequencyMeasurementMode) == MemoryFrequencyMeasurementMode_PLL
|
||||
? pllmb::getRamClockRatePLLMB()
|
||||
|
||||
Reference in new issue
Block a user