diff options
Diffstat (limited to 'src/southbridge/nvidia/ck804/ck804.c')
-rw-r--r-- | src/southbridge/nvidia/ck804/ck804.c | 196 |
1 files changed, 0 insertions, 196 deletions
diff --git a/src/southbridge/nvidia/ck804/ck804.c b/src/southbridge/nvidia/ck804/ck804.c deleted file mode 100644 index 2293392d46..0000000000 --- a/src/southbridge/nvidia/ck804/ck804.c +++ /dev/null @@ -1,196 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2004 Tyan Computer - * Written by Yinghai Lu <yhlu@tyan.com> for Tyan Computer. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include <device/device.h> -#include <device/pci.h> -#include <device/pci_ids.h> -#include <device/pci_ops.h> -#include "chip.h" - -static u32 final_reg; - -static struct device *find_lpc_dev(struct device *dev, unsigned int devfn) -{ - struct device *lpc_dev; - - lpc_dev = pcidev_path_behind(dev->bus, devfn); - if (!lpc_dev) - return lpc_dev; - - if ((lpc_dev->vendor != PCI_VENDOR_ID_NVIDIA) - || ((lpc_dev->device != PCI_DEVICE_ID_NVIDIA_CK804_LPC) - && (lpc_dev->device != PCI_DEVICE_ID_NVIDIA_CK804_PRO) - && (lpc_dev->device != PCI_DEVICE_ID_NVIDIA_CK804_SLAVE))) - { - u32 id; - id = pci_read_config32(lpc_dev, PCI_VENDOR_ID); - if ((id != (PCI_VENDOR_ID_NVIDIA | - (PCI_DEVICE_ID_NVIDIA_CK804_LPC << 16))) - && (id != (PCI_VENDOR_ID_NVIDIA | - (PCI_DEVICE_ID_NVIDIA_CK804_PRO << 16))) - && (id != (PCI_VENDOR_ID_NVIDIA | - (PCI_DEVICE_ID_NVIDIA_CK804_SLAVE << 16)))) - { - lpc_dev = 0; - } - } - - return lpc_dev; -} - -static void ck804_enable(struct device *dev) -{ - struct device *lpc_dev; - unsigned int index = 0, index2 = 0, deviceid, vendorid, devfn; - u32 reg_old, reg; - u8 byte; - - if (dev->device == 0x0000) { - vendorid = pci_read_config32(dev, PCI_VENDOR_ID); - deviceid = (vendorid >> 16) & 0xffff; - /* vendorid &= 0xffff; */ - } else { - /* vendorid = dev->vendor; */ - deviceid = dev->device; - } - - devfn = (dev->path.pci.devfn) & ~7; - switch (deviceid) { - case PCI_DEVICE_ID_NVIDIA_CK804_SM: - index = 16; - break; - case PCI_DEVICE_ID_NVIDIA_CK804_USB: - devfn -= (1 << 3); - index = 8; - break; - case PCI_DEVICE_ID_NVIDIA_CK804_USB2: - devfn -= (1 << 3); - index = 20; - break; - case PCI_DEVICE_ID_NVIDIA_CK804_NIC: - devfn -= (9 << 3); - index = 10; - break; - case PCI_DEVICE_ID_NVIDIA_CK804_NIC_BRIDGE: - devfn -= (9 << 3); - index = 10; - break; - case PCI_DEVICE_ID_NVIDIA_CK804_ACI: - devfn -= (3 << 3); - index = 12; - break; - case PCI_DEVICE_ID_NVIDIA_CK804_MCI: - devfn -= (3 << 3); - index = 13; - break; - case PCI_DEVICE_ID_NVIDIA_CK804_IDE: - devfn -= (5 << 3); - index = 14; - break; - case PCI_DEVICE_ID_NVIDIA_CK804_SATA0: - devfn -= (6 << 3); - index = 22; - break; - case PCI_DEVICE_ID_NVIDIA_CK804_SATA1: - devfn -= (7 << 3); - index = 18; - break; - case PCI_DEVICE_ID_NVIDIA_CK804_PCI: - devfn -= (8 << 3); - index = 15; - break; - case PCI_DEVICE_ID_NVIDIA_CK804_PCI_E: - devfn -= (0xa << 3); - index2 = 19; - break; - default: - index = 0; - } - - if (index2 != 0) { - int i; - for (i = 0; i < 4; i++) { - lpc_dev = find_lpc_dev(dev, devfn - (i << 3)); - if (!lpc_dev) - continue; - index2 -= i; - break; - } - - if (lpc_dev) { - reg_old = reg = pci_read_config32(lpc_dev, 0xe4); - if (!dev->enabled) - reg |= (1 << index2); - if (reg != reg_old) - pci_write_config32(lpc_dev, 0xe4, reg); - } - - index2 = 0; - return; - } - - lpc_dev = find_lpc_dev(dev, devfn); - if (!lpc_dev) - return; - - if (index == 0) { - final_reg = pci_read_config32(lpc_dev, 0xe8); - final_reg &= ~((1 << 16) | (1 << 8) | (1 << 20) | (1 << 10) - | (1 << 12) | (1 << 13) | (1 << 14) | (1 << 22) - | (1 << 18) | (1 << 15)); - pci_write_config32(lpc_dev, 0xe8, final_reg); - - reg_old = reg = pci_read_config32(lpc_dev, 0xe4); - reg |= (1 << 20); - if (reg != reg_old) - pci_write_config32(lpc_dev, 0xe4, reg); - - byte = pci_read_config8(lpc_dev, 0x74); - byte |= ((1 << 1)); - pci_write_config8(dev, 0x74, byte); - - byte = pci_read_config8(lpc_dev, 0xdd); - byte |= ((1 << 0) | (1 << 3)); - pci_write_config8(dev, 0xdd, byte); - - return; - } - - if (!dev->enabled) - final_reg |= (1 << index); - - if (index == 10) { - reg_old = pci_read_config32(lpc_dev, 0xe8); - if (final_reg != reg_old) - pci_write_config32(lpc_dev, 0xe8, final_reg); - } -} - -static void ck804_set_subsystem(struct device *dev, unsigned int vendor, - unsigned int device) -{ - pci_write_config32(dev, 0x40, - ((device & 0xffff) << 16) | (vendor & 0xffff)); -} - -struct pci_operations ck804_pci_ops = { - .set_subsystem = ck804_set_subsystem, -}; - -struct chip_operations southbridge_nvidia_ck804_ops = { - CHIP_NAME("NVIDIA CK804 Southbridge") - .enable_dev = ck804_enable, -}; |