drm/panthor: Don't add write fences to the shared BOs
[drm/drm-misc.git] / arch / x86 / kernel / cpu / topology.h
blob37326297f80c8f089abc1d140fdc04dbb0ddab3b
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef ARCH_X86_TOPOLOGY_H
3 #define ARCH_X86_TOPOLOGY_H
5 struct topo_scan {
6 struct cpuinfo_x86 *c;
7 unsigned int dom_shifts[TOPO_MAX_DOMAIN];
8 unsigned int dom_ncpus[TOPO_MAX_DOMAIN];
10 /* Legacy CPUID[1]:EBX[23:16] number of logical processors */
11 unsigned int ebx1_nproc_shift;
13 /* AMD specific node ID which cannot be mapped into APIC space. */
14 u16 amd_nodes_per_pkg;
15 u16 amd_node_id;
18 void cpu_init_topology(struct cpuinfo_x86 *c);
19 void cpu_parse_topology(struct cpuinfo_x86 *c);
20 void topology_set_dom(struct topo_scan *tscan, enum x86_topology_domains dom,
21 unsigned int shift, unsigned int ncpus);
22 bool cpu_parse_topology_ext(struct topo_scan *tscan);
23 void cpu_parse_topology_amd(struct topo_scan *tscan);
24 void cpu_topology_fixup_amd(struct topo_scan *tscan);
26 static inline u32 topo_shift_apicid(u32 apicid, enum x86_topology_domains dom)
28 if (dom == TOPO_SMT_DOMAIN)
29 return apicid;
30 return apicid >> x86_topo_system.dom_shifts[dom - 1];
33 static inline u32 topo_relative_domain_id(u32 apicid, enum x86_topology_domains dom)
35 if (dom != TOPO_SMT_DOMAIN)
36 apicid >>= x86_topo_system.dom_shifts[dom - 1];
37 return apicid & (x86_topo_system.dom_size[dom] - 1);
40 static inline u32 topo_domain_mask(enum x86_topology_domains dom)
42 return (1U << x86_topo_system.dom_shifts[dom]) - 1;
46 * Update a domain level after the fact without propagating. Used to fixup
47 * broken CPUID enumerations.
49 static inline void topology_update_dom(struct topo_scan *tscan, enum x86_topology_domains dom,
50 unsigned int shift, unsigned int ncpus)
52 tscan->dom_shifts[dom] = shift;
53 tscan->dom_ncpus[dom] = ncpus;
56 #ifdef CONFIG_X86_LOCAL_APIC
57 unsigned int topology_unit_count(u32 apicid, enum x86_topology_domains which_units,
58 enum x86_topology_domains at_level);
59 #else
60 static inline unsigned int topology_unit_count(u32 apicid, enum x86_topology_domains which_units,
61 enum x86_topology_domains at_level)
63 return 1;
65 #endif
67 #endif /* ARCH_X86_TOPOLOGY_H */