Jonathan A. Kollasch | e1ffd9e | 2013-10-15 14:26:34 -0500 | [diff] [blame] | 1 | /* |
Jonathan A. Kollasch | fcf5988 | 2015-01-31 14:10:32 -0600 | [diff] [blame] | 2 | * ACPI support |
Jonathan A. Kollasch | e1ffd9e | 2013-10-15 14:26:34 -0500 | [diff] [blame] | 3 | * written by Stefan Reinauer <stepan@openbios.org> |
| 4 | * (C) 2005 Stefan Reinauer |
| 5 | * |
| 6 | * |
| 7 | * Copyright 2005 AMD |
| 8 | * 2005.9 yhlu modify that to more dynamic for AMD Opteron Based MB |
| 9 | */ |
| 10 | |
| 11 | #include <console/console.h> |
| 12 | #include <string.h> |
| 13 | #include <arch/acpi.h> |
| 14 | #include <arch/smp/mpspec.h> |
| 15 | #include <device/pci.h> |
Jonathan A. Kollasch | e1ffd9e | 2013-10-15 14:26:34 -0500 | [diff] [blame] | 16 | #include <cpu/amd/amdk8_sysconf.h> |
Jonathan A. Kollasch | bdebb07 | 2015-01-31 14:17:43 -0600 | [diff] [blame] | 17 | #include <assert.h> |
Jonathan A. Kollasch | e1ffd9e | 2013-10-15 14:26:34 -0500 | [diff] [blame] | 18 | |
Jonathan A. Kollasch | e1ffd9e | 2013-10-15 14:26:34 -0500 | [diff] [blame] | 19 | /* APIC */ |
| 20 | unsigned long acpi_fill_madt(unsigned long current) |
| 21 | { |
Jonathan A. Kollasch | e1ffd9e | 2013-10-15 14:26:34 -0500 | [diff] [blame] | 22 | device_t dev; |
| 23 | struct resource *res; |
| 24 | |
Vladimir Serbinenko | 6985d4e | 2014-09-21 14:31:19 +0200 | [diff] [blame] | 25 | get_bus_conf(); |
| 26 | |
Jonathan A. Kollasch | e1ffd9e | 2013-10-15 14:26:34 -0500 | [diff] [blame] | 27 | /* create all subtables for processors */ |
| 28 | current = acpi_create_madt_lapics(current); |
| 29 | |
| 30 | /* Write NVIDIA CK804 IOAPIC. */ |
| 31 | dev = dev_find_slot(0x0, PCI_DEVFN(0x1,0)); |
| 32 | ASSERT(dev != NULL); |
| 33 | |
| 34 | res = find_resource(dev, PCI_BASE_ADDRESS_1); |
| 35 | ASSERT(res != NULL); |
| 36 | |
| 37 | current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *) current, 4, |
| 38 | res->base, 0); |
| 39 | /* Initialize interrupt mapping if mptable.c didn't. */ |
| 40 | #if (!CONFIG_GENERATE_MP_TABLE) |
| 41 | pci_write_config32(dev, 0x7c, 0x0120d218); |
| 42 | pci_write_config32(dev, 0x80, 0x12008a00); |
| 43 | pci_write_config32(dev, 0x84, 0x0000007d); |
| 44 | #endif |
| 45 | |
Jonathan A. Kollasch | e1ffd9e | 2013-10-15 14:26:34 -0500 | [diff] [blame] | 46 | /* IRQ9 */ |
| 47 | current += acpi_create_madt_irqoverride((acpi_madt_irqoverride_t *) |
Jonathan A. Kollasch | 679efee | 2015-01-31 14:13:27 -0600 | [diff] [blame] | 48 | current, 0, 9, 9, MP_IRQ_TRIGGER_LEVEL | MP_IRQ_POLARITY_LOW); |
Jonathan A. Kollasch | e1ffd9e | 2013-10-15 14:26:34 -0500 | [diff] [blame] | 49 | |
Jonathan A. Kollasch | e1ffd9e | 2013-10-15 14:26:34 -0500 | [diff] [blame] | 50 | /* create all subtables for processors */ |
| 51 | /* acpi_create_madt_lapic_nmis returns current, not size. */ |
Jonathan A. Kollasch | ade2c5e | 2015-01-31 14:18:55 -0600 | [diff] [blame] | 52 | current = acpi_create_madt_lapic_nmis(current, |
| 53 | MP_IRQ_TRIGGER_EDGE | MP_IRQ_POLARITY_HIGH, 1); |
Jonathan A. Kollasch | e1ffd9e | 2013-10-15 14:26:34 -0500 | [diff] [blame] | 54 | |
| 55 | return current; |
| 56 | } |