linux/arch/ppc/syslib/mv64x60_dbg.c
<<
>>
Prefs
   1/*
   2 * KGDB and progress routines for the Marvell/Galileo MV64x60 (Discovery).
   3 *
   4 * Author: Mark A. Greer <mgreer@mvista.com>
   5 *
   6 * 2003 (c) MontaVista Software, Inc.  This file is licensed under
   7 * the terms of the GNU General Public License version 2.  This program
   8 * is licensed "as is" without any warranty of any kind, whether express
   9 * or implied.
  10 */
  11
  12/*
  13 *****************************************************************************
  14 *
  15 *      Low-level MPSC/UART I/O routines
  16 *
  17 *****************************************************************************
  18 */
  19
  20
  21#include <linux/irq.h>
  22#include <asm/delay.h>
  23#include <asm/mv64x60.h>
  24#include <asm/machdep.h>
  25
  26
  27#if defined(CONFIG_SERIAL_TEXT_DEBUG)
  28
  29#define MPSC_CHR_1      0x000c
  30#define MPSC_CHR_2      0x0010
  31
  32static struct mv64x60_handle    mv64x60_dbg_bh;
  33
  34void
  35mv64x60_progress_init(u32 base)
  36{
  37        mv64x60_dbg_bh.v_base = base;
  38        return;
  39}
  40
  41static void
  42mv64x60_polled_putc(int chan, char c)
  43{
  44        u32     offset;
  45
  46        if (chan == 0)
  47                offset = 0x8000;
  48        else
  49                offset = 0x9000;
  50
  51        mv64x60_write(&mv64x60_dbg_bh, offset + MPSC_CHR_1, (u32)c);
  52        mv64x60_write(&mv64x60_dbg_bh, offset + MPSC_CHR_2, 0x200);
  53        udelay(2000);
  54}
  55
  56void
  57mv64x60_mpsc_progress(char *s, unsigned short hex)
  58{
  59        volatile char   c;
  60
  61        mv64x60_polled_putc(0, '\r');
  62
  63        while ((c = *s++) != 0)
  64                mv64x60_polled_putc(0, c);
  65
  66        mv64x60_polled_putc(0, '\n');
  67        mv64x60_polled_putc(0, '\r');
  68
  69        return;
  70}
  71#endif  /* CONFIG_SERIAL_TEXT_DEBUG */
  72
  73
  74#if defined(CONFIG_KGDB)
  75
  76#if defined(CONFIG_KGDB_TTYS0)
  77#define KGDB_PORT 0
  78#elif defined(CONFIG_KGDB_TTYS1)
  79#define KGDB_PORT 1
  80#else
  81#error "Invalid kgdb_tty port"
  82#endif
  83
  84void
  85putDebugChar(unsigned char c)
  86{
  87        mv64x60_polled_putc(KGDB_PORT, (char)c);
  88}
  89
  90int
  91getDebugChar(void)
  92{
  93        unsigned char   c;
  94
  95        while (!mv64x60_polled_getc(KGDB_PORT, &c));
  96        return (int)c;
  97}
  98
  99void
 100putDebugString(char* str)
 101{
 102        while (*str != '\0') {
 103                putDebugChar(*str);
 104                str++;
 105        }
 106        putDebugChar('\r');
 107        return;
 108}
 109
 110void
 111kgdb_interruptible(int enable)
 112{
 113}
 114
 115void
 116kgdb_map_scc(void)
 117{
 118        if (ppc_md.early_serial_map)
 119                ppc_md.early_serial_map();
 120}
 121#endif  /* CONFIG_KGDB */
 122