[LinuxBIOS] [lm-sensors] [ANNOUNCE] superiotool -- Detect Super I/Os, dump register contents

Jean Delvare khali at linux-fr.org
Tue Oct 9 19:14:29 CEST 2007


Hi Uwe,

On Mon, 8 Oct 2007 03:35:40 +0200, Uwe Hermann wrote:
> I'd like to announce a tool called 'superiotool' which was developed by
> a bunch of LinuxBIOS developers over at linuxbios.org:
> 
>   http://linuxbios.org/Superiotool
> 
> Superiotool is a user-space utility which can
> 
>  - detect which Super I/O chip is soldered onto your mainboard,
> 
>  - at which configuration port it's located (usually 0x2e or 0x4e), and
> 
>  - dump all register contents of the Super I/O chip, together with the
>    default values as per datasheet (to make comparing the values easy).
> 
> Installation:
> 
>  $ svn co svn://linuxbios.org/repos/trunk/util/superiotool
>  $ cd superiotool
>  $ make
>  $ sudo make install
> 
> It's written in C and licensed under the GPL (version 2 or later).
> 
> We're using it for LinuxBIOS development purposes (e.g. you need to
> properly init the Super I/O for early serial output support), but I
> guess this might be a useful tool for lm-sensors purposes, too.

We already have sensors-detect for identification and isadump for
register dumps, so I'm not sure if superiotool will be very useful to
us in practice.

> Yes, we're aware of sensors-detect and we considered merging our
> code into sensors-detect for a while, but decided to keep them two
> different tools for now. Some reasons (or differenceѕ between the tools):
> 
>  - superiotool is written in C, which allows (some) code copying into
>    LinuxBIOS (which is also written in C).
> 
>  - superiotool _only_ supports and cares about Super I/Os, not other
>    sensors, I2C, etc. etc. We don't intend to support anything other
>    than Super I/Os in superiotool (hence the name :-) We don't need
>    sensors et al in LinuxBIOS, that's mostly handled by the OS/userspace,
>    e.g. lm-sensors.

I completely agree that superiotool and sensors-detect have to stay
separate tools. They fulfill different needs.

>  - The main difference to the sensors-detect Super I/O support is in the
>    register dump feature, I guess. You can use 'superiotool -d' to get
>    output like this:
> 
>      $ superiotool -d
>      Found Winbond W83627EHF/EF/EHG/EG (id=0x88, rev=0x63) at 0x2e
>      Register dump:
>      idx 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 
>      val 88 63 ff 00 44 00 00 ff 50 04 00 00 9a 21 00 ff 
>      def 88 MM ff 00 MM 00 MM RR 50 04 00 RR 00 21 00 00 
>      LDN 0x00 (Floppy)
>      idx 30 60 61 70 74 f0 f1 f2 f4 f5 
>      val 00 03 f0 06 02 0e 00 ff 00 00 
>      def 01 03 f0 06 02 8e 00 ff 00 00 
>      LDN 0x01 (Parallel port)
>      idx 30 60 61 70 74 f0 
>      val 00 03 78 00 04 3c 
>      def 01 03 78 07 04 3f 
>      LDN 0x02 (COM1)
>      idx 30 60 61 70 f0 
>      val 00 03 f8 04 00 
>      def 01 03 f8 04 00 
>      LDN 0x03 (COM2)
>      idx 30 60 61 70 f0 f1 
>      val 00 02 f8 03 00 00 
>      def 01 02 f8 03 00 00 
>      LDN 0x05 (Keyboard)
>      idx 30 60 61 62 63 70 72 f0 
>      val 01 00 60 00 64 01 0c 83 
>      def 01 00 60 00 64 01 0c 83 
>      LDN 0x06 (Serial flash interface)
>      idx 30 62 63 
>      val 00 ff ff 
>      def 00 00 00 
>      LDN 0x07 (GPIO 1, GPIO 6, game port, MIDI port)
>      idx 30 60 61 62 63 70 f0 f1 f2 f3 f4 f5 f6 f7 
>      val 00 02 01 03 30 00 ff ff ff ff ff ff ff 00 
>      def 00 02 01 03 30 09 ff 00 00 00 ff 00 00 00 
>      LDN 0x08 (WDTO#, PLED)
>      idx 30 f5 f6 f7 
>      val 00 ff 00 ff 
>      def 00 00 00 00 
>      LDN 0x09 (GPIO 2, GPIO 3, GPIO 4, GPIO 5, SUSLED)
>      idx 30 e0 e1 e2 e3 e4 e5 f0 f1 f2 f3 f4 f5 f6 f7 
>      val 0f ff 21 00 ff 08 00 ff 0c 00 09 9f ff 00 00 
>      def 00 ff 00 00 ff 00 00 ff 00 00 00 ff 00 00 00 
>      LDN 0x0a (ACPI)
>      idx 30 70 e0 e1 e2 e3 e4 e5 e6 e7 e8 f2 f3 f4 f6 f7 
>      val 01 00 00 00 ff 00 40 02 0c 10 09 7d 00 00 00 00 
>      def 00 00 01 00 ff 08 00 RR 00 00 RR 7c 00 00 00 00 
>      LDN 0x0b (Hardware monitor)
>      idx 30 60 61 70 f0 f1 
>      val 01 02 90 00 c1 3f 
>      def 00 00 00 00 c1 00
> 
>   All numbers are in hex. idx is the register number, val is the current
>   content of the register, def is the default value as per datasheet.
> 
>   I assume the dump feature might help with lm-sensors development, as
>   you can easily dump the hardware monitor register contents (or have
>   users send dumps) and compare values from different boards/chips etc.

We tell users to use isadump for that. As isadump is part of the
lm-sensors package, we can be reasonably certain that it is available
to the users. And more often than not, we need the dump of the
LDN-specific I/O space, which superio doesn't support as far as I can
see.

> We currently detect a number of chips which are not detected by
> sensors-detect (and vice versa), I'll provide patches to sensors-detect
> to keep the number of detected Super I/Os in sync between the tools.
>
> This is open-source of course, so feel free to poke in the code and reuse
> whatever parts of it you need or want. Contributions to supertiotool are
> welcome, too, of course :)

Thanks you. I'm all for sharing the information.

Two things I've noticed while trying superiotool:

* The human-readable dump of my F71805FG chip includes:
27=20
29=00
2a=ff
2b=ff
That's not exactly human-readable by my definition ;)

* When dumping a Winbond W83627THF chip, sometimes the default value is
replaced with NA, MM or RR. While I can imagine what NA stands for, I
am curious what MM and RR mean. This should be explained in the manual
page IMHO.

I've also hit a strange bug with -v (no kidding), I'll send a patch
when I'm done fixing it.

-- 
Jean Delvare




More information about the coreboot mailing list