Blackfin: serial: convert to bfin_{read,write} helpers

Since the serial struct declares the sizes for us, no need to hardcode
them in the accessor functions.  Let the bfin_{read,write} helpers do
it for us.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
Mike Frysinger 2011-06-06 16:47:31 -04:00
parent 4150cec335
commit b1e574d95b
3 changed files with 19 additions and 17 deletions

View File

@ -19,6 +19,8 @@
#include <asm/mach-common/bits/pll.h> #include <asm/mach-common/bits/pll.h>
#include <asm/mach-common/bits/uart.h> #include <asm/mach-common/bits/uart.h>
#define BUG() while (1) { asm volatile("emuexcpt;"); }
#include "serial.h" #include "serial.h"
__attribute__((always_inline)) __attribute__((always_inline))

View File

@ -63,7 +63,7 @@ static size_t cache_count;
static uint16_t uart_lsr_save; static uint16_t uart_lsr_save;
static uint16_t uart_lsr_read(uint32_t uart_base) static uint16_t uart_lsr_read(uint32_t uart_base)
{ {
uint16_t lsr = bfin_read16(&pUART->lsr); uint16_t lsr = bfin_read(&pUART->lsr);
uart_lsr_save |= (lsr & (OE|PE|FE|BI)); uart_lsr_save |= (lsr & (OE|PE|FE|BI));
return lsr | uart_lsr_save; return lsr | uart_lsr_save;
} }
@ -71,7 +71,7 @@ static uint16_t uart_lsr_read(uint32_t uart_base)
static void uart_lsr_clear(uint32_t uart_base) static void uart_lsr_clear(uint32_t uart_base)
{ {
uart_lsr_save = 0; uart_lsr_save = 0;
bfin_write16(&pUART->lsr, bfin_read16(&pUART->lsr) | -1); bfin_write(&pUART->lsr, bfin_read(&pUART->lsr) | -1);
} }
#else #else
/* When debugging is disabled, we only care about the DR bit, so if other /* When debugging is disabled, we only care about the DR bit, so if other
@ -80,11 +80,11 @@ static void uart_lsr_clear(uint32_t uart_base)
*/ */
static inline uint16_t uart_lsr_read(uint32_t uart_base) static inline uint16_t uart_lsr_read(uint32_t uart_base)
{ {
return bfin_read16(&pUART->lsr); return bfin_read(&pUART->lsr);
} }
static void uart_lsr_clear(uint32_t uart_base) static void uart_lsr_clear(uint32_t uart_base)
{ {
bfin_write16(&pUART->lsr, bfin_read16(&pUART->lsr) | -1); bfin_write(&pUART->lsr, bfin_read(&pUART->lsr) | -1);
} }
#endif #endif
@ -101,7 +101,7 @@ static void uart_putc(uint32_t uart_base, const char c)
continue; continue;
/* queue the character for transmission */ /* queue the character for transmission */
bfin_write16(&pUART->thr, c); bfin_write(&pUART->thr, c);
SSYNC(); SSYNC();
WATCHDOG_RESET(); WATCHDOG_RESET();
@ -122,7 +122,7 @@ static int uart_getc(uint32_t uart_base)
continue; continue;
/* grab the new byte */ /* grab the new byte */
uart_rbr_val = bfin_read16(&pUART->rbr); uart_rbr_val = bfin_read(&pUART->rbr);
#ifdef CONFIG_DEBUG_SERIAL #ifdef CONFIG_DEBUG_SERIAL
/* grab & clear the LSR */ /* grab & clear the LSR */
@ -136,8 +136,8 @@ static int uart_getc(uint32_t uart_base)
uint16_t dll, dlh; uint16_t dll, dlh;
printf("\n[SERIAL ERROR]\n"); printf("\n[SERIAL ERROR]\n");
ACCESS_LATCH(); ACCESS_LATCH();
dll = bfin_read16(&pUART->dll); dll = bfin_read(&pUART->dll);
dlh = bfin_read16(&pUART->dlh); dlh = bfin_read(&pUART->dlh);
ACCESS_PORT_IER(); ACCESS_PORT_IER();
printf("\tDLL=0x%x DLH=0x%x\n", dll, dlh); printf("\tDLL=0x%x DLH=0x%x\n", dll, dlh);
do { do {

View File

@ -101,9 +101,9 @@ struct bfin_mmr_serial {
# define ACCESS_PORT_IER() # define ACCESS_PORT_IER()
#else #else
# define ACCESS_LATCH() \ # define ACCESS_LATCH() \
bfin_write16(&pUART->lcr, bfin_read16(&pUART->lcr) | DLAB) bfin_write(&pUART->lcr, bfin_read(&pUART->lcr) | DLAB)
# define ACCESS_PORT_IER() \ # define ACCESS_PORT_IER() \
bfin_write16(&pUART->lcr, bfin_read16(&pUART->lcr) & ~DLAB) bfin_write(&pUART->lcr, bfin_read(&pUART->lcr) & ~DLAB)
#endif #endif
__attribute__((always_inline)) __attribute__((always_inline))
@ -173,10 +173,10 @@ __attribute__((always_inline))
static inline int uart_init(uint32_t uart_base) static inline int uart_init(uint32_t uart_base)
{ {
/* always enable UART -- avoids anomalies 05000309 and 05000350 */ /* always enable UART -- avoids anomalies 05000309 and 05000350 */
bfin_write16(&pUART->gctl, UCEN); bfin_write(&pUART->gctl, UCEN);
/* Set LCR to Word Lengh 8-bit word select */ /* Set LCR to Word Lengh 8-bit word select */
bfin_write16(&pUART->lcr, WLS_8); bfin_write(&pUART->lcr, WLS_8);
SSYNC(); SSYNC();
@ -196,7 +196,7 @@ __attribute__((always_inline))
static inline int serial_early_uninit(uint32_t uart_base) static inline int serial_early_uninit(uint32_t uart_base)
{ {
/* disable the UART by clearing UCEN */ /* disable the UART by clearing UCEN */
bfin_write16(&pUART->gctl, 0); bfin_write(&pUART->gctl, 0);
return 0; return 0;
} }
@ -209,8 +209,8 @@ static inline void serial_early_put_div(uint32_t uart_base, uint16_t divisor)
SSYNC(); SSYNC();
/* Program the divisor to get the baud rate we want */ /* Program the divisor to get the baud rate we want */
bfin_write16(&pUART->dll, LOB(divisor)); bfin_write(&pUART->dll, LOB(divisor));
bfin_write16(&pUART->dlh, HIB(divisor)); bfin_write(&pUART->dlh, HIB(divisor));
SSYNC(); SSYNC();
/* Clear DLAB in LCR to Access THR RBR IER */ /* Clear DLAB in LCR to Access THR RBR IER */
@ -227,8 +227,8 @@ static inline uint16_t serial_early_get_div(void)
ACCESS_LATCH(); ACCESS_LATCH();
SSYNC(); SSYNC();
uint8_t dll = bfin_read16(&pUART->dll); uint8_t dll = bfin_read(&pUART->dll);
uint8_t dlh = bfin_read16(&pUART->dlh); uint8_t dlh = bfin_read(&pUART->dlh);
uint16_t divisor = (dlh << 8) | dll; uint16_t divisor = (dlh << 8) | dll;
/* Clear DLAB in LCR to Access THR RBR IER */ /* Clear DLAB in LCR to Access THR RBR IER */