omap4-common.c revision fbc9be106e9f27450ea999da74bc24fad04cf41d
1470decc613ab2048b619a01028072d932d9086eeDave Kleikamp/* 2470decc613ab2048b619a01028072d932d9086eeDave Kleikamp * OMAP4 specific common source file. 3470decc613ab2048b619a01028072d932d9086eeDave Kleikamp * 4470decc613ab2048b619a01028072d932d9086eeDave Kleikamp * Copyright (C) 2010 Texas Instruments, Inc. 5470decc613ab2048b619a01028072d932d9086eeDave Kleikamp * Author: 6470decc613ab2048b619a01028072d932d9086eeDave Kleikamp * Santosh Shilimkar <santosh.shilimkar@ti.com> 7470decc613ab2048b619a01028072d932d9086eeDave Kleikamp * 8470decc613ab2048b619a01028072d932d9086eeDave Kleikamp * 9470decc613ab2048b619a01028072d932d9086eeDave Kleikamp * This program is free software,you can redistribute it and/or modify 10470decc613ab2048b619a01028072d932d9086eeDave Kleikamp * it under the terms of the GNU General Public License version 2 as 11470decc613ab2048b619a01028072d932d9086eeDave Kleikamp * published by the Free Software Foundation. 12470decc613ab2048b619a01028072d932d9086eeDave Kleikamp */ 13470decc613ab2048b619a01028072d932d9086eeDave Kleikamp 14470decc613ab2048b619a01028072d932d9086eeDave Kleikamp#include <linux/kernel.h> 15470decc613ab2048b619a01028072d932d9086eeDave Kleikamp#include <linux/init.h> 16470decc613ab2048b619a01028072d932d9086eeDave Kleikamp#include <linux/io.h> 17470decc613ab2048b619a01028072d932d9086eeDave Kleikamp#include <linux/platform_device.h> 18470decc613ab2048b619a01028072d932d9086eeDave Kleikamp 19470decc613ab2048b619a01028072d932d9086eeDave Kleikamp#include <asm/hardware/gic.h> 20470decc613ab2048b619a01028072d932d9086eeDave Kleikamp#include <asm/hardware/cache-l2x0.h> 21470decc613ab2048b619a01028072d932d9086eeDave Kleikamp 22470decc613ab2048b619a01028072d932d9086eeDave Kleikamp#include <mach/hardware.h> 23470decc613ab2048b619a01028072d932d9086eeDave Kleikamp#include <mach/omap4-common.h> 24470decc613ab2048b619a01028072d932d9086eeDave Kleikamp 25470decc613ab2048b619a01028072d932d9086eeDave Kleikamp#ifdef CONFIG_CACHE_L2X0 26470decc613ab2048b619a01028072d932d9086eeDave Kleikampvoid __iomem *l2cache_base; 27470decc613ab2048b619a01028072d932d9086eeDave Kleikamp#endif 28470decc613ab2048b619a01028072d932d9086eeDave Kleikamp 29470decc613ab2048b619a01028072d932d9086eeDave Kleikampvoid __iomem *gic_cpu_base_addr; 30470decc613ab2048b619a01028072d932d9086eeDave Kleikampvoid __iomem *gic_dist_base_addr; 31470decc613ab2048b619a01028072d932d9086eeDave Kleikamp 32470decc613ab2048b619a01028072d932d9086eeDave Kleikamp 33470decc613ab2048b619a01028072d932d9086eeDave Kleikampvoid __init gic_init_irq(void) 34470decc613ab2048b619a01028072d932d9086eeDave Kleikamp{ 35470decc613ab2048b619a01028072d932d9086eeDave Kleikamp /* Static mapping, never released */ 36470decc613ab2048b619a01028072d932d9086eeDave Kleikamp gic_dist_base_addr = ioremap(OMAP44XX_GIC_DIST_BASE, SZ_4K); 37470decc613ab2048b619a01028072d932d9086eeDave Kleikamp BUG_ON(!gic_dist_base_addr); 38470decc613ab2048b619a01028072d932d9086eeDave Kleikamp gic_dist_init(0, gic_dist_base_addr, 29); 39470decc613ab2048b619a01028072d932d9086eeDave Kleikamp 40470decc613ab2048b619a01028072d932d9086eeDave Kleikamp /* Static mapping, never released */ 41470decc613ab2048b619a01028072d932d9086eeDave Kleikamp gic_cpu_base_addr = ioremap(OMAP44XX_GIC_CPU_BASE, SZ_512); 42470decc613ab2048b619a01028072d932d9086eeDave Kleikamp BUG_ON(!gic_cpu_base_addr); 43470decc613ab2048b619a01028072d932d9086eeDave Kleikamp gic_cpu_init(0, gic_cpu_base_addr); 44470decc613ab2048b619a01028072d932d9086eeDave Kleikamp} 45470decc613ab2048b619a01028072d932d9086eeDave Kleikamp 46470decc613ab2048b619a01028072d932d9086eeDave Kleikamp#ifdef CONFIG_CACHE_L2X0 47470decc613ab2048b619a01028072d932d9086eeDave Kleikampstatic int __init omap_l2_cache_init(void) 48470decc613ab2048b619a01028072d932d9086eeDave Kleikamp{ 49470decc613ab2048b619a01028072d932d9086eeDave Kleikamp /* 50470decc613ab2048b619a01028072d932d9086eeDave Kleikamp * To avoid code running on other OMAPs in 51470decc613ab2048b619a01028072d932d9086eeDave Kleikamp * multi-omap builds 52470decc613ab2048b619a01028072d932d9086eeDave Kleikamp */ 53470decc613ab2048b619a01028072d932d9086eeDave Kleikamp if (!cpu_is_omap44xx()) 54470decc613ab2048b619a01028072d932d9086eeDave Kleikamp return -ENODEV; 55470decc613ab2048b619a01028072d932d9086eeDave Kleikamp 56470decc613ab2048b619a01028072d932d9086eeDave Kleikamp /* Static mapping, never released */ 57470decc613ab2048b619a01028072d932d9086eeDave Kleikamp l2cache_base = ioremap(OMAP44XX_L2CACHE_BASE, SZ_4K); 58470decc613ab2048b619a01028072d932d9086eeDave Kleikamp BUG_ON(!l2cache_base); 59470decc613ab2048b619a01028072d932d9086eeDave Kleikamp 60470decc613ab2048b619a01028072d932d9086eeDave Kleikamp /* Enable PL310 L2 Cache controller */ 61470decc613ab2048b619a01028072d932d9086eeDave Kleikamp omap_smc1(0x102, 0x1); 62470decc613ab2048b619a01028072d932d9086eeDave Kleikamp 63470decc613ab2048b619a01028072d932d9086eeDave Kleikamp /* 64470decc613ab2048b619a01028072d932d9086eeDave Kleikamp * 32KB way size, 16-way associativity, 65470decc613ab2048b619a01028072d932d9086eeDave Kleikamp * parity disabled 66470decc613ab2048b619a01028072d932d9086eeDave Kleikamp */ 67470decc613ab2048b619a01028072d932d9086eeDave Kleikamp l2x0_init(l2cache_base, 0x0e050000, 0xc0000fff); 68470decc613ab2048b619a01028072d932d9086eeDave Kleikamp 69470decc613ab2048b619a01028072d932d9086eeDave Kleikamp return 0; 70470decc613ab2048b619a01028072d932d9086eeDave Kleikamp} 71470decc613ab2048b619a01028072d932d9086eeDave Kleikampearly_initcall(omap_l2_cache_init); 72470decc613ab2048b619a01028072d932d9086eeDave Kleikamp#endif 73470decc613ab2048b619a01028072d932d9086eeDave Kleikamp