| /* |
| * (C) 2004 Linux Networx |
| */ |
| #include <console/console.h> |
| #include <device/device.h> |
| #include <device/pci.h> |
| #include <device/pci_ids.h> |
| #include <device/pci_ops.h> |
| #include <pc80/mc146818rtc.h> |
| |
| static void amd8131_bus_read_resources(device_t dev) |
| { |
| return; |
| } |
| |
| static void amd8131_bus_set_resources(device_t dev) |
| { |
| #if 0 |
| pci_bus_read_resources(dev); |
| #endif |
| return; |
| } |
| |
| static void amd8131_bus_enable_resources(device_t dev) |
| { |
| #if 0 |
| pci_dev_set_resources(dev); |
| #endif |
| return; |
| } |
| |
| static void amd8131_bus_init(device_t dev) |
| { |
| #if 0 |
| pcix_init(dev); |
| #endif |
| return; |
| } |
| |
| static unsigned int amd8131_scan_bus(device_t bus, unsigned int max) |
| { |
| #if 0 |
| max = pcix_scan_bridge(bus, max); |
| #endif |
| return max; |
| } |
| |
| static void amd8131_enable(device_t dev) |
| { |
| uint32_t buses; |
| uint16_t cr; |
| |
| /* Clear all status bits and turn off memory, I/O and master enables. */ |
| pci_write_config16(dev, PCI_COMMAND, 0x0000); |
| pci_write_config16(dev, PCI_STATUS, 0xffff); |
| |
| /* |
| * Read the existing primary/secondary/subordinate bus |
| * number configuration. |
| */ |
| buses = pci_read_config32(dev, PCI_PRIMARY_BUS); |
| |
| /* Configure the bus numbers for this bridge: the configuration |
| * transactions will not be propagated by the bridge if it is not |
| * correctly configured. |
| */ |
| buses &= 0xff000000; |
| buses |= (((unsigned int) (dev->bus->secondary) << 0) | |
| ((unsigned int) (dev->bus->secondary) << 8) | |
| ((unsigned int) (dev->bus->secondary) << 16)); |
| pci_write_config32(dev, PCI_PRIMARY_BUS, buses); |
| } |
| |
| static struct device_operations pcix_ops = { |
| .read_resources = amd8131_bus_read_resources, |
| .set_resources = amd8131_bus_set_resources, |
| .enable_resources = amd8131_bus_enable_resources, |
| .init = amd8131_bus_init, |
| .scan_bus = 0, |
| .enable = amd8131_enable, |
| }; |
| |
| static const struct pci_driver pcix_driver __pci_driver = { |
| .ops = &pcix_ops, |
| .vendor = PCI_VENDOR_ID_AMD, |
| .device = 0x7450, |
| }; |
| |
| |
| static void ioapic_enable(device_t dev) |
| { |
| uint32_t value; |
| value = pci_read_config32(dev, 0x44); |
| if (dev->enabled) { |
| value |= ((1 << 1) | (1 << 0)); |
| } else { |
| value &= ~((1 << 1) | (1 << 0)); |
| } |
| pci_write_config32(dev, 0x44, value); |
| } |
| |
| static struct device_operations ioapic_ops = { |
| .read_resources = pci_dev_read_resources, |
| .set_resources = pci_dev_set_resources, |
| .enable_resources = pci_dev_enable_resources, |
| .init = 0, |
| .scan_bus = 0, |
| .enable = ioapic_enable, |
| }; |
| |
| static const struct pci_driver ioapic_driver __pci_driver = { |
| .ops = &ioapic_ops, |
| .vendor = PCI_VENDOR_ID_AMD, |
| .device = 0x7451, |
| |
| }; |