Path: blob/master/arch/arm/mach-exynos4/dev-sysmmu.c
10817 views
/* linux/arch/arm/mach-exynos4/dev-sysmmu.c1*2* Copyright (c) 2010 Samsung Electronics Co., Ltd.3* http://www.samsung.com4*5* EXYNOS4 - System MMU support6*7* This program is free software; you can redistribute it and/or modify8* it under the terms of the GNU General Public License version 2 as9* published by the Free Software Foundation.10*/1112#include <linux/platform_device.h>13#include <linux/dma-mapping.h>1415#include <mach/map.h>16#include <mach/irqs.h>17#include <mach/sysmmu.h>18#include <plat/s5p-clock.h>1920/* These names must be equal to the clock names in mach-exynos4/clock.c */21const char *sysmmu_ips_name[EXYNOS4_SYSMMU_TOTAL_IPNUM] = {22"SYSMMU_MDMA" ,23"SYSMMU_SSS" ,24"SYSMMU_FIMC0" ,25"SYSMMU_FIMC1" ,26"SYSMMU_FIMC2" ,27"SYSMMU_FIMC3" ,28"SYSMMU_JPEG" ,29"SYSMMU_FIMD0" ,30"SYSMMU_FIMD1" ,31"SYSMMU_PCIe" ,32"SYSMMU_G2D" ,33"SYSMMU_ROTATOR",34"SYSMMU_MDMA2" ,35"SYSMMU_TV" ,36"SYSMMU_MFC_L" ,37"SYSMMU_MFC_R" ,38};3940static struct resource exynos4_sysmmu_resource[] = {41[0] = {42.start = EXYNOS4_PA_SYSMMU_MDMA,43.end = EXYNOS4_PA_SYSMMU_MDMA + SZ_64K - 1,44.flags = IORESOURCE_MEM,45},46[1] = {47.start = IRQ_SYSMMU_MDMA0_0,48.end = IRQ_SYSMMU_MDMA0_0,49.flags = IORESOURCE_IRQ,50},51[2] = {52.start = EXYNOS4_PA_SYSMMU_SSS,53.end = EXYNOS4_PA_SYSMMU_SSS + SZ_64K - 1,54.flags = IORESOURCE_MEM,55},56[3] = {57.start = IRQ_SYSMMU_SSS_0,58.end = IRQ_SYSMMU_SSS_0,59.flags = IORESOURCE_IRQ,60},61[4] = {62.start = EXYNOS4_PA_SYSMMU_FIMC0,63.end = EXYNOS4_PA_SYSMMU_FIMC0 + SZ_64K - 1,64.flags = IORESOURCE_MEM,65},66[5] = {67.start = IRQ_SYSMMU_FIMC0_0,68.end = IRQ_SYSMMU_FIMC0_0,69.flags = IORESOURCE_IRQ,70},71[6] = {72.start = EXYNOS4_PA_SYSMMU_FIMC1,73.end = EXYNOS4_PA_SYSMMU_FIMC1 + SZ_64K - 1,74.flags = IORESOURCE_MEM,75},76[7] = {77.start = IRQ_SYSMMU_FIMC1_0,78.end = IRQ_SYSMMU_FIMC1_0,79.flags = IORESOURCE_IRQ,80},81[8] = {82.start = EXYNOS4_PA_SYSMMU_FIMC2,83.end = EXYNOS4_PA_SYSMMU_FIMC2 + SZ_64K - 1,84.flags = IORESOURCE_MEM,85},86[9] = {87.start = IRQ_SYSMMU_FIMC2_0,88.end = IRQ_SYSMMU_FIMC2_0,89.flags = IORESOURCE_IRQ,90},91[10] = {92.start = EXYNOS4_PA_SYSMMU_FIMC3,93.end = EXYNOS4_PA_SYSMMU_FIMC3 + SZ_64K - 1,94.flags = IORESOURCE_MEM,95},96[11] = {97.start = IRQ_SYSMMU_FIMC3_0,98.end = IRQ_SYSMMU_FIMC3_0,99.flags = IORESOURCE_IRQ,100},101[12] = {102.start = EXYNOS4_PA_SYSMMU_JPEG,103.end = EXYNOS4_PA_SYSMMU_JPEG + SZ_64K - 1,104.flags = IORESOURCE_MEM,105},106[13] = {107.start = IRQ_SYSMMU_JPEG_0,108.end = IRQ_SYSMMU_JPEG_0,109.flags = IORESOURCE_IRQ,110},111[14] = {112.start = EXYNOS4_PA_SYSMMU_FIMD0,113.end = EXYNOS4_PA_SYSMMU_FIMD0 + SZ_64K - 1,114.flags = IORESOURCE_MEM,115},116[15] = {117.start = IRQ_SYSMMU_LCD0_M0_0,118.end = IRQ_SYSMMU_LCD0_M0_0,119.flags = IORESOURCE_IRQ,120},121[16] = {122.start = EXYNOS4_PA_SYSMMU_FIMD1,123.end = EXYNOS4_PA_SYSMMU_FIMD1 + SZ_64K - 1,124.flags = IORESOURCE_MEM,125},126[17] = {127.start = IRQ_SYSMMU_LCD1_M1_0,128.end = IRQ_SYSMMU_LCD1_M1_0,129.flags = IORESOURCE_IRQ,130},131[18] = {132.start = EXYNOS4_PA_SYSMMU_PCIe,133.end = EXYNOS4_PA_SYSMMU_PCIe + SZ_64K - 1,134.flags = IORESOURCE_MEM,135},136[19] = {137.start = IRQ_SYSMMU_PCIE_0,138.end = IRQ_SYSMMU_PCIE_0,139.flags = IORESOURCE_IRQ,140},141[20] = {142.start = EXYNOS4_PA_SYSMMU_G2D,143.end = EXYNOS4_PA_SYSMMU_G2D + SZ_64K - 1,144.flags = IORESOURCE_MEM,145},146[21] = {147.start = IRQ_SYSMMU_2D_0,148.end = IRQ_SYSMMU_2D_0,149.flags = IORESOURCE_IRQ,150},151[22] = {152.start = EXYNOS4_PA_SYSMMU_ROTATOR,153.end = EXYNOS4_PA_SYSMMU_ROTATOR + SZ_64K - 1,154.flags = IORESOURCE_MEM,155},156[23] = {157.start = IRQ_SYSMMU_ROTATOR_0,158.end = IRQ_SYSMMU_ROTATOR_0,159.flags = IORESOURCE_IRQ,160},161[24] = {162.start = EXYNOS4_PA_SYSMMU_MDMA2,163.end = EXYNOS4_PA_SYSMMU_MDMA2 + SZ_64K - 1,164.flags = IORESOURCE_MEM,165},166[25] = {167.start = IRQ_SYSMMU_MDMA1_0,168.end = IRQ_SYSMMU_MDMA1_0,169.flags = IORESOURCE_IRQ,170},171[26] = {172.start = EXYNOS4_PA_SYSMMU_TV,173.end = EXYNOS4_PA_SYSMMU_TV + SZ_64K - 1,174.flags = IORESOURCE_MEM,175},176[27] = {177.start = IRQ_SYSMMU_TV_M0_0,178.end = IRQ_SYSMMU_TV_M0_0,179.flags = IORESOURCE_IRQ,180},181[28] = {182.start = EXYNOS4_PA_SYSMMU_MFC_L,183.end = EXYNOS4_PA_SYSMMU_MFC_L + SZ_64K - 1,184.flags = IORESOURCE_MEM,185},186[29] = {187.start = IRQ_SYSMMU_MFC_M0_0,188.end = IRQ_SYSMMU_MFC_M0_0,189.flags = IORESOURCE_IRQ,190},191[30] = {192.start = EXYNOS4_PA_SYSMMU_MFC_R,193.end = EXYNOS4_PA_SYSMMU_MFC_R + SZ_64K - 1,194.flags = IORESOURCE_MEM,195},196[31] = {197.start = IRQ_SYSMMU_MFC_M1_0,198.end = IRQ_SYSMMU_MFC_M1_0,199.flags = IORESOURCE_IRQ,200},201};202203struct platform_device exynos4_device_sysmmu = {204.name = "s5p-sysmmu",205.id = 32,206.num_resources = ARRAY_SIZE(exynos4_sysmmu_resource),207.resource = exynos4_sysmmu_resource,208};209EXPORT_SYMBOL(exynos4_device_sysmmu);210211static struct clk *sysmmu_clk[S5P_SYSMMU_TOTAL_IPNUM];212void sysmmu_clk_init(struct device *dev, sysmmu_ips ips)213{214sysmmu_clk[ips] = clk_get(dev, sysmmu_ips_name[ips]);215if (IS_ERR(sysmmu_clk[ips]))216sysmmu_clk[ips] = NULL;217else218clk_put(sysmmu_clk[ips]);219}220221void sysmmu_clk_enable(sysmmu_ips ips)222{223if (sysmmu_clk[ips])224clk_enable(sysmmu_clk[ips]);225}226227void sysmmu_clk_disable(sysmmu_ips ips)228{229if (sysmmu_clk[ips])230clk_disable(sysmmu_clk[ips]);231}232233234