root/arch/powerpc/boot/mpc52xx-psc.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. psc_open
  2. psc_putc
  3. psc_tstc
  4. psc_getc
  5. mpc5200_psc_console_init

   1 // SPDX-License-Identifier: GPL-2.0
   2 /*
   3  * MPC5200 PSC serial console support.
   4  *
   5  * Author: Grant Likely <grant.likely@secretlab.ca>
   6  *
   7  * Copyright (c) 2007 Secret Lab Technologies Ltd.
   8  * Copyright (c) 2007 Freescale Semiconductor, Inc.
   9  *
  10  * It is assumed that the firmware (or the platform file) has already set
  11  * up the port.
  12  */
  13 
  14 #include "types.h"
  15 #include "io.h"
  16 #include "ops.h"
  17 
  18 /* Programmable Serial Controller (PSC) status register bits */
  19 #define MPC52xx_PSC_SR          0x04
  20 #define MPC52xx_PSC_SR_RXRDY            0x0100
  21 #define MPC52xx_PSC_SR_RXFULL           0x0200
  22 #define MPC52xx_PSC_SR_TXRDY            0x0400
  23 #define MPC52xx_PSC_SR_TXEMP            0x0800
  24 
  25 #define MPC52xx_PSC_BUFFER      0x0C
  26 
  27 static void *psc;
  28 
  29 static int psc_open(void)
  30 {
  31         /* Assume the firmware has already configured the PSC into
  32          * uart mode */
  33         return 0;
  34 }
  35 
  36 static void psc_putc(unsigned char c)
  37 {
  38         while (!(in_be16(psc + MPC52xx_PSC_SR) & MPC52xx_PSC_SR_TXRDY)) ;
  39         out_8(psc + MPC52xx_PSC_BUFFER, c);
  40 }
  41 
  42 static unsigned char psc_tstc(void)
  43 {
  44         return (in_be16(psc + MPC52xx_PSC_SR) & MPC52xx_PSC_SR_RXRDY) != 0;
  45 }
  46 
  47 static unsigned char psc_getc(void)
  48 {
  49         while (!(in_be16(psc + MPC52xx_PSC_SR) & MPC52xx_PSC_SR_RXRDY)) ;
  50         return in_8(psc + MPC52xx_PSC_BUFFER);
  51 }
  52 
  53 int mpc5200_psc_console_init(void *devp, struct serial_console_data *scdp)
  54 {
  55         /* Get the base address of the psc registers */
  56         if (dt_get_virtual_reg(devp, &psc, 1) < 1)
  57                 return -1;
  58 
  59         scdp->open = psc_open;
  60         scdp->putc = psc_putc;
  61         scdp->getc = psc_getc;
  62         scdp->tstc = psc_tstc;
  63 
  64         return 0;
  65 }

/* [<][>][^][v][top][bottom][index][help] */