static void lpc_tick(void) { /* * Make sure pending LPC interrupts have been processed. * This works around a LM4 bug where host writes sometimes * don't trigger interrupts. See crosbug.com/p/13965. */ task_trigger_irq(LM4_IRQ_LPC); }
void uart_tx_start(void) { /* If interrupt is already enabled, nothing to do */ if (GR_UART_ICTRL(0) & GC_UART_ICTRL_TX_MASK) return; /* Do not allow deep sleep while transmit in progress */ disable_sleep(SLEEP_MASK_UART); /* * Re-enable the transmit interrupt, then forcibly trigger the * interrupt. This works around a hardware problem with the * UART where the FIFO only triggers the interrupt when its * threshold is _crossed_, not just met. */ /* TODO(crosbug.com/p/33819): Do we need this hack here? Find out. */ REG_WRITE_MLV(GR_UART_ICTRL(0), GC_UART_ICTRL_TX_MASK, GC_UART_ICTRL_TX_LSB, 1); task_trigger_irq(GC_IRQNUM_UART0_TXINT); }