162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * linux/arch/arm/mach-omap1/io.c 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * OMAP1 I/O mapping code 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#include <linux/module.h> 962306a36Sopenharmony_ci#include <linux/kernel.h> 1062306a36Sopenharmony_ci#include <linux/init.h> 1162306a36Sopenharmony_ci#include <linux/io.h> 1262306a36Sopenharmony_ci#include <linux/omap-dma.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#include <asm/tlb.h> 1562306a36Sopenharmony_ci#include <asm/mach/map.h> 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#include "tc.h" 1862306a36Sopenharmony_ci#include "iomap.h" 1962306a36Sopenharmony_ci#include "common.h" 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci/* 2262306a36Sopenharmony_ci * The machine specific code may provide the extra mapping besides the 2362306a36Sopenharmony_ci * default mapping provided here. 2462306a36Sopenharmony_ci */ 2562306a36Sopenharmony_cistatic struct map_desc omap1_io_desc[] __initdata = { 2662306a36Sopenharmony_ci { 2762306a36Sopenharmony_ci .virtual = OMAP1_IO_VIRT, 2862306a36Sopenharmony_ci .pfn = __phys_to_pfn(OMAP1_IO_PHYS), 2962306a36Sopenharmony_ci .length = OMAP1_IO_SIZE, 3062306a36Sopenharmony_ci .type = MT_DEVICE 3162306a36Sopenharmony_ci }, { 3262306a36Sopenharmony_ci .virtual = OMAP1_DSP_BASE, 3362306a36Sopenharmony_ci .pfn = __phys_to_pfn(OMAP1_DSP_START), 3462306a36Sopenharmony_ci .length = OMAP1_DSP_SIZE, 3562306a36Sopenharmony_ci .type = MT_DEVICE 3662306a36Sopenharmony_ci }, { 3762306a36Sopenharmony_ci .virtual = OMAP1_DSPREG_BASE, 3862306a36Sopenharmony_ci .pfn = __phys_to_pfn(OMAP1_DSPREG_START), 3962306a36Sopenharmony_ci .length = OMAP1_DSPREG_SIZE, 4062306a36Sopenharmony_ci .type = MT_DEVICE 4162306a36Sopenharmony_ci } 4262306a36Sopenharmony_ci}; 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci/* 4562306a36Sopenharmony_ci * Maps common IO regions for omap1 4662306a36Sopenharmony_ci */ 4762306a36Sopenharmony_civoid __init omap1_map_io(void) 4862306a36Sopenharmony_ci{ 4962306a36Sopenharmony_ci iotable_init(omap1_io_desc, ARRAY_SIZE(omap1_io_desc)); 5062306a36Sopenharmony_ci} 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci/* 5362306a36Sopenharmony_ci * Common low-level hardware init for omap1. 5462306a36Sopenharmony_ci */ 5562306a36Sopenharmony_civoid __init omap1_init_early(void) 5662306a36Sopenharmony_ci{ 5762306a36Sopenharmony_ci omap_check_revision(); 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci /* REVISIT: Refer to OMAP5910 Errata, Advisory SYS_1: "Timeout Abort 6062306a36Sopenharmony_ci * on a Posted Write in the TIPB Bridge". 6162306a36Sopenharmony_ci */ 6262306a36Sopenharmony_ci omap_writew(0x0, MPU_PUBLIC_TIPB_CNTL); 6362306a36Sopenharmony_ci omap_writew(0x0, MPU_PRIVATE_TIPB_CNTL); 6462306a36Sopenharmony_ci} 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_civoid __init omap1_init_late(void) 6762306a36Sopenharmony_ci{ 6862306a36Sopenharmony_ci omap_serial_wakeup_init(); 6962306a36Sopenharmony_ci} 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci/* 7262306a36Sopenharmony_ci * NOTE: Please use ioremap + __raw_read/write where possible instead of these 7362306a36Sopenharmony_ci */ 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ciu8 omap_readb(u32 pa) 7662306a36Sopenharmony_ci{ 7762306a36Sopenharmony_ci return __raw_readb(OMAP1_IO_ADDRESS(pa)); 7862306a36Sopenharmony_ci} 7962306a36Sopenharmony_ciEXPORT_SYMBOL(omap_readb); 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ciu16 omap_readw(u32 pa) 8262306a36Sopenharmony_ci{ 8362306a36Sopenharmony_ci return __raw_readw(OMAP1_IO_ADDRESS(pa)); 8462306a36Sopenharmony_ci} 8562306a36Sopenharmony_ciEXPORT_SYMBOL(omap_readw); 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ciu32 omap_readl(u32 pa) 8862306a36Sopenharmony_ci{ 8962306a36Sopenharmony_ci return __raw_readl(OMAP1_IO_ADDRESS(pa)); 9062306a36Sopenharmony_ci} 9162306a36Sopenharmony_ciEXPORT_SYMBOL(omap_readl); 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_civoid omap_writeb(u8 v, u32 pa) 9462306a36Sopenharmony_ci{ 9562306a36Sopenharmony_ci __raw_writeb(v, OMAP1_IO_ADDRESS(pa)); 9662306a36Sopenharmony_ci} 9762306a36Sopenharmony_ciEXPORT_SYMBOL(omap_writeb); 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_civoid omap_writew(u16 v, u32 pa) 10062306a36Sopenharmony_ci{ 10162306a36Sopenharmony_ci __raw_writew(v, OMAP1_IO_ADDRESS(pa)); 10262306a36Sopenharmony_ci} 10362306a36Sopenharmony_ciEXPORT_SYMBOL(omap_writew); 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_civoid omap_writel(u32 v, u32 pa) 10662306a36Sopenharmony_ci{ 10762306a36Sopenharmony_ci __raw_writel(v, OMAP1_IO_ADDRESS(pa)); 10862306a36Sopenharmony_ci} 10962306a36Sopenharmony_ciEXPORT_SYMBOL(omap_writel); 110