2 * MPC5200 PSC serial console support.
4 * Author: Grant Likely <grant.likely@secretlab.ca>
6 * Copyright (c) 2007 Secret Lab Technologies Ltd.
7 * Copyright (c) 2007 Freescale Semiconductor, Inc.
9 * It is assumed that the firmware (or the platform file) has already set
17 /* Programmable Serial Controller (PSC) status register bits */
18 #define MPC52xx_PSC_SR 0x04
19 #define MPC52xx_PSC_SR_RXRDY 0x0100
20 #define MPC52xx_PSC_SR_RXFULL 0x0200
21 #define MPC52xx_PSC_SR_TXRDY 0x0400
22 #define MPC52xx_PSC_SR_TXEMP 0x0800
24 #define MPC52xx_PSC_BUFFER 0x0C
28 static int psc_open(void)
30 /* Assume the firmware has already configured the PSC into
35 static void psc_putc(unsigned char c
)
37 while (!(in_be16(psc
+ MPC52xx_PSC_SR
) & MPC52xx_PSC_SR_TXRDY
)) ;
38 out_8(psc
+ MPC52xx_PSC_BUFFER
, c
);
41 static unsigned char psc_tstc(void)
43 return (in_be16(psc
+ MPC52xx_PSC_SR
) & MPC52xx_PSC_SR_RXRDY
) != 0;
46 static unsigned char psc_getc(void)
48 while (!(in_be16(psc
+ MPC52xx_PSC_SR
) & MPC52xx_PSC_SR_RXRDY
)) ;
49 return in_8(psc
+ MPC52xx_PSC_BUFFER
);
52 int mpc5200_psc_console_init(void *devp
, struct serial_console_data
*scdp
)
54 /* Get the base address of the psc registers */
55 if (dt_get_virtual_reg(devp
, &psc
, 1) < 1)
58 scdp
->open
= psc_open
;
59 scdp
->putc
= psc_putc
;
60 scdp
->getc
= psc_getc
;
61 scdp
->tstc
= psc_tstc
;