Damien Zammit (damien(a)zamaudio.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/3794
-gerrit
commit 7feaae3dde98e646051c104d466384a1db645d13
Author: Damien Zammit <damien(a)zamaudio.com>
Date: Sat Jul 20 17:44:15 2013 +1000
it8728f: Add ITE IT8728F superio early serial support.
This is the first of a series of patches to provide support
for a new mainboard, Gigabyte GA-B75M-D3V.
This patch provides early serial for the superio and has been
tested on this mainboard. The code is based on IT8718F superio.
Change-Id: I5636199b49314166ed3b81e60b41131964dd44ff
Signed-off-by: Damien Zammit <damien(a)zamaudio.com>
---
src/superio/ite/Kconfig | 2 +
src/superio/ite/Makefile.inc | 1 +
src/superio/ite/it8728f/Makefile.inc | 21 ++++++++++
src/superio/ite/it8728f/early_serial.c | 71 ++++++++++++++++++++++++++++++++++
src/superio/ite/it8728f/early_serial.h | 50 ++++++++++++++++++++++++
src/superio/ite/it8728f/it8728f.h | 42 ++++++++++++++++++++
6 files changed, 187 insertions(+)
diff --git a/src/superio/ite/Kconfig b/src/superio/ite/Kconfig
index e1970e8..b9411f5 100644
--- a/src/superio/ite/Kconfig
+++ b/src/superio/ite/Kconfig
@@ -40,3 +40,5 @@ config SUPERIO_ITE_IT8721F
bool
config SUPERIO_ITE_IT8772F
bool
+config SUPERIO_ITE_IT8728F
+ bool
diff --git a/src/superio/ite/Makefile.inc b/src/superio/ite/Makefile.inc
index ce595b8..bed9e7d 100644
--- a/src/superio/ite/Makefile.inc
+++ b/src/superio/ite/Makefile.inc
@@ -26,3 +26,4 @@ subdirs-y += it8716f
subdirs-y += it8718f
subdirs-y += it8721f
subdirs-y += it8772f
+subdirs-y += it8728f
diff --git a/src/superio/ite/it8728f/Makefile.inc b/src/superio/ite/it8728f/Makefile.inc
new file mode 100644
index 0000000..d8d4f6a
--- /dev/null
+++ b/src/superio/ite/it8728f/Makefile.inc
@@ -0,0 +1,21 @@
+##
+## This file is part of the coreboot project.
+##
+## Copyright (C) 2013 Damien Zammit <damien(a)zamaudio.com>
+##
+## 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
+##
+
+romstage-$(CONFIG_SUPERIO_ITE_IT8728F) += early_serial.c
diff --git a/src/superio/ite/it8728f/early_serial.c b/src/superio/ite/it8728f/early_serial.c
new file mode 100644
index 0000000..583b5e7
--- /dev/null
+++ b/src/superio/ite/it8728f/early_serial.c
@@ -0,0 +1,71 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2006 Uwe Hermann <uwe(a)hermann-uwe.de>
+ * Copyright (C) 2013 Damien Zammit <damien(a)zamaudio.com>
+ *
+ * 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 "early_serial.h"
+
+void it8728f_sio_write(device_t dev, u8 index, u8 value)
+{
+ pnp_set_logical_device(dev);
+ pnp_write_config(dev, index, value);
+}
+
+void it8728f_enter_conf(device_t dev)
+{
+ u16 port = dev >> 8;
+
+ outb(0x87, port);
+ outb(0x01, port);
+ outb(0x55, port);
+ outb((port == 0x4e) ? 0xaa : 0x55, port);
+}
+
+void it8728f_exit_conf(device_t dev)
+{
+ it8728f_sio_write(dev, IT8728F_CONFIG_REG_CC, 0x02);
+}
+
+void it8728f_24mhz_clkin(device_t dev)
+{
+ it8728f_enter_conf(dev);
+ it8728f_sio_write(0x00, IT8728F_CONFIG_REG_CLOCKSEL, 0x1);
+ it8728f_exit_conf(dev);
+}
+
+void it8728f_disable_reboot(device_t dev)
+{
+ it8728f_enter_conf(dev);
+ it8728f_sio_write(IT8728F_GPIO, 0xEF, 0x7E);
+ it8728f_exit_conf(dev);
+}
+
+void it8728f_enable_serial(device_t dev, u16 iobase)
+{
+ /* (1) Enter the configuration state (MB PnP mode). */
+ it8728f_enter_conf(dev);
+
+ /* (2) Modify the data of configuration registers. */
+ pnp_set_logical_device(dev);
+ pnp_set_enable(dev, 0);
+ pnp_set_iobase(dev, PNP_IDX_IO0, iobase);
+ pnp_set_enable(dev, 1);
+
+ /* (3) Exit the configuration state (MB PnP mode). */
+ it8728f_exit_conf(dev);
+}
diff --git a/src/superio/ite/it8728f/early_serial.h b/src/superio/ite/it8728f/early_serial.h
new file mode 100644
index 0000000..ca37ad8
--- /dev/null
+++ b/src/superio/ite/it8728f/early_serial.h
@@ -0,0 +1,50 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2013 Damien Zammit <damien(a)zamaudio.com>
+ *
+ * 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
+ */
+#ifndef SUPERIO_ITE_IT8728F_EARLY_SERIAL_H
+#define SUPERIO_ITE_IT8728F_EARLY_SERIAL_H
+
+#include <stdint.h>
+#include <arch/io.h>
+#include <device/pnp_def.h>
+#include "it8728f.h"
+
+void it8728f_sio_write(device_t dev, u8 index, u8 value);
+void it8728f_enter_conf(device_t dev);
+
+/* Remember to always pass PNP_DEV(iobase, 0) to this function */
+void it8728f_exit_conf(device_t dev);
+
+/* Select 24MHz CLKIN (48MHz default). */
+void it8728f_24mhz_clkin(device_t dev);
+
+/*
+ * GIGABYTE uses a special Super I/O register to protect its Dual BIOS
+ * mechanism. It lives in the GPIO LDN. However, register 0xEF is not
+ * mentioned in the IT8728F datasheet so just hardcode it to 0x7E for now.
+ *
+ * Bit 0 is Dual BIOS SPI chipselect, the rest set to 0x7E makes it boot
+ * without falling into power cycle loop.
+ */
+void it8728f_disable_reboot(device_t dev);
+
+/* Enable the serial port(s). */
+void it8728f_enable_serial(device_t dev, u16 iobase);
+
+#endif
diff --git a/src/superio/ite/it8728f/it8728f.h b/src/superio/ite/it8728f/it8728f.h
new file mode 100644
index 0000000..603e467
--- /dev/null
+++ b/src/superio/ite/it8728f/it8728f.h
@@ -0,0 +1,42 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2006 Uwe Hermann <uwe(a)hermann-uwe.de>
+ * Copyright (C) 2013 Damien Zammit <damien(a)zamaudio.com>
+ *
+ * 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
+ */
+
+#ifndef SUPERIO_ITE_IT8728F_IT8728F_H
+#define SUPERIO_ITE_IT8728F_IT8728F_H
+
+#define IT8728F_FDC 0x00 /* Floppy */
+#define IT8728F_SP1 0x01 /* Com1 */
+#define IT8728F_SP2 0x02 /* Com2 */
+#define IT8728F_PP 0x03 /* Parallel port */
+#define IT8728F_EC 0x04 /* Environment controller */
+#define IT8728F_KBCK 0x05 /* PS/2 keyboard */
+#define IT8728F_KBCM 0x06 /* PS/2 mouse */
+#define IT8728F_GPIO 0x07 /* GPIO */
+#define IT8728F_IR 0x0a /* Consumer IR */
+
+/* Global configuration registers. */
+#define IT8728F_CONFIG_REG_CC 0x02 /* Configure Control (write-only). */
+#define IT8728F_CONFIG_REG_LDN 0x07 /* Logical Device Number. */
+#define IT8728F_CONFIG_REG_CHIPVERS 0x22 /* Chip version */
+#define IT8728F_CONFIG_REG_CLOCKSEL 0x23 /* Clock Selection. */
+#define IT8728F_CONFIG_REG_SWSUSP 0x24 /* Software Suspend, Flash I/F. 'Special register' */
+
+#endif
Damien Zammit (damien(a)zamaudio.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/3794
-gerrit
commit 79d7cb7031a60fe946b57004140f5fe938582503
Author: Damien Zammit <damien(a)zamaudio.com>
Date: Sat Jul 20 17:44:15 2013 +1000
it8728f: ITE IT8728F superio early serial support.
This is the first of a series of patches to provide support
for a new mainboard, Gigabyte GA-B75M-D3V.
This patch provides early serial for the superio and works on
this mainboard.
Change-Id: I5636199b49314166ed3b81e60b41131964dd44ff
Signed-off-by: Damien Zammit <damien(a)zamaudio.com>
---
src/superio/ite/Kconfig | 2 +
src/superio/ite/Makefile.inc | 1 +
src/superio/ite/it8728f/early_serial.c | 96 ++++++++++++++++++++++++++++++++++
src/superio/ite/it8728f/it8728f.h | 40 ++++++++++++++
4 files changed, 139 insertions(+)
diff --git a/src/superio/ite/Kconfig b/src/superio/ite/Kconfig
index e1970e8..b9411f5 100644
--- a/src/superio/ite/Kconfig
+++ b/src/superio/ite/Kconfig
@@ -40,3 +40,5 @@ config SUPERIO_ITE_IT8721F
bool
config SUPERIO_ITE_IT8772F
bool
+config SUPERIO_ITE_IT8728F
+ bool
diff --git a/src/superio/ite/Makefile.inc b/src/superio/ite/Makefile.inc
index ce595b8..bed9e7d 100644
--- a/src/superio/ite/Makefile.inc
+++ b/src/superio/ite/Makefile.inc
@@ -26,3 +26,4 @@ subdirs-y += it8716f
subdirs-y += it8718f
subdirs-y += it8721f
subdirs-y += it8772f
+subdirs-y += it8728f
diff --git a/src/superio/ite/it8728f/early_serial.c b/src/superio/ite/it8728f/early_serial.c
new file mode 100644
index 0000000..2dfb6e0
--- /dev/null
+++ b/src/superio/ite/it8728f/early_serial.c
@@ -0,0 +1,96 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2006 Uwe Hermann <uwe(a)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 <arch/io.h>
+#include "it8728f.h"
+
+/* The base address is 0x2e or 0x4e, depending on config bytes. */
+#define SIO_BASE 0x2e
+#define SIO_INDEX SIO_BASE
+#define SIO_DATA (SIO_BASE + 1)
+
+/* Global configuration registers. */
+#define IT8728F_CONFIG_REG_CC 0x02 /* Configure Control (write-only). */
+#define IT8728F_CONFIG_REG_LDN 0x07 /* Logical Device Number. */
+#define IT8728F_CONFIG_REG_CHIPVERS 0x22 /* Chip version */
+#define IT8728F_CONFIG_REG_CLOCKSEL 0x23 /* Clock Selection. */
+#define IT8728F_CONFIG_REG_SWSUSP 0x24 /* Software Suspend, Flash I/F. 'Special register' */
+
+static void it8728f_sio_write(u8 ldn, u8 index, u8 value)
+{
+ outb(IT8728F_CONFIG_REG_LDN, SIO_BASE);
+ outb(ldn, SIO_DATA);
+ outb(index, SIO_BASE);
+ outb(value, SIO_DATA);
+}
+
+static void it8728f_enter_conf(device_t dev)
+{
+ u16 port = dev >> 8;
+
+ outb(0x87, port);
+ outb(0x01, port);
+ outb(0x55, port);
+ outb((port == 0x4e) ? 0xaa : 0x55, port);
+}
+
+static void it8728f_exit_conf(void)
+{
+ it8728f_sio_write(0x00, IT8728F_CONFIG_REG_CC, 0x02);
+}
+
+/* Select 24MHz CLKIN (48MHz default). */
+void it8728f_24mhz_clkin(device_t dev)
+{
+ it8728f_enter_conf(dev);
+ it8728f_sio_write(0x00, IT8728F_CONFIG_REG_CLOCKSEL, 0x1);
+ it8728f_exit_conf();
+}
+
+/*
+ * GIGABYTE uses a special Super I/O register to protect its Dual BIOS
+ * mechanism. It lives in the GPIO LDN. However, register 0xEF is not
+ * mentioned in the IT8728F datasheet so just hardcode it to 0x7E for now.
+ *
+ * Bit 0 is dualbios SPI chipselect, the rest set to 0x7E makes it boot
+ * without falling into power cycle loop.
+ */
+void it8728f_disable_reboot(device_t dev)
+{
+ it8728f_enter_conf(dev);
+ it8728f_sio_write(IT8728F_GPIO, 0xEF, 0x7E);
+ it8728f_exit_conf();
+}
+
+/* Enable the serial port(s). */
+void it8728f_enable_serial(device_t dev, u16 iobase)
+{
+ /* (1) Enter the configuration state (MB PnP mode). */
+ it8728f_enter_conf(dev);
+
+ /* (2) Modify the data of configuration registers. */
+ pnp_set_logical_device(dev);
+ pnp_set_enable(dev, 0);
+ pnp_set_iobase(dev, PNP_IDX_IO0, iobase);
+ pnp_set_enable(dev, 1);
+
+ /* (3) Exit the configuration state (MB PnP mode). */
+ it8728f_exit_conf();
+}
diff --git a/src/superio/ite/it8728f/it8728f.h b/src/superio/ite/it8728f/it8728f.h
new file mode 100644
index 0000000..2fe901f
--- /dev/null
+++ b/src/superio/ite/it8728f/it8728f.h
@@ -0,0 +1,40 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2006 Uwe Hermann <uwe(a)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
+ */
+
+#ifndef SUPERIO_ITE_IT8728F_IT8728F_H
+#define SUPERIO_ITE_IT8728F_IT8728F_H
+
+#define IT8728F_FDC 0x00 /* Floppy */
+#define IT8728F_SP1 0x01 /* Com1 */
+#define IT8728F_SP2 0x02 /* Com2 */
+#define IT8728F_PP 0x03 /* Parallel port */
+#define IT8728F_EC 0x04 /* Environment controller */
+#define IT8728F_KBCK 0x05 /* PS/2 keyboard */
+#define IT8728F_KBCM 0x06 /* PS/2 mouse */
+#define IT8728F_GPIO 0x07 /* GPIO */
+#define IT8728F_IR 0x0a /* Consumer IR */
+
+#if defined(__PRE_RAM__)
+void it8728f_24mhz_clkin(device_t dev);
+void it8728f_disable_reboot(device_t dev);
+void it8728f_enable_serial(device_t dev, u16 iobase);
+#endif
+
+#endif
Nico Huber (nico.huber(a)secunet.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/3791
-gerrit
commit 21c7feca1cddf746b39cbccf17c4e650a94e936d
Author: Nico Huber <nico.huber(a)secunet.com>
Date: Fri Jul 19 14:03:47 2013 +0200
libpayload: Switch xHCI shared ports back to EHCI on shutdown
On Intel's Panther Point the xHCI ports are shared with an EHCI
controller. Our xHCI driver switches them to xHCI, naturally. But
we forgot to switch them back on shutdown, which left them
unusable by a non-xHCI aware operating system.
Change-Id: I70ef08655a603b42ee939935d50cf77ea97878a3
Signed-off-by: Nico Huber <nico.huber(a)secunet.com>
---
payloads/libpayload/drivers/usb/xhci.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/payloads/libpayload/drivers/usb/xhci.c b/payloads/libpayload/drivers/usb/xhci.c
index c29d323..51f9422 100644
--- a/payloads/libpayload/drivers/usb/xhci.c
+++ b/payloads/libpayload/drivers/usb/xhci.c
@@ -110,6 +110,19 @@ xhci_switch_ppt_ports(pcidev_t addr)
}
}
+/* On Panther Point: switch all ports back to EHCI */
+static void
+xhci_switchback_ppt_ports(pcidev_t addr)
+{
+ if (pci_read_config32(addr, 0x00) == 0x1e318086) {
+ u32 reg32 = pci_read_config32(addr, 0xd0) & 0xf;
+ xhci_debug("Switching ports back: 0x%"PRIx32"\n", reg32);
+ pci_write_config32(addr, 0xd0, 0x00000000);
+ reg32 = pci_read_config32(addr, 0xd0) & 0xf;
+ xhci_debug("Still switched to xHCI: 0x%"PRIx32"\n", reg32);
+ }
+}
+
static long
xhci_handshake(volatile u32 *const reg, u32 mask, u32 wait_for, long timeout_us)
{
@@ -389,6 +402,8 @@ xhci_shutdown(hci_t *const controller)
xhci_stop(controller);
+ xhci_switchback_ppt_ports(controller->bus_address);
+
if (xhci->sp_ptrs) {
const size_t max_sp_bufs = xhci->capreg->Max_Scratchpad_Bufs;
for (i = 0; i < max_sp_bufs; ++i) {