Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /*
0003  * MPC5200 PSC serial console support.
0004  *
0005  * Author: Grant Likely <grant.likely@secretlab.ca>
0006  *
0007  * Copyright (c) 2007 Secret Lab Technologies Ltd.
0008  * Copyright (c) 2007 Freescale Semiconductor, Inc.
0009  *
0010  * It is assumed that the firmware (or the platform file) has already set
0011  * up the port.
0012  */
0013 
0014 #include "types.h"
0015 #include "io.h"
0016 #include "ops.h"
0017 
0018 /* Programmable Serial Controller (PSC) status register bits */
0019 #define MPC52xx_PSC_SR      0x04
0020 #define MPC52xx_PSC_SR_RXRDY        0x0100
0021 #define MPC52xx_PSC_SR_RXFULL       0x0200
0022 #define MPC52xx_PSC_SR_TXRDY        0x0400
0023 #define MPC52xx_PSC_SR_TXEMP        0x0800
0024 
0025 #define MPC52xx_PSC_BUFFER  0x0C
0026 
0027 static void *psc;
0028 
0029 static int psc_open(void)
0030 {
0031     /* Assume the firmware has already configured the PSC into
0032      * uart mode */
0033     return 0;
0034 }
0035 
0036 static void psc_putc(unsigned char c)
0037 {
0038     while (!(in_be16(psc + MPC52xx_PSC_SR) & MPC52xx_PSC_SR_TXRDY)) ;
0039     out_8(psc + MPC52xx_PSC_BUFFER, c);
0040 }
0041 
0042 static unsigned char psc_tstc(void)
0043 {
0044     return (in_be16(psc + MPC52xx_PSC_SR) & MPC52xx_PSC_SR_RXRDY) != 0;
0045 }
0046 
0047 static unsigned char psc_getc(void)
0048 {
0049     while (!(in_be16(psc + MPC52xx_PSC_SR) & MPC52xx_PSC_SR_RXRDY)) ;
0050     return in_8(psc + MPC52xx_PSC_BUFFER);
0051 }
0052 
0053 int mpc5200_psc_console_init(void *devp, struct serial_console_data *scdp)
0054 {
0055     /* Get the base address of the psc registers */
0056     if (dt_get_virtual_reg(devp, &psc, 1) < 1)
0057         return -1;
0058 
0059     scdp->open = psc_open;
0060     scdp->putc = psc_putc;
0061     scdp->getc = psc_getc;
0062     scdp->tstc = psc_tstc;
0063 
0064     return 0;
0065 }