linux/arch/arm/mach-davinci/include/mach/uncompress.h
<<
>>
Prefs
   1/*
   2 * Serial port stubs for kernel decompress status messages
   3 *
   4 * Initially based on:
   5 * arch/arm/plat-omap/include/mach/uncompress.h
   6 *
   7 * Original copyrights follow.
   8 *
   9 * Copyright (C) 2000 RidgeRun, Inc.
  10 * Author: Greg Lonnon <glonnon@ridgerun.com>
  11 *
  12 * Rewritten by:
  13 * Author: <source@mvista.com>
  14 * 2004 (c) MontaVista Software, Inc.
  15 *
  16 * This file is licensed under the terms of the GNU General Public License
  17 * version 2. This program is licensed "as is" without any warranty of any
  18 * kind, whether express or implied.
  19 */
  20
  21#include <linux/types.h>
  22#include <linux/serial_reg.h>
  23
  24#include <asm/mach-types.h>
  25
  26#include <mach/serial.h>
  27
  28#define IOMEM(x)        ((void __force __iomem *)(x))
  29
  30u32 *uart;
  31
  32/* PORT_16C550A, in polled non-fifo mode */
  33static inline void putc(char c)
  34{
  35        if (!uart)
  36                return;
  37
  38        while (!(uart[UART_LSR] & UART_LSR_THRE))
  39                barrier();
  40        uart[UART_TX] = c;
  41}
  42
  43static inline void flush(void)
  44{
  45        if (!uart)
  46                return;
  47
  48        while (!(uart[UART_LSR] & UART_LSR_THRE))
  49                barrier();
  50}
  51
  52static inline void set_uart_info(u32 phys)
  53{
  54        uart = (u32 *)phys;
  55}
  56
  57#define _DEBUG_LL_ENTRY(machine, phys)                          \
  58        {                                                       \
  59                if (machine_is_##machine()) {                   \
  60                        set_uart_info(phys);                    \
  61                        break;                                  \
  62                }                                               \
  63        }
  64
  65#define DEBUG_LL_DAVINCI(machine, port)                         \
  66        _DEBUG_LL_ENTRY(machine, DAVINCI_UART##port##_BASE)
  67
  68#define DEBUG_LL_DA8XX(machine, port)                           \
  69        _DEBUG_LL_ENTRY(machine, DA8XX_UART##port##_BASE)
  70
  71static inline void __arch_decomp_setup(unsigned long arch_id)
  72{
  73        /*
  74         * Initialize the port based on the machine ID from the bootloader.
  75         * Note that we're using macros here instead of switch statement
  76         * as machine_is functions are optimized out for the boards that
  77         * are not selected.
  78         */
  79        do {
  80                /* Davinci boards */
  81                DEBUG_LL_DAVINCI(davinci_evm,           0);
  82                DEBUG_LL_DAVINCI(sffsdr,                0);
  83                DEBUG_LL_DAVINCI(neuros_osd2,           0);
  84                DEBUG_LL_DAVINCI(davinci_dm355_evm,     0);
  85                DEBUG_LL_DAVINCI(dm355_leopard,         0);
  86                DEBUG_LL_DAVINCI(davinci_dm6467_evm,    0);
  87                DEBUG_LL_DAVINCI(davinci_dm365_evm,     0);
  88
  89                /* DA8xx boards */
  90                DEBUG_LL_DA8XX(davinci_da830_evm,       2);
  91                DEBUG_LL_DA8XX(davinci_da850_evm,       2);
  92                DEBUG_LL_DA8XX(mityomapl138,            1);
  93                DEBUG_LL_DA8XX(omapl138_hawkboard,      2);
  94        } while (0);
  95}
  96
  97#define arch_decomp_setup()     __arch_decomp_setup(arch_id)
  98