diff options
author | arch import user (historical) <svn@openbios.org> | 2005-07-06 17:15:30 +0000 |
---|---|---|
committer | arch import user (historical) <svn@openbios.org> | 2005-07-06 17:15:30 +0000 |
commit | ef03afa405b049a172146aab93cfb81fb21f3945 (patch) | |
tree | 3b59033be66edd60c2cc6c66d6875153dc052a72 /src/cpu/amd/dualcore/dualcore_id.c | |
parent | 014c3e185fe8e1455e56efeb496715a67ce292bb (diff) |
Revision: linuxbios@linuxbios.org--devel/freebios--devel--2.0--patch-34
Creator: Yinghai Lu <yhlu@tyan.com>
AMD D0/E0 Opteron new mem mapping support, AMD E Opteron mem hole support,AMD K8 Four Ranks DIMM support
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1950 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'src/cpu/amd/dualcore/dualcore_id.c')
-rw-r--r-- | src/cpu/amd/dualcore/dualcore_id.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/cpu/amd/dualcore/dualcore_id.c b/src/cpu/amd/dualcore/dualcore_id.c new file mode 100644 index 0000000000..feab682851 --- /dev/null +++ b/src/cpu/amd/dualcore/dualcore_id.c @@ -0,0 +1,45 @@ +/* 2004.12 yhlu add dual core support */ + +#include <arch/cpu.h> +#include "cpu/amd/model_fxx/model_fxx_msr.h" + +static inline unsigned int read_nb_cfg_54(void) +{ + msr_t msr; + msr = rdmsr(NB_CFG_MSR); + return ( ( msr.hi >> (54-32)) & 1); +} + +struct node_core_id { + unsigned nodeid; + unsigned coreid; +}; + +static inline struct node_core_id get_node_core_id(unsigned nb_cfg_54) { + struct node_core_id id; + // get the apicid via cpuid(1) ebx[27:24] + if( nb_cfg_54) { + // when NB_CFG[54] is set, nodid = ebx[27:25], coreid = ebx[24] + id.coreid = (cpuid_ebx(1) >> 24) & 0xf; + id.nodeid = (id.coreid>>1); + id.coreid &= 1; + } + else + { + // when NB_CFG[54] is clear, nodeid = ebx[26:24], coreid = ebx[27] + id.nodeid = (cpuid_ebx(1) >> 24) & 0xf; + id.coreid = (id.nodeid>>3); + id.nodeid &= 7; + } + return id; +} + +static inline unsigned get_core_num(void) +{ + return (cpuid_ecx(0x80000008) & 0xff); +} + +static inline struct node_core_id get_node_core_id_x(void) { + return get_node_core_id( read_nb_cfg_54() ); +} + |