From 8085f032f855474089e5b16fed16d689bf17550c Mon Sep 17 00:00:00 2001 From: Yinghai Lu Date: Thu, 4 Nov 2004 21:00:13 +0000 Subject: SI Class code check git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1742 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- src/drivers/si/3114/si_sata.c | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) (limited to 'src/drivers') 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, -- cgit v1.2.3