| 1 |
What is it? |
|---|
| 2 |
----------- |
|---|
| 3 |
|
|---|
| 4 |
It unhides the SMBus of Intel ICH southbridges hidden |
|---|
| 5 |
on ASUS P4B series. It is implemented as a module (p4b_smbus.o), |
|---|
| 6 |
or a shell script for the 2.6 kernel (unhide_ICH_SMBus). |
|---|
| 7 |
|
|---|
| 8 |
It works with the following chips: |
|---|
| 9 |
* ICH2 (82801BA) |
|---|
| 10 |
* ICH2-M (82801BAM) |
|---|
| 11 |
* ICH4 (82801DB) |
|---|
| 12 |
* ICH4-M (82801DBM) |
|---|
| 13 |
* ICH5 (82801EB) |
|---|
| 14 |
|
|---|
| 15 |
ASUS switches off the SMBus PCI Device in the i801 ICH chip. I spoke twice |
|---|
| 16 |
with the German support and learned that: "We do not want the users to be |
|---|
| 17 |
irritated by just another PCI Device in the Win98 device manager." |
|---|
| 18 |
Really funny :-). |
|---|
| 19 |
|
|---|
| 20 |
This module is for 2.4 kernels only. For 2.6 kernels, activation is |
|---|
| 21 |
handled by the code in drivers/pci/quirks.c in the kernel source. If you |
|---|
| 22 |
have the 2.6 kernel and the quirks code does not activate your SMBus, |
|---|
| 23 |
you may: |
|---|
| 24 |
|
|---|
| 25 |
* check if you have kernel version from 2.6.17 to 2.6.19 |
|---|
| 26 |
If so you, need to disable ACPI sleep support and recompile kernel. |
|---|
| 27 |
If you don't use suspend try below instead of recompilation. |
|---|
| 28 |
|
|---|
| 29 |
* run as root the ./unhide_ICH_SMBus script. It will unhide the bus |
|---|
| 30 |
and load the i2c-i801 driver. Beware that you should then no longer |
|---|
| 31 |
use system suspend as bad things might happen on resume. |
|---|
| 32 |
|
|---|
| 33 |
* if above script works and you have latest kernel, you may |
|---|
| 34 |
try to fix the quirks.c, recompile and test your new kernel, |
|---|
| 35 |
and then submit a patch to us. Contact us if you need assistance. |
|---|
| 36 |
|
|---|
| 37 |
Information for 2.4 users continues below. |
|---|
| 38 |
|
|---|
| 39 |
NOTE: As of kernel 2.4.23, the kernel activates the SMBus PCI device |
|---|
| 40 |
on the following boards: |
|---|
| 41 |
* Asus P4B |
|---|
| 42 |
* Asus P4B533 |
|---|
| 43 |
* Asus P4PE |
|---|
| 44 |
* Asus P4T533 |
|---|
| 45 |
* Asus P4G8X Deluxe |
|---|
| 46 |
So this module is no longer required for these boards. For the other |
|---|
| 47 |
affected boards, it still is. |
|---|
| 48 |
|
|---|
| 49 |
What does the module do? |
|---|
| 50 |
------------------------ |
|---|
| 51 |
(Note: the following instructions assume the ICH2. For the ICH4, |
|---|
| 52 |
the PCI IDs are 24C0 and 24C3) |
|---|
| 53 |
|
|---|
| 54 |
It turnes off (!) the bits number 8 and 3 in the LPC register of the ICH2. |
|---|
| 55 |
This you can also try as root with setpci and pcitweak. |
|---|
| 56 |
First do a: |
|---|
| 57 |
|
|---|
| 58 |
setpci -d 8086:2440 f2.w |
|---|
| 59 |
|
|---|
| 60 |
You will get an hex number VAL - in my case 148 (Hex)-, where you have to |
|---|
| 61 |
erase the two bits - in my case you get 40 (Hex). |
|---|
| 62 |
Then do a: |
|---|
| 63 |
|
|---|
| 64 |
setpci -d 8086:2440 f2.w=VAL |
|---|
| 65 |
|
|---|
| 66 |
Running "lspci -n" you will not see any new device, but with "pcitweak -l" you |
|---|
| 67 |
should get a line similar to this in the output: |
|---|
| 68 |
|
|---|
| 69 |
PCI: 00:1f:3: chip 8086,2443 card 1043,8028 rev 12 class 0c,05,00 hdr 00 |
|---|
| 70 |
|
|---|
| 71 |
The important thing is the "8086,2443" here. |
|---|
| 72 |
The device is activated, but not included in /proc/pci and |
|---|
| 73 |
/proc/bus/pci/devices. This is the reason for running the module. |
|---|
| 74 |
|
|---|
| 75 |
What are the system requirements? |
|---|
| 76 |
--------------------------------- |
|---|
| 77 |
|
|---|
| 78 |
- Obviously a board with Intel i801BA/DB/EB ICH2/4/5 with broken BIOS. |
|---|
| 79 |
- A linux working with a 2.4 kernel AND hotplug support in it! |
|---|
| 80 |
- A installed kernel tree and gcc. |
|---|
| 81 |
- i2c and sensor modules installed. |
|---|
| 82 |
|
|---|
| 83 |
How to install? |
|---|
| 84 |
--------------- |
|---|
| 85 |
|
|---|
| 86 |
Simply do a: |
|---|
| 87 |
|
|---|
| 88 |
make -f Makefile.p4b |
|---|
| 89 |
insmod p4b_smbus.o |
|---|
| 90 |
modprobe i2c-core |
|---|
| 91 |
modprobe i2c-i801 |
|---|
| 92 |
modprobe i2c-dev |
|---|
| 93 |
modprobe i2c-proc |
|---|
| 94 |
|
|---|
| 95 |
Then run your sensor: |
|---|
| 96 |
|
|---|
| 97 |
modprobe w83781d |
|---|
| 98 |
|
|---|
| 99 |
What should i never do? |
|---|
| 100 |
----------------------- |
|---|
| 101 |
|
|---|
| 102 |
Do not try to do a "rmmod p4b_smbus" before a "rmmod i2c-i801". |
|---|
| 103 |
The other way around should be okay. Otherwise you remove the PCI device |
|---|
| 104 |
without notifying the i2c driver. |
|---|
| 105 |
|
|---|
| 106 |
|
|---|
| 107 |
------------------------------- |
|---|
| 108 |
Ilja Rauhut <IljaRauhut@web.de> |
|---|
| 109 |
|
|---|