summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMondrian nuessle <nuessle@uni-hd.de>2009-04-22 20:30:42 +0000
committerMyles Watson <mylesgw@gmail.com>2009-04-22 20:30:42 +0000
commit21da019a1e2840ef8c17d0733c574fa4abd4eedd (patch)
tree34f265cc8f51429cdacb81abdcd17310da841e30
parentd9b1c4f42f8e2fc4c3e44fa23f815c68e5127385 (diff)
This patch add rudimentary support for the superio functionality of
the Serverengines Pilot BMC chip. Necessary to get serial out on the HP DL145 G3. Signed-off-by: Mondrian nuessle <nuessle@uni-hd.de> Acked-by: Samuel Verstraete <samuel.verstraete@gmail.com> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4183 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
-rw-r--r--src/superio/serverengines/pilot/pilot.h33
-rw-r--r--src/superio/serverengines/pilot/pilot_early_init.c96
-rw-r--r--src/superio/serverengines/pilot/pilot_early_serial.c58
3 files changed, 187 insertions, 0 deletions
diff --git a/src/superio/serverengines/pilot/pilot.h b/src/superio/serverengines/pilot/pilot.h
new file mode 100644
index 0000000000..907cf66b1a
--- /dev/null
+++ b/src/superio/serverengines/pilot/pilot.h
@@ -0,0 +1,33 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2009 University of Heidelberg
+ * Written by Mondrian Nuessle <nuessle@uni-heidelberg.de> for University of Heidelberg
+ *
+ * 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
+ */
+
+/* PILOT SuperIO is only based on LPC observation done on factory system. */
+
+#define PILOT_SP1 0x02
+// Serial port COM1
+#define PILOT_LD1 0x01
+// logical device 1
+#define PILOT_LD4 0x04
+// logical device 4
+#define PILOT_LD5 0x05
+// logical device 5
+#define PILOT_LD7 0x07
+// logical device 7
diff --git a/src/superio/serverengines/pilot/pilot_early_init.c b/src/superio/serverengines/pilot/pilot_early_init.c
new file mode 100644
index 0000000000..0bd83c96ec
--- /dev/null
+++ b/src/superio/serverengines/pilot/pilot_early_init.c
@@ -0,0 +1,96 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2009 University of Heidelberg
+ * Written by Mondrian Nuessle <nuessle@uni-heidelberg.de> for University of Heidelberg
+ *
+ * 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
+ */
+
+/* PILOT SuperIO is only based on LPC observation done on factory system. */
+
+#define BLUBB_DEV PNP_DEV(port, 0x04)
+
+/* Logical device 4, 5 and 7 are being deactivated. Logical Device 1 seems to
+ be another serial (?), it is also deactivated on the HP machine */
+static void pilot_early_init(device_t dev)
+{
+ unsigned port = dev>>8;
+ print_debug("Using port:");print_debug_hex16(port);print_debug("\r\n");
+ pilot_disable_serial(PNP_DEV(port,0x1));
+ print_debug("disable serial 1\r\n");
+
+/*
+pnp_enter_ext_func_mode(dev);
+ pnp_set_logical_device(PNP_DEV(port,0x3));
+ pnp_exit_ext_func_mode(dev);
+ pnp_enter_ext_func_mode(dev);
+ pnp_set_enable( PNP_DEV(port,0x3),0);
+ pnp_exit_ext_func_mode(dev);
+*/
+ pnp_enter_ext_func_mode(dev);
+ pnp_set_logical_device(PNP_DEV(port,0x4));
+ pnp_exit_ext_func_mode(dev);
+ pnp_enter_ext_func_mode(dev);
+ pnp_set_enable( PNP_DEV(port,0x4),0);
+ pnp_exit_ext_func_mode(dev);
+
+ pnp_enter_ext_func_mode(dev);
+ pnp_set_logical_device(PNP_DEV(port,0x5));
+ pnp_exit_ext_func_mode(dev);
+ pnp_enter_ext_func_mode(dev);
+ pnp_set_enable(PNP_DEV(port,0x5),0);
+ pnp_exit_ext_func_mode(dev);
+ /*
+ pnp_enter_ext_func_mode(dev);
+ pnp_set_logical_device(PNP_DEV(port,0x6));
+ pnp_exit_ext_func_mode(dev);
+ pnp_enter_ext_func_mode(dev);
+ pnp_set_enable( PNP_DEV(port,0x6),0);
+ pnp_exit_ext_func_mode(dev);
+*/
+ pnp_enter_ext_func_mode(dev);
+ pnp_set_logical_device(PNP_DEV(port,0x7));
+ pnp_exit_ext_func_mode(dev);
+ pnp_enter_ext_func_mode(dev);
+ pnp_set_enable(PNP_DEV(port,0x7), 0);
+ pnp_exit_ext_func_mode(dev);
+/*
+ pnp_enter_ext_func_mode(dev);
+ pnp_set_logical_device(PNP_DEV(port,0x8));
+ pnp_exit_ext_func_mode(dev);
+ pnp_enter_ext_func_mode(dev);
+ pnp_set_enable(PNP_DEV(port,0x8), 0);
+ pnp_exit_ext_func_mode(dev);
+
+ pnp_enter_ext_func_mode(dev);
+ pnp_set_logical_device(PNP_DEV(port,0x9));
+ pnp_exit_ext_func_mode(dev);
+ pnp_enter_ext_func_mode(dev);
+ pnp_set_enable(PNP_DEV(port,0x9), 0);
+ pnp_exit_ext_func_mode(dev);
+
+ pnp_enter_ext_func_mode(dev);
+ pnp_set_logical_device(PNP_DEV(port,0x10;
+ pnp_exit_ext_func_mode(dev);
+ pnp_enter_ext_func_mode(dev);
+ pnp_set_enable(PNP_DEV(port,0x10 0);
+ pnp_exit_ext_func_mode(dev);
+*/
+
+}
+
+
+
diff --git a/src/superio/serverengines/pilot/pilot_early_serial.c b/src/superio/serverengines/pilot/pilot_early_serial.c
new file mode 100644
index 0000000000..934e8b113f
--- /dev/null
+++ b/src/superio/serverengines/pilot/pilot_early_serial.c
@@ -0,0 +1,58 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2009 University of Heidelberg
+ * Written by Mondrian Nuessle <nuessle@uni-heidelberg.de> for University of Heidelberg
+ *
+ * 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
+ */
+
+/* PILOT SuperIO is only based on LPC observation done on factory system. */
+
+#include <arch/romcc_io.h>
+#include "pilot.h"
+
+/* pilot uses 0x5A/0xA5 pattern to actiavte deactivate config access */
+static inline void pnp_enter_ext_func_mode(device_t dev)
+{
+ unsigned port = dev>>8;
+ outb(0x5A, port);
+}
+
+static void pnp_exit_ext_func_mode(device_t dev)
+{
+ unsigned port = dev>>8;
+ outb(0xA5, port);
+}
+
+/* serial config is failry standard procedure */
+static void pilot_enable_serial(device_t dev, unsigned iobase)
+{
+ pnp_enter_ext_func_mode(dev);
+ pnp_set_logical_device(dev);
+ pnp_set_iobase(dev, PNP_IDX_IO0, iobase);
+ pnp_set_enable(dev, 1);
+ pnp_exit_ext_func_mode(dev);
+}
+
+static void pilot_disable_serial(device_t dev)
+{
+ pnp_enter_ext_func_mode(dev);
+ pnp_set_logical_device(dev);
+ pnp_set_iobase(dev, PNP_IDX_IO0, 0x00);
+ pnp_set_enable(dev, 0);
+ pnp_exit_ext_func_mode(dev);
+}
+