coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
pl011.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <device/mmio.h>
4 #include <boot/coreboot_tables.h>
5 #include <console/uart.h>
6 #include <drivers/uart/pl011.h>
7 
8 void uart_init(unsigned int idx)
9 {
10 }
11 
12 void uart_tx_byte(unsigned int idx, unsigned char data)
13 {
14  struct pl011_uart *regs = uart_platform_baseptr(idx);
15 
16  write8(&regs->dr, data);
17  uart_tx_flush(idx);
18 }
19 
20 void uart_tx_flush(unsigned int idx)
21 {
22  struct pl011_uart *regs = uart_platform_baseptr(idx);
23 
24  /* FIXME: add a timeout */
25  while (!(read32(&regs->fr) & PL011_UARTFR_TXFE))
26  ;
27 }
28 
29 unsigned char uart_rx_byte(unsigned int idx)
30 {
31  struct pl011_uart *regs = uart_platform_baseptr(idx);
32 
33  while (read32(&regs->fr) & PL011_UARTFR_RXFE)
34  ;
35  return read8(&regs->dr);
36 }
37 
38 void uart_fill_lb(void *data)
39 {
40  struct lb_serial serial;
42  serial.baseaddr = uart_platform_base(CONFIG_UART_FOR_CONSOLE);
43  serial.baud = get_uart_baudrate();
44  serial.regwidth = 1;
45  serial.input_hertz = uart_platform_refclk();
46  serial.uart_pci_addr = CONFIG_UART_PCI_ADDR;
47  lb_add_serial(&serial, data);
48 
50 }
static void write8(void *addr, uint8_t val)
Definition: mmio.h:30
static uint32_t read32(const void *addr)
Definition: mmio.h:22
static uint8_t read8(const void *addr)
Definition: mmio.h:12
unsigned int get_uart_baudrate(void)
Definition: bmcinfo.c:167
#define LB_TAG_CONSOLE_SERIAL8250MEM
#define LB_SERIAL_TYPE_MEMORY_MAPPED
void lb_add_console(uint16_t consoletype, void *data)
void lb_add_serial(struct lb_serial *serial, void *data)
static void * uart_platform_baseptr(unsigned int idx)
Definition: uart.h:57
unsigned int serial
Definition: edid.c:52
uintptr_t uart_platform_base(unsigned int idx)
Definition: oxpcie_early.c:58
unsigned int uart_platform_refclk(void)
Definition: oxpcie_early.c:72
void uart_init(unsigned int idx)
Definition: pl011.c:8
void uart_tx_flush(unsigned int idx)
Definition: pl011.c:20
unsigned char uart_rx_byte(unsigned int idx)
Definition: pl011.c:29
void uart_fill_lb(void *data)
Definition: pl011.c:38
void uart_tx_byte(unsigned int idx, unsigned char data)
Definition: pl011.c:12
#define PL011_UARTFR_RXFE
Definition: pl011.h:46
#define PL011_UARTFR_TXFE
Definition: pl011.h:43