Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.25-rc7 69 lines 1.6 kB view raw
1/* 2 * MPC5200 PSC serial console support. 3 * 4 * Author: Grant Likely <grant.likely@secretlab.ca> 5 * 6 * Copyright (c) 2007 Secret Lab Technologies Ltd. 7 * Copyright (c) 2007 Freescale Semiconductor, Inc. 8 * 9 * It is assumed that the firmware (or the platform file) has already set 10 * up the port. 11 */ 12 13#include "types.h" 14#include "io.h" 15#include "ops.h" 16 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 23 24#define MPC52xx_PSC_BUFFER 0x0C 25 26static void *psc; 27 28static int psc_open(void) 29{ 30 /* Assume the firmware has already configured the PSC into 31 * uart mode */ 32 return 0; 33} 34 35static void psc_putc(unsigned char c) 36{ 37 while (!(in_be16(psc + MPC52xx_PSC_SR) & MPC52xx_PSC_SR_TXRDY)) ; 38 out_8(psc + MPC52xx_PSC_BUFFER, c); 39} 40 41static unsigned char psc_tstc(void) 42{ 43 return (in_be16(psc + MPC52xx_PSC_SR) & MPC52xx_PSC_SR_RXRDY) != 0; 44} 45 46static unsigned char psc_getc(void) 47{ 48 while (!(in_be16(psc + MPC52xx_PSC_SR) & MPC52xx_PSC_SR_RXRDY)) ; 49 return in_8(psc + MPC52xx_PSC_BUFFER); 50} 51 52int mpc5200_psc_console_init(void *devp, struct serial_console_data *scdp) 53{ 54 int n; 55 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)) 60 return -1; 61 } 62 63 scdp->open = psc_open; 64 scdp->putc = psc_putc; 65 scdp->getc = psc_getc; 66 scdp->tstc = psc_tstc; 67 68 return 0; 69}