diff options
author | Yinghai Lu <yinghailu@gmail.com> | 2004-11-04 21:00:13 +0000 |
---|---|---|
committer | Yinghai Lu <yinghailu@gmail.com> | 2004-11-04 21:00:13 +0000 |
commit | 8085f032f855474089e5b16fed16d689bf17550c (patch) | |
tree | 6e54aed89c3f9f91ffdc43ea88132effdf05099d /src/drivers/si/3114 | |
parent | 2d2bdd38464b6e4984fbfd20d642e6b3d080e1df (diff) |
SI Class code check
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1742 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'src/drivers/si/3114')
-rw-r--r-- | src/drivers/si/3114/si_sata.c | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/src/drivers/si/3114/si_sata.c b/src/drivers/si/3114/si_sata.c index 276dbe20f0..611ee5b8dd 100644 --- a/src/drivers/si/3114/si_sata.c +++ b/src/drivers/si/3114/si_sata.c @@ -1,6 +1,6 @@ -/* Copyright 2003 Tyan */ +/* Copyright 2003-2004 Tyan Computer*/ -/* Author: Yinghai Lu +/* Author: Yinghai Lu yhlu@tyan.com * */ @@ -20,15 +20,37 @@ static void si_sata_init(struct device *dev) { uint16_t word; - + uint32_t dword; +#if 0 word = pci_read_config16(dev, 0x4); word |= ((1 << 2) |(1<<4)); // Command: 3--> 17 pci_write_config16(dev, 0x4, word); +#endif - printk_debug("SI_SATA_FIXUP: done \n"); + /* some driver change class code to 0x104, but not change deviceid without reason*/ + /* restore it so we don't need to unplug AC power to restore it*/ -} + word = pci_read_config16(dev, 0x0a); + if(word!=0x0180) { + /* enble change device id and class id*/ + dword = pci_read_config32(dev,0x40); + dword |= (1<<0); + pci_write_config32(dev, 0x40, dword); + + word = 0x0180; + pci_write_config16(dev, 0x0a, word); + + /* disable change device id and class id*/ + dword = pci_read_config32(dev,0x40); + dword &= ~(1<<0); + pci_write_config32(dev, 0x40, dword); + printk_debug("Class code restored.\n"); + + } + + +} static struct device_operations si_sata_ops = { .read_resources = pci_dev_read_resources, .set_resources = pci_dev_set_resources, |