aboutsummaryrefslogtreecommitdiff
path: root/src/southbridge/amd/sb600/sb600.c
diff options
context:
space:
mode:
authorRonald G. Minnich <rminnich@gmail.com>2008-10-02 15:42:14 +0000
committerRonald G. Minnich <rminnich@gmail.com>2008-10-02 15:42:14 +0000
commit5107174459f581ff9a2f548768df6e1eef3c2d79 (patch)
treeef99af6ad50971acff6afd4825f75263dfa7c457 /src/southbridge/amd/sb600/sb600.c
parent248a7df94a2f35c75eaf4fe3b949398577368816 (diff)
This is so that people can see it. This is the sb600 for v3. It almost
certainly won't build -- that comes later. I am hoping to get some eyeballs on it for simple errors. rs690 is next. Signed-off-by: Ronald G. Minnich <rminnich@gmail.com> Acked-by: Ronald G. Minnich <rminnich@gmail.com> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3630 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'src/southbridge/amd/sb600/sb600.c')
-rw-r--r--src/southbridge/amd/sb600/sb600.c57
1 files changed, 33 insertions, 24 deletions
diff --git a/src/southbridge/amd/sb600/sb600.c b/src/southbridge/amd/sb600/sb600.c
index b1b17f0022..9a65f3830a 100644
--- a/src/southbridge/amd/sb600/sb600.c
+++ b/src/southbridge/amd/sb600/sb600.c
@@ -17,19 +17,20 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include <console/console.h>
-
-#include <arch/io.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 device_t find_sm_dev(device_t dev, u32 devfn)
+static struct device * find_sm_dev(struct device * dev, u32 devfn)
{
- device_t sm_dev;
+ struct device * sm_dev;
sm_dev = dev_find_slot(dev->bus->secondary, devfn);
if (!sm_dev)
@@ -49,7 +50,7 @@ static device_t find_sm_dev(device_t dev, u32 devfn)
return sm_dev;
}
-void set_sm_enable_bits(device_t sm_dev, u32 reg_pos, u32 mask, u32 val)
+void set_sm_enable_bits(struct device * sm_dev, u32 reg_pos, u32 mask, u32 val)
{
u32 reg_old, reg;
reg = reg_old = pci_read_config32(sm_dev, reg_pos);
@@ -96,7 +97,7 @@ u8 pm2_ioread(u8 reg)
return pmio_read_index(port_base, reg);
}
-static void set_pmio_enable_bits(device_t sm_dev, u32 reg_pos,
+static void set_pmio_enable_bits(struct device * sm_dev, u32 reg_pos,
u32 mask, u32 val)
{
u8 reg_old, reg;
@@ -108,10 +109,10 @@ static void set_pmio_enable_bits(device_t sm_dev, u32 reg_pos,
}
}
-void sb600_enable(device_t dev)
+void sb600_enable(struct device * dev)
{
- device_t sm_dev = 0;
- device_t bus_dev = 0;
+ struct device * sm_dev = 0;
+ struct device * bus_dev = 0;
int index = -1;
u32 deviceid;
u32 vendorid;
@@ -122,7 +123,7 @@ void sb600_enable(device_t dev)
u32 devfn;
- printk_debug("sb600_enable()\n");
+ printk(BIOS_DEBUG, "sb600_enable()\n");
/*
* 0:12.0 SATA bit 8 of sm_dev 0xac : 1 - enable, default + 32 * 3
@@ -150,13 +151,13 @@ void sb600_enable(device_t dev)
bus_dev = dev->bus->dev;
if ((bus_dev->vendor == PCI_VENDOR_ID_ATI) &&
(bus_dev->device == PCI_DEVICE_ID_ATI_SB600_PCI)) {
- devfn = (bus_dev->path.u.pci.devfn) & ~7;
+ devfn = (bus_dev->path.pci.devfn) & ~7;
sm_dev = find_sm_dev(bus_dev, devfn);
if (!sm_dev)
return;
/* something under 00:01.0 */
- switch (dev->path.u.pci.devfn) {
+ switch (dev->path.pci.devfn) {
case 5 << 3:
;
}
@@ -164,7 +165,7 @@ void sb600_enable(device_t dev)
return;
}
- i = (dev->path.u.pci.devfn) & ~7;
+ i = (dev->path.pci.devfn) & ~7;
i += (2 << 3);
for (devfn = (0x14 << 3); devfn <= i; devfn += (1 << 3)) {
sm_dev = find_sm_dev(dev, devfn);
@@ -174,7 +175,7 @@ void sb600_enable(device_t dev)
if (!sm_dev)
return;
- switch (dev->path.u.pci.devfn - (devfn - (0x14 << 3))) {
+ switch (dev->path.pci.devfn - (devfn - (0x14 << 3))) {
case (0x12 << 3) | 0:
index = 8;
set_sm_enable_bits(sm_dev, 0xac, 1 << index,
@@ -187,7 +188,7 @@ void sb600_enable(device_t dev)
case (0x13 << 3) | 3:
case (0x13 << 3) | 4:
case (0x13 << 3) | 5:
- index = dev->path.u.pci.devfn & 7;
+ index = dev->path.pci.devfn & 7;
index++;
index %= 6;
set_sm_enable_bits(sm_dev, 0x68, 1 << index,
@@ -217,19 +218,27 @@ void sb600_enable(device_t dev)
break;
case (0x14 << 3) | 5:
case (0x14 << 3) | 6:
- index = dev->path.u.pci.devfn & 7;
+ index = dev->path.pci.devfn & 7;
index -= 5;
set_pmio_enable_bits(sm_dev, 0x59, 1 << index,
(dev->enabled ? 0 : 1) << index);
index += 32 * 4;
break;
default:
- printk_debug("unknown dev: %s deviceid=%4x\n", dev_path(dev),
+ printk(BIOS_DEBUG, "unknown dev: %s deviceid=%4x\n", dev_path(dev),
deviceid);
}
}
-struct chip_operations southbridge_amd_sb600_ops = {
- CHIP_NAME("ATI SB600")
- .enable_dev = sb600_enable,
+struct device_operations sb600 = {
+ .id = {.type = DEVICE_ID_PCI,
+ {.pci = {.vendor = PCI_VENDOR_ID_AMD,
+ .device = xz}}},
+ .constructor = default_device_constructor,
+ .phase3_scan = 0,
+ .phase4_enable_disable = sb600_enable,
+ .phase4_read_resources = pci_dev_read_resources,
+ .phase4_set_resources = pci_dev_set_resources,
+ .phase6_init = NULL,
+ .ops_pci = &pci_dev_ops_pci,
};