Changeset c882505 in mainline for kernel/genarch/src/drivers/pl011/pl011.c
- Timestamp:
- 2013-03-26T17:44:16Z (11 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 44b2b78
- Parents:
- 0dfa93b0
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
kernel/genarch/src/drivers/pl011/pl011.c
r0dfa93b0 rc882505 32 32 /** 33 33 * @file 34 * @brief PL011 on-chip UART (PrimeCell UART, PL011)driver.34 * @brief ARM PrimeCell PL011 UART driver. 35 35 */ 36 36 37 #include <genarch/drivers/ bcm2835/pl011_uart.h>37 #include <genarch/drivers/pl011/pl011.h> 38 38 #include <console/chardev.h> 39 39 #include <console/console.h> … … 94 94 } 95 95 96 bool pl011_uart_init(pl011_uart_t *uart, inr_t interrupt, uintptr_t addr , size_t size)96 bool pl011_uart_init(pl011_uart_t *uart, inr_t interrupt, uintptr_t addr) 97 97 { 98 98 ASSERT(uart); 99 uart->regs = (void*)km_map(addr, size , PAGE_NOT_CACHEABLE);100 99 uart->regs = (void*)km_map(addr, sizeof(pl011_uart_regs_t), 100 PAGE_NOT_CACHEABLE); 101 101 ASSERT(uart->regs); 102 102 103 uart->regs->control = 0; 104 uart->regs->interrupt_clear = 0x7f; 105 uart->regs->int_baud_divisor = 1; 106 uart->regs->fract_baud_divisor = 40; 107 uart->regs->line_control_high = PL011_UART_CONTROLHI_FEN_FLAG | 108 (3 << PL011_UART_CONTROLHI_WLEN_SHIFT); 103 /* Disable UART */ 104 uart->regs->control &= ~ PL011_UART_CONTROL_UARTEN_FLAG; 109 105 110 /* Enable TX and RX */ 111 uart->regs->control = 0 | 106 /* Enable hw flow control */ 107 uart->regs->control |= 108 PL011_UART_CONTROL_RTSE_FLAG | 109 PL011_UART_CONTROL_CTSE_FLAG; 110 111 /* Mask all interrupts */ 112 uart->regs->interrupt_mask = 0; 113 /* Clear interrupts */ 114 uart->regs->interrupt_clear = PL011_UART_INTERRUPT_ALL; 115 /* Enable UART, TX and RX */ 116 uart->regs->control |= 112 117 PL011_UART_CONTROL_UARTEN_FLAG | 113 118 PL011_UART_CONTROL_TXE_FLAG | 114 119 PL011_UART_CONTROL_RXE_FLAG; 115 116 /* Mask all interrupts */117 uart->regs->interrupt_mask = 0;118 120 119 121 outdev_initialize("pl011_uart_dev", &uart->outdev, &pl011_uart_ops); … … 127 129 uart->irq.handler = pl011_uart_irq_handler; 128 130 uart->irq.instance = uart; 131 129 132 return true; 130 133 } … … 137 140 uart->indev = indev; 138 141 irq_register(&uart->irq); 139 /* Enable receive interrupt */ 140 uart->regs->interrupt_mask |= (PL011_UART_INTERRUPT_RX_FLAG | 141 PL011_UART_INTERRUPT_RT_FLAG); 142 /* Enable receive interrupts */ 143 uart->regs->interrupt_mask |= 144 PL011_UART_INTERRUPT_RX_FLAG | 145 PL011_UART_INTERRUPT_RT_FLAG; 142 146 } 143 147
Note:
See TracChangeset
for help on using the changeset viewer.