diff options
59 files changed, 353 insertions, 457 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 482ba91e73a..bfd7c69c85a 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -932,32 +932,24 @@ config ARCH_DAVINCI  	help  	  Support for TI's DaVinci platform. -config ARCH_OMAP -	bool "TI OMAP" +config ARCH_OMAP1 +	bool "TI OMAP1"  	depends on MMU  	select ARCH_HAS_CPUFREQ  	select ARCH_HAS_HOLES_MEMORYMODEL -	select ARCH_REQUIRE_GPIOLIB -	select CLKSRC_MMIO -	select GENERIC_CLOCKEVENTS -	select HAVE_CLK -	help -	  Support for TI's OMAP platform (OMAP1/2/3/4). - -config ARCH_VT8500_SINGLE -	bool "VIA/WonderMedia 85xx" -	select ARCH_HAS_CPUFREQ +	select ARCH_OMAP  	select ARCH_REQUIRE_GPIOLIB  	select CLKDEV_LOOKUP -	select COMMON_CLK -	select CPU_ARM926T +	select CLKSRC_MMIO  	select GENERIC_CLOCKEVENTS +	select GENERIC_IRQ_CHIP  	select HAVE_CLK -	select MULTI_IRQ_HANDLER -	select SPARSE_IRQ -	select USE_OF +	select HAVE_IDE +	select IRQ_DOMAIN +	select NEED_MACH_IO_H if PCCARD +	select NEED_MACH_MEMORY_H  	help -	  Support for VIA/WonderMedia VT8500/WM85xx System-on-Chip. +	  Support for older TI OMAP1 (omap7xx, omap15xx or omap16xx)  endchoice diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug index ad375a51a7d..5f0cdf28c22 100644 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug @@ -291,6 +291,13 @@ choice  		  Say Y here if you want kernel low-level debugging support  		  on MVEBU based platforms. +	config DEBUG_OMAP2PLUS_UART +		bool "Kernel low-level debugging messages via OMAP2PLUS UART" +		depends on ARCH_OMAP2PLUS +		help +		  Say Y here if you want kernel low-level debugging support +		  on OMAP2PLUS based platforms. +  	config DEBUG_PICOXCELL_UART  		depends on ARCH_PICOXCELL  		bool "Use PicoXcell UART for low-level debug" @@ -412,6 +419,13 @@ choice  		  of the tiles using the RS1 memory map, including all new A-class  		  core tiles, FPGA-based SMMs and software models. +	config DEBUG_VT8500_UART0 +		bool "Use UART0 on VIA/Wondermedia SoCs" +		depends on ARCH_VT8500 +		help +		  This option selects UART0 on VIA/Wondermedia System-on-a-chip +		  devices, including VT8500, WM8505, WM8650 and WM8850. +  	config DEBUG_LL_UART_NONE  		bool "No low-level debugging UART"  		depends on !ARCH_MULTIPLATFORM @@ -461,6 +475,54 @@ config DEBUG_IMX6Q_UART_PORT  choice  	prompt "Low-level debug console UART" +	depends on DEBUG_OMAP2PLUS_UART + +	config DEBUG_OMAP2UART1 +		bool "OMAP2/3/4 UART1 (omap2/3 sdp boards and some omap3 boards)" +		help +		  This covers at least h4, 2430sdp, 3430sdp, 3630sdp, +		  omap3 torpedo and 3530 lv som. + +	config DEBUG_OMAP2UART2 +		bool "OMAP2/3/4 UART2" + +	config DEBUG_OMAP2UART3 +		bool "OMAP2 UART3 (n8x0)" + +	config DEBUG_OMAP3UART3 +		bool "OMAP3 UART3 (most omap3 boards)" +		help +		  This covers at least cm_t3x, beagle, crane, devkit8000, +		  igep00x0, ldp, n900, n9(50), pandora, overo, touchbook, +		  and 3517evm. + +	config DEBUG_OMAP4UART3 +		bool "OMAP4/5 UART3 (omap4 blaze, panda, omap5 sevm)" + +	config DEBUG_OMAP3UART4 +		bool "OMAP36XX UART4" + +	config DEBUG_OMAP4UART4 +		bool "OMAP4/5 UART4" + +	config DEBUG_TI81XXUART1 +		bool "TI81XX UART1 (ti8148evm)" + +	config DEBUG_TI81XXUART2 +		bool "TI81XX UART2" + +	config DEBUG_TI81XXUART3 +		bool "TI81XX UART3 (ti8168evm)" + +	config DEBUG_AM33XXUART1 +		bool "AM33XX UART1" + +	config DEBUG_ZOOM_UART +		bool "Zoom2/3 UART" +endchoice + +choice +	prompt "Low-level debug console UART"  	depends on DEBUG_LL && DEBUG_TEGRA_UART  	config TEGRA_DEBUG_UART_AUTO_ODMDATA @@ -501,11 +563,13 @@ config DEBUG_LL_INCLUDE  				 DEBUG_IMX6Q_UART  	default "debug/highbank.S" if DEBUG_HIGHBANK_UART  	default "debug/mvebu.S" if DEBUG_MVEBU_UART +	default "debug/omap2plus.S" if DEBUG_OMAP2PLUS_UART  	default "debug/picoxcell.S" if DEBUG_PICOXCELL_UART  	default "debug/socfpga.S" if DEBUG_SOCFPGA_UART  	default "debug/sunxi.S" if DEBUG_SUNXI_UART0 || DEBUG_SUNXI_UART1  	default "debug/vexpress.S" if DEBUG_VEXPRESS_UART0_DETECT || \  		DEBUG_VEXPRESS_UART0_CA9 || DEBUG_VEXPRESS_UART0_RS1 +	default "debug/vt8500.S" if DEBUG_VT8500_UART0  	default "debug/tegra.S" if DEBUG_TEGRA_UART  	default "debug/zynq.S" if DEBUG_ZYNQ_UART0 || DEBUG_ZYNQ_UART1  	default "mach/debug-macro.S" diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig index 2eeff1e64b6..e31d442343c 100644 --- a/arch/arm/configs/multi_v7_defconfig +++ b/arch/arm/configs/multi_v7_defconfig @@ -8,6 +8,7 @@ CONFIG_ARCH_HIGHBANK=y  CONFIG_ARCH_SOCFPGA=y  CONFIG_ARCH_SUNXI=y  # CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA is not set +CONFIG_ARCH_ZYNQ=y  CONFIG_ARM_ERRATA_754322=y  CONFIG_SMP=y  CONFIG_ARM_ARCH_TIMER=y @@ -39,7 +40,6 @@ CONFIG_I2C=y  CONFIG_I2C_DESIGNWARE_PLATFORM=y  CONFIG_SPI=y  CONFIG_SPI_PL022=y -CONFIG_GPIOLIB=y  CONFIG_FB=y  CONFIG_FB_ARMCLCD=y  CONFIG_FRAMEBUFFER_CONSOLE=y diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig index 82ce8d738fa..5be2e4be802 100644 --- a/arch/arm/configs/omap2plus_defconfig +++ b/arch/arm/configs/omap2plus_defconfig @@ -20,9 +20,10 @@ CONFIG_MODULE_FORCE_UNLOAD=y  CONFIG_MODVERSIONS=y  CONFIG_MODULE_SRCVERSION_ALL=y  # CONFIG_BLK_DEV_BSG is not set -CONFIG_ARCH_OMAP=y +CONFIG_ARCH_OMAP2PLUS=y  CONFIG_OMAP_RESET_CLOCKS=y  CONFIG_OMAP_MUX_DEBUG=y +CONFIG_ARCH_VEXPRESS_CA9X4=y  CONFIG_ARM_THUMBEE=y  CONFIG_ARM_ERRATA_411920=y  CONFIG_NO_HZ=y @@ -121,6 +122,8 @@ CONFIG_SERIAL_8250_MANY_PORTS=y  CONFIG_SERIAL_8250_SHARE_IRQ=y  CONFIG_SERIAL_8250_DETECT_IRQ=y  CONFIG_SERIAL_8250_RSA=y +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y  CONFIG_HW_RANDOM=y  CONFIG_I2C_CHARDEV=y  CONFIG_SPI=y @@ -194,6 +197,7 @@ CONFIG_USB_ZERO=m  CONFIG_MMC=y  CONFIG_MMC_UNSAFE_RESUME=y  CONFIG_SDIO_UART=y +CONFIG_MMC_ARMMMCI=y  CONFIG_MMC_OMAP=y  CONFIG_MMC_OMAP_HS=y  CONFIG_RTC_CLASS=y diff --git a/arch/arm/mach-omap2/include/mach/debug-macro.S b/arch/arm/include/debug/omap2plus.S index cfaed13d004..6d867aef18e 100644 --- a/arch/arm/mach-omap2/include/mach/debug-macro.S +++ b/arch/arm/include/debug/omap2plus.S @@ -1,5 +1,4 @@ -/* arch/arm/mach-omap2/include/mach/debug-macro.S - * +/*   * Debugging macro include header   *   *  Copyright (C) 1994-1999 Russell King @@ -13,7 +12,49 @@  #include <linux/serial_reg.h> -#include <mach/serial.h> +/* OMAP2 serial ports */ +#define OMAP2_UART1_BASE	0x4806a000 +#define OMAP2_UART2_BASE	0x4806c000 +#define OMAP2_UART3_BASE	0x4806e000 + +/* OMAP3 serial ports */ +#define OMAP3_UART1_BASE	OMAP2_UART1_BASE +#define OMAP3_UART2_BASE	OMAP2_UART2_BASE +#define OMAP3_UART3_BASE	0x49020000 +#define OMAP3_UART4_BASE	0x49042000	/* Only on 36xx */ +#define OMAP3_UART4_AM35XX_BASE	0x4809E000	/* Only on AM35xx */ + +/* OMAP4 serial ports */ +#define OMAP4_UART1_BASE	OMAP2_UART1_BASE +#define OMAP4_UART2_BASE	OMAP2_UART2_BASE +#define OMAP4_UART3_BASE	0x48020000 +#define OMAP4_UART4_BASE	0x4806e000 + +/* TI81XX serial ports */ +#define TI81XX_UART1_BASE	0x48020000 +#define TI81XX_UART2_BASE	0x48022000 +#define TI81XX_UART3_BASE	0x48024000 + +/* AM3505/3517 UART4 */ +#define AM35XX_UART4_BASE	0x4809E000	/* Only on AM3505/3517 */ + +/* AM33XX serial port */ +#define AM33XX_UART1_BASE	0x44E09000 + +/* OMAP5 serial ports */ +#define OMAP5_UART1_BASE	OMAP2_UART1_BASE +#define OMAP5_UART2_BASE	OMAP2_UART2_BASE +#define OMAP5_UART3_BASE	OMAP4_UART3_BASE +#define OMAP5_UART4_BASE	OMAP4_UART4_BASE +#define OMAP5_UART5_BASE	0x48066000 +#define OMAP5_UART6_BASE	0x48068000 + +/* External port on Zoom2/3 */ +#define ZOOM_UART_BASE		0x10000000 +#define ZOOM_UART_VIRT		0xfa400000 + +#define OMAP_PORT_SHIFT		2 +#define ZOOM_PORT_SHIFT		1  #define UART_OFFSET(addr)	((addr) & 0x00ffffff) @@ -23,12 +64,6 @@ omap_uart_virt:	.word	0  omap_uart_lsr:	.word	0  		.popsection -		/* -		 * Note that this code won't work if the bootloader passes -		 * a wrong machine ID number in r1. To debug, just hardcode -		 * the desired UART phys and virt addresses temporarily into -		 * the omap_uart_phys and omap_uart_virt above. -		 */  		.macro	addruart, rp, rv, tmp  		/* Use omap_uart_phys/virt if already configured */ @@ -43,74 +78,64 @@ omap_uart_lsr:	.word	0  		cmpne	\rv, #0  		bne	100f			@ already configured -		/* Check the debug UART configuration set in uncompress.h */ -		mov	\rp, pc -		ldr	\rv, =OMAP_UART_INFO_OFS -		and	\rp, \rp, #0xff000000 -		ldr	\rp, [\rp, \rv] - -		/* Select the UART to use based on the UART1 scratchpad value */ -		cmp	\rp, #0			@ no port configured? -		beq	21f			@ if none, try to use UART1 -		cmp	\rp, #OMAP2UART1	@ OMAP2/3/4UART1 -		beq	21f			@ configure OMAP2/3/4UART1 -		cmp	\rp, #OMAP2UART2	@ OMAP2/3/4UART2 -		beq	22f			@ configure OMAP2/3/4UART2 -		cmp	\rp, #OMAP2UART3	@ only on 24xx -		beq	23f			@ configure OMAP2UART3 -		cmp	\rp, #OMAP3UART3	@ only on 34xx -		beq	33f			@ configure OMAP3UART3 -		cmp	\rp, #OMAP4UART3	@ only on 44xx/54xx -		beq	43f			@ configure OMAP4/5UART3 -		cmp	\rp, #OMAP3UART4	@ only on 36xx -		beq	34f			@ configure OMAP3UART4 -		cmp	\rp, #OMAP4UART4	@ only on 44xx/54xx -		beq	44f			@ configure OMAP4/5UART4 -		cmp	\rp, #TI81XXUART1	@ ti81Xx UART offsets different -		beq	81f			@ configure UART1 -		cmp	\rp, #TI81XXUART2	@ ti81Xx UART offsets different -		beq	82f			@ configure UART2 -		cmp	\rp, #TI81XXUART3	@ ti81Xx UART offsets different -		beq	83f			@ configure UART3 -		cmp	\rp, #AM33XXUART1	@ AM33XX UART offsets different -		beq	84f			@ configure UART1 -		cmp	\rp, #ZOOM_UART		@ only on zoom2/3 -		beq	95f			@ configure ZOOM_UART -  		/* Configure the UART offset from the phys/virt base */ -21:		mov	\rp, #UART_OFFSET(OMAP2_UART1_BASE)	@ omap2/3/4 +#ifdef CONFIG_DEBUG_OMAP2UART1 +		mov	\rp, #UART_OFFSET(OMAP2_UART1_BASE)	@ omap2/3/4  		b	98f -22:		mov	\rp, #UART_OFFSET(OMAP2_UART2_BASE)	@ omap2/3/4 +#endif +#ifdef CONFIG_DEBUG_OMAP2UART2 +		mov	\rp, #UART_OFFSET(OMAP2_UART2_BASE)	@ omap2/3/4  		b	98f -23:		mov	\rp, #UART_OFFSET(OMAP2_UART3_BASE) +#endif +#ifdef CONFIG_DEBUG_OMAP2UART3 +		mov	\rp, #UART_OFFSET(OMAP2_UART3_BASE)  		b	98f -33:		mov	\rp, #UART_OFFSET(OMAP3_UART1_BASE) +#endif +#ifdef CONFIG_DEBUG_OMAP3UART3 +		mov	\rp, #UART_OFFSET(OMAP3_UART1_BASE)  		add	\rp, \rp, #0x00fb0000  		add	\rp, \rp, #0x00006000		@ OMAP3_UART3_BASE  		b	98f -34:		mov	\rp, #UART_OFFSET(OMAP3_UART1_BASE) +#endif +#ifdef CONFIG_DEBUG_OMAP4UART3 +		mov	\rp, #UART_OFFSET(OMAP4_UART3_BASE) +		b	98f +#endif +#ifdef CONFIG_DEBUG_OMAP3UART4 +		mov	\rp, #UART_OFFSET(OMAP3_UART1_BASE)  		add	\rp, \rp, #0x00fb0000  		add	\rp, \rp, #0x00028000		@ OMAP3_UART4_BASE  		b	98f -43:		mov	\rp, #UART_OFFSET(OMAP4_UART3_BASE) -		b	98f -44:		mov	\rp, #UART_OFFSET(OMAP4_UART4_BASE) +#endif +#ifdef CONFIG_DEBUG_OMAP4UART4 +		mov	\rp, #UART_OFFSET(OMAP4_UART4_BASE)  		b	98f -81:		mov	\rp, #UART_OFFSET(TI81XX_UART1_BASE) +#endif +#ifdef CONFIG_DEBUG_TI81XXUART1 +		mov	\rp, #UART_OFFSET(TI81XX_UART1_BASE)  		b	98f -82:		mov	\rp, #UART_OFFSET(TI81XX_UART2_BASE) +#endif +#ifdef CONFIG_DEBUG_TI81XXUART2 +		mov	\rp, #UART_OFFSET(TI81XX_UART2_BASE)  		b	98f -83:		mov	\rp, #UART_OFFSET(TI81XX_UART3_BASE) +#endif +#ifdef CONFIG_DEBUG_TI81XXUART3 +		mov	\rp, #UART_OFFSET(TI81XX_UART3_BASE)  		b	98f -84:		ldr	\rp, =AM33XX_UART1_BASE +#endif +#ifdef CONFIG_DEBUG_AM33XXUART1 +		ldr	\rp, =AM33XX_UART1_BASE  		and	\rp, \rp, #0x00ffffff  		b	97f -95:		ldr	\rp, =ZOOM_UART_BASE +#endif +#ifdef CONFIG_DEBUG_ZOOM_UART +		ldr	\rp, =ZOOM_UART_BASE  		str	\rp, [\tmp, #0]		@ omap_uart_phys  		ldr	\rp, =ZOOM_UART_VIRT  		str	\rp, [\tmp, #4]		@ omap_uart_virt  		mov	\rp, #(UART_LSR << ZOOM_PORT_SHIFT)  		str	\rp, [\tmp, #8]		@ omap_uart_lsr +#endif  		b	10b  		/* AM33XX: Store both phys and virt address for the uart */ diff --git a/arch/arm/mach-vt8500/include/mach/debug-macro.S b/arch/arm/include/debug/vt8500.S index ca292f29d4a..0e0ca0869da 100644 --- a/arch/arm/mach-vt8500/include/mach/debug-macro.S +++ b/arch/arm/include/debug/vt8500.S @@ -1,20 +1,24 @@ -/* - * arch/arm/mach-vt8500/include/mach/debug-macro.S +/*  + * Debugging macro include header   *   *  Copyright (C) 2010 Alexey Charkov <alchark@gmail.com> - * - * Debugging macro include header + *    Moved from arch/arm/mach-vt8500/include/mach/debug-macro.S + *    Minor changes for readability.   *   * 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. - * -*/ + */ + +#define DEBUG_LL_PHYS_BASE		0xD8000000 +#define DEBUG_LL_VIRT_BASE		0xF8000000 +#define DEBUG_LL_UART_OFFSET		0x00200000 +#if defined(CONFIG_DEBUG_VT8500_UART0)  	.macro	addruart, rp, rv, tmp -	mov	\rp,      #0x00200000 -	orr	\rv, \rp, #0xf8000000 -	orr	\rp, \rp, #0xd8000000 +	mov	\rp,      #DEBUG_LL_UART_OFFSET +	orr	\rv, \rp, #DEBUG_LL_VIRT_BASE +	orr	\rp, \rp, #DEBUG_LL_PHYS_BASE  	.endm  	.macro	senduart,rd,rx @@ -29,3 +33,5 @@  	.macro	waituart,rd,rx  	.endm + +#endif diff --git a/arch/arm/mach-omap1/dma.c b/arch/arm/mach-omap1/dma.c index e190611e4b4..1a4e887f028 100644 --- a/arch/arm/mach-omap1/dma.c +++ b/arch/arm/mach-omap1/dma.c @@ -24,7 +24,7 @@  #include <linux/init.h>  #include <linux/device.h>  #include <linux/io.h> - +#include <linux/dma-mapping.h>  #include <linux/omap-dma.h>  #include <mach/tc.h> @@ -270,11 +270,17 @@ static u32 configure_dma_errata(void)  	return errata;  } +static const struct platform_device_info omap_dma_dev_info = { +	.name = "omap-dma-engine", +	.id = -1, +	.dma_mask = DMA_BIT_MASK(32), +}; +  static int __init omap1_system_dma_init(void)  {  	struct omap_system_dma_plat_info	*p;  	struct omap_dma_dev_attr		*d; -	struct platform_device			*pdev; +	struct platform_device			*pdev, *dma_pdev;  	int ret;  	pdev = platform_device_alloc("omap_dma_system", 0); @@ -380,8 +386,16 @@ static int __init omap1_system_dma_init(void)  	dma_common_ch_start	= CPC;  	dma_common_ch_end	= COLOR; +	dma_pdev = platform_device_register_full(&omap_dma_dev_info); +	if (IS_ERR(dma_pdev)) { +		ret = PTR_ERR(dma_pdev); +		goto exit_release_pdev; +	} +  	return ret; +exit_release_pdev: +	platform_device_del(pdev);  exit_release_chan:  	kfree(d->chan);  exit_release_d: diff --git a/arch/arm/mach-omap1/i2c.c b/arch/arm/mach-omap1/i2c.c index faca808cb3d..7f5761cffd2 100644 --- a/arch/arm/mach-omap1/i2c.c +++ b/arch/arm/mach-omap1/i2c.c @@ -91,3 +91,9 @@ int __init omap_i2c_add_bus(struct omap_i2c_bus_platform_data *pdata,  	return platform_device_register(pdev);  } + +static  int __init omap_i2c_cmdline(void) +{ +	return omap_register_i2c_bus_cmdline(); +} +subsys_initcall(omap_i2c_cmdline); diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index 41b581fd021..c3c033f283a 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig @@ -1,3 +1,26 @@ +config ARCH_OMAP +	bool + +config ARCH_OMAP2PLUS +	bool "TI OMAP2/3/4/5 SoCs with device tree support" if (ARCH_MULTI_V6 || ARCH_MULTI_V7) +	select ARCH_HAS_CPUFREQ +	select ARCH_HAS_HOLES_MEMORYMODEL +	select ARCH_OMAP +	select ARCH_REQUIRE_GPIOLIB +	select CLKDEV_LOOKUP +	select CLKSRC_MMIO +	select GENERIC_CLOCKEVENTS +	select GENERIC_IRQ_CHIP +	select HAVE_CLK +	select OMAP_DM_TIMER +	select PINCTRL +	select PROC_DEVICETREE if PROC_FS +	select SPARSE_IRQ +	select USE_OF +	help +	  Systems based on OMAP2, OMAP3, OMAP4 or OMAP5 + +  if ARCH_OMAP2PLUS  menu "TI OMAP2/3/4 Specific Features" @@ -397,7 +420,7 @@ config OMAP3_SDRC_AC_TIMING  config OMAP4_ERRATA_I688  	bool "OMAP4 errata: Async Bridge Corruption" -	depends on ARCH_OMAP4 +	depends on ARCH_OMAP4 && !ARCH_MULTIPLATFORM  	select ARCH_HAS_BARRIERS  	help  	  If a data is stalled inside asynchronous bridge because of back diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index 947cafe65ae..65fb6fb38ca 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile @@ -2,6 +2,9 @@  # Makefile for the linux kernel.  # +ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \ +	-I$(srctree)/arch/arm/plat-omap/include +  # Common support  obj-y := id.o io.o control.o mux.o devices.o fb.o serial.o gpmc.o timer.o pm.o \  	 common.o gpio.o dma.o wd_timer.o display.o i2c.o hdq1w.o omap_hwmod.o \ diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index d07058b9c28..284500ddacd 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c @@ -495,7 +495,7 @@ static int __init beagle_opp_init(void)  	}  	return 0;  } -device_initcall(beagle_opp_init); +omap_device_initcall(beagle_opp_init);  static void __init omap3_beagle_init(void)  { diff --git a/arch/arm/mach-omap2/board-rx51-video.c b/arch/arm/mach-omap2/board-rx51-video.c index 46f4fc98276..eb667261df0 100644 --- a/arch/arm/mach-omap2/board-rx51-video.c +++ b/arch/arm/mach-omap2/board-rx51-video.c @@ -18,6 +18,7 @@  #include <video/omapdss.h>  #include <linux/platform_data/spi-omap2-mcspi.h> +#include "soc.h"  #include "board-rx51.h"  #include "mux.h" @@ -85,5 +86,5 @@ static int __init rx51_video_init(void)  	return 0;  } -subsys_initcall(rx51_video_init); +omap_subsys_initcall(rx51_video_init);  #endif /* defined(CONFIG_FB_OMAP2) || defined(CONFIG_FB_OMAP2_MODULE) */ diff --git a/arch/arm/mach-omap2/clock2xxx.c b/arch/arm/mach-omap2/clock2xxx.c index 1ff64690862..b870f6a9e28 100644 --- a/arch/arm/mach-omap2/clock2xxx.c +++ b/arch/arm/mach-omap2/clock2xxx.c @@ -52,6 +52,6 @@ static int __init omap2xxx_clk_arch_init(void)  	return ret;  } -arch_initcall(omap2xxx_clk_arch_init); +omap_arch_initcall(omap2xxx_clk_arch_init); diff --git a/arch/arm/mach-omap2/clock3xxx.c b/arch/arm/mach-omap2/clock3xxx.c index 4eacab8f117..0b02b4161d7 100644 --- a/arch/arm/mach-omap2/clock3xxx.c +++ b/arch/arm/mach-omap2/clock3xxx.c @@ -94,6 +94,6 @@ static int __init omap3xxx_clk_arch_init(void)  	return ret;  } -arch_initcall(omap3xxx_clk_arch_init); +omap_arch_initcall(omap3xxx_clk_arch_init); diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c index b6cc233214d..342d69399ec 100644 --- a/arch/arm/mach-omap2/devices.c +++ b/arch/arm/mach-omap2/devices.c @@ -69,7 +69,7 @@ static int __init omap3_l3_init(void)  	return IS_ERR(pdev) ? PTR_ERR(pdev) : 0;  } -postcore_initcall(omap3_l3_init); +omap_postcore_initcall(omap3_l3_init);  static int __init omap4_l3_init(void)  { @@ -104,7 +104,7 @@ static int __init omap4_l3_init(void)  	return IS_ERR(pdev) ? PTR_ERR(pdev) : 0;  } -postcore_initcall(omap4_l3_init); +omap_postcore_initcall(omap4_l3_init);  #if defined(CONFIG_VIDEO_OMAP2) || defined(CONFIG_VIDEO_OMAP2_MODULE) @@ -779,4 +779,4 @@ static int __init omap2_init_devices(void)  	return 0;  } -arch_initcall(omap2_init_devices); +omap_arch_initcall(omap2_init_devices); diff --git a/arch/arm/mach-omap2/dma.c b/arch/arm/mach-omap2/dma.c index 612b9824987..5cd8d7668be 100644 --- a/arch/arm/mach-omap2/dma.c +++ b/arch/arm/mach-omap2/dma.c @@ -27,7 +27,7 @@  #include <linux/module.h>  #include <linux/init.h>  #include <linux/device.h> - +#include <linux/dma-mapping.h>  #include <linux/omap-dma.h>  #include "soc.h" @@ -288,9 +288,26 @@ static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused)  	return 0;  } +static const struct platform_device_info omap_dma_dev_info = { +	.name = "omap-dma-engine", +	.id = -1, +	.dma_mask = DMA_BIT_MASK(32), +}; +  static int __init omap2_system_dma_init(void)  { -	return omap_hwmod_for_each_by_class("dma", +	struct platform_device *pdev; +	int res; + +	res = omap_hwmod_for_each_by_class("dma",  			omap2_system_dma_init_dev, NULL); +	if (res) +		return res; + +	pdev = platform_device_register_full(&omap_dma_dev_info); +	if (IS_ERR(pdev)) +		return PTR_ERR(pdev); + +	return res;  } -arch_initcall(omap2_system_dma_init); +omap_arch_initcall(omap2_system_dma_init); diff --git a/arch/arm/mach-omap2/drm.c b/arch/arm/mach-omap2/drm.c index 2a2cfa88ddb..231ed5f2bc8 100644 --- a/arch/arm/mach-omap2/drm.c +++ b/arch/arm/mach-omap2/drm.c @@ -63,6 +63,6 @@ static int __init omap_init_drm(void)  } -arch_initcall(omap_init_drm); +omap_arch_initcall(omap_init_drm);  #endif diff --git a/arch/arm/mach-omap2/emu.c b/arch/arm/mach-omap2/emu.c index b3566f68a55..cbeaca2d769 100644 --- a/arch/arm/mach-omap2/emu.c +++ b/arch/arm/mach-omap2/emu.c @@ -47,4 +47,4 @@ static int __init emu_init(void)  	return 0;  } -subsys_initcall(emu_init); +omap_subsys_initcall(emu_init); diff --git a/arch/arm/mach-omap2/fb.c b/arch/arm/mach-omap2/fb.c index d9bd965f6d0..190ae493c6e 100644 --- a/arch/arm/mach-omap2/fb.c +++ b/arch/arm/mach-omap2/fb.c @@ -89,7 +89,7 @@ static int __init omap_init_vrfb(void)  		return 0;  } -arch_initcall(omap_init_vrfb); +omap_arch_initcall(omap_init_vrfb);  #endif  #if defined(CONFIG_FB_OMAP2) || defined(CONFIG_FB_OMAP2_MODULE) @@ -113,6 +113,6 @@ static int __init omap_init_fb(void)  	return platform_device_register(&omap_fb_device);  } -arch_initcall(omap_init_fb); +omap_arch_initcall(omap_init_fb);  #endif diff --git a/arch/arm/mach-omap2/gpio.c b/arch/arm/mach-omap2/gpio.c index 399acabc3d0..40950f5af1f 100644 --- a/arch/arm/mach-omap2/gpio.c +++ b/arch/arm/mach-omap2/gpio.c @@ -23,6 +23,7 @@  #include <linux/of.h>  #include <linux/platform_data/gpio-omap.h> +#include "soc.h"  #include "omap_hwmod.h"  #include "omap_device.h"  #include "omap-pm.h" @@ -147,7 +148,7 @@ static int __init omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused)  /*   * gpio_init needs to be done before   * machine_init functions access gpio APIs. - * Hence gpio_init is a postcore_initcall. + * Hence gpio_init is a omap_postcore_initcall.   */  static int __init omap2_gpio_init(void)  { @@ -157,4 +158,4 @@ static int __init omap2_gpio_init(void)  	return omap_hwmod_for_each_by_class("gpio", omap2_gpio_dev_init, NULL);  } -postcore_initcall(omap2_gpio_init); +omap_postcore_initcall(omap2_gpio_init); diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c index 03d771349be..7911e282489 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c @@ -1426,7 +1426,7 @@ static __exit void gpmc_exit(void)  } -postcore_initcall(gpmc_init); +omap_postcore_initcall(gpmc_init);  module_exit(gpmc_exit);  static int __init omap_gpmc_init(void) @@ -1453,7 +1453,7 @@ static int __init omap_gpmc_init(void)  	return IS_ERR(pdev) ? PTR_ERR(pdev) : 0;  } -postcore_initcall(omap_gpmc_init); +omap_postcore_initcall(omap_gpmc_init);  static irqreturn_t gpmc_handle_irq(int irq, void *dev)  { diff --git a/arch/arm/mach-omap2/hdq1w.c b/arch/arm/mach-omap2/hdq1w.c index ab7bf181a10..f6e0e7e68f9 100644 --- a/arch/arm/mach-omap2/hdq1w.c +++ b/arch/arm/mach-omap2/hdq1w.c @@ -27,6 +27,7 @@  #include <linux/err.h>  #include <linux/platform_device.h> +#include "soc.h"  #include "omap_hwmod.h"  #include "omap_device.h"  #include "hdq1w.h" @@ -93,4 +94,4 @@ static int __init omap_init_hdq(void)  	return 0;  } -arch_initcall(omap_init_hdq); +omap_arch_initcall(omap_init_hdq); diff --git a/arch/arm/mach-omap2/hwspinlock.c b/arch/arm/mach-omap2/hwspinlock.c index 1df9b5feda1..bcb357e948b 100644 --- a/arch/arm/mach-omap2/hwspinlock.c +++ b/arch/arm/mach-omap2/hwspinlock.c @@ -21,6 +21,7 @@  #include <linux/err.h>  #include <linux/hwspinlock.h> +#include "soc.h"  #include "omap_hwmod.h"  #include "omap_device.h" @@ -57,4 +58,4 @@ static int __init hwspinlocks_init(void)  	return retval;  }  /* early board code might need to reserve specific hwspinlock instances */ -postcore_initcall(hwspinlocks_init); +omap_postcore_initcall(hwspinlocks_init); diff --git a/arch/arm/mach-omap2/i2c.c b/arch/arm/mach-omap2/i2c.c index b9074dde3b9..8fd98576f4d 100644 --- a/arch/arm/mach-omap2/i2c.c +++ b/arch/arm/mach-omap2/i2c.c @@ -185,3 +185,8 @@ int __init omap_i2c_add_bus(struct omap_i2c_bus_platform_data *i2c_pdata,  	return PTR_RET(pdev);  } +static  int __init omap_i2c_cmdline(void) +{ +	return omap_register_i2c_bus_cmdline(); +} +omap_subsys_initcall(omap_i2c_cmdline); diff --git a/arch/arm/mach-omap2/include/mach/serial.h b/arch/arm/mach-omap2/include/mach/serial.h index 70eda00db7a..7ca1fcff453 100644 --- a/arch/arm/mach-omap2/include/mach/serial.h +++ b/arch/arm/mach-omap2/include/mach/serial.h @@ -8,20 +8,6 @@   * GNU General Public License for more details.   */ -/* - * Memory entry used for the DEBUG_LL UART configuration, relative to - * start of RAM. See also uncompress.h and debug-macro.S. - * - * Note that using a memory location for storing the UART configuration - * has at least two limitations: - * - * 1. Kernel uncompress code cannot overlap OMAP_UART_INFO as the - *    uncompress code could then partially overwrite itself - * 2. We assume printascii is called at least once before paging_init, - *    and addruart has a chance to read OMAP_UART_INFO - */ -#define OMAP_UART_INFO_OFS	0x3ffc -  /* OMAP2 serial ports */  #define OMAP2_UART1_BASE	0x4806a000  #define OMAP2_UART2_BASE	0x4806c000 @@ -68,29 +54,6 @@  #define OMAP24XX_BASE_BAUD	(48000000/16) -/* - * DEBUG_LL port encoding stored into the UART1 scratchpad register by - * decomp_setup in uncompress.h - */ -#define OMAP2UART1		21 -#define OMAP2UART2		22 -#define OMAP2UART3		23 -#define OMAP3UART1		OMAP2UART1 -#define OMAP3UART2		OMAP2UART2 -#define OMAP3UART3		33 -#define OMAP3UART4		34		/* Only on 36xx */ -#define OMAP4UART1		OMAP2UART1 -#define OMAP4UART2		OMAP2UART2 -#define OMAP4UART3		43 -#define OMAP4UART4		44 -#define TI81XXUART1		81 -#define TI81XXUART2		82 -#define TI81XXUART3		83 -#define AM33XXUART1		84 -#define OMAP5UART3		OMAP4UART3 -#define OMAP5UART4		OMAP4UART4 -#define ZOOM_UART		95		/* Only on zoom2/3 */ -  #ifndef __ASSEMBLER__  struct omap_board_data; diff --git a/arch/arm/mach-omap2/include/mach/uncompress.h b/arch/arm/mach-omap2/include/mach/uncompress.h deleted file mode 100644 index 7b360acd19c..00000000000 --- a/arch/arm/mach-omap2/include/mach/uncompress.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - * arch/arm/plat-omap/include/mach/uncompress.h - * - * Serial port stubs for kernel decompress status messages - * - * Initially based on: - * linux-2.4.15-rmk1-dsplinux1.6/arch/arm/plat-omap/include/mach1510/uncompress.h - * Copyright (C) 2000 RidgeRun, Inc. - * Author: Greg Lonnon <glonnon@ridgerun.com> - * - * Rewritten by: - * Author: <source@mvista.com> - * 2004 (c) MontaVista Software, Inc. - * - * This file is licensed under the terms of the GNU General Public License - * version 2. This program is licensed "as is" without any warranty of any - * kind, whether express or implied. - */ - -#include <linux/types.h> -#include <linux/serial_reg.h> - -#include <asm/memory.h> -#include <asm/mach-types.h> - -#include <mach/serial.h> - -#define MDR1_MODE_MASK			0x07 - -volatile u8 *uart_base; -int uart_shift; - -/* - * Store the DEBUG_LL uart number into memory. - * See also debug-macro.S, and serial.c for related code. - */ -static void set_omap_uart_info(unsigned char port) -{ -	/* -	 * Get address of some.bss variable and round it down -	 * a la CONFIG_AUTO_ZRELADDR. -	 */ -	u32 ram_start = (u32)&uart_shift & 0xf8000000; -	u32 *uart_info = (u32 *)(ram_start + OMAP_UART_INFO_OFS); -	*uart_info = port; -} - -static void putc(int c) -{ -	if (!uart_base) -		return; - -	/* Check for UART 16x mode */ -	if ((uart_base[UART_OMAP_MDR1 << uart_shift] & MDR1_MODE_MASK) != 0) -		return; - -	while (!(uart_base[UART_LSR << uart_shift] & UART_LSR_THRE)) -		barrier(); -	uart_base[UART_TX << uart_shift] = c; -} - -static inline void flush(void) -{ -} - -/* - * Macros to configure UART1 and debug UART - */ -#define _DEBUG_LL_ENTRY(mach, dbg_uart, dbg_shft, dbg_id)		\ -	if (machine_is_##mach()) {					\ -		uart_base = (volatile u8 *)(dbg_uart);			\ -		uart_shift = (dbg_shft);				\ -		port = (dbg_id);					\ -		set_omap_uart_info(port);				\ -		break;							\ -	} - -#define DEBUG_LL_OMAP2(p, mach)						\ -	_DEBUG_LL_ENTRY(mach, OMAP2_UART##p##_BASE, OMAP_PORT_SHIFT,	\ -		OMAP2UART##p) - -#define DEBUG_LL_OMAP3(p, mach)						\ -	_DEBUG_LL_ENTRY(mach, OMAP3_UART##p##_BASE, OMAP_PORT_SHIFT,	\ -		OMAP3UART##p) - -#define DEBUG_LL_OMAP4(p, mach)						\ -	_DEBUG_LL_ENTRY(mach, OMAP4_UART##p##_BASE, OMAP_PORT_SHIFT,	\ -		OMAP4UART##p) - -#define DEBUG_LL_OMAP5(p, mach)						\ -	_DEBUG_LL_ENTRY(mach, OMAP5_UART##p##_BASE, OMAP_PORT_SHIFT,	\ -		OMAP5UART##p) -/* Zoom2/3 shift is different for UART1 and external port */ -#define DEBUG_LL_ZOOM(mach)						\ -	_DEBUG_LL_ENTRY(mach, ZOOM_UART_BASE, ZOOM_PORT_SHIFT, ZOOM_UART) - -#define DEBUG_LL_TI81XX(p, mach)					\ -	_DEBUG_LL_ENTRY(mach, TI81XX_UART##p##_BASE, OMAP_PORT_SHIFT,	\ -		TI81XXUART##p) - -#define DEBUG_LL_AM33XX(p, mach)					\ -	_DEBUG_LL_ENTRY(mach, AM33XX_UART##p##_BASE, OMAP_PORT_SHIFT,	\ -		AM33XXUART##p) - -static inline void arch_decomp_setup(void) -{ -	int port = 0; - -	/* -	 * Initialize the port based on the machine ID from the bootloader. -	 * Note that we're using macros here instead of switch statement -	 * as machine_is functions are optimized out for the boards that -	 * are not selected. -	 */ -	do { -		/* omap2 based boards using UART1 */ -		DEBUG_LL_OMAP2(1, omap_2430sdp); -		DEBUG_LL_OMAP2(1, omap_apollon); -		DEBUG_LL_OMAP2(1, omap_h4); - -		/* omap2 based boards using UART3 */ -		DEBUG_LL_OMAP2(3, nokia_n800); -		DEBUG_LL_OMAP2(3, nokia_n810); -		DEBUG_LL_OMAP2(3, nokia_n810_wimax); - -		/* omap3 based boards using UART1 */ -		DEBUG_LL_OMAP2(1, omap3evm); -		DEBUG_LL_OMAP3(1, omap_3430sdp); -		DEBUG_LL_OMAP3(1, omap_3630sdp); -		DEBUG_LL_OMAP3(1, omap3530_lv_som); -		DEBUG_LL_OMAP3(1, omap3_torpedo); - -		/* omap3 based boards using UART3 */ -		DEBUG_LL_OMAP3(3, cm_t35); -		DEBUG_LL_OMAP3(3, cm_t3517); -		DEBUG_LL_OMAP3(3, cm_t3730); -		DEBUG_LL_OMAP3(3, craneboard); -		DEBUG_LL_OMAP3(3, devkit8000); -		DEBUG_LL_OMAP3(3, igep0020); -		DEBUG_LL_OMAP3(3, igep0030); -		DEBUG_LL_OMAP3(3, nokia_rm680); -		DEBUG_LL_OMAP3(3, nokia_rm696); -		DEBUG_LL_OMAP3(3, nokia_rx51); -		DEBUG_LL_OMAP3(3, omap3517evm); -		DEBUG_LL_OMAP3(3, omap3_beagle); -		DEBUG_LL_OMAP3(3, omap3_pandora); -		DEBUG_LL_OMAP3(3, omap_ldp); -		DEBUG_LL_OMAP3(3, overo); -		DEBUG_LL_OMAP3(3, touchbook); - -		/* omap4 based boards using UART3 */ -		DEBUG_LL_OMAP4(3, omap_4430sdp); -		DEBUG_LL_OMAP4(3, omap4_panda); - -		/* omap5 based boards using UART3 */ -		DEBUG_LL_OMAP5(3, omap5_sevm); - -		/* zoom2/3 external uart */ -		DEBUG_LL_ZOOM(omap_zoom2); -		DEBUG_LL_ZOOM(omap_zoom3); - -		/* TI8168 base boards using UART3 */ -		DEBUG_LL_TI81XX(3, ti8168evm); - -		/* TI8148 base boards using UART1 */ -		DEBUG_LL_TI81XX(1, ti8148evm); - -		/* AM33XX base boards using UART1 */ -		DEBUG_LL_AM33XX(1, am335xevm); -	} while (0); -} diff --git a/arch/arm/mach-omap2/mcbsp.c b/arch/arm/mach-omap2/mcbsp.c index df49f2a4946..1c0968db43b 100644 --- a/arch/arm/mach-omap2/mcbsp.c +++ b/arch/arm/mach-omap2/mcbsp.c @@ -23,6 +23,7 @@  #include <linux/omap-dma.h> +#include "soc.h"  #include "omap_device.h"  /* @@ -118,4 +119,4 @@ static int __init omap2_mcbsp_init(void)  	return 0;  } -arch_initcall(omap2_mcbsp_init); +omap_arch_initcall(omap2_mcbsp_init); diff --git a/arch/arm/mach-omap2/omap-iommu.c b/arch/arm/mach-omap2/omap-iommu.c index 6da4f7ae9d7..c20423955bf 100644 --- a/arch/arm/mach-omap2/omap-iommu.c +++ b/arch/arm/mach-omap2/omap-iommu.c @@ -16,6 +16,7 @@  #include <linux/slab.h>  #include <linux/platform_data/iommu-omap.h> +#include "soc.h"  #include "omap_hwmod.h"  #include "omap_device.h" @@ -61,7 +62,7 @@ static int __init omap_iommu_init(void)  	return omap_hwmod_for_each_by_class("mmu", omap_iommu_dev_init, NULL);  }  /* must be ready before omap3isp is probed */ -subsys_initcall(omap_iommu_init); +omap_subsys_initcall(omap_iommu_init);  static void __exit omap_iommu_exit(void)  { diff --git a/arch/arm/mach-omap2/omap2-restart.c b/arch/arm/mach-omap2/omap2-restart.c index be6bc89ab1e..719b716a449 100644 --- a/arch/arm/mach-omap2/omap2-restart.c +++ b/arch/arm/mach-omap2/omap2-restart.c @@ -13,6 +13,7 @@  #include <linux/clk.h>  #include <linux/io.h> +#include "soc.h"  #include "common.h"  #include "prm2xxx.h" @@ -62,4 +63,4 @@ static int __init omap2xxx_common_look_up_clks_for_reset(void)  	return 0;  } -core_initcall(omap2xxx_common_look_up_clks_for_reset); +omap_core_initcall(omap2xxx_common_look_up_clks_for_reset); diff --git a/arch/arm/mach-omap2/omap4-common.c b/arch/arm/mach-omap2/omap4-common.c index 54709488360..708bb115a27 100644 --- a/arch/arm/mach-omap2/omap4-common.c +++ b/arch/arm/mach-omap2/omap4-common.c @@ -226,7 +226,7 @@ static int __init omap_l2_cache_init(void)  	return 0;  } -early_initcall(omap_l2_cache_init); +omap_early_initcall(omap_l2_cache_init);  #endif  void __iomem *omap4_get_sar_ram_base(void) @@ -254,7 +254,7 @@ static int __init omap4_sar_ram_init(void)  	return 0;  } -early_initcall(omap4_sar_ram_init); +omap_early_initcall(omap4_sar_ram_init);  void __init omap_gic_of_init(void)  { diff --git a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c index e065daa537c..d109f06785d 100644 --- a/arch/arm/mach-omap2/omap_device.c +++ b/arch/arm/mach-omap2/omap_device.c @@ -89,6 +89,7 @@  #include <linux/of.h>  #include <linux/notifier.h> +#include "soc.h"  #include "omap_device.h"  #include "omap_hwmod.h" @@ -1259,7 +1260,7 @@ static int __init omap_device_init(void)  	bus_register_notifier(&platform_bus_type, &platform_nb);  	return 0;  } -core_initcall(omap_device_init); +omap_core_initcall(omap_device_init);  /**   * omap_device_late_idle - idle devices without drivers @@ -1297,4 +1298,4 @@ static int __init omap_device_late_init(void)  	bus_for_each_dev(&platform_bus_type, NULL, NULL, omap_device_late_idle);  	return 0;  } -late_initcall(omap_device_late_init); +omap_late_initcall(omap_device_late_init); diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 4653efb87a2..6e70707cbb3 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c @@ -3303,7 +3303,7 @@ static int __init omap_hwmod_setup_all(void)  	return 0;  } -core_initcall(omap_hwmod_setup_all); +omap_core_initcall(omap_hwmod_setup_all);  /**   * omap_hwmod_enable - enable an omap_hwmod diff --git a/arch/arm/mach-omap2/omap_phy_internal.c b/arch/arm/mach-omap2/omap_phy_internal.c index e237602e10e..eb8a25de67e 100644 --- a/arch/arm/mach-omap2/omap_phy_internal.c +++ b/arch/arm/mach-omap2/omap_phy_internal.c @@ -63,7 +63,7 @@ static int __init omap4430_phy_power_down(void)  	return 0;  } -early_initcall(omap4430_phy_power_down); +omap_early_initcall(omap4430_phy_power_down);  void am35x_musb_reset(void)  { diff --git a/arch/arm/mach-omap2/opp3xxx_data.c b/arch/arm/mach-omap2/opp3xxx_data.c index 62772e0e0d6..fc67add7644 100644 --- a/arch/arm/mach-omap2/opp3xxx_data.c +++ b/arch/arm/mach-omap2/opp3xxx_data.c @@ -168,4 +168,4 @@ int __init omap3_opp_init(void)  	return r;  } -device_initcall(omap3_opp_init); +omap_device_initcall(omap3_opp_init); diff --git a/arch/arm/mach-omap2/opp4xxx_data.c b/arch/arm/mach-omap2/opp4xxx_data.c index d470b728e72..1ef7a3e5ce4 100644 --- a/arch/arm/mach-omap2/opp4xxx_data.c +++ b/arch/arm/mach-omap2/opp4xxx_data.c @@ -177,4 +177,4 @@ int __init omap4_opp_init(void)  			ARRAY_SIZE(omap446x_opp_def_list));  	return r;  } -device_initcall(omap4_opp_init); +omap_device_initcall(omap4_opp_init); diff --git a/arch/arm/mach-omap2/pm-debug.c b/arch/arm/mach-omap2/pm-debug.c index e2c291f52f9..e0ac8a31d4e 100644 --- a/arch/arm/mach-omap2/pm-debug.c +++ b/arch/arm/mach-omap2/pm-debug.c @@ -279,6 +279,6 @@ static int __init pm_dbg_init(void)  	return 0;  } -arch_initcall(pm_dbg_init); +omap_arch_initcall(pm_dbg_init);  #endif diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c index f4b3143a8b1..9c65eddd97c 100644 --- a/arch/arm/mach-omap2/pm.c +++ b/arch/arm/mach-omap2/pm.c @@ -336,7 +336,7 @@ static int __init omap2_common_pm_init(void)  	return 0;  } -postcore_initcall(omap2_common_pm_init); +omap_postcore_initcall(omap2_common_pm_init);  int __init omap2_common_pm_late_init(void)  { diff --git a/arch/arm/mach-omap2/pmu.c b/arch/arm/mach-omap2/pmu.c index eb78ae7a346..75052b3bc94 100644 --- a/arch/arm/mach-omap2/pmu.c +++ b/arch/arm/mach-omap2/pmu.c @@ -89,4 +89,4 @@ static int __init omap_init_pmu(void)  	return omap2_init_pmu(oh_num, oh_names);  } -subsys_initcall(omap_init_pmu); +omap_subsys_initcall(omap_init_pmu); diff --git a/arch/arm/mach-omap2/prm3xxx.c b/arch/arm/mach-omap2/prm3xxx.c index e648bd55b07..7721990d200 100644 --- a/arch/arm/mach-omap2/prm3xxx.c +++ b/arch/arm/mach-omap2/prm3xxx.c @@ -427,7 +427,7 @@ static int __init omap3xxx_prm_late_init(void)  	return ret;  } -subsys_initcall(omap3xxx_prm_late_init); +omap_subsys_initcall(omap3xxx_prm_late_init);  static void __exit omap3xxx_prm_exit(void)  { diff --git a/arch/arm/mach-omap2/prm44xx.c b/arch/arm/mach-omap2/prm44xx.c index c05a343d465..d35f98aabf7 100644 --- a/arch/arm/mach-omap2/prm44xx.c +++ b/arch/arm/mach-omap2/prm44xx.c @@ -665,7 +665,7 @@ static int __init omap44xx_prm_late_init(void)  	return omap_prcm_register_chain_handler(&omap4_prcm_irq_setup);  } -subsys_initcall(omap44xx_prm_late_init); +omap_subsys_initcall(omap44xx_prm_late_init);  static void __exit omap44xx_prm_exit(void)  { diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c index 04fdbc4c499..24e9ad3cb99 100644 --- a/arch/arm/mach-omap2/serial.c +++ b/arch/arm/mach-omap2/serial.c @@ -254,7 +254,7 @@ static int __init omap_serial_early_init(void)  	return 0;  } -core_initcall(omap_serial_early_init); +omap_core_initcall(omap_serial_early_init);  /**   * omap_serial_init_port() - initialize single serial port diff --git a/arch/arm/mach-omap2/smartreflex-class3.c b/arch/arm/mach-omap2/smartreflex-class3.c index 1da8f03c479..aee3c8940a3 100644 --- a/arch/arm/mach-omap2/smartreflex-class3.c +++ b/arch/arm/mach-omap2/smartreflex-class3.c @@ -12,6 +12,7 @@   */  #include <linux/power/smartreflex.h> +#include "soc.h"  #include "voltage.h"  static int sr_class3_enable(struct omap_sr *sr) @@ -58,4 +59,4 @@ static int __init sr_class3_init(void)  	pr_info("SmartReflex Class3 initialized\n");  	return sr_register_class(&class3_data);  } -late_initcall(sr_class3_init); +omap_late_initcall(sr_class3_init); diff --git a/arch/arm/mach-omap2/soc.h b/arch/arm/mach-omap2/soc.h index f31d90774de..092aedd7ed1 100644 --- a/arch/arm/mach-omap2/soc.h +++ b/arch/arm/mach-omap2/soc.h @@ -42,6 +42,9 @@  #undef MULTI_OMAP2  #undef OMAP_NAME +#ifdef CONFIG_ARCH_MULTIPLATFORM +#define MULTI_OMAP2 +#endif  #ifdef CONFIG_SOC_OMAP2420  # ifdef OMAP_NAME  #  undef  MULTI_OMAP2 @@ -112,6 +115,11 @@ int omap_type(void);   */  unsigned int omap_rev(void); +static inline int soc_is_omap(void) +{ +	return omap_rev() != 0; +} +  /*   * Get the CPU revision for OMAP devices   */ @@ -465,5 +473,26 @@ static inline unsigned int omap4_has_ ##feat(void)	\  OMAP4_HAS_FEATURE(perf_silicon, PERF_SILICON) +/* + * We need to make sure omap initcalls don't run when + * multiplatform kernels are booted on other SoCs. + */ +#define omap_initcall(level, fn)		\ +static int __init __used __##fn(void)		\ +{						\ +	if (!soc_is_omap())			\ +		return 0;			\ +	return fn();				\ +}						\ +level(__##fn); + +#define omap_early_initcall(fn)		omap_initcall(early_initcall, fn) +#define omap_core_initcall(fn)		omap_initcall(core_initcall, fn) +#define omap_postcore_initcall(fn)	omap_initcall(postcore_initcall, fn) +#define omap_arch_initcall(fn)		omap_initcall(arch_initcall, fn) +#define omap_subsys_initcall(fn)	omap_initcall(subsys_initcall, fn) +#define omap_device_initcall(fn)	omap_initcall(device_initcall, fn) +#define omap_late_initcall(fn)		omap_initcall(late_initcall, fn) +  #endif	/* __ASSEMBLY__ */ diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c index 71729888ff0..72c2ca1e3f7 100644 --- a/arch/arm/mach-omap2/timer.c +++ b/arch/arm/mach-omap2/timer.c @@ -719,7 +719,7 @@ static int __init omap2_dm_timer_init(void)  	return 0;  } -arch_initcall(omap2_dm_timer_init); +omap_arch_initcall(omap2_dm_timer_init);  /**   * omap2_override_clocksource - clocksource override with user configuration diff --git a/arch/arm/mach-omap2/wd_timer.c b/arch/arm/mach-omap2/wd_timer.c index 7c2b4ed38f0..70240a54995 100644 --- a/arch/arm/mach-omap2/wd_timer.c +++ b/arch/arm/mach-omap2/wd_timer.c @@ -130,4 +130,4 @@ static int __init omap_init_wdt(void)  	     dev_name, oh->name);  	return 0;  } -subsys_initcall(omap_init_wdt); +omap_subsys_initcall(omap_init_wdt); diff --git a/arch/arm/mach-vt8500/Kconfig b/arch/arm/mach-vt8500/Kconfig index 9adcb9e76f5..7a602069bab 100644 --- a/arch/arm/mach-vt8500/Kconfig +++ b/arch/arm/mach-vt8500/Kconfig @@ -1,13 +1,18 @@  config ARCH_VT8500 -	bool "VIA/WonderMedia 85xx" if ARCH_MULTI_V5 -	default ARCH_VT8500_SINGLE +	bool  	select ARCH_HAS_CPUFREQ  	select ARCH_REQUIRE_GPIOLIB  	select CLKDEV_LOOKUP  	select CLKSRC_OF -	select CPU_ARM926T  	select GENERIC_CLOCKEVENTS  	select HAVE_CLK  	select VT8500_TIMER  	help  	  Support for VIA/WonderMedia VT8500/WM85xx System-on-Chip. + +config ARCH_WM8505 +	bool "VIA/Wondermedia 85xx and WM8650" + 	depends on ARCH_MULTI_V5 + 	select ARCH_VT8500 + 	select CPU_ARM926T + 	help diff --git a/arch/arm/mach-vt8500/include/mach/timex.h b/arch/arm/mach-vt8500/include/mach/timex.h deleted file mode 100644 index 8487e4c690b..00000000000 --- a/arch/arm/mach-vt8500/include/mach/timex.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - *  arch/arm/mach-vt8500/include/mach/timex.h - * - *  Copyright (C) 2010 Alexey Charkov <alchark@gmail.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - */ - -#ifndef MACH_TIMEX_H -#define MACH_TIMEX_H - -#define CLOCK_TICK_RATE		(3000000) - -#endif /* MACH_TIMEX_H */ diff --git a/arch/arm/mach-vt8500/include/mach/uncompress.h b/arch/arm/mach-vt8500/include/mach/uncompress.h deleted file mode 100644 index 5b4f19ecb4c..00000000000 --- a/arch/arm/mach-vt8500/include/mach/uncompress.h +++ /dev/null @@ -1,36 +0,0 @@ -/* arch/arm/mach-vt8500/include/mach/uncompress.h - * - * Copyright (C) 2010 Alexey Charkov <alchark@gmail.com> - * - * Based on arch/arm/mach-dove/include/mach/uncompress.h - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - */ - -#define UART0_PHYS	0xd8200000 -#define UART0_ADDR(x)	*(volatile unsigned char *)(UART0_PHYS + x) - -static void putc(const char c) -{ -	while (UART0_ADDR(0x1c) & 0x2) -		/* Tx busy, wait and poll */; - -	UART0_ADDR(0) = c; -} - -static void flush(void) -{ -} - -/* - * nothing to do - */ -#define arch_decomp_setup() diff --git a/arch/arm/plat-omap/Kconfig b/arch/arm/plat-omap/Kconfig index 665870dce3c..67c859cf16b 100644 --- a/arch/arm/plat-omap/Kconfig +++ b/arch/arm/plat-omap/Kconfig @@ -5,36 +5,6 @@ menu "TI OMAP Common Features"  config ARCH_OMAP_OTG  	bool -choice -	prompt "OMAP System Type" -	default ARCH_OMAP2PLUS - -config ARCH_OMAP1 -	bool "TI OMAP1" -	select CLKDEV_LOOKUP -	select CLKSRC_MMIO -	select GENERIC_IRQ_CHIP -	select HAVE_IDE -	select IRQ_DOMAIN -	select NEED_MACH_IO_H if PCCARD -	select NEED_MACH_MEMORY_H -	help -	  "Systems based on omap7xx, omap15xx or omap16xx" - -config ARCH_OMAP2PLUS -	bool "TI OMAP2/3/4" -	select CLKDEV_LOOKUP -	select GENERIC_IRQ_CHIP -	select OMAP_DM_TIMER -	select PINCTRL -	select PROC_DEVICETREE if PROC_FS -	select SPARSE_IRQ -	select USE_OF -	help -	  "Systems based on OMAP2, OMAP3, OMAP4 or OMAP5" - -endchoice -  comment "OMAP Feature Selections"  config OMAP_DEBUG_DEVICES @@ -118,7 +88,7 @@ config OMAP_MUX_WARNINGS  config OMAP_MBOX_FWK  	tristate "Mailbox framework support" -	depends on ARCH_OMAP +	depends on ARCH_OMAP && !ARCH_MULTIPLATFORM  	help  	  Say Y here if you want to use OMAP Mailbox framework support for  	  DSP, IVA1.0 and IVA2 in OMAP1/2/3. diff --git a/arch/arm/plat-omap/Makefile b/arch/arm/plat-omap/Makefile index a14a78a2f14..31199417b56 100644 --- a/arch/arm/plat-omap/Makefile +++ b/arch/arm/plat-omap/Makefile @@ -2,6 +2,8 @@  # Makefile for the linux kernel.  # +ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/arch/arm/plat-omap/include +  # Common support  obj-y := sram.o dma.o counter_32k.o  obj-m := diff --git a/arch/arm/plat-omap/i2c.c b/arch/arm/plat-omap/i2c.c index f9df624d108..58213d9714c 100644 --- a/arch/arm/plat-omap/i2c.c +++ b/arch/arm/plat-omap/i2c.c @@ -68,7 +68,7 @@ __setup("i2c_bus=", omap_i2c_bus_setup);   * Register busses defined in command line but that are not registered with   * omap_register_i2c_bus from board initialization code.   */ -static int __init omap_register_i2c_bus_cmdline(void) +int __init omap_register_i2c_bus_cmdline(void)  {  	int i, err = 0; @@ -83,7 +83,6 @@ static int __init omap_register_i2c_bus_cmdline(void)  out:  	return err;  } -subsys_initcall(omap_register_i2c_bus_cmdline);  /**   * omap_register_i2c_bus - register I2C bus with device descriptors diff --git a/arch/arm/plat-omap/include/plat/i2c.h b/arch/arm/plat-omap/include/plat/i2c.h index 7a9028cb5a7..810629d7966 100644 --- a/arch/arm/plat-omap/include/plat/i2c.h +++ b/arch/arm/plat-omap/include/plat/i2c.h @@ -32,6 +32,7 @@ int omap_i2c_add_bus(struct omap_i2c_bus_platform_data *i2c_pdata,  extern int omap_register_i2c_bus(int bus_id, u32 clkrate,  				 struct i2c_board_info const *info,  				 unsigned len); +extern int omap_register_i2c_bus_cmdline(void);  #else  static inline int omap_register_i2c_bus(int bus_id, u32 clkrate,  				 struct i2c_board_info const *info, @@ -39,6 +40,11 @@ static inline int omap_register_i2c_bus(int bus_id, u32 clkrate,  {  	return 0;  } + +static inline int omap_register_i2c_bus_cmdline(void) +{ +	return 0; +}  #endif  struct omap_hwmod; diff --git a/drivers/crypto/omap-sham.c b/drivers/crypto/omap-sham.c index 90d34adc2a6..9e6947bc296 100644 --- a/drivers/crypto/omap-sham.c +++ b/drivers/crypto/omap-sham.c @@ -38,7 +38,10 @@  #include <crypto/internal/hash.h>  #include <linux/omap-dma.h> + +#ifdef CONFIG_ARCH_OMAP1  #include <mach/irqs.h> +#endif  #define SHA_REG_DIGEST(x)		(0x00 + ((x) * 0x04))  #define SHA_REG_DIN(x)			(0x1C + ((x) * 0x04)) diff --git a/drivers/dma/omap-dma.c b/drivers/dma/omap-dma.c index 5a31264f2bd..c4b4fd2acc4 100644 --- a/drivers/dma/omap-dma.c +++ b/drivers/dma/omap-dma.c @@ -661,32 +661,14 @@ bool omap_dma_filter_fn(struct dma_chan *chan, void *param)  }  EXPORT_SYMBOL_GPL(omap_dma_filter_fn); -static struct platform_device *pdev; - -static const struct platform_device_info omap_dma_dev_info = { -	.name = "omap-dma-engine", -	.id = -1, -	.dma_mask = DMA_BIT_MASK(32), -}; -  static int omap_dma_init(void)  { -	int rc = platform_driver_register(&omap_dma_driver); - -	if (rc == 0) { -		pdev = platform_device_register_full(&omap_dma_dev_info); -		if (IS_ERR(pdev)) { -			platform_driver_unregister(&omap_dma_driver); -			rc = PTR_ERR(pdev); -		} -	} -	return rc; +	return platform_driver_register(&omap_dma_driver);  }  subsys_initcall(omap_dma_init);  static void __exit omap_dma_exit(void)  { -	platform_device_unregister(pdev);  	platform_driver_unregister(&omap_dma_driver);  }  module_exit(omap_dma_exit); diff --git a/drivers/media/platform/davinci/vpss.c b/drivers/media/platform/davinci/vpss.c index cdbff88e0f1..684e815a81b 100644 --- a/drivers/media/platform/davinci/vpss.c +++ b/drivers/media/platform/davinci/vpss.c @@ -25,7 +25,6 @@  #include <linux/spinlock.h>  #include <linux/compiler.h>  #include <linux/io.h> -#include <mach/hardware.h>  #include <media/davinci/vpss.h>  MODULE_LICENSE("GPL"); diff --git a/drivers/media/rc/Kconfig b/drivers/media/rc/Kconfig index 79ba242fe26..19f3563c61d 100644 --- a/drivers/media/rc/Kconfig +++ b/drivers/media/rc/Kconfig @@ -291,7 +291,7 @@ config IR_TTUSBIR  config IR_RX51  	tristate "Nokia N900 IR transmitter diode" -	depends on OMAP_DM_TIMER && LIRC +	depends on OMAP_DM_TIMER && LIRC && !ARCH_MULTIPLATFORM  	---help---  	   Say Y or M here if you want to enable support for the IR  	   transmitter diode built in the Nokia N900 (RX51) device. diff --git a/drivers/net/ethernet/ti/davinci_cpdma.c b/drivers/net/ethernet/ti/davinci_cpdma.c index 68c3418160b..ee13dc78430 100644 --- a/drivers/net/ethernet/ti/davinci_cpdma.c +++ b/drivers/net/ethernet/ti/davinci_cpdma.c @@ -492,11 +492,13 @@ int cpdma_ctlr_int_ctrl(struct cpdma_ctlr *ctlr, bool enable)  	spin_unlock_irqrestore(&ctlr->lock, flags);  	return 0;  } +EXPORT_SYMBOL_GPL(cpdma_ctlr_int_ctrl);  void cpdma_ctlr_eoi(struct cpdma_ctlr *ctlr, u32 value)  {  	dma_reg_write(ctlr, CPDMA_MACEOIVECTOR, value);  } +EXPORT_SYMBOL_GPL(cpdma_ctlr_eoi);  struct cpdma_chan *cpdma_chan_create(struct cpdma_ctlr *ctlr, int chan_num,  				     cpdma_handler_fn handler) @@ -1028,3 +1030,4 @@ unlock_ret:  	spin_unlock_irqrestore(&ctlr->lock, flags);  	return ret;  } +EXPORT_SYMBOL_GPL(cpdma_control_set); diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig index 0b24108d1e1..cc1f7bf53fd 100644 --- a/drivers/remoteproc/Kconfig +++ b/drivers/remoteproc/Kconfig @@ -12,8 +12,8 @@ config OMAP_REMOTEPROC  	depends on HAS_DMA  	depends on ARCH_OMAP4  	depends on OMAP_IOMMU +	depends on OMAP_MBOX_FWK  	select REMOTEPROC -	select OMAP_MBOX_FWK  	select RPMSG  	help  	  Say y here to support OMAP's remote processors (dual M3 diff --git a/drivers/staging/tidspbridge/Kconfig b/drivers/staging/tidspbridge/Kconfig index 0dd479f5638..60848f198b4 100644 --- a/drivers/staging/tidspbridge/Kconfig +++ b/drivers/staging/tidspbridge/Kconfig @@ -4,7 +4,7 @@  menuconfig TIDSPBRIDGE  	tristate "DSP Bridge driver" -	depends on ARCH_OMAP3 +	depends on ARCH_OMAP3 && !ARCH_MULTIPLATFORM  	select OMAP_MBOX_FWK  	help  	  DSP/BIOS Bridge is designed for platforms that contain a GPP and  |