enable apic ext id
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1839 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
parent
a734f53721
commit
23202a9870
|
@ -150,6 +150,13 @@ static inline int spd_read_byte(unsigned device, unsigned address)
|
||||||
//#include "northbridge/amd/amdk8/setup_resource_map.c"
|
//#include "northbridge/amd/amdk8/setup_resource_map.c"
|
||||||
#include "northbridge/amd/amdk8/raminit.c"
|
#include "northbridge/amd/amdk8/raminit.c"
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
#define ENABLE_APIC_EXT_ID 1
|
||||||
|
#define APIC_ID_OFFSET 0x10
|
||||||
|
#else
|
||||||
|
#define ENABLE_APIC_EXT_ID 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "northbridge/amd/amdk8/coherent_ht.c"
|
#include "northbridge/amd/amdk8/coherent_ht.c"
|
||||||
#include "sdram/generic_sdram.c"
|
#include "sdram/generic_sdram.c"
|
||||||
|
|
||||||
|
@ -228,23 +235,22 @@ static void main(unsigned long bist)
|
||||||
};
|
};
|
||||||
int i;
|
int i;
|
||||||
int needs_reset;
|
int needs_reset;
|
||||||
|
unsigned nodeid;
|
||||||
if (bist == 0) {
|
if (bist == 0) {
|
||||||
/* Skip this if there was a built in self test failure */
|
/* Skip this if there was a built in self test failure */
|
||||||
amd_early_mtrr_init();
|
amd_early_mtrr_init();
|
||||||
enable_lapic();
|
enable_lapic();
|
||||||
init_timer();
|
init_timer();
|
||||||
|
nodeid = lapicid() & 0xf;
|
||||||
if (cpu_init_detected()) {
|
#if ENABLE_APIC_EXT_ID == 1
|
||||||
#if 1
|
enable_apic_ext_id(nodeid);
|
||||||
|
lapic_write(LAPIC_ID, ( lapic_read(LAPIC_ID) | (APIC_ID_OFFSET<<24) ) ); // CPU apicid is from 0x10
|
||||||
|
#endif
|
||||||
|
if (cpu_init_detected(nodeid)) {
|
||||||
asm volatile ("jmp __cpu_reset");
|
asm volatile ("jmp __cpu_reset");
|
||||||
#else
|
|
||||||
/* cpu reset also reset the memtroller ????
|
|
||||||
need soft_reset to reset all except keep HT link freq and width */
|
|
||||||
distinguish_cpu_resets();
|
|
||||||
soft2_reset();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
distinguish_cpu_resets();
|
distinguish_cpu_resets(nodeid);
|
||||||
|
|
||||||
if (!boot_cpu()) {
|
if (!boot_cpu()) {
|
||||||
stop_this_cpu();
|
stop_this_cpu();
|
||||||
}
|
}
|
||||||
|
@ -259,7 +265,12 @@ static void main(unsigned long bist)
|
||||||
|
|
||||||
setup_s4882_resource_map();
|
setup_s4882_resource_map();
|
||||||
needs_reset = setup_coherent_ht_domain();
|
needs_reset = setup_coherent_ht_domain();
|
||||||
|
#if 0
|
||||||
needs_reset |= ht_setup_chain(PCI_DEV(0, 0x18, 0), 0xa0);
|
needs_reset |= ht_setup_chain(PCI_DEV(0, 0x18, 0), 0xa0);
|
||||||
|
#else
|
||||||
|
// automatically set that for you, but you might meet tight space
|
||||||
|
needs_reset |= ht_setup_chains_x();
|
||||||
|
#endif
|
||||||
if (needs_reset) {
|
if (needs_reset) {
|
||||||
print_info("ht reset -\r\n");
|
print_info("ht reset -\r\n");
|
||||||
soft_reset();
|
soft_reset();
|
||||||
|
|
|
@ -133,6 +133,23 @@ static void disable_probes(void)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef ENABLE_APIC_EXT_ID
|
||||||
|
#define ENABLE_APIC_EXT_ID 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void enable_apic_ext_id(u8 node)
|
||||||
|
{
|
||||||
|
#if ENABLE_APIC_EXT_ID==1
|
||||||
|
#warning "FIXME Is the right place to enable apic ext id here?"
|
||||||
|
|
||||||
|
u32 val;
|
||||||
|
|
||||||
|
val = pci_read_config32(NODE_HT(node), 0x68);
|
||||||
|
val |= HTTC_APIC_EXT_ID | HTTC_APIC_EXT_BRD_CST ;
|
||||||
|
pci_write_config32(NODE_HT(node), 0x68, val);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
static void enable_routing(u8 node)
|
static void enable_routing(u8 node)
|
||||||
{
|
{
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
|
@ -715,6 +715,7 @@ static unsigned int cpu_bus_scan(device_t dev, unsigned int max)
|
||||||
{
|
{
|
||||||
struct bus *cpu_bus;
|
struct bus *cpu_bus;
|
||||||
int i;
|
int i;
|
||||||
|
int apic_id_offset = lapicid(); // bsp apicid
|
||||||
|
|
||||||
/* Find which cpus are present */
|
/* Find which cpus are present */
|
||||||
cpu_bus = &dev->link[0];
|
cpu_bus = &dev->link[0];
|
||||||
|
@ -749,6 +750,9 @@ static unsigned int cpu_bus_scan(device_t dev, unsigned int max)
|
||||||
|
|
||||||
/* Report what I have done */
|
/* Report what I have done */
|
||||||
if (cpu) {
|
if (cpu) {
|
||||||
|
if(cpu->path.u.apic.apic_id<apic_id_offset) {
|
||||||
|
cpu->path.u.apic.apic_id += apic_id_offset;
|
||||||
|
}
|
||||||
printk_debug("CPU: %s %s\n", dev_path(cpu),
|
printk_debug("CPU: %s %s\n", dev_path(cpu),
|
||||||
cpu->enabled?"enabled":"disabled");
|
cpu->enabled?"enabled":"disabled");
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,12 +7,12 @@
|
||||||
#define HTIC_BIOSR_Detect (1<<5)
|
#define HTIC_BIOSR_Detect (1<<5)
|
||||||
#define HTIC_INIT_Detect (1<<6)
|
#define HTIC_INIT_Detect (1<<6)
|
||||||
|
|
||||||
static int cpu_init_detected(void)
|
static int cpu_init_detected(unsigned nodeid)
|
||||||
{
|
{
|
||||||
unsigned long htic;
|
unsigned long htic;
|
||||||
device_t dev;
|
device_t dev;
|
||||||
|
|
||||||
dev = PCI_DEV(0, 0x18 + lapicid(), 0);
|
dev = PCI_DEV(0, 0x18 + nodeid, 0);
|
||||||
htic = pci_read_config32(dev, HT_INIT_CONTROL);
|
htic = pci_read_config32(dev, HT_INIT_CONTROL);
|
||||||
|
|
||||||
return !!(htic & HTIC_INIT_Detect);
|
return !!(htic & HTIC_INIT_Detect);
|
||||||
|
@ -34,11 +34,11 @@ static int cold_reset_detected(void)
|
||||||
return !(htic & HTIC_ColdR_Detect);
|
return !(htic & HTIC_ColdR_Detect);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void distinguish_cpu_resets(void)
|
static void distinguish_cpu_resets(unsigned nodeid)
|
||||||
{
|
{
|
||||||
uint32_t htic;
|
uint32_t htic;
|
||||||
device_t device;
|
device_t device;
|
||||||
device = PCI_DEV(0, 0x18 + lapicid(), 0);
|
device = PCI_DEV(0, 0x18 + nodeid, 0);
|
||||||
htic = pci_read_config32(device, HT_INIT_CONTROL);
|
htic = pci_read_config32(device, HT_INIT_CONTROL);
|
||||||
htic |= HTIC_ColdR_Detect | HTIC_BIOSR_Detect | HTIC_INIT_Detect;
|
htic |= HTIC_ColdR_Detect | HTIC_BIOSR_Detect | HTIC_INIT_Detect;
|
||||||
pci_write_config32(device, HT_INIT_CONTROL, htic);
|
pci_write_config32(device, HT_INIT_CONTROL, htic);
|
||||||
|
|
Loading…
Reference in New Issue