cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

io.c (3555B)


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