From 14f304ace1fa238ad0b821e5e139c74d280d3188 Mon Sep 17 00:00:00 2001 From: Uwe Hermann Date: Mon, 8 Oct 2007 01:11:11 +0000 Subject: [PATCH] Add detection support for lots more SMSC Super I/Os (trivial). Signed-off-by: Uwe Hermann Acked-by: Uwe Hermann git-svn-id: svn://svn.coreboot.org/coreboot/trunk@2841 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- util/superiotool/smsc.c | 103 +++++++++++++++++++++++++++------ util/superiotool/superiotool.h | 6 +- 2 files changed, 88 insertions(+), 21 deletions(-) diff --git a/util/superiotool/smsc.c b/util/superiotool/smsc.c index 8c14b35d8e..3538d1db0d 100644 --- a/util/superiotool/smsc.c +++ b/util/superiotool/smsc.c @@ -27,20 +27,14 @@ #define DEVICE_REV_REG 0x21 const static struct superio_registers reg_table[] = { - {0x28, "FDC37N769", { - {NOLDN, NULL, - {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09, - 0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13, - 0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d, - 0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27, - 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT}, - {0x28,0x9c,0x88,0x70,0x00,0x00,0xff,0x00,0x00,0x00, - 0x00,0x00,0x02,0x28,NANA,0x00,0x00,0x80,RSVD,RSVD, - NANA,NANA,NANA,0x03,RSVD,RSVD,RSVD,RSVD,RSVD,RSVD, - 0x80,0x00,0x3c,RSVD,RSVD,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,RSVD,0x00,0x00,0x03,0x00,0x00,EOT}}, + /* The following Super I/Os use the 0x20/0x21 ID registers. */ + {0x0e, "LPC47N252", { /* From sensors-detect */ {EOT}}}, - {0x42, "FDC37B80x", { + {0x14, "LPC47M172", { + {EOT}}}, + {0x40, "FDC37C672/FDC37C67x", { /* Chiprev: 0x01 */ + {EOT}}}, + {0x42, "FDC37B80x/FDC37M707", { {EOT}}}, {0x44, "FDC37B78x", { {NOLDN, NULL, @@ -85,6 +79,8 @@ const static struct superio_registers reg_table[] = { {0x30,0x60,0x61,0x70,0xf0,EOT}, {0x00,0x00,0x00,NANA,NANA,EOT}}, {EOT}}}, + {0x47, "FDC37M60x", { /* TODO: Not yet in sensors-detect */ + {EOT}}}, {0x4c, "FDC37B72x", { {NOLDN, NULL, {0x03,0x07,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28, @@ -155,11 +151,9 @@ const static struct superio_registers reg_table[] = { NANA,NANA,NANA,NANA,0x00,0x00,0x00,0x00,RSVD,RSVD, RSVD,RSVD,RSVD,RSVD,EOT}}, {EOT}}}, - {0x47, "FDC37M60x", { - {EOT}}}, {0x51, "LPC47B27x", { {EOT}}}, - {0x59, "LPC47M10x", { + {0x52, "LPC47B37x", { {NOLDN, NULL, {0x03,0x07,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28, 0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT}, @@ -194,17 +188,35 @@ const static struct superio_registers reg_table[] = { {0x30,0x60,0x61,0x70,EOT}, {0x00,0x03,0x30,0x05,EOT}}, {EOT}}}, - {0x60, "LPC47M15x", { + {0x54, "LPC47U33x", { + {EOT}}}, + {0x56, "LPC47B34x", { + {EOT}}}, + {0x57, "LPC47S42x", { + {EOT}}}, + {0x59, "LPC47M10x/112/13x", { + {EOT}}}, + {0x5d, "LPC47B357", { /* From sensors-detect (no datasheet) */ + {EOT}}}, + {0x5f, "LPC47M14x", { + {EOT}}}, + {0x60, "LPC47M15x/192/997", { {EOT}}}, {0x62, "LPC47S45x", { {EOT}}}, - {0x6e, "LPC47B387", { + {0x6b, "LPC47M292", { /* From sensors-detect */ + {EOT}}}, + {0x6e, "LPC47B387", { /* TODO: Not yet in sensors-detect */ /* Found in the HP Compaq Business Desktop d530 Series */ /* http://thread.gmane.org/gmane.linux.bios/26648 */ /* We cannot find a public datasheet for this Super I/O. */ {EOT}}}, {0x6f, "LPC47B397", { {EOT}}}, + {0x74, "LPC47M182", { + {EOT}}}, + {0x76, "LPC47M584", { /* From sensors-detect (no datasheet) */ + {EOT}}}, {0x77, "A8000", { /* ASUS A8000, a rebranded DME1737(?) */ {NOLDN, NULL, {0x03,0x07,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28, @@ -259,13 +271,68 @@ const static struct superio_registers reg_table[] = { {0x30,0x60,0x61,0x62,0x63,0xf0,0xf1,0xf2,EOT}, {0x00,0x00,0x00,0x00,0x00,NANA,RSVD,0x04,EOT}}, {EOT}}}, + {0x79, "SCH5504", { /* From sensors-detect (no datasheet) */ + {EOT}}}, +#if 0 + {0x7a, "Unknown", { /* Found in Toshiba Satellite A80-117. */ + {EOT}}}, +#endif + {0x7c, "SCH3112", { + {EOT}}}, + {0x7d, "SCH3114", { + {EOT}}}, + {0x7f, "SCH3116", { + {EOT}}}, {0x81, "SCH5307", { {EOT}}}, + {0x85, "SCH5317", { /* From sensors-detect */ + {EOT}}}, + {0x90, "SCH4307", { /* From sensors-detect */ + {EOT}}}, + + /* The following Super I/Os use the 0x0d/0x0e ID registers. */ + {0x03, "FDC37C669", { + /* Init: 0x55, 0x55. Exit: 0xaa. Ports: 0x3f0/0x370. */ + /* Chiprev: 0x02. */ + {EOT}}}, + {0x04, "FDC37C669FR", { /* TODO: Not yet in sensors-detect. */ + /* Init: 0x55, 0x55. Exit: 0xaa. Ports: 0x3f0/0x370. */ + {EOT}}}, + {0x28, "FDC37N769", { + /* Init: 0x55. Exit: 0xaa. Ports: 0x3f0/0x370. */ + {NOLDN, NULL, + {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09, + 0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13, + 0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d, + 0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27, + 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,EOT}, + {0x28,0x9c,0x88,0x70,0x00,0x00,0xff,0x00,0x00,0x00, + 0x00,0x00,0x02,0x28,NANA,0x00,0x00,0x80,RSVD,RSVD, + NANA,NANA,NANA,0x03,RSVD,RSVD,RSVD,RSVD,RSVD,RSVD, + 0x80,0x00,0x3c,RSVD,RSVD,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,RSVD,0x00,0x00,0x03,0x00,0x00,EOT}}, + {EOT}}}, + {0x5a, "LPC47N227", { + /* Init: 0x55. Exit: 0xaa. Ports: 0x2e/0x4e. */ + {EOT}}}, + {0x65, "FDC37C665GT/IR", { + /* Init: 0x55, 0x55. Exit: 0xaa. Port: 0x3f0. */ + /* Chiprev: 0x02 = FDC37C665GT, 0x82 = FDC37C665IR */ + {EOT}}}, + {0x66, "FDC37C666GT", { + /* Init: 0x55, 0x55. Exit: 0xaa. Port: 0x3f0. Chiprev: 0x02. */ + {EOT}}}, {EOT} }; static void enter_conf_mode_smsc(uint16_t port) { + /* Some of the SMSC Super I/Os have an 0x55,0x55 init, some only + * require one 0x55. We do 0x55,0x55 for all of them at the moment, + * in the assumption that the extra 0x55 won't hurt the other + * Super I/Os. This is verified to be true on (at least) the FDC37N769. + */ + outb(0x55, port); outb(0x55, port); } diff --git a/util/superiotool/superiotool.h b/util/superiotool/superiotool.h index 3509d07bc3..9ba514306f 100644 --- a/util/superiotool/superiotool.h +++ b/util/superiotool/superiotool.h @@ -54,7 +54,7 @@ and print its vendor, name, ID, revision, and config port.\n" #define LDNSIZE (MAXLDN + 3) /* Biggest LDN + 0 + NOLDN + EOT */ #define MAXNUMIDX 70 /* Maximum number of indexes */ #define IDXSIZE (MAXNUMIDX + 1) -#define MAXNUMPORTS (5 + 1) /* Maximum number of Super I/O ports */ +#define MAXNUMPORTS (6 + 1) /* Maximum number of Super I/O ports */ /* Command line parameters. */ extern int dump, dump_readable, verbose; @@ -109,10 +109,10 @@ const static struct { int ports[MAXNUMPORTS]; /* Signed, as we need EOT. */ } superio_ports_table[] = { {probe_idregs_ali, {0x3f0, 0x370, EOT}}, - {probe_idregs_nsc, {0x2e, 0x4e, EOT}}, {probe_idregs_fintek, {0x2e, 0x4e, EOT}}, {probe_idregs_ite, {0x2e, 0x4e, EOT}}, - {probe_idregs_smsc, {0x2e, 0x4e, 0x3f0, 0x370, EOT}}, + {probe_idregs_nsc, {0x2e, 0x4e, EOT}}, + {probe_idregs_smsc, {0x2e, 0x4e, 0x162e, 0x164e, 0x3f0, 0x370, EOT}}, {probe_idregs_winbond, {0x2e, 0x4e, 0x3f0, 0x370, 0x250, EOT}}, };