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
)
56 /* Get the base address of the psc registers */
57 n
= getprop(devp
, "virtual-reg", &psc
, sizeof(psc
));
58 if (n
!= sizeof(psc
)) {
59 if (!dt_xlate_reg(devp
, 0, (void *)&psc
, NULL
))
63 scdp
->open
= psc_open
;
64 scdp
->putc
= psc_putc
;
65 scdp
->getc
= psc_getc
;
66 scdp
->tstc
= psc_tstc
;