All of lore.kernel.org
 help / color / mirror / Atom feed
From: linux@brodo.de (Dominik Brodowski)
To: alan@lxorguk.ukuu.org.uk
Cc: linux-kernel@vger.kernel.org, sensors@stimpy.netroedge.com
Subject: [PATCH 2.5] PCI quirk for SMBus bridge on Asus P4 boards
Date: Thu, 19 May 2005 06:23:50 +0000	[thread overview]
Message-ID: <20030319211837.GA23651@brodo.de> (raw)

Asus hides the SMBus PCI bridge within the ICH2 or ICH4 southbridge on
Asus P4B/P4PE mainboards. The attached patch adds a quirk to re-enable the
SMBus PCI bridge for P4B533 and P4PE mainboards.

	   Dominik

diff -ru linux-original/drivers/pci/quirks.c linux/drivers/pci/quirks.c
--- linux-original/drivers/pci/quirks.c	2003-03-19 22:13:57.000000000 +0100
+++ linux/drivers/pci/quirks.c	2003-03-19 22:14:52.000000000 +0100
@@ -647,6 +647,53 @@
 }
 
 /*
+ * On ASUS P4B boards, the SMBus PCI Device within the ICH2/4 southbridge
+ * is not activated. The myth is that Asus said that they do not want the
+ * users to be irritated by just another PCI Device in the Win98 device
+ * manager. (see the file prog/hotplug/README.p4b in the lm_sensors 
+ * package 2.7.0 for details)
+ *
+ * The SMBus PCI Device can be activated by setting a bit in the ICH LPC 
+ * bridge. Unfortunately, this device has no subvendor/subdevice ID. So it 
+ * becomes necessary to do this tweak in two steps -- I've chosen the Host
+ * bridge as trigger.
+ */
+
+static int __initdata asus_hides_smbus = 0;
+
+static void __init asus_hides_smbus_hostbridge(struct pci_dev *dev)
+{
+	if (likely(dev->subsystem_vendor != PCI_VENDOR_ID_ASUSTEK))
+		return;
+
+	if ((dev->device = PCI_DEVICE_ID_INTEL_82845_HB) && 
+	    (dev->subsystem_device = 0x8088)) /* P4B533 */
+		asus_hides_smbus = 1;
+	if ((dev->device = PCI_DEVICE_ID_INTEL_82845G_HB) &&
+	    (dev->subsystem_device = 0x80b2)) /* P4PE */
+		asus_hides_smbus = 1;
+	return;
+}
+
+static void __init asus_hides_smbus_lpc(struct pci_dev *dev)
+{
+	u16 val;
+	
+	if (likely(!asus_hides_smbus))
+		return;
+
+	pci_read_config_word(dev, 0xF2, &val);
+	if (val & 0x8) {
+		pci_write_config_word(dev, 0xF2, val & (~0x8));
+		pci_read_config_word(dev, 0xF2, &val);
+		if(val & 0x8)
+			printk(KERN_INFO "PCI: i801 SMBus device continues to play 'hide and seek'! 0x%x\n", val);
+		else
+			printk(KERN_INFO "PCI: Enabled i801 SMBus device\n");
+	}
+}
+
+/*
  *  The main table of quirks.
  */
 
@@ -724,6 +771,13 @@
 	
 	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82375,	quirk_eisa_bridge },
 
+	/*
+	 * on Asus P4B boards, the i801SMBus device is disabled at startup.
+	 */
+	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82845_HB,	asus_hides_smbus_hostbridge },
+	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82845G_HB,	asus_hides_smbus_hostbridge },
+	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82801DB_0,	asus_hides_smbus_lpc },
+
 	{ 0 }
 };
 

WARNING: multiple messages have this Message-ID (diff)
From: Dominik Brodowski <linux@brodo.de>
To: alan@lxorguk.ukuu.org.uk
Cc: linux-kernel@vger.kernel.org, sensors@stimpy.netroedge.com
Subject: [PATCH 2.5] PCI quirk for SMBus bridge on Asus P4 boards
Date: Wed, 19 Mar 2003 22:18:37 +0100	[thread overview]
Message-ID: <20030319211837.GA23651@brodo.de> (raw)

Asus hides the SMBus PCI bridge within the ICH2 or ICH4 southbridge on
Asus P4B/P4PE mainboards. The attached patch adds a quirk to re-enable the
SMBus PCI bridge for P4B533 and P4PE mainboards.

	   Dominik

