mirror of
https://review.coreboot.org/flashrom.git
synced 2025-07-01 22:21:16 +02:00
Add support for more than one Super I/O or EC per machine
Flashrom currently only supports exactly one Super I/O or Embedded Controller, and this means quite a few notebooks and a small subset of desktop/server boards cannot be handled reliably and easily. Allow detection and initialization of up to 3 Super I/O and/or EC chips. WARNING! If a Super I/O or EC responds on multiple ports (0x2e and 0x4e), the code will do the wrong thing (namely, initialize the hardware twice). I have no idea if we should handle such situations, and whether we should ignore the second chip with identical ID or not. Initializing the hardware twice for the IT87* family is _not_ a problem, but I don't know how well IT85* can handle it (and whether IT85* would listen at more than one port anyway). Corresponding to flashrom svn r1289. Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Thanks to Thomas Schneider for testing on a board with ITE IT87* SPI. Test report (success) is here: http://paste.flashrom.org/view.php?id=379 Thanks to David Hendricks for testing on a Google Cr-48 laptop with ITE IT85* EC SPI. Test report (success) is here: http://www.flashrom.org/pipermail/flashrom/2011-April/006275.html Acked-by: David Hendricks <dhendrix@google.com>
This commit is contained in:
18
internal.c
18
internal.c
@ -99,17 +99,29 @@ int force_boardenable = 0;
|
||||
int force_boardmismatch = 0;
|
||||
|
||||
#if defined(__i386__) || defined(__x86_64__)
|
||||
struct superio superio = {};
|
||||
|
||||
void probe_superio(void)
|
||||
{
|
||||
superio = probe_superio_ite();
|
||||
probe_superio_ite();
|
||||
#if 0
|
||||
/* Winbond Super I/O code is not yet available. */
|
||||
if (superio.vendor == SUPERIO_VENDOR_NONE)
|
||||
superio = probe_superio_winbond();
|
||||
#endif
|
||||
}
|
||||
|
||||
int superio_count = 0;
|
||||
#define SUPERIO_MAX_COUNT 3
|
||||
|
||||
struct superio superios[SUPERIO_MAX_COUNT];
|
||||
|
||||
int register_superio(struct superio s)
|
||||
{
|
||||
if (superio_count == SUPERIO_MAX_COUNT)
|
||||
return 1;
|
||||
superios[superio_count++] = s;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
int is_laptop = 0;
|
||||
|
Reference in New Issue
Block a user