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@zamaudio.com>
Reviewed-on: http://review.coreboot.org/3794
Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Tested-by: build bot (Jenkins)
This commit is contained in:
Damien Zammit 2013-07-20 17:44:15 +10:00 committed by Alexandru Gagniuc
parent ed621ada63
commit 4c2ebeba78
6 changed files with 177 additions and 0 deletions

View File

@ -38,5 +38,7 @@ config SUPERIO_ITE_IT8718F
bool
config SUPERIO_ITE_IT8721F
bool
config SUPERIO_ITE_IT8728F
bool
config SUPERIO_ITE_IT8772F
bool

View File

@ -25,4 +25,5 @@ subdirs-y += it8712f
subdirs-y += it8716f
subdirs-y += it8718f
subdirs-y += it8721f
subdirs-y += it8728f
subdirs-y += it8772f

View File

@ -0,0 +1,21 @@
##
## This file is part of the coreboot project.
##
## Copyright (C) 2013 Damien Zammit <damien@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

View File

@ -0,0 +1,71 @@
/*
* This file is part of the coreboot project.
*
* Copyright (C) 2006 Uwe Hermann <uwe@hermann-uwe.de>
* Copyright (C) 2013 Damien Zammit <damien@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"
/* Superio raw commands */
static void it8728f_sio_write(device_t dev, u8 index, u8 value)
{
pnp_set_logical_device(dev);
pnp_write_config(dev, index, value);
}
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(device_t dev)
{
it8728f_sio_write(dev, IT8728F_CONFIG_REG_CC, 0x02);
}
/* Superio low level commands */
void it8728f_reg_write(device_t dev, u8 index, u8 value)
{
it8728f_enter_conf(dev);
it8728f_sio_write(dev, index, value);
it8728f_exit_conf(dev);
}
void it8728f_24mhz_clkin(device_t dev)
{
it8728f_reg_write(dev, IT8728F_CONFIG_REG_CLOCKSEL, 0x1);
}
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);
}

View File

@ -0,0 +1,40 @@
/*
* This file is part of the coreboot project.
*
* Copyright (C) 2013 Damien Zammit <damien@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"
/*
* Superio low level commands
* Pass dev = PNP_DEV(superiobase, LDN)
*/
void it8728f_reg_write(device_t dev, u8 index, u8 value);
/* Select 24MHz CLKIN (48MHz default). */
void it8728f_24mhz_clkin(device_t dev);
/* Enable the serial port(s). */
void it8728f_enable_serial(device_t dev, u16 iobase);
#endif

View File

@ -0,0 +1,42 @@
/*
* This file is part of the coreboot project.
*
* Copyright (C) 2006 Uwe Hermann <uwe@hermann-uwe.de>
* Copyright (C) 2013 Damien Zammit <damien@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