Merge tag 'armsoc-cleanup' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM SoC cleanups from Olof Johansson: "Again we have a sizable (but not huge) cleanup branch with a net delta of about -3k lines. Main contents here is: - A bunch of development/cleanup of a few PXA boards - Removal of bockw platforms on shmobile, since the platform has now gone completely multiplatform. Whee! - move of the 32kHz timer on OMAP to a proper timesource - Misc cleanup of older OMAP material (incl removal of one board file) - Switch over to new common PWM lookup support for several platforms There's also a handful of other cleanups across the tree, but the above are the major pieces" * tag 'armsoc-cleanup' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (103 commits) ARM: OMAP3: hwmod data: Remove legacy mailbox data and addrs ARM: DRA7: hwmod data: Remove spinlock hwmod addrs ARM: OMAP4: hwmod data: Remove spinlock hwmod addrs ARM: DRA7/AM335x/AM437x: hwmod: Remove gpmc address space from hwmod data ARM: Remove __ref on hotplug cpu die path ARM: Remove open-coded version of IRQCHIP_DECLARE arm: omap2: board-generic: use omap4_local_timer_init for AM437x ARM: DRA7/AM335x/AM437x: hwmod: Remove elm address space from hwmod data ARM: OMAP: Remove duplicated operand in OR operation clocksource: ti-32k: make it depend on GENERIC_CLOCKSOURCE ARM: pxa: remove incorrect __init annotation on pxa27x_set_pwrmode ARM: pxa: raumfeld: make some variables static ARM: OMAP: Change all cpu_is_* occurences to soc_is_* for id.c ARM: OMAP2+: Rename cpu_is macros to soc_is arm: omap2: timer: limit hwmod usage to non-DT boots arm: omap2+: select 32k clocksource driver clocksource: add TI 32.768 Hz counter driver arm: omap2: timer: rename omap_sync32k_timer_init() arm: omap2: timer: always call clocksource_of_init() when DT arm: omap2: timer: move realtime_counter_init() around ...
このコミットが含まれているのは:
@@ -97,6 +97,7 @@ config ARCH_OMAP2PLUS
|
||||
select PINCTRL
|
||||
select SOC_BUS
|
||||
select OMAP_IRQCHIP
|
||||
select CLKSRC_TI_32K
|
||||
help
|
||||
Systems based on OMAP2, OMAP3, OMAP4 or OMAP5
|
||||
|
||||
|
@@ -48,11 +48,9 @@ AFLAGS_sleep44xx.o :=-Wa,-march=armv7-a$(plus_sec)
|
||||
# Functions loaded to SRAM
|
||||
obj-$(CONFIG_SOC_OMAP2420) += sram242x.o
|
||||
obj-$(CONFIG_SOC_OMAP2430) += sram243x.o
|
||||
obj-$(CONFIG_ARCH_OMAP3) += sram34xx.o
|
||||
|
||||
AFLAGS_sram242x.o :=-Wa,-march=armv6
|
||||
AFLAGS_sram243x.o :=-Wa,-march=armv6
|
||||
AFLAGS_sram34xx.o :=-Wa,-march=armv7-a
|
||||
|
||||
# Restart code (OMAP4/5 currently in omap4-common.c)
|
||||
obj-$(CONFIG_SOC_OMAP2420) += omap2-restart.o
|
||||
@@ -186,7 +184,6 @@ obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_dpllcore.o
|
||||
obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_virt_prcm_set.o
|
||||
obj-$(CONFIG_ARCH_OMAP2) += clkt2xxx_dpll.o
|
||||
obj-$(CONFIG_ARCH_OMAP3) += $(clock-common)
|
||||
obj-$(CONFIG_ARCH_OMAP3) += clkt34xx_dpll3m2.o
|
||||
obj-$(CONFIG_ARCH_OMAP4) += $(clock-common)
|
||||
obj-$(CONFIG_SOC_AM33XX) += $(clock-common)
|
||||
obj-$(CONFIG_SOC_OMAP5) += $(clock-common)
|
||||
|
@@ -46,7 +46,7 @@ DT_MACHINE_START(OMAP242X_DT, "Generic OMAP2420 (Flattened Device Tree)")
|
||||
.map_io = omap242x_map_io,
|
||||
.init_early = omap2420_init_early,
|
||||
.init_machine = omap_generic_init,
|
||||
.init_time = omap2_sync32k_timer_init,
|
||||
.init_time = omap_init_time,
|
||||
.dt_compat = omap242x_boards_compat,
|
||||
.restart = omap2xxx_restart,
|
||||
MACHINE_END
|
||||
@@ -63,7 +63,7 @@ DT_MACHINE_START(OMAP243X_DT, "Generic OMAP2430 (Flattened Device Tree)")
|
||||
.map_io = omap243x_map_io,
|
||||
.init_early = omap2430_init_early,
|
||||
.init_machine = omap_generic_init,
|
||||
.init_time = omap2_sync32k_timer_init,
|
||||
.init_time = omap_init_time,
|
||||
.dt_compat = omap243x_boards_compat,
|
||||
.restart = omap2xxx_restart,
|
||||
MACHINE_END
|
||||
@@ -82,7 +82,7 @@ DT_MACHINE_START(OMAP3_N900_DT, "Nokia RX-51 board")
|
||||
.init_early = omap3430_init_early,
|
||||
.init_machine = omap_generic_init,
|
||||
.init_late = omap3_init_late,
|
||||
.init_time = omap3_sync32k_timer_init,
|
||||
.init_time = omap_init_time,
|
||||
.dt_compat = n900_boards_compat,
|
||||
.restart = omap3xxx_restart,
|
||||
MACHINE_END
|
||||
@@ -100,7 +100,7 @@ DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)")
|
||||
.init_early = omap3430_init_early,
|
||||
.init_machine = omap_generic_init,
|
||||
.init_late = omap3_init_late,
|
||||
.init_time = omap3_sync32k_timer_init,
|
||||
.init_time = omap_init_time,
|
||||
.dt_compat = omap3_boards_compat,
|
||||
.restart = omap3xxx_restart,
|
||||
MACHINE_END
|
||||
@@ -117,7 +117,7 @@ DT_MACHINE_START(OMAP36XX_DT, "Generic OMAP36xx (Flattened Device Tree)")
|
||||
.init_early = omap3630_init_early,
|
||||
.init_machine = omap_generic_init,
|
||||
.init_late = omap3_init_late,
|
||||
.init_time = omap3_sync32k_timer_init,
|
||||
.init_time = omap_init_time,
|
||||
.dt_compat = omap36xx_boards_compat,
|
||||
.restart = omap3xxx_restart,
|
||||
MACHINE_END
|
||||
@@ -276,7 +276,7 @@ DT_MACHINE_START(AM43_DT, "Generic AM43 (Flattened Device Tree)")
|
||||
.init_late = am43xx_init_late,
|
||||
.init_irq = omap_gic_of_init,
|
||||
.init_machine = omap_generic_init,
|
||||
.init_time = omap3_gptimer_timer_init,
|
||||
.init_time = omap4_local_timer_init,
|
||||
.dt_compat = am43_boards_compat,
|
||||
.restart = omap44xx_restart,
|
||||
MACHINE_END
|
||||
|
@@ -424,6 +424,6 @@ MACHINE_START(OMAP_LDP, "OMAP LDP board")
|
||||
.init_irq = omap3_init_irq,
|
||||
.init_machine = omap_ldp_init,
|
||||
.init_late = omap3430_init_late,
|
||||
.init_time = omap3_sync32k_timer_init,
|
||||
.init_time = omap_init_time,
|
||||
.restart = omap3xxx_restart,
|
||||
MACHINE_END
|
||||
|
@@ -136,6 +136,6 @@ MACHINE_START(NOKIA_RX51, "Nokia RX-51 board")
|
||||
.init_irq = omap3_init_irq,
|
||||
.init_machine = rx51_init,
|
||||
.init_late = omap3430_init_late,
|
||||
.init_time = omap3_sync32k_timer_init,
|
||||
.init_time = omap_init_time,
|
||||
.restart = omap3xxx_restart,
|
||||
MACHINE_END
|
||||
|
@@ -1,122 +0,0 @@
|
||||
/*
|
||||
* OMAP34xx M2 divider clock code
|
||||
*
|
||||
* Copyright (C) 2007-2008 Texas Instruments, Inc.
|
||||
* Copyright (C) 2007-2010 Nokia Corporation
|
||||
*
|
||||
* Paul Walmsley
|
||||
* Jouni Högander
|
||||
*
|
||||
* Parts of this code are based on code written by
|
||||
* Richard Woodruff, Tony Lindgren, Tuukka Tikkanen, Karthik Dasu
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
#undef DEBUG
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include "clock.h"
|
||||
#include "clock3xxx.h"
|
||||
#include "sdrc.h"
|
||||
#include "sram.h"
|
||||
|
||||
#define CYCLES_PER_MHZ 1000000
|
||||
|
||||
struct clk *sdrc_ick_p, *arm_fck_p;
|
||||
|
||||
/*
|
||||
* CORE DPLL (DPLL3) M2 divider rate programming functions
|
||||
*
|
||||
* These call into SRAM code to do the actual CM writes, since the SDRAM
|
||||
* is clocked from DPLL3.
|
||||
*/
|
||||
|
||||
/**
|
||||
* omap3_core_dpll_m2_set_rate - set CORE DPLL M2 divider
|
||||
* @clk: struct clk * of DPLL to set
|
||||
* @rate: rounded target rate
|
||||
*
|
||||
* Program the DPLL M2 divider with the rounded target rate. Returns
|
||||
* -EINVAL upon error, or 0 upon success.
|
||||
*/
|
||||
int omap3_core_dpll_m2_set_rate(struct clk_hw *hw, unsigned long rate,
|
||||
unsigned long parent_rate)
|
||||
{
|
||||
struct clk_hw_omap *clk = to_clk_hw_omap(hw);
|
||||
u32 new_div = 0;
|
||||
u32 unlock_dll = 0;
|
||||
u32 c;
|
||||
unsigned long validrate, sdrcrate, _mpurate;
|
||||
struct omap_sdrc_params *sdrc_cs0;
|
||||
struct omap_sdrc_params *sdrc_cs1;
|
||||
int ret;
|
||||
unsigned long clkrate;
|
||||
|
||||
if (!clk || !rate)
|
||||
return -EINVAL;
|
||||
|
||||
new_div = DIV_ROUND_UP(parent_rate, rate);
|
||||
validrate = parent_rate / new_div;
|
||||
|
||||
if (validrate != rate)
|
||||
return -EINVAL;
|
||||
|
||||
sdrcrate = clk_get_rate(sdrc_ick_p);
|
||||
clkrate = clk_hw_get_rate(hw);
|
||||
if (rate > clkrate)
|
||||
sdrcrate <<= ((rate / clkrate) >> 1);
|
||||
else
|
||||
sdrcrate >>= ((clkrate / rate) >> 1);
|
||||
|
||||
ret = omap2_sdrc_get_params(sdrcrate, &sdrc_cs0, &sdrc_cs1);
|
||||
if (ret)
|
||||
return -EINVAL;
|
||||
|
||||
if (sdrcrate < MIN_SDRC_DLL_LOCK_FREQ) {
|
||||
pr_debug("clock: will unlock SDRC DLL\n");
|
||||
unlock_dll = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* XXX This only needs to be done when the CPU frequency changes
|
||||
*/
|
||||
_mpurate = clk_get_rate(arm_fck_p) / CYCLES_PER_MHZ;
|
||||
c = (_mpurate << SDRC_MPURATE_SCALE) >> SDRC_MPURATE_BASE_SHIFT;
|
||||
c += 1; /* for safety */
|
||||
c *= SDRC_MPURATE_LOOPS;
|
||||
c >>= SDRC_MPURATE_SCALE;
|
||||
if (c == 0)
|
||||
c = 1;
|
||||
|
||||
pr_debug("clock: changing CORE DPLL rate from %lu to %lu\n",
|
||||
clkrate, validrate);
|
||||
pr_debug("clock: SDRC CS0 timing params used: RFR %08x CTRLA %08x CTRLB %08x MR %08x\n",
|
||||
sdrc_cs0->rfr_ctrl, sdrc_cs0->actim_ctrla,
|
||||
sdrc_cs0->actim_ctrlb, sdrc_cs0->mr);
|
||||
if (sdrc_cs1)
|
||||
pr_debug("clock: SDRC CS1 timing params used: RFR %08x CTRLA %08x CTRLB %08x MR %08x\n",
|
||||
sdrc_cs1->rfr_ctrl, sdrc_cs1->actim_ctrla,
|
||||
sdrc_cs1->actim_ctrlb, sdrc_cs1->mr);
|
||||
|
||||
if (sdrc_cs1)
|
||||
omap3_configure_core_dpll(
|
||||
new_div, unlock_dll, c, rate > clkrate,
|
||||
sdrc_cs0->rfr_ctrl, sdrc_cs0->actim_ctrla,
|
||||
sdrc_cs0->actim_ctrlb, sdrc_cs0->mr,
|
||||
sdrc_cs1->rfr_ctrl, sdrc_cs1->actim_ctrla,
|
||||
sdrc_cs1->actim_ctrlb, sdrc_cs1->mr);
|
||||
else
|
||||
omap3_configure_core_dpll(
|
||||
new_div, unlock_dll, c, rate > clkrate,
|
||||
sdrc_cs0->rfr_ctrl, sdrc_cs0->actim_ctrla,
|
||||
sdrc_cs0->actim_ctrlb, sdrc_cs0->mr,
|
||||
0, 0, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
@@ -88,8 +88,7 @@ static inline int omap_mux_late_init(void)
|
||||
|
||||
extern void omap2_init_common_infrastructure(void);
|
||||
|
||||
extern void omap2_sync32k_timer_init(void);
|
||||
extern void omap3_sync32k_timer_init(void);
|
||||
extern void omap_init_time(void);
|
||||
extern void omap3_secure_sync32k_timer_init(void);
|
||||
extern void omap3_gptimer_timer_init(void);
|
||||
extern void omap4_local_timer_init(void);
|
||||
|
@@ -33,7 +33,6 @@
|
||||
#include "common.h"
|
||||
#include "mux.h"
|
||||
#include "control.h"
|
||||
#include "devices.h"
|
||||
#include "display.h"
|
||||
|
||||
#define L3_MODULES_MAX_LEN 12
|
||||
@@ -67,58 +66,6 @@ static int __init omap3_l3_init(void)
|
||||
}
|
||||
omap_postcore_initcall(omap3_l3_init);
|
||||
|
||||
#if defined(CONFIG_IOMMU_API)
|
||||
|
||||
#include <linux/platform_data/iommu-omap.h>
|
||||
|
||||
static struct resource omap3isp_resources[] = {
|
||||
{
|
||||
.start = OMAP3430_ISP_BASE,
|
||||
.end = OMAP3430_ISP_BASE + 0x12fc,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = OMAP3430_ISP_BASE2,
|
||||
.end = OMAP3430_ISP_BASE2 + 0x0600,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = 24 + OMAP_INTC_START,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
}
|
||||
};
|
||||
|
||||
static struct platform_device omap3isp_device = {
|
||||
.name = "omap3isp",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(omap3isp_resources),
|
||||
.resource = omap3isp_resources,
|
||||
};
|
||||
|
||||
static struct omap_iommu_arch_data omap3_isp_iommu = {
|
||||
.name = "mmu_isp",
|
||||
};
|
||||
|
||||
int omap3_init_camera(struct isp_platform_data *pdata)
|
||||
{
|
||||
if (of_have_populated_dt())
|
||||
omap3_isp_iommu.name = "480bd400.mmu";
|
||||
|
||||
omap3isp_device.dev.platform_data = pdata;
|
||||
omap3isp_device.dev.archdata.iommu = &omap3_isp_iommu;
|
||||
|
||||
return platform_device_register(&omap3isp_device);
|
||||
}
|
||||
|
||||
#else /* !CONFIG_IOMMU_API */
|
||||
|
||||
int omap3_init_camera(struct isp_platform_data *pdata)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_OMAP2PLUS_MBOX) || defined(CONFIG_OMAP2PLUS_MBOX_MODULE)
|
||||
static inline void __init omap_init_mbox(void)
|
||||
{
|
||||
|
@@ -1,19 +0,0 @@
|
||||
/*
|
||||
* arch/arm/mach-omap2/devices.h
|
||||
*
|
||||
* OMAP2 platform device setup/initialization
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
#ifndef __ARCH_ARM_MACH_OMAP_DEVICES_H
|
||||
#define __ARCH_ARM_MACH_OMAP_DEVICES_H
|
||||
|
||||
struct isp_platform_data;
|
||||
|
||||
int omap3_init_camera(struct isp_platform_data *pdata);
|
||||
|
||||
#endif
|
@@ -57,15 +57,15 @@ int omap_type(void)
|
||||
if (val < OMAP2_DEVICETYPE_MASK)
|
||||
return val;
|
||||
|
||||
if (cpu_is_omap24xx()) {
|
||||
if (soc_is_omap24xx()) {
|
||||
val = omap_ctrl_readl(OMAP24XX_CONTROL_STATUS);
|
||||
} else if (cpu_is_ti81xx()) {
|
||||
} else if (soc_is_ti81xx()) {
|
||||
val = omap_ctrl_readl(TI81XX_CONTROL_STATUS);
|
||||
} else if (soc_is_am33xx() || soc_is_am43xx()) {
|
||||
val = omap_ctrl_readl(AM33XX_CONTROL_STATUS);
|
||||
} else if (cpu_is_omap34xx()) {
|
||||
} else if (soc_is_omap34xx()) {
|
||||
val = omap_ctrl_readl(OMAP343X_CONTROL_STATUS);
|
||||
} else if (cpu_is_omap44xx()) {
|
||||
} else if (soc_is_omap44xx()) {
|
||||
val = omap_ctrl_readl(OMAP4_CTRL_MODULE_CORE_STATUS);
|
||||
} else if (soc_is_omap54xx() || soc_is_dra7xx()) {
|
||||
val = omap_ctrl_readl(OMAP5XXX_CONTROL_STATUS);
|
||||
@@ -122,7 +122,7 @@ static u16 tap_prod_id;
|
||||
|
||||
void omap_get_die_id(struct omap_die_id *odi)
|
||||
{
|
||||
if (cpu_is_omap44xx() || soc_is_omap54xx() || soc_is_dra7xx()) {
|
||||
if (soc_is_omap44xx() || soc_is_omap54xx() || soc_is_dra7xx()) {
|
||||
odi->id_0 = read_tap_reg(OMAP_TAP_DIE_ID_44XX_0);
|
||||
odi->id_1 = read_tap_reg(OMAP_TAP_DIE_ID_44XX_1);
|
||||
odi->id_2 = read_tap_reg(OMAP_TAP_DIE_ID_44XX_2);
|
||||
@@ -218,17 +218,17 @@ static void __init omap3_cpuinfo(void)
|
||||
* on available features. Upon detection, update the CPU id
|
||||
* and CPU class bits.
|
||||
*/
|
||||
if (cpu_is_omap3630()) {
|
||||
if (soc_is_omap3630()) {
|
||||
cpu_name = "OMAP3630";
|
||||
} else if (soc_is_am35xx()) {
|
||||
cpu_name = (omap3_has_sgx()) ? "AM3517" : "AM3505";
|
||||
} else if (cpu_is_ti816x()) {
|
||||
} else if (soc_is_ti816x()) {
|
||||
cpu_name = "TI816X";
|
||||
} else if (soc_is_am335x()) {
|
||||
cpu_name = "AM335X";
|
||||
} else if (soc_is_am437x()) {
|
||||
cpu_name = "AM437x";
|
||||
} else if (cpu_is_ti814x()) {
|
||||
} else if (soc_is_ti814x()) {
|
||||
cpu_name = "TI814X";
|
||||
} else if (omap3_has_iva() && omap3_has_sgx()) {
|
||||
/* OMAP3430, OMAP3525, OMAP3515, OMAP3503 devices */
|
||||
@@ -275,11 +275,11 @@ void __init omap3xxx_check_features(void)
|
||||
OMAP3_CHECK_FEATURE(status, SGX);
|
||||
OMAP3_CHECK_FEATURE(status, NEON);
|
||||
OMAP3_CHECK_FEATURE(status, ISP);
|
||||
if (cpu_is_omap3630())
|
||||
if (soc_is_omap3630())
|
||||
omap_features |= OMAP3_HAS_192MHZ_CLK;
|
||||
if (cpu_is_omap3430() || cpu_is_omap3630())
|
||||
if (soc_is_omap3430() || soc_is_omap3630())
|
||||
omap_features |= OMAP3_HAS_IO_WAKEUP;
|
||||
if (cpu_is_omap3630() || omap_rev() == OMAP3430_REV_ES3_1 ||
|
||||
if (soc_is_omap3630() || omap_rev() == OMAP3430_REV_ES3_1 ||
|
||||
omap_rev() == OMAP3430_REV_ES3_1_2)
|
||||
omap_features |= OMAP3_HAS_IO_CHAIN_CTRL;
|
||||
|
||||
@@ -701,7 +701,7 @@ void __init omap2_set_globals_tap(u32 class, void __iomem *tap)
|
||||
tap_base = tap;
|
||||
|
||||
/* XXX What is this intended to do? */
|
||||
if (cpu_is_omap34xx())
|
||||
if (soc_is_omap34xx())
|
||||
tap_prod_id = 0x0210;
|
||||
else
|
||||
tap_prod_id = 0x0208;
|
||||
@@ -719,11 +719,11 @@ static const char * const omap_types[] = {
|
||||
|
||||
static const char * __init omap_get_family(void)
|
||||
{
|
||||
if (cpu_is_omap24xx())
|
||||
if (soc_is_omap24xx())
|
||||
return kasprintf(GFP_KERNEL, "OMAP2");
|
||||
else if (cpu_is_omap34xx())
|
||||
else if (soc_is_omap34xx())
|
||||
return kasprintf(GFP_KERNEL, "OMAP3");
|
||||
else if (cpu_is_omap44xx())
|
||||
else if (soc_is_omap44xx())
|
||||
return kasprintf(GFP_KERNEL, "OMAP4");
|
||||
else if (soc_is_omap54xx())
|
||||
return kasprintf(GFP_KERNEL, "OMAP5");
|
||||
|
@@ -27,7 +27,7 @@
|
||||
* platform-specific code to shutdown a CPU
|
||||
* Called with IRQs disabled
|
||||
*/
|
||||
void __ref omap4_cpu_die(unsigned int cpu)
|
||||
void omap4_cpu_die(unsigned int cpu)
|
||||
{
|
||||
unsigned int boot_cpu = 0;
|
||||
void __iomem *base = omap_get_wakeupgen_base();
|
||||
|
@@ -20,6 +20,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/irqchip.h>
|
||||
#include <linux/irqdomain.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/platform_device.h>
|
||||
@@ -330,7 +331,7 @@ static int irq_cpu_hotplug_notify(struct notifier_block *self,
|
||||
return NOTIFY_OK;
|
||||
}
|
||||
|
||||
static struct notifier_block __refdata irq_hotplug_notifier = {
|
||||
static struct notifier_block irq_hotplug_notifier = {
|
||||
.notifier_call = irq_cpu_hotplug_notify,
|
||||
};
|
||||
|
||||
@@ -540,9 +541,4 @@ static int __init wakeupgen_init(struct device_node *node,
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* We cannot use the IRQCHIP_DECLARE macro that lives in
|
||||
* drivers/irqchip, so we're forced to roll our own. Not very nice.
|
||||
*/
|
||||
OF_DECLARE_2(irqchip, ti_wakeupgen, "ti,omap4-wugen-mpu", wakeupgen_init);
|
||||
IRQCHIP_DECLARE(ti_wakeupgen, "ti,omap4-wugen-mpu", wakeupgen_init);
|
||||
|
@@ -152,20 +152,10 @@ struct omap_hwmod_ocp_if am33xx_cpgmac0__mdio = {
|
||||
.user = OCP_USER_MPU,
|
||||
};
|
||||
|
||||
static struct omap_hwmod_addr_space am33xx_elm_addr_space[] = {
|
||||
{
|
||||
.pa_start = 0x48080000,
|
||||
.pa_end = 0x48080000 + SZ_8K - 1,
|
||||
.flags = ADDR_TYPE_RT
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
struct omap_hwmod_ocp_if am33xx_l4_ls__elm = {
|
||||
.master = &am33xx_l4_ls_hwmod,
|
||||
.slave = &am33xx_elm_hwmod,
|
||||
.clk = "l4ls_gclk",
|
||||
.addr = am33xx_elm_addr_space,
|
||||
.user = OCP_USER_MPU,
|
||||
};
|
||||
|
||||
@@ -285,20 +275,10 @@ struct omap_hwmod_ocp_if am33xx_epwmss2__ehrpwm2 = {
|
||||
};
|
||||
|
||||
/* l3s cfg -> gpmc */
|
||||
static struct omap_hwmod_addr_space am33xx_gpmc_addr_space[] = {
|
||||
{
|
||||
.pa_start = 0x50000000,
|
||||
.pa_end = 0x50000000 + SZ_8K - 1,
|
||||
.flags = ADDR_TYPE_RT,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
struct omap_hwmod_ocp_if am33xx_l3_s__gpmc = {
|
||||
.master = &am33xx_l3_s_hwmod,
|
||||
.slave = &am33xx_gpmc_hwmod,
|
||||
.clk = "l3s_gclk",
|
||||
.addr = am33xx_gpmc_addr_space,
|
||||
.user = OCP_USER_MPU,
|
||||
};
|
||||
|
||||
|
@@ -26,7 +26,6 @@
|
||||
#include <linux/platform_data/asoc-ti-mcbsp.h>
|
||||
#include <linux/platform_data/spi-omap2-mcspi.h>
|
||||
#include <linux/platform_data/iommu-omap.h>
|
||||
#include <linux/platform_data/mailbox-omap.h>
|
||||
#include <plat/dmtimer.h>
|
||||
|
||||
#include "soc.h"
|
||||
@@ -1506,26 +1505,9 @@ static struct omap_hwmod_class omap3xxx_mailbox_hwmod_class = {
|
||||
.sysc = &omap3xxx_mailbox_sysc,
|
||||
};
|
||||
|
||||
static struct omap_mbox_dev_info omap3xxx_mailbox_info[] = {
|
||||
{ .name = "dsp", .tx_id = 0, .rx_id = 1 },
|
||||
};
|
||||
|
||||
static struct omap_mbox_pdata omap3xxx_mailbox_attrs = {
|
||||
.num_users = 2,
|
||||
.num_fifos = 2,
|
||||
.info_cnt = ARRAY_SIZE(omap3xxx_mailbox_info),
|
||||
.info = omap3xxx_mailbox_info,
|
||||
};
|
||||
|
||||
static struct omap_hwmod_irq_info omap3xxx_mailbox_irqs[] = {
|
||||
{ .irq = 26 + OMAP_INTC_START, },
|
||||
{ .irq = -1 },
|
||||
};
|
||||
|
||||
static struct omap_hwmod omap3xxx_mailbox_hwmod = {
|
||||
.name = "mailbox",
|
||||
.class = &omap3xxx_mailbox_hwmod_class,
|
||||
.mpu_irqs = omap3xxx_mailbox_irqs,
|
||||
.main_clk = "mailboxes_ick",
|
||||
.prcm = {
|
||||
.omap2 = {
|
||||
@@ -1536,7 +1518,6 @@ static struct omap_hwmod omap3xxx_mailbox_hwmod = {
|
||||
.idlest_idle_bit = OMAP3430_ST_MAILBOXES_SHIFT,
|
||||
},
|
||||
},
|
||||
.dev_attr = &omap3xxx_mailbox_attrs,
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -3276,20 +3257,10 @@ static struct omap_hwmod_ocp_if omap3xxx_l4_per__mcbsp3_sidetone = {
|
||||
.user = OCP_USER_MPU,
|
||||
};
|
||||
|
||||
static struct omap_hwmod_addr_space omap3xxx_mailbox_addrs[] = {
|
||||
{
|
||||
.pa_start = 0x48094000,
|
||||
.pa_end = 0x480941ff,
|
||||
.flags = ADDR_TYPE_RT,
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
/* l4_core -> mailbox */
|
||||
static struct omap_hwmod_ocp_if omap3xxx_l4_core__mailbox = {
|
||||
.master = &omap3xxx_l4_core_hwmod,
|
||||
.slave = &omap3xxx_mailbox_hwmod,
|
||||
.addr = omap3xxx_mailbox_addrs,
|
||||
.user = OCP_USER_MPU | OCP_USER_SDMA,
|
||||
};
|
||||
|
||||
|
@@ -4471,21 +4471,11 @@ static struct omap_hwmod_ocp_if omap44xx_l4_cfg__smartreflex_mpu = {
|
||||
.user = OCP_USER_MPU | OCP_USER_SDMA,
|
||||
};
|
||||
|
||||
static struct omap_hwmod_addr_space omap44xx_spinlock_addrs[] = {
|
||||
{
|
||||
.pa_start = 0x4a0f6000,
|
||||
.pa_end = 0x4a0f6fff,
|
||||
.flags = ADDR_TYPE_RT
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
/* l4_cfg -> spinlock */
|
||||
static struct omap_hwmod_ocp_if omap44xx_l4_cfg__spinlock = {
|
||||
.master = &omap44xx_l4_cfg_hwmod,
|
||||
.slave = &omap44xx_spinlock_hwmod,
|
||||
.clk = "l4_div_ck",
|
||||
.addr = omap44xx_spinlock_addrs,
|
||||
.user = OCP_USER_MPU | OCP_USER_SDMA,
|
||||
};
|
||||
|
||||
|
@@ -1844,8 +1844,7 @@ static struct omap_hwmod_class_sysconfig omap54xx_usb_host_hs_sysc = {
|
||||
.rev_offs = 0x0000,
|
||||
.sysc_offs = 0x0010,
|
||||
.sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_RESET_STATUS |
|
||||
SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
|
||||
SYSC_HAS_RESET_STATUS),
|
||||
SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET),
|
||||
.idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
|
||||
SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
|
||||
MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
|
||||
|
@@ -2566,21 +2566,11 @@ static struct omap_hwmod_ocp_if dra7xx_l3_main_1__hdmi = {
|
||||
.user = OCP_USER_MPU | OCP_USER_SDMA,
|
||||
};
|
||||
|
||||
static struct omap_hwmod_addr_space dra7xx_elm_addrs[] = {
|
||||
{
|
||||
.pa_start = 0x48078000,
|
||||
.pa_end = 0x48078fff,
|
||||
.flags = ADDR_TYPE_RT
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
/* l4_per1 -> elm */
|
||||
static struct omap_hwmod_ocp_if dra7xx_l4_per1__elm = {
|
||||
.master = &dra7xx_l4_per1_hwmod,
|
||||
.slave = &dra7xx_elm_hwmod,
|
||||
.clk = "l3_iclk_div",
|
||||
.addr = dra7xx_elm_addrs,
|
||||
.user = OCP_USER_MPU | OCP_USER_SDMA,
|
||||
};
|
||||
|
||||
@@ -2648,21 +2638,11 @@ static struct omap_hwmod_ocp_if dra7xx_l4_per1__gpio8 = {
|
||||
.user = OCP_USER_MPU | OCP_USER_SDMA,
|
||||
};
|
||||
|
||||
static struct omap_hwmod_addr_space dra7xx_gpmc_addrs[] = {
|
||||
{
|
||||
.pa_start = 0x50000000,
|
||||
.pa_end = 0x500003ff,
|
||||
.flags = ADDR_TYPE_RT
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
/* l3_main_1 -> gpmc */
|
||||
static struct omap_hwmod_ocp_if dra7xx_l3_main_1__gpmc = {
|
||||
.master = &dra7xx_l3_main_1_hwmod,
|
||||
.slave = &dra7xx_gpmc_hwmod,
|
||||
.clk = "l3_iclk_div",
|
||||
.addr = dra7xx_gpmc_addrs,
|
||||
.user = OCP_USER_MPU | OCP_USER_SDMA,
|
||||
};
|
||||
|
||||
@@ -3029,21 +3009,11 @@ static struct omap_hwmod_ocp_if dra7xx_l4_cfg__smartreflex_mpu = {
|
||||
.user = OCP_USER_MPU | OCP_USER_SDMA,
|
||||
};
|
||||
|
||||
static struct omap_hwmod_addr_space dra7xx_spinlock_addrs[] = {
|
||||
{
|
||||
.pa_start = 0x4a0f6000,
|
||||
.pa_end = 0x4a0f6fff,
|
||||
.flags = ADDR_TYPE_RT
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
/* l4_cfg -> spinlock */
|
||||
static struct omap_hwmod_ocp_if dra7xx_l4_cfg__spinlock = {
|
||||
.master = &dra7xx_l4_cfg_hwmod,
|
||||
.slave = &dra7xx_spinlock_hwmod,
|
||||
.clk = "l3_iclk_div",
|
||||
.addr = dra7xx_spinlock_addrs,
|
||||
.user = OCP_USER_MPU | OCP_USER_SDMA,
|
||||
};
|
||||
|
||||
|
@@ -210,7 +210,7 @@ static inline int omap4plus_init_static_deps(const struct static_dep_map *map)
|
||||
}
|
||||
|
||||
map++;
|
||||
};
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -582,7 +582,7 @@ void __init omap3xxx_powerdomains_init(void)
|
||||
|
||||
/* Only 81xx needs custom pwrdm_operations */
|
||||
if (!cpu_is_ti81xx())
|
||||
pwrdm_register_platform_funcs(&omap3_pwrdm_operations);;
|
||||
pwrdm_register_platform_funcs(&omap3_pwrdm_operations);
|
||||
|
||||
rev = omap_rev();
|
||||
|
||||
|
@@ -129,9 +129,9 @@ int omap_type(void);
|
||||
|
||||
/*
|
||||
* omap_rev bits:
|
||||
* CPU id bits (0730, 1510, 1710, 2422...) [31:16]
|
||||
* CPU revision (See _REV_ defined in cpu.h) [15:08]
|
||||
* CPU class bits (15xx, 16xx, 24xx, 34xx...) [07:00]
|
||||
* SoC id bits (0730, 1510, 1710, 2422...) [31:16]
|
||||
* SoC revision (See _REV_ defined in cpu.h) [15:08]
|
||||
* SoC class bits (15xx, 16xx, 24xx, 34xx...) [07:00]
|
||||
*/
|
||||
unsigned int omap_rev(void);
|
||||
|
||||
@@ -141,20 +141,20 @@ static inline int soc_is_omap(void)
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the CPU revision for OMAP devices
|
||||
* Get the SoC revision for OMAP devices
|
||||
*/
|
||||
#define GET_OMAP_REVISION() ((omap_rev() >> 8) & 0xff)
|
||||
|
||||
/*
|
||||
* Macros to group OMAP into cpu classes.
|
||||
* These can be used in most places.
|
||||
* cpu_is_omap24xx(): True for OMAP2420, OMAP2422, OMAP2423, OMAP2430
|
||||
* cpu_is_omap242x(): True for OMAP2420, OMAP2422, OMAP2423
|
||||
* cpu_is_omap243x(): True for OMAP2430
|
||||
* cpu_is_omap343x(): True for OMAP3430
|
||||
* cpu_is_omap443x(): True for OMAP4430
|
||||
* cpu_is_omap446x(): True for OMAP4460
|
||||
* cpu_is_omap447x(): True for OMAP4470
|
||||
* soc_is_omap24xx(): True for OMAP2420, OMAP2422, OMAP2423, OMAP2430
|
||||
* soc_is_omap242x(): True for OMAP2420, OMAP2422, OMAP2423
|
||||
* soc_is_omap243x(): True for OMAP2430
|
||||
* soc_is_omap343x(): True for OMAP3430
|
||||
* soc_is_omap443x(): True for OMAP4430
|
||||
* soc_is_omap446x(): True for OMAP4460
|
||||
* soc_is_omap447x(): True for OMAP4470
|
||||
* soc_is_omap543x(): True for OMAP5430, OMAP5432
|
||||
*/
|
||||
#define GET_OMAP_CLASS (omap_rev() & 0xff)
|
||||
@@ -225,23 +225,23 @@ IS_TI_SUBCLASS(814x, 0x814)
|
||||
IS_AM_SUBCLASS(335x, 0x335)
|
||||
IS_AM_SUBCLASS(437x, 0x437)
|
||||
|
||||
#define cpu_is_omap24xx() 0
|
||||
#define cpu_is_omap242x() 0
|
||||
#define cpu_is_omap243x() 0
|
||||
#define cpu_is_omap34xx() 0
|
||||
#define cpu_is_omap343x() 0
|
||||
#define cpu_is_ti81xx() 0
|
||||
#define cpu_is_ti816x() 0
|
||||
#define cpu_is_ti814x() 0
|
||||
#define soc_is_omap24xx() 0
|
||||
#define soc_is_omap242x() 0
|
||||
#define soc_is_omap243x() 0
|
||||
#define soc_is_omap34xx() 0
|
||||
#define soc_is_omap343x() 0
|
||||
#define soc_is_ti81xx() 0
|
||||
#define soc_is_ti816x() 0
|
||||
#define soc_is_ti814x() 0
|
||||
#define soc_is_am35xx() 0
|
||||
#define soc_is_am33xx() 0
|
||||
#define soc_is_am335x() 0
|
||||
#define soc_is_am43xx() 0
|
||||
#define soc_is_am437x() 0
|
||||
#define cpu_is_omap44xx() 0
|
||||
#define cpu_is_omap443x() 0
|
||||
#define cpu_is_omap446x() 0
|
||||
#define cpu_is_omap447x() 0
|
||||
#define soc_is_omap44xx() 0
|
||||
#define soc_is_omap443x() 0
|
||||
#define soc_is_omap446x() 0
|
||||
#define soc_is_omap447x() 0
|
||||
#define soc_is_omap54xx() 0
|
||||
#define soc_is_omap543x() 0
|
||||
#define soc_is_dra7xx() 0
|
||||
@@ -250,54 +250,54 @@ IS_AM_SUBCLASS(437x, 0x437)
|
||||
|
||||
#if defined(MULTI_OMAP2)
|
||||
# if defined(CONFIG_ARCH_OMAP2)
|
||||
# undef cpu_is_omap24xx
|
||||
# define cpu_is_omap24xx() is_omap24xx()
|
||||
# undef soc_is_omap24xx
|
||||
# define soc_is_omap24xx() is_omap24xx()
|
||||
# endif
|
||||
# if defined (CONFIG_SOC_OMAP2420)
|
||||
# undef cpu_is_omap242x
|
||||
# define cpu_is_omap242x() is_omap242x()
|
||||
# undef soc_is_omap242x
|
||||
# define soc_is_omap242x() is_omap242x()
|
||||
# endif
|
||||
# if defined (CONFIG_SOC_OMAP2430)
|
||||
# undef cpu_is_omap243x
|
||||
# define cpu_is_omap243x() is_omap243x()
|
||||
# undef soc_is_omap243x
|
||||
# define soc_is_omap243x() is_omap243x()
|
||||
# endif
|
||||
# if defined(CONFIG_ARCH_OMAP3)
|
||||
# undef cpu_is_omap34xx
|
||||
# undef cpu_is_omap343x
|
||||
# define cpu_is_omap34xx() is_omap34xx()
|
||||
# define cpu_is_omap343x() is_omap343x()
|
||||
# undef soc_is_omap34xx
|
||||
# undef soc_is_omap343x
|
||||
# define soc_is_omap34xx() is_omap34xx()
|
||||
# define soc_is_omap343x() is_omap343x()
|
||||
# endif
|
||||
#else
|
||||
# if defined(CONFIG_ARCH_OMAP2)
|
||||
# undef cpu_is_omap24xx
|
||||
# define cpu_is_omap24xx() 1
|
||||
# undef soc_is_omap24xx
|
||||
# define soc_is_omap24xx() 1
|
||||
# endif
|
||||
# if defined(CONFIG_SOC_OMAP2420)
|
||||
# undef cpu_is_omap242x
|
||||
# define cpu_is_omap242x() 1
|
||||
# undef soc_is_omap242x
|
||||
# define soc_is_omap242x() 1
|
||||
# endif
|
||||
# if defined(CONFIG_SOC_OMAP2430)
|
||||
# undef cpu_is_omap243x
|
||||
# define cpu_is_omap243x() 1
|
||||
# undef soc_is_omap243x
|
||||
# define soc_is_omap243x() 1
|
||||
# endif
|
||||
# if defined(CONFIG_ARCH_OMAP3)
|
||||
# undef cpu_is_omap34xx
|
||||
# define cpu_is_omap34xx() 1
|
||||
# undef soc_is_omap34xx
|
||||
# define soc_is_omap34xx() 1
|
||||
# endif
|
||||
# if defined(CONFIG_SOC_OMAP3430)
|
||||
# undef cpu_is_omap343x
|
||||
# define cpu_is_omap343x() 1
|
||||
# undef soc_is_omap343x
|
||||
# define soc_is_omap343x() 1
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Macros to detect individual cpu types.
|
||||
* These are only rarely needed.
|
||||
* cpu_is_omap2420(): True for OMAP2420
|
||||
* cpu_is_omap2422(): True for OMAP2422
|
||||
* cpu_is_omap2423(): True for OMAP2423
|
||||
* cpu_is_omap2430(): True for OMAP2430
|
||||
* cpu_is_omap3430(): True for OMAP3430
|
||||
* soc_is_omap2420(): True for OMAP2420
|
||||
* soc_is_omap2422(): True for OMAP2422
|
||||
* soc_is_omap2423(): True for OMAP2423
|
||||
* soc_is_omap2430(): True for OMAP2430
|
||||
* soc_is_omap3430(): True for OMAP3430
|
||||
*/
|
||||
#define GET_OMAP_TYPE ((omap_rev() >> 16) & 0xffff)
|
||||
|
||||
@@ -313,51 +313,51 @@ IS_OMAP_TYPE(2423, 0x2423)
|
||||
IS_OMAP_TYPE(2430, 0x2430)
|
||||
IS_OMAP_TYPE(3430, 0x3430)
|
||||
|
||||
#define cpu_is_omap2420() 0
|
||||
#define cpu_is_omap2422() 0
|
||||
#define cpu_is_omap2423() 0
|
||||
#define cpu_is_omap2430() 0
|
||||
#define cpu_is_omap3430() 0
|
||||
#define cpu_is_omap3630() 0
|
||||
#define soc_is_omap2420() 0
|
||||
#define soc_is_omap2422() 0
|
||||
#define soc_is_omap2423() 0
|
||||
#define soc_is_omap2430() 0
|
||||
#define soc_is_omap3430() 0
|
||||
#define soc_is_omap3630() 0
|
||||
#define soc_is_omap5430() 0
|
||||
|
||||
/* These are needed for the common code */
|
||||
#ifdef CONFIG_ARCH_OMAP2PLUS
|
||||
#define cpu_is_omap7xx() 0
|
||||
#define cpu_is_omap15xx() 0
|
||||
#define cpu_is_omap16xx() 0
|
||||
#define cpu_is_omap1510() 0
|
||||
#define cpu_is_omap1610() 0
|
||||
#define cpu_is_omap1611() 0
|
||||
#define cpu_is_omap1621() 0
|
||||
#define cpu_is_omap1710() 0
|
||||
#define soc_is_omap7xx() 0
|
||||
#define soc_is_omap15xx() 0
|
||||
#define soc_is_omap16xx() 0
|
||||
#define soc_is_omap1510() 0
|
||||
#define soc_is_omap1610() 0
|
||||
#define soc_is_omap1611() 0
|
||||
#define soc_is_omap1621() 0
|
||||
#define soc_is_omap1710() 0
|
||||
#define cpu_class_is_omap1() 0
|
||||
#define cpu_class_is_omap2() 1
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP2)
|
||||
# undef cpu_is_omap2420
|
||||
# undef cpu_is_omap2422
|
||||
# undef cpu_is_omap2423
|
||||
# undef cpu_is_omap2430
|
||||
# define cpu_is_omap2420() is_omap2420()
|
||||
# define cpu_is_omap2422() is_omap2422()
|
||||
# define cpu_is_omap2423() is_omap2423()
|
||||
# define cpu_is_omap2430() is_omap2430()
|
||||
# undef soc_is_omap2420
|
||||
# undef soc_is_omap2422
|
||||
# undef soc_is_omap2423
|
||||
# undef soc_is_omap2430
|
||||
# define soc_is_omap2420() is_omap2420()
|
||||
# define soc_is_omap2422() is_omap2422()
|
||||
# define soc_is_omap2423() is_omap2423()
|
||||
# define soc_is_omap2430() is_omap2430()
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP3)
|
||||
# undef cpu_is_omap3430
|
||||
# undef cpu_is_ti81xx
|
||||
# undef cpu_is_ti816x
|
||||
# undef cpu_is_ti814x
|
||||
# undef soc_is_omap3430
|
||||
# undef soc_is_ti81xx
|
||||
# undef soc_is_ti816x
|
||||
# undef soc_is_ti814x
|
||||
# undef soc_is_am35xx
|
||||
# define cpu_is_omap3430() is_omap3430()
|
||||
# undef cpu_is_omap3630
|
||||
# define cpu_is_omap3630() is_omap363x()
|
||||
# define cpu_is_ti81xx() is_ti81xx()
|
||||
# define cpu_is_ti816x() is_ti816x()
|
||||
# define cpu_is_ti814x() is_ti814x()
|
||||
# define soc_is_omap3430() is_omap3430()
|
||||
# undef soc_is_omap3630
|
||||
# define soc_is_omap3630() is_omap363x()
|
||||
# define soc_is_ti81xx() is_ti81xx()
|
||||
# define soc_is_ti816x() is_ti816x()
|
||||
# define soc_is_ti814x() is_ti814x()
|
||||
# define soc_is_am35xx() is_am35xx()
|
||||
#endif
|
||||
|
||||
@@ -376,14 +376,14 @@ IS_OMAP_TYPE(3430, 0x3430)
|
||||
#endif
|
||||
|
||||
# if defined(CONFIG_ARCH_OMAP4)
|
||||
# undef cpu_is_omap44xx
|
||||
# undef cpu_is_omap443x
|
||||
# undef cpu_is_omap446x
|
||||
# undef cpu_is_omap447x
|
||||
# define cpu_is_omap44xx() is_omap44xx()
|
||||
# define cpu_is_omap443x() is_omap443x()
|
||||
# define cpu_is_omap446x() is_omap446x()
|
||||
# define cpu_is_omap447x() is_omap447x()
|
||||
# undef soc_is_omap44xx
|
||||
# undef soc_is_omap443x
|
||||
# undef soc_is_omap446x
|
||||
# undef soc_is_omap447x
|
||||
# define soc_is_omap44xx() is_omap44xx()
|
||||
# define soc_is_omap443x() is_omap443x()
|
||||
# define soc_is_omap446x() is_omap446x()
|
||||
# define soc_is_omap447x() is_omap447x()
|
||||
# endif
|
||||
|
||||
# if defined(CONFIG_SOC_OMAP5)
|
||||
@@ -556,5 +556,22 @@ level(__##fn);
|
||||
#define omap_late_initcall(fn) omap_initcall(late_initcall, fn)
|
||||
#define omap_late_initcall_sync(fn) omap_initcall(late_initcall_sync, fn)
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
/* Legacy defines, these can be removed when users are removed */
|
||||
#define cpu_is_omap2420() soc_is_omap2420()
|
||||
#define cpu_is_omap2422() soc_is_omap2422()
|
||||
#define cpu_is_omap242x() soc_is_omap242x()
|
||||
#define cpu_is_omap2430() soc_is_omap2430()
|
||||
#define cpu_is_omap243x() soc_is_omap243x()
|
||||
#define cpu_is_omap24xx() soc_is_omap24xx()
|
||||
#define cpu_is_omap3430() soc_is_omap3430()
|
||||
#define cpu_is_omap343x() soc_is_omap343x()
|
||||
#define cpu_is_omap34xx() soc_is_omap34xx()
|
||||
#define cpu_is_omap3630() soc_is_omap3630()
|
||||
#define cpu_is_omap443x() soc_is_omap443x()
|
||||
#define cpu_is_omap446x() soc_is_omap446x()
|
||||
#define cpu_is_omap44xx() soc_is_omap44xx()
|
||||
#define cpu_is_ti814x() soc_is_ti814x()
|
||||
#define cpu_is_ti816x() soc_is_ti816x()
|
||||
#define cpu_is_ti81xx() soc_is_ti81xx()
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
@@ -211,35 +211,10 @@ static inline int omap243x_sram_init(void)
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP3
|
||||
|
||||
static u32 (*_omap3_sram_configure_core_dpll)(
|
||||
u32 m2, u32 unlock_dll, u32 f, u32 inc,
|
||||
u32 sdrc_rfr_ctrl_0, u32 sdrc_actim_ctrl_a_0,
|
||||
u32 sdrc_actim_ctrl_b_0, u32 sdrc_mr_0,
|
||||
u32 sdrc_rfr_ctrl_1, u32 sdrc_actim_ctrl_a_1,
|
||||
u32 sdrc_actim_ctrl_b_1, u32 sdrc_mr_1);
|
||||
|
||||
u32 omap3_configure_core_dpll(u32 m2, u32 unlock_dll, u32 f, u32 inc,
|
||||
u32 sdrc_rfr_ctrl_0, u32 sdrc_actim_ctrl_a_0,
|
||||
u32 sdrc_actim_ctrl_b_0, u32 sdrc_mr_0,
|
||||
u32 sdrc_rfr_ctrl_1, u32 sdrc_actim_ctrl_a_1,
|
||||
u32 sdrc_actim_ctrl_b_1, u32 sdrc_mr_1)
|
||||
{
|
||||
BUG_ON(!_omap3_sram_configure_core_dpll);
|
||||
return _omap3_sram_configure_core_dpll(
|
||||
m2, unlock_dll, f, inc,
|
||||
sdrc_rfr_ctrl_0, sdrc_actim_ctrl_a_0,
|
||||
sdrc_actim_ctrl_b_0, sdrc_mr_0,
|
||||
sdrc_rfr_ctrl_1, sdrc_actim_ctrl_a_1,
|
||||
sdrc_actim_ctrl_b_1, sdrc_mr_1);
|
||||
}
|
||||
|
||||
void omap3_sram_restore_context(void)
|
||||
{
|
||||
omap_sram_reset();
|
||||
|
||||
_omap3_sram_configure_core_dpll =
|
||||
omap_sram_push(omap3_sram_configure_core_dpll,
|
||||
omap3_sram_configure_core_dpll_sz);
|
||||
omap_push_sram_idle();
|
||||
}
|
||||
|
||||
|
@@ -15,12 +15,6 @@ extern void omap2_sram_reprogram_sdrc(u32 perf_level, u32 dll_val,
|
||||
u32 mem_type);
|
||||
extern u32 omap2_set_prcm(u32 dpll_ctrl_val, u32 sdrc_rfr_val, int bypass);
|
||||
|
||||
extern u32 omap3_configure_core_dpll(
|
||||
u32 m2, u32 unlock_dll, u32 f, u32 inc,
|
||||
u32 sdrc_rfr_ctrl_0, u32 sdrc_actim_ctrl_a_0,
|
||||
u32 sdrc_actim_ctrl_b_0, u32 sdrc_mr_0,
|
||||
u32 sdrc_rfr_ctrl_1, u32 sdrc_actim_ctrl_a_1,
|
||||
u32 sdrc_actim_ctrl_b_1, u32 sdrc_mr_1);
|
||||
extern void omap3_sram_restore_context(void);
|
||||
|
||||
/* Do not use these */
|
||||
@@ -52,14 +46,6 @@ extern void omap243x_sram_reprogram_sdrc(u32 perf_level, u32 dll_val,
|
||||
u32 mem_type);
|
||||
extern unsigned long omap243x_sram_reprogram_sdrc_sz;
|
||||
|
||||
extern u32 omap3_sram_configure_core_dpll(
|
||||
u32 m2, u32 unlock_dll, u32 f, u32 inc,
|
||||
u32 sdrc_rfr_ctrl_0, u32 sdrc_actim_ctrl_a_0,
|
||||
u32 sdrc_actim_ctrl_b_0, u32 sdrc_mr_0,
|
||||
u32 sdrc_rfr_ctrl_1, u32 sdrc_actim_ctrl_a_1,
|
||||
u32 sdrc_actim_ctrl_b_1, u32 sdrc_mr_1);
|
||||
extern unsigned long omap3_sram_configure_core_dpll_sz;
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
extern void omap_push_sram_idle(void);
|
||||
#else
|
||||
|
@@ -1,346 +0,0 @@
|
||||
/*
|
||||
* linux/arch/arm/mach-omap3/sram.S
|
||||
*
|
||||
* Omap3 specific functions that need to be run in internal SRAM
|
||||
*
|
||||
* Copyright (C) 2004, 2007, 2008 Texas Instruments, Inc.
|
||||
* Copyright (C) 2008 Nokia Corporation
|
||||
*
|
||||
* Rajendra Nayak <rnayak@ti.com>
|
||||
* Richard Woodruff <r-woodruff2@ti.com>
|
||||
* Paul Walmsley
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR /PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*/
|
||||
#include <linux/linkage.h>
|
||||
|
||||
#include <asm/assembler.h>
|
||||
|
||||
#include "soc.h"
|
||||
#include "iomap.h"
|
||||
#include "sdrc.h"
|
||||
#include "cm3xxx.h"
|
||||
|
||||
/*
|
||||
* This file needs be built unconditionally as ARM to interoperate correctly
|
||||
* with non-Thumb-2-capable firmware.
|
||||
*/
|
||||
.arm
|
||||
|
||||
.text
|
||||
|
||||
/* r1 parameters */
|
||||
#define SDRC_NO_UNLOCK_DLL 0x0
|
||||
#define SDRC_UNLOCK_DLL 0x1
|
||||
|
||||
/* SDRC_DLLA_CTRL bit settings */
|
||||
#define FIXEDDELAY_SHIFT 24
|
||||
#define FIXEDDELAY_MASK (0xff << FIXEDDELAY_SHIFT)
|
||||
#define DLLIDLE_MASK 0x4
|
||||
|
||||
/*
|
||||
* SDRC_DLLA_CTRL default values: TI hardware team indicates that
|
||||
* FIXEDDELAY should be initialized to 0xf. This apparently was
|
||||
* empirically determined during process testing, so no derivation
|
||||
* was provided.
|
||||
*/
|
||||
#define FIXEDDELAY_DEFAULT (0x0f << FIXEDDELAY_SHIFT)
|
||||
|
||||
/* SDRC_DLLA_STATUS bit settings */
|
||||
#define LOCKSTATUS_MASK 0x4
|
||||
|
||||
/* SDRC_POWER bit settings */
|
||||
#define SRFRONIDLEREQ_MASK 0x40
|
||||
|
||||
/* CM_IDLEST1_CORE bit settings */
|
||||
#define ST_SDRC_MASK 0x2
|
||||
|
||||
/* CM_ICLKEN1_CORE bit settings */
|
||||
#define EN_SDRC_MASK 0x2
|
||||
|
||||
/* CM_CLKSEL1_PLL bit settings */
|
||||
#define CORE_DPLL_CLKOUT_DIV_SHIFT 0x1b
|
||||
|
||||
/*
|
||||
* omap3_sram_configure_core_dpll - change DPLL3 M2 divider
|
||||
*
|
||||
* Params passed in registers:
|
||||
* r0 = new M2 divider setting (only 1 and 2 supported right now)
|
||||
* r1 = unlock SDRC DLL? (1 = yes, 0 = no). Only unlock DLL for
|
||||
* SDRC rates < 83MHz
|
||||
* r2 = number of MPU cycles to wait for SDRC to stabilize after
|
||||
* reprogramming the SDRC when switching to a slower MPU speed
|
||||
* r3 = increasing SDRC rate? (1 = yes, 0 = no)
|
||||
*
|
||||
* Params passed via the stack. The needed params will be copied in SRAM
|
||||
* before use by the code in SRAM (SDRAM is not accessible during SDRC
|
||||
* reconfiguration):
|
||||
* new SDRC_RFR_CTRL_0 register contents
|
||||
* new SDRC_ACTIM_CTRL_A_0 register contents
|
||||
* new SDRC_ACTIM_CTRL_B_0 register contents
|
||||
* new SDRC_MR_0 register value
|
||||
* new SDRC_RFR_CTRL_1 register contents
|
||||
* new SDRC_ACTIM_CTRL_A_1 register contents
|
||||
* new SDRC_ACTIM_CTRL_B_1 register contents
|
||||
* new SDRC_MR_1 register value
|
||||
*
|
||||
* If the param SDRC_RFR_CTRL_1 is 0, the parameters are not programmed into
|
||||
* the SDRC CS1 registers
|
||||
*
|
||||
* NOTE: This code no longer attempts to program the SDRC AC timing and MR
|
||||
* registers. This is because the code currently cannot ensure that all
|
||||
* L3 initiators (e.g., sDMA, IVA, DSS DISPC, etc.) are not accessing the
|
||||
* SDRAM when the registers are written. If the registers are changed while
|
||||
* an initiator is accessing SDRAM, memory can be corrupted and/or the SDRC
|
||||
* may enter an unpredictable state. In the future, the intent is to
|
||||
* re-enable this code in cases where we can ensure that no initiators are
|
||||
* touching the SDRAM. Until that time, users who know that their use case
|
||||
* can satisfy the above requirement can enable the CONFIG_OMAP3_SDRC_AC_TIMING
|
||||
* option.
|
||||
*
|
||||
* Richard Woodruff notes that any changes to this code must be carefully
|
||||
* audited and tested to ensure that they don't cause a TLB miss while
|
||||
* the SDRAM is inaccessible. Such a situation will crash the system
|
||||
* since it will cause the ARM MMU to attempt to walk the page tables.
|
||||
* These crashes may be intermittent.
|
||||
*/
|
||||
.align 3
|
||||
ENTRY(omap3_sram_configure_core_dpll)
|
||||
stmfd sp!, {r1-r12, lr} @ store regs to stack
|
||||
|
||||
@ pull the extra args off the stack
|
||||
@ and store them in SRAM
|
||||
|
||||
/*
|
||||
* PC-relative stores are deprecated in ARMv7 and lead to undefined behaviour
|
||||
* in Thumb-2: use a r7 as a base instead.
|
||||
* Be careful not to clobber r7 when maintaing this file.
|
||||
*/
|
||||
THUMB( adr r7, omap3_sram_configure_core_dpll )
|
||||
.macro strtext Rt:req, label:req
|
||||
ARM( str \Rt, \label )
|
||||
THUMB( str \Rt, [r7, \label - omap3_sram_configure_core_dpll] )
|
||||
.endm
|
||||
|
||||
ldr r4, [sp, #52]
|
||||
strtext r4, omap_sdrc_rfr_ctrl_0_val
|
||||
ldr r4, [sp, #56]
|
||||
strtext r4, omap_sdrc_actim_ctrl_a_0_val
|
||||
ldr r4, [sp, #60]
|
||||
strtext r4, omap_sdrc_actim_ctrl_b_0_val
|
||||
ldr r4, [sp, #64]
|
||||
strtext r4, omap_sdrc_mr_0_val
|
||||
ldr r4, [sp, #68]
|
||||
strtext r4, omap_sdrc_rfr_ctrl_1_val
|
||||
cmp r4, #0 @ if SDRC_RFR_CTRL_1 is 0,
|
||||
beq skip_cs1_params @ do not use cs1 params
|
||||
ldr r4, [sp, #72]
|
||||
strtext r4, omap_sdrc_actim_ctrl_a_1_val
|
||||
ldr r4, [sp, #76]
|
||||
strtext r4, omap_sdrc_actim_ctrl_b_1_val
|
||||
ldr r4, [sp, #80]
|
||||
strtext r4, omap_sdrc_mr_1_val
|
||||
skip_cs1_params:
|
||||
mrc p15, 0, r8, c1, c0, 0 @ read ctrl register
|
||||
bic r10, r8, #0x800 @ clear Z-bit, disable branch prediction
|
||||
mcr p15, 0, r10, c1, c0, 0 @ write ctrl register
|
||||
dsb @ flush buffered writes to interconnect
|
||||
isb @ prevent speculative exec past here
|
||||
cmp r3, #1 @ if increasing SDRC clk rate,
|
||||
bleq configure_sdrc @ program the SDRC regs early (for RFR)
|
||||
cmp r1, #SDRC_UNLOCK_DLL @ set the intended DLL state
|
||||
bleq unlock_dll
|
||||
blne lock_dll
|
||||
bl sdram_in_selfrefresh @ put SDRAM in self refresh, idle SDRC
|
||||
bl configure_core_dpll @ change the DPLL3 M2 divider
|
||||
mov r12, r2
|
||||
bl wait_clk_stable @ wait for SDRC to stabilize
|
||||
bl enable_sdrc @ take SDRC out of idle
|
||||
cmp r1, #SDRC_UNLOCK_DLL @ wait for DLL status to change
|
||||
bleq wait_dll_unlock
|
||||
blne wait_dll_lock
|
||||
cmp r3, #1 @ if increasing SDRC clk rate,
|
||||
beq return_to_sdram @ return to SDRAM code, otherwise,
|
||||
bl configure_sdrc @ reprogram SDRC regs now
|
||||
return_to_sdram:
|
||||
mcr p15, 0, r8, c1, c0, 0 @ restore ctrl register
|
||||
isb @ prevent speculative exec past here
|
||||
mov r0, #0 @ return value
|
||||
ldmfd sp!, {r1-r12, pc} @ restore regs and return
|
||||
unlock_dll:
|
||||
ldr r11, omap3_sdrc_dlla_ctrl
|
||||
ldr r12, [r11]
|
||||
bic r12, r12, #FIXEDDELAY_MASK
|
||||
orr r12, r12, #FIXEDDELAY_DEFAULT
|
||||
orr r12, r12, #DLLIDLE_MASK
|
||||
str r12, [r11] @ (no OCP barrier needed)
|
||||
bx lr
|
||||
lock_dll:
|
||||
ldr r11, omap3_sdrc_dlla_ctrl
|
||||
ldr r12, [r11]
|
||||
bic r12, r12, #DLLIDLE_MASK
|
||||
str r12, [r11] @ (no OCP barrier needed)
|
||||
bx lr
|
||||
sdram_in_selfrefresh:
|
||||
ldr r11, omap3_sdrc_power @ read the SDRC_POWER register
|
||||
ldr r12, [r11] @ read the contents of SDRC_POWER
|
||||
mov r9, r12 @ keep a copy of SDRC_POWER bits
|
||||
orr r12, r12, #SRFRONIDLEREQ_MASK @ enable self refresh on idle
|
||||
str r12, [r11] @ write back to SDRC_POWER register
|
||||
ldr r12, [r11] @ posted-write barrier for SDRC
|
||||
idle_sdrc:
|
||||
ldr r11, omap3_cm_iclken1_core @ read the CM_ICLKEN1_CORE reg
|
||||
ldr r12, [r11]
|
||||
bic r12, r12, #EN_SDRC_MASK @ disable iclk bit for SDRC
|
||||
str r12, [r11]
|
||||
wait_sdrc_idle:
|
||||
ldr r11, omap3_cm_idlest1_core
|
||||
ldr r12, [r11]
|
||||
and r12, r12, #ST_SDRC_MASK @ check for SDRC idle
|
||||
cmp r12, #ST_SDRC_MASK
|
||||
bne wait_sdrc_idle
|
||||
bx lr
|
||||
configure_core_dpll:
|
||||
ldr r11, omap3_cm_clksel1_pll
|
||||
ldr r12, [r11]
|
||||
ldr r10, core_m2_mask_val @ modify m2 for core dpll
|
||||
and r12, r12, r10
|
||||
orr r12, r12, r0, lsl #CORE_DPLL_CLKOUT_DIV_SHIFT
|
||||
str r12, [r11]
|
||||
ldr r12, [r11] @ posted-write barrier for CM
|
||||
bx lr
|
||||
wait_clk_stable:
|
||||
subs r12, r12, #1
|
||||
bne wait_clk_stable
|
||||
bx lr
|
||||
enable_sdrc:
|
||||
ldr r11, omap3_cm_iclken1_core
|
||||
ldr r12, [r11]
|
||||
orr r12, r12, #EN_SDRC_MASK @ enable iclk bit for SDRC
|
||||
str r12, [r11]
|
||||
wait_sdrc_idle1:
|
||||
ldr r11, omap3_cm_idlest1_core
|
||||
ldr r12, [r11]
|
||||
and r12, r12, #ST_SDRC_MASK
|
||||
cmp r12, #0
|
||||
bne wait_sdrc_idle1
|
||||
restore_sdrc_power_val:
|
||||
ldr r11, omap3_sdrc_power
|
||||
str r9, [r11] @ restore SDRC_POWER, no barrier needed
|
||||
bx lr
|
||||
wait_dll_lock:
|
||||
ldr r11, omap3_sdrc_dlla_status
|
||||
ldr r12, [r11]
|
||||
and r12, r12, #LOCKSTATUS_MASK
|
||||
cmp r12, #LOCKSTATUS_MASK
|
||||
bne wait_dll_lock
|
||||
bx lr
|
||||
wait_dll_unlock:
|
||||
ldr r11, omap3_sdrc_dlla_status
|
||||
ldr r12, [r11]
|
||||
and r12, r12, #LOCKSTATUS_MASK
|
||||
cmp r12, #0x0
|
||||
bne wait_dll_unlock
|
||||
bx lr
|
||||
configure_sdrc:
|
||||
ldr r12, omap_sdrc_rfr_ctrl_0_val @ fetch value from SRAM
|
||||
ldr r11, omap3_sdrc_rfr_ctrl_0 @ fetch addr from SRAM
|
||||
str r12, [r11] @ store
|
||||
#ifdef CONFIG_OMAP3_SDRC_AC_TIMING
|
||||
ldr r12, omap_sdrc_actim_ctrl_a_0_val
|
||||
ldr r11, omap3_sdrc_actim_ctrl_a_0
|
||||
str r12, [r11]
|
||||
ldr r12, omap_sdrc_actim_ctrl_b_0_val
|
||||
ldr r11, omap3_sdrc_actim_ctrl_b_0
|
||||
str r12, [r11]
|
||||
ldr r12, omap_sdrc_mr_0_val
|
||||
ldr r11, omap3_sdrc_mr_0
|
||||
str r12, [r11]
|
||||
#endif
|
||||
ldr r12, omap_sdrc_rfr_ctrl_1_val
|
||||
cmp r12, #0 @ if SDRC_RFR_CTRL_1 is 0,
|
||||
beq skip_cs1_prog @ do not program cs1 params
|
||||
ldr r11, omap3_sdrc_rfr_ctrl_1
|
||||
str r12, [r11]
|
||||
#ifdef CONFIG_OMAP3_SDRC_AC_TIMING
|
||||
ldr r12, omap_sdrc_actim_ctrl_a_1_val
|
||||
ldr r11, omap3_sdrc_actim_ctrl_a_1
|
||||
str r12, [r11]
|
||||
ldr r12, omap_sdrc_actim_ctrl_b_1_val
|
||||
ldr r11, omap3_sdrc_actim_ctrl_b_1
|
||||
str r12, [r11]
|
||||
ldr r12, omap_sdrc_mr_1_val
|
||||
ldr r11, omap3_sdrc_mr_1
|
||||
str r12, [r11]
|
||||
#endif
|
||||
skip_cs1_prog:
|
||||
ldr r12, [r11] @ posted-write barrier for SDRC
|
||||
bx lr
|
||||
|
||||
.align
|
||||
omap3_sdrc_power:
|
||||
.word OMAP34XX_SDRC_REGADDR(SDRC_POWER)
|
||||
omap3_cm_clksel1_pll:
|
||||
.word OMAP34XX_CM_REGADDR(PLL_MOD, CM_CLKSEL1)
|
||||
omap3_cm_idlest1_core:
|
||||
.word OMAP34XX_CM_REGADDR(CORE_MOD, CM_IDLEST)
|
||||
omap3_cm_iclken1_core:
|
||||
.word OMAP34XX_CM_REGADDR(CORE_MOD, CM_ICLKEN1)
|
||||
|
||||
omap3_sdrc_rfr_ctrl_0:
|
||||
.word OMAP34XX_SDRC_REGADDR(SDRC_RFR_CTRL_0)
|
||||
omap3_sdrc_rfr_ctrl_1:
|
||||
.word OMAP34XX_SDRC_REGADDR(SDRC_RFR_CTRL_1)
|
||||
omap3_sdrc_actim_ctrl_a_0:
|
||||
.word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_A_0)
|
||||
omap3_sdrc_actim_ctrl_a_1:
|
||||
.word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_A_1)
|
||||
omap3_sdrc_actim_ctrl_b_0:
|
||||
.word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_B_0)
|
||||
omap3_sdrc_actim_ctrl_b_1:
|
||||
.word OMAP34XX_SDRC_REGADDR(SDRC_ACTIM_CTRL_B_1)
|
||||
omap3_sdrc_mr_0:
|
||||
.word OMAP34XX_SDRC_REGADDR(SDRC_MR_0)
|
||||
omap3_sdrc_mr_1:
|
||||
.word OMAP34XX_SDRC_REGADDR(SDRC_MR_1)
|
||||
omap_sdrc_rfr_ctrl_0_val:
|
||||
.word 0xDEADBEEF
|
||||
omap_sdrc_rfr_ctrl_1_val:
|
||||
.word 0xDEADBEEF
|
||||
omap_sdrc_actim_ctrl_a_0_val:
|
||||
.word 0xDEADBEEF
|
||||
omap_sdrc_actim_ctrl_a_1_val:
|
||||
.word 0xDEADBEEF
|
||||
omap_sdrc_actim_ctrl_b_0_val:
|
||||
.word 0xDEADBEEF
|
||||
omap_sdrc_actim_ctrl_b_1_val:
|
||||
.word 0xDEADBEEF
|
||||
omap_sdrc_mr_0_val:
|
||||
.word 0xDEADBEEF
|
||||
omap_sdrc_mr_1_val:
|
||||
.word 0xDEADBEEF
|
||||
|
||||
omap3_sdrc_dlla_status:
|
||||
.word OMAP34XX_SDRC_REGADDR(SDRC_DLLA_STATUS)
|
||||
omap3_sdrc_dlla_ctrl:
|
||||
.word OMAP34XX_SDRC_REGADDR(SDRC_DLLA_CTRL)
|
||||
core_m2_mask_val:
|
||||
.word 0x07FFFFFF
|
||||
ENDPROC(omap3_sram_configure_core_dpll)
|
||||
|
||||
ENTRY(omap3_sram_configure_core_dpll_sz)
|
||||
.word . - omap3_sram_configure_core_dpll
|
||||
|
@@ -183,7 +183,8 @@ static struct device_node * __init omap_get_timer_dt(const struct of_device_id *
|
||||
of_get_property(np, "ti,timer-secure", NULL)))
|
||||
continue;
|
||||
|
||||
of_add_property(np, &device_disabled);
|
||||
if (!of_device_is_compatible(np, "ti,omap-counter32k"))
|
||||
of_add_property(np, &device_disabled);
|
||||
return np;
|
||||
}
|
||||
|
||||
@@ -394,7 +395,6 @@ static int __init __maybe_unused omap2_sync32k_clocksource_init(void)
|
||||
int ret;
|
||||
struct device_node *np = NULL;
|
||||
struct omap_hwmod *oh;
|
||||
void __iomem *vbase;
|
||||
const char *oh_name = "counter_32k";
|
||||
|
||||
/*
|
||||
@@ -420,18 +420,6 @@ static int __init __maybe_unused omap2_sync32k_clocksource_init(void)
|
||||
|
||||
omap_hwmod_setup_one(oh_name);
|
||||
|
||||
if (np) {
|
||||
vbase = of_iomap(np, 0);
|
||||
of_node_put(np);
|
||||
} else {
|
||||
vbase = omap_hwmod_get_mpu_rt_va(oh);
|
||||
}
|
||||
|
||||
if (!vbase) {
|
||||
pr_warn("%s: failed to get counter_32k resource\n", __func__);
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
ret = omap_hwmod_enable(oh);
|
||||
if (ret) {
|
||||
pr_warn("%s: failed to enable counter_32k module (%d)\n",
|
||||
@@ -439,13 +427,18 @@ static int __init __maybe_unused omap2_sync32k_clocksource_init(void)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = omap_init_clocksource_32k(vbase);
|
||||
if (ret) {
|
||||
pr_warn("%s: failed to initialize counter_32k as a clocksource (%d)\n",
|
||||
__func__, ret);
|
||||
omap_hwmod_idle(oh);
|
||||
}
|
||||
if (!of_have_populated_dt()) {
|
||||
void __iomem *vbase;
|
||||
|
||||
vbase = omap_hwmod_get_mpu_rt_va(oh);
|
||||
|
||||
ret = omap_init_clocksource_32k(vbase);
|
||||
if (ret) {
|
||||
pr_warn("%s: failed to initialize counter_32k as a clocksource (%d)\n",
|
||||
__func__, ret);
|
||||
omap_hwmod_idle(oh);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -476,7 +469,64 @@ static void __init omap2_gptimer_clocksource_init(int gptimer_id,
|
||||
clocksource_gpt.name, clksrc.rate);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SOC_HAS_REALTIME_COUNTER
|
||||
static void __init __omap_sync32k_timer_init(int clkev_nr, const char *clkev_src,
|
||||
const char *clkev_prop, int clksrc_nr, const char *clksrc_src,
|
||||
const char *clksrc_prop, bool gptimer)
|
||||
{
|
||||
omap_clk_init();
|
||||
omap_dmtimer_init();
|
||||
omap2_gp_clockevent_init(clkev_nr, clkev_src, clkev_prop);
|
||||
|
||||
/* Enable the use of clocksource="gp_timer" kernel parameter */
|
||||
if (use_gptimer_clksrc || gptimer)
|
||||
omap2_gptimer_clocksource_init(clksrc_nr, clksrc_src,
|
||||
clksrc_prop);
|
||||
else
|
||||
omap2_sync32k_clocksource_init();
|
||||
}
|
||||
|
||||
void __init omap_init_time(void)
|
||||
{
|
||||
__omap_sync32k_timer_init(1, "timer_32k_ck", "ti,timer-alwon",
|
||||
2, "timer_sys_ck", NULL, false);
|
||||
|
||||
if (of_have_populated_dt())
|
||||
clocksource_probe();
|
||||
}
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM43XX)
|
||||
void __init omap3_secure_sync32k_timer_init(void)
|
||||
{
|
||||
__omap_sync32k_timer_init(12, "secure_32k_fck", "ti,timer-secure",
|
||||
2, "timer_sys_ck", NULL, false);
|
||||
}
|
||||
#endif /* CONFIG_ARCH_OMAP3 */
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM33XX)
|
||||
void __init omap3_gptimer_timer_init(void)
|
||||
{
|
||||
__omap_sync32k_timer_init(2, "timer_sys_ck", NULL,
|
||||
1, "timer_sys_ck", "ti,timer-alwon", true);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) || \
|
||||
defined(CONFIG_SOC_DRA7XX) || defined(CONFIG_SOC_AM43XX)
|
||||
static void __init omap4_sync32k_timer_init(void)
|
||||
{
|
||||
__omap_sync32k_timer_init(1, "timer_32k_ck", "ti,timer-alwon",
|
||||
2, "sys_clkin_ck", NULL, false);
|
||||
}
|
||||
|
||||
void __init omap4_local_timer_init(void)
|
||||
{
|
||||
omap4_sync32k_timer_init();
|
||||
clocksource_probe();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SOC_OMAP5) || defined(CONFIG_SOC_DRA7XX)
|
||||
|
||||
/*
|
||||
* The realtime counter also called master counter, is a free-running
|
||||
* counter, which is related to real time. It produces the count used
|
||||
@@ -488,6 +538,7 @@ static void __init omap2_gptimer_clocksource_init(int gptimer_id,
|
||||
*/
|
||||
static void __init realtime_counter_init(void)
|
||||
{
|
||||
#ifdef CONFIG_SOC_HAS_REALTIME_COUNTER
|
||||
void __iomem *base;
|
||||
static struct clk *sys_clk;
|
||||
unsigned long rate;
|
||||
@@ -586,78 +637,9 @@ sysclk1_based:
|
||||
set_cntfreq();
|
||||
|
||||
iounmap(base);
|
||||
}
|
||||
#else
|
||||
static inline void __init realtime_counter_init(void)
|
||||
{}
|
||||
#endif
|
||||
|
||||
#define OMAP_SYS_GP_TIMER_INIT(name, clkev_nr, clkev_src, clkev_prop, \
|
||||
clksrc_nr, clksrc_src, clksrc_prop) \
|
||||
void __init omap##name##_gptimer_timer_init(void) \
|
||||
{ \
|
||||
omap_clk_init(); \
|
||||
omap_dmtimer_init(); \
|
||||
omap2_gp_clockevent_init((clkev_nr), clkev_src, clkev_prop); \
|
||||
omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src, \
|
||||
clksrc_prop); \
|
||||
}
|
||||
|
||||
#define OMAP_SYS_32K_TIMER_INIT(name, clkev_nr, clkev_src, clkev_prop, \
|
||||
clksrc_nr, clksrc_src, clksrc_prop) \
|
||||
void __init omap##name##_sync32k_timer_init(void) \
|
||||
{ \
|
||||
omap_clk_init(); \
|
||||
omap_dmtimer_init(); \
|
||||
omap2_gp_clockevent_init((clkev_nr), clkev_src, clkev_prop); \
|
||||
/* Enable the use of clocksource="gp_timer" kernel parameter */ \
|
||||
if (use_gptimer_clksrc) \
|
||||
omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src, \
|
||||
clksrc_prop); \
|
||||
else \
|
||||
omap2_sync32k_clocksource_init(); \
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP2
|
||||
OMAP_SYS_32K_TIMER_INIT(2, 1, "timer_32k_ck", "ti,timer-alwon",
|
||||
2, "timer_sys_ck", NULL);
|
||||
#endif /* CONFIG_ARCH_OMAP2 */
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM43XX)
|
||||
OMAP_SYS_32K_TIMER_INIT(3, 1, "timer_32k_ck", "ti,timer-alwon",
|
||||
2, "timer_sys_ck", NULL);
|
||||
OMAP_SYS_32K_TIMER_INIT(3_secure, 12, "secure_32k_fck", "ti,timer-secure",
|
||||
2, "timer_sys_ck", NULL);
|
||||
#endif /* CONFIG_ARCH_OMAP3 */
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM33XX) || \
|
||||
defined(CONFIG_SOC_AM43XX)
|
||||
OMAP_SYS_GP_TIMER_INIT(3, 2, "timer_sys_ck", NULL,
|
||||
1, "timer_sys_ck", "ti,timer-alwon");
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) || \
|
||||
defined(CONFIG_SOC_DRA7XX)
|
||||
static OMAP_SYS_32K_TIMER_INIT(4, 1, "timer_32k_ck", "ti,timer-alwon",
|
||||
2, "sys_clkin_ck", NULL);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_OMAP4
|
||||
#ifdef CONFIG_HAVE_ARM_TWD
|
||||
void __init omap4_local_timer_init(void)
|
||||
{
|
||||
omap4_sync32k_timer_init();
|
||||
clocksource_probe();
|
||||
}
|
||||
#else
|
||||
void __init omap4_local_timer_init(void)
|
||||
{
|
||||
omap4_sync32k_timer_init();
|
||||
}
|
||||
#endif /* CONFIG_HAVE_ARM_TWD */
|
||||
#endif /* CONFIG_ARCH_OMAP4 */
|
||||
|
||||
#if defined(CONFIG_SOC_OMAP5) || defined(CONFIG_SOC_DRA7XX)
|
||||
void __init omap5_realtime_timer_init(void)
|
||||
{
|
||||
omap4_sync32k_timer_init();
|
||||
|
@@ -280,10 +280,6 @@ void omap3_vc_set_pmic_signaling(int core_next_state)
|
||||
}
|
||||
}
|
||||
|
||||
#define PRM_POLCTRL_TWL_MASK (OMAP3430_PRM_POLCTRL_CLKREQ_POL | \
|
||||
OMAP3430_PRM_POLCTRL_CLKREQ_POL)
|
||||
#define PRM_POLCTRL_TWL_VAL OMAP3430_PRM_POLCTRL_CLKREQ_POL
|
||||
|
||||
/*
|
||||
* Configure signal polarity for sys_clkreq and sys_off_mode pins
|
||||
* as the default values are wrong and can cause the system to hang
|
||||
|
新しいイシューから参照
ユーザーをブロックする