diff -ru linux-original/drivers/pci/quirks.c linux/drivers/pci/quirks.c
--- linux-original/drivers/pci/quirks.c	2003-03-19 22:13:57.000000000 +0100
+++ linux/drivers/pci/quirks.c	2003-03-19 22:14:52.000000000 +0100
@@ -647,6 +647,53 @@
 }
 
 /*
+ * On ASUS P4B boards, the SMBus PCI Device within the ICH2/4 southbridge
+ * is not activated. The myth is that Asus said that they do not want the
+ * users to be irritated by just another PCI Device in the Win98 device
+ * manager. (see the file prog/hotplug/README.p4b in the lm_sensors 
+ * package 2.7.0 for details)
+ *
+ * The SMBus PCI Device can be activated by setting a bit in the ICH LPC 
+ * bridge. Unfortunately, this device has no subvendor/subdevice ID. So it 
+ * becomes necessary to do this tweak in two steps -- I've chosen the Host
+ * bridge as trigger.
+ */
+
+static int __initdata asus_hides_smbus = 0;
+
+static void __init asus_hides_smbus_hostbridge(struct pci_dev *dev)
+{
+	if (likely(dev->subsystem_vendor != PCI_VENDOR_ID_ASUSTEK))
+		return;
+
+	if ((dev->device == PCI_DEVICE_ID_INTEL_82845_HB) && 
+	    (dev->subsystem_device == 0x8088)) /* P4B533 */
+		asus_hides_smbus = 1;
+	if ((dev->device == PCI_DEVICE_ID_INTEL_82845G_HB) &&
+	    (dev->subsystem_device == 0x80b2)) /* P4PE */
+		asus_hides_smbus = 1;
+	return;
+}
+
+static void __init asus_hides_smbus_lpc(struct pci_dev *dev)
+{
+	u16 val;
+	
+	if (likely(!asus_hides_smbus))
+		return;
+
+	pci_read_config_word(dev, 0xF2, &val);
+	if (val & 0x8) {
+		pci_write_config_word(dev, 0xF2, val & (~0x8));
+		pci_read_config_word(dev, 0xF2, &val);
+		if(val & 0x8)
+			printk(KERN_INFO "PCI: i801 SMBus device continues to play 'hide and seek'! 0x%x\n", val);
+		else
+			printk(KERN_INFO "PCI: Enabled i801 SMBus device\n");
+	}
+}
+
+/*
  *  The main table of quirks.
  */
 
@@ -724,6 +771,13 @@
 	
 	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82375,	quirk_eisa_bridge },
 
+	/*
+	 * on Asus P4B boards, the i801SMBus device is disabled at startup.
+	 */
+	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82845_HB,	asus_hides_smbus_hostbridge },
+	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82845G_HB,	asus_hides_smbus_hostbridge },
+	{ PCI_FIXUP_HEADER,	PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82801DB_0,	asus_hides_smbus_lpc },
+
 	{ 0 }
 };
 

             reply	other threads:[~2005-05-19  6:23 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-03-19 21:18 Dominik Brodowski [this message]
2005-05-19  6:23 ` [PATCH 2.5] PCI quirk for SMBus bridge on Asus P4 boards Dominik Brodowski
2003-03-20  7:48 ` Martin Schlemmer
2005-05-19  6:23   ` Martin Schlemmer
2003-03-20  8:41   ` Dominik Brodowski
2005-05-19  6:23     ` Dominik Brodowski
2003-03-20  9:36     ` Martin Schlemmer
2005-05-19  6:23       ` Martin Schlemmer
2003-03-21  8:08     ` Martin Schlemmer
2005-05-19  6:23       ` Martin Schlemmer
2003-03-21 21:32       ` Dominik Brodowski
  -- strict thread matches above, loose matches on Subject: below --
2005-05-19  6:23 [PATCH] Sensors chip w83781d for linux-2.5.6[45] (follow up on PCI Martin Schlemmer
2005-05-19  6:23 ` Martin Schlemmer
2003-03-23  9:01   ` [PATCH] Sensors chip w83781d for linux-2.5.6[45] (follow up on PCI quirk for SMBus bridge on Asus P4 boards) Dominik Brodowski
2005-05-19  6:23     ` [PATCH] Sensors chip w83781d for linux-2.5.6[45] (follow up on PCI quirk for SMBus bridge on Asus P4 Dominik Brodowski
2003-03-23 15:01     ` Failed to register cdrom with ide.c Martin Schlemmer
2003-03-24 18:55       ` Martin Schlemmer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20030319211837.GA23651@brodo.de \
    --to=linux@brodo.de \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sensors@stimpy.netroedge.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.