summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDino Li <dino.li@ite.com.tw>2015-09-18 10:40:38 +0800
committerchrome-bot <chrome-bot@chromium.org>2015-09-17 23:52:32 -0700
commit62ea7121f85a793bed2792e3482bb1aa36d75b8d (patch)
tree44ab2ef7ff140ecd9519d037d0981e17aafb5f1d
parent574c8065710432f5a91fd8dd11d1fa28e2be1f3b (diff)
downloadchrome-ec-62ea7121f85a793bed2792e3482bb1aa36d75b8d.tar.gz
it8380dev: fix ec2i and uart
1. Host access to the PNPCFG registers is disabled. 2. UART2 for host if necessary. Signed-off-by: Dino Li <dino.li@ite.com.tw> BRANCH=none BUG=none TEST=1. host can't access the PNPCFG registers. 2. out I/O port 0x2f8 '0x30, 0x31, 0x32, 0x33, and 0x34' will have console message '01234'. Change-Id: If07bdc129105f5248661d929e6858d4063c452ee Reviewed-on: https://chromium-review.googlesource.com/300266 Commit-Ready: Dino Li <dino.li@ite.com.tw> Tested-by: Dino Li <dino.li@ite.com.tw> Reviewed-by: Randall Spangler <rspangler@chromium.org>
-rw-r--r--board/it8380dev/board.c23
-rw-r--r--board/it8380dev/board.h9
-rw-r--r--board/it8380dev/gpio.inc10
-rw-r--r--chip/it83xx/ec2i.c5
-rw-r--r--chip/it83xx/uart.c46
-rw-r--r--include/config.h3
6 files changed, 90 insertions, 6 deletions
diff --git a/board/it8380dev/board.c b/board/it8380dev/board.c
index bf0edee14d..1223e01c65 100644
--- a/board/it8380dev/board.c
+++ b/board/it8380dev/board.c
@@ -144,6 +144,29 @@ const struct ec2i_t pnpcfg_settings[] = {
{HOST_INDEX_DSLDC5, P80L_P80LE},
/* P80L Current Index */
{HOST_INDEX_DSLDC6, P80L_P80LC},
+#ifdef CONFIG_UART_HOST
+ /* Select logical device 2h(UART2) */
+ {HOST_INDEX_LDN, LDN_UART2},
+ /*
+ * I/O port base address is 2F8h.
+ * Host can use LPC I/O port 0x2F8 ~ 0x2FF to access UART2.
+ * See specification 7.24.4 for more detial.
+ */
+ {HOST_INDEX_IOBAD0_MSB, 0x02},
+ {HOST_INDEX_IOBAD0_LSB, 0xF8},
+ /* IRQ number is 3 */
+ {HOST_INDEX_IRQNUMX, 0x03},
+ /*
+ * Interrupt Request Type Select
+ * bit1, 0: IRQ request is buffered and applied to SERIRQ.
+ * 1: IRQ request is inverted before being applied to SERIRQ.
+ * bit0, 0: Edge triggered mode.
+ * 1: Level triggered mode.
+ */
+ {HOST_INDEX_IRQTP, 0x02},
+ /* Enable logical device */
+ {HOST_INDEX_LDA, 0x01},
+#endif
};
BUILD_ASSERT(ARRAY_SIZE(pnpcfg_settings) == EC2I_SETTING_COUNT);
diff --git a/board/it8380dev/board.h b/board/it8380dev/board.h
index b477ed9c3d..13db5ed5e9 100644
--- a/board/it8380dev/board.h
+++ b/board/it8380dev/board.h
@@ -21,6 +21,7 @@
#define CONFIG_POWER_BUTTON
/* Use CS0 of SSPI */
#define CONFIG_SPI_FLASH_PORT 0
+#define CONFIG_UART_HOST
/* Optional console commands */
#define CONFIG_CMD_FLASH
@@ -94,6 +95,14 @@ enum ec2i_setting {
EC2I_SET_RTCT_P80LB,
EC2I_SET_RTCT_P80LE,
EC2I_SET_RTCT_P80LC,
+#ifdef CONFIG_UART_HOST
+ EC2I_SET_UART2_LDN,
+ EC2I_SET_UART2_IO_BASE_MSB,
+ EC2I_SET_UART2_IO_BASE_LSB,
+ EC2I_SET_UART2_IRQ,
+ EC2I_SET_UART2_IRQ_TYPE,
+ EC2I_SET_UART2_ENABLE,
+#endif
/* Number of EC2I settings */
EC2I_SETTING_COUNT
};
diff --git a/board/it8380dev/gpio.inc b/board/it8380dev/gpio.inc
index 319ef54206..282fa6fe52 100644
--- a/board/it8380dev/gpio.inc
+++ b/board/it8380dev/gpio.inc
@@ -30,10 +30,18 @@ GPIO(I2C_C_SCL, PIN(F, 6), GPIO_INPUT)
#endif
GPIO(I2C_C_SDA, PIN(F, 7), GPIO_INPUT)
+#ifdef CONFIG_UART_HOST
+GPIO(UART2_SIN1, PIN(H, 1), GPIO_INPUT)
+GPIO(UART2_SOUT1, PIN(H, 2), GPIO_INPUT)
+#endif
+
/* Unimplemented signals which we need to emulate for now */
UNIMPLEMENTED(ENTERING_RW)
-ALTERNATE(PIN_MASK(B, 0x03), 1, MODULE_UART, GPIO_PULL_UP) /* UART0 */
+ALTERNATE(PIN_MASK(B, 0x03), 1, MODULE_UART, GPIO_PULL_UP) /* UART1 */
+#ifdef CONFIG_UART_HOST
+ALTERNATE(PIN_MASK(H, 0x06), 1, MODULE_UART, 0) /* UART2 */
+#endif
ALTERNATE(PIN_MASK(A, 0x40), 3, MODULE_SPI, 0) /* SSCK of SPI */
ALTERNATE(PIN_MASK(C, 0x28), 3, MODULE_SPI, 0) /* SMOSI/SMISO of SPI */
ALTERNATE(PIN_MASK(G, 0x01), 3, MODULE_SPI, 0) /* SSCE1# of SPI */
diff --git a/chip/it83xx/ec2i.c b/chip/it83xx/ec2i.c
index 210aad7d25..05266bec1b 100644
--- a/chip/it83xx/ec2i.c
+++ b/chip/it83xx/ec2i.c
@@ -59,8 +59,13 @@ static void ec2i_ec_access_disable(void)
/* Diable EC to I-Bus access. */
IT83XX_EC2I_IBCTL &= ~0x01;
+#ifdef CONFIG_IT83XX_PNPCFG_HOST_ACCESS
/* Enable host access */
IT83XX_EC2I_LSIOHA &= ~0x03;
+#else
+ /* Host access is disabled */
+ IT83XX_EC2I_LSIOHA &= ~0x02;
+#endif
}
/* EC2I write */
diff --git a/chip/it83xx/uart.c b/chip/it83xx/uart.c
index 80227c34ae..550672804a 100644
--- a/chip/it83xx/uart.c
+++ b/chip/it83xx/uart.c
@@ -15,8 +15,9 @@
#include "uart.h"
#include "util.h"
-/* Traces on UART0 */
-#define UART_PORT 0
+/* Traces on UART1 */
+#define UART_PORT 0
+#define UART_PORT_HOST 1
static int init_done;
@@ -151,21 +152,56 @@ static void uart_config(void)
IT83XX_UART_MCR(UART_PORT) = 0x08;
}
+#ifdef CONFIG_UART_HOST
+static void host_uart_config(void)
+{
+ /*
+ * Specify clock source of the UART is 24MHz,
+ * must match CLK_UART_DIV_SEL.
+ */
+ IT83XX_UART_CSSR(UART_PORT_HOST) = 0x01;
+ /* 8-N-1 and DLAB set to allow access to DLL and DLM registers. */
+ IT83XX_UART_LCR(UART_PORT_HOST) = 0x83;
+ /* Set divisor to set baud rate to 115200 */
+ IT83XX_UART_DLM(UART_PORT_HOST) = 0x00;
+ IT83XX_UART_DLL(UART_PORT_HOST) = 0x01;
+ /*
+ * Clear DLAB bit to exclude access to DLL and DLM and give access to
+ * RBR and THR.
+ */
+ IT83XX_UART_LCR(UART_PORT_HOST) = 0x03;
+ /*
+ * Enable TX and RX FIFOs and set RX FIFO interrupt level to the
+ * minimum 1 byte.
+ */
+ IT83XX_UART_FCR(UART_PORT_HOST) = 0x07;
+}
+#endif
+
void uart_init(void)
{
/* Waiting for when we can use the GPIO module to set pin muxing */
gpio_config_module(MODULE_UART, 1);
- /* switch UART0 on without hardware flow control */
- IT83XX_GPIO_GRC1 = 0x01;
+ /* switch UART1 on without hardware flow control */
+ IT83XX_GPIO_GRC1 |= 0x01;
IT83XX_GPIO_GRC6 |= 0x03;
/* Enable clocks to UART 1 and 2. */
clock_enable_peripheral(CGC_OFFSET_UART, 0, 0);
- /* Config UART 0 only for now. */
+ /* Config UART 1 */
uart_config();
+#ifdef CONFIG_UART_HOST
+ /* bit2, reset UART2 */
+ IT83XX_GCTRL_RSTC4 |= (1 << 2);
+ /* SIN1/SOUT1 of UART 2 is enabled. */
+ IT83XX_GPIO_GRC1 |= (1 << 2);
+ /* Config UART 2 */
+ host_uart_config();
+#endif
+
/* clear interrupt status */
task_clear_pending_irq(IT83XX_IRQ_UART1);
diff --git a/include/config.h b/include/config.h
index 56bdbb0cd9..8cb9af0e79 100644
--- a/include/config.h
+++ b/include/config.h
@@ -1058,6 +1058,9 @@
/* Interrupt for PECI module. (IT839X series and IT838X DX only) */
#undef CONFIG_IT83XX_PECI_WITH_INTERRUPT
+/* Allow the host access to the PNPCFG registers */
+#undef CONFIG_IT83XX_PNPCFG_HOST_ACCESS
+
/* To define it, if I2C channel C and PECI used at the same time. */
#undef CONFIG_IT83XX_SMCLK2_ON_GPC7