diff options
Diffstat (limited to 'src/dev/arm/realview.cc')
-rw-r--r-- | src/dev/arm/realview.cc | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/src/dev/arm/realview.cc b/src/dev/arm/realview.cc index 18208b402..0409f888d 100644 --- a/src/dev/arm/realview.cc +++ b/src/dev/arm/realview.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009 ARM Limited + * Copyright (c) 2009, 2014 ARM Limited * All rights reserved * * The license below extends only to copyright in the software and shall @@ -63,6 +63,21 @@ RealView::RealView(const Params *p) {} void +RealView::initState() +{ + Addr junk; + bool has_gen_pci_host; + has_gen_pci_host = system->kernelSymtab->findAddress("gen_pci_setup", junk); + + if (has_gen_pci_host && !params()->pci_cfg_gen_offsets) + warn("Kernel supports generic PCI host but PCI Config offsets " + "configured for legacy. Set pci_cfg_gen_offsets to True"); + if (has_gen_pci_host && !params()->pci_io_base) + warn("Kernel supports generic PCI host but PCI IO base is set " + "to 0. Set pci_io_base to the start of PCI IO space"); +} + +void RealView::postConsoleInt() { warn_once("Don't know what interrupt to post for console.\n"); @@ -100,13 +115,19 @@ RealView::calcPciConfigAddr(int bus, int dev, int func) { if (bus != 0) return ULL(-1); - return params()->pci_cfg_base | ((func & 7) << 16) | ((dev & 0x1f) << 19); + + Addr cfg_offset = 0; + if (params()->pci_cfg_gen_offsets) + cfg_offset |= ((func & 7) << 12) | ((dev & 0x1f) << 15); + else + cfg_offset |= ((func & 7) << 16) | ((dev & 0x1f) << 19); + return params()->pci_cfg_base | cfg_offset; } Addr RealView::calcPciIOAddr(Addr addr) { - return addr; + return params()->pci_io_base + addr; } Addr |