Author: rminnich
Date: 2008-10-06 19:12:38 +0200 (Mon, 06 Oct 2008)
New Revision: 893
Added:
coreboot-v3/southbridge/amd/rs690/Makefile
coreboot-v3/southbridge/amd/sb600/Makefile
Modified:
coreboot-v3/southbridge/amd/rs690/cmn.c
coreboot-v3/southbridge/amd/rs690/gfx.c
coreboot-v3/southbridge/amd/rs690/ht.c
coreboot-v3/southbridge/amd/rs690/pcie.c
coreboot-v3/southbridge/amd/rs690/rs690.c
coreboot-v3/southbridge/amd/rs690/rs690.h
coreboot-v3/southbridge/amd/rs690/stage1.c
coreboot-v3/southbridge/amd/sb600/hda.c
coreboot-v3/southbridge/amd/sb600/hda.dts
coreboot-v3/southbridge/amd/sb600/ide.c
coreboot-v3/southbridge/amd/sb600/lpc.c
coreboot-v3/southbridge/amd/sb600/pci.c
coreboot-v3/southbridge/amd/sb600/sata.c
coreboot-v3/southbridge/amd/sb600/sb600.c
coreboot-v3/southbridge/amd/sb600/sb600.h
coreboot-v3/southbridge/amd/sb600/sb600_smbus.h
coreboot-v3/southbridge/amd/sb600/sm.c
coreboot-v3/southbridge/amd/sb600/stage1.c
coreboot-v3/southbridge/amd/sb600/stage1_reset.c
coreboot-v3/southbridge/amd/sb600/usb.c
Log:
This sb600 and rs690 support for a dbm690t that compiles. Stage0 is
23K, too large.
dbe62 was tested and works i.e. this does no harm.
Signed-off-by: Ronald G. Minnich <rminnich(a)gmail.com>
Acked-by: Ronald G. Minnich <rminnich(a)gmail.com>
Added: coreboot-v3/southbridge/amd/rs690/Makefile
===================================================================
--- coreboot-v3/southbridge/amd/rs690/Makefile (rev 0)
+++ coreboot-v3/southbridge/amd/rs690/Makefile 2008-10-06 17:12:38 UTC (rev 893)
@@ -0,0 +1,33 @@
+##
+## This file is part of the coreboot project.
+##
+## Copyright (C) 2007 coresystems GmbH
+## (Written by Stefan Reinauer <stepan(a)coresystems.de> for coresystems GmbH)
+##
+## 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; either version 2 of the License, or
+## (at your option) any later version.
+##
+## 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
+##
+
+ifeq ($(CONFIG_SOUTHBRIDGE_AMD_RS690),y)
+
+STAGE2_CHIPSET_SRC += $(src)/southbridge/amd/rs690/cmn.c \
+ $(src)/southbridge/amd/rs690/gfx.c \
+ $(src)/southbridge/amd/rs690/ht.c \
+ $(src)/southbridge/amd/rs690/pcie.c \
+ $(src)/southbridge/amd/rs690/rs690.c
+
+STAGE0_CHIPSET_SRC += $(src)/southbridge/amd/rs690/stage1.c
+
+
+endif
Modified: coreboot-v3/southbridge/amd/rs690/cmn.c
===================================================================
--- coreboot-v3/southbridge/amd/rs690/cmn.c 2008-10-06 17:11:47 UTC (rev 892)
+++ coreboot-v3/southbridge/amd/rs690/cmn.c 2008-10-06 17:12:38 UTC (rev 893)
@@ -48,9 +48,9 @@
/*get BAR3 base address for nbcfg0x1c */
u32 addr = pci_read_config32(nb_dev, 0x1c);
printk(BIOS_DEBUG, "addr=%x,bus=%x,devfn=%x\n", addr, dev->bus->secondary,
- dev->path.u.pci.devfn);
+ dev->path.pci.devfn);
addr |= dev->bus->secondary << 20 | /* bus num */
- dev->path.u.pci.devfn << 12 | reg;
+ dev->path.pci.devfn << 12 | reg;
return *((u32 *) addr);
}
@@ -61,9 +61,9 @@
/*get BAR3 base address for nbcfg0x1c */
u32 addr = pci_read_config32(nb_dev, 0x1c);
printk(BIOS_DEBUG, "write: addr=%x,bus=%x,devfn=%x\n", addr, dev->bus->secondary,
- dev->path.u.pci.devfn);
+ dev->path.pci.devfn);
addr |= dev->bus->secondary << 20 | /* bus num */
- dev->path.u.pci.devfn << 12 | reg_pos;
+ dev->path.pci.devfn << 12 | reg_pos;
reg = reg_old = *((u32 *) addr);
reg &= ~mask;
@@ -244,7 +244,7 @@
{
u16 count = 5000;
u32 lc_state, reg;
- int8_t current, res = 0;
+ u8 current, res = 0;
while (count--) {
mdelay(40);
@@ -304,6 +304,7 @@
*/
void rs690_set_tom(struct device * nb_dev)
{
+ extern unsigned long uma_memory_start;
/* set TOM */
pci_write_config32(nb_dev, 0x90, uma_memory_start);
nbmc_write_index(nb_dev, 0x1e, uma_memory_start);
Modified: coreboot-v3/southbridge/amd/rs690/gfx.c
===================================================================
--- coreboot-v3/southbridge/amd/rs690/gfx.c 2008-10-06 17:11:47 UTC (rev 892)
+++ coreboot-v3/southbridge/amd/rs690/gfx.c 2008-10-06 17:12:38 UTC (rev 893)
@@ -76,7 +76,7 @@
static void internal_gfx_pci_dev_init(struct device *dev)
{
unsigned short deviceid, vendorid;
- struct southbridge_amd_rs690_gfx_dts_config *cfg = dev->device_configuration;
+ struct southbridge_amd_rs690_gfx_config *cfg = dev->device_configuration;
deviceid = pci_read_config16(dev, PCI_DEVICE_ID);
vendorid = pci_read_config16(dev, PCI_VENDOR_ID);
printk(BIOS_INFO, "internal_gfx_pci_dev_init device=%x, vendor=%x, vga_rom_address=0x%x.\n",
@@ -126,10 +126,10 @@
{
u32 l_dword;
int i;
- struct device * k8_f0 = 0, k8_f2 = 0;
+ struct device * k8_f0 = 0, *k8_f2 = 0;
struct device * nb_dev = dev_find_slot(0, 0);
- printk(BIOS_INFO, "rs690_internal_gfx_enable dev=0x%x, nb_dev=0x%x.\n", dev,
+ printk(BIOS_INFO, "rs690_internal_gfx_enable dev=%p, nb_dev=%p.\n", dev,
nb_dev);
/* set APERTURE_SIZE, 128M. */
@@ -214,7 +214,7 @@
{
u8 result, width;
u32 reg32;
- struct southbridge_amd_rs690_gfx_dts_config *cfg = nb_dev->device_configuration;
+ struct southbridge_amd_rs690_gfx_config *cfg = nb_dev->device_configuration;
printk(BIOS_INFO, "rs690_gfx_init single_port_configuration.\n");
@@ -271,8 +271,7 @@
{
u8 result, width;
u32 reg32;
- struct southbridge_amd_rs690_config *cfg =
- (struct southbridge_amd_rs690_config *)nb_dev->chip_info;
+ struct southbridge_amd_rs690_gfx_config *cfg = nb_dev->device_configuration;
/* step 15: Training for Device 2 */
set_nbmisc_enable_bits(nb_dev, 0x8, 1 << 4, 0 << 4);
@@ -350,8 +349,7 @@
{
u32 reg32;
struct device * sb_dev;
- struct southbridge_amd_rs690_config *cfg =
- (struct southbridge_amd_rs690_config *)nb_dev->chip_info;
+ struct southbridge_amd_rs690_gfx_config *cfg = nb_dev->device_configuration;
/* step 5.9.1.1 */
reg32 = nbpcie_p_read_index(dev, 0xa2);
@@ -395,10 +393,9 @@
void rs690_gfx_init(struct device * nb_dev, struct device * dev, u32 port)
{
u16 reg16;
- struct southbridge_amd_rs690_config *cfg =
- (struct southbridge_amd_rs690_config *)nb_dev->chip_info;
+ struct southbridge_amd_rs690_gfx_config *cfg = nb_dev->device_configuration;
- printk(BIOS_INFO, "rs690_gfx_init, nb_dev=0x%x, dev=0x%x, port=0x%x.\n",
+ printk(BIOS_INFO, "rs690_gfx_init, nb_dev=%p dev=%p, port=0x%x.\n",
nb_dev, dev, port);
/* step 0, REFCLK_SEL, skip A11 revision */
@@ -572,7 +569,7 @@
{.pci = {.vendor = PCI_VENDOR_ID_ATI,
.device = PCI_DEVICE_ID_ATI_RS690MT_INT_GFX}}},
.constructor = default_device_constructor,
- .phase2_setup_scanbus = rs690_internal_gfx_enable,
+ .phase2_setup_scan_bus = rs690_internal_gfx_enable,
.phase3_scan = 0,
.phase4_read_resources = rs690_gfx_read_resources,
.phase4_set_resources = rs690_gfx_set_resources,
Modified: coreboot-v3/southbridge/amd/rs690/ht.c
===================================================================
--- coreboot-v3/southbridge/amd/rs690/ht.c 2008-10-06 17:11:47 UTC (rev 892)
+++ coreboot-v3/southbridge/amd/rs690/ht.c 2008-10-06 17:12:38 UTC (rev 893)
@@ -78,11 +78,14 @@
.set_subsystem = pci_dev_set_subsystem,
};
-struct device_operations rs690_gfx = {
+void rs690_enable(struct device * dev);
+
+struct device_operations rs690_ht = {
.id = {.type = DEVICE_ID_PCI,
{.pci = {.vendor = PCI_VENDOR_ID_ATI,
.device = PCI_DEVICE_ID_ATI_RS690_HT}}},
.constructor = default_device_constructor,
+ .phase2_setup_scan_bus = rs690_enable,
.phase3_scan = 0,
.phase4_read_resources = pci_dev_read_resources,
.phase4_set_resources = pci_dev_set_resources,
Modified: coreboot-v3/southbridge/amd/rs690/pcie.c
===================================================================
--- coreboot-v3/southbridge/amd/rs690/pcie.c 2008-10-06 17:11:47 UTC (rev 892)
+++ coreboot-v3/southbridge/amd/rs690/pcie.c 2008-10-06 17:12:38 UTC (rev 893)
@@ -51,10 +51,10 @@
0 /* GppPwr */
};
-static void PciePowerOffGppPorts(device_t nb_dev, device_t dev, u32 port);
-static void ValidatePortEn(device_t nb_dev);
+static void PciePowerOffGppPorts(struct device * nb_dev, struct device * dev, u32 port);
+static void ValidatePortEn(struct device * nb_dev);
-static void ValidatePortEn(device_t nb_dev)
+static void ValidatePortEn(struct device * nb_dev)
{
}
@@ -63,11 +63,11 @@
* Compliant with CIM_33's PCIEPowerOffGppPorts
* Power off unused GPP lines
*****************************************************************/
-static void PciePowerOffGppPorts(device_t nb_dev, device_t dev, u32 port)
+static void PciePowerOffGppPorts(struct device * nb_dev, struct device * dev, u32 port)
{
u32 reg;
u16 state_save;
- struct southbridge_amd_rs690_pcie_dts_config *cfg = nb_dev->device_configuration;
+ struct southbridge_amd_rs690_pcie_config *cfg = nb_dev->device_configuration;
u8 state = cfg->port_enable;
if (!(AtiPcieCfg.Config & PCIE_DISABLE_HIDE_UNUSED_PORTS))
@@ -109,7 +109,7 @@
/* Enable pci error detecting */
u32 dword;
- printk_debug("pcie_init in rs690_pcie.c\n");
+ printk(BIOS_DEBUG, "pcie_init in rs690_pcie.c\n");
/* System error enable */
dword = pci_read_config32(dev, 0x04);
@@ -121,10 +121,10 @@
/**********************************************************************
**********************************************************************/
-static void switching_gpp_configurations(device_t nb_dev, device_t sb_dev)
+static void switching_gpp_configurations(struct device * nb_dev, struct device * sb_dev)
{
u32 reg;
- struct southbridge_amd_rs690_pcie_dts_config *cfg = nb_dev->device_configuration;
+ struct southbridge_amd_rs690_pcie_config *cfg = nb_dev->device_configuration;
/* enables GPP reconfiguration */
reg = nbmisc_read_index(nb_dev, PCIE_NBCFG_REG7);
@@ -165,9 +165,9 @@
* The rs690 uses NBCONFIG:0x1c (BAR3) to map the PCIE Extended Configuration
* Space to a 256MB range within the first 4GB of addressable memory.
*****************************************************************/
-void enable_pcie_bar3(device_t nb_dev)
+void enable_pcie_bar3(struct device * nb_dev)
{
- printk_debug("enable_pcie_bar3()\n");
+ printk(BIOS_DEBUG, "enable_pcie_bar3()\n");
set_nbcfg_enable_bits(nb_dev, 0x7C, 1 << 30, 1 << 30); /* Enables writes to the BAR3 register. */
set_nbcfg_enable_bits(nb_dev, 0x84, 7 << 16, 0 << 16);
@@ -181,9 +181,9 @@
* We should disable bar3 when we want to exit rs690_enable, because bar3 will be
* remapped in set_resource later.
*****************************************************************/
-void disable_pcie_bar3(device_t nb_dev)
+void disable_pcie_bar3(struct device * nb_dev)
{
- printk_debug("disable_pcie_bar3()\n");
+ printk(BIOS_DEBUG, "disable_pcie_bar3()\n");
set_nbcfg_enable_bits(nb_dev, 0x7C, 1 << 30, 0 << 30); /* Disable writes to the BAR3. */
pci_write_config32(nb_dev, 0x1C, 0); /* clear BAR3 address */
ProgK8TempMmioBase(0, EXT_CONF_BASE_ADDRESS, TEMP_MMIO_BASE_ADDRESS);
@@ -198,13 +198,13 @@
* port:
* p2p bridge number, 4-8
*****************************************/
-void rs690_gpp_sb_init(device_t nb_dev, device_t dev, u32 port)
+void rs690_gpp_sb_init(struct device * nb_dev, struct device * dev, u32 port)
{
u8 reg8;
u16 reg16;
- device_t sb_dev;
- struct southbridge_amd_rs690_pcie_dts_config *cfg = nb_dev->device_configuration;
- printk_debug("gpp_sb_init nb_dev=0x%x, dev=0x%x, port=0x%x\n", nb_dev, dev, port);
+ struct device * sb_dev;
+ struct southbridge_amd_rs690_pcie_config *cfg = nb_dev->device_configuration;
+ printk(BIOS_DEBUG, "gpp_sb_init nb_dev=%p, dev=%p, port=0x%x\n", nb_dev, dev, port);
/* init GPP core */
set_pcie_enable_bits(nb_dev, 0x20 | PCIE_CORE_INDEX_GPPSB, 1 << 8,
@@ -260,7 +260,7 @@
PcieReleasePortTraining(nb_dev, dev, port);
if (!(AtiPcieCfg.Config & PCIE_GPP_COMPLIANCE)) {
u8 res = PcieTrainPort(nb_dev, dev, port);
- printk_debug("PcieTrainPort port=0x%x result=%d\n", port, res);
+ printk(BIOS_DEBUG, "PcieTrainPort port=0x%x result=%d\n", port, res);
if (res) {
AtiPcieCfg.PortDetect |= 1 << port;
}
@@ -331,10 +331,10 @@
/*****************************************
* Compliant with CIM_33's PCIEConfigureGPPCore
*****************************************/
-void config_gpp_core(device_t nb_dev, device_t sb_dev)
+void config_gpp_core(struct device * nb_dev, struct device * sb_dev)
{
u32 reg;
- struct southbridge_amd_rs690_pcie_dts_config *cfg = nb_dev->chip_info;
+ struct southbridge_amd_rs690_pcie_config *cfg = nb_dev->device_configuration;
reg = nbmisc_read_index(nb_dev, 0x20);
if (AtiPcieCfg.Config & PCIE_ENABLE_STATIC_DEV_REMAP)
@@ -352,10 +352,9 @@
/*****************************************
* Compliant with CIM_33's PCIEMiscClkProg
*****************************************/
-void pcie_config_misc_clk(device_t nb_dev)
+void pcie_config_misc_clk(struct device * nb_dev)
{
u32 reg;
- struct bus pbus; /* fake bus for dev0 fun1 */
reg = pci_read_config32(nb_dev, 0x4c);
reg |= 1 << 0;
@@ -368,9 +367,9 @@
set_pcie_enable_bits(nb_dev, 0x11 | PCIE_CORE_INDEX_GFX, (3 << 6) | (~0xf), 3 << 6);
/* LCLK Clock Gating */
- reg = pci_cf8_conf1.read32(&pbus, 0, 1, 0x94);
+ reg = pci_conf1_read_config32(PCI_BDF(0, 0, 1), 0x94);
reg &= ~(1 << 16);
- pci_cf8_conf1.write32(&pbus, 0, 1, 0x94, reg);
+ pci_conf1_write_config32(PCI_BDF(0, 0, 1), 0x94, reg);
}
if (AtiPcieCfg.Config & PCIE_GPP_CLK_GATING) {
@@ -380,9 +379,9 @@
set_pcie_enable_bits(nb_dev, 0x11 | PCIE_CORE_INDEX_GPPSB, (3 << 6) | (~0xf), 3 << 6);
/* LCLK Clock Gating */
- reg = pci_cf8_conf1.read32(&pbus, 0, 1, 0x94);
+ reg = pci_conf1_read_config32(PCI_BDF(0, 0, 1),0x94);
reg &= ~(1 << 24);
- pci_cf8_conf1.write32(&pbus, 0, 1, 0x94, reg);
+ pci_conf1_write_config32(PCI_BDF(0, 0, 1), 0x94, reg);
}
reg = pci_read_config32(nb_dev, 0x4c);
@@ -419,4 +418,4 @@
.vendor = PCI_VENDOR_ID_ATI,
.device = PCI_DEVICE_ID_ATI_RS690_PCIE_DEV8,
};
-*/
\ No newline at end of file
+*/
Modified: coreboot-v3/southbridge/amd/rs690/rs690.c
===================================================================
--- coreboot-v3/southbridge/amd/rs690/rs690.c 2008-10-06 17:11:47 UTC (rev 892)
+++ coreboot-v3/southbridge/amd/rs690/rs690.c 2008-10-06 17:12:38 UTC (rev 893)
@@ -37,8 +37,8 @@
if (!nb_dev)
return nb_dev;
- if ((nb_dev->vendor != PCI_VENDOR_ID_ATI)
- || (nb_dev->device != PCI_DEVICE_ID_ATI_RS690_HT)) {
+ if ((nb_dev->id.pci.vendor != PCI_VENDOR_ID_ATI)
+ || (nb_dev->id.pci.device != PCI_DEVICE_ID_ATI_RS690_HT)) {
u32 id;
id = pci_read_config32(nb_dev, PCI_VENDOR_ID);
if (id != (PCI_VENDOR_ID_ATI | (PCI_DEVICE_ID_ATI_RS690_HT << 16))) {
@@ -51,38 +51,38 @@
/*****************************************
* Compliant with CIM_33's ATINB_MiscClockCtrl
*****************************************/
-void static rs690_config_misc_clk(struct device * nb_dev)
+static void rs690_config_misc_clk(struct device * nb_dev)
{
u32 reg;
u16 word;
/* u8 byte; */
- struct bus pbus; /* fake bus for dev0 fun1 */
+ u32 dev0fun1 = PCI_BDF(0,0,1);
reg = pci_read_config32(nb_dev, 0x4c);
reg |= 1 << 0;
pci_write_config32(nb_dev, 0x4c, reg);
- word = pci_cf8_conf1.read16(&pbus, 0, 1, 0xf8);
+ word = pci_conf1_read_config16(dev0fun1, 0xf8);
word &= 0xf00;
- pci_cf8_conf1.write16(&pbus, 0, 1, 0xf8, word);
+ pci_conf1_write_config16(dev0fun1, 0xf8, word);
- word = pci_cf8_conf1.read16(&pbus, 0, 1, 0xe8);
+ word = pci_conf1_read_config16(dev0fun1, 0xe8);
word &= ~((1 << 12) | (1 << 13) | (1 << 14));
word |= 1 << 13;
- pci_cf8_conf1.write16(&pbus, 0, 1, 0xe8, word);
+ pci_conf1_write_config16(dev0fun1, 0xe8, word);
- reg = pci_cf8_conf1.read32(&pbus, 0, 1, 0x94);
+ reg = pci_conf1_read_config32(dev0fun1, 0x94);
reg &= ~((1 << 16) | (1 << 24) | (1 << 28));
- pci_cf8_conf1.write32(&pbus, 0, 1, 0x94, reg);
+ pci_conf1_write_config32(dev0fun1, 0x94, reg);
- reg = pci_cf8_conf1.read32(&pbus, 0, 1, 0x8c);
+ reg = pci_conf1_read_config32(dev0fun1, 0x8c);
reg &= ~((1 << 13) | (1 << 14) | (1 << 24) | (1 << 25));
reg |= 1 << 13;
- pci_cf8_conf1.write32(&pbus, 0, 1, 0x8c, reg);
+ pci_conf1_write_config32(dev0fun1, 0x8c, reg);
- reg = pci_cf8_conf1.read32(&pbus, 0, 1, 0xcc);
+ reg = pci_conf1_read_config32(dev0fun1, 0xcc);
reg |= 1 << 24;
- pci_cf8_conf1.write32(&pbus, 0, 1, 0xcc, reg);
+ pci_conf1_write_config32(dev0fun1, 0xcc, reg);
reg = nbmc_read_index(nb_dev, 0x7a);
reg &= ~0x3f;
@@ -91,25 +91,25 @@
set_htiu_enable_bits(nb_dev, 0x05, 1 << 11, 1 << 11);
nbmc_write_index(nb_dev, 0x7a, reg);
/* Powering Down efuse and strap block clocks after boot-up. GFX Mode. */
- reg = pci_cf8_conf1.read32(&pbus, 0, 1, 0xcc);
+ reg = pci_conf1_read_config32(dev0fun1, 0xcc);
reg &= ~(1 << 23);
reg |= 1 << 24;
- pci_cf8_conf1.write32(&pbus, 0, 1, 0xcc, reg);
+ pci_conf1_write_config32(dev0fun1, 0xcc, reg);
#if 0
/* Powerdown reference clock to graphics core PLL in northbridge only mode */
- reg = pci_cf8_conf1.read32(&pbus, 0, 1, 0x8c);
+ reg = pci_conf1_read_config32(dev0fun1, 0x8c);
reg |= 1 << 21;
- pci_cf8_conf1.write32(&pbus, 0, 1, 0x8c, reg);
+ pci_conf1_write_config32(dev0fun1, 0x8c, reg);
/* Powering Down efuse and strap block clocks after boot-up. NB Only Mode. */
- reg = pci_cf8_conf1.read32(&pbus, 0, 1, 0xcc);
+ reg = pci_conf1_read_config32(dev0fun1, 0xcc);
reg |= (1 << 23) | (1 << 24);
- pci_cf8_conf1.write32(&pbus, 0, 1, 0xcc, reg);
+ pci_conf1_write_config32(dev0fun1, 0xcc, reg);
/* Powerdown clock to memory controller in northbridge only mode */
- byte = pci_cf8_conf1.read8(&pbus, 0, 1, 0xe4);
+ byte = pci_conf1_read_config32(dev0fun1, 0xe4);
byte |= 1 << 0;
- pci_cf8_conf1.write8(&pbus, 0, 1, 0xe4, reg);
+ pci_conf1_write_config32(dev0fun1, 0xe4, reg);
/* CLKCFG:0xE8 Bit[17] = 0x1 Powerdown clock to IOC GFX block in no external graphics mode */
/* TODO: */
@@ -138,7 +138,7 @@
***********************************************/
void rs690_enable(struct device * dev)
{
- struct device * nb_dev = 0, sb_dev = 0;
+ struct device * nb_dev = 0, *sb_dev = 0;
int index = -1;
u32 i;
u32 devfn;
@@ -152,7 +152,7 @@
/**********************************************************
* Work for bus0, internal GFX located on bus1 and will return after find_nb_dev.
**********************************************************/
- i = (dev->path.u.pci.devfn) & ~7;
+ i = (dev->path.pci.devfn) & ~7;
for (devfn = 0; devfn <= i; devfn += (1 << 3)) {
nb_dev = find_nb_dev(dev, devfn);
if (nb_dev)
@@ -170,8 +170,8 @@
for (;;) ;
}
- printk(BIOS_INFO, "rs690_enable bus0, dev=0x%x\n", (dev->path.u.pci.devfn - devfn) >> 3);
- switch (dev->path.u.pci.devfn - devfn) {
+ printk(BIOS_INFO, "rs690_enable bus0, dev=0x%x\n", (dev->path.pci.devfn - devfn) >> 3);
+ switch (dev->path.pci.devfn - devfn) {
case 0: /* bus0, dev0, fun0; */
printk(BIOS_INFO, "Bus-0, Dev-0, Fun-0.\n");
enable_pcie_bar3(nb_dev); /* PCIEMiscInit */
@@ -190,7 +190,7 @@
case 2 << 3: /* bus0, dev2,3, two GFX */
case 3 << 3:
printk(BIOS_INFO, "Bus-0, Dev-2,3, Fun-0. enable=%d\n", dev->enabled);
- index = (dev->path.u.pci.devfn - devfn) >> 3;
+ index = (dev->path.pci.devfn - devfn) >> 3;
set_nbmisc_enable_bits(nb_dev, 0x0c, 1 << index,
(dev->enabled ? 0 : 1) << index);
if (dev->enabled)
@@ -202,7 +202,7 @@
case 7 << 3:
printk(BIOS_INFO, "Bus-0, Dev-4,5,6,7, Fun-0. enable=%d\n",
dev->enabled);
- index = (dev->path.u.pci.devfn - devfn) >> 3;
+ index = (dev->path.pci.devfn - devfn) >> 3;
set_nbmisc_enable_bits(nb_dev, 0x0c, 1 << index,
(dev->enabled ? 0 : 1) << index);
if (dev->enabled)
@@ -220,20 +220,3 @@
printk(BIOS_DEBUG, "unknown dev: %s\n", dev_path(dev));
}
}
-
-struct chip_operations southbridge_amd_rs690_ops = {
- CHIP_NAME("ATI RS690")
- .enable_dev = rs690_enable,
-};
-struct device_operations rs690_sb = {
- .id = {.type = DEVICE_ID_PCI,
- {.pci = {.vendor = PCI_VENDOR_ID_NVIDIA,
- .device = PCI_DEVICE_ID_NVIDIA_MCP55_IDE}}},
- .constructor = default_device_constructor,
- .phase3_scan = 0,
- .phase4_read_resources = pci_dev_read_resources,
- .phase4_set_resources = pci_dev_set_resources,
- .phase5_enable_resources = pci_dev_enable_resources,
- .phase6_init = ide_init,
- .ops_pci = &pci_dev_ops_pci,
-};
Modified: coreboot-v3/southbridge/amd/rs690/rs690.h
===================================================================
--- coreboot-v3/southbridge/amd/rs690/rs690.h 2008-10-06 17:11:47 UTC (rev 892)
+++ coreboot-v3/southbridge/amd/rs690/rs690.h 2008-10-06 17:12:38 UTC (rev 893)
@@ -19,9 +19,8 @@
#ifndef __RS690_H__
#define __RS690_H__
+#include <types.h>
-#include <stdint.h>
-
#define PCI_DEVICE_ID_ATI_RS690_HT 0x7910
#define PCI_DEVICE_ID_ATI_RS690_PCIE 0x7912
#define PCI_DEVICE_ID_ATI_RS690_PCIE_DEV2 0x7913
@@ -115,37 +114,37 @@
extern PCIE_CFG AtiPcieCfg;
/* ----------------- export functions ----------------- */
-u32 nbmisc_read_index(device_t nb_dev, u32 index);
-void nbmisc_write_index(device_t nb_dev, u32 index, u32 data);
-u32 nbpcie_p_read_index(device_t dev, u32 index);
-void nbpcie_p_write_index(device_t dev, u32 index, u32 data);
-u32 nbpcie_ind_read_index(device_t nb_dev, u32 index);
-void nbpcie_ind_write_index(device_t nb_dev, u32 index, u32 data);
-u32 htiu_read_index(device_t nb_dev, u32 index);
-void htiu_write_index(device_t nb_dev, u32 index, u32 data);
-u32 nbmc_read_index(device_t nb_dev, u32 index);
-void nbmc_write_index(device_t nb_dev, u32 index, u32 data);
+u32 nbmisc_read_index(struct device * nb_dev, u32 index);
+void nbmisc_write_index(struct device * nb_dev, u32 index, u32 data);
+u32 nbpcie_p_read_index(struct device * dev, u32 index);
+void nbpcie_p_write_index(struct device * dev, u32 index, u32 data);
+u32 nbpcie_ind_read_index(struct device * nb_dev, u32 index);
+void nbpcie_ind_write_index(struct device * nb_dev, u32 index, u32 data);
+u32 htiu_read_index(struct device * nb_dev, u32 index);
+void htiu_write_index(struct device * nb_dev, u32 index, u32 data);
+u32 nbmc_read_index(struct device * nb_dev, u32 index);
+void nbmc_write_index(struct device * nb_dev, u32 index, u32 data);
-u32 pci_ext_read_config32(device_t nb_dev, device_t dev, u32 reg);
-void pci_ext_write_config32(device_t nb_dev, device_t dev, u32 reg, u32 mask, u32 val);
+u32 pci_ext_read_config32(struct device * nb_dev, struct device * dev, u32 reg);
+void pci_ext_write_config32(struct device * nb_dev, struct device * dev, u32 reg, u32 mask, u32 val);
-void set_nbcfg_enable_bits(device_t nb_dev, u32 reg_pos, u32 mask, u32 val);
-void set_nbcfg_enable_bits_8(device_t nb_dev, u32 reg_pos, u8 mask, u8 val);
-void set_nbmc_enable_bits(device_t nb_dev, u32 reg_pos, u32 mask, u32 val);
-void set_htiu_enable_bits(device_t nb_dev, u32 reg_pos, u32 mask, u32 val);
-void set_nbmisc_enable_bits(device_t nb_dev, u32 reg_pos, u32 mask, u32 val);
-void set_pcie_enable_bits(device_t dev, u32 reg_pos, u32 mask, u32 val);
-void rs690_set_tom(device_t nb_dev);
+void set_nbcfg_enable_bits(struct device * nb_dev, u32 reg_pos, u32 mask, u32 val);
+void set_nbcfg_enable_bits_8(struct device * nb_dev, u32 reg_pos, u8 mask, u8 val);
+void set_nbmc_enable_bits(struct device * nb_dev, u32 reg_pos, u32 mask, u32 val);
+void set_htiu_enable_bits(struct device * nb_dev, u32 reg_pos, u32 mask, u32 val);
+void set_nbmisc_enable_bits(struct device * nb_dev, u32 reg_pos, u32 mask, u32 val);
+void set_pcie_enable_bits(struct device * dev, u32 reg_pos, u32 mask, u32 val);
+void rs690_set_tom(struct device * nb_dev);
void ProgK8TempMmioBase(u8 in_out, u32 pcie_base_add, u32 mmio_base_add);
-void enable_pcie_bar3(device_t nb_dev);
-void disable_pcie_bar3(device_t nb_dev);
+void enable_pcie_bar3(struct device * nb_dev);
+void disable_pcie_bar3(struct device * nb_dev);
-void rs690_enable(device_t dev);
-void rs690_gpp_sb_init(device_t nb_dev, device_t dev, u32 port);
-void rs690_gfx_init(device_t nb_dev, device_t dev, u32 port);
-void avoid_lpc_dma_deadlock(device_t nb_dev, device_t sb_dev);
-void config_gpp_core(device_t nb_dev, device_t sb_dev);
-void PcieReleasePortTraining(device_t nb_dev, device_t dev, u32 port);
-u8 PcieTrainPort(device_t nb_dev, device_t dev, u32 port);
+void rs690_enable(struct device * dev);
+void rs690_gpp_sb_init(struct device * nb_dev, struct device * dev, u32 port);
+void rs690_gfx_init(struct device * nb_dev, struct device * dev, u32 port);
+void avoid_lpc_dma_deadlock(struct device * nb_dev, struct device * sb_dev);
+void config_gpp_core(struct device * nb_dev, struct device * sb_dev);
+void PcieReleasePortTraining(struct device * nb_dev, struct device * dev, u32 port);
+u8 PcieTrainPort(struct device * nb_dev, struct device * dev, u32 port);
#endif /* RS690_H */
Modified: coreboot-v3/southbridge/amd/rs690/stage1.c
===================================================================
--- coreboot-v3/southbridge/amd/rs690/stage1.c 2008-10-06 17:11:47 UTC (rev 892)
+++ coreboot-v3/southbridge/amd/rs690/stage1.c 2008-10-06 17:12:38 UTC (rev 893)
@@ -33,112 +33,112 @@
#define NBMISC_INDEX 0x60
#define NBMC_INDEX 0xE8
-static u32 nb_read_index(u32 dev, u32 index_reg, u32 index)
+static u32 nb_bdf_read_index(u32 bdf, u32 index_reg, u32 index)
{
- pci_conf1_write_config32(dev, index_reg, index);
- return pci_conf1_read_config32(dev, index_reg + 0x4);
+ pci_conf1_write_config32(bdf, index_reg, index);
+ return pci_conf1_read_config32(bdf, index_reg + 0x4);
}
-static void nb_write_index(u32 dev, u32 index_reg, u32 index, u32 data)
+static void nb_bdf_write_index(u32 bdf, u32 index_reg, u32 index, u32 data)
{
- pci_conf1_write_config32(dev, index_reg, index /* | 0x80 */ );
- pci_conf1_write_config32(dev, index_reg + 0x4, data);
+ pci_conf1_write_config32(bdf, index_reg, index /* | 0x80 */ );
+ pci_conf1_write_config32(bdf, index_reg + 0x4, data);
}
-static u32 nbmisc_read_index(u32 nb_dev, u32 index)
+static u32 nbmisc_bdf_read_index(u32 nb_bdf, u32 index)
{
- return nb_read_index((nb_dev), NBMISC_INDEX, (index));
+ return nb_bdf_read_index((nb_bdf), NBMISC_INDEX, (index));
}
-static void nbmisc_write_index(u32 nb_dev, u32 index, u32 data)
+static void nbmisc_bdf_write_index(u32 nb_bdf, u32 index, u32 data)
{
- nb_write_index((nb_dev), NBMISC_INDEX, ((index) | 0x80), (data));
+ nb_bdf_write_index((nb_bdf), NBMISC_INDEX, ((index) | 0x80), (data));
}
-static u32 htiu_read_index(u32 nb_dev, u32 index)
+static u32 htiu_bdf_read_index(u32 nb_bdf, u32 index)
{
- return nb_read_index((nb_dev), NBHTIU_INDEX, (index));
+ return nb_bdf_read_index((nb_bdf), NBHTIU_INDEX, (index));
}
-static void htiu_write_index(u32 nb_dev, u32 index, u32 data)
+static void htiu_bdf_write_index(u32 nb_bdf, u32 index, u32 data)
{
- nb_write_index((nb_dev), NBHTIU_INDEX, ((index) | 0x100), (data));
+ nb_bdf_write_index((nb_bdf), NBHTIU_INDEX, ((index) | 0x100), (data));
}
-static u32 nbmc_read_index(u32 nb_dev, u32 index)
+static u32 nbmc_bdf_read_index(u32 nb_bdf, u32 index)
{
- return nb_read_index((nb_dev), NBMC_INDEX, (index));
+ return nb_bdf_read_index((nb_bdf), NBMC_INDEX, (index));
}
-static void nbmc_write_index(u32 nb_dev, u32 index, u32 data)
+static void nbmc_bdf_write_index(u32 nb_bdf, u32 index, u32 data)
{
- nb_write_index((nb_dev), NBMC_INDEX, ((index) | 1 << 9), (data));
+ nb_bdf_write_index((nb_bdf), NBMC_INDEX, ((index) | 1 << 9), (data));
}
-static void set_htiu_enable_bits(u32 nb_dev, u32 reg_pos, u32 mask,
+static void set_htiu_bdf_enable_bits(u32 nb_bdf, u32 reg_pos, u32 mask,
u32 val)
{
u32 reg_old, reg;
- reg = reg_old = htiu_read_index(nb_dev, reg_pos);
+ reg = reg_old = htiu_bdf_read_index(nb_bdf, reg_pos);
reg &= ~mask;
reg |= val;
if (reg != reg_old) {
- htiu_write_index(nb_dev, reg_pos, reg);
+ htiu_bdf_write_index(nb_bdf, reg_pos, reg);
}
}
-static void set_nbmisc_enable_bits(u32 nb_dev, u32 reg_pos, u32 mask,
+static void set_nbmisc_bdf_enable_bits(u32 nb_bdf, u32 reg_pos, u32 mask,
u32 val)
{
u32 reg_old, reg;
- reg = reg_old = nbmisc_read_index(nb_dev, reg_pos);
+ reg = reg_old = nbmisc_bdf_read_index(nb_bdf, reg_pos);
reg &= ~mask;
reg |= val;
if (reg != reg_old) {
- nbmisc_write_index(nb_dev, reg_pos, reg);
+ nbmisc_bdf_write_index(nb_bdf, reg_pos, reg);
}
}
-static void set_nbcfg_enable_bits(u32 nb_dev, u32 reg_pos, u32 mask,
+static void set_nbcfg_bdf_enable_bits(u32 nb_bdf, u32 reg_pos, u32 mask,
u32 val)
{
u32 reg_old, reg;
- reg = reg_old = pci_conf1_read_config32(nb_dev, reg_pos);
+ reg = reg_old = pci_conf1_read_config32(nb_bdf, reg_pos);
reg &= ~mask;
reg |= val;
if (reg != reg_old) {
- pci_conf1_write_config32(nb_dev, reg_pos, reg);
+ pci_conf1_write_config32(nb_bdf, reg_pos, reg);
}
}
-static void set_nbcfg_enable_bits_8(u32 nb_dev, u32 reg_pos, u8 mask,
+static void set_nbcfg_bdf_enable_bits_8(u32 nb_bdf, u32 reg_pos, u8 mask,
u8 val)
{
u8 reg_old, reg;
- reg = reg_old = pci_conf1_read_config8(nb_dev, reg_pos);
+ reg = reg_old = pci_conf1_read_config8(nb_bdf, reg_pos);
reg &= ~mask;
reg |= val;
if (reg != reg_old) {
- pci_conf1_write_config8(nb_dev, reg_pos, reg);
+ pci_conf1_write_config8(nb_bdf, reg_pos, reg);
}
}
-static void set_nbmc_enable_bits(u32 nb_dev, u32 reg_pos, u32 mask,
+static void set_nbmc_bdf_enable_bits(u32 nb_bdf, u32 reg_pos, u32 mask,
u32 val)
{
u32 reg_old, reg;
- reg = reg_old = nbmc_read_index(nb_dev, reg_pos);
+ reg = reg_old = nbmc_bdf_read_index(nb_bdf, reg_pos);
reg &= ~mask;
reg |= val;
if (reg != reg_old) {
- nbmc_write_index(nb_dev, reg_pos, reg);
+ nbmc_bdf_write_index(nb_bdf, reg_pos, reg);
}
}
/*
* Compliant with CIM_33's ATINB_PrepareInit
*/
-static void get_cpu_rev()
+static void get_cpu_rev(void)
{
u32 eax, ebx, ecx, edx;
__asm__ volatile ("cpuid":"=a" (eax), "=b"(ebx), "=c"(ecx), "=d"(edx)
@@ -162,13 +162,13 @@
printk(BIOS_INFO, "CPU Rev is K8_10.\n");
}
-static u8 get_nb_rev(u32 nb_dev)
+static u8 get_nb_bdf_rev(u32 nb_bdf)
{
u32 reg;
- reg = pci_conf1_read_config32(nb_dev, 0x00);
+ reg = pci_conf1_read_config32(nb_bdf, 0x00);
if (0x7911 == (reg >> 16))
return 7;
- reg = pci_conf1_read_config8(nb_dev, 0x89); /* copy from CIM, can't find in doc */
+ reg = pci_conf1_read_config8(nb_bdf, 0x89); /* copy from CIM, can't find in doc */
if (reg & 0x2) /* check bit1 */
return 7;
if (reg & 0x1) /* check bit0 */
@@ -181,7 +181,7 @@
* Compliant with CIM_33's ATINB_HTInit
* Init HT link speed/width for rs690 -- k8 link
*****************************************/
-static void rs690_htinit()
+static void rs690_htinit(void)
{
/*
* About HT, it has been done in enumerate_ht_chain().
@@ -190,7 +190,7 @@
u32 reg;
u8 k8_ht_freq;
- k8_f0 = PCI_DEV(0, 0x18, 0);
+ k8_f0 = PCI_BDF(0, 0x18, 0);
/************************
* get k8's ht freq, in k8's function 0, offset 0x88
* bit11-8, specifics the maximum operation frequency of the link's transmitter clock.
@@ -213,7 +213,7 @@
* Optimize k8 with UMA.
* See BKDG_NPT_0F guide for details.
* The processor node is addressed by its Node ID on the HT link and can be
-* accessed with a device number in the PCI configuration space on Bus0.
+* accessed with a bdfice number in the PCI configuration space on Bus0.
* The Node ID 0 is mapped to Device 24 (0x18), the Node ID 1 is mapped
* to Device 25, and so on.
* The processor implements configuration registers in PCI configuration
@@ -223,22 +223,22 @@
* Function2: DRAM and HT technology Trace mode configuration
* Function3: Miscellaneous configuration
*******************************************************/
-static void k8_optimization()
+static void k8_optimization(void)
{
u32 k8_f0, k8_f2, k8_f3;
- msr_t msr;
+ struct msr msr;
printk(BIOS_INFO, "k8_optimization()\n");
- k8_f0 = PCI_DEV(0, 0x18, 0);
- k8_f2 = PCI_DEV(0, 0x18, 2);
- k8_f3 = PCI_DEV(0, 0x18, 3);
+ k8_f0 = PCI_BDF(0, 0x18, 0);
+ k8_f2 = PCI_BDF(0, 0x18, 2);
+ k8_f3 = PCI_BDF(0, 0x18, 3);
pci_conf1_write_config32(k8_f0, 0x90, 0x01700178); /* CIM NPT_Optimization */
- set_nbcfg_enable_bits(k8_f0, 0x68, 1 << 28, 0 << 28);
- set_nbcfg_enable_bits(k8_f0, 0x68, 1 << 26 | 1 << 27,
+ set_nbcfg_bdf_enable_bits(k8_f0, 0x68, 1 << 28, 0 << 28);
+ set_nbcfg_bdf_enable_bits(k8_f0, 0x68, 1 << 26 | 1 << 27,
1 << 26 | 1 << 27);
- set_nbcfg_enable_bits(k8_f0, 0x68, 1 << 11, 1 << 11);
- set_nbcfg_enable_bits(k8_f0, 0x84, 1 << 11 | 1 << 13 | 1 << 15, 1 << 11 | 1 << 13 | 1 << 15); /* TODO */
+ set_nbcfg_bdf_enable_bits(k8_f0, 0x68, 1 << 11, 1 << 11);
+ set_nbcfg_bdf_enable_bits(k8_f0, 0x84, 1 << 11 | 1 << 13 | 1 << 15, 1 << 11 | 1 << 13 | 1 << 15); /* TODO */
pci_conf1_write_config32(k8_f3, 0x70, 0x51320111); /* CIM NPT_Optimization */
pci_conf1_write_config32(k8_f3, 0x74, 0x50304021);
@@ -247,13 +247,13 @@
pci_conf1_write_config32(k8_f3, 0x7C, 0x0000211B); /* dual core */
else
pci_conf1_write_config32(k8_f3, 0x7C, 0x0000211C); /* single core */
- set_nbcfg_enable_bits_8(k8_f3, 0xDC, 0xFF, 0x25);
+ set_nbcfg_bdf_enable_bits_8(k8_f3, 0xDC, 0xFF, 0x25);
- set_nbcfg_enable_bits(k8_f2, 0xA0, 1 << 5, 1 << 5);
- set_nbcfg_enable_bits(k8_f2, 0x94, 0xF << 24, 7 << 24);
- set_nbcfg_enable_bits(k8_f2, 0x90, 1 << 10, 1 << 10);
- set_nbcfg_enable_bits(k8_f2, 0xA0, 3 << 2, 3 << 2);
- set_nbcfg_enable_bits(k8_f2, 0xA0, 1 << 5, 1 << 5);
+ set_nbcfg_bdf_enable_bits(k8_f2, 0xA0, 1 << 5, 1 << 5);
+ set_nbcfg_bdf_enable_bits(k8_f2, 0x94, 0xF << 24, 7 << 24);
+ set_nbcfg_bdf_enable_bits(k8_f2, 0x90, 1 << 10, 1 << 10);
+ set_nbcfg_bdf_enable_bits(k8_f2, 0xA0, 3 << 2, 3 << 2);
+ set_nbcfg_bdf_enable_bits(k8_f2, 0xA0, 1 << 5, 1 << 5);
msr = rdmsr(0xC001001F);
msr.lo &= ~(1 << 9);
@@ -264,80 +264,80 @@
/*****************************************
* Compliant with CIM_33's ATINB_PCICFG_POR_TABLE
*****************************************/
-static void rs690_por_pcicfg_init(u32 nb_dev)
+static void rs690_por_pcicfg_init(u32 nb_bdf)
{
/* enable PCI Memory Access */
- set_nbcfg_enable_bits_8(nb_dev, 0x04, (u8)(~0xFD), 0x02);
+ set_nbcfg_bdf_enable_bits_8(nb_bdf, 0x04, (u8)(~0xFD), 0x02);
/* Set RCRB Enable */
- set_nbcfg_enable_bits_8(nb_dev, 0x84, (u8)(~0xFF), 0x1);
+ set_nbcfg_bdf_enable_bits_8(nb_bdf, 0x84, (u8)(~0xFF), 0x1);
/* allow decode of 640k-1MB */
- set_nbcfg_enable_bits_8(nb_dev, 0x84, (u8)(~0xEF), 0x10);
+ set_nbcfg_bdf_enable_bits_8(nb_bdf, 0x84, (u8)(~0xEF), 0x10);
/* Enable PM2_CNTL(BAR2) IO mapped cfg write access to be broadcast to both NB and SB */
- set_nbcfg_enable_bits_8(nb_dev, 0x84, (u8)(~0xFF), 0x4);
+ set_nbcfg_bdf_enable_bits_8(nb_bdf, 0x84, (u8)(~0xFF), 0x4);
/* Power Management Register Enable */
- set_nbcfg_enable_bits_8(nb_dev, 0x84, (u8)(~0xFF), 0x80);
+ set_nbcfg_bdf_enable_bits_8(nb_bdf, 0x84, (u8)(~0xFF), 0x80);
/* Reg4Ch[1]=1 (APIC_ENABLE) force cpu request with address 0xFECx_xxxx to south-bridge
* Reg4Ch[6]=1 (BMMsgEn) enable BM_Set message generation
* BMMsgEn */
- set_nbcfg_enable_bits_8(nb_dev, 0x4C, (u8)(~0x00), 0x42 | 1);
+ set_nbcfg_bdf_enable_bits_8(nb_bdf, 0x4C, (u8)(~0x00), 0x42 | 1);
/* Reg4Ch[16]=1 (WakeC2En) enable Wake_from_C2 message generation.
* Reg4Ch[18]=1 (P4IntEnable) Enable north-bridge to accept MSI with address 0xFEEx_xxxx from south-bridge */
- set_nbcfg_enable_bits_8(nb_dev, 0x4E, (u8)(~0xFF), 0x05);
+ set_nbcfg_bdf_enable_bits_8(nb_bdf, 0x4E, (u8)(~0xFF), 0x05);
/* Reg94h[4:0] = 0x0 P drive strength offset 0
* Reg94h[6:5] = 0x2 P drive strength additive adjust */
- set_nbcfg_enable_bits_8(nb_dev, 0x94, (u8)(~0x80), 0x40);
+ set_nbcfg_bdf_enable_bits_8(nb_bdf, 0x94, (u8)(~0x80), 0x40);
/* Reg94h[20:16] = 0x0 N drive strength offset 0
* Reg94h[22:21] = 0x2 N drive strength additive adjust */
- set_nbcfg_enable_bits_8(nb_dev, 0x96, (u8)(~0x80), 0x40);
+ set_nbcfg_bdf_enable_bits_8(nb_bdf, 0x96, (u8)(~0x80), 0x40);
/* Reg80h[4:0] = 0x0 Termination offset
* Reg80h[6:5] = 0x2 Termination additive adjust */
- set_nbcfg_enable_bits_8(nb_dev, 0x80, (u8)(~0x80), 0x40);
+ set_nbcfg_bdf_enable_bits_8(nb_bdf, 0x80, (u8)(~0x80), 0x40);
/* Reg80h[14] = 0x1 Enable receiver termination control */
- set_nbcfg_enable_bits_8(nb_dev, 0x81, (u8)(~0xFF), 0x40);
+ set_nbcfg_bdf_enable_bits_8(nb_bdf, 0x81, (u8)(~0xFF), 0x40);
/* Reg94h[15] = 0x1 Enables HT transmitter advanced features to be turned on
* Reg94h[14] = 0x1 Enable drive strength control */
- set_nbcfg_enable_bits_8(nb_dev, 0x95, (u8)(~0x3F), 0xC4);
+ set_nbcfg_bdf_enable_bits_8(nb_bdf, 0x95, (u8)(~0x3F), 0xC4);
/* Reg94h[31:29] = 0x7 Enables HT transmitter de-emphasis */
- set_nbcfg_enable_bits_8(nb_dev, 0x97, (u8)(~0x1F), 0xE0);
+ set_nbcfg_bdf_enable_bits_8(nb_bdf, 0x97, (u8)(~0x1F), 0xE0);
/*Reg8Ch[10:9] = 0x3 Enables Gfx Debug BAR,
* force this BAR as mem type in rs690_gfx.c */
- set_nbcfg_enable_bits_8(nb_dev, 0x8D, (u8)(~0xFF), 0x03);
+ set_nbcfg_bdf_enable_bits_8(nb_bdf, 0x8D, (u8)(~0xFF), 0x03);
}
/*****************************************
* Compliant with CIM_33's ATINB_MCIndex_POR_TABLE
*****************************************/
-static void rs690_por_mc_index_init(u32 nb_dev)
+static void rs690_por_mc_index_init(u32 nb_bdf)
{
- set_nbmc_enable_bits(nb_dev, 0x7A, ~0xFFFFFF80, 0x0000005F);
- set_nbmc_enable_bits(nb_dev, 0xD8, ~0x00000000, 0x00600060);
- set_nbmc_enable_bits(nb_dev, 0xD9, ~0x00000000, 0x00600060);
- set_nbmc_enable_bits(nb_dev, 0xE0, ~0x00000000, 0x00000000);
- set_nbmc_enable_bits(nb_dev, 0xE1, ~0x00000000, 0x00000000);
- set_nbmc_enable_bits(nb_dev, 0xE8, ~0x00000000, 0x003E003E);
- set_nbmc_enable_bits(nb_dev, 0xE9, ~0x00000000, 0x003E003E);
+ set_nbmc_bdf_enable_bits(nb_bdf, 0x7A, ~0xFFFFFF80, 0x0000005F);
+ set_nbmc_bdf_enable_bits(nb_bdf, 0xD8, ~0x00000000, 0x00600060);
+ set_nbmc_bdf_enable_bits(nb_bdf, 0xD9, ~0x00000000, 0x00600060);
+ set_nbmc_bdf_enable_bits(nb_bdf, 0xE0, ~0x00000000, 0x00000000);
+ set_nbmc_bdf_enable_bits(nb_bdf, 0xE1, ~0x00000000, 0x00000000);
+ set_nbmc_bdf_enable_bits(nb_bdf, 0xE8, ~0x00000000, 0x003E003E);
+ set_nbmc_bdf_enable_bits(nb_bdf, 0xE9, ~0x00000000, 0x003E003E);
}
/*****************************************
* Compliant with CIM_33's ATINB_MISCIND_POR_TABLE
* Compliant with CIM_33's MISC_INIT_TBL
*****************************************/
-static void rs690_por_misc_index_init(u32 nb_dev)
+static void rs690_por_misc_index_init(u32 nb_bdf)
{
/* NB_MISC_IND_WR_EN + IOC_PCIE_CNTL
* Block non-snoop DMA request if PMArbDis is set.
* Set BMSetDis */
- set_nbmisc_enable_bits(nb_dev, 0x0B, ~0xFFFF0000, 0x00000180);
- set_nbmisc_enable_bits(nb_dev, 0x01, ~0xFFFFFFFF, 0x00000040);
+ set_nbmisc_bdf_enable_bits(nb_bdf, 0x0B, ~0xFFFF0000, 0x00000180);
+ set_nbmisc_bdf_enable_bits(nb_bdf, 0x01, ~0xFFFFFFFF, 0x00000040);
/* NBCFG (NBMISCIND 0x0): NB_CNTL -
* HIDE_NB_AGP_CAP ([0], default=1)HIDE
@@ -346,51 +346,51 @@
* AGPMODE30 ([4], default=0)DISABLE
* AGP30ENCHANCED ([5], default=0)DISABLE
* HIDE_AGP_CAP ([8], default=1)ENABLE */
- set_nbmisc_enable_bits(nb_dev, 0x00, ~0xFFFF0000, 0x00000506); /* set bit 10 for MSI */
+ set_nbmisc_bdf_enable_bits(nb_bdf, 0x00, ~0xFFFF0000, 0x00000506); /* set bit 10 for MSI */
/* NBMISCIND:0x6A[16]= 1 SB link can get a full swing
- * set_nbmisc_enable_bits(nb_dev, 0x6A, 0ffffffffh, 000010000);
+ * set_nbmisc_bdf_enable_bits(nb_bdf, 0x6A, 0ffffffffh, 000010000);
* NBMISCIND:0x6A[17]=1 Set CMGOOD_OVERRIDE. */
- set_nbmisc_enable_bits(nb_dev, 0x6A, ~0xffffffff, 0x00020000);
+ set_nbmisc_bdf_enable_bits(nb_bdf, 0x6A, ~0xffffffff, 0x00020000);
/* NBMISIND:0x40 Bit[8]=1 and Bit[10]=1 following bits are required to set in order to allow LVDS or PWM features to work. */
- set_nbmisc_enable_bits(nb_dev, 0x40, ~0xffffffff, 0x00000500);
+ set_nbmisc_bdf_enable_bits(nb_bdf, 0x40, ~0xffffffff, 0x00000500);
/* NBMISIND:0xC Bit[13]=1 Enable GSM mode for C1e or C3 with pop-up. */
- set_nbmisc_enable_bits(nb_dev, 0x0C, ~0xffffffff, 0x00002000);
+ set_nbmisc_bdf_enable_bits(nb_bdf, 0x0C, ~0xffffffff, 0x00002000);
/* Set NBMISIND:0x1F[3] to map NB F2 interrupt pin to INTB# */
- set_nbmisc_enable_bits(nb_dev, 0x1F, ~0xffffffff, 0x00000008);
+ set_nbmisc_bdf_enable_bits(nb_bdf, 0x1F, ~0xffffffff, 0x00000008);
/* Compliant with CIM_33's MISC_INIT_TBL, except Hide NB_BAR3_PCIE
* Enable access to DEV8
* Enable setPower message for all ports
*/
- set_nbmisc_enable_bits(nb_dev, 0x00, 1 << 6, 1 << 6);
- set_nbmisc_enable_bits(nb_dev, 0x0b, 1 << 20, 1 << 20);
- set_nbmisc_enable_bits(nb_dev, 0x51, 1 << 20, 1 << 20);
- set_nbmisc_enable_bits(nb_dev, 0x53, 1 << 20, 1 << 20);
- set_nbmisc_enable_bits(nb_dev, 0x55, 1 << 20, 1 << 20);
- set_nbmisc_enable_bits(nb_dev, 0x57, 1 << 20, 1 << 20);
- set_nbmisc_enable_bits(nb_dev, 0x59, 1 << 20, 1 << 20);
- set_nbmisc_enable_bits(nb_dev, 0x5B, 1 << 20, 1 << 20);
+ set_nbmisc_bdf_enable_bits(nb_bdf, 0x00, 1 << 6, 1 << 6);
+ set_nbmisc_bdf_enable_bits(nb_bdf, 0x0b, 1 << 20, 1 << 20);
+ set_nbmisc_bdf_enable_bits(nb_bdf, 0x51, 1 << 20, 1 << 20);
+ set_nbmisc_bdf_enable_bits(nb_bdf, 0x53, 1 << 20, 1 << 20);
+ set_nbmisc_bdf_enable_bits(nb_bdf, 0x55, 1 << 20, 1 << 20);
+ set_nbmisc_bdf_enable_bits(nb_bdf, 0x57, 1 << 20, 1 << 20);
+ set_nbmisc_bdf_enable_bits(nb_bdf, 0x59, 1 << 20, 1 << 20);
+ set_nbmisc_bdf_enable_bits(nb_bdf, 0x5B, 1 << 20, 1 << 20);
- set_nbmisc_enable_bits(nb_dev, 0x00, 1 << 7, 1 << 7);
- set_nbmisc_enable_bits(nb_dev, 0x07, 0x000000f0, 0x30);
+ set_nbmisc_bdf_enable_bits(nb_bdf, 0x00, 1 << 7, 1 << 7);
+ set_nbmisc_bdf_enable_bits(nb_bdf, 0x07, 0x000000f0, 0x30);
/* Disable bus-master trigger event from SB and Enable set_slot_power message to SB */
- set_nbmisc_enable_bits(nb_dev, 0x0B, 0xffffffff, 0x500180);
+ set_nbmisc_bdf_enable_bits(nb_bdf, 0x0B, 0xffffffff, 0x500180);
}
/*****************************************
* Compliant with CIM_33's ATINB_HTIUNBIND_POR_TABLE
*****************************************/
-static void rs690_por_htiu_index_init(u32 nb_dev)
+static void rs690_por_htiu_index_init(u32 nb_bdf)
{
/* 0xBC:
* Enables GSM mode for C1e or C3 with pop-up
* Prevents AllowLdtStop from being asserted during HT link recovery
* Allows FID cycles to be serviced faster. Needed for RS690 A12. No harm in RS690 A11 */
- set_htiu_enable_bits(nb_dev, 0x05, ~0xffffffff, 0x0BC);
+ set_htiu_bdf_enable_bits(nb_bdf, 0x05, ~0xffffffff, 0x0BC);
/* 0x4203A202:
* Enables writes to pass in-progress reads
* Enables streaming of CPU writes
@@ -400,15 +400,15 @@
* Enables decoding of C1e/C3 and FID cycles
* Enables HTIU-display handshake bypass.
* Enables tagging fix */
- set_htiu_enable_bits(nb_dev, 0x06, ~0xFFFFFFFE, 0x4203A202);
+ set_htiu_bdf_enable_bits(nb_bdf, 0x06, ~0xFFFFFFFE, 0x4203A202);
/* Enables byte-write optimization for IOC requests
* Disables delaying STPCLK de-assert during FID sequence. Needed when enhanced UMA arbitration is used.
* Disables upstream system-management delay */
- set_htiu_enable_bits(nb_dev, 0x07, ~0xFFFFFFF9, 0x001);
+ set_htiu_bdf_enable_bits(nb_bdf, 0x07, ~0xFFFFFFF9, 0x001);
/* HTIUNBIND 0x16 [1] = 0x1 Enable crc decoding fix */
- set_htiu_enable_bits(nb_dev, 0x16, ~0xFFFFFFFF, 0x2);
+ set_htiu_bdf_enable_bits(nb_bdf, 0x16, ~0xFFFFFFFF, 0x2);
}
/*****************************************
@@ -417,29 +417,29 @@
* POR: Power On Reset
* RPR: Register Programming Requirements
*****************************************/
-static void rs690_por_init(u32 nb_dev)
+static void rs690_por_init(u32 nb_bdf)
{
printk(BIOS_INFO, "rs690_por_init\n");
/* ATINB_PCICFG_POR_TABLE, initialize the values for rs690 PCI Config registers */
- rs690_por_pcicfg_init(nb_dev);
+ rs690_por_pcicfg_init(nb_bdf);
/* ATINB_MCIND_POR_TABLE */
- rs690_por_mc_index_init(nb_dev);
+ rs690_por_mc_index_init(nb_bdf);
/* ATINB_MISCIND_POR_TABLE */
- rs690_por_misc_index_init(nb_dev);
+ rs690_por_misc_index_init(nb_bdf);
/* ATINB_HTIUNBIND_POR_TABLE */
- rs690_por_htiu_index_init(nb_dev);
+ rs690_por_htiu_index_init(nb_bdf);
/* ATINB_CLKCFG_PORT_TABLE */
/* rs690 A11 SB Link full swing? */
}
/* enable CFG access to Dev8, which is the SB P2P Bridge */
-static void enable_rs690_dev8()
+void enable_rs690_dev8(void)
{
- set_nbmisc_enable_bits(PCI_DEV(0, 0, 0), 0x00, 1 << 6, 1 << 6);
+ set_nbmisc_bdf_enable_bits(PCI_BDF(0, 0, 0), 0x00, 1 << 6, 1 << 6);
}
@@ -447,21 +447,21 @@
/*
* Compliant with CIM_33's AtiNBInitEarlyPost (AtiInitNBBeforePCIInit).
*/
-void rs690_before_pci_init()
+void rs690_before_pci_init(void)
{
}
/*
* The calling sequence is same as CIM.
*/
-void rs690_early_setup()
+void rs690_stage1(void)
{
- u32 nb_dev = PCI_DEV(0, 0, 0);
+ u32 nb_bdf = PCI_BDF(0, 0, 0);
printk(BIOS_INFO, "rs690_early_setup()\n");
/*ATINB_PrepareInit */
get_cpu_rev();
- switch (get_nb_rev(nb_dev)) { /* PCIEMiscInit */
+ switch (get_nb_bdf_rev(nb_bdf)) { /* PCIEMiscInit */
case 5:
printk(BIOS_INFO, "NB Revision is A11.\n");
break;
@@ -475,5 +475,5 @@
rs690_htinit();
k8_optimization();
- rs690_por_init(nb_dev);
+ rs690_por_init(nb_bdf);
}
Added: coreboot-v3/southbridge/amd/sb600/Makefile
===================================================================
--- coreboot-v3/southbridge/amd/sb600/Makefile (rev 0)
+++ coreboot-v3/southbridge/amd/sb600/Makefile 2008-10-06 17:12:38 UTC (rev 893)
@@ -0,0 +1,40 @@
+##
+## This file is part of the coreboot project.
+##
+## Copyright (C) 2007 coresystems GmbH
+## (Written by Stefan Reinauer <stepan(a)coresystems.de> for coresystems GmbH)
+##
+## 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; either version 2 of the License, or
+## (at your option) any later version.
+##
+## 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
+##
+
+ifeq ($(CONFIG_SOUTHBRIDGE_AMD_SB600),y)
+
+STAGE2_CHIPSET_SRC += $(src)/southbridge/amd/sb600/sb600.c
+
+STAGE2_CHIPSET_SRC += \
+ $(src)/southbridge/amd/sb600/ac97.c \
+ $(src)/southbridge/amd/sb600/hda.c \
+ $(src)/southbridge/amd/sb600/ide.c \
+ $(src)/southbridge/amd/sb600/lpc.c \
+ $(src)/southbridge/amd/sb600/pci.c \
+ $(src)/southbridge/amd/sb600/sata.c \
+ $(src)/southbridge/amd/sb600/sm.c \
+ $(src)/southbridge/amd/sb600/usb.c
+
+STAGE0_CHIPSET_SRC += $(src)/southbridge/amd/sb600/stage1.c \
+ $(src)/southbridge/amd/sb600/stage1_reset.c \
+ $(src)/southbridge/amd/sb600/stage1_smbus.c
+
+endif
Modified: coreboot-v3/southbridge/amd/sb600/hda.c
===================================================================
--- coreboot-v3/southbridge/amd/sb600/hda.c 2008-10-06 17:11:47 UTC (rev 892)
+++ coreboot-v3/southbridge/amd/sb600/hda.c 2008-10-06 17:12:38 UTC (rev 893)
@@ -24,6 +24,7 @@
#include <msr.h>
#include <legacy.h>
#include <device/pci_ids.h>
+#include <io.h>
#include <statictree.h>
#include <config.h>
#include "sb600.h"
@@ -149,8 +150,7 @@
static unsigned find_verb(u32 viddid, u32 ** verb)
{
struct device * azalia_dev = dev_find_slot(0, PCI_DEVFN(0x14, 2));
- struct southbridge_amd_sb600_dts_config *cfg =
- (struct southbridge_amd_sb600_config *)azalia_dev->chip_info;
+ struct southbridge_amd_sb600_hda_config *cfg = azalia_dev->device_configuration;
printk(BIOS_DEBUG, "Dev=%s\n", dev_path(azalia_dev));
printk(BIOS_DEBUG, "Default viddid=%x\n", cfg->hda_viddid);
printk(BIOS_DEBUG, "Reading viddid=%x\n", viddid);
@@ -239,7 +239,7 @@
return;
base = (u8 *) ((u32)res->base);
- printk(BIOS_DEBUG, "base = %08x\n", base);
+ printk(BIOS_DEBUG, "base = %p\n", base);
codec_mask = codec_detect(base);
if (codec_mask) {
Modified: coreboot-v3/southbridge/amd/sb600/hda.dts
===================================================================
--- coreboot-v3/southbridge/amd/sb600/hda.dts 2008-10-06 17:11:47 UTC (rev 892)
+++ coreboot-v3/southbridge/amd/sb600/hda.dts 2008-10-06 17:12:38 UTC (rev 893)
@@ -20,4 +20,5 @@
{
device_operations = "sb600_hda";
+ hda_viddid = "0";
};
Modified: coreboot-v3/southbridge/amd/sb600/ide.c
===================================================================
--- coreboot-v3/southbridge/amd/sb600/ide.c 2008-10-06 17:11:47 UTC (rev 892)
+++ coreboot-v3/southbridge/amd/sb600/ide.c 2008-10-06 17:12:38 UTC (rev 893)
@@ -55,7 +55,7 @@
dword |= 1 << 2;
pci_write_config16(dev, 0x4, dword);
-#if CONFIG_PCI_ROM_RUN == 1
+#if CONFIG_PCI_OPTION_ROM_RUN == 1
pci_dev_init(dev);
#endif
Modified: coreboot-v3/southbridge/amd/sb600/lpc.c
===================================================================
--- coreboot-v3/southbridge/amd/sb600/lpc.c 2008-10-06 17:11:47 UTC (rev 892)
+++ coreboot-v3/southbridge/amd/sb600/lpc.c 2008-10-06 17:12:38 UTC (rev 893)
@@ -109,7 +109,7 @@
struct device * child;
for (child = dev->link[link].children; child;
child = child->sibling) {
- enable_resources(child);
+ dev_phase5(child);
if (child->have_resources
&& (child->path.type == DEVICE_PATH_PNP)) {
for (i = 0; i < child->resources; i++) {
@@ -120,8 +120,7 @@
continue;
base = res->base;
end = resource_end(res);
- printk_debug
- ("sb600 lpc decode:%s, base=0x%08x, end=0x%08x\n",
+ printk(BIOS_DEBUG, "sb600 lpc decode:%s, base=0x%08lx, end=0x%08lx\n",
dev_path(child), base, end);
switch (base) {
case 0x60: /* KB */
@@ -213,7 +212,7 @@
{.pci = {.vendor = PCI_VENDOR_ID_AMD,
.device = PCI_DEVICE_ID_ATI_SB600_LPC}}},
.constructor = default_device_constructor,
- .phase3_scan_bus = scan_status_bus,
+ .phase3_scan = scan_static_bus,
.phase4_read_resources = sb600_lpc_read_resources,
.phase4_set_resources = pci_dev_set_resources,
.phase5_enable_resources = sb600_lpc_enable_resources,
Modified: coreboot-v3/southbridge/amd/sb600/pci.c
===================================================================
--- coreboot-v3/southbridge/amd/sb600/pci.c 2008-10-06 17:11:47 UTC (rev 892)
+++ coreboot-v3/southbridge/amd/sb600/pci.c 2008-10-06 17:12:38 UTC (rev 893)
@@ -17,11 +17,15 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include <console/console.h>
-#include <device/device.h>
+#include <types.h>
+#include <lib.h>
+#include <console.h>
#include <device/pci.h>
+#include <msr.h>
+#include <legacy.h>
#include <device/pci_ids.h>
-#include <device/pci_ops.h>
+#include <statictree.h>
+#include <config.h>
#include "sb600.h"
static void pci_init(struct device *dev)
Modified: coreboot-v3/southbridge/amd/sb600/sata.c
===================================================================
--- coreboot-v3/southbridge/amd/sb600/sata.c 2008-10-06 17:11:47 UTC (rev 892)
+++ coreboot-v3/southbridge/amd/sb600/sata.c 2008-10-06 17:12:38 UTC (rev 893)
@@ -24,6 +24,7 @@
#include <msr.h>
#include <legacy.h>
#include <device/pci_ids.h>
+#include <io.h>
#include <statictree.h>
#include <config.h>
#include "sb600.h"
@@ -69,7 +70,7 @@
printk(BIOS_DEBUG, "sata_bar2=%x\n", sata_bar2); /* 3040 */
printk(BIOS_DEBUG, "sata_bar3=%x\n", sata_bar3); /* 3080 */
printk(BIOS_DEBUG, "sata_bar4=%x\n", sata_bar4); /* 3000 */
- printk(BIOS_DEBUG, "sata_bar5=%x\n", sata_bar5); /* e0309000 */
+ printk(BIOS_DEBUG, "sata_bar5=%p\n", sata_bar5); /* e0309000 */
/* Program the 2C to 0x43801002 */
dword = 0x43801002;
@@ -197,4 +198,4 @@
.phase5_enable_resources = pci_dev_enable_resources,
.phase6_init = sata_init,
.ops_pci = &lops_pci
-};
\ No newline at end of file
+};
Modified: coreboot-v3/southbridge/amd/sb600/sb600.c
===================================================================
--- coreboot-v3/southbridge/amd/sb600/sb600.c 2008-10-06 17:11:47 UTC (rev 892)
+++ coreboot-v3/southbridge/amd/sb600/sb600.c 2008-10-06 17:12:38 UTC (rev 893)
@@ -24,6 +24,7 @@
#include <msr.h>
#include <legacy.h>
#include <device/pci_ids.h>
+#include <io.h>
#include <statictree.h>
#include <config.h>
#include "sb600.h"
@@ -36,8 +37,8 @@
if (!sm_dev)
return sm_dev;
- if ((sm_dev->vendor != PCI_VENDOR_ID_ATI) ||
- ((sm_dev->device != PCI_DEVICE_ID_ATI_SB600_SM))) {
+ if ((sm_dev->id.pci.vendor != PCI_VENDOR_ID_ATI) ||
+ ((sm_dev->id.pci.device != PCI_DEVICE_ID_ATI_SB600_SM))) {
u32 id;
id = pci_read_config32(sm_dev, PCI_VENDOR_ID);
if ((id !=
@@ -61,42 +62,13 @@
}
}
-static void pmio_write_index(unsigned long port_base, u8 reg, u8 value)
-{
- outb(reg, port_base);
- outb(value, port_base + 1);
-}
+void pmio_write_index(unsigned long port_base, u8 reg, u8 value);
+u8 pmio_read_index(unsigned long port_base, u8 reg);
+u8 pm_ioread(u8 reg);
+void pm_iowrite(u8 reg, u8 value);
+void pm2_iowrite(u8 reg, u8 value);
+u8 pm2_ioread(u8 reg);
-static u8 pmio_read_index(unsigned long port_base, u8 reg)
-{
- outb(reg, port_base);
- return inb(port_base + 1);
-}
-
-void pm_iowrite(u8 reg, u8 value)
-{
- unsigned long port_base = 0xcd6;
- pmio_write_index(port_base, reg, value);
-}
-
-u8 pm_ioread(u8 reg)
-{
- unsigned long port_base = 0xcd6;
- return pmio_read_index(port_base, reg);
-}
-
-void pm2_iowrite(u8 reg, u8 value)
-{
- unsigned long port_base = 0xcd0;
- pmio_write_index(port_base, reg, value);
-}
-
-u8 pm2_ioread(u8 reg)
-{
- unsigned long port_base = 0xcd0;
- return pmio_read_index(port_base, reg);
-}
-
static void set_pmio_enable_bits(struct device * sm_dev, u32 reg_pos,
u32 mask, u32 val)
{
@@ -140,17 +112,17 @@
* 0:14.5 ACI bit 0 of pm_io 0x59 : 0 - enable, default
* 0:14.6 MCI bit 1 of pm_io 0x59 : 0 - enable, default
*/
- if (dev->device == 0x0000) {
+ if (dev->id.pci.device == 0x0000) {
vendorid = pci_read_config32(dev, PCI_VENDOR_ID);
deviceid = (vendorid >> 16) & 0xffff;
vendorid &= 0xffff;
} else {
- vendorid = dev->vendor;
- deviceid = dev->device;
+ vendorid = dev->id.pci.vendor;
+ deviceid = dev->id.pci.device;
}
bus_dev = dev->bus->dev;
- if ((bus_dev->vendor == PCI_VENDOR_ID_ATI) &&
- (bus_dev->device == PCI_DEVICE_ID_ATI_SB600_PCI)) {
+ if ((bus_dev->id.pci.vendor == PCI_VENDOR_ID_ATI) &&
+ (bus_dev->id.pci.device == PCI_DEVICE_ID_ATI_SB600_PCI)) {
devfn = (bus_dev->path.pci.devfn) & ~7;
sm_dev = find_sm_dev(bus_dev, devfn);
if (!sm_dev)
@@ -233,7 +205,7 @@
struct device_operations sb600 = {
.id = {.type = DEVICE_ID_PCI,
{.pci = {.vendor = PCI_VENDOR_ID_AMD,
- .device = xz}}},
+ .device = PCI_DEVICE_ID_ATI_SB600_LPC}}},
.constructor = default_device_constructor,
.phase3_scan = 0,
.phase4_enable_disable = sb600_enable,
Modified: coreboot-v3/southbridge/amd/sb600/sb600.h
===================================================================
--- coreboot-v3/southbridge/amd/sb600/sb600.h 2008-10-06 17:11:47 UTC (rev 892)
+++ coreboot-v3/southbridge/amd/sb600/sb600.h 2008-10-06 17:12:38 UTC (rev 893)
@@ -35,12 +35,12 @@
#define PCI_DEVICE_ID_ATI_SB600_USB_3 0x438A
#define PCI_DEVICE_ID_ATI_SB600_USB_4 0x438B
-extern void pm_iowrite(u8 reg, u8 value);
-extern u8 pm_ioread(u8 reg);
-extern void pm2_iowrite(u8 reg, u8 value);
-extern u8 pm2_ioread(u8 reg);
-extern void set_sm_enable_bits(device_t sm_dev, u32 reg_pos, u32 mask, u32 val);
+void pm_iowrite(u8 reg, u8 value);
+u8 pm_ioread(u8 reg);
+void pm2_iowrite(u8 reg, u8 value);
+u8 pm2_ioread(u8 reg);
+void set_sm_enable_bits(struct device * sm_dev, u32 reg_pos, u32 mask, u32 val);
-void sb600_enable(device_t dev);
+void sb600_enable(struct device * dev);
#endif /* SB600_H */
Modified: coreboot-v3/southbridge/amd/sb600/sb600_smbus.h
===================================================================
--- coreboot-v3/southbridge/amd/sb600/sb600_smbus.h 2008-10-06 17:11:47 UTC (rev 892)
+++ coreboot-v3/southbridge/amd/sb600/sb600_smbus.h 2008-10-06 17:12:38 UTC (rev 893)
@@ -58,5 +58,7 @@
#define axindxp_reg(reg, mask, val) \
alink_ax_indx(1, (reg), (mask), (val))
+#define SMBUS_IO_BASE 0x1000 /* Is it a temporary SMBus I/O base address? */
+ /*SIZE 0x40 */
#endif
Modified: coreboot-v3/southbridge/amd/sb600/sm.c
===================================================================
--- coreboot-v3/southbridge/amd/sb600/sm.c 2008-10-06 17:11:47 UTC (rev 892)
+++ coreboot-v3/southbridge/amd/sb600/sm.c 2008-10-06 17:12:38 UTC (rev 893)
@@ -23,10 +23,15 @@
#include <msr.h>
#include <legacy.h>
#include <device/pci_ids.h>
+#include <device/smbus.h>
+#include <cpu.h>
+#include <lapic.h>
+#include <io.h>
#include <statictree.h>
#include <config.h>
+#include <mc146818rtc.h>
#include "sb600.h"
-#include "sb600_smbus.c"
+#include "sb600_smbus.h"
#define NMI_OFF 0
@@ -86,6 +91,18 @@
/* Be careful and don't write past the end... */
};
+void alink_ab_indx(unsigned int reg_space, unsigned int reg_addr,
+ unsigned int mask, unsigned int val);
+void alink_ax_indx(unsigned int space /*c or p? */ , unsigned int axindc,
+ unsigned int mask, unsigned int val);
+int do_smbus_recv_byte(u32 smbus_io_base, u32 device);
+int do_smbus_read_byte(u32 smbus_io_base, u32 device,
+ u32 address);
+int do_smbus_write_byte(u32 smbus_io_base, u32 device,
+ u32 address, u8 val);
+int do_smbus_send_byte(u32 smbus_io_base, u32 device,
+ u8 val);
+
static void setup_ioapic(unsigned long ioapic_base)
{
int i;
@@ -108,7 +125,7 @@
l[4] = a->value_high;
value_high = l[4];
if ((i == 0) && (value_low == 0xffffffff)) {
- printk_warning("IO APIC not responding.\n");
+ printk(BIOS_WARNING, "IO APIC not responding.\n");
return;
}
}
@@ -382,6 +399,6 @@
.phase4_set_resources = sb600_sm_set_resources,
.phase5_enable_resources = pci_dev_enable_resources,
.phase6_init = sm_init,
- .ops_pci = &lops_pci
+ .ops_pci = &lops_pci,
.ops_smbus_bus = &lops_smbus_bus,
-};
\ No newline at end of file
+};
Modified: coreboot-v3/southbridge/amd/sb600/stage1.c
===================================================================
--- coreboot-v3/southbridge/amd/sb600/stage1.c 2008-10-06 17:11:47 UTC (rev 892)
+++ coreboot-v3/southbridge/amd/sb600/stage1.c 2008-10-06 17:12:38 UTC (rev 893)
@@ -26,17 +26,49 @@
#include <statictree.h>
#include <config.h>
#include <io.h>
-BORKED
-#define SMBUS_IO_BASE 0x1000 /* Is it a temporary SMBus I/O base address? */
- /*SIZE 0x40 */
+#include <cpu.h>
+#include "sb600_smbus.h"
-/* Get SB ASIC Revision.*/
-static u8 get_sb600_revision()
+
+void pmio_write_index(unsigned long port_base, u8 reg, u8 value)
{
+ outb(reg, port_base);
+ outb(value, port_base + 1);
+}
+
+u8 pmio_read_index(unsigned long port_base, u8 reg)
+{
+ outb(reg, port_base);
+ return inb(port_base + 1);
+}
+
+void pm_iowrite(u8 reg, u8 value)
+{
+ unsigned long port_base = 0xcd6;
+ pmio_write_index(port_base, reg, value);
+}
+
+u8 pm_ioread(u8 reg)
+{
+ unsigned long port_base = 0xcd6;
+ return pmio_read_index(port_base, reg);
+}
+
+void pm2_iowrite(u8 reg, u8 value)
+{
+ unsigned long port_base = 0xcd0;
+ pmio_write_index(port_base, reg, value);
+}
+
+u8 pm2_ioread(u8 reg)
+{
+ unsigned long port_base = 0xcd0;
+ return pmio_read_index(port_base, reg);
+}/* Get SB ASIC Revision.*/
+static u8 get_sb600_revision(void)
+{
u32 dev;
- pci_conf1_find_device(0x1002, 0x4385, &dev);
-
- if (dev == PCI_DEV_INVALID) {
+ if (!pci_conf1_find_device(0x1002, 0x4385, &dev)){
die("SMBUS controller not found\r\n");
}
return pci_conf1_read_config8(dev, 0x08);
@@ -51,7 +83,7 @@
* LPC ROM size,
* NOTE: Call me ASAP, because I will reset LPC ROM size!
***************************************/
-static void sb600_lpc_init(void)
+void sb600_lpc_init(void)
{
u8 reg8;
u32 reg32;
@@ -89,7 +121,7 @@
}
/* what is its usage? */
-static u32 get_sbdn(u32 bus)
+u32 get_sbdn(u32 bus)
{
u32 dev;
@@ -99,7 +131,7 @@
}
-static u8 dual_core()
+u8 dual_core(void)
{
if(((cpuid_eax(0x80000000) & ~0xff) >= 8)) {
if(cpuid_ecx(0x80000008) & 1)
@@ -112,80 +144,72 @@
SB600 VFSMAF (VID/FID System Management Action Field) is 010b by default.
RPR 2.3.3 C-state and VID/FID change for the K8 platform.
*/
-static void enable_fid_change_on_sb(u32 sbbusn, u32 sbdn)
+void enable_fid_change_on_sb(u32 sbbusn, u32 sbdn)
{
u8 byte;
- byte = pmio_read(0x9a);
+ byte = pm_ioread(0x9a);
byte &= ~0x34;
if(dual_core())
byte |= 0x34;
else
byte |= 0x04;
- pmio_write(0x9a, byte);
+ pm_iowrite(0x9a, byte);
- byte = pmio_read(0x8f);
+ byte = pm_ioread(0x8f);
byte &= ~0x30;
byte |= 0x20;
- pmio_write(0x8f, byte);
+ pm_iowrite(0x8f, byte);
- pmio_write(0x8b, 0x01);
- pmio_write(0x8a, 0x90);
+ pm_iowrite(0x8b, 0x01);
+ pm_iowrite(0x8a, 0x90);
if(get_sb600_revision() > 0x13)
- pmio_write(0x88, 0x10);
+ pm_iowrite(0x88, 0x10);
else
- pmio_write(0x88, 0x06);
+ pm_iowrite(0x88, 0x06);
- byte = pmio_read(0x7c);
+ byte = pm_ioread(0x7c);
byte &= ~0x01;
byte |= 0x01;
- pmio_write(0x7c, byte);
+ pm_iowrite(0x7c, byte);
/*Must be 0 for K8 platform.*/
- byte = pmio_read(0x68);
+ byte = pm_ioread(0x68);
byte &= ~0x01;
- pmio_write(0x68, byte);
+ pm_iowrite(0x68, byte);
/*Must be 0 for K8 platform.*/
- byte = pmio_read(0x8d);
+ byte = pm_ioread(0x8d);
byte &= ~(1<<6);
- pmio_write(0x8d, byte);
+ pm_iowrite(0x8d, byte);
- byte = pmio_read(0x61);
+ byte = pm_ioread(0x61);
byte &= ~0x04;
- pmio_write(0x61, byte);
+ pm_iowrite(0x61, byte);
- byte = pmio_read(0x42);
+ byte = pm_ioread(0x42);
byte &= ~0x04;
- pmio_write(0x42, byte);
+ pm_iowrite(0x42, byte);
if(get_sb600_revision() == 0x14) {
- pmio_write(0x89, 0x10);
+ pm_iowrite(0x89, 0x10);
- byte = pmio_read(0x52);
+ byte = pm_ioread(0x52);
byte |= 0x80;
- pmio_write(0x52, byte);
+ pm_iowrite(0x52, byte);
}
}
+void set_bios_reset(void);
-static void hard_reset(void)
+void soft_reset(void)
{
set_bios_reset();
-
- /* full reset */
- outb(0x0a, 0x0cf9);
- outb(0x0e, 0x0cf9);
-}
-
-static void soft_reset(void)
-{
- set_bios_reset();
/* link reset */
outb(0x06, 0x0cf9);
}
-static void sb600_pci_port80()
+void sb600_pci_port80(void)
{
u8 byte;
u32 dev;
@@ -220,7 +244,7 @@
pci_conf1_write_config8(dev, 0x4A, byte);
}
-static void sb600_lpc_port80(void)
+void sb600_lpc_port80(void)
{
u8 byte;
u32 dev;
@@ -241,17 +265,19 @@
/* sbDevicesPorInitTable */
-static void sb600_devices_por_init()
+static void sb600_devices_por_init(void)
{
+ void alink_ab_indx(unsigned int reg_space, unsigned int reg_addr,
+ unsigned int mask, unsigned int val);
+ void alink_ax_indx(unsigned int space /*c or p? */ , unsigned int axindc,
+ unsigned int mask, unsigned int val);
u32 dev;
u8 byte;
printk(BIOS_INFO, "sb600_devices_por_init()\n");
/* SMBus Device, BDF:0-20-0 */
printk(BIOS_INFO, "sb600_devices_por_init(): SMBus Device, BDF:0-20-0\n");
- pci_conf1_find_device(0x1002, 0x4385, &dev);
-
- if (dev == PCI_DEV_INVALID) {
+ if (!pci_conf1_find_device(0x1002, 0x4385, &dev)){
die("SMBUS controller not found\r\n");
}
printk(BIOS_INFO, "SMBus controller enabled, sb revision is 0x%x\r\n",
@@ -436,94 +462,94 @@
* The index address is first programmed into IO reg 0xcd6.
* Read or write values are accessed through IO reg 0xcd7.
*/
-static void sb600_pmio_por_init()
+static void sb600_pmio_por_init(void)
{
u8 byte;
printk(BIOS_INFO, "sb600_pmio_por_init()\n");
/* K8KbRstEn, KB_RST# control for K8 system. */
- byte = pmio_read(0x66);
+ byte = pm_ioread(0x66);
byte |= 0x20;
- pmio_write(0x66, byte);
+ pm_iowrite(0x66, byte);
/* RPR2.3.4 S3/S4/S5 Function for the K8 Platform. */
- byte = pmio_read(0x52);
+ byte = pm_ioread(0x52);
byte &= 0xc0;
byte |= 0x08;
- pmio_write(0x52, byte);
+ pm_iowrite(0x52, byte);
/* C state enable and SLP enable in C states. */
- byte = pmio_read(0x67);
+ byte = pm_ioread(0x67);
byte |= 0x6;
- pmio_write(0x67, byte);
+ pm_iowrite(0x67, byte);
/* CIM sets 0x0e, but bit2 is for P4 system. */
- byte = pmio_read(0x68);
+ byte = pm_ioread(0x68);
byte &= 0xf0;
byte |= 0x0c;
- pmio_write(0x68, byte);
+ pm_iowrite(0x68, byte);
/* Watch Dog Timer Control
* Set watchdog time base to 0xfec000f0 to avoid SCSI card boot failure.
* But I don't find WDT is enabled in SMBUS 0x41 bit3 in CIM.
*/
- pmio_write(0x6c, 0xf0);
- pmio_write(0x6d, 0x00);
- pmio_write(0x6e, 0xc0);
- pmio_write(0x6f, 0xfe);
+ pm_iowrite(0x6c, 0xf0);
+ pm_iowrite(0x6d, 0x00);
+ pm_iowrite(0x6e, 0xc0);
+ pm_iowrite(0x6f, 0xfe);
/* rpr2.14: Enables HPET periodical mode */
- byte = pmio_read(0x9a);
+ byte = pm_ioread(0x9a);
byte |= 1 << 7;
- pmio_write(0x9a, byte);
- byte = pmio_read(0x9f);
+ pm_iowrite(0x9a, byte);
+ byte = pm_ioread(0x9f);
byte |= 1 << 5;
- pmio_write(0x9f, byte);
- byte = pmio_read(0x9e);
+ pm_iowrite(0x9f, byte);
+ byte = pm_ioread(0x9e);
byte |= (1 << 6) | (1 << 7);
- pmio_write(0x9e, byte);
+ pm_iowrite(0x9e, byte);
/* rpr2.14: Hides SM bus controller Bar1 where stores HPET MMIO base address */
- byte = pmio_read(0x55);
+ byte = pm_ioread(0x55);
byte |= 1 << 7;
- pmio_write(0x55, byte);
+ pm_iowrite(0x55, byte);
/* rpr2.14: Make HPET MMIO decoding controlled by the memory enable bit in command register of LPC ISA bridage */
- byte = pmio_read(0x52);
+ byte = pm_ioread(0x52);
byte |= 1 << 6;
- pmio_write(0x52, byte);
+ pm_iowrite(0x52, byte);
/* rpr2.22: PLL Reset */
- byte = pmio_read(0x86);
+ byte = pm_ioread(0x86);
byte |= 1 << 7;
- pmio_write(0x86, byte);
+ pm_iowrite(0x86, byte);
/* rpr2.3.3 */
/* This provides 16us delay before the assertion of LDTSTP# when C3 is entered.
* The delay will allow USB DMA to go on in a continuous manner
*/
- pmio_write(0x89, 0x10);
+ pm_iowrite(0x89, 0x10);
/* Set this bit to allow pop-up request being latched during the minimum LDTSTP# assertion time */
- byte = pmio_read(0x52);
+ byte = pm_ioread(0x52);
byte |= 1 << 7;
- pmio_write(0x52, byte);
+ pm_iowrite(0x52, byte);
/* rpr2.15: ASF Remote Control Action */
- byte = pmio_read(0x9f);
+ byte = pm_ioread(0x9f);
byte |= 1 << 6;
- pmio_write(0x9f, byte);
+ pm_iowrite(0x9f, byte);
/* rpr2.19: Enabling Spread Spectrum */
- byte = pmio_read(0x42);
+ byte = pm_ioread(0x42);
byte |= 1 << 7;
- pmio_write(0x42, byte);
+ pm_iowrite(0x42, byte);
}
/*
* Compliant with CIM_48's sbPciCfg.
* Add any south bridge setting.
*/
-static void sb600_pci_cfg()
+static void sb600_pci_cfg(void)
{
u32 dev;
u8 byte;
@@ -546,19 +572,19 @@
/* Set to 1 to reset USB on the software (such as IO-64 or IO-CF9 cycles)
* generated PCIRST#. */
- byte = pmio_read(0x65);
+ byte = pm_ioread(0x65);
byte |= (1 << 4);
- pmio_write(0x65, byte);
+ pm_iowrite(0x65, byte);
/*For A13 and above. */
if (get_sb600_revision() > 0x12) {
/* rpr2.16 C-State Reset, PMIO 0x9f[7]. */
- byte = pmio_read(0x9f);
+ byte = pm_ioread(0x9f);
byte |= (1 << 7);
- pmio_write(0x9f, byte);
+ pm_iowrite(0x9f, byte);
/* rpr2.17 PCI Clock Period will increase to 30.8ns. 0x53[7]. */
- byte = pmio_read(0x53);
+ byte = pm_ioread(0x53);
byte |= (1 << 7);
- pmio_write(0x53, byte);
+ pm_iowrite(0x53, byte);
}
/* IDE Device, BDF:0-20-1 */
@@ -612,7 +638,7 @@
/*
* Compliant with CIM_48's ATSBPowerOnResetInitJSP
*/
-static void sb600_por_init()
+static void sb600_por_init(void)
{
/* sbDevicesPorInitTable + sbK8PorInitTable */
sb600_devices_por_init();
@@ -625,7 +651,7 @@
* Compliant with CIM_48's AtiSbBeforePciInit
* It should be called during early POST after memory detection and BIOS shadowing but before PCI bus enumeration.
*/
-static void sb600_before_pci_init()
+void sb600_before_pci_init(void)
{
sb600_pci_cfg();
}
@@ -633,7 +659,7 @@
/*
* This function should be called after enable_sb600_smbus().
*/
-static void sb600_stage1(void)
+void sb600_stage1(void)
{
printk(BIOS_INFO, "sb600_early_setup()\n");
sb600_por_init();
Modified: coreboot-v3/southbridge/amd/sb600/stage1_reset.c
===================================================================
--- coreboot-v3/southbridge/amd/sb600/stage1_reset.c 2008-10-06 17:11:47 UTC (rev 892)
+++ coreboot-v3/southbridge/amd/sb600/stage1_reset.c 2008-10-06 17:12:38 UTC (rev 893)
@@ -19,6 +19,7 @@
#include <types.h>
#include <lib.h>
+#include <io.h>
#include <console.h>
#include <device/pci.h>
#include <msr.h>
@@ -29,6 +30,7 @@
void hard_reset(void)
{
+ void set_bios_reset(void);
set_bios_reset();
/* Try rebooting through port 0xcf9 */
/* Actually it is not a real hard_reset --- it only resets coherent link table, but
Modified: coreboot-v3/southbridge/amd/sb600/usb.c
===================================================================
--- coreboot-v3/southbridge/amd/sb600/usb.c 2008-10-06 17:11:47 UTC (rev 892)
+++ coreboot-v3/southbridge/amd/sb600/usb.c 2008-10-06 17:12:38 UTC (rev 893)
@@ -17,14 +17,22 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include <console/console.h>
-#include <device/device.h>
+#include <types.h>
+#include <lib.h>
+#include <console.h>
#include <device/pci.h>
+#include <msr.h>
+#include <legacy.h>
#include <device/pci_ids.h>
-#include <device/pci_ops.h>
-#include <usbdebug_direct.h>
-#include <arch/io.h>
+#include <device/smbus.h>
+#include <cpu.h>
+#include <lapic.h>
+#include <io.h>
+#include <statictree.h>
+#include <config.h>
+#include <mc146818rtc.h>
#include "sb600.h"
+#include "sb600.h"
static struct pci_operations lops_pci = {
.set_subsystem = pci_dev_set_subsystem,
@@ -94,7 +102,7 @@
/* pci_write_config32(dev, 0xf8, dword); */
usb2_bar0 = (u8 *) (pci_read_config32(dev, 0x10) & ~0xFF);
- printk_info("usb2_bar0=%x\n", usb2_bar0);
+ printk(BIOS_INFO, "usb2_bar0=%x\n", usb2_bar0);
/* RPR5.4 Enables the USB PHY auto calibration resister to match 45ohm resistence */
dword = 0x00020F00;