mirror of
https://github.com/fail0verflow/switch-coreboot.git
synced 2025-05-04 01:39:18 -04:00
(1)we now compile in all printks, which is good: we can print any message provided we can change the console log level at any time. (2) The console log level is compiled in and unchangeable, which is bad, as it defeats the purpose of (1). Add a BIOS_ALWAYS log level. Make console log level a variable. Make functions that set it and get it visible everywhere. Always print out the version message; this is really *not* noise! PCI: Simplify pci functions so that they can be used in stage1 or anywhere for that matter. Add a find function which is needed for many stage1 functions. Note that we copy but also clean up the libpayload stuff just a bit. Get rid of config space type 2. If there was ever a platform that used it, I don't know what it was, and the presence is a needless distraction. tested and working on DBE62 (which means the console and the pci functions work :-). There is a remaining problem with dumplxmsrs which nobody understands. It prints out garbage if we use the %s for the msr names. Formatting is an issue; if somebody wants to fix formatting they can assume I will ack it. Sorry, my emacs has gone just nuts. Signed-off-by: Ronald G. Minnich <rminnich@gmail.com> Acked-by: Peter Stuge <peter@stuge.se> git-svn-id: svn://coreboot.org/repository/coreboot-v3@729 f3766cd6-281f-0410-b1cd-43a5c92072e9
95 lines
2.9 KiB
C
95 lines
2.9 KiB
C
/*
|
|
* This file is part of the coreboot project.
|
|
*
|
|
* Copyright (C) 2004 Linux Networx
|
|
* (Written by Eric Biederman <ebiederman@lnxi.com> for Linux Networx)
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; version 2 of the License.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#include <console.h>
|
|
#include <device/device.h>
|
|
#include <pciconf.h>
|
|
#include <device/pci.h>
|
|
#include <device/pci_ids.h>
|
|
#include <device/pci_ops.h>
|
|
#include <types.h>
|
|
|
|
/**
|
|
* Walk up the tree from the current dev, in an attempt to find a
|
|
* bus that has ops_pci_bus set. The assumption here being that if it
|
|
* has ops_pci_bus set, then it can do bus operations.
|
|
*/
|
|
static struct bus *get_pbus(struct device *dev)
|
|
{
|
|
struct bus *pbus = dev->bus;
|
|
while (pbus && pbus->dev && !ops_pci_bus(pbus)) {
|
|
pbus = pbus->dev->bus;
|
|
}
|
|
if (!pbus || !pbus->dev || !pbus->dev->ops
|
|
|| !pbus->dev->ops->ops_pci_bus) {
|
|
printk(BIOS_ALERT, "%s: %s(%s) Cannot find PCI bus operations",
|
|
__func__, dev->dtsname, dev_path(dev));
|
|
die("");
|
|
}
|
|
return pbus;
|
|
}
|
|
|
|
u8 pci_read_config8(struct device *dev, unsigned int where)
|
|
{
|
|
struct bus *pbus = get_pbus(dev);
|
|
return ops_pci_bus(pbus)->read8(PCI_BDEVFN(dev->bus->secondary,
|
|
dev->path.u.pci.devfn),
|
|
where);
|
|
}
|
|
|
|
u16 pci_read_config16(struct device *dev, unsigned int where)
|
|
{
|
|
struct bus *pbus = get_pbus(dev);
|
|
return ops_pci_bus(pbus)->read16(PCI_BDEVFN(dev->bus->secondary,
|
|
dev->path.u.pci.devfn),
|
|
where);
|
|
}
|
|
|
|
u32 pci_read_config32(struct device *dev, unsigned int where)
|
|
{
|
|
struct bus *pbus = get_pbus(dev);
|
|
return ops_pci_bus(pbus)->read32(PCI_BDEVFN(dev->bus->secondary,
|
|
dev->path.u.pci.devfn),
|
|
where);
|
|
}
|
|
|
|
void pci_write_config8(struct device *dev, unsigned int where, u8 val)
|
|
{
|
|
struct bus *pbus = get_pbus(dev);
|
|
ops_pci_bus(pbus)->write8(PCI_BDEVFN(dev->bus->secondary,
|
|
dev->path.u.pci.devfn),
|
|
where, val);
|
|
}
|
|
|
|
void pci_write_config16(struct device *dev, unsigned int where, u16 val)
|
|
{
|
|
struct bus *pbus = get_pbus(dev);
|
|
ops_pci_bus(pbus)->write16(PCI_BDEVFN(dev->bus->secondary,
|
|
dev->path.u.pci.devfn),
|
|
where, val);
|
|
}
|
|
|
|
void pci_write_config32(struct device *dev, unsigned int where, u32 val)
|
|
{
|
|
struct bus *pbus = get_pbus(dev);
|
|
ops_pci_bus(pbus)->write32(PCI_BDEVFN(dev->bus->secondary,
|
|
dev->path.u.pci.devfn),
|
|
where, val);
|
|
}
|