提交 c6c3a3a0 编写于 作者: A Arnd Bergmann

Merge branch 'omap/cleanup' into next/cleanup2

* TI - DSP (Digital Signal Processor)
TI DSP included in OMAP SoC
Required properties:
- compatible : Should be "ti,omap3-c64" for OMAP3 & 4
- ti,hwmods: "dsp"
Examples:
dsp {
compatible = "ti,omap3-c64";
ti,hwmods = "dsp";
};
* TI - IVA (Imaging and Video Accelerator) subsystem
The IVA contain various audio, video or imaging HW accelerator
depending of the version.
Required properties:
- compatible : Should be:
- "ti,ivahd" for OMAP4
- "ti,iva2.2" for OMAP3
- "ti,iva2.1" for OMAP2430
- "ti,iva1" for OMAP2420
- ti,hwmods: "iva"
Examples:
iva {
compatible = "ti,ivahd", "ti,iva";
ti,hwmods = "iva";
};
* TI - L3 Network On Chip (NoC)
This version is an implementation of the generic NoC IP
provided by Arteris.
Required properties:
- compatible : Should be "ti,omap3-l3-smx" for OMAP3 family
Should be "ti,omap4-l3-noc" for OMAP4 family
- ti,hwmods: "l3_main_1", ... One hwmod for each noc domain.
Examples:
ocp {
compatible = "ti,omap4-l3-noc", "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
ranges;
ti,hwmods = "l3_main_1", "l3_main_2", "l3_main_3";
};
* TI - MPU (Main Processor Unit) subsystem
The MPU subsystem contain one or several ARM cores
depending of the version.
The MPU contain CPUs, GIC, L2 cache and a local PRCM.
Required properties:
- compatible : Should be "ti,omap3-mpu" for OMAP3
Should be "ti,omap4-mpu" for OMAP4
- ti,hwmods: "mpu"
Examples:
- For an OMAP4 SMP system:
mpu {
compatible = "ti,omap4-mpu";
ti,hwmods = "mpu";
};
- For an OMAP3 monocore system:
mpu {
compatible = "ti,omap3-mpu";
ti,hwmods = "mpu";
};
* Texas Instruments OMAP
OMAP is currently using a static file per SoC family to describe the
IPs present in the SoC.
On top of that an omap_device is created to extend the platform_device
capabilities and to allow binding with one or several hwmods.
The hwmods will contain all the information to build the device:
adresse range, irq lines, dma lines, interconnect, PRCM register,
clock domain, input clocks.
For the moment just point to the existing hwmod, the next step will be
to move data from hwmod to device-tree representation.
Required properties:
- compatible: Every devices present in OMAP SoC should be in the
form: "ti,XXX"
- ti,hwmods: list of hwmod names (ascii strings), that comes from the OMAP
HW documentation, attached to a device. Must contain at least
one hwmod.
Optional properties:
- ti,no_idle_on_suspend: When present, it prevents the PM to idle the module
during suspend.
Example:
spinlock@1 {
compatible = "ti,omap4-spinlock";
ti,hwmods = "spinlock";
};
Boards:
- OMAP3 BeagleBoard : Low cost community board
compatible = "ti,omap3-beagle", "ti,omap3"
- OMAP4 SDP : Software Developement Board
compatible = "ti,omap4-sdp", "ti,omap4430"
- OMAP4 PandaBoard : Low cost community board
compatible = "ti,omap4-panda", "ti,omap4430"
/*
* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.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/ "omap3.dtsi"
/ {
model = "TI OMAP3 BeagleBoard";
compatible = "ti,omap3-beagle", "ti,omap3";
/*
* Since the initial device tree board file does not create any
* devices (MMC, network...), the only way to boot is to provide a
* ramdisk.
*/
chosen {
bootargs = "root=/dev/ram0 rw console=ttyO2,115200n8 initrd=0x81600000,20M ramdisk_size=20480 no_console_suspend debug earlyprintk";
};
memory {
device_type = "memory";
reg = <0x80000000 0x20000000>; /* 512 MB */
};
};
/*
* Device Tree Source for OMAP3 SoC
*
* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
*
* 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/ "skeleton.dtsi"
/ {
compatible = "ti,omap3430", "ti,omap3";
cpus {
cpu@0 {
compatible = "arm,cortex-a8";
};
};
/*
* The soc node represents the soc top level view. It is uses for IPs
* that are not memory mapped in the MPU view or for the MPU itself.
*/
soc {
compatible = "ti,omap-infra";
mpu {
compatible = "ti,omap3-mpu";
ti,hwmods = "mpu";
};
iva {
compatible = "ti,iva2.2";
ti,hwmods = "iva";
dsp {
compatible = "ti,omap3-c64";
};
};
};
/*
* XXX: Use a flat representation of the OMAP3 interconnect.
* The real OMAP interconnect network is quite complex.
* Since that will not bring real advantage to represent that in DT for
* the moment, just use a fake OCP bus entry to represent the whole bus
* hierarchy.
*/
ocp {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
ranges;
ti,hwmods = "l3_main";
intc: interrupt-controller@1 {
compatible = "ti,omap3-intc";
interrupt-controller;
#interrupt-cells = <1>;
};
};
};
/*
* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.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/ "omap4.dtsi"
/ {
model = "TI OMAP4 PandaBoard";
compatible = "ti,omap4-panda", "ti,omap4430", "ti,omap4";
/*
* Since the initial device tree board file does not create any
* devices (MMC, network...), the only way to boot is to provide a
* ramdisk.
*/
chosen {
bootargs = "root=/dev/ram0 rw console=ttyO2,115200n8 initrd=0x81600000,20M ramdisk_size=20480 no_console_suspend debug";
};
memory {
device_type = "memory";
reg = <0x80000000 0x40000000>; /* 1 GB */
};
};
/*
* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.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/ "omap4.dtsi"
/ {
model = "TI OMAP4 SDP board";
compatible = "ti,omap4-sdp", "ti,omap4430", "ti,omap4";
/*
* Since the initial device tree board file does not create any
* devices (MMC, network...), the only way to boot is to provide a
* ramdisk.
*/
chosen {
bootargs = "root=/dev/ram0 rw console=ttyO2,115200n8 initrd=0x81600000,20M ramdisk_size=20480 no_console_suspend debug";
};
memory {
device_type = "memory";
reg = <0x80000000 0x40000000>; /* 1 GB */
};
};
/*
* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.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.
*/
/*
* Carveout for multimedia usecases
* It should be the last 48MB of the first 512MB memory part
* In theory, it should not even exist. That zone should be reserved
* dynamically during the .reserve callback.
*/
/memreserve/ 0x9d000000 0x03000000;
/include/ "skeleton.dtsi"
/ {
compatible = "ti,omap4430", "ti,omap4";
interrupt-parent = <&gic>;
aliases {
};
cpus {
cpu@0 {
compatible = "arm,cortex-a9";
};
cpu@1 {
compatible = "arm,cortex-a9";
};
};
/*
* The soc node represents the soc top level view. It is uses for IPs
* that are not memory mapped in the MPU view or for the MPU itself.
*/
soc {
compatible = "ti,omap-infra";
mpu {
compatible = "ti,omap4-mpu";
ti,hwmods = "mpu";
};
dsp {
compatible = "ti,omap3-c64";
ti,hwmods = "dsp";
};
iva {
compatible = "ti,ivahd";
ti,hwmods = "iva";
};
};
/*
* XXX: Use a flat representation of the OMAP4 interconnect.
* The real OMAP interconnect network is quite complex.
*
* MPU -+-- MPU_PRIVATE - GIC, L2
* |
* +----------------+----------+
* | | |
* + +- EMIF - DDR |
* | | |
* | + +--------+
* | | |
* | +- L4_ABE - AESS, MCBSP, TIMERs...
* | |
* +- L3_MAIN --+- L4_CORE - IPs...
* |
* +- L4_PER - IPs...
* |
* +- L4_CFG -+- L4_WKUP - IPs...
* | |
* | +- IPs...
* +- IPU ----+
* | |
* +- DSP ----+
* | |
* +- DSS ----+
*
* Since that will not bring real advantage to represent that in DT for
* the moment, just use a fake OCP bus entry to represent the whole bus
* hierarchy.
*/
ocp {
compatible = "ti,omap4-l3-noc", "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
ranges;
ti,hwmods = "l3_main_1", "l3_main_2", "l3_main_3";
gic: interrupt-controller@48241000 {
compatible = "arm,cortex-a9-gic";
interrupt-controller;
#interrupt-cells = <1>;
reg = <0x48241000 0x1000>,
<0x48240100 0x0100>;
};
};
};
...@@ -12,7 +12,12 @@ struct dev_archdata { ...@@ -12,7 +12,12 @@ struct dev_archdata {
#endif #endif
}; };
struct omap_device;
struct pdev_archdata { struct pdev_archdata {
#ifdef CONFIG_ARCH_OMAP
struct omap_device *od;
#endif
}; };
#endif #endif
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
# Common support # Common support
obj-y := io.o id.o sram.o time.o irq.o mux.o flash.o serial.o devices.o dma.o obj-y := io.o id.o sram.o time.o irq.o mux.o flash.o serial.o devices.o dma.o
obj-y += clock.o clock_data.o opp_data.o reset.o pm_bus.o obj-y += clock.o clock_data.o opp_data.o reset.o pm_bus.o timer.o
obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o
......
...@@ -135,12 +135,6 @@ void ams_delta_latch2_write(u16 mask, u16 value) ...@@ -135,12 +135,6 @@ void ams_delta_latch2_write(u16 mask, u16 value)
*(volatile __u16 *) AMS_DELTA_LATCH2_VIRT = ams_delta_latch2_reg; *(volatile __u16 *) AMS_DELTA_LATCH2_VIRT = ams_delta_latch2_reg;
} }
static void __init ams_delta_init_irq(void)
{
omap1_init_common_hw();
omap1_init_irq();
}
static struct map_desc ams_delta_io_desc[] __initdata = { static struct map_desc ams_delta_io_desc[] __initdata = {
/* AMS_DELTA_LATCH1 */ /* AMS_DELTA_LATCH1 */
{ {
...@@ -379,17 +373,13 @@ static int __init ams_delta_modem_init(void) ...@@ -379,17 +373,13 @@ static int __init ams_delta_modem_init(void)
} }
arch_initcall(ams_delta_modem_init); arch_initcall(ams_delta_modem_init);
static void __init ams_delta_map_io(void)
{
omap1_map_common_io();
}
MACHINE_START(AMS_DELTA, "Amstrad E3 (Delta)") MACHINE_START(AMS_DELTA, "Amstrad E3 (Delta)")
/* Maintainer: Jonathan McDowell <noodles@earth.li> */ /* Maintainer: Jonathan McDowell <noodles@earth.li> */
.boot_params = 0x10000100, .boot_params = 0x10000100,
.map_io = ams_delta_map_io, .map_io = omap15xx_map_io,
.init_early = omap1_init_early,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = ams_delta_init_irq, .init_irq = omap1_init_irq,
.init_machine = ams_delta_init, .init_machine = ams_delta_init,
.timer = &omap1_timer, .timer = &omap1_timer,
MACHINE_END MACHINE_END
......
...@@ -297,6 +297,39 @@ static struct omap_board_config_kernel fsample_config[] __initdata = { ...@@ -297,6 +297,39 @@ static struct omap_board_config_kernel fsample_config[] __initdata = {
static void __init omap_fsample_init(void) static void __init omap_fsample_init(void)
{ {
/* Early, board-dependent init */
/*
* Hold GSM Reset until needed
*/
omap_writew(omap_readw(OMAP7XX_DSP_M_CTL) & ~1, OMAP7XX_DSP_M_CTL);
/*
* UARTs -> done automagically by 8250 driver
*/
/*
* CSx timings, GPIO Mux ... setup
*/
/* Flash: CS0 timings setup */
omap_writel(0x0000fff3, OMAP7XX_FLASH_CFG_0);
omap_writel(0x00000088, OMAP7XX_FLASH_ACFG_0);
/*
* Ethernet support through the debug board
* CS1 timings setup
*/
omap_writel(0x0000fff3, OMAP7XX_FLASH_CFG_1);
omap_writel(0x00000000, OMAP7XX_FLASH_ACFG_1);
/*
* Configure MPU_EXT_NIRQ IO in IO_CONF9 register,
* It is used as the Ethernet controller interrupt
*/
omap_writel(omap_readl(OMAP7XX_IO_CONF_9) & 0x1FFFFFFF,
OMAP7XX_IO_CONF_9);
fsample_init_smc91x(); fsample_init_smc91x();
if (gpio_request(FSAMPLE_NAND_RB_GPIO_PIN, "NAND ready") < 0) if (gpio_request(FSAMPLE_NAND_RB_GPIO_PIN, "NAND ready") < 0)
...@@ -326,12 +359,6 @@ static void __init omap_fsample_init(void) ...@@ -326,12 +359,6 @@ static void __init omap_fsample_init(void)
omap_register_i2c_bus(1, 100, NULL, 0); omap_register_i2c_bus(1, 100, NULL, 0);
} }
static void __init omap_fsample_init_irq(void)
{
omap1_init_common_hw();
omap1_init_irq();
}
/* Only FPGA needs to be mapped here. All others are done with ioremap */ /* Only FPGA needs to be mapped here. All others are done with ioremap */
static struct map_desc omap_fsample_io_desc[] __initdata = { static struct map_desc omap_fsample_io_desc[] __initdata = {
{ {
...@@ -350,49 +377,18 @@ static struct map_desc omap_fsample_io_desc[] __initdata = { ...@@ -350,49 +377,18 @@ static struct map_desc omap_fsample_io_desc[] __initdata = {
static void __init omap_fsample_map_io(void) static void __init omap_fsample_map_io(void)
{ {
omap1_map_common_io(); omap15xx_map_io();
iotable_init(omap_fsample_io_desc, iotable_init(omap_fsample_io_desc,
ARRAY_SIZE(omap_fsample_io_desc)); ARRAY_SIZE(omap_fsample_io_desc));
/* Early, board-dependent init */
/*
* Hold GSM Reset until needed
*/
omap_writew(omap_readw(OMAP7XX_DSP_M_CTL) & ~1, OMAP7XX_DSP_M_CTL);
/*
* UARTs -> done automagically by 8250 driver
*/
/*
* CSx timings, GPIO Mux ... setup
*/
/* Flash: CS0 timings setup */
omap_writel(0x0000fff3, OMAP7XX_FLASH_CFG_0);
omap_writel(0x00000088, OMAP7XX_FLASH_ACFG_0);
/*
* Ethernet support through the debug board
* CS1 timings setup
*/
omap_writel(0x0000fff3, OMAP7XX_FLASH_CFG_1);
omap_writel(0x00000000, OMAP7XX_FLASH_ACFG_1);
/*
* Configure MPU_EXT_NIRQ IO in IO_CONF9 register,
* It is used as the Ethernet controller interrupt
*/
omap_writel(omap_readl(OMAP7XX_IO_CONF_9) & 0x1FFFFFFF, OMAP7XX_IO_CONF_9);
} }
MACHINE_START(OMAP_FSAMPLE, "OMAP730 F-Sample") MACHINE_START(OMAP_FSAMPLE, "OMAP730 F-Sample")
/* Maintainer: Brian Swetland <swetland@google.com> */ /* Maintainer: Brian Swetland <swetland@google.com> */
.boot_params = 0x10000100, .boot_params = 0x10000100,
.map_io = omap_fsample_map_io, .map_io = omap_fsample_map_io,
.init_early = omap1_init_early,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = omap_fsample_init_irq, .init_irq = omap1_init_irq,
.init_machine = omap_fsample_init, .init_machine = omap_fsample_init,
.timer = &omap1_timer, .timer = &omap1_timer,
MACHINE_END MACHINE_END
...@@ -28,12 +28,6 @@ ...@@ -28,12 +28,6 @@
#include <plat/board.h> #include <plat/board.h>
#include <plat/common.h> #include <plat/common.h>
static void __init omap_generic_init_irq(void)
{
omap1_init_common_hw();
omap1_init_irq();
}
/* assume no Mini-AB port */ /* assume no Mini-AB port */
#ifdef CONFIG_ARCH_OMAP15XX #ifdef CONFIG_ARCH_OMAP15XX
...@@ -87,17 +81,13 @@ static void __init omap_generic_init(void) ...@@ -87,17 +81,13 @@ static void __init omap_generic_init(void)
omap_register_i2c_bus(1, 100, NULL, 0); omap_register_i2c_bus(1, 100, NULL, 0);
} }
static void __init omap_generic_map_io(void)
{
omap1_map_common_io();
}
MACHINE_START(OMAP_GENERIC, "Generic OMAP1510/1610/1710") MACHINE_START(OMAP_GENERIC, "Generic OMAP1510/1610/1710")
/* Maintainer: Tony Lindgren <tony@atomide.com> */ /* Maintainer: Tony Lindgren <tony@atomide.com> */
.boot_params = 0x10000100, .boot_params = 0x10000100,
.map_io = omap_generic_map_io, .map_io = omap16xx_map_io,
.init_early = omap1_init_early,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = omap_generic_init_irq, .init_irq = omap1_init_irq,
.init_machine = omap_generic_init, .init_machine = omap_generic_init,
.timer = &omap1_timer, .timer = &omap1_timer,
MACHINE_END MACHINE_END
...@@ -373,12 +373,6 @@ static struct i2c_board_info __initdata h2_i2c_board_info[] = { ...@@ -373,12 +373,6 @@ static struct i2c_board_info __initdata h2_i2c_board_info[] = {
}, },
}; };
static void __init h2_init_irq(void)
{
omap1_init_common_hw();
omap1_init_irq();
}
static struct omap_usb_config h2_usb_config __initdata = { static struct omap_usb_config h2_usb_config __initdata = {
/* usb1 has a Mini-AB port and external isp1301 transceiver */ /* usb1 has a Mini-AB port and external isp1301 transceiver */
.otg = 2, .otg = 2,
...@@ -454,17 +448,13 @@ static void __init h2_init(void) ...@@ -454,17 +448,13 @@ static void __init h2_init(void)
h2_mmc_init(); h2_mmc_init();
} }
static void __init h2_map_io(void)
{
omap1_map_common_io();
}
MACHINE_START(OMAP_H2, "TI-H2") MACHINE_START(OMAP_H2, "TI-H2")
/* Maintainer: Imre Deak <imre.deak@nokia.com> */ /* Maintainer: Imre Deak <imre.deak@nokia.com> */
.boot_params = 0x10000100, .boot_params = 0x10000100,
.map_io = h2_map_io, .map_io = omap16xx_map_io,
.init_early = omap1_init_early,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = h2_init_irq, .init_irq = omap1_init_irq,
.init_machine = h2_init, .init_machine = h2_init,
.timer = &omap1_timer, .timer = &omap1_timer,
MACHINE_END MACHINE_END
...@@ -436,23 +436,13 @@ static void __init h3_init(void) ...@@ -436,23 +436,13 @@ static void __init h3_init(void)
h3_mmc_init(); h3_mmc_init();
} }
static void __init h3_init_irq(void)
{
omap1_init_common_hw();
omap1_init_irq();
}
static void __init h3_map_io(void)
{
omap1_map_common_io();
}
MACHINE_START(OMAP_H3, "TI OMAP1710 H3 board") MACHINE_START(OMAP_H3, "TI OMAP1710 H3 board")
/* Maintainer: Texas Instruments, Inc. */ /* Maintainer: Texas Instruments, Inc. */
.boot_params = 0x10000100, .boot_params = 0x10000100,
.map_io = h3_map_io, .map_io = omap16xx_map_io,
.init_early = omap1_init_early,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = h3_init_irq, .init_irq = omap1_init_irq,
.init_machine = h3_init, .init_machine = h3_init,
.timer = &omap1_timer, .timer = &omap1_timer,
MACHINE_END MACHINE_END
...@@ -500,7 +500,7 @@ static void __init htcherald_lcd_init(void) ...@@ -500,7 +500,7 @@ static void __init htcherald_lcd_init(void)
static void __init htcherald_map_io(void) static void __init htcherald_map_io(void)
{ {
omap1_map_common_io(); omap7xx_map_io();
/* /*
* The LCD panel must be disabled and DMA turned off here, as doing * The LCD panel must be disabled and DMA turned off here, as doing
...@@ -601,20 +601,14 @@ static void __init htcherald_init(void) ...@@ -601,20 +601,14 @@ static void __init htcherald_init(void)
#endif #endif
} }
static void __init htcherald_init_irq(void)
{
printk(KERN_INFO "htcherald_init_irq.\n");
omap1_init_common_hw();
omap1_init_irq();
}
MACHINE_START(HERALD, "HTC Herald") MACHINE_START(HERALD, "HTC Herald")
/* Maintainer: Cory Maccarrone <darkstar6262@gmail.com> */ /* Maintainer: Cory Maccarrone <darkstar6262@gmail.com> */
/* Maintainer: wing-linux.sourceforge.net */ /* Maintainer: wing-linux.sourceforge.net */
.boot_params = 0x10000100, .boot_params = 0x10000100,
.map_io = htcherald_map_io, .map_io = htcherald_map_io,
.init_early = omap1_init_early,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = htcherald_init_irq, .init_irq = omap1_init_irq,
.init_machine = htcherald_init, .init_machine = htcherald_init,
.timer = &omap1_timer, .timer = &omap1_timer,
MACHINE_END MACHINE_END
...@@ -289,12 +289,6 @@ static void __init innovator_init_smc91x(void) ...@@ -289,12 +289,6 @@ static void __init innovator_init_smc91x(void)
} }
} }
static void __init innovator_init_irq(void)
{
omap1_init_common_hw();
omap1_init_irq();
}
#ifdef CONFIG_ARCH_OMAP15XX #ifdef CONFIG_ARCH_OMAP15XX
static struct omap_usb_config innovator1510_usb_config __initdata = { static struct omap_usb_config innovator1510_usb_config __initdata = {
/* for bundled non-standard host and peripheral cables */ /* for bundled non-standard host and peripheral cables */
...@@ -439,30 +433,32 @@ static void __init innovator_init(void) ...@@ -439,30 +433,32 @@ static void __init innovator_init(void)
innovator_mmc_init(); innovator_mmc_init();
} }
/*
* REVISIT: Assume 15xx for now, we don't want to do revision check
* until later on. The right way to fix this is to set up a different
* machine_id for 16xx Innovator, or use device tree.
*/
static void __init innovator_map_io(void) static void __init innovator_map_io(void)
{ {
omap1_map_common_io(); omap15xx_map_io();
#ifdef CONFIG_ARCH_OMAP15XX
if (cpu_is_omap1510()) {
iotable_init(innovator1510_io_desc, ARRAY_SIZE(innovator1510_io_desc)); iotable_init(innovator1510_io_desc, ARRAY_SIZE(innovator1510_io_desc));
udelay(10); /* Delay needed for FPGA */ udelay(10); /* Delay needed for FPGA */
/* Dump the Innovator FPGA rev early - useful info for support. */ /* Dump the Innovator FPGA rev early - useful info for support. */
printk("Innovator FPGA Rev %d.%d Board Rev %d\n", pr_debug("Innovator FPGA Rev %d.%d Board Rev %d\n",
fpga_read(OMAP1510_FPGA_REV_HIGH), fpga_read(OMAP1510_FPGA_REV_HIGH),
fpga_read(OMAP1510_FPGA_REV_LOW), fpga_read(OMAP1510_FPGA_REV_LOW),
fpga_read(OMAP1510_FPGA_BOARD_REV)); fpga_read(OMAP1510_FPGA_BOARD_REV));
}
#endif
} }
MACHINE_START(OMAP_INNOVATOR, "TI-Innovator") MACHINE_START(OMAP_INNOVATOR, "TI-Innovator")
/* Maintainer: MontaVista Software, Inc. */ /* Maintainer: MontaVista Software, Inc. */
.boot_params = 0x10000100, .boot_params = 0x10000100,
.map_io = innovator_map_io, .map_io = innovator_map_io,
.init_early = omap1_init_early,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = innovator_init_irq, .init_irq = omap1_init_irq,
.init_machine = innovator_init, .init_machine = innovator_init,
.timer = &omap1_timer, .timer = &omap1_timer,
MACHINE_END MACHINE_END
...@@ -39,21 +39,6 @@ ...@@ -39,21 +39,6 @@
#define ADS7846_PENDOWN_GPIO 15 #define ADS7846_PENDOWN_GPIO 15
static void __init omap_nokia770_init_irq(void)
{
/* On Nokia 770, the SleepX signal is masked with an
* MPUIO line by default. It has to be unmasked for it
* to become functional */
/* SleepX mask direction */
omap_writew((omap_readw(0xfffb5008) & ~2), 0xfffb5008);
/* Unmask SleepX signal */
omap_writew((omap_readw(0xfffb5004) & ~2), 0xfffb5004);
omap1_init_common_hw();
omap1_init_irq();
}
static const unsigned int nokia770_keymap[] = { static const unsigned int nokia770_keymap[] = {
KEY(1, 0, GROUP_0 | KEY_UP), KEY(1, 0, GROUP_0 | KEY_UP),
KEY(2, 0, GROUP_1 | KEY_F5), KEY(2, 0, GROUP_1 | KEY_F5),
...@@ -246,6 +231,15 @@ static inline void nokia770_mmc_init(void) ...@@ -246,6 +231,15 @@ static inline void nokia770_mmc_init(void)
static void __init omap_nokia770_init(void) static void __init omap_nokia770_init(void)
{ {
/* On Nokia 770, the SleepX signal is masked with an
* MPUIO line by default. It has to be unmasked for it
* to become functional */
/* SleepX mask direction */
omap_writew((omap_readw(0xfffb5008) & ~2), 0xfffb5008);
/* Unmask SleepX signal */
omap_writew((omap_readw(0xfffb5004) & ~2), 0xfffb5004);
platform_add_devices(nokia770_devices, ARRAY_SIZE(nokia770_devices)); platform_add_devices(nokia770_devices, ARRAY_SIZE(nokia770_devices));
spi_register_board_info(nokia770_spi_board_info, spi_register_board_info(nokia770_spi_board_info,
ARRAY_SIZE(nokia770_spi_board_info)); ARRAY_SIZE(nokia770_spi_board_info));
...@@ -258,16 +252,12 @@ static void __init omap_nokia770_init(void) ...@@ -258,16 +252,12 @@ static void __init omap_nokia770_init(void)
nokia770_mmc_init(); nokia770_mmc_init();
} }
static void __init omap_nokia770_map_io(void)
{
omap1_map_common_io();
}
MACHINE_START(NOKIA770, "Nokia 770") MACHINE_START(NOKIA770, "Nokia 770")
.boot_params = 0x10000100, .boot_params = 0x10000100,
.map_io = omap_nokia770_map_io, .map_io = omap16xx_map_io,
.init_early = omap1_init_early,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = omap_nokia770_init_irq, .init_irq = omap1_init_irq,
.init_machine = omap_nokia770_init, .init_machine = omap_nokia770_init,
.timer = &omap1_timer, .timer = &omap1_timer,
MACHINE_END MACHINE_END
...@@ -279,12 +279,6 @@ static void __init osk_init_cf(void) ...@@ -279,12 +279,6 @@ static void __init osk_init_cf(void)
irq_set_irq_type(gpio_to_irq(62), IRQ_TYPE_EDGE_FALLING); irq_set_irq_type(gpio_to_irq(62), IRQ_TYPE_EDGE_FALLING);
} }
static void __init osk_init_irq(void)
{
omap1_init_common_hw();
omap1_init_irq();
}
static struct omap_usb_config osk_usb_config __initdata = { static struct omap_usb_config osk_usb_config __initdata = {
/* has usb host connector (A) ... for development it can also /* has usb host connector (A) ... for development it can also
* be used, with a NONSTANDARD gender-bending cable/dongle, as * be used, with a NONSTANDARD gender-bending cable/dongle, as
...@@ -576,17 +570,13 @@ static void __init osk_init(void) ...@@ -576,17 +570,13 @@ static void __init osk_init(void)
osk_mistral_init(); osk_mistral_init();
} }
static void __init osk_map_io(void)
{
omap1_map_common_io();
}
MACHINE_START(OMAP_OSK, "TI-OSK") MACHINE_START(OMAP_OSK, "TI-OSK")
/* Maintainer: Dirk Behme <dirk.behme@de.bosch.com> */ /* Maintainer: Dirk Behme <dirk.behme@de.bosch.com> */
.boot_params = 0x10000100, .boot_params = 0x10000100,
.map_io = osk_map_io, .map_io = omap16xx_map_io,
.init_early = omap1_init_early,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = osk_init_irq, .init_irq = omap1_init_irq,
.init_machine = osk_init, .init_machine = osk_init,
.timer = &omap1_timer, .timer = &omap1_timer,
MACHINE_END MACHINE_END
...@@ -59,12 +59,6 @@ ...@@ -59,12 +59,6 @@
#define PALMTE_MMC2_GPIO OMAP_MPUIO(7) #define PALMTE_MMC2_GPIO OMAP_MPUIO(7)
#define PALMTE_MMC3_GPIO OMAP_MPUIO(11) #define PALMTE_MMC3_GPIO OMAP_MPUIO(11)
static void __init omap_palmte_init_irq(void)
{
omap1_init_common_hw();
omap1_init_irq();
}
static const unsigned int palmte_keymap[] = { static const unsigned int palmte_keymap[] = {
KEY(0, 0, KEY_F1), /* Calendar */ KEY(0, 0, KEY_F1), /* Calendar */
KEY(1, 0, KEY_F2), /* Contacts */ KEY(1, 0, KEY_F2), /* Contacts */
...@@ -269,16 +263,12 @@ static void __init omap_palmte_init(void) ...@@ -269,16 +263,12 @@ static void __init omap_palmte_init(void)
omap_register_i2c_bus(1, 100, NULL, 0); omap_register_i2c_bus(1, 100, NULL, 0);
} }
static void __init omap_palmte_map_io(void)
{
omap1_map_common_io();
}
MACHINE_START(OMAP_PALMTE, "OMAP310 based Palm Tungsten E") MACHINE_START(OMAP_PALMTE, "OMAP310 based Palm Tungsten E")
.boot_params = 0x10000100, .boot_params = 0x10000100,
.map_io = omap_palmte_map_io, .map_io = omap15xx_map_io,
.init_early = omap1_init_early,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = omap_palmte_init_irq, .init_irq = omap1_init_irq,
.init_machine = omap_palmte_init, .init_machine = omap_palmte_init,
.timer = &omap1_timer, .timer = &omap1_timer,
MACHINE_END MACHINE_END
...@@ -263,12 +263,6 @@ static struct spi_board_info __initdata palmtt_boardinfo[] = { ...@@ -263,12 +263,6 @@ static struct spi_board_info __initdata palmtt_boardinfo[] = {
} }
}; };
static void __init omap_palmtt_init_irq(void)
{
omap1_init_common_hw();
omap1_init_irq();
}
static struct omap_usb_config palmtt_usb_config __initdata = { static struct omap_usb_config palmtt_usb_config __initdata = {
.register_dev = 1, .register_dev = 1,
.hmc_mode = 0, .hmc_mode = 0,
...@@ -315,16 +309,12 @@ static void __init omap_palmtt_init(void) ...@@ -315,16 +309,12 @@ static void __init omap_palmtt_init(void)
omap_register_i2c_bus(1, 100, NULL, 0); omap_register_i2c_bus(1, 100, NULL, 0);
} }
static void __init omap_palmtt_map_io(void)
{
omap1_map_common_io();
}
MACHINE_START(OMAP_PALMTT, "OMAP1510 based Palm Tungsten|T") MACHINE_START(OMAP_PALMTT, "OMAP1510 based Palm Tungsten|T")
.boot_params = 0x10000100, .boot_params = 0x10000100,
.map_io = omap_palmtt_map_io, .map_io = omap15xx_map_io,
.init_early = omap1_init_early,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = omap_palmtt_init_irq, .init_irq = omap1_init_irq,
.init_machine = omap_palmtt_init, .init_machine = omap_palmtt_init,
.timer = &omap1_timer, .timer = &omap1_timer,
MACHINE_END MACHINE_END
...@@ -57,13 +57,6 @@ ...@@ -57,13 +57,6 @@
#define PALMZ71_SLIDER_GPIO OMAP_MPUIO(3) #define PALMZ71_SLIDER_GPIO OMAP_MPUIO(3)
#define PALMZ71_MMC_IN_GPIO OMAP_MPUIO(4) #define PALMZ71_MMC_IN_GPIO OMAP_MPUIO(4)
static void __init
omap_palmz71_init_irq(void)
{
omap1_init_common_hw();
omap1_init_irq();
}
static const unsigned int palmz71_keymap[] = { static const unsigned int palmz71_keymap[] = {
KEY(0, 0, KEY_F1), KEY(0, 0, KEY_F1),
KEY(1, 0, KEY_F2), KEY(1, 0, KEY_F2),
...@@ -334,17 +327,12 @@ omap_palmz71_init(void) ...@@ -334,17 +327,12 @@ omap_palmz71_init(void)
palmz71_gpio_setup(0); palmz71_gpio_setup(0);
} }
static void __init
omap_palmz71_map_io(void)
{
omap1_map_common_io();
}
MACHINE_START(OMAP_PALMZ71, "OMAP310 based Palm Zire71") MACHINE_START(OMAP_PALMZ71, "OMAP310 based Palm Zire71")
.boot_params = 0x10000100, .boot_params = 0x10000100,
.map_io = omap_palmz71_map_io, .map_io = omap15xx_map_io,
.init_early = omap1_init_early,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = omap_palmz71_init_irq, .init_irq = omap1_init_irq,
.init_machine = omap_palmz71_init, .init_machine = omap_palmz71_init,
.timer = &omap1_timer, .timer = &omap1_timer,
MACHINE_END MACHINE_END
...@@ -265,6 +265,39 @@ static void __init perseus2_init_smc91x(void) ...@@ -265,6 +265,39 @@ static void __init perseus2_init_smc91x(void)
static void __init omap_perseus2_init(void) static void __init omap_perseus2_init(void)
{ {
/* Early, board-dependent init */
/*
* Hold GSM Reset until needed
*/
omap_writew(omap_readw(OMAP7XX_DSP_M_CTL) & ~1, OMAP7XX_DSP_M_CTL);
/*
* UARTs -> done automagically by 8250 driver
*/
/*
* CSx timings, GPIO Mux ... setup
*/
/* Flash: CS0 timings setup */
omap_writel(0x0000fff3, OMAP7XX_FLASH_CFG_0);
omap_writel(0x00000088, OMAP7XX_FLASH_ACFG_0);
/*
* Ethernet support through the debug board
* CS1 timings setup
*/
omap_writel(0x0000fff3, OMAP7XX_FLASH_CFG_1);
omap_writel(0x00000000, OMAP7XX_FLASH_ACFG_1);
/*
* Configure MPU_EXT_NIRQ IO in IO_CONF9 register,
* It is used as the Ethernet controller interrupt
*/
omap_writel(omap_readl(OMAP7XX_IO_CONF_9) & 0x1FFFFFFF,
OMAP7XX_IO_CONF_9);
perseus2_init_smc91x(); perseus2_init_smc91x();
if (gpio_request(P2_NAND_RB_GPIO_PIN, "NAND ready") < 0) if (gpio_request(P2_NAND_RB_GPIO_PIN, "NAND ready") < 0)
...@@ -294,11 +327,6 @@ static void __init omap_perseus2_init(void) ...@@ -294,11 +327,6 @@ static void __init omap_perseus2_init(void)
omap_register_i2c_bus(1, 100, NULL, 0); omap_register_i2c_bus(1, 100, NULL, 0);
} }
static void __init omap_perseus2_init_irq(void)
{
omap1_init_common_hw();
omap1_init_irq();
}
/* Only FPGA needs to be mapped here. All others are done with ioremap */ /* Only FPGA needs to be mapped here. All others are done with ioremap */
static struct map_desc omap_perseus2_io_desc[] __initdata = { static struct map_desc omap_perseus2_io_desc[] __initdata = {
{ {
...@@ -311,49 +339,18 @@ static struct map_desc omap_perseus2_io_desc[] __initdata = { ...@@ -311,49 +339,18 @@ static struct map_desc omap_perseus2_io_desc[] __initdata = {
static void __init omap_perseus2_map_io(void) static void __init omap_perseus2_map_io(void)
{ {
omap1_map_common_io(); omap7xx_map_io();
iotable_init(omap_perseus2_io_desc, iotable_init(omap_perseus2_io_desc,
ARRAY_SIZE(omap_perseus2_io_desc)); ARRAY_SIZE(omap_perseus2_io_desc));
/* Early, board-dependent init */
/*
* Hold GSM Reset until needed
*/
omap_writew(omap_readw(OMAP7XX_DSP_M_CTL) & ~1, OMAP7XX_DSP_M_CTL);
/*
* UARTs -> done automagically by 8250 driver
*/
/*
* CSx timings, GPIO Mux ... setup
*/
/* Flash: CS0 timings setup */
omap_writel(0x0000fff3, OMAP7XX_FLASH_CFG_0);
omap_writel(0x00000088, OMAP7XX_FLASH_ACFG_0);
/*
* Ethernet support through the debug board
* CS1 timings setup
*/
omap_writel(0x0000fff3, OMAP7XX_FLASH_CFG_1);
omap_writel(0x00000000, OMAP7XX_FLASH_ACFG_1);
/*
* Configure MPU_EXT_NIRQ IO in IO_CONF9 register,
* It is used as the Ethernet controller interrupt
*/
omap_writel(omap_readl(OMAP7XX_IO_CONF_9) & 0x1FFFFFFF, OMAP7XX_IO_CONF_9);
} }
MACHINE_START(OMAP_PERSEUS2, "OMAP730 Perseus2") MACHINE_START(OMAP_PERSEUS2, "OMAP730 Perseus2")
/* Maintainer: Kevin Hilman <kjh@hilman.org> */ /* Maintainer: Kevin Hilman <kjh@hilman.org> */
.boot_params = 0x10000100, .boot_params = 0x10000100,
.map_io = omap_perseus2_map_io, .map_io = omap_perseus2_map_io,
.init_early = omap1_init_early,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = omap_perseus2_init_irq, .init_irq = omap1_init_irq,
.init_machine = omap_perseus2_init, .init_machine = omap_perseus2_init,
.timer = &omap1_timer, .timer = &omap1_timer,
MACHINE_END MACHINE_END
...@@ -407,24 +407,13 @@ static void __init omap_sx1_init(void) ...@@ -407,24 +407,13 @@ static void __init omap_sx1_init(void)
gpio_direction_output(11, 0); /*A_SWITCH = 0 */ gpio_direction_output(11, 0); /*A_SWITCH = 0 */
gpio_direction_output(15, 0); /*A_USB_ON = 0 */ gpio_direction_output(15, 0); /*A_USB_ON = 0 */
} }
/*----------------------------------------*/
static void __init omap_sx1_init_irq(void)
{
omap1_init_common_hw();
omap1_init_irq();
}
/*----------------------------------------*/
static void __init omap_sx1_map_io(void)
{
omap1_map_common_io();
}
MACHINE_START(SX1, "OMAP310 based Siemens SX1") MACHINE_START(SX1, "OMAP310 based Siemens SX1")
.boot_params = 0x10000100, .boot_params = 0x10000100,
.map_io = omap_sx1_map_io, .map_io = omap15xx_map_io,
.init_early = omap1_init_early,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = omap_sx1_init_irq, .init_irq = omap1_init_irq,
.init_machine = omap_sx1_init, .init_machine = omap_sx1_init,
.timer = &omap1_timer, .timer = &omap1_timer,
MACHINE_END MACHINE_END
...@@ -159,17 +159,6 @@ static struct omap_usb_config voiceblue_usb_config __initdata = { ...@@ -159,17 +159,6 @@ static struct omap_usb_config voiceblue_usb_config __initdata = {
static struct omap_board_config_kernel voiceblue_config[] = { static struct omap_board_config_kernel voiceblue_config[] = {
}; };
static void __init voiceblue_init_irq(void)
{
omap1_init_common_hw();
omap1_init_irq();
}
static void __init voiceblue_map_io(void)
{
omap1_map_common_io();
}
#define MACHINE_PANICED 1 #define MACHINE_PANICED 1
#define MACHINE_REBOOTING 2 #define MACHINE_REBOOTING 2
#define MACHINE_REBOOT 4 #define MACHINE_REBOOT 4
...@@ -302,9 +291,10 @@ static void __init voiceblue_init(void) ...@@ -302,9 +291,10 @@ static void __init voiceblue_init(void)
MACHINE_START(VOICEBLUE, "VoiceBlue OMAP5910") MACHINE_START(VOICEBLUE, "VoiceBlue OMAP5910")
/* Maintainer: Ladislav Michl <michl@2n.cz> */ /* Maintainer: Ladislav Michl <michl@2n.cz> */
.boot_params = 0x10000100, .boot_params = 0x10000100,
.map_io = voiceblue_map_io, .map_io = omap15xx_map_io,
.init_early = omap1_init_early,
.reserve = omap_reserve, .reserve = omap_reserve,
.init_irq = voiceblue_init_irq, .init_irq = omap1_init_irq,
.init_machine = voiceblue_init, .init_machine = voiceblue_init,
.timer = &omap1_timer, .timer = &omap1_timer,
MACHINE_END MACHINE_END
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <mach/hardware.h> #include <mach/hardware.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <plat/common.h>
#include <plat/tc.h> #include <plat/tc.h>
#include <plat/board.h> #include <plat/board.h>
#include <plat/mux.h> #include <plat/mux.h>
...@@ -291,6 +292,8 @@ static int __init omap1_init_devices(void) ...@@ -291,6 +292,8 @@ static int __init omap1_init_devices(void)
if (!cpu_class_is_omap1()) if (!cpu_class_is_omap1())
return -ENODEV; return -ENODEV;
omap_sram_init();
/* please keep these calls, and their implementations above, /* please keep these calls, and their implementations above,
* in alphabetical order so they're easier to sort through. * in alphabetical order so they're easier to sort through.
*/ */
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include "clock.h" #include "clock.h"
extern void omap_check_revision(void); extern void omap_check_revision(void);
extern void omap_sram_init(void);
/* /*
* The machine specific code may provide the extra mapping besides the * The machine specific code may provide the extra mapping besides the
...@@ -85,50 +84,45 @@ static struct map_desc omap16xx_io_desc[] __initdata = { ...@@ -85,50 +84,45 @@ static struct map_desc omap16xx_io_desc[] __initdata = {
#endif #endif
/* /*
* Maps common IO regions for omap1. This should only get called from * Maps common IO regions for omap1
* board specific init.
*/ */
void __init omap1_map_common_io(void) static void __init omap1_map_common_io(void)
{ {
iotable_init(omap_io_desc, ARRAY_SIZE(omap_io_desc)); iotable_init(omap_io_desc, ARRAY_SIZE(omap_io_desc));
}
/* Normally devicemaps_init() would flush caches and tlb after
* mdesc->map_io(), but we must also do it here because of the CPU
* revision check below.
*/
local_flush_tlb_all();
flush_cache_all();
/* We want to check CPU revision early for cpu_is_omapxxxx() macros.
* IO space mapping must be initialized before we can do that.
*/
omap_check_revision();
#if defined (CONFIG_ARCH_OMAP730) || defined (CONFIG_ARCH_OMAP850) #if defined (CONFIG_ARCH_OMAP730) || defined (CONFIG_ARCH_OMAP850)
if (cpu_is_omap7xx()) { void __init omap7xx_map_io(void)
{
omap1_map_common_io();
iotable_init(omap7xx_io_desc, ARRAY_SIZE(omap7xx_io_desc)); iotable_init(omap7xx_io_desc, ARRAY_SIZE(omap7xx_io_desc));
} }
#endif #endif
#ifdef CONFIG_ARCH_OMAP15XX #ifdef CONFIG_ARCH_OMAP15XX
if (cpu_is_omap15xx()) { void __init omap15xx_map_io(void)
{
omap1_map_common_io();
iotable_init(omap1510_io_desc, ARRAY_SIZE(omap1510_io_desc)); iotable_init(omap1510_io_desc, ARRAY_SIZE(omap1510_io_desc));
} }
#endif #endif
#if defined(CONFIG_ARCH_OMAP16XX) #if defined(CONFIG_ARCH_OMAP16XX)
if (cpu_is_omap16xx()) { void __init omap16xx_map_io(void)
{
omap1_map_common_io();
iotable_init(omap16xx_io_desc, ARRAY_SIZE(omap16xx_io_desc)); iotable_init(omap16xx_io_desc, ARRAY_SIZE(omap16xx_io_desc));
}
#endif
omap_sram_init();
} }
#endif
/* /*
* Common low-level hardware init for omap1. This should only get called from * Common low-level hardware init for omap1.
* board specific init.
*/ */
void __init omap1_init_common_hw(void) void omap1_init_early(void)
{ {
omap_check_revision();
omap_ioremap_init();
/* REVISIT: Refer to OMAP5910 Errata, Advisory SYS_1: "Timeout Abort /* REVISIT: Refer to OMAP5910 Errata, Advisory SYS_1: "Timeout Abort
* on a Posted Write in the TIPB Bridge". * on a Posted Write in the TIPB Bridge".
*/ */
...@@ -138,7 +132,6 @@ void __init omap1_init_common_hw(void) ...@@ -138,7 +132,6 @@ void __init omap1_init_common_hw(void)
/* Must init clocks early to assure that timer interrupt works /* Must init clocks early to assure that timer interrupt works
*/ */
omap1_clk_init(); omap1_clk_init();
omap1_mux_init(); omap1_mux_init();
} }
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
static int dsp_use; static int dsp_use;
static struct clk *api_clk; static struct clk *api_clk;
static struct clk *dsp_clk; static struct clk *dsp_clk;
static struct platform_device **omap_mcbsp_devices;
static void omap1_mcbsp_request(unsigned int id) static void omap1_mcbsp_request(unsigned int id)
{ {
...@@ -78,6 +79,17 @@ static struct omap_mcbsp_ops omap1_mcbsp_ops = { ...@@ -78,6 +79,17 @@ static struct omap_mcbsp_ops omap1_mcbsp_ops = {
.free = omap1_mcbsp_free, .free = omap1_mcbsp_free,
}; };
#define OMAP7XX_MCBSP1_BASE 0xfffb1000
#define OMAP7XX_MCBSP2_BASE 0xfffb1800
#define OMAP1510_MCBSP1_BASE 0xe1011800
#define OMAP1510_MCBSP2_BASE 0xfffb1000
#define OMAP1510_MCBSP3_BASE 0xe1017000
#define OMAP1610_MCBSP1_BASE 0xe1011800
#define OMAP1610_MCBSP2_BASE 0xfffb1000
#define OMAP1610_MCBSP3_BASE 0xe1017000
#if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850) #if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
struct resource omap7xx_mcbsp_res[][6] = { struct resource omap7xx_mcbsp_res[][6] = {
{ {
...@@ -369,6 +381,39 @@ static struct omap_mcbsp_platform_data omap16xx_mcbsp_pdata[] = { ...@@ -369,6 +381,39 @@ static struct omap_mcbsp_platform_data omap16xx_mcbsp_pdata[] = {
#define OMAP16XX_MCBSP_COUNT 0 #define OMAP16XX_MCBSP_COUNT 0
#endif #endif
static void omap_mcbsp_register_board_cfg(struct resource *res, int res_count,
struct omap_mcbsp_platform_data *config, int size)
{
int i;
omap_mcbsp_devices = kzalloc(size * sizeof(struct platform_device *),
GFP_KERNEL);
if (!omap_mcbsp_devices) {
printk(KERN_ERR "Could not register McBSP devices\n");
return;
}
for (i = 0; i < size; i++) {
struct platform_device *new_mcbsp;
int ret;
new_mcbsp = platform_device_alloc("omap-mcbsp", i + 1);
if (!new_mcbsp)
continue;
platform_device_add_resources(new_mcbsp, &res[i * res_count],
res_count);
config[i].reg_size = 2;
config[i].reg_step = 2;
new_mcbsp->dev.platform_data = &config[i];
ret = platform_device_add(new_mcbsp);
if (ret) {
platform_device_put(new_mcbsp);
continue;
}
omap_mcbsp_devices[i] = new_mcbsp;
}
}
static int __init omap1_mcbsp_init(void) static int __init omap1_mcbsp_init(void)
{ {
if (!cpu_class_is_omap1()) if (!cpu_class_is_omap1())
......
/**
* OMAP1 Dual-Mode Timers - platform device registration
*
* Contains first level initialization routines which internally
* generates timer device information and registers with linux
* device model. It also has low level function to chnage the timer
* input clock source.
*
* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
* Tarun Kanti DebBarma <tarun.kanti@ti.com>
* Thara Gopinath <thara@ti.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.
*
* This program is distributed "as is" WITHOUT ANY WARRANTY of any
* kind, whether express or implied; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <linux/clk.h>
#include <linux/io.h>
#include <linux/err.h>
#include <linux/slab.h>
#include <linux/platform_device.h>
#include <mach/irqs.h>
#include <plat/dmtimer.h>
#define OMAP1610_GPTIMER1_BASE 0xfffb1400
#define OMAP1610_GPTIMER2_BASE 0xfffb1c00
#define OMAP1610_GPTIMER3_BASE 0xfffb2400
#define OMAP1610_GPTIMER4_BASE 0xfffb2c00
#define OMAP1610_GPTIMER5_BASE 0xfffb3400
#define OMAP1610_GPTIMER6_BASE 0xfffb3c00
#define OMAP1610_GPTIMER7_BASE 0xfffb7400
#define OMAP1610_GPTIMER8_BASE 0xfffbd400
#define OMAP1_DM_TIMER_COUNT 8
static int omap1_dm_timer_set_src(struct platform_device *pdev,
int source)
{
int n = (pdev->id - 1) << 1;
u32 l;
l = __raw_readl(MOD_CONF_CTRL_1) & ~(0x03 << n);
l |= source << n;
__raw_writel(l, MOD_CONF_CTRL_1);
return 0;
}
int __init omap1_dm_timer_init(void)
{
int i;
int ret;
struct dmtimer_platform_data *pdata;
struct platform_device *pdev;
if (!cpu_is_omap16xx())
return 0;
for (i = 1; i <= OMAP1_DM_TIMER_COUNT; i++) {
struct resource res[2];
u32 base, irq;
switch (i) {
case 1:
base = OMAP1610_GPTIMER1_BASE;
irq = INT_1610_GPTIMER1;
break;
case 2:
base = OMAP1610_GPTIMER2_BASE;
irq = INT_1610_GPTIMER2;
break;
case 3:
base = OMAP1610_GPTIMER3_BASE;
irq = INT_1610_GPTIMER3;
break;
case 4:
base = OMAP1610_GPTIMER4_BASE;
irq = INT_1610_GPTIMER4;
break;
case 5:
base = OMAP1610_GPTIMER5_BASE;
irq = INT_1610_GPTIMER5;
break;
case 6:
base = OMAP1610_GPTIMER6_BASE;
irq = INT_1610_GPTIMER6;
break;
case 7:
base = OMAP1610_GPTIMER7_BASE;
irq = INT_1610_GPTIMER7;
break;
case 8:
base = OMAP1610_GPTIMER8_BASE;
irq = INT_1610_GPTIMER8;
break;
default:
/*
* not supposed to reach here.
* this is to remove warning.
*/
return -EINVAL;
}
pdev = platform_device_alloc("omap_timer", i);
if (!pdev) {
pr_err("%s: Failed to device alloc for dmtimer%d\n",
__func__, i);
return -ENOMEM;
}
memset(res, 0, 2 * sizeof(struct resource));
res[0].start = base;
res[0].end = base + 0x46;
res[0].flags = IORESOURCE_MEM;
res[1].start = irq;
res[1].end = irq;
res[1].flags = IORESOURCE_IRQ;
ret = platform_device_add_resources(pdev, res,
ARRAY_SIZE(res));
if (ret) {
dev_err(&pdev->dev, "%s: Failed to add resources.\n",
__func__);
goto err_free_pdev;
}
pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
if (!pdata) {
dev_err(&pdev->dev, "%s: Failed to allocate pdata.\n",
__func__);
ret = -ENOMEM;
goto err_free_pdata;
}
pdata->set_timer_src = omap1_dm_timer_set_src;
pdata->needs_manual_reset = 1;
ret = platform_device_add_data(pdev, pdata, sizeof(*pdata));
if (ret) {
dev_err(&pdev->dev, "%s: Failed to add platform data.\n",
__func__);
goto err_free_pdata;
}
ret = platform_device_add(pdev);
if (ret) {
dev_err(&pdev->dev, "%s: Failed to add platform device.\n",
__func__);
goto err_free_pdata;
}
dev_dbg(&pdev->dev, " Registered.\n");
}
return 0;
err_free_pdata:
kfree(pdata);
err_free_pdev:
platform_device_unregister(pdev);
return ret;
}
arch_initcall(omap1_dm_timer_init);
...@@ -106,9 +106,13 @@ comment "OMAP Board Type" ...@@ -106,9 +106,13 @@ comment "OMAP Board Type"
depends on ARCH_OMAP2PLUS depends on ARCH_OMAP2PLUS
config MACH_OMAP_GENERIC config MACH_OMAP_GENERIC
bool "Generic OMAP board" bool "Generic OMAP2+ board"
depends on ARCH_OMAP2 depends on ARCH_OMAP2PLUS
select USE_OF
default y default y
help
Support for generic TI OMAP2+ boards using Flattened Device Tree.
More information at Documentation/devicetree
config MACH_OMAP2_TUSB6010 config MACH_OMAP2_TUSB6010
bool bool
......
...@@ -89,14 +89,13 @@ obj-$(CONFIG_ARCH_OMAP4) += prcm.o cm2xxx_3xxx.o cminst44xx.o \ ...@@ -89,14 +89,13 @@ obj-$(CONFIG_ARCH_OMAP4) += prcm.o cm2xxx_3xxx.o cminst44xx.o \
vp44xx_data.o vp44xx_data.o
# OMAP voltage domains # OMAP voltage domains
ifeq ($(CONFIG_PM),y) voltagedomain-common := voltage.o vc.o vp.o
voltagedomain-common := voltage.o obj-$(CONFIG_ARCH_OMAP2) += $(voltagedomain-common) \
obj-$(CONFIG_ARCH_OMAP2) += $(voltagedomain-common) voltagedomains2xxx_data.o
obj-$(CONFIG_ARCH_OMAP3) += $(voltagedomain-common) \ obj-$(CONFIG_ARCH_OMAP3) += $(voltagedomain-common) \
voltagedomains3xxx_data.o voltagedomains3xxx_data.o
obj-$(CONFIG_ARCH_OMAP4) += $(voltagedomain-common) \ obj-$(CONFIG_ARCH_OMAP4) += $(voltagedomain-common) \
voltagedomains44xx_data.o voltagedomains44xx_data.o
endif
# OMAP powerdomain framework # OMAP powerdomain framework
powerdomain-common += powerdomain.o powerdomain-common.o powerdomain-common += powerdomain.o powerdomain-common.o
...@@ -116,9 +115,12 @@ obj-$(CONFIG_ARCH_OMAP4) += $(powerdomain-common) \ ...@@ -116,9 +115,12 @@ obj-$(CONFIG_ARCH_OMAP4) += $(powerdomain-common) \
obj-$(CONFIG_ARCH_OMAP2) += clockdomain.o \ obj-$(CONFIG_ARCH_OMAP2) += clockdomain.o \
clockdomain2xxx_3xxx.o \ clockdomain2xxx_3xxx.o \
clockdomains2xxx_3xxx_data.o clockdomains2xxx_3xxx_data.o
obj-$(CONFIG_SOC_OMAP2420) += clockdomains2420_data.o
obj-$(CONFIG_SOC_OMAP2430) += clockdomains2430_data.o
obj-$(CONFIG_ARCH_OMAP3) += clockdomain.o \ obj-$(CONFIG_ARCH_OMAP3) += clockdomain.o \
clockdomain2xxx_3xxx.o \ clockdomain2xxx_3xxx.o \
clockdomains2xxx_3xxx_data.o clockdomains2xxx_3xxx_data.o \
clockdomains3xxx_data.o
obj-$(CONFIG_ARCH_OMAP4) += clockdomain.o \ obj-$(CONFIG_ARCH_OMAP4) += clockdomain.o \
clockdomain44xx.o \ clockdomain44xx.o \
clockdomains44xx_data.o clockdomains44xx_data.o
...@@ -185,78 +187,66 @@ endif ...@@ -185,78 +187,66 @@ endif
# Specific board support # Specific board support
obj-$(CONFIG_MACH_OMAP_GENERIC) += board-generic.o obj-$(CONFIG_MACH_OMAP_GENERIC) += board-generic.o
obj-$(CONFIG_MACH_OMAP_H4) += board-h4.o obj-$(CONFIG_MACH_OMAP_H4) += board-h4.o
obj-$(CONFIG_MACH_OMAP_2430SDP) += board-2430sdp.o \ obj-$(CONFIG_MACH_OMAP_2430SDP) += board-2430sdp.o
hsmmc.o
obj-$(CONFIG_MACH_OMAP_APOLLON) += board-apollon.o obj-$(CONFIG_MACH_OMAP_APOLLON) += board-apollon.o
obj-$(CONFIG_MACH_OMAP3_BEAGLE) += board-omap3beagle.o \ obj-$(CONFIG_MACH_OMAP3_BEAGLE) += board-omap3beagle.o
hsmmc.o obj-$(CONFIG_MACH_DEVKIT8000) += board-devkit8000.o
obj-$(CONFIG_MACH_DEVKIT8000) += board-devkit8000.o \ obj-$(CONFIG_MACH_OMAP_LDP) += board-ldp.o
hsmmc.o obj-$(CONFIG_MACH_OMAP3530_LV_SOM) += board-omap3logic.o
obj-$(CONFIG_MACH_OMAP_LDP) += board-ldp.o \ obj-$(CONFIG_MACH_OMAP3_TORPEDO) += board-omap3logic.o
board-flash.o \ obj-$(CONFIG_MACH_ENCORE) += board-omap3encore.o
hsmmc.o obj-$(CONFIG_MACH_OVERO) += board-overo.o
obj-$(CONFIG_MACH_OMAP3530_LV_SOM) += board-omap3logic.o \ obj-$(CONFIG_MACH_OMAP3EVM) += board-omap3evm.o
hsmmc.o obj-$(CONFIG_MACH_OMAP3_PANDORA) += board-omap3pandora.o
obj-$(CONFIG_MACH_OMAP3_TORPEDO) += board-omap3logic.o \ obj-$(CONFIG_MACH_OMAP_3430SDP) += board-3430sdp.o
hsmmc.o
obj-$(CONFIG_MACH_OVERO) += board-overo.o \
hsmmc.o
obj-$(CONFIG_MACH_OMAP3EVM) += board-omap3evm.o \
hsmmc.o
obj-$(CONFIG_MACH_OMAP3_PANDORA) += board-omap3pandora.o \
hsmmc.o
obj-$(CONFIG_MACH_OMAP_3430SDP) += board-3430sdp.o \
hsmmc.o \
board-flash.o
obj-$(CONFIG_MACH_NOKIA_N8X0) += board-n8x0.o obj-$(CONFIG_MACH_NOKIA_N8X0) += board-n8x0.o
obj-$(CONFIG_MACH_NOKIA_RM680) += board-rm680.o \ obj-$(CONFIG_MACH_NOKIA_RM680) += board-rm680.o \
sdram-nokia.o \ sdram-nokia.o
hsmmc.o
obj-$(CONFIG_MACH_NOKIA_RX51) += board-rx51.o \ obj-$(CONFIG_MACH_NOKIA_RX51) += board-rx51.o \
sdram-nokia.o \ sdram-nokia.o \
board-rx51-peripherals.o \ board-rx51-peripherals.o \
board-rx51-video.o \ board-rx51-video.o
hsmmc.o
obj-$(CONFIG_MACH_OMAP_ZOOM2) += board-zoom.o \ obj-$(CONFIG_MACH_OMAP_ZOOM2) += board-zoom.o \
board-zoom-peripherals.o \ board-zoom-peripherals.o \
board-zoom-display.o \ board-zoom-display.o \
board-flash.o \
hsmmc.o \
board-zoom-debugboard.o board-zoom-debugboard.o
obj-$(CONFIG_MACH_OMAP_ZOOM3) += board-zoom.o \ obj-$(CONFIG_MACH_OMAP_ZOOM3) += board-zoom.o \
board-zoom-peripherals.o \ board-zoom-peripherals.o \
board-zoom-display.o \ board-zoom-display.o \
board-flash.o \
hsmmc.o \
board-zoom-debugboard.o board-zoom-debugboard.o
obj-$(CONFIG_MACH_OMAP_3630SDP) += board-3630sdp.o \ obj-$(CONFIG_MACH_OMAP_3630SDP) += board-3630sdp.o \
board-zoom-peripherals.o \ board-zoom-peripherals.o \
board-zoom-display.o \ board-zoom-display.o
board-flash.o \ obj-$(CONFIG_MACH_CM_T35) += board-cm-t35.o
hsmmc.o
obj-$(CONFIG_MACH_CM_T35) += board-cm-t35.o \
hsmmc.o
obj-$(CONFIG_MACH_CM_T3517) += board-cm-t3517.o obj-$(CONFIG_MACH_CM_T3517) += board-cm-t3517.o
obj-$(CONFIG_MACH_IGEP0020) += board-igep0020.o \ obj-$(CONFIG_MACH_IGEP0020) += board-igep0020.o
hsmmc.o obj-$(CONFIG_MACH_OMAP3_TOUCHBOOK) += board-omap3touchbook.o
obj-$(CONFIG_MACH_OMAP3_TOUCHBOOK) += board-omap3touchbook.o \
hsmmc.o
obj-$(CONFIG_MACH_OMAP_4430SDP) += board-4430sdp.o \ obj-$(CONFIG_MACH_OMAP_4430SDP) += board-4430sdp.o \
hsmmc.o \
omap_phy_internal.o omap_phy_internal.o
obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \ obj-$(CONFIG_MACH_OMAP4_PANDA) += board-omap4panda.o \
hsmmc.o \ omap_phy_internal.o
obj-$(CONFIG_MACH_PCM049) += board-omap4pcm049.o \
omap_phy_internal.o omap_phy_internal.o
obj-$(CONFIG_MACH_OMAP3517EVM) += board-am3517evm.o \ obj-$(CONFIG_MACH_OMAP3517EVM) += board-am3517evm.o \
omap_phy_internal.o \ omap_phy_internal.o
obj-$(CONFIG_MACH_CRANEBOARD) += board-am3517crane.o obj-$(CONFIG_MACH_CRANEBOARD) += board-am3517crane.o
obj-$(CONFIG_MACH_SBC3530) += board-omap3stalker.o \ obj-$(CONFIG_MACH_SBC3530) += board-omap3stalker.o
hsmmc.o
obj-$(CONFIG_MACH_TI8168EVM) += board-ti8168evm.o obj-$(CONFIG_MACH_TI8168EVM) += board-ti8168evm.o
# Platform specific device init code # Platform specific device init code
omap-flash-$(CONFIG_MTD_NAND_OMAP2) := board-flash.o
omap-flash-$(CONFIG_MTD_ONENAND_OMAP2) := board-flash.o
obj-y += $(omap-flash-y) $(omap-flash-m)
omap-hsmmc-$(CONFIG_MMC_OMAP_HS) := hsmmc.o
obj-y += $(omap-hsmmc-m) $(omap-hsmmc-y)
usbfs-$(CONFIG_ARCH_OMAP_OTG) := usb-fs.o usbfs-$(CONFIG_ARCH_OMAP_OTG) := usb-fs.o
obj-y += $(usbfs-m) $(usbfs-y) obj-y += $(usbfs-m) $(usbfs-y)
obj-y += usb-musb.o obj-y += usb-musb.o
......
...@@ -141,12 +141,6 @@ static struct omap_board_config_kernel sdp2430_config[] __initdata = { ...@@ -141,12 +141,6 @@ static struct omap_board_config_kernel sdp2430_config[] __initdata = {
{OMAP_TAG_LCD, &sdp2430_lcd_config}, {OMAP_TAG_LCD, &sdp2430_lcd_config},
}; };
static void __init omap_2430sdp_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
static struct regulator_consumer_supply sdp2430_vmmc1_supplies[] = { static struct regulator_consumer_supply sdp2430_vmmc1_supplies[] = {
REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"), REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
}; };
...@@ -193,7 +187,8 @@ static int __init omap2430_i2c_init(void) ...@@ -193,7 +187,8 @@ static int __init omap2430_i2c_init(void)
{ {
omap_register_i2c_bus(1, 100, sdp2430_i2c1_boardinfo, omap_register_i2c_bus(1, 100, sdp2430_i2c1_boardinfo,
ARRAY_SIZE(sdp2430_i2c1_boardinfo)); ARRAY_SIZE(sdp2430_i2c1_boardinfo));
omap2_pmic_init("twl4030", &sdp2430_twldata); omap_pmic_init(2, 100, "twl4030", INT_24XX_SYS_NIRQ,
&sdp2430_twldata);
return 0; return 0;
} }
...@@ -235,6 +230,7 @@ static void __init omap_2430sdp_init(void) ...@@ -235,6 +230,7 @@ static void __init omap_2430sdp_init(void)
platform_add_devices(sdp2430_devices, ARRAY_SIZE(sdp2430_devices)); platform_add_devices(sdp2430_devices, ARRAY_SIZE(sdp2430_devices));
omap_serial_init(); omap_serial_init();
omap_sdrc_init(NULL, NULL);
omap2_hsmmc_init(mmc); omap2_hsmmc_init(mmc);
omap2_usbfs_init(&sdp2430_usb_config); omap2_usbfs_init(&sdp2430_usb_config);
...@@ -248,18 +244,12 @@ static void __init omap_2430sdp_init(void) ...@@ -248,18 +244,12 @@ static void __init omap_2430sdp_init(void)
"Secondary LCD backlight"); "Secondary LCD backlight");
} }
static void __init omap_2430sdp_map_io(void)
{
omap2_set_globals_243x();
omap243x_map_common_io();
}
MACHINE_START(OMAP_2430SDP, "OMAP2430 sdp2430 board") MACHINE_START(OMAP_2430SDP, "OMAP2430 sdp2430 board")
/* Maintainer: Syed Khasim - Texas Instruments Inc */ /* Maintainer: Syed Khasim - Texas Instruments Inc */
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap_2430sdp_map_io, .map_io = omap243x_map_io,
.init_early = omap_2430sdp_init_early, .init_early = omap2430_init_early,
.init_irq = omap2_init_irq, .init_irq = omap2_init_irq,
.init_machine = omap_2430sdp_init, .init_machine = omap_2430sdp_init,
.timer = &omap2_timer, .timer = &omap2_timer,
......
...@@ -225,12 +225,6 @@ static struct omap_dss_board_info sdp3430_dss_data = { ...@@ -225,12 +225,6 @@ static struct omap_dss_board_info sdp3430_dss_data = {
static struct omap_board_config_kernel sdp3430_config[] __initdata = { static struct omap_board_config_kernel sdp3430_config[] __initdata = {
}; };
static void __init omap_3430sdp_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(hyb18m512160af6_sdrc_params, NULL);
}
static struct omap2_hsmmc_info mmc[] = { static struct omap2_hsmmc_info mmc[] = {
{ {
.mmc = 1, .mmc = 1,
...@@ -719,6 +713,7 @@ static void __init omap_3430sdp_init(void) ...@@ -719,6 +713,7 @@ static void __init omap_3430sdp_init(void)
gpio_pendown = SDP3430_TS_GPIO_IRQ_SDPV1; gpio_pendown = SDP3430_TS_GPIO_IRQ_SDPV1;
omap_ads7846_init(1, gpio_pendown, 310, NULL); omap_ads7846_init(1, gpio_pendown, 310, NULL);
board_serial_init(); board_serial_init();
omap_sdrc_init(hyb18m512160af6_sdrc_params, NULL);
usb_musb_init(NULL); usb_musb_init(NULL);
board_smc91x_init(); board_smc91x_init();
board_flash_init(sdp_flash_partitions, chip_sel_3430, 0); board_flash_init(sdp_flash_partitions, chip_sel_3430, 0);
...@@ -732,7 +727,7 @@ MACHINE_START(OMAP_3430SDP, "OMAP3430 3430SDP board") ...@@ -732,7 +727,7 @@ MACHINE_START(OMAP_3430SDP, "OMAP3430 3430SDP board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap_3430sdp_init_early, .init_early = omap3430_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap_3430sdp_init, .init_machine = omap_3430sdp_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -70,13 +70,6 @@ static const struct usbhs_omap_board_data usbhs_bdata __initconst = { ...@@ -70,13 +70,6 @@ static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
static struct omap_board_config_kernel sdp_config[] __initdata = { static struct omap_board_config_kernel sdp_config[] __initdata = {
}; };
static void __init omap_sdp_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(h8mbx00u0mer0em_sdrc_params,
h8mbx00u0mer0em_sdrc_params);
}
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
static struct omap_board_mux board_mux[] __initdata = { static struct omap_board_mux board_mux[] __initdata = {
{ .reg_offset = OMAP_MUX_TERMINATOR }, { .reg_offset = OMAP_MUX_TERMINATOR },
...@@ -207,6 +200,8 @@ static void __init omap_sdp_init(void) ...@@ -207,6 +200,8 @@ static void __init omap_sdp_init(void)
omap_board_config = sdp_config; omap_board_config = sdp_config;
omap_board_config_size = ARRAY_SIZE(sdp_config); omap_board_config_size = ARRAY_SIZE(sdp_config);
zoom_peripherals_init(); zoom_peripherals_init();
omap_sdrc_init(h8mbx00u0mer0em_sdrc_params,
h8mbx00u0mer0em_sdrc_params);
zoom_display_init(); zoom_display_init();
board_smc91x_init(); board_smc91x_init();
board_flash_init(sdp_flash_partitions, chip_sel_sdp, NAND_BUSWIDTH_16); board_flash_init(sdp_flash_partitions, chip_sel_sdp, NAND_BUSWIDTH_16);
...@@ -218,7 +213,7 @@ MACHINE_START(OMAP_3630SDP, "OMAP 3630SDP board") ...@@ -218,7 +213,7 @@ MACHINE_START(OMAP_3630SDP, "OMAP 3630SDP board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap_sdp_init_early, .init_early = omap3630_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap_sdp_init, .init_machine = omap_sdp_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -129,7 +129,7 @@ static const int sdp4430_keymap[] = { ...@@ -129,7 +129,7 @@ static const int sdp4430_keymap[] = {
KEY(7, 6, KEY_OK), KEY(7, 6, KEY_OK),
KEY(7, 7, KEY_DOWN), KEY(7, 7, KEY_DOWN),
}; };
static struct omap_device_pad keypad_pads[] __initdata = { static struct omap_device_pad keypad_pads[] = {
{ .name = "kpd_col1.kpd_col1", { .name = "kpd_col1.kpd_col1",
.enable = OMAP_WAKEUP_EN | OMAP_MUX_MODE1, .enable = OMAP_WAKEUP_EN | OMAP_MUX_MODE1,
}, },
...@@ -389,12 +389,6 @@ static struct omap_board_config_kernel sdp4430_config[] __initdata = { ...@@ -389,12 +389,6 @@ static struct omap_board_config_kernel sdp4430_config[] __initdata = {
{ OMAP_TAG_LCD, &sdp4430_lcd_config }, { OMAP_TAG_LCD, &sdp4430_lcd_config },
}; };
static void __init omap_4430sdp_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
static struct omap_musb_board_data musb_board_data = { static struct omap_musb_board_data musb_board_data = {
.interface_type = MUSB_INTERFACE_UTMI, .interface_type = MUSB_INTERFACE_UTMI,
.mode = MUSB_OTG, .mode = MUSB_OTG,
...@@ -809,6 +803,7 @@ static void __init omap_4430sdp_init(void) ...@@ -809,6 +803,7 @@ static void __init omap_4430sdp_init(void)
omap_sfh7741prox_init(); omap_sfh7741prox_init();
platform_add_devices(sdp4430_devices, ARRAY_SIZE(sdp4430_devices)); platform_add_devices(sdp4430_devices, ARRAY_SIZE(sdp4430_devices));
board_serial_init(); board_serial_init();
omap_sdrc_init(NULL, NULL);
omap4_sdp4430_wifi_init(); omap4_sdp4430_wifi_init();
omap4_twl6030_hsmmc_init(mmc); omap4_twl6030_hsmmc_init(mmc);
...@@ -830,18 +825,12 @@ static void __init omap_4430sdp_init(void) ...@@ -830,18 +825,12 @@ static void __init omap_4430sdp_init(void)
omap_4430sdp_display_init(); omap_4430sdp_display_init();
} }
static void __init omap_4430sdp_map_io(void)
{
omap2_set_globals_443x();
omap44xx_map_common_io();
}
MACHINE_START(OMAP_4430SDP, "OMAP4430 4430SDP board") MACHINE_START(OMAP_4430SDP, "OMAP4430 4430SDP board")
/* Maintainer: Santosh Shilimkar - Texas Instruments Inc */ /* Maintainer: Santosh Shilimkar - Texas Instruments Inc */
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap_4430sdp_map_io, .map_io = omap4_map_io,
.init_early = omap_4430sdp_init_early, .init_early = omap4430_init_early,
.init_irq = gic_init_irq, .init_irq = gic_init_irq,
.init_machine = omap_4430sdp_init, .init_machine = omap_4430sdp_init,
.timer = &omap4_timer, .timer = &omap4_timer,
......
...@@ -47,12 +47,6 @@ static struct omap_board_mux board_mux[] __initdata = { ...@@ -47,12 +47,6 @@ static struct omap_board_mux board_mux[] __initdata = {
}; };
#endif #endif
static void __init am3517_crane_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
static struct usbhs_omap_board_data usbhs_bdata __initdata = { static struct usbhs_omap_board_data usbhs_bdata __initdata = {
.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
.port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED, .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
...@@ -70,6 +64,7 @@ static void __init am3517_crane_init(void) ...@@ -70,6 +64,7 @@ static void __init am3517_crane_init(void)
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(NULL, NULL);
omap_board_config = am3517_crane_config; omap_board_config = am3517_crane_config;
omap_board_config_size = ARRAY_SIZE(am3517_crane_config); omap_board_config_size = ARRAY_SIZE(am3517_crane_config);
...@@ -101,7 +96,7 @@ MACHINE_START(CRANEBOARD, "AM3517/05 CRANEBOARD") ...@@ -101,7 +96,7 @@ MACHINE_START(CRANEBOARD, "AM3517/05 CRANEBOARD")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = am3517_crane_init_early, .init_early = am35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = am3517_crane_init, .init_machine = am3517_crane_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -362,11 +362,6 @@ static struct omap_dss_board_info am3517_evm_dss_data = { ...@@ -362,11 +362,6 @@ static struct omap_dss_board_info am3517_evm_dss_data = {
/* /*
* Board initialization * Board initialization
*/ */
static void __init am3517_evm_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
static struct omap_musb_board_data musb_board_data = { static struct omap_musb_board_data musb_board_data = {
.interface_type = MUSB_INTERFACE_ULPI, .interface_type = MUSB_INTERFACE_ULPI,
...@@ -469,6 +464,7 @@ static void __init am3517_evm_init(void) ...@@ -469,6 +464,7 @@ static void __init am3517_evm_init(void)
am3517_evm_i2c_init(); am3517_evm_i2c_init();
omap_display_init(&am3517_evm_dss_data); omap_display_init(&am3517_evm_dss_data);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(NULL, NULL);
/* Configure GPIO for EHCI port */ /* Configure GPIO for EHCI port */
omap_mux_init_gpio(57, OMAP_PIN_OUTPUT); omap_mux_init_gpio(57, OMAP_PIN_OUTPUT);
...@@ -493,7 +489,7 @@ MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM") ...@@ -493,7 +489,7 @@ MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = am3517_evm_init_early, .init_early = am35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = am3517_evm_init, .init_machine = am3517_evm_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -273,12 +273,6 @@ static struct omap_board_config_kernel apollon_config[] __initdata = { ...@@ -273,12 +273,6 @@ static struct omap_board_config_kernel apollon_config[] __initdata = {
{ OMAP_TAG_LCD, &apollon_lcd_config }, { OMAP_TAG_LCD, &apollon_lcd_config },
}; };
static void __init omap_apollon_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
static struct gpio apollon_gpio_leds[] __initdata = { static struct gpio apollon_gpio_leds[] __initdata = {
{ LED0_GPIO13, GPIOF_OUT_INIT_LOW, "LED0" }, /* LED0 - AA10 */ { LED0_GPIO13, GPIOF_OUT_INIT_LOW, "LED0" }, /* LED0 - AA10 */
{ LED1_GPIO14, GPIOF_OUT_INIT_LOW, "LED1" }, /* LED1 - AA6 */ { LED1_GPIO14, GPIOF_OUT_INIT_LOW, "LED1" }, /* LED1 - AA6 */
...@@ -340,20 +334,15 @@ static void __init omap_apollon_init(void) ...@@ -340,20 +334,15 @@ static void __init omap_apollon_init(void)
*/ */
platform_add_devices(apollon_devices, ARRAY_SIZE(apollon_devices)); platform_add_devices(apollon_devices, ARRAY_SIZE(apollon_devices));
omap_serial_init(); omap_serial_init();
} omap_sdrc_init(NULL, NULL);
static void __init omap_apollon_map_io(void)
{
omap2_set_globals_242x();
omap242x_map_common_io();
} }
MACHINE_START(OMAP_APOLLON, "OMAP24xx Apollon") MACHINE_START(OMAP_APOLLON, "OMAP24xx Apollon")
/* Maintainer: Kyungmin Park <kyungmin.park@samsung.com> */ /* Maintainer: Kyungmin Park <kyungmin.park@samsung.com> */
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap_apollon_map_io, .map_io = omap242x_map_io,
.init_early = omap_apollon_init_early, .init_early = omap2420_init_early,
.init_irq = omap2_init_irq, .init_irq = omap2_init_irq,
.init_machine = omap_apollon_init, .init_machine = omap_apollon_init,
.timer = &omap2_timer, .timer = &omap2_timer,
......
...@@ -471,13 +471,6 @@ static void __init cm_t35_init_i2c(void) ...@@ -471,13 +471,6 @@ static void __init cm_t35_init_i2c(void)
omap3_pmic_init("tps65930", &cm_t35_twldata); omap3_pmic_init("tps65930", &cm_t35_twldata);
} }
static void __init cm_t35_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
}
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
static struct omap_board_mux board_mux[] __initdata = { static struct omap_board_mux board_mux[] __initdata = {
/* nCS and IRQ for CM-T35 ethernet */ /* nCS and IRQ for CM-T35 ethernet */
...@@ -610,6 +603,8 @@ static void __init cm_t3x_common_init(void) ...@@ -610,6 +603,8 @@ static void __init cm_t3x_common_init(void)
omap_board_config_size = ARRAY_SIZE(cm_t35_config); omap_board_config_size = ARRAY_SIZE(cm_t35_config);
omap3_mux_init(board_mux, OMAP_PACKAGE_CUS); omap3_mux_init(board_mux, OMAP_PACKAGE_CUS);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
cm_t35_init_i2c(); cm_t35_init_i2c();
omap_ads7846_init(1, CM_T35_GPIO_PENDOWN, 0, NULL); omap_ads7846_init(1, CM_T35_GPIO_PENDOWN, 0, NULL);
cm_t35_init_ethernet(); cm_t35_init_ethernet();
...@@ -637,7 +632,7 @@ MACHINE_START(CM_T35, "Compulab CM-T35") ...@@ -637,7 +632,7 @@ MACHINE_START(CM_T35, "Compulab CM-T35")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = cm_t35_init_early, .init_early = omap35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = cm_t35_init, .init_machine = cm_t35_init,
.timer = &omap3_timer, .timer = &omap3_timer,
...@@ -647,7 +642,7 @@ MACHINE_START(CM_T3730, "Compulab CM-T3730") ...@@ -647,7 +642,7 @@ MACHINE_START(CM_T3730, "Compulab CM-T3730")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = cm_t35_init_early, .init_early = omap3630_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = cm_t3730_init, .init_machine = cm_t3730_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -251,12 +251,6 @@ static inline void cm_t3517_init_nand(void) {} ...@@ -251,12 +251,6 @@ static inline void cm_t3517_init_nand(void) {}
static struct omap_board_config_kernel cm_t3517_config[] __initdata = { static struct omap_board_config_kernel cm_t3517_config[] __initdata = {
}; };
static void __init cm_t3517_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
static struct omap_board_mux board_mux[] __initdata = { static struct omap_board_mux board_mux[] __initdata = {
/* GPIO186 - Green LED */ /* GPIO186 - Green LED */
...@@ -289,6 +283,7 @@ static void __init cm_t3517_init(void) ...@@ -289,6 +283,7 @@ static void __init cm_t3517_init(void)
{ {
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(NULL, NULL);
omap_board_config = cm_t3517_config; omap_board_config = cm_t3517_config;
omap_board_config_size = ARRAY_SIZE(cm_t3517_config); omap_board_config_size = ARRAY_SIZE(cm_t3517_config);
cm_t3517_init_leds(); cm_t3517_init_leds();
...@@ -302,7 +297,7 @@ MACHINE_START(CM_T3517, "Compulab CM-T3517") ...@@ -302,7 +297,7 @@ MACHINE_START(CM_T3517, "Compulab CM-T3517")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = cm_t3517_init_early, .init_early = am35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = cm_t3517_init, .init_machine = cm_t3517_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -397,19 +397,6 @@ static struct platform_device keys_gpio = { ...@@ -397,19 +397,6 @@ static struct platform_device keys_gpio = {
}, },
}; };
static void __init devkit8000_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
}
static void __init devkit8000_init_irq(void)
{
omap3_init_irq();
}
#define OMAP_DM9000_BASE 0x2c000000 #define OMAP_DM9000_BASE 0x2c000000
static struct resource omap_dm9000_resources[] = { static struct resource omap_dm9000_resources[] = {
...@@ -645,6 +632,8 @@ static void __init devkit8000_init(void) ...@@ -645,6 +632,8 @@ static void __init devkit8000_init(void)
{ {
omap3_mux_init(board_mux, OMAP_PACKAGE_CUS); omap3_mux_init(board_mux, OMAP_PACKAGE_CUS);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
omap_dm9000_init(); omap_dm9000_init();
...@@ -670,8 +659,8 @@ MACHINE_START(DEVKIT8000, "OMAP3 Devkit8000") ...@@ -670,8 +659,8 @@ MACHINE_START(DEVKIT8000, "OMAP3 Devkit8000")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = devkit8000_init_early, .init_early = omap35xx_init_early,
.init_irq = devkit8000_init_irq, .init_irq = omap3_init_irq,
.init_machine = devkit8000_init, .init_machine = devkit8000_init,
.timer = &omap3_secure_timer, .timer = &omap3_secure_timer,
MACHINE_END MACHINE_END
...@@ -148,11 +148,6 @@ __init board_nand_init(struct mtd_partition *nand_parts, ...@@ -148,11 +148,6 @@ __init board_nand_init(struct mtd_partition *nand_parts,
board_nand_data.gpmc_irq = OMAP_GPMC_IRQ_BASE + cs; board_nand_data.gpmc_irq = OMAP_GPMC_IRQ_BASE + cs;
gpmc_nand_init(&board_nand_data); gpmc_nand_init(&board_nand_data);
} }
#else
void
__init board_nand_init(struct mtd_partition *nand_parts, u8 nr_parts, u8 cs, int nand_type)
{
}
#endif /* CONFIG_MTD_NAND_OMAP2 || CONFIG_MTD_NAND_OMAP2_MODULE */ #endif /* CONFIG_MTD_NAND_OMAP2 || CONFIG_MTD_NAND_OMAP2_MODULE */
/** /**
......
...@@ -24,7 +24,26 @@ struct flash_partitions { ...@@ -24,7 +24,26 @@ struct flash_partitions {
int nr_parts; int nr_parts;
}; };
#if defined(CONFIG_MTD_NAND_OMAP2) || \
defined(CONFIG_MTD_NAND_OMAP2_MODULE) || \
defined(CONFIG_MTD_ONENAND_OMAP2) || \
defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)
extern void board_flash_init(struct flash_partitions [], extern void board_flash_init(struct flash_partitions [],
char chip_sel[][GPMC_CS_NUM], int nand_type); char chip_sel[][GPMC_CS_NUM], int nand_type);
#else
static inline void board_flash_init(struct flash_partitions part[],
char chip_sel[][GPMC_CS_NUM], int nand_type)
{
}
#endif
#if defined(CONFIG_MTD_NAND_OMAP2) || \
defined(CONFIG_MTD_NAND_OMAP2_MODULE)
extern void board_nand_init(struct mtd_partition *nand_parts, extern void board_nand_init(struct mtd_partition *nand_parts,
u8 nr_parts, u8 cs, int nand_type); u8 nr_parts, u8 cs, int nand_type);
#else
static inline void board_nand_init(struct mtd_partition *nand_parts,
u8 nr_parts, u8 cs, int nand_type)
{
}
#endif
/* /*
* linux/arch/arm/mach-omap2/board-generic.c
*
* Copyright (C) 2005 Nokia Corporation * Copyright (C) 2005 Nokia Corporation
* Author: Paul Mundt <paul.mundt@nokia.com> * Author: Paul Mundt <paul.mundt@nokia.com>
* *
* Modified from mach-omap/omap1/board-generic.c * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
* *
* Code for generic OMAP2 board. Should work on many OMAP2 systems where * Modified from the original mach-omap/omap2/board-generic.c did by Paul
* the bootloader passes the board-specific data to the kernel. * to support the OMAP2+ device tree boards with an unique board file.
* Do not put any board specific code to this file; create a new machine
* type if you need custom low-level initializations.
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#include <linux/kernel.h> #include <linux/io.h>
#include <linux/init.h> #include <linux/of_platform.h>
#include <linux/device.h> #include <linux/irqdomain.h>
#include <linux/i2c/twl.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <mach/gpio.h>
#include <plat/usb.h>
#include <plat/board.h> #include <plat/board.h>
#include <plat/common.h> #include <plat/common.h>
#include <mach/omap4-common.h>
#include "common-board-devices.h"
/*
* XXX: Still needed to boot until the i2c & twl driver is adapted to
* device-tree
*/
static struct twl4030_platform_data sdp4430_twldata = {
.irq_base = TWL6030_IRQ_BASE,
.irq_end = TWL6030_IRQ_END,
};
static struct omap_board_config_kernel generic_config[] = { static void __init omap4_i2c_init(void)
{
omap4_pmic_init("twl6030", &sdp4430_twldata);
}
static struct twl4030_platform_data beagle_twldata = {
.irq_base = TWL4030_IRQ_BASE,
.irq_end = TWL4030_IRQ_END,
}; };
static void __init omap_generic_init_early(void) static void __init omap3_i2c_init(void)
{ {
omap2_init_common_infrastructure(); omap3_pmic_init("twl4030", &beagle_twldata);
omap2_init_common_devices(NULL, NULL);
} }
static struct of_device_id omap_dt_match_table[] __initdata = {
{ .compatible = "simple-bus", },
{ .compatible = "ti,omap-infra", },
{ }
};
static struct of_device_id intc_match[] __initdata = {
{ .compatible = "ti,omap3-intc", },
{ .compatible = "arm,cortex-a9-gic", },
{ }
};
static void __init omap_generic_init(void) static void __init omap_generic_init(void)
{ {
struct device_node *node = of_find_matching_node(NULL, intc_match);
if (node)
irq_domain_add_simple(node, 0);
omap_serial_init(); omap_serial_init();
omap_board_config = generic_config; omap_sdrc_init(NULL, NULL);
omap_board_config_size = ARRAY_SIZE(generic_config);
of_platform_populate(NULL, omap_dt_match_table, NULL, NULL);
} }
static void __init omap_generic_map_io(void) static void __init omap4_init(void)
{ {
if (cpu_is_omap242x()) { omap4_i2c_init();
omap2_set_globals_242x(); omap_generic_init();
omap242x_map_common_io();
} else if (cpu_is_omap243x()) {
omap2_set_globals_243x();
omap243x_map_common_io();
} else if (cpu_is_omap34xx()) {
omap2_set_globals_3xxx();
omap34xx_map_common_io();
} else if (cpu_is_omap44xx()) {
omap2_set_globals_443x();
omap44xx_map_common_io();
}
} }
/* XXX This machine entry name should be updated */ static void __init omap3_init(void)
MACHINE_START(OMAP_GENERIC, "Generic OMAP24xx") {
/* Maintainer: Paul Mundt <paul.mundt@nokia.com> */ omap3_i2c_init();
.boot_params = 0x80000100, omap_generic_init();
}
#if defined(CONFIG_SOC_OMAP2420)
static const char *omap242x_boards_compat[] __initdata = {
"ti,omap2420",
NULL,
};
DT_MACHINE_START(OMAP242X_DT, "Generic OMAP2420 (Flattened Device Tree)")
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap_generic_map_io, .map_io = omap242x_map_io,
.init_early = omap_generic_init_early, .init_early = omap2420_init_early,
.init_irq = omap2_init_irq, .init_irq = omap2_init_irq,
.init_machine = omap_generic_init, .init_machine = omap_generic_init,
.timer = &omap2_timer, .timer = &omap2_timer,
.dt_compat = omap242x_boards_compat,
MACHINE_END
#endif
#if defined(CONFIG_SOC_OMAP2430)
static const char *omap243x_boards_compat[] __initdata = {
"ti,omap2430",
NULL,
};
DT_MACHINE_START(OMAP243X_DT, "Generic OMAP2430 (Flattened Device Tree)")
.reserve = omap_reserve,
.map_io = omap243x_map_io,
.init_early = omap2430_init_early,
.init_irq = omap2_init_irq,
.init_machine = omap_generic_init,
.timer = &omap2_timer,
.dt_compat = omap243x_boards_compat,
MACHINE_END
#endif
#if defined(CONFIG_ARCH_OMAP3)
static const char *omap3_boards_compat[] __initdata = {
"ti,omap3",
NULL,
};
DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)")
.reserve = omap_reserve,
.map_io = omap3_map_io,
.init_early = omap3430_init_early,
.init_irq = omap3_init_irq,
.init_machine = omap3_init,
.timer = &omap3_timer,
.dt_compat = omap3_boards_compat,
MACHINE_END
#endif
#if defined(CONFIG_ARCH_OMAP4)
static const char *omap4_boards_compat[] __initdata = {
"ti,omap4",
NULL,
};
DT_MACHINE_START(OMAP4_DT, "Generic OMAP4 (Flattened Device Tree)")
.reserve = omap_reserve,
.map_io = omap4_map_io,
.init_early = omap4430_init_early,
.init_irq = gic_init_irq,
.init_machine = omap4_init,
.timer = &omap4_timer,
.dt_compat = omap4_boards_compat,
MACHINE_END MACHINE_END
#endif
...@@ -290,17 +290,6 @@ static struct omap_board_config_kernel h4_config[] __initdata = { ...@@ -290,17 +290,6 @@ static struct omap_board_config_kernel h4_config[] __initdata = {
{ OMAP_TAG_LCD, &h4_lcd_config }, { OMAP_TAG_LCD, &h4_lcd_config },
}; };
static void __init omap_h4_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
static void __init omap_h4_init_irq(void)
{
omap2_init_irq();
}
static struct at24_platform_data m24c01 = { static struct at24_platform_data m24c01 = {
.byte_len = SZ_1K / 8, .byte_len = SZ_1K / 8,
.page_size = 16, .page_size = 16,
...@@ -371,22 +360,17 @@ static void __init omap_h4_init(void) ...@@ -371,22 +360,17 @@ static void __init omap_h4_init(void)
platform_add_devices(h4_devices, ARRAY_SIZE(h4_devices)); platform_add_devices(h4_devices, ARRAY_SIZE(h4_devices));
omap2_usbfs_init(&h4_usb_config); omap2_usbfs_init(&h4_usb_config);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(NULL, NULL);
h4_init_flash(); h4_init_flash();
} }
static void __init omap_h4_map_io(void)
{
omap2_set_globals_242x();
omap242x_map_common_io();
}
MACHINE_START(OMAP_H4, "OMAP2420 H4 board") MACHINE_START(OMAP_H4, "OMAP2420 H4 board")
/* Maintainer: Paul Mundt <paul.mundt@nokia.com> */ /* Maintainer: Paul Mundt <paul.mundt@nokia.com> */
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap_h4_map_io, .map_io = omap242x_map_io,
.init_early = omap_h4_init_early, .init_early = omap2420_init_early,
.init_irq = omap_h4_init_irq, .init_irq = omap2_init_irq,
.init_machine = omap_h4_init, .init_machine = omap_h4_init,
.timer = &omap2_timer, .timer = &omap2_timer,
MACHINE_END MACHINE_END
...@@ -491,13 +491,6 @@ static struct platform_device *igep_devices[] __initdata = { ...@@ -491,13 +491,6 @@ static struct platform_device *igep_devices[] __initdata = {
&igep_vwlan_device, &igep_vwlan_device,
}; };
static void __init igep_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(m65kxxxxam_sdrc_params,
m65kxxxxam_sdrc_params);
}
static int igep2_keymap[] = { static int igep2_keymap[] = {
KEY(0, 0, KEY_LEFT), KEY(0, 0, KEY_LEFT),
KEY(0, 1, KEY_RIGHT), KEY(0, 1, KEY_RIGHT),
...@@ -650,6 +643,8 @@ static void __init igep_init(void) ...@@ -650,6 +643,8 @@ static void __init igep_init(void)
igep_i2c_init(); igep_i2c_init();
platform_add_devices(igep_devices, ARRAY_SIZE(igep_devices)); platform_add_devices(igep_devices, ARRAY_SIZE(igep_devices));
omap_serial_init(); omap_serial_init();
omap_sdrc_init(m65kxxxxam_sdrc_params,
m65kxxxxam_sdrc_params);
usb_musb_init(NULL); usb_musb_init(NULL);
igep_flash_init(); igep_flash_init();
...@@ -675,7 +670,7 @@ MACHINE_START(IGEP0020, "IGEP v2 board") ...@@ -675,7 +670,7 @@ MACHINE_START(IGEP0020, "IGEP v2 board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = igep_init_early, .init_early = omap35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = igep_init, .init_machine = igep_init,
.timer = &omap3_timer, .timer = &omap3_timer,
...@@ -685,7 +680,7 @@ MACHINE_START(IGEP0030, "IGEP OMAP3 module") ...@@ -685,7 +680,7 @@ MACHINE_START(IGEP0030, "IGEP OMAP3 module")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = igep_init_early, .init_early = omap35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = igep_init, .init_machine = igep_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -193,12 +193,6 @@ static struct omap_board_config_kernel ldp_config[] __initdata = { ...@@ -193,12 +193,6 @@ static struct omap_board_config_kernel ldp_config[] __initdata = {
{ OMAP_TAG_LCD, &ldp_lcd_config }, { OMAP_TAG_LCD, &ldp_lcd_config },
}; };
static void __init omap_ldp_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
static struct twl4030_gpio_platform_data ldp_gpio_data = { static struct twl4030_gpio_platform_data ldp_gpio_data = {
.gpio_base = OMAP_MAX_GPIO_LINES, .gpio_base = OMAP_MAX_GPIO_LINES,
.irq_base = TWL4030_GPIO_IRQ_BASE, .irq_base = TWL4030_GPIO_IRQ_BASE,
...@@ -325,6 +319,7 @@ static void __init omap_ldp_init(void) ...@@ -325,6 +319,7 @@ static void __init omap_ldp_init(void)
platform_add_devices(ldp_devices, ARRAY_SIZE(ldp_devices)); platform_add_devices(ldp_devices, ARRAY_SIZE(ldp_devices));
omap_ads7846_init(1, 54, 310, NULL); omap_ads7846_init(1, 54, 310, NULL);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(NULL, NULL);
usb_musb_init(NULL); usb_musb_init(NULL);
board_nand_init(ldp_nand_partitions, board_nand_init(ldp_nand_partitions,
ARRAY_SIZE(ldp_nand_partitions), ZOOM_NAND_CS, 0); ARRAY_SIZE(ldp_nand_partitions), ZOOM_NAND_CS, 0);
...@@ -336,7 +331,7 @@ MACHINE_START(OMAP_LDP, "OMAP LDP board") ...@@ -336,7 +331,7 @@ MACHINE_START(OMAP_LDP, "OMAP LDP board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap_ldp_init_early, .init_early = omap3430_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap_ldp_init, .init_machine = omap_ldp_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -616,18 +616,6 @@ static struct i2c_board_info n810_i2c_board_info_2[] __initdata = { ...@@ -616,18 +616,6 @@ static struct i2c_board_info n810_i2c_board_info_2[] __initdata = {
}, },
}; };
static void __init n8x0_map_io(void)
{
omap2_set_globals_242x();
omap242x_map_common_io();
}
static void __init n8x0_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
static struct omap_board_mux board_mux[] __initdata = { static struct omap_board_mux board_mux[] __initdata = {
/* I2S codec port pins for McBSP block */ /* I2S codec port pins for McBSP block */
...@@ -689,6 +677,7 @@ static void __init n8x0_init_machine(void) ...@@ -689,6 +677,7 @@ static void __init n8x0_init_machine(void)
i2c_register_board_info(2, n810_i2c_board_info_2, i2c_register_board_info(2, n810_i2c_board_info_2,
ARRAY_SIZE(n810_i2c_board_info_2)); ARRAY_SIZE(n810_i2c_board_info_2));
board_serial_init(); board_serial_init();
omap_sdrc_init(NULL, NULL);
gpmc_onenand_init(board_onenand_data); gpmc_onenand_init(board_onenand_data);
n8x0_mmc_init(); n8x0_mmc_init();
n8x0_usb_init(); n8x0_usb_init();
...@@ -697,8 +686,8 @@ static void __init n8x0_init_machine(void) ...@@ -697,8 +686,8 @@ static void __init n8x0_init_machine(void)
MACHINE_START(NOKIA_N800, "Nokia N800") MACHINE_START(NOKIA_N800, "Nokia N800")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = n8x0_map_io, .map_io = omap242x_map_io,
.init_early = n8x0_init_early, .init_early = omap2420_init_early,
.init_irq = omap2_init_irq, .init_irq = omap2_init_irq,
.init_machine = n8x0_init_machine, .init_machine = n8x0_init_machine,
.timer = &omap2_timer, .timer = &omap2_timer,
...@@ -707,8 +696,8 @@ MACHINE_END ...@@ -707,8 +696,8 @@ MACHINE_END
MACHINE_START(NOKIA_N810, "Nokia N810") MACHINE_START(NOKIA_N810, "Nokia N810")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = n8x0_map_io, .map_io = omap242x_map_io,
.init_early = n8x0_init_early, .init_early = omap2420_init_early,
.init_irq = omap2_init_irq, .init_irq = omap2_init_irq,
.init_machine = n8x0_init_machine, .init_machine = n8x0_init_machine,
.timer = &omap2_timer, .timer = &omap2_timer,
...@@ -717,8 +706,8 @@ MACHINE_END ...@@ -717,8 +706,8 @@ MACHINE_END
MACHINE_START(NOKIA_N810_WIMAX, "Nokia N810 WiMAX") MACHINE_START(NOKIA_N810_WIMAX, "Nokia N810 WiMAX")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = n8x0_map_io, .map_io = omap242x_map_io,
.init_early = n8x0_init_early, .init_early = omap2420_init_early,
.init_irq = omap2_init_irq, .init_irq = omap2_init_irq,
.init_machine = n8x0_init_machine, .init_machine = n8x0_init_machine,
.timer = &omap2_timer, .timer = &omap2_timer,
......
...@@ -444,18 +444,6 @@ static struct platform_device keys_gpio = { ...@@ -444,18 +444,6 @@ static struct platform_device keys_gpio = {
}, },
}; };
static void __init omap3_beagle_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
}
static void __init omap3_beagle_init_irq(void)
{
omap3_init_irq();
}
static struct platform_device *omap3_beagle_devices[] __initdata = { static struct platform_device *omap3_beagle_devices[] __initdata = {
&leds_gpio, &leds_gpio,
&keys_gpio, &keys_gpio,
...@@ -493,8 +481,8 @@ static void __init beagle_opp_init(void) ...@@ -493,8 +481,8 @@ static void __init beagle_opp_init(void)
if (cpu_is_omap3630()) { if (cpu_is_omap3630()) {
struct device *mpu_dev, *iva_dev; struct device *mpu_dev, *iva_dev;
mpu_dev = omap2_get_mpuss_device(); mpu_dev = omap_device_get_by_hwmod_name("mpu");
iva_dev = omap2_get_iva_device(); iva_dev = omap_device_get_by_hwmod_name("iva");
if (!mpu_dev || !iva_dev) { if (!mpu_dev || !iva_dev) {
pr_err("%s: Aiee.. no mpu/dsp devices? %p %p\n", pr_err("%s: Aiee.. no mpu/dsp devices? %p %p\n",
...@@ -534,6 +522,8 @@ static void __init omap3_beagle_init(void) ...@@ -534,6 +522,8 @@ static void __init omap3_beagle_init(void)
ARRAY_SIZE(omap3_beagle_devices)); ARRAY_SIZE(omap3_beagle_devices));
omap_display_init(&beagle_dss_data); omap_display_init(&beagle_dss_data);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
omap_mux_init_gpio(170, OMAP_PIN_INPUT); omap_mux_init_gpio(170, OMAP_PIN_INPUT);
/* REVISIT leave DVI powered down until it's needed ... */ /* REVISIT leave DVI powered down until it's needed ... */
...@@ -560,8 +550,8 @@ MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board") ...@@ -560,8 +550,8 @@ MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap3_beagle_init_early, .init_early = omap3_init_early,
.init_irq = omap3_beagle_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap3_beagle_init, .init_machine = omap3_beagle_init,
.timer = &omap3_secure_timer, .timer = &omap3_secure_timer,
MACHINE_END MACHINE_END
...@@ -520,12 +520,6 @@ static int __init omap3_evm_i2c_init(void) ...@@ -520,12 +520,6 @@ static int __init omap3_evm_i2c_init(void)
static struct omap_board_config_kernel omap3_evm_config[] __initdata = { static struct omap_board_config_kernel omap3_evm_config[] __initdata = {
}; };
static void __init omap3_evm_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params, NULL);
}
static struct usbhs_omap_board_data usbhs_bdata __initdata = { static struct usbhs_omap_board_data usbhs_bdata __initdata = {
.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED, .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
...@@ -640,6 +634,7 @@ static void __init omap3_evm_init(void) ...@@ -640,6 +634,7 @@ static void __init omap3_evm_init(void)
omap_display_init(&omap3_evm_dss_data); omap_display_init(&omap3_evm_dss_data);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(mt46h32m32lf6_sdrc_params, NULL);
/* OMAP3EVM uses ISP1504 phy and so register nop transceiver */ /* OMAP3EVM uses ISP1504 phy and so register nop transceiver */
usb_nop_xceiv_register(); usb_nop_xceiv_register();
...@@ -684,7 +679,7 @@ MACHINE_START(OMAP3EVM, "OMAP3 EVM") ...@@ -684,7 +679,7 @@ MACHINE_START(OMAP3EVM, "OMAP3 EVM")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap3_evm_init_early, .init_early = omap35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap3_evm_init, .init_machine = omap3_evm_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -182,12 +182,6 @@ static inline void __init board_smsc911x_init(void) ...@@ -182,12 +182,6 @@ static inline void __init board_smsc911x_init(void)
gpmc_smsc911x_init(&board_smsc911x_data); gpmc_smsc911x_init(&board_smsc911x_data);
} }
static void __init omap3logic_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
static struct omap_board_mux board_mux[] __initdata = { static struct omap_board_mux board_mux[] __initdata = {
{ .reg_offset = OMAP_MUX_TERMINATOR }, { .reg_offset = OMAP_MUX_TERMINATOR },
...@@ -200,6 +194,7 @@ static void __init omap3logic_init(void) ...@@ -200,6 +194,7 @@ static void __init omap3logic_init(void)
omap3torpedo_fix_pbias_voltage(); omap3torpedo_fix_pbias_voltage();
omap3logic_i2c_init(); omap3logic_i2c_init();
omap_serial_init(); omap_serial_init();
omap_sdrc_init(NULL, NULL);
board_mmc_init(); board_mmc_init();
board_smsc911x_init(); board_smsc911x_init();
...@@ -211,7 +206,7 @@ static void __init omap3logic_init(void) ...@@ -211,7 +206,7 @@ static void __init omap3logic_init(void)
MACHINE_START(OMAP3_TORPEDO, "Logic OMAP3 Torpedo board") MACHINE_START(OMAP3_TORPEDO, "Logic OMAP3 Torpedo board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap3logic_init_early, .init_early = omap35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap3logic_init, .init_machine = omap3logic_init,
.timer = &omap3_timer, .timer = &omap3_timer,
...@@ -220,7 +215,7 @@ MACHINE_END ...@@ -220,7 +215,7 @@ MACHINE_END
MACHINE_START(OMAP3530_LV_SOM, "OMAP Logic 3530 LV SOM board") MACHINE_START(OMAP3530_LV_SOM, "OMAP Logic 3530 LV SOM board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap3logic_init_early, .init_early = omap35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap3logic_init, .init_machine = omap3logic_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -525,13 +525,6 @@ static struct spi_board_info omap3pandora_spi_board_info[] __initdata = { ...@@ -525,13 +525,6 @@ static struct spi_board_info omap3pandora_spi_board_info[] __initdata = {
} }
}; };
static void __init omap3pandora_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
}
static void __init pandora_wl1251_init(void) static void __init pandora_wl1251_init(void)
{ {
struct wl12xx_platform_data pandora_wl1251_pdata; struct wl12xx_platform_data pandora_wl1251_pdata;
...@@ -593,6 +586,8 @@ static void __init omap3pandora_init(void) ...@@ -593,6 +586,8 @@ static void __init omap3pandora_init(void)
ARRAY_SIZE(omap3pandora_devices)); ARRAY_SIZE(omap3pandora_devices));
omap_display_init(&pandora_dss_data); omap_display_init(&pandora_dss_data);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
spi_register_board_info(omap3pandora_spi_board_info, spi_register_board_info(omap3pandora_spi_board_info,
ARRAY_SIZE(omap3pandora_spi_board_info)); ARRAY_SIZE(omap3pandora_spi_board_info));
omap_ads7846_init(1, OMAP3_PANDORA_TS_GPIO, 0, NULL); omap_ads7846_init(1, OMAP3_PANDORA_TS_GPIO, 0, NULL);
...@@ -609,7 +604,7 @@ MACHINE_START(OMAP3_PANDORA, "Pandora Handheld Console") ...@@ -609,7 +604,7 @@ MACHINE_START(OMAP3_PANDORA, "Pandora Handheld Console")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap3pandora_init_early, .init_early = omap35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap3pandora_init, .init_machine = omap3pandora_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -428,17 +428,6 @@ static int __init omap3_stalker_i2c_init(void) ...@@ -428,17 +428,6 @@ static int __init omap3_stalker_i2c_init(void)
static struct omap_board_config_kernel omap3_stalker_config[] __initdata = { static struct omap_board_config_kernel omap3_stalker_config[] __initdata = {
}; };
static void __init omap3_stalker_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params, NULL);
}
static void __init omap3_stalker_init_irq(void)
{
omap3_init_irq();
}
static struct platform_device *omap3_stalker_devices[] __initdata = { static struct platform_device *omap3_stalker_devices[] __initdata = {
&keys_gpio, &keys_gpio,
}; };
...@@ -478,6 +467,7 @@ static void __init omap3_stalker_init(void) ...@@ -478,6 +467,7 @@ static void __init omap3_stalker_init(void)
omap_display_init(&omap3_stalker_dss_data); omap_display_init(&omap3_stalker_dss_data);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(mt46h32m32lf6_sdrc_params, NULL);
usb_musb_init(NULL); usb_musb_init(NULL);
usbhs_init(&usbhs_bdata); usbhs_init(&usbhs_bdata);
omap_ads7846_init(1, OMAP3_STALKER_TS_GPIO, 310, NULL); omap_ads7846_init(1, OMAP3_STALKER_TS_GPIO, 310, NULL);
...@@ -496,8 +486,8 @@ MACHINE_START(SBC3530, "OMAP3 STALKER") ...@@ -496,8 +486,8 @@ MACHINE_START(SBC3530, "OMAP3 STALKER")
/* Maintainer: Jason Lam -lzg@ema-tech.com */ /* Maintainer: Jason Lam -lzg@ema-tech.com */
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap3_stalker_init_early, .init_early = omap35xx_init_early,
.init_irq = omap3_stalker_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap3_stalker_init, .init_machine = omap3_stalker_init,
.timer = &omap3_secure_timer, .timer = &omap3_secure_timer,
MACHINE_END MACHINE_END
...@@ -326,18 +326,6 @@ static struct omap_board_mux board_mux[] __initdata = { ...@@ -326,18 +326,6 @@ static struct omap_board_mux board_mux[] __initdata = {
}; };
#endif #endif
static void __init omap3_touchbook_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
}
static void __init omap3_touchbook_init_irq(void)
{
omap3_init_irq();
}
static struct platform_device *omap3_touchbook_devices[] __initdata = { static struct platform_device *omap3_touchbook_devices[] __initdata = {
&omap3_touchbook_lcd_device, &omap3_touchbook_lcd_device,
&leds_gpio, &leds_gpio,
...@@ -385,6 +373,8 @@ static void __init omap3_touchbook_init(void) ...@@ -385,6 +373,8 @@ static void __init omap3_touchbook_init(void)
platform_add_devices(omap3_touchbook_devices, platform_add_devices(omap3_touchbook_devices,
ARRAY_SIZE(omap3_touchbook_devices)); ARRAY_SIZE(omap3_touchbook_devices));
omap_serial_init(); omap_serial_init();
omap_sdrc_init(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
omap_mux_init_gpio(170, OMAP_PIN_INPUT); omap_mux_init_gpio(170, OMAP_PIN_INPUT);
/* REVISIT leave DVI powered down until it's needed ... */ /* REVISIT leave DVI powered down until it's needed ... */
...@@ -407,8 +397,8 @@ MACHINE_START(TOUCHBOOK, "OMAP3 touchbook Board") ...@@ -407,8 +397,8 @@ MACHINE_START(TOUCHBOOK, "OMAP3 touchbook Board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap3_touchbook_init_early, .init_early = omap3430_init_early,
.init_irq = omap3_touchbook_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap3_touchbook_init, .init_machine = omap3_touchbook_init,
.timer = &omap3_secure_timer, .timer = &omap3_secure_timer,
MACHINE_END MACHINE_END
...@@ -95,12 +95,6 @@ static struct platform_device *panda_devices[] __initdata = { ...@@ -95,12 +95,6 @@ static struct platform_device *panda_devices[] __initdata = {
&wl1271_device, &wl1271_device,
}; };
static void __init omap4_panda_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
static const struct usbhs_omap_board_data usbhs_bdata __initconst = { static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
.port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
.port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED, .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
...@@ -569,24 +563,19 @@ static void __init omap4_panda_init(void) ...@@ -569,24 +563,19 @@ static void __init omap4_panda_init(void)
platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices)); platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices));
platform_device_register(&omap_vwlan_device); platform_device_register(&omap_vwlan_device);
board_serial_init(); board_serial_init();
omap_sdrc_init(NULL, NULL);
omap4_twl6030_hsmmc_init(mmc); omap4_twl6030_hsmmc_init(mmc);
omap4_ehci_init(); omap4_ehci_init();
usb_musb_init(&musb_board_data); usb_musb_init(&musb_board_data);
omap4_panda_display_init(); omap4_panda_display_init();
} }
static void __init omap4_panda_map_io(void)
{
omap2_set_globals_443x();
omap44xx_map_common_io();
}
MACHINE_START(OMAP4_PANDA, "OMAP4 Panda board") MACHINE_START(OMAP4_PANDA, "OMAP4 Panda board")
/* Maintainer: David Anders - Texas Instruments Inc */ /* Maintainer: David Anders - Texas Instruments Inc */
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap4_panda_map_io, .map_io = omap4_map_io,
.init_early = omap4_panda_init_early, .init_early = omap4430_init_early,
.init_irq = gic_init_irq, .init_irq = gic_init_irq,
.init_machine = omap4_panda_init, .init_machine = omap4_panda_init,
.timer = &omap4_timer, .timer = &omap4_timer,
......
...@@ -478,13 +478,6 @@ static int __init overo_spi_init(void) ...@@ -478,13 +478,6 @@ static int __init overo_spi_init(void)
return 0; return 0;
} }
static void __init overo_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
}
static const struct usbhs_omap_board_data usbhs_bdata __initconst = { static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED, .port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,
.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, .port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
...@@ -514,6 +507,8 @@ static void __init overo_init(void) ...@@ -514,6 +507,8 @@ static void __init overo_init(void)
overo_i2c_init(); overo_i2c_init();
omap_display_init(&overo_dss_data); omap_display_init(&overo_dss_data);
omap_serial_init(); omap_serial_init();
omap_sdrc_init(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
omap_nand_flash_init(0, overo_nand_partitions, omap_nand_flash_init(0, overo_nand_partitions,
ARRAY_SIZE(overo_nand_partitions)); ARRAY_SIZE(overo_nand_partitions));
usb_musb_init(NULL); usb_musb_init(NULL);
...@@ -564,7 +559,7 @@ MACHINE_START(OVERO, "Gumstix Overo") ...@@ -564,7 +559,7 @@ MACHINE_START(OVERO, "Gumstix Overo")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = overo_init_early, .init_early = omap35xx_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = overo_init, .init_machine = overo_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -123,15 +123,6 @@ static void __init rm680_peripherals_init(void) ...@@ -123,15 +123,6 @@ static void __init rm680_peripherals_init(void)
omap2_hsmmc_init(mmc); omap2_hsmmc_init(mmc);
} }
static void __init rm680_init_early(void)
{
struct omap_sdrc_params *sdrc_params;
omap2_init_common_infrastructure();
sdrc_params = nokia_get_sdram_timings();
omap2_init_common_devices(sdrc_params, sdrc_params);
}
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
static struct omap_board_mux board_mux[] __initdata = { static struct omap_board_mux board_mux[] __initdata = {
{ .reg_offset = OMAP_MUX_TERMINATOR }, { .reg_offset = OMAP_MUX_TERMINATOR },
...@@ -140,23 +131,23 @@ static struct omap_board_mux board_mux[] __initdata = { ...@@ -140,23 +131,23 @@ static struct omap_board_mux board_mux[] __initdata = {
static void __init rm680_init(void) static void __init rm680_init(void)
{ {
struct omap_sdrc_params *sdrc_params;
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap_serial_init(); omap_serial_init();
sdrc_params = nokia_get_sdram_timings();
omap_sdrc_init(sdrc_params, sdrc_params);
usb_musb_init(NULL); usb_musb_init(NULL);
rm680_peripherals_init(); rm680_peripherals_init();
} }
static void __init rm680_map_io(void)
{
omap2_set_globals_3xxx();
omap34xx_map_common_io();
}
MACHINE_START(NOKIA_RM680, "Nokia RM-680 board") MACHINE_START(NOKIA_RM680, "Nokia RM-680 board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = rm680_map_io, .map_io = omap3_map_io,
.init_early = rm680_init_early, .init_early = omap3630_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = rm680_init, .init_machine = rm680_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -102,15 +102,6 @@ static struct omap_board_config_kernel rx51_config[] = { ...@@ -102,15 +102,6 @@ static struct omap_board_config_kernel rx51_config[] = {
{ OMAP_TAG_LCD, &rx51_lcd_config }, { OMAP_TAG_LCD, &rx51_lcd_config },
}; };
static void __init rx51_init_early(void)
{
struct omap_sdrc_params *sdrc_params;
omap2_init_common_infrastructure();
sdrc_params = nokia_get_sdram_timings();
omap2_init_common_devices(sdrc_params, sdrc_params);
}
extern void __init rx51_peripherals_init(void); extern void __init rx51_peripherals_init(void);
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
...@@ -127,11 +118,17 @@ static struct omap_musb_board_data musb_board_data = { ...@@ -127,11 +118,17 @@ static struct omap_musb_board_data musb_board_data = {
static void __init rx51_init(void) static void __init rx51_init(void)
{ {
struct omap_sdrc_params *sdrc_params;
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap_board_config = rx51_config; omap_board_config = rx51_config;
omap_board_config_size = ARRAY_SIZE(rx51_config); omap_board_config_size = ARRAY_SIZE(rx51_config);
omap3_pm_init_cpuidle(rx51_cpuidle_params); omap3_pm_init_cpuidle(rx51_cpuidle_params);
omap_serial_init(); omap_serial_init();
sdrc_params = nokia_get_sdram_timings();
omap_sdrc_init(sdrc_params, sdrc_params);
usb_musb_init(&musb_board_data); usb_musb_init(&musb_board_data);
rx51_peripherals_init(); rx51_peripherals_init();
...@@ -142,12 +139,6 @@ static void __init rx51_init(void) ...@@ -142,12 +139,6 @@ static void __init rx51_init(void)
platform_device_register(&leds_gpio); platform_device_register(&leds_gpio);
} }
static void __init rx51_map_io(void)
{
omap2_set_globals_3xxx();
omap34xx_map_common_io();
}
static void __init rx51_reserve(void) static void __init rx51_reserve(void)
{ {
rx51_video_mem_init(); rx51_video_mem_init();
...@@ -158,8 +149,8 @@ MACHINE_START(NOKIA_RX51, "Nokia RX-51 board") ...@@ -158,8 +149,8 @@ MACHINE_START(NOKIA_RX51, "Nokia RX-51 board")
/* Maintainer: Lauri Leukkunen <lauri.leukkunen@nokia.com> */ /* Maintainer: Lauri Leukkunen <lauri.leukkunen@nokia.com> */
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = rx51_reserve, .reserve = rx51_reserve,
.map_io = rx51_map_io, .map_io = omap3_map_io,
.init_early = rx51_init_early, .init_early = omap3430_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = rx51_init, .init_machine = rx51_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -27,22 +27,16 @@ ...@@ -27,22 +27,16 @@
static struct omap_board_config_kernel ti8168_evm_config[] __initdata = { static struct omap_board_config_kernel ti8168_evm_config[] __initdata = {
}; };
static void __init ti8168_init_early(void)
{
omap2_init_common_infrastructure();
omap2_init_common_devices(NULL, NULL);
}
static void __init ti8168_evm_init(void) static void __init ti8168_evm_init(void)
{ {
omap_serial_init(); omap_serial_init();
omap_sdrc_init(NULL, NULL);
omap_board_config = ti8168_evm_config; omap_board_config = ti8168_evm_config;
omap_board_config_size = ARRAY_SIZE(ti8168_evm_config); omap_board_config_size = ARRAY_SIZE(ti8168_evm_config);
} }
static void __init ti8168_evm_map_io(void) static void __init ti8168_evm_map_io(void)
{ {
omap2_set_globals_ti816x();
omapti816x_map_common_io(); omapti816x_map_common_io();
} }
...@@ -50,7 +44,7 @@ MACHINE_START(TI8168EVM, "ti8168evm") ...@@ -50,7 +44,7 @@ MACHINE_START(TI8168EVM, "ti8168evm")
/* Maintainer: Texas Instruments */ /* Maintainer: Texas Instruments */
.boot_params = 0x80000100, .boot_params = 0x80000100,
.map_io = ti8168_evm_map_io, .map_io = ti8168_evm_map_io,
.init_early = ti8168_init_early, .init_early = ti816x_init_early,
.init_irq = ti816x_init_irq, .init_irq = ti816x_init_irq,
.timer = &omap3_timer, .timer = &omap3_timer,
.init_machine = ti8168_evm_init, .init_machine = ti8168_evm_init,
......
...@@ -34,17 +34,6 @@ ...@@ -34,17 +34,6 @@
#define ZOOM3_EHCI_RESET_GPIO 64 #define ZOOM3_EHCI_RESET_GPIO 64
static void __init omap_zoom_init_early(void)
{
omap2_init_common_infrastructure();
if (machine_is_omap_zoom2())
omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
else if (machine_is_omap_zoom3())
omap2_init_common_devices(h8mbx00u0mer0em_sdrc_params,
h8mbx00u0mer0em_sdrc_params);
}
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
static struct omap_board_mux board_mux[] __initdata = { static struct omap_board_mux board_mux[] __initdata = {
/* WLAN IRQ - GPIO 162 */ /* WLAN IRQ - GPIO 162 */
...@@ -129,6 +118,14 @@ static void __init omap_zoom_init(void) ...@@ -129,6 +118,14 @@ static void __init omap_zoom_init(void)
ZOOM_NAND_CS, NAND_BUSWIDTH_16); ZOOM_NAND_CS, NAND_BUSWIDTH_16);
zoom_debugboard_init(); zoom_debugboard_init();
zoom_peripherals_init(); zoom_peripherals_init();
if (machine_is_omap_zoom2())
omap_sdrc_init(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
else if (machine_is_omap_zoom3())
omap_sdrc_init(h8mbx00u0mer0em_sdrc_params,
h8mbx00u0mer0em_sdrc_params);
zoom_display_init(); zoom_display_init();
} }
...@@ -136,7 +133,7 @@ MACHINE_START(OMAP_ZOOM2, "OMAP Zoom2 board") ...@@ -136,7 +133,7 @@ MACHINE_START(OMAP_ZOOM2, "OMAP Zoom2 board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap_zoom_init_early, .init_early = omap3430_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap_zoom_init, .init_machine = omap_zoom_init,
.timer = &omap3_timer, .timer = &omap3_timer,
...@@ -146,7 +143,7 @@ MACHINE_START(OMAP_ZOOM3, "OMAP Zoom3 board") ...@@ -146,7 +143,7 @@ MACHINE_START(OMAP_ZOOM3, "OMAP Zoom3 board")
.boot_params = 0x80000100, .boot_params = 0x80000100,
.reserve = omap_reserve, .reserve = omap_reserve,
.map_io = omap3_map_io, .map_io = omap3_map_io,
.init_early = omap_zoom_init_early, .init_early = omap3630_init_early,
.init_irq = omap3_init_irq, .init_irq = omap3_init_irq,
.init_machine = omap_zoom_init, .init_machine = omap_zoom_init,
.timer = &omap3_timer, .timer = &omap3_timer,
......
...@@ -1898,6 +1898,54 @@ static struct omap_clk omap2420_clks[] = { ...@@ -1898,6 +1898,54 @@ static struct omap_clk omap2420_clks[] = {
CLK(NULL, "pka_ick", &pka_ick, CK_242X), CLK(NULL, "pka_ick", &pka_ick, CK_242X),
CLK(NULL, "usb_fck", &usb_fck, CK_242X), CLK(NULL, "usb_fck", &usb_fck, CK_242X),
CLK("musb-hdrc", "fck", &osc_ck, CK_242X), CLK("musb-hdrc", "fck", &osc_ck, CK_242X),
CLK("omap_timer.1", "fck", &gpt1_fck, CK_242X),
CLK("omap_timer.2", "fck", &gpt2_fck, CK_242X),
CLK("omap_timer.3", "fck", &gpt3_fck, CK_242X),
CLK("omap_timer.4", "fck", &gpt4_fck, CK_242X),
CLK("omap_timer.5", "fck", &gpt5_fck, CK_242X),
CLK("omap_timer.6", "fck", &gpt6_fck, CK_242X),
CLK("omap_timer.7", "fck", &gpt7_fck, CK_242X),
CLK("omap_timer.8", "fck", &gpt8_fck, CK_242X),
CLK("omap_timer.9", "fck", &gpt9_fck, CK_242X),
CLK("omap_timer.10", "fck", &gpt10_fck, CK_242X),
CLK("omap_timer.11", "fck", &gpt11_fck, CK_242X),
CLK("omap_timer.12", "fck", &gpt12_fck, CK_242X),
CLK("omap_timer.1", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.2", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.3", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.4", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.5", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.6", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.7", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.8", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.9", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.10", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.11", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.12", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.1", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.2", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.3", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.4", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.5", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.6", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.7", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.8", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.9", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.10", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.11", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.12", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.1", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.2", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.3", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.4", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.5", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.6", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.7", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.8", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.9", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.10", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.11", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.12", "alt_ck", &alt_ck, CK_243X),
}; };
/* /*
......
...@@ -1998,6 +1998,54 @@ static struct omap_clk omap2430_clks[] = { ...@@ -1998,6 +1998,54 @@ static struct omap_clk omap2430_clks[] = {
CLK(NULL, "mdm_intc_ick", &mdm_intc_ick, CK_243X), CLK(NULL, "mdm_intc_ick", &mdm_intc_ick, CK_243X),
CLK("omap_hsmmc.0", "mmchsdb_fck", &mmchsdb1_fck, CK_243X), CLK("omap_hsmmc.0", "mmchsdb_fck", &mmchsdb1_fck, CK_243X),
CLK("omap_hsmmc.1", "mmchsdb_fck", &mmchsdb2_fck, CK_243X), CLK("omap_hsmmc.1", "mmchsdb_fck", &mmchsdb2_fck, CK_243X),
CLK("omap_timer.1", "fck", &gpt1_fck, CK_243X),
CLK("omap_timer.2", "fck", &gpt2_fck, CK_243X),
CLK("omap_timer.3", "fck", &gpt3_fck, CK_243X),
CLK("omap_timer.4", "fck", &gpt4_fck, CK_243X),
CLK("omap_timer.5", "fck", &gpt5_fck, CK_243X),
CLK("omap_timer.6", "fck", &gpt6_fck, CK_243X),
CLK("omap_timer.7", "fck", &gpt7_fck, CK_243X),
CLK("omap_timer.8", "fck", &gpt8_fck, CK_243X),
CLK("omap_timer.9", "fck", &gpt9_fck, CK_243X),
CLK("omap_timer.10", "fck", &gpt10_fck, CK_243X),
CLK("omap_timer.11", "fck", &gpt11_fck, CK_243X),
CLK("omap_timer.12", "fck", &gpt12_fck, CK_243X),
CLK("omap_timer.1", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.2", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.3", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.4", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.5", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.6", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.7", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.8", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.9", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.10", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.11", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.12", "32k_ck", &func_32k_ck, CK_243X),
CLK("omap_timer.1", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.2", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.3", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.4", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.5", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.6", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.7", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.8", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.9", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.10", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.11", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.12", "sys_ck", &sys_ck, CK_243X),
CLK("omap_timer.1", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.2", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.3", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.4", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.5", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.6", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.7", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.8", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.9", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.10", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.11", "alt_ck", &alt_ck, CK_243X),
CLK("omap_timer.12", "alt_ck", &alt_ck, CK_243X),
}; };
/* /*
......
...@@ -3464,6 +3464,42 @@ static struct omap_clk omap3xxx_clks[] = { ...@@ -3464,6 +3464,42 @@ static struct omap_clk omap3xxx_clks[] = {
CLK("musb-am35x", "fck", &hsotgusb_fck_am35xx, CK_AM35XX), CLK("musb-am35x", "fck", &hsotgusb_fck_am35xx, CK_AM35XX),
CLK(NULL, "hecc_ck", &hecc_ck, CK_AM35XX), CLK(NULL, "hecc_ck", &hecc_ck, CK_AM35XX),
CLK(NULL, "uart4_ick", &uart4_ick_am35xx, CK_AM35XX), CLK(NULL, "uart4_ick", &uart4_ick_am35xx, CK_AM35XX),
CLK("omap_timer.1", "fck", &gpt1_fck, CK_3XXX),
CLK("omap_timer.2", "fck", &gpt2_fck, CK_3XXX),
CLK("omap_timer.3", "fck", &gpt3_fck, CK_3XXX),
CLK("omap_timer.4", "fck", &gpt4_fck, CK_3XXX),
CLK("omap_timer.5", "fck", &gpt5_fck, CK_3XXX),
CLK("omap_timer.6", "fck", &gpt6_fck, CK_3XXX),
CLK("omap_timer.7", "fck", &gpt7_fck, CK_3XXX),
CLK("omap_timer.8", "fck", &gpt8_fck, CK_3XXX),
CLK("omap_timer.9", "fck", &gpt9_fck, CK_3XXX),
CLK("omap_timer.10", "fck", &gpt10_fck, CK_3XXX),
CLK("omap_timer.11", "fck", &gpt11_fck, CK_3XXX),
CLK("omap_timer.12", "fck", &gpt12_fck, CK_3XXX),
CLK("omap_timer.1", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.2", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.3", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.4", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.5", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.6", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.7", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.8", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.9", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.10", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.11", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.12", "32k_ck", &omap_32k_fck, CK_3XXX),
CLK("omap_timer.1", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.2", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.3", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.4", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.5", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.6", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.7", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.8", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.9", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.10", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.11", "sys_ck", &sys_ck, CK_3XXX),
CLK("omap_timer.12", "sys_ck", &sys_ck, CK_3XXX),
}; };
...@@ -3472,7 +3508,16 @@ int __init omap3xxx_clk_init(void) ...@@ -3472,7 +3508,16 @@ int __init omap3xxx_clk_init(void)
struct omap_clk *c; struct omap_clk *c;
u32 cpu_clkflg = 0; u32 cpu_clkflg = 0;
if (cpu_is_omap3517()) { /*
* 3505 must be tested before 3517, since 3517 returns true
* for both AM3517 chips and AM3517 family chips, which
* includes 3505. Unfortunately there's no obvious family
* test for 3517/3505 :-(
*/
if (cpu_is_omap3505()) {
cpu_mask = RATE_IN_34XX;
cpu_clkflg = CK_3505;
} else if (cpu_is_omap3517()) {
cpu_mask = RATE_IN_34XX; cpu_mask = RATE_IN_34XX;
cpu_clkflg = CK_3517; cpu_clkflg = CK_3517;
} else if (cpu_is_omap3505()) { } else if (cpu_is_omap3505()) {
......
...@@ -3363,6 +3363,39 @@ static struct omap_clk omap44xx_clks[] = { ...@@ -3363,6 +3363,39 @@ static struct omap_clk omap44xx_clks[] = {
CLK("usbhs-omap.0", "usbhost_ick", &dummy_ck, CK_443X), CLK("usbhs-omap.0", "usbhost_ick", &dummy_ck, CK_443X),
CLK("usbhs-omap.0", "usbtll_fck", &dummy_ck, CK_443X), CLK("usbhs-omap.0", "usbtll_fck", &dummy_ck, CK_443X),
CLK("omap_wdt", "ick", &dummy_ck, CK_443X), CLK("omap_wdt", "ick", &dummy_ck, CK_443X),
CLK("omap_timer.1", "fck", &timer1_fck, CK_443X),
CLK("omap_timer.2", "fck", &timer2_fck, CK_443X),
CLK("omap_timer.3", "fck", &timer3_fck, CK_443X),
CLK("omap_timer.4", "fck", &timer4_fck, CK_443X),
CLK("omap_timer.5", "fck", &timer5_fck, CK_443X),
CLK("omap_timer.6", "fck", &timer6_fck, CK_443X),
CLK("omap_timer.7", "fck", &timer7_fck, CK_443X),
CLK("omap_timer.8", "fck", &timer8_fck, CK_443X),
CLK("omap_timer.9", "fck", &timer9_fck, CK_443X),
CLK("omap_timer.10", "fck", &timer10_fck, CK_443X),
CLK("omap_timer.11", "fck", &timer11_fck, CK_443X),
CLK("omap_timer.1", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.2", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.3", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.4", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.5", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.6", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.7", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.8", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.9", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.10", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.11", "32k_ck", &sys_32k_ck, CK_443X),
CLK("omap_timer.1", "sys_ck", &sys_clkin_ck, CK_443X),
CLK("omap_timer.2", "sys_ck", &sys_clkin_ck, CK_443X),
CLK("omap_timer.3", "sys_ck", &sys_clkin_ck, CK_443X),
CLK("omap_timer.4", "sys_ck", &sys_clkin_ck, CK_443X),
CLK("omap_timer.9", "sys_ck", &sys_clkin_ck, CK_443X),
CLK("omap_timer.10", "sys_ck", &sys_clkin_ck, CK_443X),
CLK("omap_timer.11", "sys_ck", &sys_clkin_ck, CK_443X),
CLK("omap_timer.5", "sys_ck", &syc_clk_div_ck, CK_443X),
CLK("omap_timer.6", "sys_ck", &syc_clk_div_ck, CK_443X),
CLK("omap_timer.7", "sys_ck", &syc_clk_div_ck, CK_443X),
CLK("omap_timer.8", "sys_ck", &syc_clk_div_ck, CK_443X),
}; };
int __init omap4xxx_clk_init(void) int __init omap4xxx_clk_init(void)
......
...@@ -73,9 +73,6 @@ static int _clkdm_register(struct clockdomain *clkdm) ...@@ -73,9 +73,6 @@ static int _clkdm_register(struct clockdomain *clkdm)
if (!clkdm || !clkdm->name) if (!clkdm || !clkdm->name)
return -EINVAL; return -EINVAL;
if (!omap_chip_is(clkdm->omap_chip))
return -EINVAL;
pwrdm = pwrdm_lookup(clkdm->pwrdm.name); pwrdm = pwrdm_lookup(clkdm->pwrdm.name);
if (!pwrdm) { if (!pwrdm) {
pr_err("clockdomain: %s: powerdomain %s does not exist\n", pr_err("clockdomain: %s: powerdomain %s does not exist\n",
...@@ -105,13 +102,10 @@ static struct clkdm_dep *_clkdm_deps_lookup(struct clockdomain *clkdm, ...@@ -105,13 +102,10 @@ static struct clkdm_dep *_clkdm_deps_lookup(struct clockdomain *clkdm,
{ {
struct clkdm_dep *cd; struct clkdm_dep *cd;
if (!clkdm || !deps || !omap_chip_is(clkdm->omap_chip)) if (!clkdm || !deps)
return ERR_PTR(-EINVAL); return ERR_PTR(-EINVAL);
for (cd = deps; cd->clkdm_name; cd++) { for (cd = deps; cd->clkdm_name; cd++) {
if (!omap_chip_is(cd->omap_chip))
continue;
if (!cd->clkdm && cd->clkdm_name) if (!cd->clkdm && cd->clkdm_name)
cd->clkdm = _clkdm_lookup(cd->clkdm_name); cd->clkdm = _clkdm_lookup(cd->clkdm_name);
...@@ -148,9 +142,6 @@ static void _autodep_lookup(struct clkdm_autodep *autodep) ...@@ -148,9 +142,6 @@ static void _autodep_lookup(struct clkdm_autodep *autodep)
if (!autodep) if (!autodep)
return; return;
if (!omap_chip_is(autodep->omap_chip))
return;
clkdm = clkdm_lookup(autodep->clkdm.name); clkdm = clkdm_lookup(autodep->clkdm.name);
if (!clkdm) { if (!clkdm) {
pr_err("clockdomain: autodeps: clockdomain %s does not exist\n", pr_err("clockdomain: autodeps: clockdomain %s does not exist\n",
...@@ -182,9 +173,6 @@ void _clkdm_add_autodeps(struct clockdomain *clkdm) ...@@ -182,9 +173,6 @@ void _clkdm_add_autodeps(struct clockdomain *clkdm)
if (IS_ERR(autodep->clkdm.ptr)) if (IS_ERR(autodep->clkdm.ptr))
continue; continue;
if (!omap_chip_is(autodep->omap_chip))
continue;
pr_debug("clockdomain: adding %s sleepdep/wkdep for " pr_debug("clockdomain: adding %s sleepdep/wkdep for "
"clkdm %s\n", autodep->clkdm.ptr->name, "clkdm %s\n", autodep->clkdm.ptr->name,
clkdm->name); clkdm->name);
...@@ -216,9 +204,6 @@ void _clkdm_del_autodeps(struct clockdomain *clkdm) ...@@ -216,9 +204,6 @@ void _clkdm_del_autodeps(struct clockdomain *clkdm)
if (IS_ERR(autodep->clkdm.ptr)) if (IS_ERR(autodep->clkdm.ptr))
continue; continue;
if (!omap_chip_is(autodep->omap_chip))
continue;
pr_debug("clockdomain: removing %s sleepdep/wkdep for " pr_debug("clockdomain: removing %s sleepdep/wkdep for "
"clkdm %s\n", autodep->clkdm.ptr->name, "clkdm %s\n", autodep->clkdm.ptr->name,
clkdm->name); clkdm->name);
...@@ -243,8 +228,6 @@ static void _resolve_clkdm_deps(struct clockdomain *clkdm, ...@@ -243,8 +228,6 @@ static void _resolve_clkdm_deps(struct clockdomain *clkdm,
struct clkdm_dep *cd; struct clkdm_dep *cd;
for (cd = clkdm_deps; cd && cd->clkdm_name; cd++) { for (cd = clkdm_deps; cd && cd->clkdm_name; cd++) {
if (!omap_chip_is(cd->omap_chip))
continue;
if (cd->clkdm) if (cd->clkdm)
continue; continue;
cd->clkdm = _clkdm_lookup(cd->clkdm_name); cd->clkdm = _clkdm_lookup(cd->clkdm_name);
...@@ -257,43 +240,113 @@ static void _resolve_clkdm_deps(struct clockdomain *clkdm, ...@@ -257,43 +240,113 @@ static void _resolve_clkdm_deps(struct clockdomain *clkdm,
/* Public functions */ /* Public functions */
/** /**
* clkdm_init - set up the clockdomain layer * clkdm_register_platform_funcs - register clockdomain implementation fns
* @clkdms: optional pointer to an array of clockdomains to register * @co: func pointers for arch specific implementations
* @init_autodeps: optional pointer to an array of autodeps to register
* @custom_funcs: func pointers for arch specific implementations
* *
* Set up internal state. If a pointer to an array of clockdomains * Register the list of function pointers used to implement the
* @clkdms was supplied, loop through the list of clockdomains, * clockdomain functions on different OMAP SoCs. Should be called
* register all that are available on the current platform. Similarly, * before any other clkdm_register*() function. Returns -EINVAL if
* if a pointer to an array of clockdomain autodependencies * @co is null, -EEXIST if platform functions have already been
* @init_autodeps was provided, register those. No return value. * registered, or 0 upon success.
*/ */
void clkdm_init(struct clockdomain **clkdms, int clkdm_register_platform_funcs(struct clkdm_ops *co)
struct clkdm_autodep *init_autodeps, {
struct clkdm_ops *custom_funcs) if (!co)
return -EINVAL;
if (arch_clkdm)
return -EEXIST;
arch_clkdm = co;
return 0;
};
/**
* clkdm_register_clkdms - register SoC clockdomains
* @cs: pointer to an array of struct clockdomain to register
*
* Register the clockdomains available on a particular OMAP SoC. Must
* be called after clkdm_register_platform_funcs(). May be called
* multiple times. Returns -EACCES if called before
* clkdm_register_platform_funcs(); -EINVAL if the argument @cs is
* null; or 0 upon success.
*/
int clkdm_register_clkdms(struct clockdomain **cs)
{ {
struct clockdomain **c = NULL; struct clockdomain **c = NULL;
struct clockdomain *clkdm;
struct clkdm_autodep *autodep = NULL;
if (!custom_funcs) if (!arch_clkdm)
WARN(1, "No custom clkdm functions registered\n"); return -EACCES;
else
arch_clkdm = custom_funcs; if (!cs)
return -EINVAL;
if (clkdms) for (c = cs; *c; c++)
for (c = clkdms; *c; c++)
_clkdm_register(*c); _clkdm_register(*c);
autodeps = init_autodeps; return 0;
}
/**
* clkdm_register_autodeps - register autodeps (if required)
* @ia: pointer to a static array of struct clkdm_autodep to register
*
* Register clockdomain "automatic dependencies." These are
* clockdomain wakeup and sleep dependencies that are automatically
* added whenever the first clock inside a clockdomain is enabled, and
* removed whenever the last clock inside a clockdomain is disabled.
* These are currently only used on OMAP3 devices, and are deprecated,
* since they waste energy. However, until the OMAP2/3 IP block
* enable/disable sequence can be converted to match the OMAP4
* sequence, they are needed.
*
* Must be called only after all of the SoC clockdomains are
* registered, since the function will resolve autodep clockdomain
* names into clockdomain pointers.
*
* The struct clkdm_autodep @ia array must be static, as this function
* does not copy the array elements.
*
* Returns -EACCES if called before any clockdomains have been
* registered, -EINVAL if called with a null @ia argument, -EEXIST if
* autodeps have already been registered, or 0 upon success.
*/
int clkdm_register_autodeps(struct clkdm_autodep *ia)
{
struct clkdm_autodep *a = NULL;
if (list_empty(&clkdm_list))
return -EACCES;
if (!ia)
return -EINVAL;
if (autodeps) if (autodeps)
for (autodep = autodeps; autodep->clkdm.ptr; autodep++) return -EEXIST;
_autodep_lookup(autodep);
/* autodeps = ia;
* Put all clockdomains into software-supervised mode; PM code for (a = autodeps; a->clkdm.ptr; a++)
* should later enable hardware-supervised mode as appropriate _autodep_lookup(a);
return 0;
}
/**
* clkdm_complete_init - set up the clockdomain layer
*
* Put all clockdomains into software-supervised mode; PM code should
* later enable hardware-supervised mode as appropriate. Must be
* called after clkdm_register_clkdms(). Returns -EACCES if called
* before clkdm_register_clkdms(), or 0 upon success.
*/ */
int clkdm_complete_init(void)
{
struct clockdomain *clkdm;
if (list_empty(&clkdm_list))
return -EACCES;
list_for_each_entry(clkdm, &clkdm_list, node) { list_for_each_entry(clkdm, &clkdm_list, node) {
if (clkdm->flags & CLKDM_CAN_FORCE_WAKEUP) if (clkdm->flags & CLKDM_CAN_FORCE_WAKEUP)
clkdm_wakeup(clkdm); clkdm_wakeup(clkdm);
...@@ -306,6 +359,8 @@ void clkdm_init(struct clockdomain **clkdms, ...@@ -306,6 +359,8 @@ void clkdm_init(struct clockdomain **clkdms,
_resolve_clkdm_deps(clkdm, clkdm->sleepdep_srcs); _resolve_clkdm_deps(clkdm, clkdm->sleepdep_srcs);
clkdm_clear_all_sleepdeps(clkdm); clkdm_clear_all_sleepdeps(clkdm);
} }
return 0;
} }
/** /**
......
...@@ -45,7 +45,6 @@ ...@@ -45,7 +45,6 @@
/** /**
* struct clkdm_autodep - clkdm deps to add when entering/exiting hwsup mode * struct clkdm_autodep - clkdm deps to add when entering/exiting hwsup mode
* @clkdm: clockdomain to add wkdep+sleepdep on - set name member only * @clkdm: clockdomain to add wkdep+sleepdep on - set name member only
* @omap_chip: OMAP chip types that this autodep is valid on
* *
* A clockdomain that should have wkdeps and sleepdeps added when a * A clockdomain that should have wkdeps and sleepdeps added when a
* clockdomain should stay active in hwsup mode; and conversely, * clockdomain should stay active in hwsup mode; and conversely,
...@@ -60,14 +59,12 @@ struct clkdm_autodep { ...@@ -60,14 +59,12 @@ struct clkdm_autodep {
const char *name; const char *name;
struct clockdomain *ptr; struct clockdomain *ptr;
} clkdm; } clkdm;
const struct omap_chip_id omap_chip;
}; };
/** /**
* struct clkdm_dep - encode dependencies between clockdomains * struct clkdm_dep - encode dependencies between clockdomains
* @clkdm_name: clockdomain name * @clkdm_name: clockdomain name
* @clkdm: pointer to the struct clockdomain of @clkdm_name * @clkdm: pointer to the struct clockdomain of @clkdm_name
* @omap_chip: OMAP chip types that this dependency is valid on
* @wkdep_usecount: Number of wakeup dependencies causing this clkdm to wake * @wkdep_usecount: Number of wakeup dependencies causing this clkdm to wake
* @sleepdep_usecount: Number of sleep deps that could prevent clkdm from idle * @sleepdep_usecount: Number of sleep deps that could prevent clkdm from idle
* *
...@@ -81,7 +78,6 @@ struct clkdm_dep { ...@@ -81,7 +78,6 @@ struct clkdm_dep {
struct clockdomain *clkdm; struct clockdomain *clkdm;
atomic_t wkdep_usecount; atomic_t wkdep_usecount;
atomic_t sleepdep_usecount; atomic_t sleepdep_usecount;
const struct omap_chip_id omap_chip;
}; };
/* Possible flags for struct clockdomain._flags */ /* Possible flags for struct clockdomain._flags */
...@@ -101,7 +97,6 @@ struct clkdm_dep { ...@@ -101,7 +97,6 @@ struct clkdm_dep {
* @clkdm_offs: (OMAP4 only) CM clockdomain register offset * @clkdm_offs: (OMAP4 only) CM clockdomain register offset
* @wkdep_srcs: Clockdomains that can be told to wake this powerdomain up * @wkdep_srcs: Clockdomains that can be told to wake this powerdomain up
* @sleepdep_srcs: Clockdomains that can be told to keep this clkdm from inact * @sleepdep_srcs: Clockdomains that can be told to keep this clkdm from inact
* @omap_chip: OMAP chip types that this clockdomain is valid on
* @usecount: Usecount tracking * @usecount: Usecount tracking
* @node: list_head to link all clockdomains together * @node: list_head to link all clockdomains together
* *
...@@ -126,7 +121,6 @@ struct clockdomain { ...@@ -126,7 +121,6 @@ struct clockdomain {
const u16 clkdm_offs; const u16 clkdm_offs;
struct clkdm_dep *wkdep_srcs; struct clkdm_dep *wkdep_srcs;
struct clkdm_dep *sleepdep_srcs; struct clkdm_dep *sleepdep_srcs;
const struct omap_chip_id omap_chip;
atomic_t usecount; atomic_t usecount;
struct list_head node; struct list_head node;
spinlock_t lock; spinlock_t lock;
...@@ -166,8 +160,11 @@ struct clkdm_ops { ...@@ -166,8 +160,11 @@ struct clkdm_ops {
int (*clkdm_clk_disable)(struct clockdomain *clkdm); int (*clkdm_clk_disable)(struct clockdomain *clkdm);
}; };
void clkdm_init(struct clockdomain **clkdms, struct clkdm_autodep *autodeps, int clkdm_register_platform_funcs(struct clkdm_ops *co);
struct clkdm_ops *custom_funcs); int clkdm_register_autodeps(struct clkdm_autodep *ia);
int clkdm_register_clkdms(struct clockdomain **c);
int clkdm_complete_init(void);
struct clockdomain *clkdm_lookup(const char *name); struct clockdomain *clkdm_lookup(const char *name);
int clkdm_for_each(int (*fn)(struct clockdomain *clkdm, void *user), int clkdm_for_each(int (*fn)(struct clockdomain *clkdm, void *user),
...@@ -195,7 +192,8 @@ int clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk); ...@@ -195,7 +192,8 @@ int clkdm_clk_disable(struct clockdomain *clkdm, struct clk *clk);
int clkdm_hwmod_enable(struct clockdomain *clkdm, struct omap_hwmod *oh); int clkdm_hwmod_enable(struct clockdomain *clkdm, struct omap_hwmod *oh);
int clkdm_hwmod_disable(struct clockdomain *clkdm, struct omap_hwmod *oh); int clkdm_hwmod_disable(struct clockdomain *clkdm, struct omap_hwmod *oh);
extern void __init omap2xxx_clockdomains_init(void); extern void __init omap242x_clockdomains_init(void);
extern void __init omap243x_clockdomains_init(void);
extern void __init omap3xxx_clockdomains_init(void); extern void __init omap3xxx_clockdomains_init(void);
extern void __init omap44xx_clockdomains_init(void); extern void __init omap44xx_clockdomains_init(void);
extern void _clkdm_add_autodeps(struct clockdomain *clkdm); extern void _clkdm_add_autodeps(struct clockdomain *clkdm);
...@@ -205,4 +203,10 @@ extern struct clkdm_ops omap2_clkdm_operations; ...@@ -205,4 +203,10 @@ extern struct clkdm_ops omap2_clkdm_operations;
extern struct clkdm_ops omap3_clkdm_operations; extern struct clkdm_ops omap3_clkdm_operations;
extern struct clkdm_ops omap4_clkdm_operations; extern struct clkdm_ops omap4_clkdm_operations;
extern struct clkdm_dep gfx_24xx_wkdeps[];
extern struct clkdm_dep dsp_24xx_wkdeps[];
extern struct clockdomain wkup_common_clkdm;
extern struct clockdomain prm_common_clkdm;
extern struct clockdomain cm_common_clkdm;
#endif #endif
...@@ -52,8 +52,6 @@ static int omap2_clkdm_clear_all_wkdeps(struct clockdomain *clkdm) ...@@ -52,8 +52,6 @@ static int omap2_clkdm_clear_all_wkdeps(struct clockdomain *clkdm)
u32 mask = 0; u32 mask = 0;
for (cd = clkdm->wkdep_srcs; cd && cd->clkdm_name; cd++) { for (cd = clkdm->wkdep_srcs; cd && cd->clkdm_name; cd++) {
if (!omap_chip_is(cd->omap_chip))
continue;
if (!cd->clkdm) if (!cd->clkdm)
continue; /* only happens if data is erroneous */ continue; /* only happens if data is erroneous */
...@@ -98,8 +96,6 @@ static int omap3_clkdm_clear_all_sleepdeps(struct clockdomain *clkdm) ...@@ -98,8 +96,6 @@ static int omap3_clkdm_clear_all_sleepdeps(struct clockdomain *clkdm)
u32 mask = 0; u32 mask = 0;
for (cd = clkdm->sleepdep_srcs; cd && cd->clkdm_name; cd++) { for (cd = clkdm->sleepdep_srcs; cd && cd->clkdm_name; cd++) {
if (!omap_chip_is(cd->omap_chip))
continue;
if (!cd->clkdm) if (!cd->clkdm)
continue; /* only happens if data is erroneous */ continue; /* only happens if data is erroneous */
......
...@@ -52,8 +52,6 @@ static int omap4_clkdm_clear_all_wkup_sleep_deps(struct clockdomain *clkdm) ...@@ -52,8 +52,6 @@ static int omap4_clkdm_clear_all_wkup_sleep_deps(struct clockdomain *clkdm)
u32 mask = 0; u32 mask = 0;
for (cd = clkdm->wkdep_srcs; cd && cd->clkdm_name; cd++) { for (cd = clkdm->wkdep_srcs; cd && cd->clkdm_name; cd++) {
if (!omap_chip_is(cd->omap_chip))
continue;
if (!cd->clkdm) if (!cd->clkdm)
continue; /* only happens if data is erroneous */ continue; /* only happens if data is erroneous */
......
/*
* OMAP2420 clockdomains
*
* Copyright (C) 2008-2011 Texas Instruments, Inc.
* Copyright (C) 2008-2010 Nokia Corporation
*
* Paul Walmsley, Jouni Högander
*
* This file contains clockdomains and clockdomain wakeup dependencies
* for OMAP2420 chips. Some notes:
*
* A useful validation rule for struct clockdomain: Any clockdomain
* referenced by a wkdep_srcs must have a dep_bit assigned. So
* wkdep_srcs are really just software-controllable dependencies.
* Non-software-controllable dependencies do exist, but they are not
* encoded below (yet).
*
* 24xx does not support programmable sleep dependencies (SLEEPDEP)
*
* The overly-specific dep_bit names are due to a bit name collision
* with CM_FCLKEN_{DSP,IVA2}. The DSP/IVA2 PM_WKDEP and CM_SLEEPDEP shift
* value are the same for all powerdomains: 2
*
* XXX should dep_bit be a mask, so we can test to see if it is 0 as a
* sanity check?
* XXX encode hardware fixed wakeup dependencies -- esp. for 3430 CORE
*/
/*
* To-Do List
* -> Port the Sleep/Wakeup dependencies for the domains
* from the Power domain framework
*/
#include <linux/kernel.h>
#include <linux/io.h>
#include "clockdomain.h"
#include "prm2xxx_3xxx.h"
#include "cm2xxx_3xxx.h"
#include "cm-regbits-24xx.h"
#include "prm-regbits-24xx.h"
/*
* Clockdomain dependencies for wkdeps
*
* XXX Hardware dependencies (e.g., dependencies that cannot be
* changed in software) are not included here yet, but should be.
*/
/* Wakeup dependency source arrays */
/* 2420-specific possible wakeup dependencies */
/* 2420 PM_WKDEP_MPU: CORE, DSP, WKUP */
static struct clkdm_dep mpu_2420_wkdeps[] = {
{ .clkdm_name = "core_l3_clkdm" },
{ .clkdm_name = "core_l4_clkdm" },
{ .clkdm_name = "dsp_clkdm" },
{ .clkdm_name = "wkup_clkdm" },
{ NULL },
};
/* 2420 PM_WKDEP_CORE: DSP, GFX, MPU, WKUP */
static struct clkdm_dep core_2420_wkdeps[] = {
{ .clkdm_name = "dsp_clkdm" },
{ .clkdm_name = "gfx_clkdm" },
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "wkup_clkdm" },
{ NULL },
};
/*
* 2420-only clockdomains
*/
static struct clockdomain mpu_2420_clkdm = {
.name = "mpu_clkdm",
.pwrdm = { .name = "mpu_pwrdm" },
.flags = CLKDM_CAN_HWSUP,
.wkdep_srcs = mpu_2420_wkdeps,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_MPU_MASK,
};
static struct clockdomain iva1_2420_clkdm = {
.name = "iva1_clkdm",
.pwrdm = { .name = "dsp_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.dep_bit = OMAP24XX_PM_WKDEP_MPU_EN_DSP_SHIFT,
.wkdep_srcs = dsp_24xx_wkdeps,
.clktrctrl_mask = OMAP2420_AUTOSTATE_IVA_MASK,
};
static struct clockdomain dsp_2420_clkdm = {
.name = "dsp_clkdm",
.pwrdm = { .name = "dsp_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_DSP_MASK,
};
static struct clockdomain gfx_2420_clkdm = {
.name = "gfx_clkdm",
.pwrdm = { .name = "gfx_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.wkdep_srcs = gfx_24xx_wkdeps,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_GFX_MASK,
};
static struct clockdomain core_l3_2420_clkdm = {
.name = "core_l3_clkdm",
.pwrdm = { .name = "core_pwrdm" },
.flags = CLKDM_CAN_HWSUP,
.wkdep_srcs = core_2420_wkdeps,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_L3_MASK,
};
static struct clockdomain core_l4_2420_clkdm = {
.name = "core_l4_clkdm",
.pwrdm = { .name = "core_pwrdm" },
.flags = CLKDM_CAN_HWSUP,
.wkdep_srcs = core_2420_wkdeps,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_L4_MASK,
};
static struct clockdomain dss_2420_clkdm = {
.name = "dss_clkdm",
.pwrdm = { .name = "core_pwrdm" },
.flags = CLKDM_CAN_HWSUP,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_DSS_MASK,
};
static struct clockdomain *clockdomains_omap242x[] __initdata = {
&wkup_common_clkdm,
&cm_common_clkdm,
&prm_common_clkdm,
&mpu_2420_clkdm,
&iva1_2420_clkdm,
&dsp_2420_clkdm,
&gfx_2420_clkdm,
&core_l3_2420_clkdm,
&core_l4_2420_clkdm,
&dss_2420_clkdm,
NULL,
};
void __init omap242x_clockdomains_init(void)
{
if (!cpu_is_omap242x())
return;
clkdm_register_platform_funcs(&omap2_clkdm_operations);
clkdm_register_clkdms(clockdomains_omap242x);
clkdm_complete_init();
}
/*
* OMAP2xxx clockdomains
*
* Copyright (C) 2008-2009 Texas Instruments, Inc.
* Copyright (C) 2008-2010 Nokia Corporation
*
* Paul Walmsley, Jouni Högander
*
* This file contains clockdomains and clockdomain wakeup dependencies
* for OMAP2xxx chips. Some notes:
*
* A useful validation rule for struct clockdomain: Any clockdomain
* referenced by a wkdep_srcs must have a dep_bit assigned. So
* wkdep_srcs are really just software-controllable dependencies.
* Non-software-controllable dependencies do exist, but they are not
* encoded below (yet).
*
* 24xx does not support programmable sleep dependencies (SLEEPDEP)
*
* The overly-specific dep_bit names are due to a bit name collision
* with CM_FCLKEN_{DSP,IVA2}. The DSP/IVA2 PM_WKDEP and CM_SLEEPDEP shift
* value are the same for all powerdomains: 2
*
* XXX should dep_bit be a mask, so we can test to see if it is 0 as a
* sanity check?
* XXX encode hardware fixed wakeup dependencies -- esp. for 3430 CORE
*/
/*
* To-Do List
* -> Port the Sleep/Wakeup dependencies for the domains
* from the Power domain framework
*/
#include <linux/kernel.h>
#include <linux/io.h>
#include "clockdomain.h"
#include "prm2xxx_3xxx.h"
#include "cm2xxx_3xxx.h"
#include "cm-regbits-24xx.h"
#include "prm-regbits-24xx.h"
/*
* Clockdomain dependencies for wkdeps
*
* XXX Hardware dependencies (e.g., dependencies that cannot be
* changed in software) are not included here yet, but should be.
*/
/* Wakeup dependency source arrays */
/* 2430-specific possible wakeup dependencies */
/* 2430 PM_WKDEP_CORE: DSP, GFX, MPU, WKUP, MDM */
static struct clkdm_dep core_2430_wkdeps[] = {
{ .clkdm_name = "dsp_clkdm" },
{ .clkdm_name = "gfx_clkdm" },
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "wkup_clkdm" },
{ .clkdm_name = "mdm_clkdm" },
{ NULL },
};
/* 2430 PM_WKDEP_MPU: CORE, DSP, WKUP, MDM */
static struct clkdm_dep mpu_2430_wkdeps[] = {
{ .clkdm_name = "core_l3_clkdm" },
{ .clkdm_name = "core_l4_clkdm" },
{ .clkdm_name = "dsp_clkdm" },
{ .clkdm_name = "wkup_clkdm" },
{ .clkdm_name = "mdm_clkdm" },
{ NULL },
};
/* 2430 PM_WKDEP_MDM: CORE, MPU, WKUP */
static struct clkdm_dep mdm_2430_wkdeps[] = {
{ .clkdm_name = "core_l3_clkdm" },
{ .clkdm_name = "core_l4_clkdm" },
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "wkup_clkdm" },
{ NULL },
};
/*
* 2430-only clockdomains
*/
static struct clockdomain mpu_2430_clkdm = {
.name = "mpu_clkdm",
.pwrdm = { .name = "mpu_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.wkdep_srcs = mpu_2430_wkdeps,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_MPU_MASK,
};
/* Another case of bit name collisions between several registers: EN_MDM */
static struct clockdomain mdm_clkdm = {
.name = "mdm_clkdm",
.pwrdm = { .name = "mdm_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.dep_bit = OMAP2430_PM_WKDEP_MPU_EN_MDM_SHIFT,
.wkdep_srcs = mdm_2430_wkdeps,
.clktrctrl_mask = OMAP2430_AUTOSTATE_MDM_MASK,
};
static struct clockdomain dsp_2430_clkdm = {
.name = "dsp_clkdm",
.pwrdm = { .name = "dsp_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.dep_bit = OMAP24XX_PM_WKDEP_MPU_EN_DSP_SHIFT,
.wkdep_srcs = dsp_24xx_wkdeps,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_DSP_MASK,
};
static struct clockdomain gfx_2430_clkdm = {
.name = "gfx_clkdm",
.pwrdm = { .name = "gfx_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.wkdep_srcs = gfx_24xx_wkdeps,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_GFX_MASK,
};
/*
* XXX add usecounting for clkdm dependencies, otherwise the presence
* of a single dep bit for core_l3_24xx_clkdm and core_l4_24xx_clkdm
* could cause trouble
*/
static struct clockdomain core_l3_2430_clkdm = {
.name = "core_l3_clkdm",
.pwrdm = { .name = "core_pwrdm" },
.flags = CLKDM_CAN_HWSUP,
.dep_bit = OMAP24XX_EN_CORE_SHIFT,
.wkdep_srcs = core_2430_wkdeps,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_L3_MASK,
};
/*
* XXX add usecounting for clkdm dependencies, otherwise the presence
* of a single dep bit for core_l3_24xx_clkdm and core_l4_24xx_clkdm
* could cause trouble
*/
static struct clockdomain core_l4_2430_clkdm = {
.name = "core_l4_clkdm",
.pwrdm = { .name = "core_pwrdm" },
.flags = CLKDM_CAN_HWSUP,
.dep_bit = OMAP24XX_EN_CORE_SHIFT,
.wkdep_srcs = core_2430_wkdeps,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_L4_MASK,
};
static struct clockdomain dss_2430_clkdm = {
.name = "dss_clkdm",
.pwrdm = { .name = "core_pwrdm" },
.flags = CLKDM_CAN_HWSUP,
.clktrctrl_mask = OMAP24XX_AUTOSTATE_DSS_MASK,
};
static struct clockdomain *clockdomains_omap243x[] __initdata = {
&wkup_common_clkdm,
&cm_common_clkdm,
&prm_common_clkdm,
&mpu_2430_clkdm,
&mdm_clkdm,
&dsp_2430_clkdm,
&gfx_2430_clkdm,
&core_l3_2430_clkdm,
&core_l4_2430_clkdm,
&dss_2430_clkdm,
NULL,
};
void __init omap243x_clockdomains_init(void)
{
if (!cpu_is_omap243x())
return;
clkdm_register_platform_funcs(&omap2_clkdm_operations);
clkdm_register_clkdms(clockdomains_omap243x);
clkdm_complete_init();
}
/*
* OMAP3xxx clockdomains
*
* Copyright (C) 2008-2011 Texas Instruments, Inc.
* Copyright (C) 2008-2010 Nokia Corporation
*
* Paul Walmsley, Jouni Högander
*
* This file contains clockdomains and clockdomain wakeup/sleep
* dependencies for the OMAP3xxx chips. Some notes:
*
* A useful validation rule for struct clockdomain: Any clockdomain
* referenced by a wkdep_srcs or sleepdep_srcs array must have a
* dep_bit assigned. So wkdep_srcs/sleepdep_srcs are really just
* software-controllable dependencies. Non-software-controllable
* dependencies do exist, but they are not encoded below (yet).
*
* The overly-specific dep_bit names are due to a bit name collision
* with CM_FCLKEN_{DSP,IVA2}. The DSP/IVA2 PM_WKDEP and CM_SLEEPDEP shift
* value are the same for all powerdomains: 2
*
* XXX should dep_bit be a mask, so we can test to see if it is 0 as a
* sanity check?
* XXX encode hardware fixed wakeup dependencies -- esp. for 3430 CORE
*/
/*
* To-Do List
* -> Port the Sleep/Wakeup dependencies for the domains
* from the Power domain framework
*/
#include <linux/kernel.h>
#include <linux/io.h>
#include "clockdomain.h"
#include "prm2xxx_3xxx.h"
#include "cm2xxx_3xxx.h"
#include "cm-regbits-34xx.h"
#include "prm-regbits-34xx.h"
/*
* Clockdomain dependencies for wkdeps/sleepdeps
*
* XXX Hardware dependencies (e.g., dependencies that cannot be
* changed in software) are not included here yet, but should be.
*/
/* OMAP3-specific possible dependencies */
/*
* 3430ES1 PM_WKDEP_GFX: adds IVA2, removes CORE
* 3430ES2 PM_WKDEP_SGX: adds IVA2, removes CORE
*/
static struct clkdm_dep gfx_sgx_3xxx_wkdeps[] = {
{ .clkdm_name = "iva2_clkdm", },
{ .clkdm_name = "mpu_clkdm", },
{ .clkdm_name = "wkup_clkdm", },
{ NULL },
};
/* 3430: PM_WKDEP_PER: CORE, IVA2, MPU, WKUP */
static struct clkdm_dep per_wkdeps[] = {
{ .clkdm_name = "core_l3_clkdm" },
{ .clkdm_name = "core_l4_clkdm" },
{ .clkdm_name = "iva2_clkdm" },
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "wkup_clkdm" },
{ NULL },
};
/* 3430ES2: PM_WKDEP_USBHOST: CORE, IVA2, MPU, WKUP */
static struct clkdm_dep usbhost_wkdeps[] = {
{ .clkdm_name = "core_l3_clkdm" },
{ .clkdm_name = "core_l4_clkdm" },
{ .clkdm_name = "iva2_clkdm" },
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "wkup_clkdm" },
{ NULL },
};
/* 3430 PM_WKDEP_MPU: CORE, IVA2, DSS, PER */
static struct clkdm_dep mpu_3xxx_wkdeps[] = {
{ .clkdm_name = "core_l3_clkdm" },
{ .clkdm_name = "core_l4_clkdm" },
{ .clkdm_name = "iva2_clkdm" },
{ .clkdm_name = "dss_clkdm" },
{ .clkdm_name = "per_clkdm" },
{ NULL },
};
/* 3430 PM_WKDEP_IVA2: CORE, MPU, WKUP, DSS, PER */
static struct clkdm_dep iva2_wkdeps[] = {
{ .clkdm_name = "core_l3_clkdm" },
{ .clkdm_name = "core_l4_clkdm" },
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "wkup_clkdm" },
{ .clkdm_name = "dss_clkdm" },
{ .clkdm_name = "per_clkdm" },
{ NULL },
};
/* 3430 PM_WKDEP_CAM: IVA2, MPU, WKUP */
static struct clkdm_dep cam_wkdeps[] = {
{ .clkdm_name = "iva2_clkdm" },
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "wkup_clkdm" },
{ NULL },
};
/* 3430 PM_WKDEP_DSS: IVA2, MPU, WKUP */
static struct clkdm_dep dss_wkdeps[] = {
{ .clkdm_name = "iva2_clkdm" },
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "wkup_clkdm" },
{ NULL },
};
/* 3430: PM_WKDEP_NEON: MPU */
static struct clkdm_dep neon_wkdeps[] = {
{ .clkdm_name = "mpu_clkdm" },
{ NULL },
};
/* Sleep dependency source arrays for OMAP3-specific clkdms */
/* 3430: CM_SLEEPDEP_DSS: MPU, IVA */
static struct clkdm_dep dss_sleepdeps[] = {
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "iva2_clkdm" },
{ NULL },
};
/* 3430: CM_SLEEPDEP_PER: MPU, IVA */
static struct clkdm_dep per_sleepdeps[] = {
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "iva2_clkdm" },
{ NULL },
};
/* 3430ES2: CM_SLEEPDEP_USBHOST: MPU, IVA */
static struct clkdm_dep usbhost_sleepdeps[] = {
{ .clkdm_name = "mpu_clkdm" },
{ .clkdm_name = "iva2_clkdm" },
{ NULL },
};
/* 3430: CM_SLEEPDEP_CAM: MPU */
static struct clkdm_dep cam_sleepdeps[] = {
{ .clkdm_name = "mpu_clkdm" },
{ NULL },
};
/*
* 3430ES1: CM_SLEEPDEP_GFX: MPU
* 3430ES2: CM_SLEEPDEP_SGX: MPU
* These can share data since they will never be present simultaneously
* on the same device.
*/
static struct clkdm_dep gfx_sgx_sleepdeps[] = {
{ .clkdm_name = "mpu_clkdm" },
{ NULL },
};
/*
* OMAP3 clockdomains
*/
static struct clockdomain mpu_3xxx_clkdm = {
.name = "mpu_clkdm",
.pwrdm = { .name = "mpu_pwrdm" },
.flags = CLKDM_CAN_HWSUP | CLKDM_CAN_FORCE_WAKEUP,
.dep_bit = OMAP3430_EN_MPU_SHIFT,
.wkdep_srcs = mpu_3xxx_wkdeps,
.clktrctrl_mask = OMAP3430_CLKTRCTRL_MPU_MASK,
};
static struct clockdomain neon_clkdm = {
.name = "neon_clkdm",
.pwrdm = { .name = "neon_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.wkdep_srcs = neon_wkdeps,
.clktrctrl_mask = OMAP3430_CLKTRCTRL_NEON_MASK,
};
static struct clockdomain iva2_clkdm = {
.name = "iva2_clkdm",
.pwrdm = { .name = "iva2_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.dep_bit = OMAP3430_PM_WKDEP_MPU_EN_IVA2_SHIFT,
.wkdep_srcs = iva2_wkdeps,
.clktrctrl_mask = OMAP3430_CLKTRCTRL_IVA2_MASK,
};
static struct clockdomain gfx_3430es1_clkdm = {
.name = "gfx_clkdm",
.pwrdm = { .name = "gfx_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.wkdep_srcs = gfx_sgx_3xxx_wkdeps,
.sleepdep_srcs = gfx_sgx_sleepdeps,
.clktrctrl_mask = OMAP3430ES1_CLKTRCTRL_GFX_MASK,
};
static struct clockdomain sgx_clkdm = {
.name = "sgx_clkdm",
.pwrdm = { .name = "sgx_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.wkdep_srcs = gfx_sgx_3xxx_wkdeps,
.sleepdep_srcs = gfx_sgx_sleepdeps,
.clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_SGX_MASK,
};
/*
* The die-to-die clockdomain was documented in the 34xx ES1 TRM, but
* then that information was removed from the 34xx ES2+ TRM. It is
* unclear whether the core is still there, but the clockdomain logic
* is there, and must be programmed to an appropriate state if the
* CORE clockdomain is to become inactive.
*/
static struct clockdomain d2d_clkdm = {
.name = "d2d_clkdm",
.pwrdm = { .name = "core_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.clktrctrl_mask = OMAP3430ES1_CLKTRCTRL_D2D_MASK,
};
/*
* XXX add usecounting for clkdm dependencies, otherwise the presence
* of a single dep bit for core_l3_3xxx_clkdm and core_l4_3xxx_clkdm
* could cause trouble
*/
static struct clockdomain core_l3_3xxx_clkdm = {
.name = "core_l3_clkdm",
.pwrdm = { .name = "core_pwrdm" },
.flags = CLKDM_CAN_HWSUP,
.dep_bit = OMAP3430_EN_CORE_SHIFT,
.clktrctrl_mask = OMAP3430_CLKTRCTRL_L3_MASK,
};
/*
* XXX add usecounting for clkdm dependencies, otherwise the presence
* of a single dep bit for core_l3_3xxx_clkdm and core_l4_3xxx_clkdm
* could cause trouble
*/
static struct clockdomain core_l4_3xxx_clkdm = {
.name = "core_l4_clkdm",
.pwrdm = { .name = "core_pwrdm" },
.flags = CLKDM_CAN_HWSUP,
.dep_bit = OMAP3430_EN_CORE_SHIFT,
.clktrctrl_mask = OMAP3430_CLKTRCTRL_L4_MASK,
};
/* Another case of bit name collisions between several registers: EN_DSS */
static struct clockdomain dss_3xxx_clkdm = {
.name = "dss_clkdm",
.pwrdm = { .name = "dss_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.dep_bit = OMAP3430_PM_WKDEP_MPU_EN_DSS_SHIFT,
.wkdep_srcs = dss_wkdeps,
.sleepdep_srcs = dss_sleepdeps,
.clktrctrl_mask = OMAP3430_CLKTRCTRL_DSS_MASK,
};
static struct clockdomain cam_clkdm = {
.name = "cam_clkdm",
.pwrdm = { .name = "cam_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.wkdep_srcs = cam_wkdeps,
.sleepdep_srcs = cam_sleepdeps,
.clktrctrl_mask = OMAP3430_CLKTRCTRL_CAM_MASK,
};
static struct clockdomain usbhost_clkdm = {
.name = "usbhost_clkdm",
.pwrdm = { .name = "usbhost_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.wkdep_srcs = usbhost_wkdeps,
.sleepdep_srcs = usbhost_sleepdeps,
.clktrctrl_mask = OMAP3430ES2_CLKTRCTRL_USBHOST_MASK,
};
static struct clockdomain per_clkdm = {
.name = "per_clkdm",
.pwrdm = { .name = "per_pwrdm" },
.flags = CLKDM_CAN_HWSUP_SWSUP,
.dep_bit = OMAP3430_EN_PER_SHIFT,
.wkdep_srcs = per_wkdeps,
.sleepdep_srcs = per_sleepdeps,
.clktrctrl_mask = OMAP3430_CLKTRCTRL_PER_MASK,
};
/*
* Disable hw supervised mode for emu_clkdm, because emu_pwrdm is
* switched of even if sdti is in use
*/
static struct clockdomain emu_clkdm = {
.name = "emu_clkdm",
.pwrdm = { .name = "emu_pwrdm" },
.flags = /* CLKDM_CAN_ENABLE_AUTO | */CLKDM_CAN_SWSUP,
.clktrctrl_mask = OMAP3430_CLKTRCTRL_EMU_MASK,
};
static struct clockdomain dpll1_clkdm = {
.name = "dpll1_clkdm",
.pwrdm = { .name = "dpll1_pwrdm" },
};
static struct clockdomain dpll2_clkdm = {
.name = "dpll2_clkdm",
.pwrdm = { .name = "dpll2_pwrdm" },
};
static struct clockdomain dpll3_clkdm = {
.name = "dpll3_clkdm",
.pwrdm = { .name = "dpll3_pwrdm" },
};
static struct clockdomain dpll4_clkdm = {
.name = "dpll4_clkdm",
.pwrdm = { .name = "dpll4_pwrdm" },
};
static struct clockdomain dpll5_clkdm = {
.name = "dpll5_clkdm",
.pwrdm = { .name = "dpll5_pwrdm" },
};
/*
* Clockdomain hwsup dependencies
*/
static struct clkdm_autodep clkdm_autodeps[] = {
{
.clkdm = { .name = "mpu_clkdm" },
},
{
.clkdm = { .name = "iva2_clkdm" },
},
{
.clkdm = { .name = NULL },
}
};
/*
*
*/
static struct clockdomain *clockdomains_omap3430_common[] __initdata = {
&wkup_common_clkdm,
&cm_common_clkdm,
&prm_common_clkdm,
&mpu_3xxx_clkdm,
&neon_clkdm,
&iva2_clkdm,
&d2d_clkdm,
&core_l3_3xxx_clkdm,
&core_l4_3xxx_clkdm,
&dss_3xxx_clkdm,
&cam_clkdm,
&per_clkdm,
&emu_clkdm,
&dpll1_clkdm,
&dpll2_clkdm,
&dpll3_clkdm,
&dpll4_clkdm,
NULL
};
static struct clockdomain *clockdomains_omap3430es1[] __initdata = {
&gfx_3430es1_clkdm,
NULL,
};
static struct clockdomain *clockdomains_omap3430es2plus[] __initdata = {
&sgx_clkdm,
&dpll5_clkdm,
&usbhost_clkdm,
NULL,
};
void __init omap3xxx_clockdomains_init(void)
{
struct clockdomain **sc;
if (!cpu_is_omap34xx())
return;
clkdm_register_platform_funcs(&omap3_clkdm_operations);
clkdm_register_clkdms(clockdomains_omap3430_common);
sc = (omap_rev() == OMAP3430_REV_ES1_0) ? clockdomains_omap3430es1 :
clockdomains_omap3430es2plus;
clkdm_register_clkdms(sc);
clkdm_register_autodeps(clkdm_autodeps);
clkdm_complete_init();
}
...@@ -45,17 +45,22 @@ static void __init __omap2_set_globals(struct omap_globals *omap2_globals) ...@@ -45,17 +45,22 @@ static void __init __omap2_set_globals(struct omap_globals *omap2_globals)
static struct omap_globals omap242x_globals = { static struct omap_globals omap242x_globals = {
.class = OMAP242X_CLASS, .class = OMAP242X_CLASS,
.tap = OMAP2_L4_IO_ADDRESS(0x48014000), .tap = OMAP2_L4_IO_ADDRESS(0x48014000),
.sdrc = OMAP2420_SDRC_BASE, .sdrc = OMAP2_L3_IO_ADDRESS(OMAP2420_SDRC_BASE),
.sms = OMAP2420_SMS_BASE, .sms = OMAP2_L3_IO_ADDRESS(OMAP2420_SMS_BASE),
.ctrl = OMAP242X_CTRL_BASE, .ctrl = OMAP2_L4_IO_ADDRESS(OMAP242X_CTRL_BASE),
.prm = OMAP2420_PRM_BASE, .prm = OMAP2_L4_IO_ADDRESS(OMAP2420_PRM_BASE),
.cm = OMAP2420_CM_BASE, .cm = OMAP2_L4_IO_ADDRESS(OMAP2420_CM_BASE),
}; };
void __init omap2_set_globals_242x(void) void __init omap2_set_globals_242x(void)
{ {
__omap2_set_globals(&omap242x_globals); __omap2_set_globals(&omap242x_globals);
} }
void __init omap242x_map_io(void)
{
omap242x_map_common_io();
}
#endif #endif
#if defined(CONFIG_SOC_OMAP2430) #if defined(CONFIG_SOC_OMAP2430)
...@@ -63,17 +68,22 @@ void __init omap2_set_globals_242x(void) ...@@ -63,17 +68,22 @@ void __init omap2_set_globals_242x(void)
static struct omap_globals omap243x_globals = { static struct omap_globals omap243x_globals = {
.class = OMAP243X_CLASS, .class = OMAP243X_CLASS,
.tap = OMAP2_L4_IO_ADDRESS(0x4900a000), .tap = OMAP2_L4_IO_ADDRESS(0x4900a000),
.sdrc = OMAP243X_SDRC_BASE, .sdrc = OMAP2_L3_IO_ADDRESS(OMAP243X_SDRC_BASE),
.sms = OMAP243X_SMS_BASE, .sms = OMAP2_L3_IO_ADDRESS(OMAP243X_SMS_BASE),
.ctrl = OMAP243X_CTRL_BASE, .ctrl = OMAP2_L4_IO_ADDRESS(OMAP243X_CTRL_BASE),
.prm = OMAP2430_PRM_BASE, .prm = OMAP2_L4_IO_ADDRESS(OMAP2430_PRM_BASE),
.cm = OMAP2430_CM_BASE, .cm = OMAP2_L4_IO_ADDRESS(OMAP2430_CM_BASE),
}; };
void __init omap2_set_globals_243x(void) void __init omap2_set_globals_243x(void)
{ {
__omap2_set_globals(&omap243x_globals); __omap2_set_globals(&omap243x_globals);
} }
void __init omap243x_map_io(void)
{
omap243x_map_common_io();
}
#endif #endif
#if defined(CONFIG_ARCH_OMAP3) #if defined(CONFIG_ARCH_OMAP3)
...@@ -81,11 +91,11 @@ void __init omap2_set_globals_243x(void) ...@@ -81,11 +91,11 @@ void __init omap2_set_globals_243x(void)
static struct omap_globals omap3_globals = { static struct omap_globals omap3_globals = {
.class = OMAP343X_CLASS, .class = OMAP343X_CLASS,
.tap = OMAP2_L4_IO_ADDRESS(0x4830A000), .tap = OMAP2_L4_IO_ADDRESS(0x4830A000),
.sdrc = OMAP343X_SDRC_BASE, .sdrc = OMAP2_L3_IO_ADDRESS(OMAP343X_SDRC_BASE),
.sms = OMAP343X_SMS_BASE, .sms = OMAP2_L3_IO_ADDRESS(OMAP343X_SMS_BASE),
.ctrl = OMAP343X_CTRL_BASE, .ctrl = OMAP2_L4_IO_ADDRESS(OMAP343X_CTRL_BASE),
.prm = OMAP3430_PRM_BASE, .prm = OMAP2_L4_IO_ADDRESS(OMAP3430_PRM_BASE),
.cm = OMAP3430_CM_BASE, .cm = OMAP2_L4_IO_ADDRESS(OMAP3430_CM_BASE),
}; };
void __init omap2_set_globals_3xxx(void) void __init omap2_set_globals_3xxx(void)
...@@ -95,7 +105,6 @@ void __init omap2_set_globals_3xxx(void) ...@@ -95,7 +105,6 @@ void __init omap2_set_globals_3xxx(void)
void __init omap3_map_io(void) void __init omap3_map_io(void)
{ {
omap2_set_globals_3xxx();
omap34xx_map_common_io(); omap34xx_map_common_io();
} }
...@@ -110,9 +119,9 @@ void __init omap3_map_io(void) ...@@ -110,9 +119,9 @@ void __init omap3_map_io(void)
static struct omap_globals ti816x_globals = { static struct omap_globals ti816x_globals = {
.class = OMAP343X_CLASS, .class = OMAP343X_CLASS,
.tap = OMAP2_L4_IO_ADDRESS(TI816X_TAP_BASE), .tap = OMAP2_L4_IO_ADDRESS(TI816X_TAP_BASE),
.ctrl = TI816X_CTRL_BASE, .ctrl = OMAP2_L4_IO_ADDRESS(TI816X_CTRL_BASE),
.prm = TI816X_PRCM_BASE, .prm = OMAP2_L4_IO_ADDRESS(TI816X_PRCM_BASE),
.cm = TI816X_PRCM_BASE, .cm = OMAP2_L4_IO_ADDRESS(TI816X_PRCM_BASE),
}; };
void __init omap2_set_globals_ti816x(void) void __init omap2_set_globals_ti816x(void)
...@@ -125,11 +134,11 @@ void __init omap2_set_globals_ti816x(void) ...@@ -125,11 +134,11 @@ void __init omap2_set_globals_ti816x(void)
static struct omap_globals omap4_globals = { static struct omap_globals omap4_globals = {
.class = OMAP443X_CLASS, .class = OMAP443X_CLASS,
.tap = OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE), .tap = OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE),
.ctrl = OMAP443X_SCM_BASE, .ctrl = OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE),
.ctrl_pad = OMAP443X_CTRL_BASE, .ctrl_pad = OMAP2_L4_IO_ADDRESS(OMAP443X_CTRL_BASE),
.prm = OMAP4430_PRM_BASE, .prm = OMAP2_L4_IO_ADDRESS(OMAP4430_PRM_BASE),
.cm = OMAP4430_CM_BASE, .cm = OMAP2_L4_IO_ADDRESS(OMAP4430_CM_BASE),
.cm2 = OMAP4430_CM2_BASE, .cm2 = OMAP2_L4_IO_ADDRESS(OMAP4430_CM2_BASE),
}; };
void __init omap2_set_globals_443x(void) void __init omap2_set_globals_443x(void)
...@@ -138,5 +147,10 @@ void __init omap2_set_globals_443x(void) ...@@ -138,5 +147,10 @@ void __init omap2_set_globals_443x(void)
omap2_set_globals_control(&omap4_globals); omap2_set_globals_control(&omap4_globals);
omap2_set_globals_prcm(&omap4_globals); omap2_set_globals_prcm(&omap4_globals);
} }
void __init omap4_map_io(void)
{
omap44xx_map_common_io();
}
#endif #endif
...@@ -149,17 +149,11 @@ static struct omap3_control_regs control_context; ...@@ -149,17 +149,11 @@ static struct omap3_control_regs control_context;
void __init omap2_set_globals_control(struct omap_globals *omap2_globals) void __init omap2_set_globals_control(struct omap_globals *omap2_globals)
{ {
/* Static mapping, never released */ if (omap2_globals->ctrl)
if (omap2_globals->ctrl) { omap2_ctrl_base = omap2_globals->ctrl;
omap2_ctrl_base = ioremap(omap2_globals->ctrl, SZ_4K);
WARN_ON(!omap2_ctrl_base);
}
/* Static mapping, never released */ if (omap2_globals->ctrl_pad)
if (omap2_globals->ctrl_pad) { omap4_ctrl_pad_base = omap2_globals->ctrl_pad;
omap4_ctrl_pad_base = ioremap(omap2_globals->ctrl_pad, SZ_4K);
WARN_ON(!omap4_ctrl_pad_base);
}
} }
void __iomem *omap_ctrl_base_get(void) void __iomem *omap_ctrl_base_get(void)
......
此差异已折叠。
...@@ -35,14 +35,6 @@ static struct platform_device omap_display_device = { ...@@ -35,14 +35,6 @@ static struct platform_device omap_display_device = {
}, },
}; };
static struct omap_device_pm_latency omap_dss_latency[] = {
[0] = {
.deactivate_func = omap_device_idle_hwmods,
.activate_func = omap_device_enable_hwmods,
.flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
},
};
struct omap_dss_hwmod_data { struct omap_dss_hwmod_data {
const char *oh_name; const char *oh_name;
const char *dev_name; const char *dev_name;
...@@ -78,7 +70,7 @@ int __init omap_display_init(struct omap_dss_board_info *board_data) ...@@ -78,7 +70,7 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)
{ {
int r = 0; int r = 0;
struct omap_hwmod *oh; struct omap_hwmod *oh;
struct omap_device *od; struct platform_device *pdev;
int i, oh_count; int i, oh_count;
struct omap_display_platform_data pdata; struct omap_display_platform_data pdata;
const struct omap_dss_hwmod_data *curr_dss_hwmod; const struct omap_dss_hwmod_data *curr_dss_hwmod;
...@@ -108,13 +100,12 @@ int __init omap_display_init(struct omap_dss_board_info *board_data) ...@@ -108,13 +100,12 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)
return -ENODEV; return -ENODEV;
} }
od = omap_device_build(curr_dss_hwmod[i].dev_name, pdev = omap_device_build(curr_dss_hwmod[i].dev_name,
curr_dss_hwmod[i].id, oh, &pdata, curr_dss_hwmod[i].id, oh, &pdata,
sizeof(struct omap_display_platform_data), sizeof(struct omap_display_platform_data),
omap_dss_latency, NULL, 0, 0);
ARRAY_SIZE(omap_dss_latency), 0);
if (WARN((IS_ERR(od)), "Could not build omap_device for %s\n", if (WARN((IS_ERR(pdev)), "Could not build omap_device for %s\n",
curr_dss_hwmod[i].oh_name)) curr_dss_hwmod[i].oh_name))
return -ENODEV; return -ENODEV;
} }
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
#ifndef __MACH_OMAP2_IO_H__
#define __MACH_OMAP2_IO_H__
extern int __init omap_sram_init(void);
#endif /* __MACH_OMAP2_IO_H__ */
...@@ -165,8 +165,8 @@ static void __init omap_init_irq(u32 base, int nr_irqs) ...@@ -165,8 +165,8 @@ static void __init omap_init_irq(u32 base, int nr_irqs)
omap_irq_bank_init_one(bank); omap_irq_bank_init_one(bank);
for (i = 0, j = 0; i < bank->nr_irqs; i += 32, j += 0x20) for (j = 0; j < bank->nr_irqs; j += 32)
omap_alloc_gc(bank->base_reg + j, i, 32); omap_alloc_gc(bank->base_reg + j, j, 32);
nr_of_irqs += bank->nr_irqs; nr_of_irqs += bank->nr_irqs;
nr_banks++; nr_banks++;
......
此差异已折叠。
此差异已折叠。
...@@ -1954,9 +1954,6 @@ int __init omap_hwmod_register(struct omap_hwmod **ohs) ...@@ -1954,9 +1954,6 @@ int __init omap_hwmod_register(struct omap_hwmod **ohs)
i = 0; i = 0;
do { do {
if (!omap_chip_is(ohs[i]->omap_chip))
continue;
r = _register(ohs[i]); r = _register(ohs[i]);
WARN(r, "omap_hwmod: %s: _register returned %d\n", ohs[i]->name, WARN(r, "omap_hwmod: %s: _register returned %d\n", ohs[i]->name,
r); r);
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册