Files
system76-coreboot/util/superiotool
Maxim Polyakov dc2ee2096a util/superiotool: Add extra selectors support
Some chips (fintek [1,2]) have registers with specific selector-fields
that can affect the address space of the device (for example, switch the
register bank). At the same time, these registers contain fields that
should not change after they are configured in BIOS (for example, set
the port to 2E/2F or 4E/4F). In this case, the selector should take into
account the mask of the register fields and there is no convenient and
easy way to add this in the code in the utility. The selector-fields
should be set manually before the dump and this action is done several
times.

This patch adds an extra-selector mechanism that allows superiotool to
make a correct dump in automatic mode.

Just add a structure with an index, mask, and value for the selector
inside the superio_registers chip for the corresponding LDN to switch
the register bank:

{FINTEK_F81966_DID, "F81962/F81964/F81966/F81967", {

* * *
{NOLDN, "Global",
  {0x28,0x2a,0x2b,0x2c,EOT},
  {0x00,0x00,0x00,0x00,EOT},
  {.idx = 0x27, .mask = 0xd, .val = 0x1} /* update extra selector */
},
{0x03, "LPT",
  {0x30,0x60,0x61,0x70,0x74,0xf0,EOT},
  {NANA,0x03,0x78,0x07,0x03,0xc2,EOT} /* without extra selector */
},
* * *

Tested with Fintek F81966 on Asrock IMB-1222:

- run superiotool on Ubuntu and dump the registers for the board with
  the vendor's firmware;
- add the superio chip initialization code to the board configuration
  in coreboot and build the project;
- boot Ubuntu on the board with coreboot and re-dump the registers;
- the register values from the board configuration code are the same
  in both dumps.

Found Fintek F81962/F81964/F81966/F81967 (vid=0x3419, id=0x0215) at 0x2e
(Global) -- ESEL[27h] 0x00 (Port Select Register) --
idx 02 07 20 21 23 24 25 26  27 28 29 2a 2b 2c 2d
val 00 0b 15 02 19 34 5a 23  80 a0 f0 45 02 e3 2e
def NA 00 15 02 19 34 00 23  02 a0 00 00 02 0c 28

* * *

The changes do not affect the configuration of existing chips, which
was tested on the Asrock H110-STX motherboard with Nuvoton NCT5539D
(the dump before and after the changes are the same).

[1] CB:83004
[2] CB:83019

Change-Id: If56af9f977381e637245bdd26563f5ba7e6cbead
Signed-off-by: Maxim Polyakov <max.senia.poliak@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/83196
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
2024-07-31 14:28:06 +00:00
..
2007-10-03 18:56:51 +00:00
2024-05-29 08:19:09 +00:00
2018-04-17 10:38:06 +00:00
2022-11-13 15:33:41 +00:00

-------------------------------------------------------------------------------
Superiotool README
-------------------------------------------------------------------------------

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).

It is mainly used for coreboot development purposes (see coreboot.org
for details on coreboot), but it may also be useful for other things.


Installation
------------

 $ git clone https://review.coreboot.org/coreboot.git

 $ cd coreboot/util/superiotool

Optional: Edit the Makefile and set 'CONFIG_PCI = no' if you don't want to
support PCI-attached "Super I/Os" (which needs libpci-dev) such as the
VIA VT82686A/B southbridge with integrated Super I/O functionality.

 $ make

 $ sudo make install


Usage
-----

Please read the superiotool(8) manpage or type 'superiotool --help'.

Per default (no options) superiotool will just probe for a Super I/O
and print its vendor, name, ID, revision, and config port.

Typical usage of superiotool:

 - Probe/detect the Super I/O in your mainboard:

   $ superiotool

 - Register dump as table of hex-values of the Super I/O (if detected):

   $ superiotool -d


Supported Super I/O Chips
-------------------------

Please see https://www.coreboot.org/Superiotool#Supported_devices, or type

 $ superiotool -l

There's also a collection of sample register dumps from various Super I/O
chips on that web page. Please send further register dumps (either from a
proprietary BIOS and/or from coreboot) to the coreboot mailing list
(https://www.coreboot.org/Mailinglist).


Website and Mailing List
------------------------

The main website is https://www.coreboot.org/Superiotool.

For additional information, patches, and discussions, please join the
coreboot mailing list at https://www.coreboot.org/Mailinglist, where most
superiotool developers are subscribed.


Copyright and License
---------------------

Superiotool is copyrighted by a number of individual developers. Please
refer to the respective source code files for details.

It is licensed under the terms of the GNU General Public License (GPL),
either version 2 of the license, or (at your option) any later version.


Contributors
------------

Anders Juel Jensen <andersjjensen@gmail.com>
Andriy Gapon <avg@icyb.net.ua>
Arjan Koers <0h3q2rmn2bdb@list.nospam.xutrox.com>
Bingxun Shi <bingxunshi@gmail.com>
Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
David Bartley <dtbartle@csclub.uwaterloo.ca>
David Hendricks <david.hendricks@gmail.com>
Edward O'Callaghan <eocallaghan@alterapraxis.com>
François-Regis Vuillemin <coreboot@miradou.com>
Frieder Ferlemann <Frieder.Ferlemann@web.de>
Idwer Vollering <idwer_v@hotmail.com>
Ioannis Barkas <tripl3fault@yahoo.com>
Josh Profitt <zorn169@gmail.com>
Luc Verhaegen <libv@skynet.be>
Michael Gold <mgold@ncf.ca>
Michał Mirosław <mirq-linux@rere.qmqm.pl>
Nicola Corna <nicola@corna.info>
Nikos Barkas <levelwol@gmail.com>
Rasmus Wiman <rasmus@wiman.org>
Robinson P. Tryon <bishop.robinson@gmail.com>
Ronald Hoogenboom <hoogenboom30@zonnet.nl>
Ronald Minnich <rminnich@gmail.com>
Sean Young <sean@mess.org>
Stefan Reinauer <stepan@coresystems.de>
Tom Sylla <tsylla@gmail.com>
Ulf Jordan <jordan@chalmers.se>
Urja Rannikko <urjaman@gmail.com>
Uwe Hermann <uwe@hermann-uwe.de>
Ward Vandewege <ward@gnu.org>
Wilbert Duijvenvoorde <w.a.n.duijvenvoorde@gmail.com>