[coreboot-gerrit] New patch to review for coreboot: 9127fe9 NOTFORMERGE: Preliminary support for new superio IT8728F.

Damien Zammit (damien@zamaudio.com) gerrit at coreboot.org
Tue Jun 25 12:39:50 CEST 2013


Damien Zammit (damien at zamaudio.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/3532

-gerrit

commit 9127fe99158a4db51eaab6cb6d68e786a51bfe98
Author: Damien Zammit <damien at zamaudio.com>
Date:   Wed Jun 26 06:25:39 2013 +1000

    NOTFORMERGE: Preliminary support for new superio IT8728F.
    
    Cloned from IT8718F and verified against the datasheet
    for the new model.
    So far untested on hardware, not sure how to obtain valid IRQ settings.
    
    Change-Id: I82e23e2fe5f9651c4b7b5195b4ccee6d2d852fbe
    Signed-off-by: Damien Zammit <damien at zamaudio.com>
---
 src/superio/ite/Kconfig                |   2 +
 src/superio/ite/Makefile.inc           |   1 +
 src/superio/ite/it8728f/Makefile.inc   |  22 +++++++
 src/superio/ite/it8728f/chip.h         |  33 +++++++++++
 src/superio/ite/it8728f/early_serial.c | 105 +++++++++++++++++++++++++++++++++
 src/superio/ite/it8728f/it8728.h       |  40 +++++++++++++
 src/superio/ite/it8728f/superio.c      |  77 ++++++++++++++++++++++++
 7 files changed, 280 insertions(+)

diff --git a/src/superio/ite/Kconfig b/src/superio/ite/Kconfig
index e1970e8..0cf112f 100644
--- a/src/superio/ite/Kconfig
+++ b/src/superio/ite/Kconfig
@@ -38,5 +38,7 @@ config SUPERIO_ITE_IT8718F
 	bool
 config SUPERIO_ITE_IT8721F
 	bool
+config SUPERIO_ITE_IT8728F
+	bool
 config SUPERIO_ITE_IT8772F
 	bool
diff --git a/src/superio/ite/Makefile.inc b/src/superio/ite/Makefile.inc
index ce595b8..8610eea 100644
--- a/src/superio/ite/Makefile.inc
+++ b/src/superio/ite/Makefile.inc
@@ -25,4 +25,5 @@ subdirs-y += it8712f
 subdirs-y += it8716f
 subdirs-y += it8718f
 subdirs-y += it8721f
+subdirs-y += it8728f
 subdirs-y += it8772f
diff --git a/src/superio/ite/it8728f/Makefile.inc b/src/superio/ite/it8728f/Makefile.inc
new file mode 100644
index 0000000..0989eee
--- /dev/null
+++ b/src/superio/ite/it8728f/Makefile.inc
@@ -0,0 +1,22 @@
+##
+## This file is part of the coreboot project.
+##
+## Copyright (C) 2006 Uwe Hermann <uwe at 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
+##
+
+ramstage-$(CONFIG_SUPERIO_ITE_IT8728F) += superio.c
+
diff --git a/src/superio/ite/it8728f/chip.h b/src/superio/ite/it8728f/chip.h
new file mode 100644
index 0000000..8013531
--- /dev/null
+++ b/src/superio/ite/it8728f/chip.h
@@ -0,0 +1,33 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2006 Uwe Hermann <uwe at 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_CHIP_H
+#define SUPERIO_ITE_IT8728F_CHIP_H
+
+#include <device/device.h>
+#include <pc80/keyboard.h>
+#include <uart8250.h>
+
+struct superio_ite_it8728f_config {
+
+	struct pc_keyboard keyboard;
+};
+
+#endif
diff --git a/src/superio/ite/it8728f/early_serial.c b/src/superio/ite/it8728f/early_serial.c
new file mode 100644
index 0000000..43c431a
--- /dev/null
+++ b/src/superio/ite/it8728f/early_serial.c
@@ -0,0 +1,105 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2006 Uwe Hermann <uwe at 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(void)
+{
+	u16 port = 0x2e; /* TODO: Don't hardcode! */
+
+	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(void)
+{
+	it8728f_enter_conf();
+	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.
+ * (This is what the IT8718F does too).
+ */
+void it8728f_disable_reboot(void)
+{
+	it8728f_enter_conf();
+	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();
+
+	/* (2) Modify the data of configuration registers. */
+
+	/*
+	 * Select the chip to configure (if there's more than one).
+	 * Set bit 7 to select JP3=1, clear bit 7 to select JP3=0.
+	 * If this register is not written, both chips are configured.
+	 */
+
+	/* it8718f_sio_write(0x00, IT8718F_CONFIG_REG_CONFIGSEL, 0x00); */
+
+	/* Enable serial port(s). */
+	it8728f_sio_write(IT8728F_SP1, 0x30, 0x1); /* Serial port 1 */
+	it8728f_sio_write(IT8728F_SP2, 0x30, 0x1); /* Serial port 2 */
+
+	/* Clear software suspend mode (clear bit 0). TODO: Needed? */
+	/* it8718f_sio_write(0x00, IT8718F_CONFIG_REG_SWSUSP, 0x00); */
+
+	/* (3) Exit the configuration state (MB PnP mode). */
+	it8728f_exit_conf();
+}
diff --git a/src/superio/ite/it8728f/it8728.h b/src/superio/ite/it8728f/it8728.h
new file mode 100644
index 0000000..c669a8c
--- /dev/null
+++ b/src/superio/ite/it8728f/it8728.h
@@ -0,0 +1,40 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2006 Uwe Hermann <uwe at 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(void);
+void it8728f_disable_reboot(void);
+void it8728f_enable_serial(device_t dev, u16 iobase);
+#endif
+
+#endif
diff --git a/src/superio/ite/it8728f/superio.c b/src/superio/ite/it8728f/superio.c
new file mode 100644
index 0000000..116e78a
--- /dev/null
+++ b/src/superio/ite/it8728f/superio.c
@@ -0,0 +1,77 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2006 Uwe Hermann <uwe at 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 <device/device.h>
+#include <device/pnp.h>
+#include <uart8250.h>
+#include <pc80/keyboard.h>
+#include <stdlib.h>
+#include "chip.h"
+#include "it8728f.h"
+
+static void init(device_t dev)
+{
+	struct superio_ite_it8728f_config *conf = dev->chip_info;
+
+	if (!dev->enabled)
+		return;
+
+	switch (dev->path.pnp.device) {
+	case IT8728F_FDC: /* TODO. */
+		break;
+	case IT8728F_PP: /* TODO. */
+		break;
+	case IT8728F_EC: /* TODO. */
+		break;
+	case IT8728F_KBCK:
+		pc_keyboard_init(&conf->keyboard);
+		break;
+	case IT8728F_KBCM: /* TODO. */
+		break;
+	case IT8728F_IR: /* TODO. */
+		break;
+	}
+}
+
+static struct device_operations ops = {
+	.read_resources   = pnp_read_resources,
+	.set_resources    = pnp_set_resources,
+	.enable_resources = pnp_enable_resources,
+	.enable           = pnp_enable,
+	.init             = init,
+};
+
+/* TODO: FDC, PP, EC, KBCM, IR. */
+static struct pnp_info pnp_dev_info[] = {
+//???	{ &ops, IT8728F_SP1,  PNP_IO0 | PNP_IRQ0, {0x03f8, 0}, },
+//???	{ &ops, IT8728F_SP2,  PNP_IO0 | PNP_IRQ0 | PNP_DRQ0 | PNP_DRQ1, {0x02f8, 0}, },
+//???	{ &ops, IT8728F_KBCK, PNP_IO0 | PNP_IO1 | PNP_IRQ0, {0x07f8, 0}, {0x07f8, 4}, },
+};
+
+static void enable_dev(struct device *dev)
+{
+	pnp_enable_devices(dev, &pnp_ops,
+		ARRAY_SIZE(pnp_dev_info), pnp_dev_info);
+}
+
+struct chip_operations superio_ite_it8718f_ops = {
+	CHIP_NAME("ITE IT8728F Super I/O")
+	.enable_dev = enable_dev,
+};



More information about the coreboot-gerrit mailing list