1de7a768cSXiaoxu Zeng /* SPDX-License-Identifier: BSD-2-Clause */ 2de7a768cSXiaoxu Zeng /* 3de7a768cSXiaoxu Zeng * Copyright (c) 2022, HiSilicon Limited 4de7a768cSXiaoxu Zeng */ 5de7a768cSXiaoxu Zeng 6*fbe66cf8SEtienne Carriere #ifndef __DRIVERS_LPC_UART_H 7*fbe66cf8SEtienne Carriere #define __DRIVERS_LPC_UART_H 8de7a768cSXiaoxu Zeng 9de7a768cSXiaoxu Zeng #include <types_ext.h> 10de7a768cSXiaoxu Zeng #include <drivers/serial.h> 11de7a768cSXiaoxu Zeng 12de7a768cSXiaoxu Zeng #define UART_SEND_LOOP_MAX 1000000 13de7a768cSXiaoxu Zeng #define UART_THR 0x00 14de7a768cSXiaoxu Zeng #define UART_LSR 0x05 15de7a768cSXiaoxu Zeng 16de7a768cSXiaoxu Zeng #define UART_USR_BUS 0x01 17de7a768cSXiaoxu Zeng 18de7a768cSXiaoxu Zeng #define LPC_BASE 0x201190000 19de7a768cSXiaoxu Zeng #define LPC_SIZE 0x1000000 20de7a768cSXiaoxu Zeng 21de7a768cSXiaoxu Zeng #define LPC_START_REG_OFFSET (0x00) 22de7a768cSXiaoxu Zeng #define LPC_OP_STATUS_REG_OFFSET (0x04) 23de7a768cSXiaoxu Zeng #define LPC_IRQ_ST_REG_OFFSET (0x08) 24de7a768cSXiaoxu Zeng #define LPC_OP_LEN_REG_OFFSET (0x10) 25de7a768cSXiaoxu Zeng #define LPC_CMD_REG_OFFSET (0x14) 26de7a768cSXiaoxu Zeng #define LPC_FWH_ID_MSIZE_REG_OFFSET (0x18) 27de7a768cSXiaoxu Zeng #define LPC_ADDR_REG_OFFSET (0x20) 28de7a768cSXiaoxu Zeng #define LPC_WDATA_REG_OFFSET (0x24) 29de7a768cSXiaoxu Zeng #define LPC_RDATA_REG_OFFSET (0x28) 30de7a768cSXiaoxu Zeng #define LPC_LONG_CNT_REG_OFFSET (0x30) 31de7a768cSXiaoxu Zeng #define LPC_TX_FIFO_ST_REG_OFFSET (0x50) 32de7a768cSXiaoxu Zeng #define LPC_RX_FIFO_ST_REG_OFFSET (0x54) 33de7a768cSXiaoxu Zeng #define LPC_TIME_OUT_REG_OFFSET (0x58) 34de7a768cSXiaoxu Zeng #define LPC_SIRQ_CTRL0_REG_OFFSET (0x80) 35de7a768cSXiaoxu Zeng #define LPC_SIRQ_CTRL1_REG_OFFSET (0x84) 36de7a768cSXiaoxu Zeng #define LPC_SIRQ_INT_REG_OFFSET (0x90) 37de7a768cSXiaoxu Zeng #define LPC_SIRQ_INT_MASK_REG_OFFSET (0x94) 38de7a768cSXiaoxu Zeng #define LPC_SIRQ_STAT_REG_OFFSET (0xa0) 39de7a768cSXiaoxu Zeng 40de7a768cSXiaoxu Zeng #define LPC_SINGLE_READ (0x8) 41de7a768cSXiaoxu Zeng #define LPC_SINGLE_WRITE (0x9) 42de7a768cSXiaoxu Zeng #define LPC_IRQ_ST_ON (0x2) 43de7a768cSXiaoxu Zeng #define LPC_RADTA_LEN (0x40) 44de7a768cSXiaoxu Zeng 45de7a768cSXiaoxu Zeng struct lpc_uart_data { 46de7a768cSXiaoxu Zeng struct io_pa_va base; 47de7a768cSXiaoxu Zeng struct serial_chip chip; 48de7a768cSXiaoxu Zeng }; 49de7a768cSXiaoxu Zeng 50de7a768cSXiaoxu Zeng void lpc_uart_init(struct lpc_uart_data *pd, paddr_t base, 51de7a768cSXiaoxu Zeng uint32_t uart_clk, uint32_t baud_rate); 52de7a768cSXiaoxu Zeng 53*fbe66cf8SEtienne Carriere #endif /* __DRIVERS_LPC_UART_H */ 54