blob: a61a47bcd2a164c39fcbf28fab685d0273985051 [file] [log] [blame]
Jonathan A. Kollasche1ffd9e2013-10-15 14:26:34 -05001/*
Jonathan A. Kollaschfcf59882015-01-31 14:10:32 -06002 * ACPI support
Jonathan A. Kollasche1ffd9e2013-10-15 14:26:34 -05003 * 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. Kollasche1ffd9e2013-10-15 14:26:34 -050016#include <cpu/amd/amdk8_sysconf.h>
Jonathan A. Kollaschbdebb072015-01-31 14:17:43 -060017#include <assert.h>
Jonathan A. Kollasche1ffd9e2013-10-15 14:26:34 -050018
Jonathan A. Kollasche1ffd9e2013-10-15 14:26:34 -050019/* APIC */
20unsigned long acpi_fill_madt(unsigned long current)
21{
Jonathan A. Kollasche1ffd9e2013-10-15 14:26:34 -050022 device_t dev;
23 struct resource *res;
24
Vladimir Serbinenko6985d4e2014-09-21 14:31:19 +020025 get_bus_conf();
26
Jonathan A. Kollasche1ffd9e2013-10-15 14:26:34 -050027 /* 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. Kollasche1ffd9e2013-10-15 14:26:34 -050046 /* IRQ9 */
47 current += acpi_create_madt_irqoverride((acpi_madt_irqoverride_t *)
Jonathan A. Kollasch679efee2015-01-31 14:13:27 -060048 current, 0, 9, 9, MP_IRQ_TRIGGER_LEVEL | MP_IRQ_POLARITY_LOW);
Jonathan A. Kollasche1ffd9e2013-10-15 14:26:34 -050049
Jonathan A. Kollasche1ffd9e2013-10-15 14:26:34 -050050 /* create all subtables for processors */
51 /* acpi_create_madt_lapic_nmis returns current, not size. */
Jonathan A. Kollaschade2c5e2015-01-31 14:18:55 -060052 current = acpi_create_madt_lapic_nmis(current,
53 MP_IRQ_TRIGGER_EDGE | MP_IRQ_POLARITY_HIGH, 1);
Jonathan A. Kollasche1ffd9e2013-10-15 14:26:34 -050054
55 return current;
56}