Commit 450ca7f6 authored by Pu Wen's avatar Pu Wen
Browse files

x86/cpu: Get LLC ID for Hygon family 18h model 5h

hygon inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I7DX6V


CVE: NA

---------------------------

Add support to calculate LLC ID from the number of threads sharing
the cache for Hygon family 18h model 5h processor.

Signed-off-by: default avatarPu Wen <puwen@hygon.cn>
parent 5c3abb23
Loading
Loading
Loading
Loading
+24 −5
Original line number Diff line number Diff line
@@ -691,11 +691,30 @@ void cacheinfo_hygon_init_llc_id(struct cpuinfo_x86 *c, int cpu)
	if (!cpuid_edx(0x80000006))
		return;

	if (c->x86_model < 0x5) {
		/*
		 * LLC is at the core complex level.
		 * Core complex ID is ApicId[3] for these processors.
		 */
		per_cpu(cpu_llc_id, cpu) = c->apicid >> 3;
	} else {
		/*
		 * LLC ID is calculated from the number of threads
		 * sharing the cache.
		 */
		u32 eax, ebx, ecx, edx, num_sharing_cache = 0;
		u32 llc_index = find_num_cache_leaves(c) - 1;

		cpuid_count(0x8000001d, llc_index, &eax, &ebx, &ecx, &edx);
		if (eax)
			num_sharing_cache = ((eax >> 14) & 0xfff) + 1;

		if (num_sharing_cache) {
			int bits = get_count_order(num_sharing_cache);

			per_cpu(cpu_llc_id, cpu) = c->apicid >> bits;
		}
	}
}

void init_amd_cacheinfo(struct cpuinfo_x86 *c)