Patchwork PATCH: superiotool probe for ServerEngines chip

login
register
about
Submitter Ruud Schramp (DT)
Date 2011-04-08 08:21:29
Message ID <F3B44E70E39E094DA5E637D07D02A83C01AADF13@freddy.holmes.nl>
Download mbox | patch
Permalink /patch/2857/
State Superseded
Headers show

Comments

Ruud Schramp (DT) - 2011-04-08 08:21:29
Hi guys,

Do not know how to handle the unknown devices (LDN's) yet. For now I
dump all IO base registers etc for information purposed.

I have identified two LDN's as Serial port; (LDN 0x01 and LDN 0x02)

Best regards,

Ruud


Signed-off-by: Ruud Schramp <schramp@holmes.nl>

Example output:
./superiotool -d
superiotool r
Found serverengines Server Engine SE-SM 4210-P01 (id=0x02c0, rev=0x00)
at 0x2e
Register dump:
idx 1f 20 21 22 23 2c 2d 2e
val 00 02 c0 00 05 00 00 00
def NA 02 c0 00 00 RR RR RR
LDN 0x00 (UNK)
idx 30 60 61 70 f0 f1 f2
val 00 00 00 00 00 00 00
def NA NA NA NA NA NA NA
LDN 0x01 (COM2)
idx 30 60 61 70 f0 f1 f2
val 00 02 f8 03 00 00 00
def 00 02 f8 03 00 00 0c
LDN 0x02 (COM1)
idx 30 60 61 70 f0 f1 f2
val 01 03 f8 04 00 00 00
def 00 03 f8 04 00 00 0c
LDN 0x03 (UNK)
idx 30 60 61 70 f0 f1 f2
val 00 00 00 00 00 00 00
def NA NA NA NA NA NA NA
LDN 0x04 (UNK)
idx 30 60 61 70 f0 f1 f2
val 00 00 00 00 00 00 00
def NA NA NA NA NA NA NA
LDN 0x05 (UNK)
idx 30 60 61 70 f0 f1 f2
val 00 00 00 00 00 00 00
def NA NA NA NA NA NA NA
LDN 0x06 (UNK)
idx 30 60 61 70 f0 f1 f2
val 00 00 00 00 00 00 00
def NA NA NA NA NA NA NA
LDN 0x07 (UNK)
idx 30 60 61 70 f0 f1 f2
val 00 00 00 00 00 00 00
def NA NA NA NA NA NA NA
Stefan Reinauer - 2011-04-08 23:08:23
* Ruud Schramp (DT) <schramp@holmes.nl> [110408 10:21]:
> Hi guys,
> 
> Do not know how to handle the unknown devices (LDN's) yet. For now I
> dump all IO base registers etc for information purposed.
> 
> I have identified two LDN's as Serial port; (LDN 0x01 and LDN 0x02)
> 
> Best regards,
> 
> Ruud
> 
> 
> Signed-off-by: Ruud Schramp <schramp@holmes.nl>

> diff -uNr superiotool_org/serverengine.c superiotool/serverengine.c
> --- superiotool_org/serverengine.c	1970-01-01 01:00:00.000000000 +0100
> +++ superiotool/serverengine.c	2011-04-08 10:13:33.000000000 +0200

please rename to serverengines.c

> @@ -0,0 +1,106 @@
> +/*
> + * This file is part of the superiotool project.
> + *
> + * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>

Please add your copyright here

> +
> +static const struct superio_registers reg_table[] = {
> +	/* TODO: M5113 doesn't seem to have ID registers? */
Astray line from original code? Please delete

> +	{0x02c0, "Server Engine SE-SM 4210-P01", {

Drop Server Engine here.
> +	/* TODO: Not documented/available on M512x (?) */

Left over comment?

Stefan

Patch

diff -uNr superiotool_org/Makefile superiotool/Makefile
--- superiotool_org/Makefile	2011-03-18 23:08:39.000000000 +0100
+++ superiotool/Makefile	2011-04-08 10:11:19.000000000 +0200
@@ -33,7 +33,7 @@ 
          -Werror-implicit-function-declaration -ansi -pedantic $(SVNDEF)
 LDFLAGS += -lz
 
-OBJS = superiotool.o ali.o fintek.o ite.o nsc.o nuvoton.o smsc.o winbond.o
+OBJS = superiotool.o serverengine.o ali.o fintek.o ite.o nsc.o nuvoton.o smsc.o winbond.o
 
 OS_ARCH = $(shell uname)
 ifeq ($(OS_ARCH), Darwin)
diff -uNr superiotool_org/serverengine.c superiotool/serverengine.c
--- superiotool_org/serverengine.c	1970-01-01 01:00:00.000000000 +0100
+++ superiotool/serverengine.c	2011-04-08 10:13:33.000000000 +0200
@@ -0,0 +1,106 @@ 
+/*
+ * This file is part of the superiotool project.
+ *
+ * Copyright (C) 2007 Uwe Hermann <uwe@hermann-uwe.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#include "superiotool.h"
+
+#define DEVICE_ID_BYTE1_REG	0x20
+#define DEVICE_ID_BYTE2_REG	0x21
+
+#define DEVICE_REV_REG		0x1f
+
+static const struct superio_registers reg_table[] = {
+	/* TODO: M5113 doesn't seem to have ID registers? */
+	{0x02c0, "Server Engine SE-SM 4210-P01", {
+		{NOLDN, NULL,
+			{0x1f,0x20,0x21,0x22,0x23,0x2c,0x2d,0x2e,EOT},
+			{NANA,0x02,0xc0,0x00,0x00,RSVD,RSVD,RSVD,EOT}},
+		{0x0, "UNK",
+			{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
+			{NANA,NANA,NANA,NANA,NANA,NANA,NANA,EOT}},
+		{0x1, "COM2",
+			{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
+			{0x00,0x02,0xf8,0x03,0x00,0x00,0x0c,EOT}},
+		{0x2, "COM1",
+			{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
+			{0x00,0x03,0xf8,0x04,0x00,0x00,0x0c,EOT}},
+		{0x3, "UNK",
+			{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
+			{NANA,NANA,NANA,NANA,NANA,NANA,NANA,EOT}},
+		{0x4, "UNK",
+			{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
+			{NANA,NANA,NANA,NANA,NANA,NANA,NANA,EOT}},
+		{0x5, "UNK",
+			{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
+			{NANA,NANA,NANA,NANA,NANA,NANA,NANA,EOT}},
+		{0x6, "UNK",
+			{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
+			{NANA,NANA,NANA,NANA,NANA,NANA,NANA,EOT}},
+		{0x7, "UNK",
+			{0x30,0x60,0x61,0x70,0xf0,0xf1,0xf2,EOT},
+			{NANA,NANA,NANA,NANA,NANA,NANA,NANA,EOT}},
+		{EOT}}},
+	{EOT}
+};
+
+static void enter_conf_mode_serverengines(uint16_t port)
+{
+	OUTB(0x5A, port);
+}
+
+static void exit_conf_mode_serverengines(uint16_t port)
+{
+	OUTB(0xA5, port);
+}
+
+void probe_idregs_serverengines(uint16_t port)
+{
+	uint16_t id;
+	uint8_t rev;
+
+	probing_for("Server Engines", "", port);
+
+	enter_conf_mode_serverengines(port);
+
+	id = regval(port, DEVICE_ID_BYTE1_REG) << 8;
+	id |= regval(port, DEVICE_ID_BYTE2_REG);
+
+	/* TODO: Not documented/available on M512x (?) */
+	rev = regval(port, DEVICE_REV_REG);
+
+	if (superio_unknown(reg_table, id)) {
+		if (verbose)
+			printf(NOTFOUND "id=0x%04x, rev=0x%02x\n", id, rev);
+		exit_conf_mode_serverengines(port);
+		return;
+	}
+
+	printf("Found Server Engines %s (id=0x%04x, rev=0x%02x) at 0x%x\n",
+	       get_superio_name(reg_table, id), id, rev, port);
+	chip_found = 1;
+
+	dump_superio("Server Engines", reg_table, port, id, LDN_SEL);
+
+	exit_conf_mode_serverengines(port);
+}
+
+void print_serverengines_chips(void)
+{
+	print_vendor_chips("Server Engines", reg_table);
+}
diff -uNr superiotool_org/superiotool.h superiotool/superiotool.h
--- superiotool_org/superiotool.h	2011-03-18 23:08:39.000000000 +0100
+++ superiotool/superiotool.h	2011-04-08 10:13:59.000000000 +0200
@@ -182,6 +182,10 @@ 
 void probe_idregs_ali(uint16_t port);
 void print_ali_chips(void);
 
+/* serverengines.c */
+void probe_idregs_serverengines(uint16_t port);
+void print_serverengines_chips(void);
+
 /* fintek.c */
 void probe_idregs_fintek(uint16_t port);
 void probe_idregs_fintek_alternative(uint16_t port);
@@ -232,6 +236,7 @@ 
 #ifdef PCI_SUPPORT
 	{probe_idregs_via,	{0x3f0, EOT}},
 #endif
+	{probe_idregs_serverengines,	{0x2e, EOT}},
 };
 
 /** Table of functions to print out supported Super I/O chips. */
@@ -248,6 +253,7 @@ 
 #ifdef PCI_SUPPORT
 	{print_via_chips},
 #endif
+	{print_serverengines_chips},
 };
 
 #endif