summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chip/mec1322/lpc.c19
-rw-r--r--util/comm-mec1322.c12
2 files changed, 19 insertions, 12 deletions
diff --git a/chip/mec1322/lpc.c b/chip/mec1322/lpc.c
index 7974940e34..2e76b6c39e 100644
--- a/chip/mec1322/lpc.c
+++ b/chip/mec1322/lpc.c
@@ -12,6 +12,7 @@
#include "host_command.h"
#include "keyboard_protocol.h"
#include "lpc.h"
+#include "port80.h"
#include "registers.h"
#include "task.h"
#include "timer.h"
@@ -186,16 +187,16 @@ static void setup_lpc(void)
/* TODO(crosbug.com/p/24107): Route KIRQ to SER_IRQ1 */
- /* Set up EMI module for memory mapped region.
- * TODO(crosbug.com/p/24107): Use LPC memory transaction for this
- * when we have updated info of memory BAR
- * register.
- */
- MEC1322_LPC_EMI_BAR = 0x0800800f;
+ /* Set up EMI module for memory mapped region and port 80 */
+ MEC1322_LPC_EMI_BAR = 0x0080800f;
MEC1322_EMI_MBA0 = ptr;
MEC1322_EMI_MRL0 = 0x200;
MEC1322_EMI_MWL0 = 0x100;
+ MEC1322_INT_ENABLE(15) |= 1 << 2;
+ MEC1322_INT_BLK_EN |= 1 << 15;
+ task_enable_irq(MEC1322_IRQ_EMI);
+
/* We support LPC args and version 3 protocol */
*(lpc_get_memmap_range() + EC_MEMMAP_HOST_CMD_FLAGS) =
EC_HOST_CMD_FLAG_LPC_ARGS_SUPPORTED |
@@ -224,6 +225,12 @@ static void lpc_init(void)
*/
DECLARE_HOOK(HOOK_INIT, lpc_init, HOOK_PRIO_INIT_LPC);
+static void emi_interrupt(void)
+{
+ port_80_write(MEC1322_EMI_H2E_MBX);
+}
+DECLARE_IRQ(MEC1322_IRQ_EMI, emi_interrupt, 1);
+
static void acpi_0_interrupt(void)
{
uint8_t value, result, is_cmd;
diff --git a/util/comm-mec1322.c b/util/comm-mec1322.c
index d4b2c3ad00..dcbcb503bb 100644
--- a/util/comm-mec1322.c
+++ b/util/comm-mec1322.c
@@ -50,19 +50,19 @@ static int wait_for_ec(int status_addr, int timeout_usec)
static void write_memmap(uint8_t b, uint16_t addr)
{
addr -= 0x800;
- outb(addr & 0xfc, 0x802);
- outb((addr >> 8) & 0x7f, 0x803);
+ outb(addr & 0xfc, 0x82);
+ outb((addr >> 8) & 0x7f, 0x83);
usleep(500);
- outb(b, 0x804 + (addr & 0x3));
+ outb(b, 0x84 + (addr & 0x3));
}
static uint8_t read_memmap(uint16_t addr)
{
addr -= 0x800;
- outb(addr & 0xfc, 0x802);
- outb((addr >> 8) & 0x7f, 0x803);
+ outb(addr & 0xfc, 0x82);
+ outb((addr >> 8) & 0x7f, 0x83);
usleep(500);
- return inb(0x804 + (addr & 0x3));
+ return inb(0x84 + (addr & 0x3));
}
static void send_byte(uint8_t b, uint16_t addr)