2015-05-13 03:19:47 +02:00
|
|
|
/*
|
|
|
|
* This file is part of the coreboot project.
|
|
|
|
*
|
|
|
|
* Copyright (C) 2008-2009 coresystems GmbH
|
|
|
|
* Copyright (C) 2014 Google Inc.
|
2015-05-13 03:23:27 +02:00
|
|
|
* Copyright (C) 2015 Intel Corporation.
|
2015-05-13 03:19:47 +02:00
|
|
|
*
|
|
|
|
* 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.
|
|
|
|
*/
|
|
|
|
|
2017-03-31 14:41:49 +02:00
|
|
|
#include <arch/io.h>
|
2015-05-13 03:19:47 +02:00
|
|
|
#include <console/console.h>
|
|
|
|
#include <delay.h>
|
|
|
|
#include <device/device.h>
|
|
|
|
#include <device/pci.h>
|
|
|
|
#include <device/pci_def.h>
|
|
|
|
#include <soc/pch.h>
|
|
|
|
#include <soc/pci_devs.h>
|
|
|
|
#include <soc/ramstage.h>
|
|
|
|
|
|
|
|
u8 pch_revision(void)
|
|
|
|
{
|
|
|
|
return pci_read_config8(PCH_DEV_LPC, PCI_REVISION_ID);
|
|
|
|
}
|
|
|
|
|
|
|
|
u16 pch_type(void)
|
|
|
|
{
|
|
|
|
return pci_read_config16(PCH_DEV_LPC, PCI_DEVICE_ID);
|
|
|
|
}
|
|
|
|
|
2015-05-13 03:23:27 +02:00
|
|
|
#if ENV_RAMSTAGE
|
|
|
|
void pch_enable_dev(device_t dev)
|
2015-05-13 03:19:47 +02:00
|
|
|
{
|
2015-05-13 03:23:27 +02:00
|
|
|
/* FSP should implement routines to disable PCH IPs */
|
2015-05-13 03:19:47 +02:00
|
|
|
u32 reg32;
|
|
|
|
|
|
|
|
/* These devices need special enable/disable handling */
|
|
|
|
switch (PCI_SLOT(dev->path.pci.devfn)) {
|
|
|
|
case PCH_DEV_SLOT_PCIE:
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!dev->enabled) {
|
|
|
|
printk(BIOS_DEBUG, "%s: Disabling device\n", dev_path(dev));
|
|
|
|
|
|
|
|
/* Ensure memory, io, and bus master are all disabled */
|
|
|
|
reg32 = pci_read_config32(dev, PCI_COMMAND);
|
|
|
|
reg32 &= ~(PCI_COMMAND_MASTER |
|
|
|
|
PCI_COMMAND_MEMORY | PCI_COMMAND_IO);
|
|
|
|
pci_write_config32(dev, PCI_COMMAND, reg32);
|
|
|
|
} else {
|
|
|
|
/* Enable SERR */
|
|
|
|
reg32 = pci_read_config32(dev, PCI_COMMAND);
|
|
|
|
reg32 |= PCI_COMMAND_SERR;
|
|
|
|
pci_write_config32(dev, PCI_COMMAND, reg32);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|