Ignore:
Timestamp:
2013-03-26T17:44:16Z (11 years ago)
Author:
Beniamino Galvani <b.galvani@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
44b2b78
Parents:
0dfa93b0
Message:

Merge arm926 and bcm2835 drivers for pl011 uart and move the code
under a generic directory

File:
1 moved

Legend:

Unmodified
Added
Removed
  • kernel/genarch/src/drivers/pl011/pl011.c

    r0dfa93b0 rc882505  
    3232/**
    3333 * @file
    34  * @brief PL011 on-chip UART (PrimeCell UART, PL011) driver.
     34 * @brief ARM PrimeCell PL011 UART driver.
    3535 */
    3636
    37 #include <genarch/drivers/bcm2835/pl011_uart.h>
     37#include <genarch/drivers/pl011/pl011.h>
    3838#include <console/chardev.h>
    3939#include <console/console.h>
     
    9494}
    9595
    96 bool pl011_uart_init(pl011_uart_t *uart, inr_t interrupt, uintptr_t addr, size_t size)
     96bool pl011_uart_init(pl011_uart_t *uart, inr_t interrupt, uintptr_t addr)
    9797{
    9898        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);
    101101        ASSERT(uart->regs);
    102102
    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;
    109105
    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 |=
    112117                PL011_UART_CONTROL_UARTEN_FLAG |
    113118                PL011_UART_CONTROL_TXE_FLAG |
    114119                PL011_UART_CONTROL_RXE_FLAG;
    115 
    116         /* Mask all interrupts */
    117         uart->regs->interrupt_mask = 0;
    118120
    119121        outdev_initialize("pl011_uart_dev", &uart->outdev, &pl011_uart_ops);
     
    127129        uart->irq.handler = pl011_uart_irq_handler;
    128130        uart->irq.instance = uart;
     131
    129132        return true;
    130133}
     
    137140        uart->indev = indev;
    138141        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;
    142146}
    143147
Note: See TracChangeset for help on using the changeset viewer.