linux/arch/arm/mach-omap1/io.c
<<
>>
Prefs
   1/*
   2 * linux/arch/arm/mach-omap1/io.c
   3 *
   4 * OMAP1 I/O mapping code
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 as
   8 * published by the Free Software Foundation.
   9 */
  10
  11#include <linux/module.h>
  12#include <linux/kernel.h>
  13#include <linux/init.h>
  14#include <linux/io.h>
  15
  16#include <asm/tlb.h>
  17#include <asm/mach/map.h>
  18#include <plat/mux.h>
  19#include <plat/tc.h>
  20
  21#include "clock.h"
  22
  23extern void omap_check_revision(void);
  24
  25/*
  26 * The machine specific code may provide the extra mapping besides the
  27 * default mapping provided here.
  28 */
  29static struct map_desc omap_io_desc[] __initdata = {
  30        {
  31                .virtual        = OMAP1_IO_VIRT,
  32                .pfn            = __phys_to_pfn(OMAP1_IO_PHYS),
  33                .length         = OMAP1_IO_SIZE,
  34                .type           = MT_DEVICE
  35        }
  36};
  37
  38#if defined (CONFIG_ARCH_OMAP730) || defined (CONFIG_ARCH_OMAP850)
  39static struct map_desc omap7xx_io_desc[] __initdata = {
  40        {
  41                .virtual        = OMAP7XX_DSP_BASE,
  42                .pfn            = __phys_to_pfn(OMAP7XX_DSP_START),
  43                .length         = OMAP7XX_DSP_SIZE,
  44                .type           = MT_DEVICE
  45        }, {
  46                .virtual        = OMAP7XX_DSPREG_BASE,
  47                .pfn            = __phys_to_pfn(OMAP7XX_DSPREG_START),
  48                .length         = OMAP7XX_DSPREG_SIZE,
  49                .type           = MT_DEVICE
  50        }
  51};
  52#endif
  53
  54#ifdef CONFIG_ARCH_OMAP15XX
  55static struct map_desc omap1510_io_desc[] __initdata = {
  56        {
  57                .virtual        = OMAP1510_DSP_BASE,
  58                .pfn            = __phys_to_pfn(OMAP1510_DSP_START),
  59                .length         = OMAP1510_DSP_SIZE,
  60                .type           = MT_DEVICE
  61        }, {
  62                .virtual        = OMAP1510_DSPREG_BASE,
  63                .pfn            = __phys_to_pfn(OMAP1510_DSPREG_START),
  64                .length         = OMAP1510_DSPREG_SIZE,
  65                .type           = MT_DEVICE
  66        }
  67};
  68#endif
  69
  70#if defined(CONFIG_ARCH_OMAP16XX)
  71static struct map_desc omap16xx_io_desc[] __initdata = {
  72        {
  73                .virtual        = OMAP16XX_DSP_BASE,
  74                .pfn            = __phys_to_pfn(OMAP16XX_DSP_START),
  75                .length         = OMAP16XX_DSP_SIZE,
  76                .type           = MT_DEVICE
  77        }, {
  78                .virtual        = OMAP16XX_DSPREG_BASE,
  79                .pfn            = __phys_to_pfn(OMAP16XX_DSPREG_START),
  80                .length         = OMAP16XX_DSPREG_SIZE,
  81                .type           = MT_DEVICE
  82        }
  83};
  84#endif
  85
  86/*
  87 * Maps common IO regions for omap1
  88 */
  89static void __init omap1_map_common_io(void)
  90{
  91        iotable_init(omap_io_desc, ARRAY_SIZE(omap_io_desc));
  92}
  93
  94#if defined (CONFIG_ARCH_OMAP730) || defined (CONFIG_ARCH_OMAP850)
  95void __init omap7xx_map_io(void)
  96{
  97        omap1_map_common_io();
  98        iotable_init(omap7xx_io_desc, ARRAY_SIZE(omap7xx_io_desc));
  99}
 100#endif
 101
 102#ifdef CONFIG_ARCH_OMAP15XX
 103void __init omap15xx_map_io(void)
 104{
 105        omap1_map_common_io();
 106        iotable_init(omap1510_io_desc, ARRAY_SIZE(omap1510_io_desc));
 107}
 108#endif
 109
 110#if defined(CONFIG_ARCH_OMAP16XX)
 111void __init omap16xx_map_io(void)
 112{
 113        omap1_map_common_io();
 114        iotable_init(omap16xx_io_desc, ARRAY_SIZE(omap16xx_io_desc));
 115}
 116#endif
 117
 118/*
 119 * Common low-level hardware init for omap1.
 120 */
 121void omap1_init_early(void)
 122{
 123        omap_check_revision();
 124        omap_ioremap_init();
 125
 126        /* REVISIT: Refer to OMAP5910 Errata, Advisory SYS_1: "Timeout Abort
 127         * on a Posted Write in the TIPB Bridge".
 128         */
 129        omap_writew(0x0, MPU_PUBLIC_TIPB_CNTL);
 130        omap_writew(0x0, MPU_PRIVATE_TIPB_CNTL);
 131
 132        /* Must init clocks early to assure that timer interrupt works
 133         */
 134        omap1_clk_init();
 135        omap1_mux_init();
 136        omap_init_consistent_dma_size();
 137}
 138
 139/*
 140 * NOTE: Please use ioremap + __raw_read/write where possible instead of these
 141 */
 142
 143u8 omap_readb(u32 pa)
 144{
 145        return __raw_readb(OMAP1_IO_ADDRESS(pa));
 146}
 147EXPORT_SYMBOL(omap_readb);
 148
 149u16 omap_readw(u32 pa)
 150{
 151        return __raw_readw(OMAP1_IO_ADDRESS(pa));
 152}
 153EXPORT_SYMBOL(omap_readw);
 154
 155u32 omap_readl(u32 pa)
 156{
 157        return __raw_readl(OMAP1_IO_ADDRESS(pa));
 158}
 159EXPORT_SYMBOL(omap_readl);
 160
 161void omap_writeb(u8 v, u32 pa)
 162{
 163        __raw_writeb(v, OMAP1_IO_ADDRESS(pa));
 164}
 165EXPORT_SYMBOL(omap_writeb);
 166
 167void omap_writew(u16 v, u32 pa)
 168{
 169        __raw_writew(v, OMAP1_IO_ADDRESS(pa));
 170}
 171EXPORT_SYMBOL(omap_writew);
 172
 173void omap_writel(u32 v, u32 pa)
 174{
 175        __raw_writel(v, OMAP1_IO_ADDRESS(pa));
 176}
 177EXPORT_SYMBOL(omap_writel);
 178
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.