Hi, On 3/6/12, KyongHo Cho <pullip.cho@xxxxxxxxxxx> wrote: > Handling System MMUs with an identifier is not flexible to manage > System MMU platform devices because of the following reasons: > 1. A device driver which needs to handle System MMU must know the ID. > 2. A System MMU may not present in some implementations of Exynos family. > 3. Handling System MMU with IOMMU API does not require an ID. > > This patch is the result of removing ID of System MMUs. > Instead, a device driver that needs to handle its System MMU must > use IOMMU API while its descriptor of platform device is given. > > This patch also includes the following enhanclements: > - A System MMU device becomes a child if its power domain device. > - clkdev > > Signed-off-by: KyongHo Cho <pullip.cho@xxxxxxxxxxx> > --- > arch/arm/mach-exynos/Kconfig | 11 +- > arch/arm/mach-exynos/Makefile | 2 +- > arch/arm/mach-exynos/clock-exynos4.c | 79 ++-- > arch/arm/mach-exynos/clock-exynos4.h | 2 + > arch/arm/mach-exynos/clock-exynos4210.c | 11 + > arch/arm/mach-exynos/clock-exynos4212.c | 28 ++- > arch/arm/mach-exynos/clock-exynos5.c | 90 +++++ > arch/arm/mach-exynos/dev-sysmmu.c | 457 > ++++++++++++---------- > arch/arm/mach-exynos/include/mach/irqs.h | 179 +++++----- > arch/arm/mach-exynos/include/mach/map.h | 38 ++ > arch/arm/mach-exynos/include/mach/regs-clock.h | 5 + > arch/arm/mach-exynos/include/mach/regs-sysmmu.h | 28 -- > arch/arm/mach-exynos/include/mach/sysmmu.h | 84 +++-- > arch/arm/mach-exynos/mach-armlex4210.c | 1 - > arch/arm/mach-exynos/mach-smdkv310.c | 1 - > 15 files changed, 612 insertions(+), 404 deletions(-) > delete mode 100644 arch/arm/mach-exynos/include/mach/regs-sysmmu.h > > diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig > index c49d450..d5a6a29 100644 > --- a/arch/arm/mach-exynos/Kconfig > +++ b/arch/arm/mach-exynos/Kconfig > @@ -88,10 +88,10 @@ config EXYNOS4_SETUP_FIMD0 > help > Common setup code for FIMD0. > > -config EXYNOS4_DEV_SYSMMU > +config EXYNOS_DEV_SYSMMU > bool > help > - Common setup code for SYSTEM MMU in EXYNOS4 > + Common setup code for SYSTEM MMU in EXYNOS platforms > > config EXYNOS4_DEV_DWMCI > bool > @@ -201,12 +201,12 @@ config MACH_SMDKV310 > select S3C_DEV_HSMMC2 > select S3C_DEV_HSMMC3 > select SAMSUNG_DEV_BACKLIGHT > + select EXYNOS_DEV_SYSMMU > select EXYNOS4_DEV_AHCI > select SAMSUNG_DEV_KEYPAD > select EXYNOS4_DEV_DMA > select SAMSUNG_DEV_PWM > select EXYNOS4_DEV_USB_OHCI > - select EXYNOS4_DEV_SYSMMU > select EXYNOS4_SETUP_FIMD0 > select EXYNOS4_SETUP_I2C1 > select EXYNOS4_SETUP_KEYPAD > @@ -225,7 +225,6 @@ config MACH_ARMLEX4210 > select S3C_DEV_HSMMC3 > select EXYNOS4_DEV_AHCI > select EXYNOS4_DEV_DMA > - select EXYNOS4_DEV_SYSMMU > select EXYNOS4_SETUP_SDHCI > help > Machine support for Samsung ARMLEX4210 based on EXYNOS4210 > @@ -251,6 +250,7 @@ config MACH_UNIVERSAL_C210 > select S5P_DEV_MFC > select S5P_DEV_ONENAND > select S5P_DEV_TV > + select EXYNOS_DEV_SYSMMU > select EXYNOS4_DEV_DMA > select EXYNOS4_SETUP_FIMD0 > select EXYNOS4_SETUP_I2C1 > @@ -320,6 +320,7 @@ config MACH_ORIGEN > select S5P_DEV_USB_EHCI > select SAMSUNG_DEV_BACKLIGHT > select SAMSUNG_DEV_PWM > + select EXYNOS_DEV_SYSMMU > select EXYNOS4_DEV_DMA > select EXYNOS4_DEV_USB_OHCI > select EXYNOS4_SETUP_FIMD0 > @@ -343,6 +344,7 @@ config MACH_SMDK4212 > select SAMSUNG_DEV_BACKLIGHT > select SAMSUNG_DEV_KEYPAD > select SAMSUNG_DEV_PWM > + select EXYNOS_DEV_SYSMMU > select EXYNOS4_SETUP_I2C1 > select EXYNOS4_SETUP_I2C3 > select EXYNOS4_SETUP_I2C7 > @@ -368,6 +370,7 @@ comment "EXYNOS5250 Boards" > config MACH_SMDK5250 > bool "SMDK5250" > select SOC_EXYNOS5250 > + select EXYNOS_DEV_SYSMMU > help > Machine support for Samsung SMDK5250 > endif > diff --git a/arch/arm/mach-exynos/Makefile b/arch/arm/mach-exynos/Makefile > index 6fd8dd9..8b655e9 100644 > --- a/arch/arm/mach-exynos/Makefile > +++ b/arch/arm/mach-exynos/Makefile > @@ -52,7 +52,7 @@ obj-$(CONFIG_MACH_SMDK5250) += mach-smdk5250.o > obj-y += dev-uart.o > obj-$(CONFIG_ARCH_EXYNOS4) += dev-audio.o > obj-$(CONFIG_EXYNOS4_DEV_AHCI) += dev-ahci.o > -obj-$(CONFIG_EXYNOS4_DEV_SYSMMU) += dev-sysmmu.o > +obj-$(CONFIG_EXYNOS_DEV_SYSMMU) += dev-sysmmu.o > obj-$(CONFIG_EXYNOS4_DEV_DWMCI) += dev-dwmci.o > obj-$(CONFIG_EXYNOS4_DEV_DMA) += dma.o > obj-$(CONFIG_EXYNOS4_DEV_USB_OHCI) += dev-ohci.o > diff --git a/arch/arm/mach-exynos/clock-exynos4.c > b/arch/arm/mach-exynos/clock-exynos4.c > index d72a1fe..18c48f0 100644 > --- a/arch/arm/mach-exynos/clock-exynos4.c > +++ b/arch/arm/mach-exynos/clock-exynos4.c > @@ -169,7 +169,7 @@ static int exynos4_clk_ip_tv_ctrl(struct clk *clk, int > enable) > return s5p_gatectrl(EXYNOS4_CLKGATE_IP_TV, clk, enable); > } > > -static int exynos4_clk_ip_image_ctrl(struct clk *clk, int enable) > +int exynos4_clk_ip_image_ctrl(struct clk *clk, int enable) > { > return s5p_gatectrl(EXYNOS4_CLKGATE_IP_IMAGE, clk, enable); > } > @@ -199,6 +199,11 @@ static int exynos4_clk_ip_perir_ctrl(struct clk *clk, > int enable) > return s5p_gatectrl(EXYNOS4_CLKGATE_IP_PERIR, clk, enable); > } > > +int exynos4_clk_ip_dmc_ctrl(struct clk *clk, int enable) > +{ > + return s5p_gatectrl(EXYNOS4_CLKGATE_IP_DMC, clk, enable); > +} > + > static int exynos4_clk_hdmiphy_ctrl(struct clk *clk, int enable) > { > return s5p_gatectrl(S5P_HDMI_PHY_CONTROL, clk, enable); > @@ -679,61 +684,55 @@ static struct clk exynos4_init_clocks_off[] = { > .enable = exynos4_clk_ip_peril_ctrl, > .ctrlbit = (1 << 14), > }, { > - .name = "SYSMMU_MDMA", > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(mfc_l, 0), > + .enable = exynos4_clk_ip_mfc_ctrl, > + .ctrlbit = (1 << 1), > + }, { > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(mfc_r, 1), > + .enable = exynos4_clk_ip_mfc_ctrl, > + .ctrlbit = (1 << 2), > + }, { > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(tv, 2), > + .enable = exynos4_clk_ip_tv_ctrl, > + .ctrlbit = (1 << 4), > + }, { > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(jpeg, 3), > + .enable = exynos4_clk_ip_cam_ctrl, > + .ctrlbit = (1 << 11), > + }, { > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(rot, 4), > .enable = exynos4_clk_ip_image_ctrl, > - .ctrlbit = (1 << 5), > + .ctrlbit = (1 << 4), > }, { > - .name = "SYSMMU_FIMC0", > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(fimc0, 5), > .enable = exynos4_clk_ip_cam_ctrl, > .ctrlbit = (1 << 7), > }, { > - .name = "SYSMMU_FIMC1", > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(fimc1, 6), > .enable = exynos4_clk_ip_cam_ctrl, > .ctrlbit = (1 << 8), > }, { > - .name = "SYSMMU_FIMC2", > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(fimc2, 7), > .enable = exynos4_clk_ip_cam_ctrl, > .ctrlbit = (1 << 9), > }, { > - .name = "SYSMMU_FIMC3", > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(fimc3, 8), > .enable = exynos4_clk_ip_cam_ctrl, > .ctrlbit = (1 << 10), > }, { > - .name = "SYSMMU_JPEG", > - .enable = exynos4_clk_ip_cam_ctrl, > - .ctrlbit = (1 << 11), > - }, { > - .name = "SYSMMU_FIMD0", > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(fimd0, 10), > .enable = exynos4_clk_ip_lcd0_ctrl, > .ctrlbit = (1 << 4), > - }, { > - .name = "SYSMMU_FIMD1", > - .enable = exynos4_clk_ip_lcd1_ctrl, > - .ctrlbit = (1 << 4), > - }, { > - .name = "SYSMMU_PCIe", > - .enable = exynos4_clk_ip_fsys_ctrl, > - .ctrlbit = (1 << 18), > - }, { > - .name = "SYSMMU_G2D", > - .enable = exynos4_clk_ip_image_ctrl, > - .ctrlbit = (1 << 3), > - }, { > - .name = "SYSMMU_ROTATOR", > - .enable = exynos4_clk_ip_image_ctrl, > - .ctrlbit = (1 << 4), > - }, { > - .name = "SYSMMU_TV", > - .enable = exynos4_clk_ip_tv_ctrl, > - .ctrlbit = (1 << 4), > - }, { > - .name = "SYSMMU_MFC_L", > - .enable = exynos4_clk_ip_mfc_ctrl, > - .ctrlbit = (1 << 1), > - }, { > - .name = "SYSMMU_MFC_R", > - .enable = exynos4_clk_ip_mfc_ctrl, > - .ctrlbit = (1 << 2), > } > }; > > diff --git a/arch/arm/mach-exynos/clock-exynos4.h > b/arch/arm/mach-exynos/clock-exynos4.h > index 9d27a56..309cc71 100644 > --- a/arch/arm/mach-exynos/clock-exynos4.h > +++ b/arch/arm/mach-exynos/clock-exynos4.h > @@ -28,5 +28,7 @@ extern struct clk *exynos4_clkset_group_list[]; > extern int exynos4_clksrc_mask_fsys_ctrl(struct clk *clk, int enable); > extern int exynos4_clk_ip_fsys_ctrl(struct clk *clk, int enable); > extern int exynos4_clk_ip_lcd1_ctrl(struct clk *clk, int enable); > +extern int exynos4_clk_ip_image_ctrl(struct clk *clk, int enable); > +extern int exynos4_clk_ip_dmc_ctrl(struct clk *clk, int enable); > > #endif /* __ASM_ARCH_CLOCK_H */ > diff --git a/arch/arm/mach-exynos/clock-exynos4210.c > b/arch/arm/mach-exynos/clock-exynos4210.c > index 68763b3..c1fcd2f 100644 > --- a/arch/arm/mach-exynos/clock-exynos4210.c > +++ b/arch/arm/mach-exynos/clock-exynos4210.c > @@ -28,6 +28,7 @@ > #include <mach/hardware.h> > #include <mach/map.h> > #include <mach/regs-clock.h> > +#include <mach/sysmmu.h> > > #include "clock-exynos4.h" > #include "common.h" > @@ -96,6 +97,16 @@ static struct clk init_clocks_off[] = { > .devname = "exynos4-fb.1", > .enable = exynos4_clk_ip_lcd1_ctrl, > .ctrlbit = (1 << 0), > + }, { > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(2d, 14), > + .enable = exynos4_clk_ip_image_ctrl, > + .ctrlbit = (1 << 3), > + }, { > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(fimd1, 11), > + .enable = exynos4_clk_ip_lcd1_ctrl, > + .ctrlbit = (1 << 4), > }, > }; > > diff --git a/arch/arm/mach-exynos/clock-exynos4212.c > b/arch/arm/mach-exynos/clock-exynos4212.c > index f22a0a2..e1059a2 100644 > --- a/arch/arm/mach-exynos/clock-exynos4212.c > +++ b/arch/arm/mach-exynos/clock-exynos4212.c > @@ -28,6 +28,7 @@ > #include <mach/hardware.h> > #include <mach/map.h> > #include <mach/regs-clock.h> > +#include <mach/sysmmu.h> > > #include "clock-exynos4.h" > #include "common.h" > @@ -41,6 +42,16 @@ static struct sleep_save exynos4212_clock_save[] = { > }; > #endif > > +static int exynos4212_clk_ip_isp0_ctrl(struct clk *clk, int enable) > +{ > + return s5p_gatectrl(EXYNOS4_CLKGATE_IP_ISP0, clk, enable); > +} > + > +static int exynos4212_clk_ip_isp1_ctrl(struct clk *clk, int enable) > +{ > + return s5p_gatectrl(EXYNOS4_CLKGATE_IP_ISP1, clk, enable); > +} > + > static struct clk *clk_src_mpll_user_list[] = { > [0] = &clk_fin_mpll, > [1] = &exynos4_clk_mout_mpll.clk, > @@ -68,7 +79,22 @@ static struct clksrc_clk clksrcs[] = { > }; > > static struct clk init_clocks_off[] = { > - /* nothing here yet */ > + { > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(2d, 14), > + .enable = exynos4_clk_ip_dmc_ctrl, > + .ctrlbit = (1 << 24), > + }, { > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(isp, 9), > + .enable = exynos4212_clk_ip_isp0_ctrl, > + .ctrlbit = (7 << 8), > + }, { > + .name = SYSMMU_CLOCK_NAME2, > + .devname = SYSMMU_CLOCK_DEVNAME(isp, 9), > + .enable = exynos4212_clk_ip_isp1_ctrl, > + .ctrlbit = (1 << 4), > + } > }; > > #ifdef CONFIG_PM_SLEEP > diff --git a/arch/arm/mach-exynos/clock-exynos5.c > b/arch/arm/mach-exynos/clock-exynos5.c > index d013982..3320ad1 100644 > --- a/arch/arm/mach-exynos/clock-exynos5.c > +++ b/arch/arm/mach-exynos/clock-exynos5.c > @@ -82,6 +82,11 @@ static int exynos5_clksrc_mask_peric0_ctrl(struct clk > *clk, int enable) > return s5p_gatectrl(EXYNOS5_CLKSRC_MASK_PERIC0, clk, enable); > } > > +static int exynos5_clk_ip_acp_ctrl(struct clk *clk, int enable) > +{ > + return s5p_gatectrl(EXYNOS5_CLKGATE_IP_ACP, clk, enable); > +} > + > static int exynos5_clk_ip_core_ctrl(struct clk *clk, int enable) > { > return s5p_gatectrl(EXYNOS5_CLKGATE_IP_CORE, clk, enable); > @@ -127,6 +132,21 @@ static int exynos5_clk_ip_peris_ctrl(struct clk *clk, > int enable) > return s5p_gatectrl(EXYNOS5_CLKGATE_IP_PERIS, clk, enable); > } > > +static int exynos5_clk_ip_gscl_ctrl(struct clk *clk, int enable) > +{ > + return s5p_gatectrl(EXYNOS5_CLKGATE_IP_GSCL, clk, enable); > +} > + > +static int exynos5_clk_ip_isp0_ctrl(struct clk *clk, int enable) > +{ > + return s5p_gatectrl(EXYNOS5_CLKGATE_IP_ISP0, clk, enable); > +} > + > +static int exynos5_clk_ip_isp1_ctrl(struct clk *clk, int enable) > +{ > + return s5p_gatectrl(EXYNOS5_CLKGATE_IP_ISP1, clk, enable); > +} > + > /* Core list of CMU_CPU side */ > > static struct clksrc_clk exynos5_clk_mout_apll = { > @@ -630,6 +650,76 @@ static struct clk exynos5_init_clocks_off[] = { > .parent = &exynos5_clk_aclk_66.clk, > .enable = exynos5_clk_ip_peric_ctrl, > .ctrlbit = (1 << 14), > + }, { > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(mfc_l, 0), > + .enable = &exynos5_clk_ip_mfc_ctrl, > + .ctrlbit = (1 << 1), > + }, { > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(mfc_r, 1), > + .enable = &exynos5_clk_ip_mfc_ctrl, > + .ctrlbit = (1 << 2), > + }, { > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(tv, 2), > + .enable = &exynos5_clk_ip_disp1_ctrl, > + .ctrlbit = (1 << 9) > + }, { > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(jpeg, 3), > + .enable = &exynos5_clk_ip_gen_ctrl, > + .ctrlbit = (1 << 7), > + }, { > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(rot, 4), > + .enable = &exynos5_clk_ip_gen_ctrl, > + .ctrlbit = (1 << 6) > + }, { > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(gsc0, 5), > + .enable = &exynos5_clk_ip_gscl_ctrl, > + .ctrlbit = (1 << 7), > + }, { > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(gsc1, 6), > + .enable = &exynos5_clk_ip_gscl_ctrl, > + .ctrlbit = (1 << 8), > + }, { > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(gsc2, 7), > + .enable = &exynos5_clk_ip_gscl_ctrl, > + .ctrlbit = (1 << 9), > + }, { > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(gsc3, 8), > + .enable = &exynos5_clk_ip_gscl_ctrl, > + .ctrlbit = (1 << 10), > + }, { > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(isp, 9), > + .enable = &exynos5_clk_ip_isp0_ctrl, > + .ctrlbit = (0x3F << 8), > + }, { > + .name = SYSMMU_CLOCK_NAME2, > + .devname = SYSMMU_CLOCK_DEVNAME(isp, 9), > + .enable = &exynos5_clk_ip_isp1_ctrl, > + .ctrlbit = (0xF << 4), > + }, { > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(camif0, 12), > + .enable = &exynos5_clk_ip_gscl_ctrl, > + .ctrlbit = (1 << 11), > + }, { > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(camif1, 13), > + .enable = &exynos5_clk_ip_gscl_ctrl, > + .ctrlbit = (1 << 12), > + }, { > + .name = SYSMMU_CLOCK_NAME, > + .devname = SYSMMU_CLOCK_DEVNAME(2d, 14), > + .enable = &exynos5_clk_ip_acp_ctrl, > + .ctrlbit = (1 << 7) > } > }; > > diff --git a/arch/arm/mach-exynos/dev-sysmmu.c > b/arch/arm/mach-exynos/dev-sysmmu.c > index 781563f..c5b1ea3 100644 > --- a/arch/arm/mach-exynos/dev-sysmmu.c > +++ b/arch/arm/mach-exynos/dev-sysmmu.c > @@ -1,9 +1,9 @@ > -/* linux/arch/arm/mach-exynos4/dev-sysmmu.c > +/* linux/arch/arm/mach-exynos/dev-sysmmu.c > * > - * Copyright (c) 2010 Samsung Electronics Co., Ltd. > + * Copyright (c) 2010-2012 Samsung Electronics Co., Ltd. > * http://www.samsung.com > * > - * EXYNOS4 - System MMU support > + * EXYNOS - System MMU support > * > * This program is free software; you can redistribute it and/or modify > * it under the terms of the GNU General Public License version 2 as > @@ -12,222 +12,263 @@ > > #include <linux/platform_device.h> > #include <linux/dma-mapping.h> > -#include <linux/export.h> > + > +#include <plat/cpu.h> > > #include <mach/map.h> > #include <mach/irqs.h> > #include <mach/sysmmu.h> > -#include <plat/s5p-clock.h> > - > -/* These names must be equal to the clock names in mach-exynos4/clock.c */ > -const char *sysmmu_ips_name[EXYNOS4_SYSMMU_TOTAL_IPNUM] = { > - "SYSMMU_MDMA" , > - "SYSMMU_SSS" , > - "SYSMMU_FIMC0" , > - "SYSMMU_FIMC1" , > - "SYSMMU_FIMC2" , > - "SYSMMU_FIMC3" , > - "SYSMMU_JPEG" , > - "SYSMMU_FIMD0" , > - "SYSMMU_FIMD1" , > - "SYSMMU_PCIe" , > - "SYSMMU_G2D" , > - "SYSMMU_ROTATOR", > - "SYSMMU_MDMA2" , > - "SYSMMU_TV" , > - "SYSMMU_MFC_L" , > - "SYSMMU_MFC_R" , > -}; > > -static struct resource exynos4_sysmmu_resource[] = { > - [0] = { > - .start = EXYNOS4_PA_SYSMMU_MDMA, > - .end = EXYNOS4_PA_SYSMMU_MDMA + SZ_64K - 1, > - .flags = IORESOURCE_MEM, > - }, > - [1] = { > - .start = IRQ_SYSMMU_MDMA0_0, > - .end = IRQ_SYSMMU_MDMA0_0, > - .flags = IORESOURCE_IRQ, > - }, > - [2] = { > - .start = EXYNOS4_PA_SYSMMU_SSS, > - .end = EXYNOS4_PA_SYSMMU_SSS + SZ_64K - 1, > - .flags = IORESOURCE_MEM, > - }, > - [3] = { > - .start = IRQ_SYSMMU_SSS_0, > - .end = IRQ_SYSMMU_SSS_0, > - .flags = IORESOURCE_IRQ, > - }, > - [4] = { > - .start = EXYNOS4_PA_SYSMMU_FIMC0, > - .end = EXYNOS4_PA_SYSMMU_FIMC0 + SZ_64K - 1, > - .flags = IORESOURCE_MEM, > - }, > - [5] = { > - .start = IRQ_SYSMMU_FIMC0_0, > - .end = IRQ_SYSMMU_FIMC0_0, > - .flags = IORESOURCE_IRQ, > - }, > - [6] = { > - .start = EXYNOS4_PA_SYSMMU_FIMC1, > - .end = EXYNOS4_PA_SYSMMU_FIMC1 + SZ_64K - 1, > - .flags = IORESOURCE_MEM, > - }, > - [7] = { > - .start = IRQ_SYSMMU_FIMC1_0, > - .end = IRQ_SYSMMU_FIMC1_0, > - .flags = IORESOURCE_IRQ, > - }, > - [8] = { > - .start = EXYNOS4_PA_SYSMMU_FIMC2, > - .end = EXYNOS4_PA_SYSMMU_FIMC2 + SZ_64K - 1, > - .flags = IORESOURCE_MEM, > - }, > - [9] = { > - .start = IRQ_SYSMMU_FIMC2_0, > - .end = IRQ_SYSMMU_FIMC2_0, > - .flags = IORESOURCE_IRQ, > - }, > - [10] = { > - .start = EXYNOS4_PA_SYSMMU_FIMC3, > - .end = EXYNOS4_PA_SYSMMU_FIMC3 + SZ_64K - 1, > - .flags = IORESOURCE_MEM, > - }, > - [11] = { > - .start = IRQ_SYSMMU_FIMC3_0, > - .end = IRQ_SYSMMU_FIMC3_0, > - .flags = IORESOURCE_IRQ, > - }, > - [12] = { > - .start = EXYNOS4_PA_SYSMMU_JPEG, > - .end = EXYNOS4_PA_SYSMMU_JPEG + SZ_64K - 1, > - .flags = IORESOURCE_MEM, > - }, > - [13] = { > - .start = IRQ_SYSMMU_JPEG_0, > - .end = IRQ_SYSMMU_JPEG_0, > - .flags = IORESOURCE_IRQ, > - }, > - [14] = { > - .start = EXYNOS4_PA_SYSMMU_FIMD0, > - .end = EXYNOS4_PA_SYSMMU_FIMD0 + SZ_64K - 1, > - .flags = IORESOURCE_MEM, > - }, > - [15] = { > - .start = IRQ_SYSMMU_LCD0_M0_0, > - .end = IRQ_SYSMMU_LCD0_M0_0, > - .flags = IORESOURCE_IRQ, > - }, > - [16] = { > - .start = EXYNOS4_PA_SYSMMU_FIMD1, > - .end = EXYNOS4_PA_SYSMMU_FIMD1 + SZ_64K - 1, > - .flags = IORESOURCE_MEM, > - }, > - [17] = { > - .start = IRQ_SYSMMU_LCD1_M1_0, > - .end = IRQ_SYSMMU_LCD1_M1_0, > - .flags = IORESOURCE_IRQ, > - }, > - [18] = { > - .start = EXYNOS4_PA_SYSMMU_PCIe, > - .end = EXYNOS4_PA_SYSMMU_PCIe + SZ_64K - 1, > - .flags = IORESOURCE_MEM, > - }, > - [19] = { > - .start = IRQ_SYSMMU_PCIE_0, > - .end = IRQ_SYSMMU_PCIE_0, > - .flags = IORESOURCE_IRQ, > - }, > - [20] = { > - .start = EXYNOS4_PA_SYSMMU_G2D, > - .end = EXYNOS4_PA_SYSMMU_G2D + SZ_64K - 1, > - .flags = IORESOURCE_MEM, > - }, > - [21] = { > - .start = IRQ_SYSMMU_2D_0, > - .end = IRQ_SYSMMU_2D_0, > - .flags = IORESOURCE_IRQ, > - }, > - [22] = { > - .start = EXYNOS4_PA_SYSMMU_ROTATOR, > - .end = EXYNOS4_PA_SYSMMU_ROTATOR + SZ_64K - 1, > - .flags = IORESOURCE_MEM, > - }, > - [23] = { > - .start = IRQ_SYSMMU_ROTATOR_0, > - .end = IRQ_SYSMMU_ROTATOR_0, > - .flags = IORESOURCE_IRQ, > - }, > - [24] = { > - .start = EXYNOS4_PA_SYSMMU_MDMA2, > - .end = EXYNOS4_PA_SYSMMU_MDMA2 + SZ_64K - 1, > - .flags = IORESOURCE_MEM, > - }, > - [25] = { > - .start = IRQ_SYSMMU_MDMA1_0, > - .end = IRQ_SYSMMU_MDMA1_0, > - .flags = IORESOURCE_IRQ, > - }, > - [26] = { > - .start = EXYNOS4_PA_SYSMMU_TV, > - .end = EXYNOS4_PA_SYSMMU_TV + SZ_64K - 1, > - .flags = IORESOURCE_MEM, > - }, > - [27] = { > - .start = IRQ_SYSMMU_TV_M0_0, > - .end = IRQ_SYSMMU_TV_M0_0, > - .flags = IORESOURCE_IRQ, > - }, > - [28] = { > - .start = EXYNOS4_PA_SYSMMU_MFC_L, > - .end = EXYNOS4_PA_SYSMMU_MFC_L + SZ_64K - 1, > - .flags = IORESOURCE_MEM, > - }, > - [29] = { > - .start = IRQ_SYSMMU_MFC_M0_0, > - .end = IRQ_SYSMMU_MFC_M0_0, > - .flags = IORESOURCE_IRQ, > - }, > - [30] = { > - .start = EXYNOS4_PA_SYSMMU_MFC_R, > - .end = EXYNOS4_PA_SYSMMU_MFC_R + SZ_64K - 1, > - .flags = IORESOURCE_MEM, > - }, > - [31] = { > - .start = IRQ_SYSMMU_MFC_M1_0, > - .end = IRQ_SYSMMU_MFC_M1_0, > - .flags = IORESOURCE_IRQ, > - }, > -}; > +static u64 exynos_sysmmu_dma_mask = DMA_BIT_MASK(32); > + > +#define SYSMMU_PLATFORM_DEVICE(ipname, devid) \ > +static struct sysmmu_platform_data platdata_##ipname = { \ > + .dbgname = #ipname, \ > +}; \ > +struct platform_device SYSMMU_PLATDEV(ipname) = \ > +{ \ > + .name = SYSMMU_DEVNAME_BASE, \ > + .id = devid, \ > + .dev = { \ > + .dma_mask = &exynos_sysmmu_dma_mask, \ > + .coherent_dma_mask = DMA_BIT_MASK(32), \ > + .platform_data = &platdata_##ipname, \ > + }, \ > +} > + > +SYSMMU_PLATFORM_DEVICE(mfc_l, 0); > +SYSMMU_PLATFORM_DEVICE(mfc_r, 1); > +SYSMMU_PLATFORM_DEVICE(tv, 2); > +SYSMMU_PLATFORM_DEVICE(jpeg, 3); > +SYSMMU_PLATFORM_DEVICE(rot, 4); > +SYSMMU_PLATFORM_DEVICE(fimc0, 5); /* fimc* and gsc* exist exclusively */ > +SYSMMU_PLATFORM_DEVICE(fimc1, 6); > +SYSMMU_PLATFORM_DEVICE(fimc2, 7); > +SYSMMU_PLATFORM_DEVICE(fimc3, 8); > +SYSMMU_PLATFORM_DEVICE(gsc0, 5); > +SYSMMU_PLATFORM_DEVICE(gsc1, 6); > +SYSMMU_PLATFORM_DEVICE(gsc2, 7); > +SYSMMU_PLATFORM_DEVICE(gsc3, 8); > +SYSMMU_PLATFORM_DEVICE(isp, 9); > +SYSMMU_PLATFORM_DEVICE(fimd0, 10); > +SYSMMU_PLATFORM_DEVICE(fimd1, 11); > +SYSMMU_PLATFORM_DEVICE(camif0, 12); > +SYSMMU_PLATFORM_DEVICE(camif1, 13); > +SYSMMU_PLATFORM_DEVICE(2d, 14); > + > +#define SYSMMU_RESOURCE_NAME(core, ipname) sysmmures_##core##_##ipname > + > +#define SYSMMU_RESOURCE(core, ipname) \ > + static struct resource SYSMMU_RESOURCE_NAME(core, ipname)[] __initdata = > + > +#define DEFINE_SYSMMU_RESOURCE(core, mem, irq) \ > + DEFINE_RES_MEM_NAMED(core##_PA_SYSMMU_##mem, SZ_4K, #mem), \ > + DEFINE_RES_IRQ_NAMED(core##_IRQ_SYSMMU_##irq##_0, #mem) > + > +#define SYSMMU_RESOURCE_DEFINE(core, ipname, mem, irq) \ > + SYSMMU_RESOURCE(core, ipname) { \ > + DEFINE_SYSMMU_RESOURCE(core, mem, irq) \ > + } > > -struct platform_device exynos4_device_sysmmu = { > - .name = "s5p-sysmmu", > - .id = 32, > - .num_resources = ARRAY_SIZE(exynos4_sysmmu_resource), > - .resource = exynos4_sysmmu_resource, > +struct sysmmu_resource_map { > + struct platform_device *pdev; > + struct resource *res; > + u32 rnum; > + struct device *pdd; > + char *clocknames; > }; > -EXPORT_SYMBOL(exynos4_device_sysmmu); > > -static struct clk *sysmmu_clk[S5P_SYSMMU_TOTAL_IPNUM]; > -void sysmmu_clk_init(struct device *dev, sysmmu_ips ips) > -{ > - sysmmu_clk[ips] = clk_get(dev, sysmmu_ips_name[ips]); > - if (IS_ERR(sysmmu_clk[ips])) > - sysmmu_clk[ips] = NULL; > - else > - clk_put(sysmmu_clk[ips]); > +#define SYSMMU_RESOURCE_MAPPING(core, ipname, resname) { \ > + .pdev = &SYSMMU_PLATDEV(ipname), \ > + .res = SYSMMU_RESOURCE_NAME(EXYNOS##core, resname), \ > + .rnum = ARRAY_SIZE(SYSMMU_RESOURCE_NAME(EXYNOS##core, resname)),\ > + .clocknames = SYSMMU_CLOCK_NAME, \ > } > > -void sysmmu_clk_enable(sysmmu_ips ips) > -{ > - if (sysmmu_clk[ips]) > - clk_enable(sysmmu_clk[ips]); > +#define SYSMMU_RESOURCE_MAPPING_MC(core, ipname, resname, pdata) { \ > + .pdev = &SYSMMU_PLATDEV(ipname), \ > + .res = SYSMMU_RESOURCE_NAME(EXYNOS##core, resname), \ > + .rnum = ARRAY_SIZE(SYSMMU_RESOURCE_NAME(EXYNOS##core, resname)),\ > + .clocknames = SYSMMU_CLOCK_NAME "," SYSMMU_CLOCK_NAME2, \ > +} > + > +#ifdef CONFIG_EXYNOS_DEV_PD > +#define SYSMMU_RESOURCE_MAPPING_PD(core, ipname, resname, pd) { \ > + .pdev = &SYSMMU_PLATDEV(ipname), \ > + .res = &SYSMMU_RESOURCE_NAME(EXYNOS##core, resname), \ > + .rnum = ARRAY_SIZE(SYSMMU_RESOURCE_NAME(EXYNOS##core, resname)),\ > + .clocknames = SYSMMU_CLOCK_NAME, \ > + .pdd = &exynos##core##_device_pd[pd].dev, \ > +} > + > +#define SYSMMU_RESOURCE_MAPPING_MCPD(core, ipname, resname, pd, pdata) {\ > + .pdev = &SYSMMU_PLATDEV(ipname), \ > + .res = &SYSMMU_RESOURCE_NAME(EXYNOS##core, resname), \ > + .rnum = ARRAY_SIZE(SYSMMU_RESOURCE_NAME(EXYNOS##core, resname)),\ > + .clocknames = SYSMMU_CLOCK_NAME "," SYSMMU_CLOCK_NAME2, \ > + .pdd = &exynos##core##_device_pd[pd].dev, \ > } > +#else > +#define SYSMMU_RESOURCE_MAPPING_PD(core, ipname, resname, pd) \ > + SYSMMU_RESOURCE_MAPPING(core, ipname, resname) > +#define SYSMMU_RESOURCE_MAPPING_MCPD(core, ipname, resname, pd, pdata) \ > + SYSMMU_RESOURCE_MAPPING_MC(core, ipname, resname, pdata) > + > +#endif /* CONFIG_EXYNOS_DEV_PD */ > + > +#ifdef CONFIG_ARCH_EXYNOS4 > +SYSMMU_RESOURCE_DEFINE(EXYNOS4, fimc0, FIMC0, FIMC0); > +SYSMMU_RESOURCE_DEFINE(EXYNOS4, fimc1, FIMC1, FIMC1); > +SYSMMU_RESOURCE_DEFINE(EXYNOS4, fimc2, FIMC2, FIMC2); > +SYSMMU_RESOURCE_DEFINE(EXYNOS4, fimc3, FIMC3, FIMC3); > +SYSMMU_RESOURCE_DEFINE(EXYNOS4, jpeg, JPEG, JPEG); > +SYSMMU_RESOURCE_DEFINE(EXYNOS4, 2d, G2D, 2D); > +SYSMMU_RESOURCE_DEFINE(EXYNOS4, tv, TV, TV_M0); > +SYSMMU_RESOURCE_DEFINE(EXYNOS4, 2d_acp, 2D_ACP, 2D); > +SYSMMU_RESOURCE_DEFINE(EXYNOS4, rot, ROTATOR, ROTATOR); > +SYSMMU_RESOURCE_DEFINE(EXYNOS4, fimd0, FIMD0, LCD0_M0); > +SYSMMU_RESOURCE_DEFINE(EXYNOS4, fimd1, FIMD1, LCD1_M1); > +SYSMMU_RESOURCE_DEFINE(EXYNOS4, flite0, FIMC_LITE0, FIMC_LITE0); > +SYSMMU_RESOURCE_DEFINE(EXYNOS4, flite1, FIMC_LITE1, FIMC_LITE1); > +SYSMMU_RESOURCE_DEFINE(EXYNOS4, mfc_r, MFC_R, MFC_M0); > +SYSMMU_RESOURCE_DEFINE(EXYNOS4, mfc_l, MFC_L, MFC_M1); > +SYSMMU_RESOURCE(EXYNOS4, isp) { > + DEFINE_SYSMMU_RESOURCE(EXYNOS4, FIMC_ISP, FIMC_ISP), > + DEFINE_SYSMMU_RESOURCE(EXYNOS4, FIMC_DRC, FIMC_DRC), > + DEFINE_SYSMMU_RESOURCE(EXYNOS4, FIMC_FD, FIMC_FD), > + DEFINE_SYSMMU_RESOURCE(EXYNOS4, ISPCPU, FIMC_CX), > +}; > + > +static struct sysmmu_resource_map sysmmu_resmap4[] __initdata = { > + SYSMMU_RESOURCE_MAPPING_PD(4, fimc0, fimc0, PD_CAM), > + SYSMMU_RESOURCE_MAPPING_PD(4, fimc1, fimc1, PD_CAM), > + SYSMMU_RESOURCE_MAPPING_PD(4, fimc2, fimc2, PD_CAM), > + SYSMMU_RESOURCE_MAPPING_PD(4, fimc3, fimc3, PD_CAM), > + SYSMMU_RESOURCE_MAPPING_PD(4, tv, tv, PD_TV), > + SYSMMU_RESOURCE_MAPPING_PD(4, mfc_r, mfc_r, PD_MFC), > + SYSMMU_RESOURCE_MAPPING_PD(4, mfc_l, mfc_l, PD_MFC), > + SYSMMU_RESOURCE_MAPPING_PD(4, rot, rot, PD_LCD0), > + SYSMMU_RESOURCE_MAPPING_PD(4, jpeg, jpeg, PD_CAM), > + SYSMMU_RESOURCE_MAPPING_PD(4, fimd0, fimd0, PD_LCD0), > +}; > + > +static struct sysmmu_resource_map sysmmu_resmap4210[] __initdata = { > + SYSMMU_RESOURCE_MAPPING_PD(4, 2d, 2d, PD_LCD0), > + SYSMMU_RESOURCE_MAPPING_PD(4, fimd1, fimd1, PD_LCD1), > +}; > + > +static struct sysmmu_resource_map sysmmu_resmap4212[] __initdata = { > + SYSMMU_RESOURCE_MAPPING(4, 2d, 2d_acp), > + SYSMMU_RESOURCE_MAPPING_PD(4, camif0, flite0, PD_ISP), > + SYSMMU_RESOURCE_MAPPING_PD(4, camif1, flite1, PD_ISP), > + SYSMMU_RESOURCE_MAPPING_PD(4, isp, isp, PD_ISP), > +}; > +#endif /* CONFIG_ARCH_EXYNOS4 */ > > -void sysmmu_clk_disable(sysmmu_ips ips) > +#ifdef CONFIG_ARCH_EXYNOS5 > +SYSMMU_RESOURCE_DEFINE(EXYNOS5, jpeg, JPEG, JPEG); > +SYSMMU_RESOURCE_DEFINE(EXYNOS5, fimd1, FIMD1, FIMD1); > +SYSMMU_RESOURCE_DEFINE(EXYNOS5, 2d, 2D, 2D); > +SYSMMU_RESOURCE_DEFINE(EXYNOS5, rot, ROTATOR, ROTATOR); > +SYSMMU_RESOURCE_DEFINE(EXYNOS5, tv, TV, TV); > +SYSMMU_RESOURCE_DEFINE(EXYNOS5, flite0, LITE0, LITE0); > +SYSMMU_RESOURCE_DEFINE(EXYNOS5, flite1, LITE1, LITE1); > +SYSMMU_RESOURCE_DEFINE(EXYNOS5, gsc0, GSC0, GSC0); > +SYSMMU_RESOURCE_DEFINE(EXYNOS5, gsc1, GSC1, GSC1); > +SYSMMU_RESOURCE_DEFINE(EXYNOS5, gsc2, GSC2, GSC2); > +SYSMMU_RESOURCE_DEFINE(EXYNOS5, gsc3, GSC3, GSC3); > +SYSMMU_RESOURCE_DEFINE(EXYNOS5, mfc_r, MFC_R, MFC_R); > +SYSMMU_RESOURCE_DEFINE(EXYNOS5, mfc_l, MFC_L, MFC_L); > +SYSMMU_RESOURCE(EXYNOS5, isp) { > + DEFINE_SYSMMU_RESOURCE(EXYNOS5, ISP, ISP), > + DEFINE_SYSMMU_RESOURCE(EXYNOS5, DRC, DRC), > + DEFINE_SYSMMU_RESOURCE(EXYNOS5, FD, FD), > + DEFINE_SYSMMU_RESOURCE(EXYNOS5, ISPCPU, MCUISP), > + DEFINE_SYSMMU_RESOURCE(EXYNOS5, SCALERC, SCALERCISP), > + DEFINE_SYSMMU_RESOURCE(EXYNOS5, SCALERP, SCALERPISP), > + DEFINE_SYSMMU_RESOURCE(EXYNOS5, ODC, ODC), > + DEFINE_SYSMMU_RESOURCE(EXYNOS5, DIS0, DIS0), > + DEFINE_SYSMMU_RESOURCE(EXYNOS5, DIS1, DIS1), > + DEFINE_SYSMMU_RESOURCE(EXYNOS5, 3DNR, 3DNR), > +}; > + > +static struct sysmmu_resource_map sysmmu_resmap5[] __initdata = { > + SYSMMU_RESOURCE_MAPPING(5, jpeg, jpeg), > + SYSMMU_RESOURCE_MAPPING(5, fimd1, fimd1), > + SYSMMU_RESOURCE_MAPPING(5, 2d, 2d), > + SYSMMU_RESOURCE_MAPPING(5, rot, rot), > + SYSMMU_RESOURCE_MAPPING_PD(5, tv, tv, PD_DISP1), > + SYSMMU_RESOURCE_MAPPING_PD(5, camif0, flite0, PD_GSCL), > + SYSMMU_RESOURCE_MAPPING_PD(5, camif1, flite1, PD_GSCL), > + SYSMMU_RESOURCE_MAPPING_PD(5, gsc0, gsc0, PD_GSCL), > + SYSMMU_RESOURCE_MAPPING_PD(5, gsc1, gsc1, PD_GSCL), > + SYSMMU_RESOURCE_MAPPING_PD(5, gsc2, gsc2, PD_GSCL), > + SYSMMU_RESOURCE_MAPPING_PD(5, gsc3, gsc3, PD_GSCL), > + SYSMMU_RESOURCE_MAPPING_PD(5, mfc_r, mfc_r, PD_MFC), > + SYSMMU_RESOURCE_MAPPING_PD(5, mfc_l, mfc_l, PD_MFC), > + SYSMMU_RESOURCE_MAPPING_MCPD(5, isp, isp, PD_ISP, mc_platdata), > +}; > +#endif /* CONFIG_ARCH_EXYNOS5 */ > + > +static int __init init_sysmmu_platform_device(void) > { > - if (sysmmu_clk[ips]) > - clk_disable(sysmmu_clk[ips]); > + int i, j; > + struct sysmmu_resource_map *resmap[2] = {NULL, NULL}; > + int nmap[2] = {0, 0}; > + > +#ifdef CONFIG_ARCH_EXYNOS5 > + if (soc_is_exynos5250()) { > + resmap[0] = sysmmu_resmap5; > + nmap[0] = ARRAY_SIZE(sysmmu_resmap5); > + nmap[1] = 0; > + } > +#endif > + > +#ifdef CONFIG_ARCH_EXYNOS4 > + if (resmap[0] == NULL) { > + resmap[0] = sysmmu_resmap4; > + nmap[0] = ARRAY_SIZE(sysmmu_resmap4); > + } > + > + if (soc_is_exynos4210()) { > + resmap[1] = sysmmu_resmap4210; > + nmap[1] = ARRAY_SIZE(sysmmu_resmap4210); > + } > + > + if (soc_is_exynos4412() || soc_is_exynos4212()) { > + resmap[1] = sysmmu_resmap4212; > + nmap[1] = ARRAY_SIZE(sysmmu_resmap4212); > + } > +#endif > + > + for (j = 0; j < 2; j++) { > + for (i = 0; i < nmap[j]; i++) { > + struct sysmmu_resource_map *map; > + struct sysmmu_platform_data *platdata; > + > + map = &resmap[j][i]; > + > + map->pdev->dev.parent = map->pdd; > + > + platdata = map->pdev->dev.platform_data; > + platdata->clockname = map->clocknames; > + > + if (platform_device_add_resources(map->pdev, map->res, > + map->rnum)) { > + pr_err("%s: Failed to add device resources for " > + "%s.%d\n", __func__, > + map->pdev->name, map->pdev->id); > + continue; > + } > + > + if (platform_device_register(map->pdev)) { > + pr_err("%s: Failed to register %s.%d\n", > + __func__, map->pdev->name, > + map->pdev->id); > + } > + } > + } > + > + return 0; > } > +arch_initcall(init_sysmmu_platform_device); > diff --git a/arch/arm/mach-exynos/include/mach/irqs.h > b/arch/arm/mach-exynos/include/mach/irqs.h > index 33a119c..04646a8 100644 > --- a/arch/arm/mach-exynos/include/mach/irqs.h > +++ b/arch/arm/mach-exynos/include/mach/irqs.h > @@ -129,23 +129,30 @@ > #define COMBINER_GROUP(x) ((x) * MAX_IRQ_IN_COMBINER + IRQ_SPI(128)) > #define COMBINER_IRQ(x, y) (COMBINER_GROUP(x) + y) > > -#define IRQ_SYSMMU_MDMA0_0 COMBINER_IRQ(4, 0) > -#define IRQ_SYSMMU_SSS_0 COMBINER_IRQ(4, 1) > -#define IRQ_SYSMMU_FIMC0_0 COMBINER_IRQ(4, 2) > -#define IRQ_SYSMMU_FIMC1_0 COMBINER_IRQ(4, 3) > -#define IRQ_SYSMMU_FIMC2_0 COMBINER_IRQ(4, 4) > -#define IRQ_SYSMMU_FIMC3_0 COMBINER_IRQ(4, 5) > -#define IRQ_SYSMMU_JPEG_0 COMBINER_IRQ(4, 6) > -#define IRQ_SYSMMU_2D_0 COMBINER_IRQ(4, 7) > - > -#define IRQ_SYSMMU_ROTATOR_0 COMBINER_IRQ(5, 0) > -#define IRQ_SYSMMU_MDMA1_0 COMBINER_IRQ(5, 1) > -#define IRQ_SYSMMU_LCD0_M0_0 COMBINER_IRQ(5, 2) > -#define IRQ_SYSMMU_LCD1_M1_0 COMBINER_IRQ(5, 3) > -#define IRQ_SYSMMU_TV_M0_0 COMBINER_IRQ(5, 4) > -#define IRQ_SYSMMU_MFC_M0_0 COMBINER_IRQ(5, 5) > -#define IRQ_SYSMMU_MFC_M1_0 COMBINER_IRQ(5, 6) > -#define IRQ_SYSMMU_PCIE_0 COMBINER_IRQ(5, 7) > +#define EXYNOS4_IRQ_SYSMMU_MDMA0_0 COMBINER_IRQ(4, 0) > +#define EXYNOS4_IRQ_SYSMMU_SSS_0 COMBINER_IRQ(4, 1) > +#define EXYNOS4_IRQ_SYSMMU_FIMC0_0 COMBINER_IRQ(4, 2) > +#define EXYNOS4_IRQ_SYSMMU_FIMC1_0 COMBINER_IRQ(4, 3) > +#define EXYNOS4_IRQ_SYSMMU_FIMC2_0 COMBINER_IRQ(4, 4) > +#define EXYNOS4_IRQ_SYSMMU_FIMC3_0 COMBINER_IRQ(4, 5) > +#define EXYNOS4_IRQ_SYSMMU_JPEG_0 COMBINER_IRQ(4, 6) > +#define EXYNOS4_IRQ_SYSMMU_2D_0 COMBINER_IRQ(4, 7) > + > +#define EXYNOS4_IRQ_SYSMMU_ROTATOR_0 COMBINER_IRQ(5, 0) > +#define EXYNOS4_IRQ_SYSMMU_MDMA1_0 COMBINER_IRQ(5, 1) > +#define EXYNOS4_IRQ_SYSMMU_LCD0_M0_0 COMBINER_IRQ(5, 2) > +#define EXYNOS4_IRQ_SYSMMU_LCD1_M1_0 COMBINER_IRQ(5, 3) > +#define EXYNOS4_IRQ_SYSMMU_TV_M0_0 COMBINER_IRQ(5, 4) > +#define EXYNOS4_IRQ_SYSMMU_MFC_M0_0 COMBINER_IRQ(5, 5) > +#define EXYNOS4_IRQ_SYSMMU_MFC_M1_0 COMBINER_IRQ(5, 6) > +#define EXYNOS4_IRQ_SYSMMU_PCIE_0 COMBINER_IRQ(5, 7) > + > +#define EXYNOS4_IRQ_SYSMMU_FIMC_LITE0_0 COMBINER_IRQ(16, 0) > +#define EXYNOS4_IRQ_SYSMMU_FIMC_LITE1_0 COMBINER_IRQ(16, 1) > +#define EXYNOS4_IRQ_SYSMMU_FIMC_ISP_0 COMBINER_IRQ(16, 2) > +#define EXYNOS4_IRQ_SYSMMU_FIMC_DRC_0 COMBINER_IRQ(16, 3) > +#define EXYNOS4_IRQ_SYSMMU_FIMC_FD_0 COMBINER_IRQ(16, 4) > +#define EXYNOS4_IRQ_SYSMMU_FIMC_CX_0 COMBINER_IRQ(16, 5) > > #define IRQ_FIMD0_FIFO COMBINER_IRQ(11, 0) > #define IRQ_FIMD0_VSYNC COMBINER_IRQ(11, 1) > @@ -275,70 +282,70 @@ > #define IRQ_PMU COMBINER_IRQ(1, 2) > #define IRQ_PMU_CPU1 COMBINER_IRQ(1, 6) > > -#define IRQ_SYSMMU_GSC0_0 COMBINER_IRQ(2, 0) > -#define IRQ_SYSMMU_GSC0_1 COMBINER_IRQ(2, 1) > -#define IRQ_SYSMMU_GSC1_0 COMBINER_IRQ(2, 2) > -#define IRQ_SYSMMU_GSC1_1 COMBINER_IRQ(2, 3) > -#define IRQ_SYSMMU_GSC2_0 COMBINER_IRQ(2, 4) > -#define IRQ_SYSMMU_GSC2_1 COMBINER_IRQ(2, 5) > -#define IRQ_SYSMMU_GSC3_0 COMBINER_IRQ(2, 6) > -#define IRQ_SYSMMU_GSC3_1 COMBINER_IRQ(2, 7) > - > -#define IRQ_SYSMMU_FIMD1_0 COMBINER_IRQ(3, 2) > -#define IRQ_SYSMMU_FIMD1_1 COMBINER_IRQ(3, 3) > -#define IRQ_SYSMMU_LITE0_0 COMBINER_IRQ(3, 4) > -#define IRQ_SYSMMU_LITE0_1 COMBINER_IRQ(3, 5) > -#define IRQ_SYSMMU_SCALERPISP_0 COMBINER_IRQ(3, 6) > -#define IRQ_SYSMMU_SCALERPISP_1 COMBINER_IRQ(3, 7) > - > -#define IRQ_SYSMMU_ROTATOR_0 COMBINER_IRQ(4, 0) > -#define IRQ_SYSMMU_ROTATOR_1 COMBINER_IRQ(4, 1) > -#define IRQ_SYSMMU_JPEG_0 COMBINER_IRQ(4, 2) > -#define IRQ_SYSMMU_JPEG_1 COMBINER_IRQ(4, 3) > - > -#define IRQ_SYSMMU_FD_0 COMBINER_IRQ(5, 0) > -#define IRQ_SYSMMU_FD_1 COMBINER_IRQ(5, 1) > -#define IRQ_SYSMMU_SCALERCISP_0 COMBINER_IRQ(5, 2) > -#define IRQ_SYSMMU_SCALERCISP_1 COMBINER_IRQ(5, 3) > -#define IRQ_SYSMMU_MCUISP_0 COMBINER_IRQ(5, 4) > -#define IRQ_SYSMMU_MCUISP_1 COMBINER_IRQ(5, 5) > -#define IRQ_SYSMMU_3DNR_0 COMBINER_IRQ(5, 6) > -#define IRQ_SYSMMU_3DNR_1 COMBINER_IRQ(5, 7) > - > -#define IRQ_SYSMMU_ARM_0 COMBINER_IRQ(6, 0) > -#define IRQ_SYSMMU_ARM_1 COMBINER_IRQ(6, 1) > -#define IRQ_SYSMMU_MFC_L_0 COMBINER_IRQ(6, 2) > -#define IRQ_SYSMMU_MFC_L_1 COMBINER_IRQ(6, 3) > -#define IRQ_SYSMMU_RTIC_0 COMBINER_IRQ(6, 4) > -#define IRQ_SYSMMU_RTIC_1 COMBINER_IRQ(6, 5) > -#define IRQ_SYSMMU_SSS_0 COMBINER_IRQ(6, 6) > -#define IRQ_SYSMMU_SSS_1 COMBINER_IRQ(6, 7) > - > -#define IRQ_SYSMMU_MDMA0_0 COMBINER_IRQ(7, 0) > -#define IRQ_SYSMMU_MDMA0_1 COMBINER_IRQ(7, 1) > -#define IRQ_SYSMMU_MDMA1_0 COMBINER_IRQ(7, 2) > -#define IRQ_SYSMMU_MDMA1_1 COMBINER_IRQ(7, 3) > -#define IRQ_SYSMMU_TV_0 COMBINER_IRQ(7, 4) > -#define IRQ_SYSMMU_TV_1 COMBINER_IRQ(7, 5) > -#define IRQ_SYSMMU_GPSX_0 COMBINER_IRQ(7, 6) > -#define IRQ_SYSMMU_GPSX_1 COMBINER_IRQ(7, 7) > - > -#define IRQ_SYSMMU_MFC_R_0 COMBINER_IRQ(8, 5) > -#define IRQ_SYSMMU_MFC_R_1 COMBINER_IRQ(8, 6) > - > -#define IRQ_SYSMMU_DIS1_0 COMBINER_IRQ(9, 4) > -#define IRQ_SYSMMU_DIS1_1 COMBINER_IRQ(9, 5) > - > -#define IRQ_DP COMBINER_IRQ(10, 3) > -#define IRQ_SYSMMU_DIS0_0 COMBINER_IRQ(10, 4) > -#define IRQ_SYSMMU_DIS0_1 COMBINER_IRQ(10, 5) > -#define IRQ_SYSMMU_ISP_0 COMBINER_IRQ(10, 6) > -#define IRQ_SYSMMU_ISP_1 COMBINER_IRQ(10, 7) > - > -#define IRQ_SYSMMU_ODC_0 COMBINER_IRQ(11, 0) > -#define IRQ_SYSMMU_ODC_1 COMBINER_IRQ(11, 1) > -#define IRQ_SYSMMU_DRC_0 COMBINER_IRQ(11, 6) > -#define IRQ_SYSMMU_DRC_1 COMBINER_IRQ(11, 7) > +#define EXYNOS5_IRQ_SYSMMU_GSC0_0 COMBINER_IRQ(2, 0) > +#define EXYNOS5_IRQ_SYSMMU_GSC0_1 COMBINER_IRQ(2, 1) > +#define EXYNOS5_IRQ_SYSMMU_GSC1_0 COMBINER_IRQ(2, 2) > +#define EXYNOS5_IRQ_SYSMMU_GSC1_1 COMBINER_IRQ(2, 3) > +#define EXYNOS5_IRQ_SYSMMU_GSC2_0 COMBINER_IRQ(2, 4) > +#define EXYNOS5_IRQ_SYSMMU_GSC2_1 COMBINER_IRQ(2, 5) > +#define EXYNOS5_IRQ_SYSMMU_GSC3_0 COMBINER_IRQ(2, 6) > +#define EXYNOS5_IRQ_SYSMMU_GSC3_1 COMBINER_IRQ(2, 7) > + > +#define EXYNOS5_IRQ_SYSMMU_FIMD1_0 COMBINER_IRQ(3, 2) > +#define EXYNOS5_IRQ_SYSMMU_FIMD1_1 COMBINER_IRQ(3, 3) > +#define EXYNOS5_IRQ_SYSMMU_LITE0_0 COMBINER_IRQ(3, 4) > +#define EXYNOS5_IRQ_SYSMMU_LITE0_1 COMBINER_IRQ(3, 5) > +#define EXYNOS5_IRQ_SYSMMU_SCALERPISP_0 COMBINER_IRQ(3, 6) > +#define EXYNOS5_IRQ_SYSMMU_SCALERPISP_1 COMBINER_IRQ(3, 7) > + > +#define EXYNOS5_IRQ_SYSMMU_ROTATOR_0 COMBINER_IRQ(4, 0) > +#define EXYNOS5_IRQ_SYSMMU_ROTATOR_1 COMBINER_IRQ(4, 1) > +#define EXYNOS5_IRQ_SYSMMU_JPEG_0 COMBINER_IRQ(4, 2) > +#define EXYNOS5_IRQ_SYSMMU_JPEG_1 COMBINER_IRQ(4, 3) > + > +#define EXYNOS5_IRQ_SYSMMU_FD_0 COMBINER_IRQ(5, 0) > +#define EXYNOS5_IRQ_SYSMMU_FD_1 COMBINER_IRQ(5, 1) > +#define EXYNOS5_IRQ_SYSMMU_SCALERCISP_0 COMBINER_IRQ(5, 2) > +#define EXYNOS5_IRQ_SYSMMU_SCALERCISP_1 COMBINER_IRQ(5, 3) > +#define EXYNOS5_IRQ_SYSMMU_MCUISP_0 COMBINER_IRQ(5, 4) > +#define EXYNOS5_IRQ_SYSMMU_MCUISP_1 COMBINER_IRQ(5, 5) > +#define EXYNOS5_IRQ_SYSMMU_3DNR_0 COMBINER_IRQ(5, 6) > +#define EXYNOS5_IRQ_SYSMMU_3DNR_1 COMBINER_IRQ(5, 7) > + > +#define EXYNOS5_IRQ_SYSMMU_ARM_0 COMBINER_IRQ(6, 0) > +#define EXYNOS5_IRQ_SYSMMU_ARM_1 COMBINER_IRQ(6, 1) > +#define EXYNOS5_IRQ_SYSMMU_MFC_L_0 COMBINER_IRQ(6, 2) > +#define EXYNOS5_IRQ_SYSMMU_MFC_L_1 COMBINER_IRQ(6, 3) > +#define EXYNOS5_IRQ_SYSMMU_RTIC_0 COMBINER_IRQ(6, 4) > +#define EXYNOS5_IRQ_SYSMMU_RTIC_1 COMBINER_IRQ(6, 5) > +#define EXYNOS5_IRQ_SYSMMU_SSS_0 COMBINER_IRQ(6, 6) > +#define EXYNOS5_IRQ_SYSMMU_SSS_1 COMBINER_IRQ(6, 7) > + > +#define EXYNOS5_IRQ_SYSMMU_MDMA0_0 COMBINER_IRQ(7, 0) > +#define EXYNOS5_IRQ_SYSMMU_MDMA0_1 COMBINER_IRQ(7, 1) > +#define EXYNOS5_IRQ_SYSMMU_MDMA1_0 COMBINER_IRQ(7, 2) > +#define EXYNOS5_IRQ_SYSMMU_MDMA1_1 COMBINER_IRQ(7, 3) > +#define EXYNOS5_IRQ_SYSMMU_TV_0 COMBINER_IRQ(7, 4) > +#define EXYNOS5_IRQ_SYSMMU_TV_1 COMBINER_IRQ(7, 5) > +#define EXYNOS5_IRQ_SYSMMU_GPSX_0 COMBINER_IRQ(7, 6) > +#define EXYNOS5_IRQ_SYSMMU_GPSX_1 COMBINER_IRQ(7, 7) > + > +#define EXYNOS5_IRQ_SYSMMU_MFC_R_0 COMBINER_IRQ(8, 5) > +#define EXYNOS5_IRQ_SYSMMU_MFC_R_1 COMBINER_IRQ(8, 6) > + > +#define EXYNOS5_IRQ_SYSMMU_DIS1_0 COMBINER_IRQ(9, 4) > +#define EXYNOS5_IRQ_SYSMMU_DIS1_1 COMBINER_IRQ(9, 5) > + > +#define IRQ_DP COMBINER_IRQ(10, 3) > +#define EXYNOS5_IRQ_SYSMMU_DIS0_0 COMBINER_IRQ(10, 4) > +#define EXYNOS5_IRQ_SYSMMU_DIS0_1 COMBINER_IRQ(10, 5) > +#define EXYNOS5_IRQ_SYSMMU_ISP_0 COMBINER_IRQ(10, 6) > +#define EXYNOS5_IRQ_SYSMMU_ISP_1 COMBINER_IRQ(10, 7) > + > +#define EXYNOS5_IRQ_SYSMMU_ODC_0 COMBINER_IRQ(11, 0) > +#define EXYNOS5_IRQ_SYSMMU_ODC_1 COMBINER_IRQ(11, 1) > +#define EXYNOS5_IRQ_SYSMMU_DRC_0 COMBINER_IRQ(11, 6) > +#define EXYNOS5_IRQ_SYSMMU_DRC_1 COMBINER_IRQ(11, 7) > > #define IRQ_FIMD1_FIFO COMBINER_IRQ(18, 4) > #define IRQ_FIMD1_VSYNC COMBINER_IRQ(18, 5) > @@ -352,11 +359,11 @@ > #define IRQ_MCT_G2 COMBINER_IRQ(23, 5) > #define IRQ_MCT_G3 COMBINER_IRQ(23, 6) > > -#define IRQ_EINT1 COMBINER_IRQ(24, 0) > -#define IRQ_SYSMMU_LITE1_0 COMBINER_IRQ(24, 1) > -#define IRQ_SYSMMU_LITE1_1 COMBINER_IRQ(24, 2) > -#define IRQ_SYSMMU_2D_0 COMBINER_IRQ(24, 5) > -#define IRQ_SYSMMU_2D_1 COMBINER_IRQ(24, 6) > +#define IRQ_EINT1 COMBINER_IRQ(24, 0) > +#define EXYNOS5_IRQ_SYSMMU_LITE1_0 COMBINER_IRQ(24, 1) > +#define EXYNOS5_IRQ_SYSMMU_LITE1_1 COMBINER_IRQ(24, 2) > +#define EXYNOS5_IRQ_SYSMMU_2D_0 COMBINER_IRQ(24, 5) > +#define EXYNOS5_IRQ_SYSMMU_2D_1 COMBINER_IRQ(24, 6) > > #define IRQ_EINT2 COMBINER_IRQ(25, 0) > #define IRQ_EINT3 COMBINER_IRQ(25, 1) > diff --git a/arch/arm/mach-exynos/include/mach/map.h > b/arch/arm/mach-exynos/include/mach/map.h > index 57c13f1..cc4c8da 100644 > --- a/arch/arm/mach-exynos/include/mach/map.h > +++ b/arch/arm/mach-exynos/include/mach/map.h > @@ -87,6 +87,7 @@ > #define EXYNOS4_PA_PDMA1 0x12690000 > > #define EXYNOS4_PA_SYSMMU_MDMA 0x10A40000 > +#define EXYNOS4_PA_SYSMMU_2D_ACP 0x10A40000 > #define EXYNOS4_PA_SYSMMU_SSS 0x10A50000 > #define EXYNOS4_PA_SYSMMU_FIMC0 0x11A20000 > #define EXYNOS4_PA_SYSMMU_FIMC1 0x11A30000 > @@ -95,6 +96,12 @@ > #define EXYNOS4_PA_SYSMMU_JPEG 0x11A60000 > #define EXYNOS4_PA_SYSMMU_FIMD0 0x11E20000 > #define EXYNOS4_PA_SYSMMU_FIMD1 0x12220000 > +#define EXYNOS4_PA_SYSMMU_FIMC_ISP 0x12260000 > +#define EXYNOS4_PA_SYSMMU_FIMC_DRC 0x12270000 > +#define EXYNOS4_PA_SYSMMU_FIMC_FD 0x122A0000 > +#define EXYNOS4_PA_SYSMMU_ISPCPU 0x122B0000 > +#define EXYNOS4_PA_SYSMMU_FIMC_LITE0 0x123B0000 > +#define EXYNOS4_PA_SYSMMU_FIMC_LITE1 0x123C0000 > #define EXYNOS4_PA_SYSMMU_PCIe 0x12620000 > #define EXYNOS4_PA_SYSMMU_G2D 0x12A20000 > #define EXYNOS4_PA_SYSMMU_ROTATOR 0x12A30000 > @@ -102,6 +109,37 @@ > #define EXYNOS4_PA_SYSMMU_TV 0x12E20000 > #define EXYNOS4_PA_SYSMMU_MFC_L 0x13620000 > #define EXYNOS4_PA_SYSMMU_MFC_R 0x13630000 > + > +#define EXYNOS5_PA_SYSMMU_MDMA1 0x10A40000 > +#define EXYNOS5_PA_SYSMMU_SSS 0x10A50000 > +#define EXYNOS5_PA_SYSMMU_2D 0x10A60000 > +#define EXYNOS5_PA_SYSMMU_MFC_L 0x11200000 > +#define EXYNOS5_PA_SYSMMU_MFC_R 0x11210000 > +#define EXYNOS5_PA_SYSMMU_ROTATOR 0x11D40000 > +#define EXYNOS5_PA_SYSMMU_MDMA2 0x11D50000 > +#define EXYNOS5_PA_SYSMMU_JPEG 0x11F20000 > +#define EXYNOS5_PA_SYSMMU_IOP 0x12360000 > +#define EXYNOS5_PA_SYSMMU_RTIC 0x12370000 > +#define EXYNOS5_PA_SYSMMU_GPS 0x12630000 > +#define EXYNOS5_PA_SYSMMU_ISP 0x13260000 > +#define EXYNOS5_PA_SYSMMU_DRC 0x12370000 > +#define EXYNOS5_PA_SYSMMU_SCALERC 0x13280000 > +#define EXYNOS5_PA_SYSMMU_SCALERP 0x13290000 > +#define EXYNOS5_PA_SYSMMU_FD 0x132A0000 > +#define EXYNOS5_PA_SYSMMU_ISPCPU 0x132B0000 > +#define EXYNOS5_PA_SYSMMU_ODC 0x132C0000 > +#define EXYNOS5_PA_SYSMMU_DIS0 0x132D0000 > +#define EXYNOS5_PA_SYSMMU_DIS1 0x132E0000 > +#define EXYNOS5_PA_SYSMMU_3DNR 0x132F0000 > +#define EXYNOS5_PA_SYSMMU_LITE0 0x13C40000 > +#define EXYNOS5_PA_SYSMMU_LITE1 0x13C50000 > +#define EXYNOS5_PA_SYSMMU_GSC0 0x13E80000 > +#define EXYNOS5_PA_SYSMMU_GSC1 0x13E90000 > +#define EXYNOS5_PA_SYSMMU_GSC2 0x13EA0000 > +#define EXYNOS5_PA_SYSMMU_GSC3 0x13EB0000 > +#define EXYNOS5_PA_SYSMMU_FIMD1 0x14640000 > +#define EXYNOS5_PA_SYSMMU_TV 0x14650000 > + > #define EXYNOS4_PA_SPI0 0x13920000 > #define EXYNOS4_PA_SPI1 0x13930000 > #define EXYNOS4_PA_SPI2 0x13940000 > diff --git a/arch/arm/mach-exynos/include/mach/regs-clock.h > b/arch/arm/mach-exynos/include/mach/regs-clock.h > index 113836b..de42145 100644 > --- a/arch/arm/mach-exynos/include/mach/regs-clock.h > +++ b/arch/arm/mach-exynos/include/mach/regs-clock.h > @@ -130,6 +130,9 @@ > #define EXYNOS4_CLKGATE_SCLKCPU EXYNOS_CLKREG(0x14800) > #define EXYNOS4_CLKGATE_IP_CPU EXYNOS_CLKREG(0x14900) > > +#define EXYNOS4_CLKGATE_IP_ISP0 EXYNOS_CLKREG(0x18800) > +#define EXYNOS4_CLKGATE_IP_ISP1 EXYNOS_CLKREG(0x18804) > + > #define EXYNOS4_APLL_LOCKTIME (0x1C20) /* 300us */ > > #define EXYNOS4_APLLCON0_ENABLE_SHIFT (31) > @@ -245,6 +248,8 @@ > #define EXYNOS5_CLKDIV_PERIC0 EXYNOS_CLKREG(0x10558) > > #define EXYNOS5_CLKGATE_IP_ACP EXYNOS_CLKREG(0x08800) > +#define EXYNOS5_CLKGATE_IP_ISP0 EXYNOS_CLKREG(0x0C800) > +#define EXYNOS5_CLKGATE_IP_ISP1 EXYNOS_CLKREG(0x0C804) > #define EXYNOS5_CLKGATE_IP_GSCL EXYNOS_CLKREG(0x10920) > #define EXYNOS5_CLKGATE_IP_DISP1 EXYNOS_CLKREG(0x10928) > #define EXYNOS5_CLKGATE_IP_MFC EXYNOS_CLKREG(0x1092C) > diff --git a/arch/arm/mach-exynos/include/mach/regs-sysmmu.h > b/arch/arm/mach-exynos/include/mach/regs-sysmmu.h > deleted file mode 100644 > index 68ff6ad..0000000 > --- a/arch/arm/mach-exynos/include/mach/regs-sysmmu.h > +++ /dev/null > @@ -1,28 +0,0 @@ > -/* linux/arch/arm/mach-exynos4/include/mach/regs-sysmmu.h > - * > - * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. > - * http://www.samsung.com > - * > - * EXYNOS4 - System MMU register > - * > - * This program is free software; you can redistribute it and/or modify > - * it under the terms of the GNU General Public License version 2 as > - * published by the Free Software Foundation. > -*/ > - > -#ifndef __ASM_ARCH_REGS_SYSMMU_H > -#define __ASM_ARCH_REGS_SYSMMU_H __FILE__ > - > -#define S5P_MMU_CTRL 0x000 > -#define S5P_MMU_CFG 0x004 > -#define S5P_MMU_STATUS 0x008 > -#define S5P_MMU_FLUSH 0x00C > -#define S5P_PT_BASE_ADDR 0x014 > -#define S5P_INT_STATUS 0x018 > -#define S5P_INT_CLEAR 0x01C > -#define S5P_PAGE_FAULT_ADDR 0x024 > -#define S5P_AW_FAULT_ADDR 0x028 > -#define S5P_AR_FAULT_ADDR 0x02C > -#define S5P_DEFAULT_SLAVE_ADDR 0x030 > - > -#endif /* __ASM_ARCH_REGS_SYSMMU_H */ > diff --git a/arch/arm/mach-exynos/include/mach/sysmmu.h > b/arch/arm/mach-exynos/include/mach/sysmmu.h > index 6a5fbb5..7fe8527 100644 > --- a/arch/arm/mach-exynos/include/mach/sysmmu.h > +++ b/arch/arm/mach-exynos/include/mach/sysmmu.h > @@ -1,46 +1,62 @@ > -/* linux/arch/arm/mach-exynos4/include/mach/sysmmu.h > - * > - * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. > +/* > + * Copyright (c) 2011-2012 Samsung Electronics Co., Ltd. > * http://www.samsung.com > * > - * Samsung sysmmu driver for EXYNOS4 > + * EXYNOS - System MMU support > * > * This program is free software; you can redistribute it and/or modify > * it under the terms of the GNU General Public License version 2 as > * published by the Free Software Foundation. > -*/ > - > -#ifndef __ASM_ARM_ARCH_SYSMMU_H > -#define __ASM_ARM_ARCH_SYSMMU_H __FILE__ > - > -enum exynos4_sysmmu_ips { > - SYSMMU_MDMA, > - SYSMMU_SSS, > - SYSMMU_FIMC0, > - SYSMMU_FIMC1, > - SYSMMU_FIMC2, > - SYSMMU_FIMC3, > - SYSMMU_JPEG, > - SYSMMU_FIMD0, > - SYSMMU_FIMD1, > - SYSMMU_PCIe, > - SYSMMU_G2D, > - SYSMMU_ROTATOR, > - SYSMMU_MDMA2, > - SYSMMU_TV, > - SYSMMU_MFC_L, > - SYSMMU_MFC_R, > - EXYNOS4_SYSMMU_TOTAL_IPNUM, > + */ > + > +#ifndef _ARM_MACH_EXYNOS_SYSMMU_H_ > +#define _ARM_MACH_EXYNOS_SYSMMU_H_ > + > +struct sysmmu_platform_data { > + char *dbgname; > + /* comma(,) separated list of clock names for clock gating */ Do you use the clock gating instead of runtime pm? > + char *clockname; > }; > > -#define S5P_SYSMMU_TOTAL_IPNUM EXYNOS4_SYSMMU_TOTAL_IPNUM > +#define SYSMMU_DEVNAME_BASE "exynos-sysmmu" > + > +#define SYSMMU_CLOCK_NAME "sysmmu" > +#define SYSMMU_CLOCK_NAME2 "sysmmu_mc" What's the meaning of "mc"? > + > +#ifdef CONFIG_EXYNOS_DEV_SYSMMU > +#include <linux/device.h> > +struct platform_device; > + > +#define SYSMMU_PLATDEV(ipname) exynos_device_sysmmu_##ipname > + > +extern struct platform_device SYSMMU_PLATDEV(mfc_l); > +extern struct platform_device SYSMMU_PLATDEV(mfc_r); > +extern struct platform_device SYSMMU_PLATDEV(tv); > +extern struct platform_device SYSMMU_PLATDEV(jpeg); > +extern struct platform_device SYSMMU_PLATDEV(rot); Where's the fimc platform_device? I think you only tested it with exynos5. > +extern struct platform_device SYSMMU_PLATDEV(gsc0); > +extern struct platform_device SYSMMU_PLATDEV(gsc1); > +extern struct platform_device SYSMMU_PLATDEV(gsc2); > +extern struct platform_device SYSMMU_PLATDEV(gsc3); > +extern struct platform_device SYSMMU_PLATDEV(isp); > +extern struct platform_device SYSMMU_PLATDEV(fimd0); > +extern struct platform_device SYSMMU_PLATDEV(fimd1); > +extern struct platform_device SYSMMU_PLATDEV(camif0); > +extern struct platform_device SYSMMU_PLATDEV(camif1); > +extern struct platform_device SYSMMU_PLATDEV(2d); > > -extern const char *sysmmu_ips_name[EXYNOS4_SYSMMU_TOTAL_IPNUM]; > +#ifdef CONFIG_IOMMU_API > +static inline void platform_set_sysmmu( > + struct device *sysmmu, struct device *dev) > +{ > + dev->archdata.iommu = sysmmu; > +} > +#endif > > -typedef enum exynos4_sysmmu_ips sysmmu_ips; > +#else /* !CONFIG_EXYNOS_DEV_SYSMMU */ > +#define platform_set_sysmmu(dev, sysmmu) do { } while (0) > +#endif > > -void sysmmu_clk_init(struct device *dev, sysmmu_ips ips); > -void sysmmu_clk_enable(sysmmu_ips ips); > -void sysmmu_clk_disable(sysmmu_ips ips); > +#define SYSMMU_CLOCK_DEVNAME(ipname, id) (SYSMMU_DEVNAME_BASE "." #id) > > -#endif /* __ASM_ARM_ARCH_SYSMMU_H */ > +#endif /* _ARM_MACH_EXYNOS_SYSMMU_H_ */ > diff --git a/arch/arm/mach-exynos/mach-armlex4210.c > b/arch/arm/mach-exynos/mach-armlex4210.c > index a1e7007..6ab171c 100644 > --- a/arch/arm/mach-exynos/mach-armlex4210.c > +++ b/arch/arm/mach-exynos/mach-armlex4210.c > @@ -154,7 +154,6 @@ static struct platform_device *armlex4210_devices[] > __initdata = { > &s3c_device_hsmmc3, > &s3c_device_rtc, > &s3c_device_wdt, > - &exynos4_device_sysmmu, > &samsung_asoc_dma, > &armlex4210_smsc911x, > &exynos4_device_ahci, > diff --git a/arch/arm/mach-exynos/mach-smdkv310.c > b/arch/arm/mach-exynos/mach-smdkv310.c > index 2b71f18..49975ad 100644 > --- a/arch/arm/mach-exynos/mach-smdkv310.c > +++ b/arch/arm/mach-exynos/mach-smdkv310.c > @@ -275,7 +275,6 @@ static struct platform_device *smdkv310_devices[] > __initdata = { > &s5p_device_mfc_l, > &s5p_device_mfc_r, > &exynos4_device_spdif, > - &exynos4_device_sysmmu, > &samsung_asoc_dma, > &samsung_asoc_idma, > &s5p_device_fimd0, > -- > 1.7.1 > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html