[LinuxBIOS] Enabling APIC 82801xx
joe at smittys.pointclark.net
joe at smittys.pointclark.net
Sat Sep 29 14:47:03 CEST 2007
Quoting Marc Jones <marc.jones at amd.com>:
>
>
> joe at smittys.pointclark.net wrote:
>> Quoting joe at smittys.pointclark.net:
>>
>>> Quoting joe at smittys.pointclark.net:
>>>
>>>> OK, I have a new booting problem. LB dies on the
>>>> i82801xx_enable_ioapic() function in 82801xx_lpc.c:
>>>>
>>>>
>>>> void i82801xx_enable_ioapic(struct device *dev)
>>>> {
>>>> uint32_t reg32;
>>>> volatile uint32_t *ioapic_index = (volatile uint32_t *)0xfec00000;
>>>> volatile uint32_t *ioapic_data = (volatile uint32_t *)0xfec00010;
>>>>
>>>> reg32 = pci_read_config32(dev, GEN_CNTL);
>>>> reg32 |= (3 << 7); /* Enable IOAPIC */
>>>> reg32 |= (1 << 13); /* Coprocessor error enable */
>>>> reg32 |= (1 << 1); /* Delayed transaction enable */
>>>> reg32 |= (1 << 2); /* DMA collection buffer enable */
>>>> pci_write_config32(dev, GEN_CNTL, reg32);
>>>> printk_debug("IOAPIC Southbridge enabled %x\n", reg32);
>>>>
>>>> *ioapic_index = 0;
>>>> *ioapic_data = (1 << 25);
>>>>
>>>> *ioapic_index = 0;
>>>> reg32 = *ioapic_data;
>>>> printk_debug("Southbridge APIC ID = %x\n", reg32);
>>>> if (reg32 != (1 << 25))
>>>> die("APIC Error\n");
>>>>
>>>> /* TODO: From i82801ca, needed/useful on other ICH? */
>>>> *ioapic_index = 3; // Select Boot Configuration register
>>>> *ioapic_data = 1; // Use Processor System Bus to deliver interrupts
>>>> }
>>>>
>>>> Initializing devices...
>>>> Root Device init
>>>> PCI: 00:00.0 init
>>>> Northbridge init
>>>> PCI: 00:1d.0 init
>>>> PCI: 00:1d.1 init
>>>> PCI: 00:1d.2 init
>>>> PCI: 00:1d.7 init
>>>> EHCI: Setting up controller.. done.
>>>> PCI: 00:1e.0 init
>>>> PCI: 00:1f.0 init
>>>> IOAPIC Southbridge enabled 2186
>>>> Southbridge APIC ID = 0
>>>> APIC Error
>>>>
>>>> What is going on here? Why is *ioapic_data coming back as 0x0 after it
>>>> has been set to 0x2000000 (1 << 25)? Help?
>>>>
>>>>
>>> Hmm. Could this be because *ioapic_data is not able to use the memory
>>> space at 0xfec00010?? I also noticed in the bootlog the AC'97 Audio
>>> Controller is using this memory space:
>>>
>>> PCI: 00:1f.0 assign_resources, bus 0 link: 0
>>> PCI: 00:1f.5 1c <- [0x00fec00000 - 0x00fec000ff] mem
>>>
>>> Could this be causing the issue? If so how would I tell the AC'97
>>> Audio Controller to use a different memory space?
>>>
>> Yup I was right, I disabled the AC'97 Audio Controller and it
>> booted right up. Now I just have to figure out why the ac'97 audio
>> is using this memory space and how to chage it. Anyone....Help?
>>
>> Thanks - Joe
>>
> That is strange. In devices\device.c:
> #define DEVICE_MEM_HIGH 0xFEBFFFFFUL
>
> There shouldn't be any PCI devices allocated at 0xFEC0_0000.
>
> Marc
>
Think I figured it out but I'm not sure why. Looking back through my
many bootlogs it looks like when I have the
device pci 2.0 off end # VGA compatible controller: Intel Corporation
82830 CGC
enabled it does not allocate the 0x00fec00000 - 0x00fec000ff memory
range. Is this because the VGA controller prefetches memory first?? Or
is this just a wacky Intel thing?
Thanks - Joe
More information about the coreboot
mailing list