Merge branch 'next/soc-exynos5250-arch' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung into samsung/exynos5
* 'next/soc-exynos5250-arch' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung: ARM: EXYNOS: Fix compilation error with mach-exynos4-dt board ARM: dts: add initial dts file for EXYNOS5250, SMDK5250 ARM: EXYNOS: add support device tree enabled board file for EXYNOS5 ARM: EXYNOS: add support ARCH_EXYNOS5 for EXYNOS5 SoCs ARM: EXYNOS: add support get_core_count() for EXYNOS5250 ARM: EXYNOS: support EINT for EXYNOS4 and EXYNOS5 ARM: EXYNOS: add interrupt definitions for EXYNOS5250 ARM: EXYNOS: add support for EXYNOS5250 SoC ARM: EXYNOS: add support uart for EXYNOS4 and EXYNOS5 ARM: EXYNOS: add initial setup-i2c0 for EXYNOS5 ARM: EXYNOS: add clock part for EXYNOS5250 SoC ARM: EXYNOS: use exynos_init_uarts() instead of exynos4_init_uarts() ARM: EXYNOS: to declare static for mach-exynos/common.c ARM: EXYNOS: Add clkdev lookup entry for lcd clock
This commit is contained in:
commit
5da30bb6d9
34 changed files with 2939 additions and 326 deletions
arch/arm
Makefile
boot/dts
mach-exynos
KconfigMakefileclock-exynos4.cclock-exynos5.ccommon.ccommon.hdev-ahci.cdev-audio.cdev-uart.cdma.c
include/mach
mach-exynos4-dt.cmach-exynos5-dt.cmct.cplatsmp.csetup-i2c0.cplat-s5p
plat-samsung
|
@ -180,6 +180,7 @@ machine-$(CONFIG_ARCH_S5P64X0) := s5p64x0
|
|||
machine-$(CONFIG_ARCH_S5PC100) := s5pc100
|
||||
machine-$(CONFIG_ARCH_S5PV210) := s5pv210
|
||||
machine-$(CONFIG_ARCH_EXYNOS4) := exynos
|
||||
machine-$(CONFIG_ARCH_EXYNOS5) := exynos
|
||||
machine-$(CONFIG_ARCH_SA1100) := sa1100
|
||||
machine-$(CONFIG_ARCH_SHARK) := shark
|
||||
machine-$(CONFIG_ARCH_SHMOBILE) := shmobile
|
||||
|
|
26
arch/arm/boot/dts/exynos5250-smdk5250.dts
Normal file
26
arch/arm/boot/dts/exynos5250-smdk5250.dts
Normal file
|
@ -0,0 +1,26 @@
|
|||
/*
|
||||
* SAMSUNG SMDK5250 board device tree source
|
||||
*
|
||||
* Copyright (c) 2012 Samsung Electronics Co., Ltd.
|
||||
* http://www.samsung.com
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "exynos5250.dtsi"
|
||||
|
||||
/ {
|
||||
model = "SAMSUNG SMDK5250 board based on EXYNOS5250";
|
||||
compatible = "samsung,smdk5250", "samsung,exynos5250";
|
||||
|
||||
memory {
|
||||
reg = <0x40000000 0x80000000>;
|
||||
};
|
||||
|
||||
chosen {
|
||||
bootargs = "root=/dev/ram0 rw ramdisk=8192 console=ttySAC1,115200";
|
||||
};
|
||||
};
|
413
arch/arm/boot/dts/exynos5250.dtsi
Normal file
413
arch/arm/boot/dts/exynos5250.dtsi
Normal file
|
@ -0,0 +1,413 @@
|
|||
/*
|
||||
* SAMSUNG EXYNOS5250 SoC device tree source
|
||||
*
|
||||
* Copyright (c) 2012 Samsung Electronics Co., Ltd.
|
||||
* http://www.samsung.com
|
||||
*
|
||||
* SAMSUNG EXYNOS5250 SoC device nodes are listed in this file.
|
||||
* EXYNOS5250 based board files can include this file and provide
|
||||
* values for board specfic bindings.
|
||||
*
|
||||
* Note: This file does not include device nodes for all the controllers in
|
||||
* EXYNOS5250 SoC. As device tree coverage for EXYNOS5250 increases,
|
||||
* additional nodes can be added to this file.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/include/ "skeleton.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "samsung,exynos5250";
|
||||
interrupt-parent = <&gic>;
|
||||
|
||||
gic:interrupt-controller@10490000 {
|
||||
compatible = "arm,cortex-a9-gic";
|
||||
#interrupt-cells = <3>;
|
||||
interrupt-controller;
|
||||
reg = <0x10490000 0x1000>, <0x10480000 0x100>;
|
||||
};
|
||||
|
||||
watchdog {
|
||||
compatible = "samsung,s3c2410-wdt";
|
||||
reg = <0x101D0000 0x100>;
|
||||
interrupts = <0 42 0>;
|
||||
};
|
||||
|
||||
rtc {
|
||||
compatible = "samsung,s3c6410-rtc";
|
||||
reg = <0x101E0000 0x100>;
|
||||
interrupts = <0 43 0>, <0 44 0>;
|
||||
};
|
||||
|
||||
sdhci@12200000 {
|
||||
compatible = "samsung,exynos4210-sdhci";
|
||||
reg = <0x12200000 0x100>;
|
||||
interrupts = <0 75 0>;
|
||||
};
|
||||
|
||||
sdhci@12210000 {
|
||||
compatible = "samsung,exynos4210-sdhci";
|
||||
reg = <0x12210000 0x100>;
|
||||
interrupts = <0 76 0>;
|
||||
};
|
||||
|
||||
sdhci@12220000 {
|
||||
compatible = "samsung,exynos4210-sdhci";
|
||||
reg = <0x12220000 0x100>;
|
||||
interrupts = <0 77 0>;
|
||||
};
|
||||
|
||||
sdhci@12230000 {
|
||||
compatible = "samsung,exynos4210-sdhci";
|
||||
reg = <0x12230000 0x100>;
|
||||
interrupts = <0 78 0>;
|
||||
};
|
||||
|
||||
serial@12C00000 {
|
||||
compatible = "samsung,exynos4210-uart";
|
||||
reg = <0x12C00000 0x100>;
|
||||
interrupts = <0 51 0>;
|
||||
};
|
||||
|
||||
serial@12C10000 {
|
||||
compatible = "samsung,exynos4210-uart";
|
||||
reg = <0x12C10000 0x100>;
|
||||
interrupts = <0 52 0>;
|
||||
};
|
||||
|
||||
serial@12C20000 {
|
||||
compatible = "samsung,exynos4210-uart";
|
||||
reg = <0x12C20000 0x100>;
|
||||
interrupts = <0 53 0>;
|
||||
};
|
||||
|
||||
serial@12C30000 {
|
||||
compatible = "samsung,exynos4210-uart";
|
||||
reg = <0x12C30000 0x100>;
|
||||
interrupts = <0 54 0>;
|
||||
};
|
||||
|
||||
i2c@12C60000 {
|
||||
compatible = "samsung,s3c2440-i2c";
|
||||
reg = <0x12C60000 0x100>;
|
||||
interrupts = <0 56 0>;
|
||||
};
|
||||
|
||||
i2c@12C70000 {
|
||||
compatible = "samsung,s3c2440-i2c";
|
||||
reg = <0x12C70000 0x100>;
|
||||
interrupts = <0 57 0>;
|
||||
};
|
||||
|
||||
i2c@12C80000 {
|
||||
compatible = "samsung,s3c2440-i2c";
|
||||
reg = <0x12C80000 0x100>;
|
||||
interrupts = <0 58 0>;
|
||||
};
|
||||
|
||||
i2c@12C90000 {
|
||||
compatible = "samsung,s3c2440-i2c";
|
||||
reg = <0x12C90000 0x100>;
|
||||
interrupts = <0 59 0>;
|
||||
};
|
||||
|
||||
i2c@12CA0000 {
|
||||
compatible = "samsung,s3c2440-i2c";
|
||||
reg = <0x12CA0000 0x100>;
|
||||
interrupts = <0 60 0>;
|
||||
};
|
||||
|
||||
i2c@12CB0000 {
|
||||
compatible = "samsung,s3c2440-i2c";
|
||||
reg = <0x12CB0000 0x100>;
|
||||
interrupts = <0 61 0>;
|
||||
};
|
||||
|
||||
i2c@12CC0000 {
|
||||
compatible = "samsung,s3c2440-i2c";
|
||||
reg = <0x12CC0000 0x100>;
|
||||
interrupts = <0 62 0>;
|
||||
};
|
||||
|
||||
i2c@12CD0000 {
|
||||
compatible = "samsung,s3c2440-i2c";
|
||||
reg = <0x12CD0000 0x100>;
|
||||
interrupts = <0 63 0>;
|
||||
};
|
||||
|
||||
amba {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "arm,amba-bus";
|
||||
interrupt-parent = <&gic>;
|
||||
ranges;
|
||||
|
||||
pdma0: pdma@121A0000 {
|
||||
compatible = "arm,pl330", "arm,primecell";
|
||||
reg = <0x121A0000 0x1000>;
|
||||
interrupts = <0 34 0>;
|
||||
};
|
||||
|
||||
pdma1: pdma@121B0000 {
|
||||
compatible = "arm,pl330", "arm,primecell";
|
||||
reg = <0x121B0000 0x1000>;
|
||||
interrupts = <0 35 0>;
|
||||
};
|
||||
|
||||
mdma0: pdma@10800000 {
|
||||
compatible = "arm,pl330", "arm,primecell";
|
||||
reg = <0x10800000 0x1000>;
|
||||
interrupts = <0 33 0>;
|
||||
};
|
||||
|
||||
mdma1: pdma@11C10000 {
|
||||
compatible = "arm,pl330", "arm,primecell";
|
||||
reg = <0x11C10000 0x1000>;
|
||||
interrupts = <0 124 0>;
|
||||
};
|
||||
};
|
||||
|
||||
gpio-controllers {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
gpio-controller;
|
||||
ranges;
|
||||
|
||||
gpa0: gpio-controller@11400000 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x11400000 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpa1: gpio-controller@11400020 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x11400020 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpa2: gpio-controller@11400040 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x11400040 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpb0: gpio-controller@11400060 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x11400060 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpb1: gpio-controller@11400080 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x11400080 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpb2: gpio-controller@114000A0 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x114000A0 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpb3: gpio-controller@114000C0 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x114000C0 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpc0: gpio-controller@114000E0 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x114000E0 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpc1: gpio-controller@11400100 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x11400100 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpc2: gpio-controller@11400120 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x11400120 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpc3: gpio-controller@11400140 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x11400140 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpd0: gpio-controller@11400160 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x11400160 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpd1: gpio-controller@11400180 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x11400180 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpy0: gpio-controller@114001A0 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x114001A0 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpy1: gpio-controller@114001C0 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x114001C0 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpy2: gpio-controller@114001E0 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x114001E0 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpy3: gpio-controller@11400200 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x11400200 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpy4: gpio-controller@11400220 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x11400220 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpy5: gpio-controller@11400240 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x11400240 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpy6: gpio-controller@11400260 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x11400260 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpx0: gpio-controller@11400C00 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x11400C00 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpx1: gpio-controller@11400C20 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x11400C20 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpx2: gpio-controller@11400C40 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x11400C40 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpx3: gpio-controller@11400C60 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x11400C60 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpe0: gpio-controller@13400000 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x13400000 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpe1: gpio-controller@13400020 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x13400020 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpf0: gpio-controller@13400040 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x13400040 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpf1: gpio-controller@13400060 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x13400060 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpg0: gpio-controller@13400080 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x13400080 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpg1: gpio-controller@134000A0 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x134000A0 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpg2: gpio-controller@134000C0 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x134000C0 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gph0: gpio-controller@134000E0 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x134000E0 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gph1: gpio-controller@13400100 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x13400100 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpv0: gpio-controller@10D10000 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x10D10000 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpv1: gpio-controller@10D10020 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x10D10020 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpv2: gpio-controller@10D10040 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x10D10040 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpv3: gpio-controller@10D10060 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x10D10060 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpv4: gpio-controller@10D10080 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x10D10080 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
|
||||
gpz: gpio-controller@03860000 {
|
||||
compatible = "samsung,exynos4-gpio";
|
||||
reg = <0x03860000 0x20>;
|
||||
#gpio-cells = <4>;
|
||||
};
|
||||
};
|
||||
};
|
|
@ -11,18 +11,19 @@ if ARCH_EXYNOS
|
|||
|
||||
menu "SAMSUNG EXYNOS SoCs Support"
|
||||
|
||||
choice
|
||||
prompt "EXYNOS System Type"
|
||||
default ARCH_EXYNOS4
|
||||
|
||||
config ARCH_EXYNOS4
|
||||
bool "SAMSUNG EXYNOS4"
|
||||
default y
|
||||
select HAVE_SMP
|
||||
select MIGHT_HAVE_CACHE_L2X0
|
||||
help
|
||||
Samsung EXYNOS4 SoCs based systems
|
||||
|
||||
endchoice
|
||||
config ARCH_EXYNOS5
|
||||
bool "SAMSUNG EXYNOS5"
|
||||
select HAVE_SMP
|
||||
help
|
||||
Samsung EXYNOS5 (Cortex-A15) SoC based systems
|
||||
|
||||
comment "EXYNOS SoCs"
|
||||
|
||||
|
@ -55,6 +56,13 @@ config SOC_EXYNOS4412
|
|||
help
|
||||
Enable EXYNOS4412 SoC support
|
||||
|
||||
config SOC_EXYNOS5250
|
||||
bool "SAMSUNG EXYNOS5250"
|
||||
default y
|
||||
depends on ARCH_EXYNOS5
|
||||
help
|
||||
Enable EXYNOS5250 SoC support
|
||||
|
||||
config EXYNOS4_MCT
|
||||
bool
|
||||
default y
|
||||
|
@ -354,7 +362,7 @@ config MACH_SMDK4412
|
|||
Machine support for Samsung SMDK4412
|
||||
endif
|
||||
|
||||
comment "Flattened Device Tree based board for Exynos4 based SoC"
|
||||
comment "Flattened Device Tree based board for EXYNOS SoCs"
|
||||
|
||||
config MACH_EXYNOS4_DT
|
||||
bool "Samsung Exynos4 Machine using device tree"
|
||||
|
@ -368,6 +376,15 @@ config MACH_EXYNOS4_DT
|
|||
Note: This is under development and not all peripherals can be supported
|
||||
with this machine file.
|
||||
|
||||
config MACH_EXYNOS5_DT
|
||||
bool "SAMSUNG EXYNOS5 Machine using device tree"
|
||||
select SOC_EXYNOS5250
|
||||
select USE_OF
|
||||
select ARM_AMBA
|
||||
help
|
||||
Machine support for Samsung Exynos4 machine with device tree enabled.
|
||||
Select this if a fdt blob is available for the EXYNOS4 SoC based board.
|
||||
|
||||
if ARCH_EXYNOS4
|
||||
|
||||
comment "Configuration for HSMMC 8-bit bus width"
|
||||
|
|
|
@ -14,6 +14,7 @@ obj- :=
|
|||
|
||||
obj-$(CONFIG_ARCH_EXYNOS) += common.o
|
||||
obj-$(CONFIG_ARCH_EXYNOS4) += clock-exynos4.o
|
||||
obj-$(CONFIG_ARCH_EXYNOS5) += clock-exynos5.o
|
||||
obj-$(CONFIG_CPU_EXYNOS4210) += clock-exynos4210.o
|
||||
obj-$(CONFIG_SOC_EXYNOS4212) += clock-exynos4212.o
|
||||
|
||||
|
@ -41,9 +42,11 @@ obj-$(CONFIG_MACH_SMDK4212) += mach-smdk4x12.o
|
|||
obj-$(CONFIG_MACH_SMDK4412) += mach-smdk4x12.o
|
||||
|
||||
obj-$(CONFIG_MACH_EXYNOS4_DT) += mach-exynos4-dt.o
|
||||
obj-$(CONFIG_MACH_EXYNOS5_DT) += mach-exynos5-dt.o
|
||||
|
||||
# device support
|
||||
|
||||
obj-y += dev-uart.o
|
||||
obj-$(CONFIG_ARCH_EXYNOS4) += dev-audio.o
|
||||
obj-$(CONFIG_EXYNOS4_DEV_AHCI) += dev-ahci.o
|
||||
obj-$(CONFIG_EXYNOS4_DEV_PD) += dev-pd.o
|
||||
|
@ -52,7 +55,7 @@ obj-$(CONFIG_EXYNOS4_DEV_DWMCI) += dev-dwmci.o
|
|||
obj-$(CONFIG_EXYNOS4_DEV_DMA) += dma.o
|
||||
obj-$(CONFIG_EXYNOS4_DEV_USB_OHCI) += dev-ohci.o
|
||||
|
||||
obj-$(CONFIG_ARCH_EXYNOS4) += setup-i2c0.o
|
||||
obj-$(CONFIG_ARCH_EXYNOS) += setup-i2c0.o
|
||||
obj-$(CONFIG_EXYNOS4_SETUP_FIMC) += setup-fimc.o
|
||||
obj-$(CONFIG_EXYNOS4_SETUP_FIMD0) += setup-fimd0.o
|
||||
obj-$(CONFIG_EXYNOS4_SETUP_I2C1) += setup-i2c1.o
|
||||
|
|
|
@ -490,11 +490,6 @@ static struct clk exynos4_init_clocks_off[] = {
|
|||
.devname = "exynos4-fimc.3",
|
||||
.enable = exynos4_clk_ip_cam_ctrl,
|
||||
.ctrlbit = (1 << 3),
|
||||
}, {
|
||||
.name = "fimd",
|
||||
.devname = "exynos4-fb.0",
|
||||
.enable = exynos4_clk_ip_lcd0_ctrl,
|
||||
.ctrlbit = (1 << 0),
|
||||
}, {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.0",
|
||||
|
@ -791,6 +786,13 @@ static struct clk exynos4_clk_mdma1 = {
|
|||
.ctrlbit = ((1 << 8) | (1 << 5) | (1 << 2)),
|
||||
};
|
||||
|
||||
static struct clk exynos4_clk_fimd0 = {
|
||||
.name = "fimd",
|
||||
.devname = "exynos4-fb.0",
|
||||
.enable = exynos4_clk_ip_lcd0_ctrl,
|
||||
.ctrlbit = (1 << 0),
|
||||
};
|
||||
|
||||
struct clk *exynos4_clkset_group_list[] = {
|
||||
[0] = &clk_ext_xtal_mux,
|
||||
[1] = &clk_xusbxti,
|
||||
|
@ -1310,6 +1312,7 @@ static struct clk *exynos4_clk_cdev[] = {
|
|||
&exynos4_clk_pdma0,
|
||||
&exynos4_clk_pdma1,
|
||||
&exynos4_clk_mdma1,
|
||||
&exynos4_clk_fimd0,
|
||||
};
|
||||
|
||||
static struct clksrc_clk *exynos4_clksrc_cdev[] = {
|
||||
|
@ -1336,6 +1339,7 @@ static struct clk_lookup exynos4_clk_lookup[] = {
|
|||
CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &exynos4_clk_sclk_mmc1.clk),
|
||||
CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.2", &exynos4_clk_sclk_mmc2.clk),
|
||||
CLKDEV_INIT("s3c-sdhci.3", "mmc_busclk.2", &exynos4_clk_sclk_mmc3.clk),
|
||||
CLKDEV_INIT("exynos4-fb.0", "lcd", &exynos4_clk_fimd0),
|
||||
CLKDEV_INIT("dma-pl330.0", "apb_pclk", &exynos4_clk_pdma0),
|
||||
CLKDEV_INIT("dma-pl330.1", "apb_pclk", &exynos4_clk_pdma1),
|
||||
CLKDEV_INIT("dma-pl330.2", "apb_pclk", &exynos4_clk_mdma1),
|
||||
|
|
1247
arch/arm/mach-exynos/clock-exynos5.c
Normal file
1247
arch/arm/mach-exynos/clock-exynos5.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -49,6 +49,14 @@
|
|||
static const char name_exynos4210[] = "EXYNOS4210";
|
||||
static const char name_exynos4212[] = "EXYNOS4212";
|
||||
static const char name_exynos4412[] = "EXYNOS4412";
|
||||
static const char name_exynos5250[] = "EXYNOS5250";
|
||||
|
||||
static void exynos4_map_io(void);
|
||||
static void exynos5_map_io(void);
|
||||
static void exynos4_init_clocks(int xtal);
|
||||
static void exynos5_init_clocks(int xtal);
|
||||
static void exynos_init_uarts(struct s3c2410_uartcfg *cfg, int no);
|
||||
static int exynos_init(void);
|
||||
|
||||
static struct cpu_table cpu_ids[] __initdata = {
|
||||
{
|
||||
|
@ -56,7 +64,7 @@ static struct cpu_table cpu_ids[] __initdata = {
|
|||
.idmask = EXYNOS4_CPU_MASK,
|
||||
.map_io = exynos4_map_io,
|
||||
.init_clocks = exynos4_init_clocks,
|
||||
.init_uarts = exynos4_init_uarts,
|
||||
.init_uarts = exynos_init_uarts,
|
||||
.init = exynos_init,
|
||||
.name = name_exynos4210,
|
||||
}, {
|
||||
|
@ -64,7 +72,7 @@ static struct cpu_table cpu_ids[] __initdata = {
|
|||
.idmask = EXYNOS4_CPU_MASK,
|
||||
.map_io = exynos4_map_io,
|
||||
.init_clocks = exynos4_init_clocks,
|
||||
.init_uarts = exynos4_init_uarts,
|
||||
.init_uarts = exynos_init_uarts,
|
||||
.init = exynos_init,
|
||||
.name = name_exynos4212,
|
||||
}, {
|
||||
|
@ -72,9 +80,17 @@ static struct cpu_table cpu_ids[] __initdata = {
|
|||
.idmask = EXYNOS4_CPU_MASK,
|
||||
.map_io = exynos4_map_io,
|
||||
.init_clocks = exynos4_init_clocks,
|
||||
.init_uarts = exynos4_init_uarts,
|
||||
.init_uarts = exynos_init_uarts,
|
||||
.init = exynos_init,
|
||||
.name = name_exynos4412,
|
||||
}, {
|
||||
.idcode = EXYNOS5250_SOC_ID,
|
||||
.idmask = EXYNOS5_SOC_MASK,
|
||||
.map_io = exynos5_map_io,
|
||||
.init_clocks = exynos5_init_clocks,
|
||||
.init_uarts = exynos_init_uarts,
|
||||
.init = exynos_init,
|
||||
.name = name_exynos5250,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -83,10 +99,14 @@ static struct cpu_table cpu_ids[] __initdata = {
|
|||
static struct map_desc exynos_iodesc[] __initdata = {
|
||||
{
|
||||
.virtual = (unsigned long)S5P_VA_CHIPID,
|
||||
.pfn = __phys_to_pfn(EXYNOS4_PA_CHIPID),
|
||||
.pfn = __phys_to_pfn(EXYNOS_PA_CHIPID),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE,
|
||||
}, {
|
||||
},
|
||||
};
|
||||
|
||||
static struct map_desc exynos4_iodesc[] __initdata = {
|
||||
{
|
||||
.virtual = (unsigned long)S3C_VA_SYS,
|
||||
.pfn = __phys_to_pfn(EXYNOS4_PA_SYSCON),
|
||||
.length = SZ_64K,
|
||||
|
@ -136,11 +156,7 @@ static struct map_desc exynos_iodesc[] __initdata = {
|
|||
.pfn = __phys_to_pfn(EXYNOS4_PA_UART),
|
||||
.length = SZ_512K,
|
||||
.type = MT_DEVICE,
|
||||
},
|
||||
};
|
||||
|
||||
static struct map_desc exynos4_iodesc[] __initdata = {
|
||||
{
|
||||
}, {
|
||||
.virtual = (unsigned long)S5P_VA_CMU,
|
||||
.pfn = __phys_to_pfn(EXYNOS4_PA_CMU),
|
||||
.length = SZ_128K,
|
||||
|
@ -201,11 +217,80 @@ static struct map_desc exynos4_iodesc1[] __initdata = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct map_desc exynos5_iodesc[] __initdata = {
|
||||
{
|
||||
.virtual = (unsigned long)S3C_VA_SYS,
|
||||
.pfn = __phys_to_pfn(EXYNOS5_PA_SYSCON),
|
||||
.length = SZ_64K,
|
||||
.type = MT_DEVICE,
|
||||
}, {
|
||||
.virtual = (unsigned long)S3C_VA_TIMER,
|
||||
.pfn = __phys_to_pfn(EXYNOS5_PA_TIMER),
|
||||
.length = SZ_16K,
|
||||
.type = MT_DEVICE,
|
||||
}, {
|
||||
.virtual = (unsigned long)S3C_VA_WATCHDOG,
|
||||
.pfn = __phys_to_pfn(EXYNOS5_PA_WATCHDOG),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE,
|
||||
}, {
|
||||
.virtual = (unsigned long)S5P_VA_SROMC,
|
||||
.pfn = __phys_to_pfn(EXYNOS5_PA_SROMC),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE,
|
||||
}, {
|
||||
.virtual = (unsigned long)S5P_VA_SYSTIMER,
|
||||
.pfn = __phys_to_pfn(EXYNOS5_PA_SYSTIMER),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE,
|
||||
}, {
|
||||
.virtual = (unsigned long)S5P_VA_SYSRAM,
|
||||
.pfn = __phys_to_pfn(EXYNOS5_PA_SYSRAM),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE,
|
||||
}, {
|
||||
.virtual = (unsigned long)S5P_VA_CMU,
|
||||
.pfn = __phys_to_pfn(EXYNOS5_PA_CMU),
|
||||
.length = 144 * SZ_1K,
|
||||
.type = MT_DEVICE,
|
||||
}, {
|
||||
.virtual = (unsigned long)S5P_VA_PMU,
|
||||
.pfn = __phys_to_pfn(EXYNOS5_PA_PMU),
|
||||
.length = SZ_64K,
|
||||
.type = MT_DEVICE,
|
||||
}, {
|
||||
.virtual = (unsigned long)S5P_VA_COMBINER_BASE,
|
||||
.pfn = __phys_to_pfn(EXYNOS5_PA_COMBINER),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE,
|
||||
}, {
|
||||
.virtual = (unsigned long)S3C_VA_UART,
|
||||
.pfn = __phys_to_pfn(EXYNOS5_PA_UART),
|
||||
.length = SZ_512K,
|
||||
.type = MT_DEVICE,
|
||||
}, {
|
||||
.virtual = (unsigned long)S5P_VA_GIC_CPU,
|
||||
.pfn = __phys_to_pfn(EXYNOS5_PA_GIC_CPU),
|
||||
.length = SZ_64K,
|
||||
.type = MT_DEVICE,
|
||||
}, {
|
||||
.virtual = (unsigned long)S5P_VA_GIC_DIST,
|
||||
.pfn = __phys_to_pfn(EXYNOS5_PA_GIC_DIST),
|
||||
.length = SZ_64K,
|
||||
.type = MT_DEVICE,
|
||||
},
|
||||
};
|
||||
|
||||
void exynos4_restart(char mode, const char *cmd)
|
||||
{
|
||||
__raw_writel(0x1, S5P_SWRESET);
|
||||
}
|
||||
|
||||
void exynos5_restart(char mode, const char *cmd)
|
||||
{
|
||||
__raw_writel(0x1, EXYNOS_SWRESET);
|
||||
}
|
||||
|
||||
/*
|
||||
* exynos_map_io
|
||||
*
|
||||
|
@ -225,7 +310,7 @@ void __init exynos_init_io(struct map_desc *mach_desc, int size)
|
|||
s3c_init_cpu(samsung_cpu_id, cpu_ids, ARRAY_SIZE(cpu_ids));
|
||||
}
|
||||
|
||||
void __init exynos4_map_io(void)
|
||||
static void __init exynos4_map_io(void)
|
||||
{
|
||||
iotable_init(exynos4_iodesc, ARRAY_SIZE(exynos4_iodesc));
|
||||
|
||||
|
@ -256,7 +341,22 @@ void __init exynos4_map_io(void)
|
|||
s5p_hdmi_setname("exynos4-hdmi");
|
||||
}
|
||||
|
||||
void __init exynos4_init_clocks(int xtal)
|
||||
static void __init exynos5_map_io(void)
|
||||
{
|
||||
iotable_init(exynos5_iodesc, ARRAY_SIZE(exynos5_iodesc));
|
||||
|
||||
s3c_device_i2c0.resource[0].start = EXYNOS5_PA_IIC(0);
|
||||
s3c_device_i2c0.resource[0].end = EXYNOS5_PA_IIC(0) + SZ_4K - 1;
|
||||
s3c_device_i2c0.resource[1].start = EXYNOS5_IRQ_IIC;
|
||||
s3c_device_i2c0.resource[1].end = EXYNOS5_IRQ_IIC;
|
||||
|
||||
/* The I2C bus controllers are directly compatible with s3c2440 */
|
||||
s3c_i2c0_setname("s3c2440-i2c");
|
||||
s3c_i2c1_setname("s3c2440-i2c");
|
||||
s3c_i2c2_setname("s3c2440-i2c");
|
||||
}
|
||||
|
||||
static void __init exynos4_init_clocks(int xtal)
|
||||
{
|
||||
printk(KERN_DEBUG "%s: initializing clocks\n", __func__);
|
||||
|
||||
|
@ -272,6 +372,17 @@ void __init exynos4_init_clocks(int xtal)
|
|||
exynos4_setup_clocks();
|
||||
}
|
||||
|
||||
static void __init exynos5_init_clocks(int xtal)
|
||||
{
|
||||
printk(KERN_DEBUG "%s: initializing clocks\n", __func__);
|
||||
|
||||
s3c24xx_register_baseclocks(xtal);
|
||||
s5p_register_clocks(xtal);
|
||||
|
||||
exynos5_register_clocks();
|
||||
exynos5_setup_clocks();
|
||||
}
|
||||
|
||||
#define COMBINER_ENABLE_SET 0x0
|
||||
#define COMBINER_ENABLE_CLEAR 0x4
|
||||
#define COMBINER_INT_STATUS 0xC
|
||||
|
@ -345,7 +456,14 @@ static struct irq_chip combiner_chip = {
|
|||
|
||||
static void __init combiner_cascade_irq(unsigned int combiner_nr, unsigned int irq)
|
||||
{
|
||||
if (combiner_nr >= MAX_COMBINER_NR)
|
||||
unsigned int max_nr;
|
||||
|
||||
if (soc_is_exynos5250())
|
||||
max_nr = EXYNOS5_MAX_COMBINER_NR;
|
||||
else
|
||||
max_nr = EXYNOS4_MAX_COMBINER_NR;
|
||||
|
||||
if (combiner_nr >= max_nr)
|
||||
BUG();
|
||||
if (irq_set_handler_data(irq, &combiner_data[combiner_nr]) != 0)
|
||||
BUG();
|
||||
|
@ -356,8 +474,14 @@ static void __init combiner_init(unsigned int combiner_nr, void __iomem *base,
|
|||
unsigned int irq_start)
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned int max_nr;
|
||||
|
||||
if (combiner_nr >= MAX_COMBINER_NR)
|
||||
if (soc_is_exynos5250())
|
||||
max_nr = EXYNOS5_MAX_COMBINER_NR;
|
||||
else
|
||||
max_nr = EXYNOS4_MAX_COMBINER_NR;
|
||||
|
||||
if (combiner_nr >= max_nr)
|
||||
BUG();
|
||||
|
||||
combiner_data[combiner_nr].base = base;
|
||||
|
@ -400,7 +524,7 @@ void __init exynos4_init_irq(void)
|
|||
of_irq_init(exynos4_dt_irq_match);
|
||||
#endif
|
||||
|
||||
for (irq = 0; irq < MAX_COMBINER_NR; irq++) {
|
||||
for (irq = 0; irq < EXYNOS4_MAX_COMBINER_NR; irq++) {
|
||||
|
||||
combiner_init(irq, (void __iomem *)S5P_VA_COMBINER(irq),
|
||||
COMBINER_IRQ(irq, 0));
|
||||
|
@ -415,24 +539,59 @@ void __init exynos4_init_irq(void)
|
|||
s5p_init_irq(NULL, 0);
|
||||
}
|
||||
|
||||
void __init exynos5_init_irq(void)
|
||||
{
|
||||
int irq;
|
||||
|
||||
gic_init(0, IRQ_PPI(0), S5P_VA_GIC_DIST, S5P_VA_GIC_CPU);
|
||||
|
||||
for (irq = 0; irq < EXYNOS5_MAX_COMBINER_NR; irq++) {
|
||||
combiner_init(irq, (void __iomem *)S5P_VA_COMBINER(irq),
|
||||
COMBINER_IRQ(irq, 0));
|
||||
combiner_cascade_irq(irq, IRQ_SPI(irq));
|
||||
}
|
||||
|
||||
/*
|
||||
* The parameters of s5p_init_irq() are for VIC init.
|
||||
* Theses parameters should be NULL and 0 because EXYNOS4
|
||||
* uses GIC instead of VIC.
|
||||
*/
|
||||
s5p_init_irq(NULL, 0);
|
||||
}
|
||||
|
||||
struct bus_type exynos4_subsys = {
|
||||
.name = "exynos4-core",
|
||||
.dev_name = "exynos4-core",
|
||||
};
|
||||
|
||||
struct bus_type exynos5_subsys = {
|
||||
.name = "exynos5-core",
|
||||
.dev_name = "exynos5-core",
|
||||
};
|
||||
|
||||
static struct device exynos4_dev = {
|
||||
.bus = &exynos4_subsys,
|
||||
};
|
||||
|
||||
static int __init exynos4_core_init(void)
|
||||
static struct device exynos5_dev = {
|
||||
.bus = &exynos5_subsys,
|
||||
};
|
||||
|
||||
static int __init exynos_core_init(void)
|
||||
{
|
||||
return subsys_system_register(&exynos4_subsys, NULL);
|
||||
if (soc_is_exynos5250())
|
||||
return subsys_system_register(&exynos5_subsys, NULL);
|
||||
else
|
||||
return subsys_system_register(&exynos4_subsys, NULL);
|
||||
}
|
||||
core_initcall(exynos4_core_init);
|
||||
core_initcall(exynos_core_init);
|
||||
|
||||
#ifdef CONFIG_CACHE_L2X0
|
||||
static int __init exynos4_l2x0_cache_init(void)
|
||||
{
|
||||
if (soc_is_exynos5250())
|
||||
return 0;
|
||||
|
||||
/* TAG, Data Latency Control: 2cycle */
|
||||
__raw_writel(0x110, S5P_VA_L2CC + L2X0_TAG_LATENCY_CTRL);
|
||||
|
||||
|
@ -452,19 +611,47 @@ static int __init exynos4_l2x0_cache_init(void)
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
early_initcall(exynos4_l2x0_cache_init);
|
||||
#endif
|
||||
|
||||
int __init exynos_init(void)
|
||||
static int __init exynos5_l2_cache_init(void)
|
||||
{
|
||||
unsigned int val;
|
||||
|
||||
if (!soc_is_exynos5250())
|
||||
return 0;
|
||||
|
||||
asm volatile("mrc p15, 0, %0, c1, c0, 0\n"
|
||||
"bic %0, %0, #(1 << 2)\n" /* cache disable */
|
||||
"mcr p15, 0, %0, c1, c0, 0\n"
|
||||
"mrc p15, 1, %0, c9, c0, 2\n"
|
||||
: "=r"(val));
|
||||
|
||||
val |= (1 << 9) | (1 << 5) | (2 << 6) | (2 << 0);
|
||||
|
||||
asm volatile("mcr p15, 1, %0, c9, c0, 2\n" : : "r"(val));
|
||||
asm volatile("mrc p15, 0, %0, c1, c0, 0\n"
|
||||
"orr %0, %0, #(1 << 2)\n" /* cache enable */
|
||||
"mcr p15, 0, %0, c1, c0, 0\n"
|
||||
: : "r"(val));
|
||||
|
||||
return 0;
|
||||
}
|
||||
early_initcall(exynos5_l2_cache_init);
|
||||
|
||||
static int __init exynos_init(void)
|
||||
{
|
||||
printk(KERN_INFO "EXYNOS: Initializing architecture\n");
|
||||
return device_register(&exynos4_dev);
|
||||
|
||||
if (soc_is_exynos5250())
|
||||
return device_register(&exynos5_dev);
|
||||
else
|
||||
return device_register(&exynos4_dev);
|
||||
}
|
||||
|
||||
/* uart registration process */
|
||||
|
||||
void __init exynos4_init_uarts(struct s3c2410_uartcfg *cfg, int no)
|
||||
static void __init exynos_init_uarts(struct s3c2410_uartcfg *cfg, int no)
|
||||
{
|
||||
struct s3c2410_uartcfg *tcfg = cfg;
|
||||
u32 ucnt;
|
||||
|
@ -472,69 +659,138 @@ void __init exynos4_init_uarts(struct s3c2410_uartcfg *cfg, int no)
|
|||
for (ucnt = 0; ucnt < no; ucnt++, tcfg++)
|
||||
tcfg->has_fracval = 1;
|
||||
|
||||
s3c24xx_init_uartdevs("exynos4210-uart", s5p_uart_resources, cfg, no);
|
||||
if (soc_is_exynos5250())
|
||||
s3c24xx_init_uartdevs("exynos4210-uart", exynos5_uart_resources, cfg, no);
|
||||
else
|
||||
s3c24xx_init_uartdevs("exynos4210-uart", exynos4_uart_resources, cfg, no);
|
||||
}
|
||||
|
||||
static void __iomem *exynos_eint_base;
|
||||
|
||||
static DEFINE_SPINLOCK(eint_lock);
|
||||
|
||||
static unsigned int eint0_15_data[16];
|
||||
|
||||
static unsigned int exynos4_get_irq_nr(unsigned int number)
|
||||
static inline int exynos4_irq_to_gpio(unsigned int irq)
|
||||
{
|
||||
u32 ret = 0;
|
||||
if (irq < IRQ_EINT(0))
|
||||
return -EINVAL;
|
||||
|
||||
switch (number) {
|
||||
case 0 ... 3:
|
||||
ret = (number + IRQ_EINT0);
|
||||
break;
|
||||
case 4 ... 7:
|
||||
ret = (number + (IRQ_EINT4 - 4));
|
||||
break;
|
||||
case 8 ... 15:
|
||||
ret = (number + (IRQ_EINT8 - 8));
|
||||
break;
|
||||
default:
|
||||
printk(KERN_ERR "number available : %d\n", number);
|
||||
}
|
||||
irq -= IRQ_EINT(0);
|
||||
if (irq < 8)
|
||||
return EXYNOS4_GPX0(irq);
|
||||
|
||||
return ret;
|
||||
irq -= 8;
|
||||
if (irq < 8)
|
||||
return EXYNOS4_GPX1(irq);
|
||||
|
||||
irq -= 8;
|
||||
if (irq < 8)
|
||||
return EXYNOS4_GPX2(irq);
|
||||
|
||||
irq -= 8;
|
||||
if (irq < 8)
|
||||
return EXYNOS4_GPX3(irq);
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline void exynos4_irq_eint_mask(struct irq_data *data)
|
||||
static inline int exynos5_irq_to_gpio(unsigned int irq)
|
||||
{
|
||||
if (irq < IRQ_EINT(0))
|
||||
return -EINVAL;
|
||||
|
||||
irq -= IRQ_EINT(0);
|
||||
if (irq < 8)
|
||||
return EXYNOS5_GPX0(irq);
|
||||
|
||||
irq -= 8;
|
||||
if (irq < 8)
|
||||
return EXYNOS5_GPX1(irq);
|
||||
|
||||
irq -= 8;
|
||||
if (irq < 8)
|
||||
return EXYNOS5_GPX2(irq);
|
||||
|
||||
irq -= 8;
|
||||
if (irq < 8)
|
||||
return EXYNOS5_GPX3(irq);
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static unsigned int exynos4_eint0_15_src_int[16] = {
|
||||
EXYNOS4_IRQ_EINT0,
|
||||
EXYNOS4_IRQ_EINT1,
|
||||
EXYNOS4_IRQ_EINT2,
|
||||
EXYNOS4_IRQ_EINT3,
|
||||
EXYNOS4_IRQ_EINT4,
|
||||
EXYNOS4_IRQ_EINT5,
|
||||
EXYNOS4_IRQ_EINT6,
|
||||
EXYNOS4_IRQ_EINT7,
|
||||
EXYNOS4_IRQ_EINT8,
|
||||
EXYNOS4_IRQ_EINT9,
|
||||
EXYNOS4_IRQ_EINT10,
|
||||
EXYNOS4_IRQ_EINT11,
|
||||
EXYNOS4_IRQ_EINT12,
|
||||
EXYNOS4_IRQ_EINT13,
|
||||
EXYNOS4_IRQ_EINT14,
|
||||
EXYNOS4_IRQ_EINT15,
|
||||
};
|
||||
|
||||
static unsigned int exynos5_eint0_15_src_int[16] = {
|
||||
EXYNOS5_IRQ_EINT0,
|
||||
EXYNOS5_IRQ_EINT1,
|
||||
EXYNOS5_IRQ_EINT2,
|
||||
EXYNOS5_IRQ_EINT3,
|
||||
EXYNOS5_IRQ_EINT4,
|
||||
EXYNOS5_IRQ_EINT5,
|
||||
EXYNOS5_IRQ_EINT6,
|
||||
EXYNOS5_IRQ_EINT7,
|
||||
EXYNOS5_IRQ_EINT8,
|
||||
EXYNOS5_IRQ_EINT9,
|
||||
EXYNOS5_IRQ_EINT10,
|
||||
EXYNOS5_IRQ_EINT11,
|
||||
EXYNOS5_IRQ_EINT12,
|
||||
EXYNOS5_IRQ_EINT13,
|
||||
EXYNOS5_IRQ_EINT14,
|
||||
EXYNOS5_IRQ_EINT15,
|
||||
};
|
||||
static inline void exynos_irq_eint_mask(struct irq_data *data)
|
||||
{
|
||||
u32 mask;
|
||||
|
||||
spin_lock(&eint_lock);
|
||||
mask = __raw_readl(S5P_EINT_MASK(EINT_REG_NR(data->irq)));
|
||||
mask |= eint_irq_to_bit(data->irq);
|
||||
__raw_writel(mask, S5P_EINT_MASK(EINT_REG_NR(data->irq)));
|
||||
mask = __raw_readl(EINT_MASK(exynos_eint_base, data->irq));
|
||||
mask |= EINT_OFFSET_BIT(data->irq);
|
||||
__raw_writel(mask, EINT_MASK(exynos_eint_base, data->irq));
|
||||
spin_unlock(&eint_lock);
|
||||
}
|
||||
|
||||
static void exynos4_irq_eint_unmask(struct irq_data *data)
|
||||
static void exynos_irq_eint_unmask(struct irq_data *data)
|
||||
{
|
||||
u32 mask;
|
||||
|
||||
spin_lock(&eint_lock);
|
||||
mask = __raw_readl(S5P_EINT_MASK(EINT_REG_NR(data->irq)));
|
||||
mask &= ~(eint_irq_to_bit(data->irq));
|
||||
__raw_writel(mask, S5P_EINT_MASK(EINT_REG_NR(data->irq)));
|
||||
mask = __raw_readl(EINT_MASK(exynos_eint_base, data->irq));
|
||||
mask &= ~(EINT_OFFSET_BIT(data->irq));
|
||||
__raw_writel(mask, EINT_MASK(exynos_eint_base, data->irq));
|
||||
spin_unlock(&eint_lock);
|
||||
}
|
||||
|
||||
static inline void exynos4_irq_eint_ack(struct irq_data *data)
|
||||
static inline void exynos_irq_eint_ack(struct irq_data *data)
|
||||
{
|
||||
__raw_writel(eint_irq_to_bit(data->irq),
|
||||
S5P_EINT_PEND(EINT_REG_NR(data->irq)));
|
||||
__raw_writel(EINT_OFFSET_BIT(data->irq),
|
||||
EINT_PEND(exynos_eint_base, data->irq));
|
||||
}
|
||||
|
||||
static void exynos4_irq_eint_maskack(struct irq_data *data)
|
||||
static void exynos_irq_eint_maskack(struct irq_data *data)
|
||||
{
|
||||
exynos4_irq_eint_mask(data);
|
||||
exynos4_irq_eint_ack(data);
|
||||
exynos_irq_eint_mask(data);
|
||||
exynos_irq_eint_ack(data);
|
||||
}
|
||||
|
||||
static int exynos4_irq_eint_set_type(struct irq_data *data, unsigned int type)
|
||||
static int exynos_irq_eint_set_type(struct irq_data *data, unsigned int type)
|
||||
{
|
||||
int offs = EINT_OFFSET(data->irq);
|
||||
int shift;
|
||||
|
@ -571,39 +827,27 @@ static int exynos4_irq_eint_set_type(struct irq_data *data, unsigned int type)
|
|||
mask = 0x7 << shift;
|
||||
|
||||
spin_lock(&eint_lock);
|
||||
ctrl = __raw_readl(S5P_EINT_CON(EINT_REG_NR(data->irq)));
|
||||
ctrl = __raw_readl(EINT_CON(exynos_eint_base, data->irq));
|
||||
ctrl &= ~mask;
|
||||
ctrl |= newvalue << shift;
|
||||
__raw_writel(ctrl, S5P_EINT_CON(EINT_REG_NR(data->irq)));
|
||||
__raw_writel(ctrl, EINT_CON(exynos_eint_base, data->irq));
|
||||
spin_unlock(&eint_lock);
|
||||
|
||||
switch (offs) {
|
||||
case 0 ... 7:
|
||||
s3c_gpio_cfgpin(EINT_GPIO_0(offs & 0x7), EINT_MODE);
|
||||
break;
|
||||
case 8 ... 15:
|
||||
s3c_gpio_cfgpin(EINT_GPIO_1(offs & 0x7), EINT_MODE);
|
||||
break;
|
||||
case 16 ... 23:
|
||||
s3c_gpio_cfgpin(EINT_GPIO_2(offs & 0x7), EINT_MODE);
|
||||
break;
|
||||
case 24 ... 31:
|
||||
s3c_gpio_cfgpin(EINT_GPIO_3(offs & 0x7), EINT_MODE);
|
||||
break;
|
||||
default:
|
||||
printk(KERN_ERR "No such irq number %d", offs);
|
||||
}
|
||||
if (soc_is_exynos5250())
|
||||
s3c_gpio_cfgpin(exynos5_irq_to_gpio(data->irq), S3C_GPIO_SFN(0xf));
|
||||
else
|
||||
s3c_gpio_cfgpin(exynos4_irq_to_gpio(data->irq), S3C_GPIO_SFN(0xf));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct irq_chip exynos4_irq_eint = {
|
||||
.name = "exynos4-eint",
|
||||
.irq_mask = exynos4_irq_eint_mask,
|
||||
.irq_unmask = exynos4_irq_eint_unmask,
|
||||
.irq_mask_ack = exynos4_irq_eint_maskack,
|
||||
.irq_ack = exynos4_irq_eint_ack,
|
||||
.irq_set_type = exynos4_irq_eint_set_type,
|
||||
static struct irq_chip exynos_irq_eint = {
|
||||
.name = "exynos-eint",
|
||||
.irq_mask = exynos_irq_eint_mask,
|
||||
.irq_unmask = exynos_irq_eint_unmask,
|
||||
.irq_mask_ack = exynos_irq_eint_maskack,
|
||||
.irq_ack = exynos_irq_eint_ack,
|
||||
.irq_set_type = exynos_irq_eint_set_type,
|
||||
#ifdef CONFIG_PM
|
||||
.irq_set_wake = s3c_irqext_wake,
|
||||
#endif
|
||||
|
@ -618,12 +862,12 @@ static struct irq_chip exynos4_irq_eint = {
|
|||
*
|
||||
* Each EINT pend/mask registers handle eight of them.
|
||||
*/
|
||||
static inline void exynos4_irq_demux_eint(unsigned int start)
|
||||
static inline void exynos_irq_demux_eint(unsigned int start)
|
||||
{
|
||||
unsigned int irq;
|
||||
|
||||
u32 status = __raw_readl(S5P_EINT_PEND(EINT_REG_NR(start)));
|
||||
u32 mask = __raw_readl(S5P_EINT_MASK(EINT_REG_NR(start)));
|
||||
u32 status = __raw_readl(EINT_PEND(exynos_eint_base, start));
|
||||
u32 mask = __raw_readl(EINT_MASK(exynos_eint_base, start));
|
||||
|
||||
status &= ~mask;
|
||||
status &= 0xff;
|
||||
|
@ -635,16 +879,16 @@ static inline void exynos4_irq_demux_eint(unsigned int start)
|
|||
}
|
||||
}
|
||||
|
||||
static void exynos4_irq_demux_eint16_31(unsigned int irq, struct irq_desc *desc)
|
||||
static void exynos_irq_demux_eint16_31(unsigned int irq, struct irq_desc *desc)
|
||||
{
|
||||
struct irq_chip *chip = irq_get_chip(irq);
|
||||
chained_irq_enter(chip, desc);
|
||||
exynos4_irq_demux_eint(IRQ_EINT(16));
|
||||
exynos4_irq_demux_eint(IRQ_EINT(24));
|
||||
exynos_irq_demux_eint(IRQ_EINT(16));
|
||||
exynos_irq_demux_eint(IRQ_EINT(24));
|
||||
chained_irq_exit(chip, desc);
|
||||
}
|
||||
|
||||
static void exynos4_irq_eint0_15(unsigned int irq, struct irq_desc *desc)
|
||||
static void exynos_irq_eint0_15(unsigned int irq, struct irq_desc *desc)
|
||||
{
|
||||
u32 *irq_data = irq_get_handler_data(irq);
|
||||
struct irq_chip *chip = irq_get_chip(irq);
|
||||
|
@ -661,27 +905,44 @@ static void exynos4_irq_eint0_15(unsigned int irq, struct irq_desc *desc)
|
|||
chained_irq_exit(chip, desc);
|
||||
}
|
||||
|
||||
static int __init exynos4_init_irq_eint(void)
|
||||
static int __init exynos_init_irq_eint(void)
|
||||
{
|
||||
int irq;
|
||||
|
||||
if (soc_is_exynos5250())
|
||||
exynos_eint_base = ioremap(EXYNOS5_PA_GPIO1, SZ_4K);
|
||||
else
|
||||
exynos_eint_base = ioremap(EXYNOS4_PA_GPIO2, SZ_4K);
|
||||
|
||||
if (exynos_eint_base == NULL) {
|
||||
pr_err("unable to ioremap for EINT base address\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
for (irq = 0 ; irq <= 31 ; irq++) {
|
||||
irq_set_chip_and_handler(IRQ_EINT(irq), &exynos4_irq_eint,
|
||||
irq_set_chip_and_handler(IRQ_EINT(irq), &exynos_irq_eint,
|
||||
handle_level_irq);
|
||||
set_irq_flags(IRQ_EINT(irq), IRQF_VALID);
|
||||
}
|
||||
|
||||
irq_set_chained_handler(IRQ_EINT16_31, exynos4_irq_demux_eint16_31);
|
||||
irq_set_chained_handler(EXYNOS_IRQ_EINT16_31, exynos_irq_demux_eint16_31);
|
||||
|
||||
for (irq = 0 ; irq <= 15 ; irq++) {
|
||||
eint0_15_data[irq] = IRQ_EINT(irq);
|
||||
|
||||
irq_set_handler_data(exynos4_get_irq_nr(irq),
|
||||
&eint0_15_data[irq]);
|
||||
irq_set_chained_handler(exynos4_get_irq_nr(irq),
|
||||
exynos4_irq_eint0_15);
|
||||
if (soc_is_exynos5250()) {
|
||||
irq_set_handler_data(exynos5_eint0_15_src_int[irq],
|
||||
&eint0_15_data[irq]);
|
||||
irq_set_chained_handler(exynos5_eint0_15_src_int[irq],
|
||||
exynos_irq_eint0_15);
|
||||
} else {
|
||||
irq_set_handler_data(exynos4_eint0_15_src_int[irq],
|
||||
&eint0_15_data[irq]);
|
||||
irq_set_chained_handler(exynos4_eint0_15_src_int[irq],
|
||||
exynos_irq_eint0_15);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
arch_initcall(exynos4_init_irq_eint);
|
||||
arch_initcall(exynos_init_irq_eint);
|
||||
|
|
|
@ -12,39 +12,44 @@
|
|||
#ifndef __ARCH_ARM_MACH_EXYNOS_COMMON_H
|
||||
#define __ARCH_ARM_MACH_EXYNOS_COMMON_H
|
||||
|
||||
extern struct sys_timer exynos4_timer;
|
||||
|
||||
void exynos_init_io(struct map_desc *mach_desc, int size);
|
||||
void exynos4_init_irq(void);
|
||||
void exynos5_init_irq(void);
|
||||
void exynos4_restart(char mode, const char *cmd);
|
||||
void exynos5_restart(char mode, const char *cmd);
|
||||
|
||||
#ifdef CONFIG_ARCH_EXYNOS4
|
||||
void exynos4_register_clocks(void);
|
||||
void exynos4_setup_clocks(void);
|
||||
|
||||
void exynos4210_register_clocks(void);
|
||||
void exynos4212_register_clocks(void);
|
||||
|
||||
#else
|
||||
#define exynos4_register_clocks()
|
||||
#define exynos4_setup_clocks()
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_EXYNOS5
|
||||
void exynos5_register_clocks(void);
|
||||
void exynos5_setup_clocks(void);
|
||||
|
||||
#else
|
||||
#define exynos5_register_clocks()
|
||||
#define exynos5_setup_clocks()
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CPU_EXYNOS4210
|
||||
void exynos4210_register_clocks(void);
|
||||
|
||||
#else
|
||||
#define exynos4210_register_clocks()
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SOC_EXYNOS4212
|
||||
void exynos4212_register_clocks(void);
|
||||
|
||||
#else
|
||||
#define exynos4212_register_clocks()
|
||||
#endif
|
||||
|
||||
void exynos4_restart(char mode, const char *cmd);
|
||||
|
||||
extern struct sys_timer exynos4_timer;
|
||||
|
||||
#ifdef CONFIG_ARCH_EXYNOS
|
||||
extern int exynos_init(void);
|
||||
extern void exynos4_map_io(void);
|
||||
extern void exynos4_init_clocks(int xtal);
|
||||
extern void exynos4_init_uarts(struct s3c2410_uartcfg *cfg, int no);
|
||||
|
||||
#else
|
||||
#define exynos4_init_clocks NULL
|
||||
#define exynos4_init_uarts NULL
|
||||
#define exynos4_map_io NULL
|
||||
#define exynos_init NULL
|
||||
#endif
|
||||
|
||||
#endif /* __ARCH_ARM_MACH_EXYNOS_COMMON_H */
|
||||
|
|
|
@ -242,8 +242,8 @@ static struct resource exynos4_ahci_resource[] = {
|
|||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = IRQ_SATA,
|
||||
.end = IRQ_SATA,
|
||||
.start = EXYNOS4_IRQ_SATA,
|
||||
.end = EXYNOS4_IRQ_SATA,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
|
|
@ -304,8 +304,8 @@ static struct resource exynos4_ac97_resource[] = {
|
|||
.flags = IORESOURCE_DMA,
|
||||
},
|
||||
[4] = {
|
||||
.start = IRQ_AC97,
|
||||
.end = IRQ_AC97,
|
||||
.start = EXYNOS4_IRQ_AC97,
|
||||
.end = EXYNOS4_IRQ_AC97,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
|
78
arch/arm/mach-exynos/dev-uart.c
Normal file
78
arch/arm/mach-exynos/dev-uart.c
Normal file
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
* Copyright (c) 2012 Samsung Electronics Co., Ltd.
|
||||
* http://www.samsung.com
|
||||
*
|
||||
* Base EXYNOS UART resource and device definitions
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/irq.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/map.h>
|
||||
|
||||
#include <plat/devs.h>
|
||||
|
||||
#define EXYNOS_UART_RESOURCE(_series, _nr) \
|
||||
static struct resource exynos##_series##_uart##_nr##_resource[] = { \
|
||||
[0] = DEFINE_RES_MEM(EXYNOS##_series##_PA_UART##_nr, EXYNOS##_series##_SZ_UART), \
|
||||
[1] = DEFINE_RES_IRQ(EXYNOS##_series##_IRQ_UART##_nr), \
|
||||
};
|
||||
|
||||
EXYNOS_UART_RESOURCE(4, 0)
|
||||
EXYNOS_UART_RESOURCE(4, 1)
|
||||
EXYNOS_UART_RESOURCE(4, 2)
|
||||
EXYNOS_UART_RESOURCE(4, 3)
|
||||
|
||||
struct s3c24xx_uart_resources exynos4_uart_resources[] __initdata = {
|
||||
[0] = {
|
||||
.resources = exynos4_uart0_resource,
|
||||
.nr_resources = ARRAY_SIZE(exynos4_uart0_resource),
|
||||
},
|
||||
[1] = {
|
||||
.resources = exynos4_uart1_resource,
|
||||
.nr_resources = ARRAY_SIZE(exynos4_uart1_resource),
|
||||
},
|
||||
[2] = {
|
||||
.resources = exynos4_uart2_resource,
|
||||
.nr_resources = ARRAY_SIZE(exynos4_uart2_resource),
|
||||
},
|
||||
[3] = {
|
||||
.resources = exynos4_uart3_resource,
|
||||
.nr_resources = ARRAY_SIZE(exynos4_uart3_resource),
|
||||
},
|
||||
};
|
||||
|
||||
EXYNOS_UART_RESOURCE(5, 0)
|
||||
EXYNOS_UART_RESOURCE(5, 1)
|
||||
EXYNOS_UART_RESOURCE(5, 2)
|
||||
EXYNOS_UART_RESOURCE(5, 3)
|
||||
|
||||
struct s3c24xx_uart_resources exynos5_uart_resources[] __initdata = {
|
||||
[0] = {
|
||||
.resources = exynos5_uart0_resource,
|
||||
.nr_resources = ARRAY_SIZE(exynos5_uart0_resource),
|
||||
},
|
||||
[1] = {
|
||||
.resources = exynos5_uart1_resource,
|
||||
.nr_resources = ARRAY_SIZE(exynos5_uart0_resource),
|
||||
},
|
||||
[2] = {
|
||||
.resources = exynos5_uart2_resource,
|
||||
.nr_resources = ARRAY_SIZE(exynos5_uart2_resource),
|
||||
},
|
||||
[3] = {
|
||||
.resources = exynos5_uart3_resource,
|
||||
.nr_resources = ARRAY_SIZE(exynos5_uart3_resource),
|
||||
},
|
||||
};
|
|
@ -108,7 +108,7 @@ static u8 exynos4212_pdma0_peri[] = {
|
|||
struct dma_pl330_platdata exynos4_pdma0_pdata;
|
||||
|
||||
static AMBA_AHB_DEVICE(exynos4_pdma0, "dma-pl330.0", 0x00041330,
|
||||
EXYNOS4_PA_PDMA0, {IRQ_PDMA0}, &exynos4_pdma0_pdata);
|
||||
EXYNOS4_PA_PDMA0, {EXYNOS4_IRQ_PDMA0}, &exynos4_pdma0_pdata);
|
||||
|
||||
static u8 exynos4210_pdma1_peri[] = {
|
||||
DMACH_PCM0_RX,
|
||||
|
@ -174,7 +174,7 @@ static u8 exynos4212_pdma1_peri[] = {
|
|||
static struct dma_pl330_platdata exynos4_pdma1_pdata;
|
||||
|
||||
static AMBA_AHB_DEVICE(exynos4_pdma1, "dma-pl330.1", 0x00041330,
|
||||
EXYNOS4_PA_PDMA1, {IRQ_PDMA1}, &exynos4_pdma1_pdata);
|
||||
EXYNOS4_PA_PDMA1, {EXYNOS4_IRQ_PDMA1}, &exynos4_pdma1_pdata);
|
||||
|
||||
static u8 mdma_peri[] = {
|
||||
DMACH_MTOM_0,
|
||||
|
@ -193,7 +193,7 @@ static struct dma_pl330_platdata exynos4_mdma1_pdata = {
|
|||
};
|
||||
|
||||
static AMBA_AHB_DEVICE(exynos4_mdma1, "dma-pl330.2", 0x00041330,
|
||||
EXYNOS4_PA_MDMA1, {IRQ_MDMA1}, &exynos4_mdma1_pdata);
|
||||
EXYNOS4_PA_MDMA1, {EXYNOS4_IRQ_MDMA1}, &exynos4_mdma1_pdata);
|
||||
|
||||
static int __init exynos4_dma_init(void)
|
||||
{
|
||||
|
|
|
@ -21,8 +21,13 @@
|
|||
*/
|
||||
|
||||
.macro addruart, rp, rv, tmp
|
||||
ldr \rp, = S3C_PA_UART
|
||||
ldr \rv, = S3C_VA_UART
|
||||
mov \rp, #0x10000000
|
||||
ldr \rp, [\rp, #0x0]
|
||||
and \rp, \rp, #0xf00000
|
||||
teq \rp, #0x500000 @@ EXYNOS5
|
||||
ldreq \rp, =EXYNOS5_PA_UART
|
||||
movne \rp, #EXYNOS4_PA_UART @@ EXYNOS4
|
||||
ldr \rv, =S3C_VA_UART
|
||||
#if CONFIG_DEBUG_S3C_UART != 0
|
||||
add \rp, \rp, #(0x10000 * CONFIG_DEBUG_S3C_UART)
|
||||
add \rv, \rv, #(0x10000 * CONFIG_DEBUG_S3C_UART)
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
/* linux/arch/arm/mach-exynos4/include/mach/irqs.h
|
||||
*
|
||||
* Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
|
||||
/*
|
||||
* Copyright (c) 2010-2012 Samsung Electronics Co., Ltd.
|
||||
* http://www.samsung.com
|
||||
*
|
||||
* EXYNOS4 - IRQ definitions
|
||||
* EXYNOS - IRQ definitions
|
||||
*
|
||||
* 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
|
||||
|
@ -17,160 +16,450 @@
|
|||
|
||||
/* PPI: Private Peripheral Interrupt */
|
||||
|
||||
#define IRQ_PPI(x) (x+16)
|
||||
|
||||
#define IRQ_MCT_LOCALTIMER IRQ_PPI(12)
|
||||
#define IRQ_PPI(x) (x + 16)
|
||||
|
||||
/* SPI: Shared Peripheral Interrupt */
|
||||
|
||||
#define IRQ_SPI(x) (x+32)
|
||||
#define IRQ_SPI(x) (x + 32)
|
||||
|
||||
#define IRQ_EINT0 IRQ_SPI(16)
|
||||
#define IRQ_EINT1 IRQ_SPI(17)
|
||||
#define IRQ_EINT2 IRQ_SPI(18)
|
||||
#define IRQ_EINT3 IRQ_SPI(19)
|
||||
#define IRQ_EINT4 IRQ_SPI(20)
|
||||
#define IRQ_EINT5 IRQ_SPI(21)
|
||||
#define IRQ_EINT6 IRQ_SPI(22)
|
||||
#define IRQ_EINT7 IRQ_SPI(23)
|
||||
#define IRQ_EINT8 IRQ_SPI(24)
|
||||
#define IRQ_EINT9 IRQ_SPI(25)
|
||||
#define IRQ_EINT10 IRQ_SPI(26)
|
||||
#define IRQ_EINT11 IRQ_SPI(27)
|
||||
#define IRQ_EINT12 IRQ_SPI(28)
|
||||
#define IRQ_EINT13 IRQ_SPI(29)
|
||||
#define IRQ_EINT14 IRQ_SPI(30)
|
||||
#define IRQ_EINT15 IRQ_SPI(31)
|
||||
#define IRQ_EINT16_31 IRQ_SPI(32)
|
||||
/* COMBINER */
|
||||
|
||||
#define IRQ_MDMA0 IRQ_SPI(33)
|
||||
#define IRQ_MDMA1 IRQ_SPI(34)
|
||||
#define IRQ_PDMA0 IRQ_SPI(35)
|
||||
#define IRQ_PDMA1 IRQ_SPI(36)
|
||||
#define IRQ_TIMER0_VIC IRQ_SPI(37)
|
||||
#define IRQ_TIMER1_VIC IRQ_SPI(38)
|
||||
#define IRQ_TIMER2_VIC IRQ_SPI(39)
|
||||
#define IRQ_TIMER3_VIC IRQ_SPI(40)
|
||||
#define IRQ_TIMER4_VIC IRQ_SPI(41)
|
||||
#define IRQ_MCT_L0 IRQ_SPI(42)
|
||||
#define IRQ_WDT IRQ_SPI(43)
|
||||
#define IRQ_RTC_ALARM IRQ_SPI(44)
|
||||
#define IRQ_RTC_TIC IRQ_SPI(45)
|
||||
#define IRQ_GPIO_XB IRQ_SPI(46)
|
||||
#define IRQ_GPIO_XA IRQ_SPI(47)
|
||||
#define IRQ_MCT_L1 IRQ_SPI(48)
|
||||
#define MAX_IRQ_IN_COMBINER 8
|
||||
#define COMBINER_GROUP(x) ((x) * MAX_IRQ_IN_COMBINER + IRQ_SPI(128))
|
||||
#define COMBINER_IRQ(x, y) (COMBINER_GROUP(x) + y)
|
||||
|
||||
#define IRQ_UART0 IRQ_SPI(52)
|
||||
#define IRQ_UART1 IRQ_SPI(53)
|
||||
#define IRQ_UART2 IRQ_SPI(54)
|
||||
#define IRQ_UART3 IRQ_SPI(55)
|
||||
#define IRQ_UART4 IRQ_SPI(56)
|
||||
#define IRQ_MCT_G0 IRQ_SPI(57)
|
||||
#define IRQ_IIC IRQ_SPI(58)
|
||||
#define IRQ_IIC1 IRQ_SPI(59)
|
||||
#define IRQ_IIC2 IRQ_SPI(60)
|
||||
#define IRQ_IIC3 IRQ_SPI(61)
|
||||
#define IRQ_IIC4 IRQ_SPI(62)
|
||||
#define IRQ_IIC5 IRQ_SPI(63)
|
||||
#define IRQ_IIC6 IRQ_SPI(64)
|
||||
#define IRQ_IIC7 IRQ_SPI(65)
|
||||
#define IRQ_SPI0 IRQ_SPI(66)
|
||||
#define IRQ_SPI1 IRQ_SPI(67)
|
||||
#define IRQ_SPI2 IRQ_SPI(68)
|
||||
/* For EXYNOS4 and EXYNOS5 */
|
||||
|
||||
#define IRQ_USB_HOST IRQ_SPI(70)
|
||||
#define IRQ_USB_HSOTG IRQ_SPI(71)
|
||||
#define IRQ_MODEM_IF IRQ_SPI(72)
|
||||
#define IRQ_HSMMC0 IRQ_SPI(73)
|
||||
#define IRQ_HSMMC1 IRQ_SPI(74)
|
||||
#define IRQ_HSMMC2 IRQ_SPI(75)
|
||||
#define IRQ_HSMMC3 IRQ_SPI(76)
|
||||
#define IRQ_DWMCI IRQ_SPI(77)
|
||||
#define EXYNOS_IRQ_MCT_LOCALTIMER IRQ_PPI(12)
|
||||
|
||||
#define IRQ_MIPI_CSIS0 IRQ_SPI(78)
|
||||
#define IRQ_MIPI_CSIS1 IRQ_SPI(80)
|
||||
#define EXYNOS_IRQ_EINT16_31 IRQ_SPI(32)
|
||||
|
||||
#define IRQ_ONENAND_AUDI IRQ_SPI(82)
|
||||
#define IRQ_ROTATOR IRQ_SPI(83)
|
||||
#define IRQ_FIMC0 IRQ_SPI(84)
|
||||
#define IRQ_FIMC1 IRQ_SPI(85)
|
||||
#define IRQ_FIMC2 IRQ_SPI(86)
|
||||
#define IRQ_FIMC3 IRQ_SPI(87)
|
||||
#define IRQ_JPEG IRQ_SPI(88)
|
||||
#define IRQ_2D IRQ_SPI(89)
|
||||
#define IRQ_PCIE IRQ_SPI(90)
|
||||
/* For EXYNOS4 SoCs */
|
||||
|
||||
#define IRQ_MIXER IRQ_SPI(91)
|
||||
#define IRQ_HDMI IRQ_SPI(92)
|
||||
#define IRQ_IIC_HDMIPHY IRQ_SPI(93)
|
||||
#define IRQ_MFC IRQ_SPI(94)
|
||||
#define IRQ_SDO IRQ_SPI(95)
|
||||
#define EXYNOS4_IRQ_EINT0 IRQ_SPI(16)
|
||||
#define EXYNOS4_IRQ_EINT1 IRQ_SPI(17)
|
||||
#define EXYNOS4_IRQ_EINT2 IRQ_SPI(18)
|
||||
#define EXYNOS4_IRQ_EINT3 IRQ_SPI(19)
|
||||
#define EXYNOS4_IRQ_EINT4 IRQ_SPI(20)
|
||||
#define EXYNOS4_IRQ_EINT5 IRQ_SPI(21)
|
||||
#define EXYNOS4_IRQ_EINT6 IRQ_SPI(22)
|
||||
#define EXYNOS4_IRQ_EINT7 IRQ_SPI(23)
|
||||
#define EXYNOS4_IRQ_EINT8 IRQ_SPI(24)
|
||||
#define EXYNOS4_IRQ_EINT9 IRQ_SPI(25)
|
||||
#define EXYNOS4_IRQ_EINT10 IRQ_SPI(26)
|
||||
#define EXYNOS4_IRQ_EINT11 IRQ_SPI(27)
|
||||
#define EXYNOS4_IRQ_EINT12 IRQ_SPI(28)
|
||||
#define EXYNOS4_IRQ_EINT13 IRQ_SPI(29)
|
||||
#define EXYNOS4_IRQ_EINT14 IRQ_SPI(30)
|
||||
#define EXYNOS4_IRQ_EINT15 IRQ_SPI(31)
|
||||
|
||||
#define IRQ_AUDIO_SS IRQ_SPI(96)
|
||||
#define IRQ_I2S0 IRQ_SPI(97)
|
||||
#define IRQ_I2S1 IRQ_SPI(98)
|
||||
#define IRQ_I2S2 IRQ_SPI(99)
|
||||
#define IRQ_AC97 IRQ_SPI(100)
|
||||
#define EXYNOS4_IRQ_MDMA0 IRQ_SPI(33)
|
||||
#define EXYNOS4_IRQ_MDMA1 IRQ_SPI(34)
|
||||
#define EXYNOS4_IRQ_PDMA0 IRQ_SPI(35)
|
||||
#define EXYNOS4_IRQ_PDMA1 IRQ_SPI(36)
|
||||
#define EXYNOS4_IRQ_TIMER0_VIC IRQ_SPI(37)
|
||||
#define EXYNOS4_IRQ_TIMER1_VIC IRQ_SPI(38)
|
||||
#define EXYNOS4_IRQ_TIMER2_VIC IRQ_SPI(39)
|
||||
#define EXYNOS4_IRQ_TIMER3_VIC IRQ_SPI(40)
|
||||
#define EXYNOS4_IRQ_TIMER4_VIC IRQ_SPI(41)
|
||||
#define EXYNOS4_IRQ_MCT_L0 IRQ_SPI(42)
|
||||
#define EXYNOS4_IRQ_WDT IRQ_SPI(43)
|
||||
#define EXYNOS4_IRQ_RTC_ALARM IRQ_SPI(44)
|
||||
#define EXYNOS4_IRQ_RTC_TIC IRQ_SPI(45)
|
||||
#define EXYNOS4_IRQ_GPIO_XB IRQ_SPI(46)
|
||||
#define EXYNOS4_IRQ_GPIO_XA IRQ_SPI(47)
|
||||
#define EXYNOS4_IRQ_MCT_L1 IRQ_SPI(48)
|
||||
|
||||
#define IRQ_SPDIF IRQ_SPI(104)
|
||||
#define IRQ_ADC0 IRQ_SPI(105)
|
||||
#define IRQ_PEN0 IRQ_SPI(106)
|
||||
#define IRQ_ADC1 IRQ_SPI(107)
|
||||
#define IRQ_PEN1 IRQ_SPI(108)
|
||||
#define IRQ_KEYPAD IRQ_SPI(109)
|
||||
#define IRQ_PMU IRQ_SPI(110)
|
||||
#define IRQ_GPS IRQ_SPI(111)
|
||||
#define IRQ_INTFEEDCTRL_SSS IRQ_SPI(112)
|
||||
#define IRQ_SLIMBUS IRQ_SPI(113)
|
||||
#define EXYNOS4_IRQ_UART0 IRQ_SPI(52)
|
||||
#define EXYNOS4_IRQ_UART1 IRQ_SPI(53)
|
||||
#define EXYNOS4_IRQ_UART2 IRQ_SPI(54)
|
||||
#define EXYNOS4_IRQ_UART3 IRQ_SPI(55)
|
||||
#define EXYNOS4_IRQ_UART4 IRQ_SPI(56)
|
||||
#define EXYNOS4_IRQ_MCT_G0 IRQ_SPI(57)
|
||||
#define EXYNOS4_IRQ_IIC IRQ_SPI(58)
|
||||
#define EXYNOS4_IRQ_IIC1 IRQ_SPI(59)
|
||||
#define EXYNOS4_IRQ_IIC2 IRQ_SPI(60)
|
||||
#define EXYNOS4_IRQ_IIC3 IRQ_SPI(61)
|
||||
#define EXYNOS4_IRQ_IIC4 IRQ_SPI(62)
|
||||
#define EXYNOS4_IRQ_IIC5 IRQ_SPI(63)
|
||||
#define EXYNOS4_IRQ_IIC6 IRQ_SPI(64)
|
||||
#define EXYNOS4_IRQ_IIC7 IRQ_SPI(65)
|
||||
#define EXYNOS4_IRQ_SPI0 IRQ_SPI(66)
|
||||
#define EXYNOS4_IRQ_SPI1 IRQ_SPI(67)
|
||||
#define EXYNOS4_IRQ_SPI2 IRQ_SPI(68)
|
||||
|
||||
#define IRQ_TSI IRQ_SPI(115)
|
||||
#define IRQ_SATA IRQ_SPI(116)
|
||||
#define EXYNOS4_IRQ_USB_HOST IRQ_SPI(70)
|
||||
#define EXYNOS4_IRQ_USB_HSOTG IRQ_SPI(71)
|
||||
#define EXYNOS4_IRQ_MODEM_IF IRQ_SPI(72)
|
||||
#define EXYNOS4_IRQ_HSMMC0 IRQ_SPI(73)
|
||||
#define EXYNOS4_IRQ_HSMMC1 IRQ_SPI(74)
|
||||
#define EXYNOS4_IRQ_HSMMC2 IRQ_SPI(75)
|
||||
#define EXYNOS4_IRQ_HSMMC3 IRQ_SPI(76)
|
||||
#define EXYNOS4_IRQ_DWMCI IRQ_SPI(77)
|
||||
|
||||
#define MAX_IRQ_IN_COMBINER 8
|
||||
#define COMBINER_GROUP(x) ((x) * MAX_IRQ_IN_COMBINER + IRQ_SPI(128))
|
||||
#define COMBINER_IRQ(x, y) (COMBINER_GROUP(x) + y)
|
||||
#define EXYNOS4_IRQ_MIPI_CSIS0 IRQ_SPI(78)
|
||||
#define EXYNOS4_IRQ_MIPI_CSIS1 IRQ_SPI(80)
|
||||
|
||||
#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 EXYNOS4_IRQ_ONENAND_AUDI IRQ_SPI(82)
|
||||
#define EXYNOS4_IRQ_ROTATOR IRQ_SPI(83)
|
||||
#define EXYNOS4_IRQ_FIMC0 IRQ_SPI(84)
|
||||
#define EXYNOS4_IRQ_FIMC1 IRQ_SPI(85)
|
||||
#define EXYNOS4_IRQ_FIMC2 IRQ_SPI(86)
|
||||
#define EXYNOS4_IRQ_FIMC3 IRQ_SPI(87)
|
||||
#define EXYNOS4_IRQ_JPEG IRQ_SPI(88)
|
||||
#define EXYNOS4_IRQ_2D IRQ_SPI(89)
|
||||
#define EXYNOS4_IRQ_PCIE IRQ_SPI(90)
|
||||
|
||||
#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_MIXER IRQ_SPI(91)
|
||||
#define EXYNOS4_IRQ_HDMI IRQ_SPI(92)
|
||||
#define EXYNOS4_IRQ_IIC_HDMIPHY IRQ_SPI(93)
|
||||
#define EXYNOS4_IRQ_MFC IRQ_SPI(94)
|
||||
#define EXYNOS4_IRQ_SDO IRQ_SPI(95)
|
||||
|
||||
#define IRQ_FIMD0_FIFO COMBINER_IRQ(11, 0)
|
||||
#define IRQ_FIMD0_VSYNC COMBINER_IRQ(11, 1)
|
||||
#define IRQ_FIMD0_SYSTEM COMBINER_IRQ(11, 2)
|
||||
#define EXYNOS4_IRQ_AUDIO_SS IRQ_SPI(96)
|
||||
#define EXYNOS4_IRQ_I2S0 IRQ_SPI(97)
|
||||
#define EXYNOS4_IRQ_I2S1 IRQ_SPI(98)
|
||||
#define EXYNOS4_IRQ_I2S2 IRQ_SPI(99)
|
||||
#define EXYNOS4_IRQ_AC97 IRQ_SPI(100)
|
||||
|
||||
#define MAX_COMBINER_NR 16
|
||||
#define EXYNOS4_IRQ_SPDIF IRQ_SPI(104)
|
||||
#define EXYNOS4_IRQ_ADC0 IRQ_SPI(105)
|
||||
#define EXYNOS4_IRQ_PEN0 IRQ_SPI(106)
|
||||
#define EXYNOS4_IRQ_ADC1 IRQ_SPI(107)
|
||||
#define EXYNOS4_IRQ_PEN1 IRQ_SPI(108)
|
||||
#define EXYNOS4_IRQ_KEYPAD IRQ_SPI(109)
|
||||
#define EXYNOS4_IRQ_PMU IRQ_SPI(110)
|
||||
#define EXYNOS4_IRQ_GPS IRQ_SPI(111)
|
||||
#define EXYNOS4_IRQ_INTFEEDCTRL_SSS IRQ_SPI(112)
|
||||
#define EXYNOS4_IRQ_SLIMBUS IRQ_SPI(113)
|
||||
|
||||
#define IRQ_ADC IRQ_ADC0
|
||||
#define IRQ_TC IRQ_PEN0
|
||||
#define EXYNOS4_IRQ_TSI IRQ_SPI(115)
|
||||
#define EXYNOS4_IRQ_SATA IRQ_SPI(116)
|
||||
|
||||
#define S5P_IRQ_EINT_BASE COMBINER_IRQ(MAX_COMBINER_NR, 0)
|
||||
#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 S5P_EINT_BASE1 (S5P_IRQ_EINT_BASE + 0)
|
||||
#define S5P_EINT_BASE2 (S5P_IRQ_EINT_BASE + 16)
|
||||
#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)
|
||||
|
||||
/* optional GPIO interrupts */
|
||||
#define S5P_GPIOINT_BASE (S5P_IRQ_EINT_BASE + 32)
|
||||
#define IRQ_GPIO1_NR_GROUPS 16
|
||||
#define IRQ_GPIO2_NR_GROUPS 9
|
||||
#define IRQ_GPIO_END (S5P_GPIOINT_BASE + S5P_GPIOINT_COUNT)
|
||||
#define EXYNOS4_IRQ_FIMD0_FIFO COMBINER_IRQ(11, 0)
|
||||
#define EXYNOS4_IRQ_FIMD0_VSYNC COMBINER_IRQ(11, 1)
|
||||
#define EXYNOS4_IRQ_FIMD0_SYSTEM COMBINER_IRQ(11, 2)
|
||||
|
||||
#define IRQ_TIMER_BASE (IRQ_GPIO_END + 64)
|
||||
#define EXYNOS4_MAX_COMBINER_NR 16
|
||||
|
||||
#define EXYNOS4_IRQ_GPIO1_NR_GROUPS 16
|
||||
#define EXYNOS4_IRQ_GPIO2_NR_GROUPS 9
|
||||
|
||||
/*
|
||||
* For Compatibility:
|
||||
* the default is for EXYNOS4, and
|
||||
* for exynos5, should be re-mapped at function
|
||||
*/
|
||||
|
||||
#define IRQ_TIMER0_VIC EXYNOS4_IRQ_TIMER0_VIC
|
||||
#define IRQ_TIMER1_VIC EXYNOS4_IRQ_TIMER1_VIC
|
||||
#define IRQ_TIMER2_VIC EXYNOS4_IRQ_TIMER2_VIC
|
||||
#define IRQ_TIMER3_VIC EXYNOS4_IRQ_TIMER3_VIC
|
||||
#define IRQ_TIMER4_VIC EXYNOS4_IRQ_TIMER4_VIC
|
||||
|
||||
#define IRQ_WDT EXYNOS4_IRQ_WDT
|
||||
#define IRQ_RTC_ALARM EXYNOS4_IRQ_RTC_ALARM
|
||||
#define IRQ_RTC_TIC EXYNOS4_IRQ_RTC_TIC
|
||||
#define IRQ_GPIO_XB EXYNOS4_IRQ_GPIO_XB
|
||||
#define IRQ_GPIO_XA EXYNOS4_IRQ_GPIO_XA
|
||||
|
||||
#define IRQ_IIC EXYNOS4_IRQ_IIC
|
||||
#define IRQ_IIC1 EXYNOS4_IRQ_IIC1
|
||||
#define IRQ_IIC3 EXYNOS4_IRQ_IIC3
|
||||
#define IRQ_IIC5 EXYNOS4_IRQ_IIC5
|
||||
#define IRQ_IIC6 EXYNOS4_IRQ_IIC6
|
||||
#define IRQ_IIC7 EXYNOS4_IRQ_IIC7
|
||||
|
||||
#define IRQ_USB_HOST EXYNOS4_IRQ_USB_HOST
|
||||
|
||||
#define IRQ_HSMMC0 EXYNOS4_IRQ_HSMMC0
|
||||
#define IRQ_HSMMC1 EXYNOS4_IRQ_HSMMC1
|
||||
#define IRQ_HSMMC2 EXYNOS4_IRQ_HSMMC2
|
||||
#define IRQ_HSMMC3 EXYNOS4_IRQ_HSMMC3
|
||||
|
||||
#define IRQ_MIPI_CSIS0 EXYNOS4_IRQ_MIPI_CSIS0
|
||||
|
||||
#define IRQ_ONENAND_AUDI EXYNOS4_IRQ_ONENAND_AUDI
|
||||
|
||||
#define IRQ_FIMC0 EXYNOS4_IRQ_FIMC0
|
||||
#define IRQ_FIMC1 EXYNOS4_IRQ_FIMC1
|
||||
#define IRQ_FIMC2 EXYNOS4_IRQ_FIMC2
|
||||
#define IRQ_FIMC3 EXYNOS4_IRQ_FIMC3
|
||||
#define IRQ_JPEG EXYNOS4_IRQ_JPEG
|
||||
#define IRQ_2D EXYNOS4_IRQ_2D
|
||||
|
||||
#define IRQ_MIXER EXYNOS4_IRQ_MIXER
|
||||
#define IRQ_HDMI EXYNOS4_IRQ_HDMI
|
||||
#define IRQ_IIC_HDMIPHY EXYNOS4_IRQ_IIC_HDMIPHY
|
||||
#define IRQ_MFC EXYNOS4_IRQ_MFC
|
||||
#define IRQ_SDO EXYNOS4_IRQ_SDO
|
||||
|
||||
#define IRQ_ADC EXYNOS4_IRQ_ADC0
|
||||
#define IRQ_TC EXYNOS4_IRQ_PEN0
|
||||
|
||||
#define IRQ_KEYPAD EXYNOS4_IRQ_KEYPAD
|
||||
#define IRQ_PMU EXYNOS4_IRQ_PMU
|
||||
|
||||
#define IRQ_SYSMMU_MDMA0_0 EXYNOS4_IRQ_SYSMMU_MDMA0_0
|
||||
#define IRQ_SYSMMU_SSS_0 EXYNOS4_IRQ_SYSMMU_SSS_0
|
||||
#define IRQ_SYSMMU_FIMC0_0 EXYNOS4_IRQ_SYSMMU_FIMC0_0
|
||||
#define IRQ_SYSMMU_FIMC1_0 EXYNOS4_IRQ_SYSMMU_FIMC1_0
|
||||
#define IRQ_SYSMMU_FIMC2_0 EXYNOS4_IRQ_SYSMMU_FIMC2_0
|
||||
#define IRQ_SYSMMU_FIMC3_0 EXYNOS4_IRQ_SYSMMU_FIMC3_0
|
||||
#define IRQ_SYSMMU_JPEG_0 EXYNOS4_IRQ_SYSMMU_JPEG_0
|
||||
#define IRQ_SYSMMU_2D_0 EXYNOS4_IRQ_SYSMMU_2D_0
|
||||
|
||||
#define IRQ_SYSMMU_ROTATOR_0 EXYNOS4_IRQ_SYSMMU_ROTATOR_0
|
||||
#define IRQ_SYSMMU_MDMA1_0 EXYNOS4_IRQ_SYSMMU_MDMA1_0
|
||||
#define IRQ_SYSMMU_LCD0_M0_0 EXYNOS4_IRQ_SYSMMU_LCD0_M0_0
|
||||
#define IRQ_SYSMMU_LCD1_M1_0 EXYNOS4_IRQ_SYSMMU_LCD1_M1_0
|
||||
#define IRQ_SYSMMU_TV_M0_0 EXYNOS4_IRQ_SYSMMU_TV_M0_0
|
||||
#define IRQ_SYSMMU_MFC_M0_0 EXYNOS4_IRQ_SYSMMU_MFC_M0_0
|
||||
#define IRQ_SYSMMU_MFC_M1_0 EXYNOS4_IRQ_SYSMMU_MFC_M1_0
|
||||
#define IRQ_SYSMMU_PCIE_0 EXYNOS4_IRQ_SYSMMU_PCIE_0
|
||||
|
||||
#define IRQ_FIMD0_FIFO EXYNOS4_IRQ_FIMD0_FIFO
|
||||
#define IRQ_FIMD0_VSYNC EXYNOS4_IRQ_FIMD0_VSYNC
|
||||
#define IRQ_FIMD0_SYSTEM EXYNOS4_IRQ_FIMD0_SYSTEM
|
||||
|
||||
#define IRQ_GPIO1_NR_GROUPS EXYNOS4_IRQ_GPIO1_NR_GROUPS
|
||||
#define IRQ_GPIO2_NR_GROUPS EXYNOS4_IRQ_GPIO2_NR_GROUPS
|
||||
|
||||
/* For EXYNOS5 SoCs */
|
||||
|
||||
#define EXYNOS5_IRQ_MDMA0 IRQ_SPI(33)
|
||||
#define EXYNOS5_IRQ_PDMA0 IRQ_SPI(34)
|
||||
#define EXYNOS5_IRQ_PDMA1 IRQ_SPI(35)
|
||||
#define EXYNOS5_IRQ_TIMER0_VIC IRQ_SPI(36)
|
||||
#define EXYNOS5_IRQ_TIMER1_VIC IRQ_SPI(37)
|
||||
#define EXYNOS5_IRQ_TIMER2_VIC IRQ_SPI(38)
|
||||
#define EXYNOS5_IRQ_TIMER3_VIC IRQ_SPI(39)
|
||||
#define EXYNOS5_IRQ_TIMER4_VIC IRQ_SPI(40)
|
||||
#define EXYNOS5_IRQ_RTIC IRQ_SPI(41)
|
||||
#define EXYNOS5_IRQ_WDT IRQ_SPI(42)
|
||||
#define EXYNOS5_IRQ_RTC_ALARM IRQ_SPI(43)
|
||||
#define EXYNOS5_IRQ_RTC_TIC IRQ_SPI(44)
|
||||
#define EXYNOS5_IRQ_GPIO_XB IRQ_SPI(45)
|
||||
#define EXYNOS5_IRQ_GPIO_XA IRQ_SPI(46)
|
||||
#define EXYNOS5_IRQ_GPIO IRQ_SPI(47)
|
||||
#define EXYNOS5_IRQ_IEM_IEC IRQ_SPI(48)
|
||||
#define EXYNOS5_IRQ_IEM_APC IRQ_SPI(49)
|
||||
#define EXYNOS5_IRQ_GPIO_C2C IRQ_SPI(50)
|
||||
#define EXYNOS5_IRQ_UART0 IRQ_SPI(51)
|
||||
#define EXYNOS5_IRQ_UART1 IRQ_SPI(52)
|
||||
#define EXYNOS5_IRQ_UART2 IRQ_SPI(53)
|
||||
#define EXYNOS5_IRQ_UART3 IRQ_SPI(54)
|
||||
#define EXYNOS5_IRQ_UART4 IRQ_SPI(55)
|
||||
#define EXYNOS5_IRQ_IIC IRQ_SPI(56)
|
||||
#define EXYNOS5_IRQ_IIC1 IRQ_SPI(57)
|
||||
#define EXYNOS5_IRQ_IIC2 IRQ_SPI(58)
|
||||
#define EXYNOS5_IRQ_IIC3 IRQ_SPI(59)
|
||||
#define EXYNOS5_IRQ_IIC4 IRQ_SPI(60)
|
||||
#define EXYNOS5_IRQ_IIC5 IRQ_SPI(61)
|
||||
#define EXYNOS5_IRQ_IIC6 IRQ_SPI(62)
|
||||
#define EXYNOS5_IRQ_IIC7 IRQ_SPI(63)
|
||||
#define EXYNOS5_IRQ_IIC_HDMIPHY IRQ_SPI(64)
|
||||
#define EXYNOS5_IRQ_TMU IRQ_SPI(65)
|
||||
#define EXYNOS5_IRQ_FIQ_0 IRQ_SPI(66)
|
||||
#define EXYNOS5_IRQ_FIQ_1 IRQ_SPI(67)
|
||||
#define EXYNOS5_IRQ_SPI0 IRQ_SPI(68)
|
||||
#define EXYNOS5_IRQ_SPI1 IRQ_SPI(69)
|
||||
#define EXYNOS5_IRQ_SPI2 IRQ_SPI(70)
|
||||
#define EXYNOS5_IRQ_USB_HOST IRQ_SPI(71)
|
||||
#define EXYNOS5_IRQ_USB3_DRD IRQ_SPI(72)
|
||||
#define EXYNOS5_IRQ_MIPI_HSI IRQ_SPI(73)
|
||||
#define EXYNOS5_IRQ_USB_HSOTG IRQ_SPI(74)
|
||||
#define EXYNOS5_IRQ_HSMMC0 IRQ_SPI(75)
|
||||
#define EXYNOS5_IRQ_HSMMC1 IRQ_SPI(76)
|
||||
#define EXYNOS5_IRQ_HSMMC2 IRQ_SPI(77)
|
||||
#define EXYNOS5_IRQ_HSMMC3 IRQ_SPI(78)
|
||||
#define EXYNOS5_IRQ_MIPICSI0 IRQ_SPI(79)
|
||||
#define EXYNOS5_IRQ_MIPICSI1 IRQ_SPI(80)
|
||||
#define EXYNOS5_IRQ_EFNFCON_DMA_ABORT IRQ_SPI(81)
|
||||
#define EXYNOS5_IRQ_MIPIDSI0 IRQ_SPI(82)
|
||||
#define EXYNOS5_IRQ_ROTATOR IRQ_SPI(84)
|
||||
#define EXYNOS5_IRQ_GSC0 IRQ_SPI(85)
|
||||
#define EXYNOS5_IRQ_GSC1 IRQ_SPI(86)
|
||||
#define EXYNOS5_IRQ_GSC2 IRQ_SPI(87)
|
||||
#define EXYNOS5_IRQ_GSC3 IRQ_SPI(88)
|
||||
#define EXYNOS5_IRQ_JPEG IRQ_SPI(89)
|
||||
#define EXYNOS5_IRQ_EFNFCON_DMA IRQ_SPI(90)
|
||||
#define EXYNOS5_IRQ_2D IRQ_SPI(91)
|
||||
#define EXYNOS5_IRQ_SFMC0 IRQ_SPI(92)
|
||||
#define EXYNOS5_IRQ_SFMC1 IRQ_SPI(93)
|
||||
#define EXYNOS5_IRQ_MIXER IRQ_SPI(94)
|
||||
#define EXYNOS5_IRQ_HDMI IRQ_SPI(95)
|
||||
#define EXYNOS5_IRQ_MFC IRQ_SPI(96)
|
||||
#define EXYNOS5_IRQ_AUDIO_SS IRQ_SPI(97)
|
||||
#define EXYNOS5_IRQ_I2S0 IRQ_SPI(98)
|
||||
#define EXYNOS5_IRQ_I2S1 IRQ_SPI(99)
|
||||
#define EXYNOS5_IRQ_I2S2 IRQ_SPI(100)
|
||||
#define EXYNOS5_IRQ_AC97 IRQ_SPI(101)
|
||||
#define EXYNOS5_IRQ_PCM0 IRQ_SPI(102)
|
||||
#define EXYNOS5_IRQ_PCM1 IRQ_SPI(103)
|
||||
#define EXYNOS5_IRQ_PCM2 IRQ_SPI(104)
|
||||
#define EXYNOS5_IRQ_SPDIF IRQ_SPI(105)
|
||||
#define EXYNOS5_IRQ_ADC0 IRQ_SPI(106)
|
||||
|
||||
#define EXYNOS5_IRQ_SATA_PHY IRQ_SPI(108)
|
||||
#define EXYNOS5_IRQ_SATA_PMEMREQ IRQ_SPI(109)
|
||||
#define EXYNOS5_IRQ_CAM_C IRQ_SPI(110)
|
||||
#define EXYNOS5_IRQ_EAGLE_PMU IRQ_SPI(111)
|
||||
#define EXYNOS5_IRQ_INTFEEDCTRL_SSS IRQ_SPI(112)
|
||||
#define EXYNOS5_IRQ_DP1_INTP1 IRQ_SPI(113)
|
||||
#define EXYNOS5_IRQ_CEC IRQ_SPI(114)
|
||||
#define EXYNOS5_IRQ_SATA IRQ_SPI(115)
|
||||
#define EXYNOS5_IRQ_NFCON IRQ_SPI(116)
|
||||
|
||||
#define EXYNOS5_IRQ_MMC44 IRQ_SPI(123)
|
||||
#define EXYNOS5_IRQ_MDMA1 IRQ_SPI(124)
|
||||
#define EXYNOS5_IRQ_FIMC_LITE0 IRQ_SPI(125)
|
||||
#define EXYNOS5_IRQ_FIMC_LITE1 IRQ_SPI(126)
|
||||
#define EXYNOS5_IRQ_RP_TIMER IRQ_SPI(127)
|
||||
|
||||
#define EXYNOS5_IRQ_PMU COMBINER_IRQ(1, 2)
|
||||
#define EXYNOS5_IRQ_PMU_CPU1 COMBINER_IRQ(1, 6)
|
||||
|
||||
#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 EXYNOS5_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 EXYNOS5_IRQ_FIMD1_FIFO COMBINER_IRQ(18, 4)
|
||||
#define EXYNOS5_IRQ_FIMD1_VSYNC COMBINER_IRQ(18, 5)
|
||||
#define EXYNOS5_IRQ_FIMD1_SYSTEM COMBINER_IRQ(18, 6)
|
||||
|
||||
#define EXYNOS5_IRQ_EINT0 COMBINER_IRQ(23, 0)
|
||||
#define EXYNOS5_IRQ_MCT_L0 COMBINER_IRQ(23, 1)
|
||||
#define EXYNOS5_IRQ_MCT_L1 COMBINER_IRQ(23, 2)
|
||||
#define EXYNOS5_IRQ_MCT_G0 COMBINER_IRQ(23, 3)
|
||||
#define EXYNOS5_IRQ_MCT_G1 COMBINER_IRQ(23, 4)
|
||||
#define EXYNOS5_IRQ_MCT_G2 COMBINER_IRQ(23, 5)
|
||||
#define EXYNOS5_IRQ_MCT_G3 COMBINER_IRQ(23, 6)
|
||||
|
||||
#define EXYNOS5_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 EXYNOS5_IRQ_EINT2 COMBINER_IRQ(25, 0)
|
||||
#define EXYNOS5_IRQ_EINT3 COMBINER_IRQ(25, 1)
|
||||
|
||||
#define EXYNOS5_IRQ_EINT4 COMBINER_IRQ(26, 0)
|
||||
#define EXYNOS5_IRQ_EINT5 COMBINER_IRQ(26, 1)
|
||||
|
||||
#define EXYNOS5_IRQ_EINT6 COMBINER_IRQ(27, 0)
|
||||
#define EXYNOS5_IRQ_EINT7 COMBINER_IRQ(27, 1)
|
||||
|
||||
#define EXYNOS5_IRQ_EINT8 COMBINER_IRQ(28, 0)
|
||||
#define EXYNOS5_IRQ_EINT9 COMBINER_IRQ(28, 1)
|
||||
|
||||
#define EXYNOS5_IRQ_EINT10 COMBINER_IRQ(29, 0)
|
||||
#define EXYNOS5_IRQ_EINT11 COMBINER_IRQ(29, 1)
|
||||
|
||||
#define EXYNOS5_IRQ_EINT12 COMBINER_IRQ(30, 0)
|
||||
#define EXYNOS5_IRQ_EINT13 COMBINER_IRQ(30, 1)
|
||||
|
||||
#define EXYNOS5_IRQ_EINT14 COMBINER_IRQ(31, 0)
|
||||
#define EXYNOS5_IRQ_EINT15 COMBINER_IRQ(31, 1)
|
||||
|
||||
#define EXYNOS5_MAX_COMBINER_NR 32
|
||||
|
||||
#define EXYNOS5_IRQ_GPIO1_NR_GROUPS 13
|
||||
#define EXYNOS5_IRQ_GPIO2_NR_GROUPS 9
|
||||
#define EXYNOS5_IRQ_GPIO3_NR_GROUPS 5
|
||||
#define EXYNOS5_IRQ_GPIO4_NR_GROUPS 1
|
||||
|
||||
#define MAX_COMBINER_NR (EXYNOS4_MAX_COMBINER_NR > EXYNOS5_MAX_COMBINER_NR ? \
|
||||
EXYNOS4_MAX_COMBINER_NR : EXYNOS5_MAX_COMBINER_NR)
|
||||
|
||||
#define S5P_EINT_BASE1 COMBINER_IRQ(MAX_COMBINER_NR, 0)
|
||||
#define S5P_EINT_BASE2 (S5P_EINT_BASE1 + 16)
|
||||
#define S5P_GPIOINT_BASE (S5P_EINT_BASE1 + 32)
|
||||
#define IRQ_GPIO_END (S5P_GPIOINT_BASE + S5P_GPIOINT_COUNT)
|
||||
#define IRQ_TIMER_BASE (IRQ_GPIO_END + 64)
|
||||
|
||||
/* Set the default NR_IRQS */
|
||||
#define NR_IRQS (IRQ_TIMER_BASE + IRQ_TIMER_COUNT)
|
||||
|
||||
#define NR_IRQS (IRQ_TIMER_BASE + IRQ_TIMER_COUNT)
|
||||
|
||||
#endif /* __ASM_ARCH_IRQS_H */
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
|
||||
#define EXYNOS4_PA_SYSRAM0 0x02025000
|
||||
#define EXYNOS4_PA_SYSRAM1 0x02020000
|
||||
#define EXYNOS5_PA_SYSRAM 0x02020000
|
||||
|
||||
#define EXYNOS4_PA_FIMC0 0x11800000
|
||||
#define EXYNOS4_PA_FIMC1 0x11810000
|
||||
|
@ -44,14 +45,23 @@
|
|||
#define EXYNOS4_PA_ONENAND 0x0C000000
|
||||
#define EXYNOS4_PA_ONENAND_DMA 0x0C600000
|
||||
|
||||
#define EXYNOS4_PA_CHIPID 0x10000000
|
||||
#define EXYNOS_PA_CHIPID 0x10000000
|
||||
|
||||
#define EXYNOS4_PA_SYSCON 0x10010000
|
||||
#define EXYNOS5_PA_SYSCON 0x10050100
|
||||
|
||||
#define EXYNOS4_PA_PMU 0x10020000
|
||||
#define EXYNOS5_PA_PMU 0x10040000
|
||||
|
||||
#define EXYNOS4_PA_CMU 0x10030000
|
||||
#define EXYNOS5_PA_CMU 0x10010000
|
||||
|
||||
#define EXYNOS4_PA_SYSTIMER 0x10050000
|
||||
#define EXYNOS5_PA_SYSTIMER 0x101C0000
|
||||
|
||||
#define EXYNOS4_PA_WATCHDOG 0x10060000
|
||||
#define EXYNOS5_PA_WATCHDOG 0x101D0000
|
||||
|
||||
#define EXYNOS4_PA_RTC 0x10070000
|
||||
|
||||
#define EXYNOS4_PA_KEYPAD 0x100A0000
|
||||
|
@ -59,9 +69,12 @@
|
|||
#define EXYNOS4_PA_DMC0 0x10400000
|
||||
|
||||
#define EXYNOS4_PA_COMBINER 0x10440000
|
||||
#define EXYNOS5_PA_COMBINER 0x10440000
|
||||
|
||||
#define EXYNOS4_PA_GIC_CPU 0x10480000
|
||||
#define EXYNOS4_PA_GIC_DIST 0x10490000
|
||||
#define EXYNOS5_PA_GIC_CPU 0x10480000
|
||||
#define EXYNOS5_PA_GIC_DIST 0x10490000
|
||||
|
||||
#define EXYNOS4_PA_COREPERI 0x10500000
|
||||
#define EXYNOS4_PA_TWD 0x10500600
|
||||
|
@ -92,7 +105,6 @@
|
|||
#define EXYNOS4_PA_SPI1 0x13930000
|
||||
#define EXYNOS4_PA_SPI2 0x13940000
|
||||
|
||||
|
||||
#define EXYNOS4_PA_GPIO1 0x11400000
|
||||
#define EXYNOS4_PA_GPIO2 0x11000000
|
||||
#define EXYNOS4_PA_GPIO3 0x03860000
|
||||
|
@ -110,6 +122,7 @@
|
|||
#define EXYNOS4_PA_SATAPHY_CTRL 0x126B0000
|
||||
|
||||
#define EXYNOS4_PA_SROMC 0x12570000
|
||||
#define EXYNOS5_PA_SROMC 0x12250000
|
||||
|
||||
#define EXYNOS4_PA_EHCI 0x12580000
|
||||
#define EXYNOS4_PA_OHCI 0x12590000
|
||||
|
@ -117,6 +130,7 @@
|
|||
#define EXYNOS4_PA_MFC 0x13400000
|
||||
|
||||
#define EXYNOS4_PA_UART 0x13800000
|
||||
#define EXYNOS5_PA_UART 0x12C00000
|
||||
|
||||
#define EXYNOS4_PA_VP 0x12C00000
|
||||
#define EXYNOS4_PA_MIXER 0x12C10000
|
||||
|
@ -125,6 +139,7 @@
|
|||
#define EXYNOS4_PA_IIC_HDMIPHY 0x138E0000
|
||||
|
||||
#define EXYNOS4_PA_IIC(x) (0x13860000 + ((x) * 0x10000))
|
||||
#define EXYNOS5_PA_IIC(x) (0x12C60000 + ((x) * 0x10000))
|
||||
|
||||
#define EXYNOS4_PA_ADC 0x13910000
|
||||
#define EXYNOS4_PA_ADC1 0x13911000
|
||||
|
@ -134,8 +149,10 @@
|
|||
#define EXYNOS4_PA_SPDIF 0x139B0000
|
||||
|
||||
#define EXYNOS4_PA_TIMER 0x139D0000
|
||||
#define EXYNOS5_PA_TIMER 0x12DD0000
|
||||
|
||||
#define EXYNOS4_PA_SDRAM 0x40000000
|
||||
#define EXYNOS5_PA_SDRAM 0x40000000
|
||||
|
||||
/* Compatibiltiy Defines */
|
||||
|
||||
|
@ -153,7 +170,6 @@
|
|||
#define S3C_PA_IIC7 EXYNOS4_PA_IIC(7)
|
||||
#define S3C_PA_RTC EXYNOS4_PA_RTC
|
||||
#define S3C_PA_WDT EXYNOS4_PA_WATCHDOG
|
||||
#define S3C_PA_UART EXYNOS4_PA_UART
|
||||
#define S3C_PA_SPI0 EXYNOS4_PA_SPI0
|
||||
#define S3C_PA_SPI1 EXYNOS4_PA_SPI1
|
||||
#define S3C_PA_SPI2 EXYNOS4_PA_SPI2
|
||||
|
@ -182,15 +198,18 @@
|
|||
|
||||
/* Compatibility UART */
|
||||
|
||||
#define EXYNOS4_PA_UART0 0x13800000
|
||||
#define EXYNOS4_PA_UART1 0x13810000
|
||||
#define EXYNOS4_PA_UART2 0x13820000
|
||||
#define EXYNOS4_PA_UART3 0x13830000
|
||||
#define EXYNOS4_SZ_UART SZ_256
|
||||
|
||||
#define EXYNOS5_PA_UART0 0x12C00000
|
||||
#define EXYNOS5_PA_UART1 0x12C10000
|
||||
#define EXYNOS5_PA_UART2 0x12C20000
|
||||
#define EXYNOS5_PA_UART3 0x12C30000
|
||||
#define EXYNOS5_SZ_UART SZ_256
|
||||
|
||||
#define S3C_VA_UARTx(x) (S3C_VA_UART + ((x) * S3C_UART_OFFSET))
|
||||
|
||||
#define S5P_PA_UART(x) (EXYNOS4_PA_UART + ((x) * S3C_UART_OFFSET))
|
||||
#define S5P_PA_UART0 S5P_PA_UART(0)
|
||||
#define S5P_PA_UART1 S5P_PA_UART(1)
|
||||
#define S5P_PA_UART2 S5P_PA_UART(2)
|
||||
#define S5P_PA_UART3 S5P_PA_UART(3)
|
||||
#define S5P_PA_UART4 S5P_PA_UART(4)
|
||||
|
||||
#define S5P_SZ_UART SZ_256
|
||||
|
||||
#endif /* __ASM_ARCH_MAP_H */
|
||||
|
|
|
@ -253,6 +253,68 @@
|
|||
#define EXYNOS4_CLKDIV_CAM1_JPEG_SHIFT (0)
|
||||
#define EXYNOS4_CLKDIV_CAM1_JPEG_MASK (0xf << EXYNOS4_CLKDIV_CAM1_JPEG_SHIFT)
|
||||
|
||||
/* For EXYNOS5250 */
|
||||
|
||||
#define EXYNOS5_APLL_CON0 EXYNOS_CLKREG(0x00100)
|
||||
#define EXYNOS5_CLKSRC_CPU EXYNOS_CLKREG(0x00200)
|
||||
#define EXYNOS5_CLKDIV_CPU0 EXYNOS_CLKREG(0x00500)
|
||||
#define EXYNOS5_MPLL_CON0 EXYNOS_CLKREG(0x04100)
|
||||
#define EXYNOS5_CLKSRC_CORE1 EXYNOS_CLKREG(0x04204)
|
||||
|
||||
#define EXYNOS5_CLKGATE_IP_CORE EXYNOS_CLKREG(0x04900)
|
||||
|
||||
#define EXYNOS5_CLKDIV_ACP EXYNOS_CLKREG(0x08500)
|
||||
|
||||
#define EXYNOS5_CLKSRC_TOP2 EXYNOS_CLKREG(0x10218)
|
||||
#define EXYNOS5_EPLL_CON0 EXYNOS_CLKREG(0x10130)
|
||||
#define EXYNOS5_EPLL_CON1 EXYNOS_CLKREG(0x10134)
|
||||
#define EXYNOS5_VPLL_CON0 EXYNOS_CLKREG(0x10140)
|
||||
#define EXYNOS5_VPLL_CON1 EXYNOS_CLKREG(0x10144)
|
||||
#define EXYNOS5_CPLL_CON0 EXYNOS_CLKREG(0x10120)
|
||||
|
||||
#define EXYNOS5_CLKSRC_TOP0 EXYNOS_CLKREG(0x10210)
|
||||
#define EXYNOS5_CLKSRC_TOP3 EXYNOS_CLKREG(0x1021C)
|
||||
#define EXYNOS5_CLKSRC_GSCL EXYNOS_CLKREG(0x10220)
|
||||
#define EXYNOS5_CLKSRC_DISP1_0 EXYNOS_CLKREG(0x1022C)
|
||||
#define EXYNOS5_CLKSRC_FSYS EXYNOS_CLKREG(0x10244)
|
||||
#define EXYNOS5_CLKSRC_PERIC0 EXYNOS_CLKREG(0x10250)
|
||||
|
||||
#define EXYNOS5_CLKSRC_MASK_TOP EXYNOS_CLKREG(0x10310)
|
||||
#define EXYNOS5_CLKSRC_MASK_GSCL EXYNOS_CLKREG(0x10320)
|
||||
#define EXYNOS5_CLKSRC_MASK_DISP1_0 EXYNOS_CLKREG(0x1032C)
|
||||
#define EXYNOS5_CLKSRC_MASK_FSYS EXYNOS_CLKREG(0x10340)
|
||||
#define EXYNOS5_CLKSRC_MASK_PERIC0 EXYNOS_CLKREG(0x10350)
|
||||
|
||||
#define EXYNOS5_CLKDIV_TOP0 EXYNOS_CLKREG(0x10510)
|
||||
#define EXYNOS5_CLKDIV_TOP1 EXYNOS_CLKREG(0x10514)
|
||||
#define EXYNOS5_CLKDIV_GSCL EXYNOS_CLKREG(0x10520)
|
||||
#define EXYNOS5_CLKDIV_DISP1_0 EXYNOS_CLKREG(0x1052C)
|
||||
#define EXYNOS5_CLKDIV_GEN EXYNOS_CLKREG(0x1053C)
|
||||
#define EXYNOS5_CLKDIV_FSYS0 EXYNOS_CLKREG(0x10548)
|
||||
#define EXYNOS5_CLKDIV_FSYS1 EXYNOS_CLKREG(0x1054C)
|
||||
#define EXYNOS5_CLKDIV_FSYS2 EXYNOS_CLKREG(0x10550)
|
||||
#define EXYNOS5_CLKDIV_FSYS3 EXYNOS_CLKREG(0x10554)
|
||||
#define EXYNOS5_CLKDIV_PERIC0 EXYNOS_CLKREG(0x10558)
|
||||
|
||||
#define EXYNOS5_CLKGATE_IP_ACP EXYNOS_CLKREG(0x08800)
|
||||
#define EXYNOS5_CLKGATE_IP_GSCL EXYNOS_CLKREG(0x10920)
|
||||
#define EXYNOS5_CLKGATE_IP_DISP1 EXYNOS_CLKREG(0x10928)
|
||||
#define EXYNOS5_CLKGATE_IP_MFC EXYNOS_CLKREG(0x1092C)
|
||||
#define EXYNOS5_CLKGATE_IP_GEN EXYNOS_CLKREG(0x10934)
|
||||
#define EXYNOS5_CLKGATE_IP_FSYS EXYNOS_CLKREG(0x10944)
|
||||
#define EXYNOS5_CLKGATE_IP_GPS EXYNOS_CLKREG(0x1094C)
|
||||
#define EXYNOS5_CLKGATE_IP_PERIC EXYNOS_CLKREG(0x10950)
|
||||
#define EXYNOS5_CLKGATE_IP_PERIS EXYNOS_CLKREG(0x10960)
|
||||
#define EXYNOS5_CLKGATE_BLOCK EXYNOS_CLKREG(0x10980)
|
||||
|
||||
#define EXYNOS5_BPLL_CON0 EXYNOS_CLKREG(0x20110)
|
||||
#define EXYNOS5_CLKSRC_CDREX EXYNOS_CLKREG(0x20200)
|
||||
#define EXYNOS5_CLKDIV_CDREX EXYNOS_CLKREG(0x20500)
|
||||
|
||||
#define EXYNOS5_EPLL_LOCK EXYNOS_CLKREG(0x10030)
|
||||
|
||||
#define EXYNOS5_EPLLCON0_LOCKED_SHIFT (29)
|
||||
|
||||
/* Compatibility defines and inclusion */
|
||||
|
||||
#include <mach/regs-pmu.h>
|
||||
|
|
|
@ -16,6 +16,15 @@
|
|||
#include <mach/map.h>
|
||||
#include <mach/irqs.h>
|
||||
|
||||
#define EINT_REG_NR(x) (EINT_OFFSET(x) >> 3)
|
||||
#define EINT_CON(b, x) (b + 0xE00 + (EINT_REG_NR(x) * 4))
|
||||
#define EINT_FLTCON(b, x) (b + 0xE80 + (EINT_REG_NR(x) * 4))
|
||||
#define EINT_MASK(b, x) (b + 0xF00 + (EINT_REG_NR(x) * 4))
|
||||
#define EINT_PEND(b, x) (b + 0xF40 + (EINT_REG_NR(x) * 4))
|
||||
|
||||
#define EINT_OFFSET_BIT(x) (1 << (EINT_OFFSET(x) & 0x7))
|
||||
|
||||
/* compatibility for plat-s5p/irq-pm.c */
|
||||
#define EXYNOS4_EINT40CON (S5P_VA_GPIO2 + 0xE00)
|
||||
#define S5P_EINT_CON(x) (EXYNOS4_EINT40CON + ((x) * 0x4))
|
||||
|
||||
|
@ -28,15 +37,4 @@
|
|||
#define EXYNOS4_EINT40PEND (S5P_VA_GPIO2 + 0xF40)
|
||||
#define S5P_EINT_PEND(x) (EXYNOS4_EINT40PEND + ((x) * 0x4))
|
||||
|
||||
#define EINT_REG_NR(x) (EINT_OFFSET(x) >> 3)
|
||||
|
||||
#define eint_irq_to_bit(irq) (1 << (EINT_OFFSET(irq) & 0x7))
|
||||
|
||||
#define EINT_MODE S3C_GPIO_SFN(0xf)
|
||||
|
||||
#define EINT_GPIO_0(x) EXYNOS4_GPX0(x)
|
||||
#define EINT_GPIO_1(x) EXYNOS4_GPX1(x)
|
||||
#define EINT_GPIO_2(x) EXYNOS4_GPX2(x)
|
||||
#define EINT_GPIO_3(x) EXYNOS4_GPX3(x)
|
||||
|
||||
#endif /* __ASM_ARCH_REGS_GPIO_H */
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
#define S5P_USE_STANDBYWFE_ISP_ARM (1 << 26)
|
||||
|
||||
#define S5P_SWRESET S5P_PMUREG(0x0400)
|
||||
#define EXYNOS_SWRESET S5P_PMUREG(0x0400)
|
||||
|
||||
#define S5P_WAKEUP_STAT S5P_PMUREG(0x0600)
|
||||
#define S5P_EINT_WAKEUP_MASK S5P_PMUREG(0x0604)
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
/* linux/arch/arm/mach-exynos4/include/mach/uncompress.h
|
||||
*
|
||||
* Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
|
||||
/*
|
||||
* Copyright (c) 2010-2012 Samsung Electronics Co., Ltd.
|
||||
* http://www.samsung.com
|
||||
*
|
||||
* EXYNOS4 - uncompress code
|
||||
* EXYNOS - uncompress code
|
||||
*
|
||||
* 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
|
||||
|
@ -13,12 +12,20 @@
|
|||
#ifndef __ASM_ARCH_UNCOMPRESS_H
|
||||
#define __ASM_ARCH_UNCOMPRESS_H __FILE__
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <mach/map.h>
|
||||
|
||||
volatile u8 *uart_base;
|
||||
|
||||
#include <plat/uncompress.h>
|
||||
|
||||
static void arch_detect_cpu(void)
|
||||
{
|
||||
/* we do not need to do any cpu detection here at the moment. */
|
||||
if (machine_is_smdk5250())
|
||||
uart_base = (volatile u8 *)EXYNOS5_PA_UART + (S3C_UART_OFFSET * CONFIG_S3C_LOWLEVEL_UART_PORT);
|
||||
else
|
||||
uart_base = (volatile u8 *)EXYNOS4_PA_UART + (S3C_UART_OFFSET * CONFIG_S3C_LOWLEVEL_UART_PORT);
|
||||
|
||||
/*
|
||||
* For preventing FIFO overrun or infinite loop of UART console,
|
||||
|
|
|
@ -37,13 +37,13 @@
|
|||
* data from the device tree.
|
||||
*/
|
||||
static const struct of_dev_auxdata exynos4210_auxdata_lookup[] __initconst = {
|
||||
OF_DEV_AUXDATA("samsung,exynos4210-uart", S5P_PA_UART0,
|
||||
OF_DEV_AUXDATA("samsung,exynos4210-uart", EXYNOS4_PA_UART0,
|
||||
"exynos4210-uart.0", NULL),
|
||||
OF_DEV_AUXDATA("samsung,exynos4210-uart", S5P_PA_UART1,
|
||||
OF_DEV_AUXDATA("samsung,exynos4210-uart", EXYNOS4_PA_UART1,
|
||||
"exynos4210-uart.1", NULL),
|
||||
OF_DEV_AUXDATA("samsung,exynos4210-uart", S5P_PA_UART2,
|
||||
OF_DEV_AUXDATA("samsung,exynos4210-uart", EXYNOS4_PA_UART2,
|
||||
"exynos4210-uart.2", NULL),
|
||||
OF_DEV_AUXDATA("samsung,exynos4210-uart", S5P_PA_UART3,
|
||||
OF_DEV_AUXDATA("samsung,exynos4210-uart", EXYNOS4_PA_UART3,
|
||||
"exynos4210-uart.3", NULL),
|
||||
OF_DEV_AUXDATA("samsung,exynos4210-sdhci", EXYNOS4_PA_HSMMC(0),
|
||||
"exynos4-sdhci.0", NULL),
|
||||
|
|
78
arch/arm/mach-exynos/mach-exynos5-dt.c
Normal file
78
arch/arm/mach-exynos/mach-exynos5-dt.c
Normal file
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
* SAMSUNG EXYNOS5250 Flattened Device Tree enabled machine
|
||||
*
|
||||
* Copyright (c) 2012 Samsung Electronics Co., Ltd.
|
||||
* http://www.samsung.com
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/serial_core.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/hardware/gic.h>
|
||||
#include <mach/map.h>
|
||||
|
||||
#include <plat/cpu.h>
|
||||
#include <plat/regs-serial.h>
|
||||
|
||||
#include "common.h"
|
||||
|
||||
/*
|
||||
* The following lookup table is used to override device names when devices
|
||||
* are registered from device tree. This is temporarily added to enable
|
||||
* device tree support addition for the EXYNOS5 architecture.
|
||||
*
|
||||
* For drivers that require platform data to be provided from the machine
|
||||
* file, a platform data pointer can also be supplied along with the
|
||||
* devices names. Usually, the platform data elements that cannot be parsed
|
||||
* from the device tree by the drivers (example: function pointers) are
|
||||
* supplied. But it should be noted that this is a temporary mechanism and
|
||||
* at some point, the drivers should be capable of parsing all the platform
|
||||
* data from the device tree.
|
||||
*/
|
||||
static const struct of_dev_auxdata exynos5250_auxdata_lookup[] __initconst = {
|
||||
OF_DEV_AUXDATA("samsung,exynos4210-uart", EXYNOS5_PA_UART0,
|
||||
"exynos4210-uart.0", NULL),
|
||||
OF_DEV_AUXDATA("samsung,exynos4210-uart", EXYNOS5_PA_UART1,
|
||||
"exynos4210-uart.1", NULL),
|
||||
OF_DEV_AUXDATA("samsung,exynos4210-uart", EXYNOS5_PA_UART2,
|
||||
"exynos4210-uart.2", NULL),
|
||||
OF_DEV_AUXDATA("samsung,exynos4210-uart", EXYNOS5_PA_UART3,
|
||||
"exynos4210-uart.3", NULL),
|
||||
OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_PDMA0, "dma-pl330.0", NULL),
|
||||
OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_PDMA1, "dma-pl330.1", NULL),
|
||||
OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_PDMA1, "dma-pl330.2", NULL),
|
||||
{},
|
||||
};
|
||||
|
||||
static void __init exynos5250_dt_map_io(void)
|
||||
{
|
||||
exynos_init_io(NULL, 0);
|
||||
s3c24xx_init_clocks(24000000);
|
||||
}
|
||||
|
||||
static void __init exynos5250_dt_machine_init(void)
|
||||
{
|
||||
of_platform_populate(NULL, of_default_bus_match_table,
|
||||
exynos5250_auxdata_lookup, NULL);
|
||||
}
|
||||
|
||||
static char const *exynos5250_dt_compat[] __initdata = {
|
||||
"samsung,exynos5250",
|
||||
NULL
|
||||
};
|
||||
|
||||
DT_MACHINE_START(EXYNOS5_DT, "SAMSUNG EXYNOS5 (Flattened Device Tree)")
|
||||
/* Maintainer: Kukjin Kim <kgene.kim@samsung.com> */
|
||||
.init_irq = exynos5_init_irq,
|
||||
.map_io = exynos5250_dt_map_io,
|
||||
.handle_irq = gic_handle_irq,
|
||||
.init_machine = exynos5250_dt_machine_init,
|
||||
.timer = &exynos4_timer,
|
||||
.dt_compat = exynos5250_dt_compat,
|
||||
.restart = exynos5_restart,
|
||||
MACHINE_END
|
|
@ -258,7 +258,10 @@ static void exynos4_clockevent_init(void)
|
|||
mct_comp_device.cpumask = cpumask_of(0);
|
||||
clockevents_register_device(&mct_comp_device);
|
||||
|
||||
setup_irq(IRQ_MCT_G0, &mct_comp_event_irq);
|
||||
if (soc_is_exynos5250())
|
||||
setup_irq(EXYNOS5_IRQ_MCT_G0, &mct_comp_event_irq);
|
||||
else
|
||||
setup_irq(EXYNOS4_IRQ_MCT_G0, &mct_comp_event_irq);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_LOCAL_TIMERS
|
||||
|
@ -406,16 +409,16 @@ static void exynos4_mct_tick_init(struct clock_event_device *evt)
|
|||
if (mct_int_type == MCT_INT_SPI) {
|
||||
if (cpu == 0) {
|
||||
mct_tick0_event_irq.dev_id = mevt;
|
||||
evt->irq = IRQ_MCT_L0;
|
||||
setup_irq(IRQ_MCT_L0, &mct_tick0_event_irq);
|
||||
evt->irq = EXYNOS4_IRQ_MCT_L0;
|
||||
setup_irq(EXYNOS4_IRQ_MCT_L0, &mct_tick0_event_irq);
|
||||
} else {
|
||||
mct_tick1_event_irq.dev_id = mevt;
|
||||
evt->irq = IRQ_MCT_L1;
|
||||
setup_irq(IRQ_MCT_L1, &mct_tick1_event_irq);
|
||||
irq_set_affinity(IRQ_MCT_L1, cpumask_of(1));
|
||||
evt->irq = EXYNOS4_IRQ_MCT_L1;
|
||||
setup_irq(EXYNOS4_IRQ_MCT_L1, &mct_tick1_event_irq);
|
||||
irq_set_affinity(EXYNOS4_IRQ_MCT_L1, cpumask_of(1));
|
||||
}
|
||||
} else {
|
||||
enable_percpu_irq(IRQ_MCT_LOCALTIMER, 0);
|
||||
enable_percpu_irq(EXYNOS_IRQ_MCT_LOCALTIMER, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -437,7 +440,7 @@ void local_timer_stop(struct clock_event_device *evt)
|
|||
else
|
||||
remove_irq(evt->irq, &mct_tick1_event_irq);
|
||||
else
|
||||
disable_percpu_irq(IRQ_MCT_LOCALTIMER);
|
||||
disable_percpu_irq(EXYNOS_IRQ_MCT_LOCALTIMER);
|
||||
}
|
||||
#endif /* CONFIG_LOCAL_TIMERS */
|
||||
|
||||
|
@ -452,11 +455,11 @@ static void __init exynos4_timer_resources(void)
|
|||
if (mct_int_type == MCT_INT_PPI) {
|
||||
int err;
|
||||
|
||||
err = request_percpu_irq(IRQ_MCT_LOCALTIMER,
|
||||
err = request_percpu_irq(EXYNOS_IRQ_MCT_LOCALTIMER,
|
||||
exynos4_mct_tick_isr, "MCT",
|
||||
&percpu_mct_tick);
|
||||
WARN(err, "MCT: can't request IRQ %d (%d)\n",
|
||||
IRQ_MCT_LOCALTIMER, err);
|
||||
EXYNOS_IRQ_MCT_LOCALTIMER, err);
|
||||
}
|
||||
#endif /* CONFIG_LOCAL_TIMERS */
|
||||
}
|
||||
|
|
|
@ -166,7 +166,10 @@ void __init smp_init_cpus(void)
|
|||
void __iomem *scu_base = scu_base_addr();
|
||||
unsigned int i, ncores;
|
||||
|
||||
ncores = scu_base ? scu_get_core_count(scu_base) : 1;
|
||||
if (soc_is_exynos5250())
|
||||
ncores = 2;
|
||||
else
|
||||
ncores = scu_base ? scu_get_core_count(scu_base) : 1;
|
||||
|
||||
/* sanity check */
|
||||
if (ncores > nr_cpu_ids) {
|
||||
|
@ -183,8 +186,8 @@ void __init smp_init_cpus(void)
|
|||
|
||||
void __init platform_smp_prepare_cpus(unsigned int max_cpus)
|
||||
{
|
||||
|
||||
scu_enable(scu_base_addr());
|
||||
if (!soc_is_exynos5250())
|
||||
scu_enable(scu_base_addr());
|
||||
|
||||
/*
|
||||
* Write the address of secondary startup into the
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-exynos4/setup-i2c0.c
|
||||
*
|
||||
* Copyright (c) 2009-2010 Samsung Electronics Co., Ltd.
|
||||
* Copyright (c) 2009-2012 Samsung Electronics Co., Ltd.
|
||||
* http://www.samsung.com/
|
||||
*
|
||||
* I2C0 GPIO configuration.
|
||||
|
@ -18,9 +16,14 @@ struct platform_device; /* don't need the contents */
|
|||
#include <linux/gpio.h>
|
||||
#include <plat/iic.h>
|
||||
#include <plat/gpio-cfg.h>
|
||||
#include <plat/cpu.h>
|
||||
|
||||
void s3c_i2c0_cfg_gpio(struct platform_device *dev)
|
||||
{
|
||||
if (soc_is_exynos5250())
|
||||
/* will be implemented with gpio function */
|
||||
return;
|
||||
|
||||
s3c_gpio_cfgall_range(EXYNOS4_GPD1(0), 2,
|
||||
S3C_GPIO_SFN(2), S3C_GPIO_PULL_UP);
|
||||
}
|
||||
|
|
|
@ -9,8 +9,8 @@ config PLAT_S5P
|
|||
bool
|
||||
depends on (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210 || ARCH_EXYNOS)
|
||||
default y
|
||||
select ARM_VIC if !ARCH_EXYNOS4
|
||||
select ARM_GIC if ARCH_EXYNOS4
|
||||
select ARM_VIC if !ARCH_EXYNOS
|
||||
select ARM_GIC if ARCH_EXYNOS
|
||||
select GIC_NON_BANKED if ARCH_EXYNOS4
|
||||
select NO_IOPORT
|
||||
select ARCH_REQUIRE_GPIOLIB
|
||||
|
@ -40,6 +40,10 @@ config S5P_HRT
|
|||
help
|
||||
Use the High Resolution timer support
|
||||
|
||||
config S5P_DEV_UART
|
||||
def_bool y
|
||||
depends on (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210)
|
||||
|
||||
config S5P_PM
|
||||
bool
|
||||
help
|
||||
|
|
|
@ -12,7 +12,6 @@ obj- :=
|
|||
|
||||
# Core files
|
||||
|
||||
obj-y += dev-uart.o
|
||||
obj-y += clock.o
|
||||
obj-y += irq.o
|
||||
obj-$(CONFIG_S5P_EXT_INT) += irq-eint.o
|
||||
|
@ -23,5 +22,7 @@ obj-$(CONFIG_S5P_SLEEP) += sleep.o
|
|||
obj-$(CONFIG_S5P_HRT) += s5p-time.o
|
||||
|
||||
# devices
|
||||
|
||||
obj-$(CONFIG_S5P_DEV_UART) += dev-uart.o
|
||||
obj-$(CONFIG_S5P_DEV_MFC) += dev-mfc.o
|
||||
obj-$(CONFIG_S5P_SETUP_MIPIPHY) += setup-mipiphy.o
|
||||
|
|
|
@ -61,6 +61,20 @@ struct clk clk_fout_apll = {
|
|||
.id = -1,
|
||||
};
|
||||
|
||||
/* BPLL clock output */
|
||||
|
||||
struct clk clk_fout_bpll = {
|
||||
.name = "fout_bpll",
|
||||
.id = -1,
|
||||
};
|
||||
|
||||
/* CPLL clock output */
|
||||
|
||||
struct clk clk_fout_cpll = {
|
||||
.name = "fout_cpll",
|
||||
.id = -1,
|
||||
};
|
||||
|
||||
/* MPLL clock output
|
||||
* No need .ctrlbit, this is always on
|
||||
*/
|
||||
|
@ -101,6 +115,28 @@ struct clksrc_sources clk_src_apll = {
|
|||
.nr_sources = ARRAY_SIZE(clk_src_apll_list),
|
||||
};
|
||||
|
||||
/* Possible clock sources for BPLL Mux */
|
||||
static struct clk *clk_src_bpll_list[] = {
|
||||
[0] = &clk_fin_bpll,
|
||||
[1] = &clk_fout_bpll,
|
||||
};
|
||||
|
||||
struct clksrc_sources clk_src_bpll = {
|
||||
.sources = clk_src_bpll_list,
|
||||
.nr_sources = ARRAY_SIZE(clk_src_bpll_list),
|
||||
};
|
||||
|
||||
/* Possible clock sources for CPLL Mux */
|
||||
static struct clk *clk_src_cpll_list[] = {
|
||||
[0] = &clk_fin_cpll,
|
||||
[1] = &clk_fout_cpll,
|
||||
};
|
||||
|
||||
struct clksrc_sources clk_src_cpll = {
|
||||
.sources = clk_src_cpll_list,
|
||||
.nr_sources = ARRAY_SIZE(clk_src_cpll_list),
|
||||
};
|
||||
|
||||
/* Possible clock sources for MPLL Mux */
|
||||
static struct clk *clk_src_mpll_list[] = {
|
||||
[0] = &clk_fin_mpll,
|
||||
|
|
|
@ -39,19 +39,32 @@ unsigned long s3c_irqwake_eintallow = 0xffffffffL;
|
|||
int s3c_irq_wake(struct irq_data *data, unsigned int state)
|
||||
{
|
||||
unsigned long irqbit;
|
||||
unsigned int irq_rtc_tic, irq_rtc_alarm;
|
||||
|
||||
#ifdef CONFIG_ARCH_EXYNOS
|
||||
if (soc_is_exynos5250()) {
|
||||
irq_rtc_tic = EXYNOS5_IRQ_RTC_TIC;
|
||||
irq_rtc_alarm = EXYNOS5_IRQ_RTC_ALARM;
|
||||
} else {
|
||||
irq_rtc_tic = EXYNOS4_IRQ_RTC_TIC;
|
||||
irq_rtc_alarm = EXYNOS4_IRQ_RTC_ALARM;
|
||||
}
|
||||
#else
|
||||
irq_rtc_tic = IRQ_RTC_TIC;
|
||||
irq_rtc_alarm = IRQ_RTC_ALARM;
|
||||
#endif
|
||||
|
||||
if (data->irq == irq_rtc_tic || data->irq == irq_rtc_alarm) {
|
||||
irqbit = 1 << (data->irq + 1 - irq_rtc_alarm);
|
||||
|
||||
switch (data->irq) {
|
||||
case IRQ_RTC_TIC:
|
||||
case IRQ_RTC_ALARM:
|
||||
irqbit = 1 << (data->irq + 1 - IRQ_RTC_ALARM);
|
||||
if (!state)
|
||||
s3c_irqwake_intmask |= irqbit;
|
||||
else
|
||||
s3c_irqwake_intmask &= ~irqbit;
|
||||
break;
|
||||
default:
|
||||
} else {
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -42,6 +42,9 @@ extern unsigned long samsung_cpu_id;
|
|||
#define EXYNOS4412_CPU_ID 0xE4412200
|
||||
#define EXYNOS4_CPU_MASK 0xFFFE0000
|
||||
|
||||
#define EXYNOS5250_SOC_ID 0x43520000
|
||||
#define EXYNOS5_SOC_MASK 0xFFFFF000
|
||||
|
||||
#define IS_SAMSUNG_CPU(name, id, mask) \
|
||||
static inline int is_samsung_##name(void) \
|
||||
{ \
|
||||
|
@ -58,6 +61,7 @@ IS_SAMSUNG_CPU(s5pv210, S5PV210_CPU_ID, S5PV210_CPU_MASK)
|
|||
IS_SAMSUNG_CPU(exynos4210, EXYNOS4210_CPU_ID, EXYNOS4_CPU_MASK)
|
||||
IS_SAMSUNG_CPU(exynos4212, EXYNOS4212_CPU_ID, EXYNOS4_CPU_MASK)
|
||||
IS_SAMSUNG_CPU(exynos4412, EXYNOS4412_CPU_ID, EXYNOS4_CPU_MASK)
|
||||
IS_SAMSUNG_CPU(exynos5250, EXYNOS5250_SOC_ID, EXYNOS5_SOC_MASK)
|
||||
|
||||
#if defined(CONFIG_CPU_S3C2410) || defined(CONFIG_CPU_S3C2412) || \
|
||||
defined(CONFIG_CPU_S3C2416) || defined(CONFIG_CPU_S3C2440) || \
|
||||
|
@ -120,6 +124,12 @@ IS_SAMSUNG_CPU(exynos4412, EXYNOS4412_CPU_ID, EXYNOS4_CPU_MASK)
|
|||
#define EXYNOS4210_REV_1_0 (0x10)
|
||||
#define EXYNOS4210_REV_1_1 (0x11)
|
||||
|
||||
#if defined(CONFIG_SOC_EXYNOS5250)
|
||||
# define soc_is_exynos5250() is_samsung_exynos5250()
|
||||
#else
|
||||
# define soc_is_exynos5250() 0
|
||||
#endif
|
||||
|
||||
#define IODESC_ENT(x) { (unsigned long)S3C24XX_VA_##x, __phys_to_pfn(S3C24XX_PA_##x), S3C24XX_SZ_##x, MT_DEVICE }
|
||||
|
||||
#ifndef MHZ
|
||||
|
|
|
@ -26,6 +26,8 @@ struct s3c24xx_uart_resources {
|
|||
extern struct s3c24xx_uart_resources s3c2410_uart_resources[];
|
||||
extern struct s3c24xx_uart_resources s3c64xx_uart_resources[];
|
||||
extern struct s3c24xx_uart_resources s5p_uart_resources[];
|
||||
extern struct s3c24xx_uart_resources exynos4_uart_resources[];
|
||||
extern struct s3c24xx_uart_resources exynos5_uart_resources[];
|
||||
|
||||
extern struct platform_device *s3c24xx_uart_devs[];
|
||||
extern struct platform_device *s3c24xx_uart_src[];
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
#define GET_DIV(clk, field) ((((clk) & field##_MASK) >> field##_SHIFT) + 1)
|
||||
|
||||
#define clk_fin_apll clk_ext_xtal_mux
|
||||
#define clk_fin_bpll clk_ext_xtal_mux
|
||||
#define clk_fin_cpll clk_ext_xtal_mux
|
||||
#define clk_fin_mpll clk_ext_xtal_mux
|
||||
#define clk_fin_epll clk_ext_xtal_mux
|
||||
#define clk_fin_dpll clk_ext_xtal_mux
|
||||
|
@ -29,6 +31,8 @@ extern struct clk clk_xusbxti;
|
|||
extern struct clk clk_48m;
|
||||
extern struct clk s5p_clk_27m;
|
||||
extern struct clk clk_fout_apll;
|
||||
extern struct clk clk_fout_bpll;
|
||||
extern struct clk clk_fout_cpll;
|
||||
extern struct clk clk_fout_mpll;
|
||||
extern struct clk clk_fout_epll;
|
||||
extern struct clk clk_fout_dpll;
|
||||
|
@ -37,6 +41,8 @@ extern struct clk clk_arm;
|
|||
extern struct clk clk_vpll;
|
||||
|
||||
extern struct clksrc_sources clk_src_apll;
|
||||
extern struct clksrc_sources clk_src_bpll;
|
||||
extern struct clksrc_sources clk_src_cpll;
|
||||
extern struct clksrc_sources clk_src_mpll;
|
||||
extern struct clksrc_sources clk_src_epll;
|
||||
extern struct clksrc_sources clk_src_dpll;
|
||||
|
|
|
@ -37,7 +37,9 @@ static void arch_detect_cpu(void);
|
|||
/* how many bytes we allow into the FIFO at a time in FIFO mode */
|
||||
#define FIFO_MAX (14)
|
||||
|
||||
#ifdef S3C_PA_UART
|
||||
#define uart_base S3C_PA_UART + (S3C_UART_OFFSET * CONFIG_S3C_LOWLEVEL_UART_PORT)
|
||||
#endif
|
||||
|
||||
static __inline__ void
|
||||
uart_wr(unsigned int reg, unsigned int val)
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include <linux/io.h>
|
||||
|
||||
#include <mach/map.h>
|
||||
#include <plat/cpu.h>
|
||||
#include <plat/irq-vic-timer.h>
|
||||
#include <plat/regs-timer.h>
|
||||
|
||||
|
@ -57,6 +58,21 @@ void __init s3c_init_vic_timer_irq(unsigned int num, unsigned int timer_irq)
|
|||
struct irq_chip_type *ct;
|
||||
unsigned int i;
|
||||
|
||||
#ifdef CONFIG_ARCH_EXYNOS
|
||||
if (soc_is_exynos5250()) {
|
||||
pirq[0] = EXYNOS5_IRQ_TIMER0_VIC;
|
||||
pirq[1] = EXYNOS5_IRQ_TIMER1_VIC;
|
||||
pirq[2] = EXYNOS5_IRQ_TIMER2_VIC;
|
||||
pirq[3] = EXYNOS5_IRQ_TIMER3_VIC;
|
||||
pirq[4] = EXYNOS5_IRQ_TIMER4_VIC;
|
||||
} else {
|
||||
pirq[0] = EXYNOS4_IRQ_TIMER0_VIC;
|
||||
pirq[1] = EXYNOS4_IRQ_TIMER1_VIC;
|
||||
pirq[2] = EXYNOS4_IRQ_TIMER2_VIC;
|
||||
pirq[3] = EXYNOS4_IRQ_TIMER3_VIC;
|
||||
pirq[4] = EXYNOS4_IRQ_TIMER4_VIC;
|
||||
}
|
||||
#endif
|
||||
s3c_tgc = irq_alloc_generic_chip("s3c-timer", 1, timer_irq,
|
||||
S3C64XX_TINT_CSTAT, handle_level_irq);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue