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@gmail.com Acked-by: Ronald G. Minnich rminnich@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@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@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;