forked from Minki/linux
arm-soc: cleanups, part 2
These omap cleanups have dependencies on earlier omap branches that in turn depend on other cleanups, so they could not go into the same branch. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIVAwUAUA2ddmCrR//JCVInAQL19BAAypIWzygTKBQOcxk8czo9thEbwQWwall2 8TnfVT/dLqBtDlvOY7sWE/J+fNVfHLG9JcEw1mE8VABYCW1N9LSdHqpHrF3q2qg7 /JGNCFFMMpID8PCL4RjwAxlyNN15TzgJ29PUacI1MGRhwqbkuZpiCRCh6e9cRH94 pNnJbABojWp0rzN+xb9hwHBMCst6snlKHR2C3T5E5JIDB0YW+F9uC3pV+4RpXGTd o56h6rwSXR3F3vS4aqdR/C11fSKJ2cDUR0ttR0shLWgPcdk4CP9Pd5FEdMSGLmH7 /YCDHb4iS59k2raaSaToSj1rykpk1d1X+sGYD2pg+Tc+84jT3/W/pHvxmnb7r9b5 H9hV6cISZyzhrxlapNhH2SUCdbSq7xdehes9IOoxJlNvR8TdwDGJK0XIAuMaHm/x m/d6m2cgtfvqkuiveK6P/JBkXy4V14yoG2CELJcRxMsOQwHRtBnLuxSSlcnY7VOv 9mSoR4RvRxkcb3T37UG53lSiA5dliT9TS8p5jg6bJvkh4mi932wJpXpmitx/+Ev4 o9KEzeTx+9my4eBcwOiaH/J7xkBG4219aaL6wbOGB6Qpt7v8/E35SnWWKW7RSJUi WxyTQjghpr4hhqceVTw3y1/qyo2B6WI+U4KknjRek8JLqWIm3SABG1N21x2ht9PG OpzKEjDyQxg= =kMNb -----END PGP SIGNATURE----- Merge tag 'cleanup2' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc Pull arm-soc cleanups, part 2, from Arnd Bergmann: "These omap cleanups have dependencies on earlier omap branches that in turn depend on other cleanups, so they could not go into the same branch." * tag 'cleanup2' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: ARM: OMAP: sdrc: Fix the build break for OMAP4 only builds ARM: OMAP2+: dmtimer: cleanup fclk usage ARM: OMAP2+: Fix mismerge for omap_hwmod_get_main_clk() API ARM: OMAP2+: Remove unnecessary ifdef around __omap2_set_globals ARM: OMAP2+: am33xx: Change cpu_is_am33xx to soc_is_am33xx ARM: OMAP2+: am33xx: Make am33xx as a separate class ARM: OMAP2+: Move omap3 dpll ops to dpll3xxx.c ARM: OMAP2+: All OMAP2PLUS uses omap-device.o target so add one entry ARM: OMAP: dmtimer: use devm_ API and do some cleanup in probe() ARM: OMAP2+: hwmod code: add support to set dmadisable in hwmod framework ARM: OMAP2+: PRM/CM: Move the stubbed prm and cm functions to prcm.c file and make them __weak ARM: OMAP2+: hwmod: add omap_hwmod_get_main_clk() API ARM: OMAP3+: dpll: optimize noncore dpll locking logic ARM: OMAP3: control: add definition for CONTROL_CAMERA_PHY_CTRL ARM: OMAP2+: powerdomain code: Fix Wake-up power domain power status ARM: OMAP4: clockdomain/CM code: Update supported transition modes ARM: OMAP3/4: omap_hwmod: Add rstst_offs field to struct omap_hwmod_omap4_prcm ARM: OMAP2+: hwmod: Add new sysc_type3 into omap_hwmod required for am33xx
This commit is contained in:
commit
fde7543027
@ -21,12 +21,16 @@ config ARCH_OMAP2PLUS_TYPICAL
|
||||
help
|
||||
Compile a kernel suitable for booting most boards
|
||||
|
||||
config SOC_HAS_OMAP2_SDRC
|
||||
bool "OMAP2 SDRAM Controller support"
|
||||
|
||||
config ARCH_OMAP2
|
||||
bool "TI OMAP2"
|
||||
depends on ARCH_OMAP2PLUS
|
||||
default y
|
||||
select CPU_V6
|
||||
select MULTI_IRQ_HANDLER
|
||||
select SOC_HAS_OMAP2_SDRC
|
||||
|
||||
config ARCH_OMAP3
|
||||
bool "TI OMAP3"
|
||||
@ -39,6 +43,7 @@ config ARCH_OMAP3
|
||||
select PM_OPP if PM
|
||||
select ARM_CPU_SUSPEND if PM
|
||||
select MULTI_IRQ_HANDLER
|
||||
select SOC_HAS_OMAP2_SDRC
|
||||
|
||||
config ARCH_OMAP4
|
||||
bool "TI OMAP4"
|
||||
@ -66,16 +71,19 @@ config SOC_OMAP2420
|
||||
depends on ARCH_OMAP2
|
||||
default y
|
||||
select OMAP_DM_TIMER
|
||||
select SOC_HAS_OMAP2_SDRC
|
||||
|
||||
config SOC_OMAP2430
|
||||
bool "OMAP2430 support"
|
||||
depends on ARCH_OMAP2
|
||||
default y
|
||||
select SOC_HAS_OMAP2_SDRC
|
||||
|
||||
config SOC_OMAP3430
|
||||
bool "OMAP3430 support"
|
||||
depends on ARCH_OMAP3
|
||||
default y
|
||||
select SOC_HAS_OMAP2_SDRC
|
||||
|
||||
config SOC_TI81XX
|
||||
bool "TI81XX support"
|
||||
@ -84,8 +92,10 @@ config SOC_TI81XX
|
||||
|
||||
config SOC_AM33XX
|
||||
bool "AM33XX support"
|
||||
depends on ARCH_OMAP3
|
||||
default y
|
||||
select CPU_V7
|
||||
select ARM_CPU_SUSPEND if PM
|
||||
select MULTI_IRQ_HANDLER
|
||||
|
||||
config OMAP_PACKAGE_ZAF
|
||||
bool
|
||||
|
@ -6,7 +6,7 @@
|
||||
obj-y := id.o io.o control.o mux.o devices.o serial.o gpmc.o timer.o pm.o \
|
||||
common.o gpio.o dma.o wd_timer.o display.o i2c.o hdq1w.o
|
||||
|
||||
omap-2-3-common = irq.o sdrc.o
|
||||
omap-2-3-common = irq.o
|
||||
hwmod-common = omap_hwmod.o \
|
||||
omap_hwmod_common_data.o
|
||||
clock-common = clock.o clock_common_data.o \
|
||||
@ -16,12 +16,14 @@ secure-common = omap-smc.o omap-secure.o
|
||||
obj-$(CONFIG_ARCH_OMAP2) += $(omap-2-3-common) $(hwmod-common)
|
||||
obj-$(CONFIG_ARCH_OMAP3) += $(omap-2-3-common) $(hwmod-common) $(secure-common)
|
||||
obj-$(CONFIG_ARCH_OMAP4) += prm44xx.o $(hwmod-common) $(secure-common)
|
||||
obj-$(CONFIG_SOC_AM33XX) += irq.o $(hwmod-common)
|
||||
|
||||
ifneq ($(CONFIG_SND_OMAP_SOC_MCBSP),)
|
||||
obj-y += mcbsp.o
|
||||
endif
|
||||
|
||||
obj-$(CONFIG_TWL4030_CORE) += omap_twl.o
|
||||
obj-$(CONFIG_SOC_HAS_OMAP2_SDRC) += sdrc.o
|
||||
|
||||
# SMP support ONLY available for OMAP4
|
||||
|
||||
@ -103,6 +105,7 @@ obj-$(CONFIG_ARCH_OMAP3) += $(voltagedomain-common)
|
||||
obj-$(CONFIG_ARCH_OMAP3) += voltagedomains3xxx_data.o
|
||||
obj-$(CONFIG_ARCH_OMAP4) += $(voltagedomain-common)
|
||||
obj-$(CONFIG_ARCH_OMAP4) += voltagedomains44xx_data.o
|
||||
obj-$(CONFIG_SOC_AM33XX) += $(voltagedomain-common)
|
||||
obj-$(CONFIG_SOC_AM33XX) += voltagedomains33xx_data.o
|
||||
|
||||
# OMAP powerdomain framework
|
||||
@ -118,6 +121,7 @@ obj-$(CONFIG_ARCH_OMAP3) += powerdomains2xxx_3xxx_data.o
|
||||
obj-$(CONFIG_ARCH_OMAP4) += $(powerdomain-common)
|
||||
obj-$(CONFIG_ARCH_OMAP4) += powerdomain44xx.o
|
||||
obj-$(CONFIG_ARCH_OMAP4) += powerdomains44xx_data.o
|
||||
obj-$(CONFIG_SOC_AM33XX) += $(powerdomain-common)
|
||||
obj-$(CONFIG_SOC_AM33XX) += powerdomain33xx.o
|
||||
obj-$(CONFIG_SOC_AM33XX) += powerdomains33xx_data.o
|
||||
|
||||
@ -135,6 +139,7 @@ obj-$(CONFIG_ARCH_OMAP3) += clockdomains3xxx_data.o
|
||||
obj-$(CONFIG_ARCH_OMAP4) += $(clockdomain-common)
|
||||
obj-$(CONFIG_ARCH_OMAP4) += clockdomain44xx.o
|
||||
obj-$(CONFIG_ARCH_OMAP4) += clockdomains44xx_data.o
|
||||
obj-$(CONFIG_SOC_AM33XX) += $(clockdomain-common)
|
||||
obj-$(CONFIG_SOC_AM33XX) += clockdomain33xx.o
|
||||
obj-$(CONFIG_SOC_AM33XX) += clockdomains33xx_data.o
|
||||
|
||||
@ -154,6 +159,7 @@ obj-$(CONFIG_ARCH_OMAP3) += dpll3xxx.o clock3xxx_data.o
|
||||
obj-$(CONFIG_ARCH_OMAP3) += clkt_iclk.o
|
||||
obj-$(CONFIG_ARCH_OMAP4) += $(clock-common) clock44xx_data.o
|
||||
obj-$(CONFIG_ARCH_OMAP4) += dpll3xxx.o dpll44xx.o
|
||||
obj-$(CONFIG_SOC_AM33XX) += $(clock-common) dpll3xxx.o
|
||||
|
||||
# OMAP2 clock rate set data (old "OPP" data)
|
||||
obj-$(CONFIG_SOC_OMAP2420) += opp2420_data.o
|
||||
|
@ -398,24 +398,6 @@ int omap2_clk_set_parent(struct clk *clk, struct clk *new_parent)
|
||||
return omap2_clksel_set_parent(clk, new_parent);
|
||||
}
|
||||
|
||||
/* OMAP3/4 non-CORE DPLL clkops */
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4)
|
||||
|
||||
const struct clkops clkops_omap3_noncore_dpll_ops = {
|
||||
.enable = omap3_noncore_dpll_enable,
|
||||
.disable = omap3_noncore_dpll_disable,
|
||||
.allow_idle = omap3_dpll_allow_idle,
|
||||
.deny_idle = omap3_dpll_deny_idle,
|
||||
};
|
||||
|
||||
const struct clkops clkops_omap3_core_dpll_ops = {
|
||||
.allow_idle = omap3_dpll_allow_idle,
|
||||
.deny_idle = omap3_dpll_deny_idle,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* OMAP2+ clock reset and init functions
|
||||
*/
|
||||
|
@ -3495,7 +3495,7 @@ int __init omap3xxx_clk_init(void)
|
||||
} else if (cpu_is_ti816x()) {
|
||||
cpu_mask = RATE_IN_TI816X;
|
||||
cpu_clkflg = CK_TI816X;
|
||||
} else if (cpu_is_am33xx()) {
|
||||
} else if (soc_is_am33xx()) {
|
||||
cpu_mask = RATE_IN_AM33XX;
|
||||
} else if (cpu_is_ti814x()) {
|
||||
cpu_mask = RATE_IN_TI814X;
|
||||
|
@ -3299,17 +3299,17 @@ static struct omap_clk omap44xx_clks[] = {
|
||||
CLK(NULL, "smartreflex_core_fck", &smartreflex_core_fck, CK_443X),
|
||||
CLK(NULL, "smartreflex_iva_fck", &smartreflex_iva_fck, CK_443X),
|
||||
CLK(NULL, "smartreflex_mpu_fck", &smartreflex_mpu_fck, CK_443X),
|
||||
CLK(NULL, "gpt1_fck", &timer1_fck, CK_443X),
|
||||
CLK(NULL, "gpt10_fck", &timer10_fck, CK_443X),
|
||||
CLK(NULL, "gpt11_fck", &timer11_fck, CK_443X),
|
||||
CLK(NULL, "gpt2_fck", &timer2_fck, CK_443X),
|
||||
CLK(NULL, "gpt3_fck", &timer3_fck, CK_443X),
|
||||
CLK(NULL, "gpt4_fck", &timer4_fck, CK_443X),
|
||||
CLK(NULL, "gpt5_fck", &timer5_fck, CK_443X),
|
||||
CLK(NULL, "gpt6_fck", &timer6_fck, CK_443X),
|
||||
CLK(NULL, "gpt7_fck", &timer7_fck, CK_443X),
|
||||
CLK(NULL, "gpt8_fck", &timer8_fck, CK_443X),
|
||||
CLK(NULL, "gpt9_fck", &timer9_fck, CK_443X),
|
||||
CLK(NULL, "timer1_fck", &timer1_fck, CK_443X),
|
||||
CLK(NULL, "timer10_fck", &timer10_fck, CK_443X),
|
||||
CLK(NULL, "timer11_fck", &timer11_fck, CK_443X),
|
||||
CLK(NULL, "timer2_fck", &timer2_fck, CK_443X),
|
||||
CLK(NULL, "timer3_fck", &timer3_fck, CK_443X),
|
||||
CLK(NULL, "timer4_fck", &timer4_fck, CK_443X),
|
||||
CLK(NULL, "timer5_fck", &timer5_fck, CK_443X),
|
||||
CLK(NULL, "timer6_fck", &timer6_fck, CK_443X),
|
||||
CLK(NULL, "timer7_fck", &timer7_fck, CK_443X),
|
||||
CLK(NULL, "timer8_fck", &timer8_fck, CK_443X),
|
||||
CLK(NULL, "timer9_fck", &timer9_fck, CK_443X),
|
||||
CLK(NULL, "uart1_fck", &uart1_fck, CK_443X),
|
||||
CLK(NULL, "uart2_fck", &uart2_fck, CK_443X),
|
||||
CLK(NULL, "uart3_fck", &uart3_fck, CK_443X),
|
||||
|
@ -70,7 +70,7 @@ static int omap4_clkdm_clear_all_wkup_sleep_deps(struct clockdomain *clkdm)
|
||||
|
||||
static int omap4_clkdm_sleep(struct clockdomain *clkdm)
|
||||
{
|
||||
omap4_cminst_clkdm_force_sleep(clkdm->prcm_partition,
|
||||
omap4_cminst_clkdm_enable_hwsup(clkdm->prcm_partition,
|
||||
clkdm->cm_inst, clkdm->clkdm_offs);
|
||||
return 0;
|
||||
}
|
||||
@ -90,8 +90,12 @@ static void omap4_clkdm_allow_idle(struct clockdomain *clkdm)
|
||||
|
||||
static void omap4_clkdm_deny_idle(struct clockdomain *clkdm)
|
||||
{
|
||||
omap4_cminst_clkdm_disable_hwsup(clkdm->prcm_partition,
|
||||
clkdm->cm_inst, clkdm->clkdm_offs);
|
||||
if (clkdm->flags & CLKDM_CAN_FORCE_WAKEUP)
|
||||
omap4_clkdm_wakeup(clkdm);
|
||||
else
|
||||
omap4_cminst_clkdm_disable_hwsup(clkdm->prcm_partition,
|
||||
clkdm->cm_inst,
|
||||
clkdm->clkdm_offs);
|
||||
}
|
||||
|
||||
static int omap4_clkdm_clk_enable(struct clockdomain *clkdm)
|
||||
|
@ -234,20 +234,6 @@ void omap4_cminst_clkdm_disable_hwsup(u8 part, s16 inst, u16 cdoffs)
|
||||
_clktrctrl_write(OMAP34XX_CLKSTCTRL_DISABLE_AUTO, part, inst, cdoffs);
|
||||
}
|
||||
|
||||
/**
|
||||
* omap4_cminst_clkdm_force_sleep - try to put a clockdomain into idle
|
||||
* @part: PRCM partition ID that the clockdomain registers exist in
|
||||
* @inst: CM instance register offset (*_INST macro)
|
||||
* @cdoffs: Clockdomain register offset (*_CDOFFS macro)
|
||||
*
|
||||
* Put a clockdomain referred to by (@part, @inst, @cdoffs) into idle
|
||||
* No return value.
|
||||
*/
|
||||
void omap4_cminst_clkdm_force_sleep(u8 part, s16 inst, u16 cdoffs)
|
||||
{
|
||||
_clktrctrl_write(OMAP34XX_CLKSTCTRL_FORCE_SLEEP, part, inst, cdoffs);
|
||||
}
|
||||
|
||||
/**
|
||||
* omap4_cminst_clkdm_force_sleep - try to take a clockdomain out of idle
|
||||
* @part: PRCM partition ID that the clockdomain registers exist in
|
||||
|
@ -16,38 +16,13 @@ extern void omap4_cminst_clkdm_enable_hwsup(u8 part, s16 inst, u16 cdoffs);
|
||||
extern void omap4_cminst_clkdm_disable_hwsup(u8 part, s16 inst, u16 cdoffs);
|
||||
extern void omap4_cminst_clkdm_force_sleep(u8 part, s16 inst, u16 cdoffs);
|
||||
extern void omap4_cminst_clkdm_force_wakeup(u8 part, s16 inst, u16 cdoffs);
|
||||
|
||||
extern int omap4_cminst_wait_module_ready(u8 part, u16 inst, s16 cdoffs, u16 clkctrl_offs);
|
||||
|
||||
# ifdef CONFIG_ARCH_OMAP4
|
||||
extern int omap4_cminst_wait_module_idle(u8 part, u16 inst, s16 cdoffs,
|
||||
u16 clkctrl_offs);
|
||||
|
||||
extern void omap4_cminst_module_enable(u8 mode, u8 part, u16 inst, s16 cdoffs,
|
||||
u16 clkctrl_offs);
|
||||
extern void omap4_cminst_module_disable(u8 part, u16 inst, s16 cdoffs,
|
||||
u16 clkctrl_offs);
|
||||
|
||||
# else
|
||||
|
||||
static inline int omap4_cminst_wait_module_idle(u8 part, u16 inst, s16 cdoffs,
|
||||
u16 clkctrl_offs)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void omap4_cminst_module_enable(u8 mode, u8 part, u16 inst,
|
||||
s16 cdoffs, u16 clkctrl_offs)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void omap4_cminst_module_disable(u8 part, u16 inst, s16 cdoffs,
|
||||
u16 clkctrl_offs)
|
||||
{
|
||||
}
|
||||
|
||||
# endif
|
||||
|
||||
/*
|
||||
* In an ideal world, we would not export these low-level functions,
|
||||
* but this will probably take some time to fix properly
|
||||
|
@ -29,8 +29,6 @@
|
||||
|
||||
/* Global address base setup code */
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
|
||||
|
||||
static void __init __omap2_set_globals(struct omap_globals *omap2_globals)
|
||||
{
|
||||
omap2_set_globals_tap(omap2_globals);
|
||||
@ -39,8 +37,6 @@ static void __init __omap2_set_globals(struct omap_globals *omap2_globals)
|
||||
omap2_set_globals_prcm(omap2_globals);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SOC_OMAP2420)
|
||||
|
||||
static struct omap_globals omap242x_globals = {
|
||||
@ -134,7 +130,9 @@ void __init ti81xx_map_io(void)
|
||||
{
|
||||
omapti81xx_map_common_io();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SOC_AM33XX)
|
||||
#define AM33XX_TAP_BASE (AM33XX_CTRL_BASE + \
|
||||
TI81XX_CONTROL_DEVICE_ID - 0x204)
|
||||
|
||||
@ -171,9 +169,7 @@ static struct omap_globals omap4_globals = {
|
||||
|
||||
void __init omap2_set_globals_443x(void)
|
||||
{
|
||||
omap2_set_globals_tap(&omap4_globals);
|
||||
omap2_set_globals_control(&omap4_globals);
|
||||
omap2_set_globals_prcm(&omap4_globals);
|
||||
__omap2_set_globals(&omap4_globals);
|
||||
}
|
||||
|
||||
void __init omap4_map_io(void)
|
||||
|
@ -174,7 +174,12 @@ void omap2_set_globals_am33xx(void);
|
||||
|
||||
/* These get called from omap2_set_globals_xxxx(), do not call these */
|
||||
void omap2_set_globals_tap(struct omap_globals *);
|
||||
#if defined(CONFIG_SOC_HAS_OMAP2_SDRC)
|
||||
void omap2_set_globals_sdrc(struct omap_globals *);
|
||||
#else
|
||||
static inline void omap2_set_globals_sdrc(struct omap_globals *omap2_globals)
|
||||
{ }
|
||||
#endif
|
||||
void omap2_set_globals_control(struct omap_globals *);
|
||||
void omap2_set_globals_prcm(struct omap_globals *);
|
||||
|
||||
|
@ -188,6 +188,7 @@
|
||||
#define OMAP3630_CONTROL_FUSE_OPP120_VDD1 (OMAP2_CONTROL_GENERAL + 0x0120)
|
||||
#define OMAP3630_CONTROL_FUSE_OPP50_VDD2 (OMAP2_CONTROL_GENERAL + 0x0128)
|
||||
#define OMAP3630_CONTROL_FUSE_OPP100_VDD2 (OMAP2_CONTROL_GENERAL + 0x012C)
|
||||
#define OMAP3630_CONTROL_CAMERA_PHY_CTRL (OMAP2_CONTROL_GENERAL + 0x02f0)
|
||||
|
||||
/* OMAP44xx control efuse offsets */
|
||||
#define OMAP44XX_CONTROL_FUSE_IVA_OPP50 0x22C
|
||||
|
@ -135,11 +135,20 @@ static u16 _omap3_dpll_compute_freqsel(struct clk *clk, u8 n)
|
||||
*/
|
||||
static int _omap3_noncore_dpll_lock(struct clk *clk)
|
||||
{
|
||||
const struct dpll_data *dd;
|
||||
u8 ai;
|
||||
int r;
|
||||
u8 state = 1;
|
||||
int r = 0;
|
||||
|
||||
pr_debug("clock: locking DPLL %s\n", clk->name);
|
||||
|
||||
dd = clk->dpll_data;
|
||||
state <<= __ffs(dd->idlest_mask);
|
||||
|
||||
/* Check if already locked */
|
||||
if ((__raw_readl(dd->idlest_reg) & dd->idlest_mask) == state)
|
||||
goto done;
|
||||
|
||||
ai = omap3_dpll_autoidle_read(clk);
|
||||
|
||||
if (ai)
|
||||
@ -152,6 +161,7 @@ static int _omap3_noncore_dpll_lock(struct clk *clk)
|
||||
if (ai)
|
||||
omap3_dpll_allow_idle(clk);
|
||||
|
||||
done:
|
||||
return r;
|
||||
}
|
||||
|
||||
@ -628,3 +638,17 @@ unsigned long omap3_clkoutx2_recalc(struct clk *clk)
|
||||
rate = clk->parent->rate * 2;
|
||||
return rate;
|
||||
}
|
||||
|
||||
/* OMAP3/4 non-CORE DPLL clkops */
|
||||
|
||||
const struct clkops clkops_omap3_noncore_dpll_ops = {
|
||||
.enable = omap3_noncore_dpll_enable,
|
||||
.disable = omap3_noncore_dpll_disable,
|
||||
.allow_idle = omap3_dpll_allow_idle,
|
||||
.deny_idle = omap3_dpll_deny_idle,
|
||||
};
|
||||
|
||||
const struct clkops clkops_omap3_core_dpll_ops = {
|
||||
.allow_idle = omap3_dpll_allow_idle,
|
||||
.deny_idle = omap3_dpll_deny_idle,
|
||||
};
|
||||
|
@ -44,7 +44,7 @@ int omap_type(void)
|
||||
|
||||
if (cpu_is_omap24xx()) {
|
||||
val = omap_ctrl_readl(OMAP24XX_CONTROL_STATUS);
|
||||
} else if (cpu_is_am33xx()) {
|
||||
} else if (soc_is_am33xx()) {
|
||||
val = omap_ctrl_readl(AM33XX_CONTROL_STATUS);
|
||||
} else if (cpu_is_omap34xx()) {
|
||||
val = omap_ctrl_readl(OMAP343X_CONTROL_STATUS);
|
||||
@ -189,7 +189,7 @@ static void __init omap3_cpuinfo(void)
|
||||
cpu_name = (omap3_has_sgx()) ? "AM3517" : "AM3505";
|
||||
} else if (cpu_is_ti816x()) {
|
||||
cpu_name = "TI816X";
|
||||
} else if (cpu_is_am335x()) {
|
||||
} else if (soc_is_am335x()) {
|
||||
cpu_name = "AM335X";
|
||||
} else if (cpu_is_ti814x()) {
|
||||
cpu_name = "TI814X";
|
||||
|
@ -415,6 +415,49 @@ static int _set_softreset(struct omap_hwmod *oh, u32 *v)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* _set_dmadisable: set OCP_SYSCONFIG.DMADISABLE bit in @v
|
||||
* @oh: struct omap_hwmod *
|
||||
*
|
||||
* The DMADISABLE bit is a semi-automatic bit present in sysconfig register
|
||||
* of some modules. When the DMA must perform read/write accesses, the
|
||||
* DMADISABLE bit is cleared by the hardware. But when the DMA must stop
|
||||
* for power management, software must set the DMADISABLE bit back to 1.
|
||||
*
|
||||
* Set the DMADISABLE bit in @v for hwmod @oh. Returns -EINVAL upon
|
||||
* error or 0 upon success.
|
||||
*/
|
||||
static int _set_dmadisable(struct omap_hwmod *oh)
|
||||
{
|
||||
u32 v;
|
||||
u32 dmadisable_mask;
|
||||
|
||||
if (!oh->class->sysc ||
|
||||
!(oh->class->sysc->sysc_flags & SYSC_HAS_DMADISABLE))
|
||||
return -EINVAL;
|
||||
|
||||
if (!oh->class->sysc->sysc_fields) {
|
||||
WARN(1, "omap_hwmod: %s: offset struct for sysconfig not provided in class\n", oh->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* clocks must be on for this operation */
|
||||
if (oh->_state != _HWMOD_STATE_ENABLED) {
|
||||
pr_warn("omap_hwmod: %s: dma can be disabled only from enabled state\n", oh->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
pr_debug("omap_hwmod: %s: setting DMADISABLE\n", oh->name);
|
||||
|
||||
v = oh->_sysc_cache;
|
||||
dmadisable_mask =
|
||||
(0x1 << oh->class->sysc->sysc_fields->dmadisable_shift);
|
||||
v |= dmadisable_mask;
|
||||
_write_sysconfig(v, oh);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* _set_module_autoidle: set the OCP_SYSCONFIG AUTOIDLE field in @v
|
||||
* @oh: struct omap_hwmod *
|
||||
@ -1668,11 +1711,17 @@ dis_opt_clks:
|
||||
* therefore have no OCP header registers to access. Others (like the
|
||||
* IVA) have idiosyncratic reset sequences. So for these relatively
|
||||
* rare cases, custom reset code can be supplied in the struct
|
||||
* omap_hwmod_class .reset function pointer. Passes along the return
|
||||
* value from either _ocp_softreset() or the custom reset function -
|
||||
* these must return -EINVAL if the hwmod cannot be reset this way or
|
||||
* if the hwmod is in the wrong state, -ETIMEDOUT if the module did
|
||||
* not reset in time, or 0 upon success.
|
||||
* omap_hwmod_class .reset function pointer.
|
||||
*
|
||||
* _set_dmadisable() is called to set the DMADISABLE bit so that it
|
||||
* does not prevent idling of the system. This is necessary for cases
|
||||
* where ROMCODE/BOOTLOADER uses dma and transfers control to the
|
||||
* kernel without disabling dma.
|
||||
*
|
||||
* Passes along the return value from either _ocp_softreset() or the
|
||||
* custom reset function - these must return -EINVAL if the hwmod
|
||||
* cannot be reset this way or if the hwmod is in the wrong state,
|
||||
* -ETIMEDOUT if the module did not reset in time, or 0 upon success.
|
||||
*/
|
||||
static int _reset(struct omap_hwmod *oh)
|
||||
{
|
||||
@ -1694,6 +1743,8 @@ static int _reset(struct omap_hwmod *oh)
|
||||
}
|
||||
}
|
||||
|
||||
_set_dmadisable(oh);
|
||||
|
||||
/*
|
||||
* OCP_SYSCONFIG bits need to be reprogrammed after a
|
||||
* softreset. The _enable() function should be split to avoid
|
||||
@ -3598,3 +3649,18 @@ void __init omap_hwmod_init(void)
|
||||
|
||||
inited = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* omap_hwmod_get_main_clk - get pointer to main clock name
|
||||
* @oh: struct omap_hwmod *
|
||||
*
|
||||
* Returns the main clock name assocated with @oh upon success,
|
||||
* or NULL if @oh is NULL.
|
||||
*/
|
||||
const char *omap_hwmod_get_main_clk(struct omap_hwmod *oh)
|
||||
{
|
||||
if (!oh)
|
||||
return NULL;
|
||||
|
||||
return oh->main_clk;
|
||||
}
|
||||
|
@ -47,6 +47,16 @@ struct omap_hwmod_sysc_fields omap_hwmod_sysc_type2 = {
|
||||
.midle_shift = SYSC_TYPE2_MIDLEMODE_SHIFT,
|
||||
.sidle_shift = SYSC_TYPE2_SIDLEMODE_SHIFT,
|
||||
.srst_shift = SYSC_TYPE2_SOFTRESET_SHIFT,
|
||||
.dmadisable_shift = SYSC_TYPE2_DMADISABLE_SHIFT,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct omap_hwmod_sysc_type3 - TYPE3 sysconfig scheme.
|
||||
* Used by some IPs on AM33xx
|
||||
*/
|
||||
struct omap_hwmod_sysc_fields omap_hwmod_sysc_type3 = {
|
||||
.midle_shift = SYSC_TYPE3_MIDLEMODE_SHIFT,
|
||||
.sidle_shift = SYSC_TYPE3_SIDLEMODE_SHIFT,
|
||||
};
|
||||
|
||||
struct omap_dss_dispc_dev_attr omap2_3_dss_dispc_dev_attr = {
|
||||
|
@ -526,7 +526,8 @@ int pwrdm_read_next_pwrst(struct powerdomain *pwrdm)
|
||||
*
|
||||
* Return the powerdomain @pwrdm's current power state. Returns -EINVAL
|
||||
* if the powerdomain pointer is null or returns the current power state
|
||||
* upon success.
|
||||
* upon success. Note that if the power domain only supports the ON state
|
||||
* then just return ON as the current state.
|
||||
*/
|
||||
int pwrdm_read_pwrst(struct powerdomain *pwrdm)
|
||||
{
|
||||
@ -535,6 +536,9 @@ int pwrdm_read_pwrst(struct powerdomain *pwrdm)
|
||||
if (!pwrdm)
|
||||
return -EINVAL;
|
||||
|
||||
if (pwrdm->pwrsts == PWRSTS_ON)
|
||||
return PWRDM_POWER_ON;
|
||||
|
||||
if (arch_pwrdm && arch_pwrdm->pwrdm_read_pwrst)
|
||||
ret = arch_pwrdm->pwrdm_read_pwrst(pwrdm);
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
||||
#include "prm2xxx_3xxx.h"
|
||||
#include "prm44xx.h"
|
||||
#include "prminst44xx.h"
|
||||
#include "cminst44xx.h"
|
||||
#include "prm-regbits-24xx.h"
|
||||
#include "prm-regbits-44xx.h"
|
||||
#include "control.h"
|
||||
@ -164,3 +165,25 @@ void __init omap2_set_globals_prcm(struct omap_globals *omap2_globals)
|
||||
omap_cm_base_init();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Stubbed functions so that common files continue to build when
|
||||
* custom builds are used
|
||||
* XXX These are temporary and should be removed at the earliest possible
|
||||
* opportunity
|
||||
*/
|
||||
int __weak omap4_cminst_wait_module_idle(u8 part, u16 inst, s16 cdoffs,
|
||||
u16 clkctrl_offs)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void __weak omap4_cminst_module_enable(u8 mode, u8 part, u16 inst,
|
||||
s16 cdoffs, u16 clkctrl_offs)
|
||||
{
|
||||
}
|
||||
|
||||
void __weak omap4_cminst_module_disable(u8 part, u16 inst, s16 cdoffs,
|
||||
u16 clkctrl_offs)
|
||||
{
|
||||
}
|
||||
|
@ -228,68 +228,6 @@
|
||||
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
/*
|
||||
* Stub omap2xxx/omap3xxx functions so that common files
|
||||
* continue to build when custom builds are used
|
||||
*/
|
||||
#if defined(CONFIG_ARCH_OMAP4) && !(defined(CONFIG_ARCH_OMAP2) || \
|
||||
defined(CONFIG_ARCH_OMAP3))
|
||||
static inline u32 omap2_prm_read_mod_reg(s16 module, u16 idx)
|
||||
{
|
||||
WARN(1, "prm: omap2xxx/omap3xxx specific function and "
|
||||
"not suppose to be used on omap4\n");
|
||||
return 0;
|
||||
}
|
||||
static inline void omap2_prm_write_mod_reg(u32 val, s16 module, u16 idx)
|
||||
{
|
||||
WARN(1, "prm: omap2xxx/omap3xxx specific function and "
|
||||
"not suppose to be used on omap4\n");
|
||||
}
|
||||
static inline u32 omap2_prm_rmw_mod_reg_bits(u32 mask, u32 bits,
|
||||
s16 module, s16 idx)
|
||||
{
|
||||
WARN(1, "prm: omap2xxx/omap3xxx specific function and "
|
||||
"not suppose to be used on omap4\n");
|
||||
return 0;
|
||||
}
|
||||
static inline u32 omap2_prm_set_mod_reg_bits(u32 bits, s16 module, s16 idx)
|
||||
{
|
||||
WARN(1, "prm: omap2xxx/omap3xxx specific function and "
|
||||
"not suppose to be used on omap4\n");
|
||||
return 0;
|
||||
}
|
||||
static inline u32 omap2_prm_clear_mod_reg_bits(u32 bits, s16 module, s16 idx)
|
||||
{
|
||||
WARN(1, "prm: omap2xxx/omap3xxx specific function and "
|
||||
"not suppose to be used on omap4\n");
|
||||
return 0;
|
||||
}
|
||||
static inline u32 omap2_prm_read_mod_bits_shift(s16 domain, s16 idx, u32 mask)
|
||||
{
|
||||
WARN(1, "prm: omap2xxx/omap3xxx specific function and "
|
||||
"not suppose to be used on omap4\n");
|
||||
return 0;
|
||||
}
|
||||
static inline int omap2_prm_is_hardreset_asserted(s16 prm_mod, u8 shift)
|
||||
{
|
||||
WARN(1, "prm: omap2xxx/omap3xxx specific function and "
|
||||
"not suppose to be used on omap4\n");
|
||||
return 0;
|
||||
}
|
||||
static inline int omap2_prm_assert_hardreset(s16 prm_mod, u8 shift)
|
||||
{
|
||||
WARN(1, "prm: omap2xxx/omap3xxx specific function and "
|
||||
"not suppose to be used on omap4\n");
|
||||
return 0;
|
||||
}
|
||||
static inline int omap2_prm_deassert_hardreset(s16 prm_mod, u8 rst_shift,
|
||||
u8 st_shift)
|
||||
{
|
||||
WARN(1, "prm: omap2xxx/omap3xxx specific function and "
|
||||
"not suppose to be used on omap4\n");
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
/* Power/reset management domain register get/set */
|
||||
extern u32 omap2_prm_read_mod_reg(s16 module, u16 idx);
|
||||
extern void omap2_prm_write_mod_reg(u32 val, s16 module, u16 idx);
|
||||
@ -320,9 +258,6 @@ extern void omap3xxx_prm_read_pending_irqs(unsigned long *events);
|
||||
extern void omap3xxx_prm_ocp_barrier(void);
|
||||
extern void omap3xxx_prm_save_and_clear_irqen(u32 *saved_mask);
|
||||
extern void omap3xxx_prm_restore_irqen(u32 *saved_mask);
|
||||
|
||||
#endif /* CONFIG_ARCH_OMAP4 */
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
@ -319,3 +319,65 @@ err:
|
||||
omap_prcm_irq_cleanup();
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/*
|
||||
* Stubbed functions so that common files continue to build when
|
||||
* custom builds are used
|
||||
* XXX These are temporary and should be removed at the earliest possible
|
||||
* opportunity
|
||||
*/
|
||||
u32 __weak omap2_prm_read_mod_reg(s16 module, u16 idx)
|
||||
{
|
||||
WARN(1, "prm: omap2xxx/omap3xxx specific function called on non-omap2xxx/3xxx\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
void __weak omap2_prm_write_mod_reg(u32 val, s16 module, u16 idx)
|
||||
{
|
||||
WARN(1, "prm: omap2xxx/omap3xxx specific function called on non-omap2xxx/3xxx\n");
|
||||
}
|
||||
|
||||
u32 __weak omap2_prm_rmw_mod_reg_bits(u32 mask, u32 bits,
|
||||
s16 module, s16 idx)
|
||||
{
|
||||
WARN(1, "prm: omap2xxx/omap3xxx specific function called on non-omap2xxx/3xxx\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 __weak omap2_prm_set_mod_reg_bits(u32 bits, s16 module, s16 idx)
|
||||
{
|
||||
WARN(1, "prm: omap2xxx/omap3xxx specific function called on non-omap2xxx/3xxx\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 __weak omap2_prm_clear_mod_reg_bits(u32 bits, s16 module, s16 idx)
|
||||
{
|
||||
WARN(1, "prm: omap2xxx/omap3xxx specific function called on non-omap2xxx/3xxx\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 __weak omap2_prm_read_mod_bits_shift(s16 domain, s16 idx, u32 mask)
|
||||
{
|
||||
WARN(1, "prm: omap2xxx/omap3xxx specific function called on non-omap2xxx/3xxx\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int __weak omap2_prm_is_hardreset_asserted(s16 prm_mod, u8 shift)
|
||||
{
|
||||
WARN(1, "prm: omap2xxx/omap3xxx specific function called on non-omap2xxx/3xxx\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int __weak omap2_prm_assert_hardreset(s16 prm_mod, u8 shift)
|
||||
{
|
||||
WARN(1, "prm: omap2xxx/omap3xxx specific function called on non-omap2xxx/3xxx\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int __weak omap2_prm_deassert_hardreset(s16 prm_mod, u8 rst_shift,
|
||||
u8 st_shift)
|
||||
{
|
||||
WARN(1, "prm: omap2xxx/omap3xxx specific function called on non-omap2xxx/3xxx\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -168,8 +168,7 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
|
||||
return -ENXIO;
|
||||
|
||||
/* After the dmtimer is using hwmod these clocks won't be needed */
|
||||
sprintf(name, "gpt%d_fck", gptimer_id);
|
||||
timer->fclk = clk_get(NULL, name);
|
||||
timer->fclk = clk_get(NULL, omap_hwmod_get_main_clk(oh));
|
||||
if (IS_ERR(timer->fclk))
|
||||
return -ENODEV;
|
||||
|
||||
|
@ -10,9 +10,7 @@ obj-n :=
|
||||
obj- :=
|
||||
|
||||
# omap_device support (OMAP2+ only at the moment)
|
||||
obj-$(CONFIG_ARCH_OMAP2) += omap_device.o
|
||||
obj-$(CONFIG_ARCH_OMAP3) += omap_device.o
|
||||
obj-$(CONFIG_ARCH_OMAP4) += omap_device.o
|
||||
obj-$(CONFIG_ARCH_OMAP2PLUS) += omap_device.o
|
||||
|
||||
obj-$(CONFIG_OMAP_DM_TIMER) += dmtimer.o
|
||||
obj-$(CONFIG_OMAP_DEBUG_DEVICES) += debug-devices.o
|
||||
|
@ -37,7 +37,7 @@
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
|
||||
@ -689,49 +689,39 @@ EXPORT_SYMBOL_GPL(omap_dm_timers_active);
|
||||
*/
|
||||
static int __devinit omap_dm_timer_probe(struct platform_device *pdev)
|
||||
{
|
||||
int ret;
|
||||
unsigned long flags;
|
||||
struct omap_dm_timer *timer;
|
||||
struct resource *mem, *irq, *ioarea;
|
||||
struct resource *mem, *irq;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct dmtimer_platform_data *pdata = pdev->dev.platform_data;
|
||||
|
||||
if (!pdata) {
|
||||
dev_err(&pdev->dev, "%s: no platform data.\n", __func__);
|
||||
dev_err(dev, "%s: no platform data.\n", __func__);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
|
||||
if (unlikely(!irq)) {
|
||||
dev_err(&pdev->dev, "%s: no IRQ resource.\n", __func__);
|
||||
dev_err(dev, "%s: no IRQ resource.\n", __func__);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (unlikely(!mem)) {
|
||||
dev_err(&pdev->dev, "%s: no memory resource.\n", __func__);
|
||||
dev_err(dev, "%s: no memory resource.\n", __func__);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
ioarea = request_mem_region(mem->start, resource_size(mem),
|
||||
pdev->name);
|
||||
if (!ioarea) {
|
||||
dev_err(&pdev->dev, "%s: region already claimed.\n", __func__);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
timer = kzalloc(sizeof(struct omap_dm_timer), GFP_KERNEL);
|
||||
timer = devm_kzalloc(dev, sizeof(struct omap_dm_timer), GFP_KERNEL);
|
||||
if (!timer) {
|
||||
dev_err(&pdev->dev, "%s: no memory for omap_dm_timer.\n",
|
||||
__func__);
|
||||
ret = -ENOMEM;
|
||||
goto err_free_ioregion;
|
||||
dev_err(dev, "%s: memory alloc failed!\n", __func__);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
timer->io_base = ioremap(mem->start, resource_size(mem));
|
||||
timer->io_base = devm_request_and_ioremap(dev, mem);
|
||||
if (!timer->io_base) {
|
||||
dev_err(&pdev->dev, "%s: ioremap failed.\n", __func__);
|
||||
ret = -ENOMEM;
|
||||
goto err_free_mem;
|
||||
dev_err(dev, "%s: region already claimed.\n", __func__);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
timer->id = pdev->id;
|
||||
@ -742,14 +732,14 @@ static int __devinit omap_dm_timer_probe(struct platform_device *pdev)
|
||||
|
||||
/* Skip pm_runtime_enable for OMAP1 */
|
||||
if (!(timer->capability & OMAP_TIMER_NEEDS_RESET)) {
|
||||
pm_runtime_enable(&pdev->dev);
|
||||
pm_runtime_irq_safe(&pdev->dev);
|
||||
pm_runtime_enable(dev);
|
||||
pm_runtime_irq_safe(dev);
|
||||
}
|
||||
|
||||
if (!timer->reserved) {
|
||||
pm_runtime_get_sync(&pdev->dev);
|
||||
pm_runtime_get_sync(dev);
|
||||
__omap_dm_timer_init_regs(timer);
|
||||
pm_runtime_put(&pdev->dev);
|
||||
pm_runtime_put(dev);
|
||||
}
|
||||
|
||||
/* add the timer element to the list */
|
||||
@ -757,17 +747,9 @@ static int __devinit omap_dm_timer_probe(struct platform_device *pdev)
|
||||
list_add_tail(&timer->node, &omap_timer_list);
|
||||
spin_unlock_irqrestore(&dm_timer_lock, flags);
|
||||
|
||||
dev_dbg(&pdev->dev, "Device Probed.\n");
|
||||
dev_dbg(dev, "Device Probed.\n");
|
||||
|
||||
return 0;
|
||||
|
||||
err_free_mem:
|
||||
kfree(timer);
|
||||
|
||||
err_free_ioregion:
|
||||
release_mem_region(mem->start, resource_size(mem));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -788,7 +770,6 @@ static int __devexit omap_dm_timer_remove(struct platform_device *pdev)
|
||||
list_for_each_entry(timer, &omap_timer_list, node)
|
||||
if (timer->pdev->id == pdev->id) {
|
||||
list_del(&timer->node);
|
||||
kfree(timer);
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
|
@ -150,8 +150,8 @@ IS_AM_SUBCLASS(335x, 0x335)
|
||||
#define cpu_is_ti816x() 0
|
||||
#define cpu_is_ti814x() 0
|
||||
#define soc_is_am35xx() 0
|
||||
#define cpu_is_am33xx() 0
|
||||
#define cpu_is_am335x() 0
|
||||
#define soc_is_am33xx() 0
|
||||
#define soc_is_am335x() 0
|
||||
#define cpu_is_omap44xx() 0
|
||||
#define cpu_is_omap443x() 0
|
||||
#define cpu_is_omap446x() 0
|
||||
@ -328,8 +328,6 @@ IS_OMAP_TYPE(3430, 0x3430)
|
||||
# undef cpu_is_ti816x
|
||||
# undef cpu_is_ti814x
|
||||
# undef soc_is_am35xx
|
||||
# undef cpu_is_am33xx
|
||||
# undef cpu_is_am335x
|
||||
# define cpu_is_omap3430() is_omap3430()
|
||||
# undef cpu_is_omap3630
|
||||
# define cpu_is_omap3630() is_omap363x()
|
||||
@ -337,8 +335,13 @@ IS_OMAP_TYPE(3430, 0x3430)
|
||||
# define cpu_is_ti816x() is_ti816x()
|
||||
# define cpu_is_ti814x() is_ti814x()
|
||||
# define soc_is_am35xx() is_am35xx()
|
||||
# define cpu_is_am33xx() is_am33xx()
|
||||
# define cpu_is_am335x() is_am335x()
|
||||
#endif
|
||||
|
||||
# if defined(CONFIG_SOC_AM33XX)
|
||||
# undef soc_is_am33xx
|
||||
# undef soc_is_am335x
|
||||
# define soc_is_am33xx() is_am33xx()
|
||||
# define soc_is_am335x() is_am335x()
|
||||
#endif
|
||||
|
||||
# if defined(CONFIG_ARCH_OMAP4)
|
||||
@ -392,7 +395,7 @@ IS_OMAP_TYPE(3430, 0x3430)
|
||||
#define AM35XX_REV_ES1_0 AM35XX_CLASS
|
||||
#define AM35XX_REV_ES1_1 (AM35XX_CLASS | (0x1 << 8))
|
||||
|
||||
#define AM335X_CLASS 0x33500034
|
||||
#define AM335X_CLASS 0x33500033
|
||||
#define AM335X_REV_ES1_0 AM335X_CLASS
|
||||
|
||||
#define OMAP443X_CLASS 0x44300044
|
||||
|
@ -41,6 +41,7 @@ struct omap_device;
|
||||
|
||||
extern struct omap_hwmod_sysc_fields omap_hwmod_sysc_type1;
|
||||
extern struct omap_hwmod_sysc_fields omap_hwmod_sysc_type2;
|
||||
extern struct omap_hwmod_sysc_fields omap_hwmod_sysc_type3;
|
||||
|
||||
/*
|
||||
* OCP SYSCONFIG bit shifts/masks TYPE1. These are for IPs compliant
|
||||
@ -69,6 +70,17 @@ extern struct omap_hwmod_sysc_fields omap_hwmod_sysc_type2;
|
||||
#define SYSC_TYPE2_SIDLEMODE_MASK (0x3 << SYSC_TYPE2_SIDLEMODE_SHIFT)
|
||||
#define SYSC_TYPE2_MIDLEMODE_SHIFT 4
|
||||
#define SYSC_TYPE2_MIDLEMODE_MASK (0x3 << SYSC_TYPE2_MIDLEMODE_SHIFT)
|
||||
#define SYSC_TYPE2_DMADISABLE_SHIFT 16
|
||||
#define SYSC_TYPE2_DMADISABLE_MASK (0x1 << SYSC_TYPE2_DMADISABLE_SHIFT)
|
||||
|
||||
/*
|
||||
* OCP SYSCONFIG bit shifts/masks TYPE3.
|
||||
* This is applicable for some IPs present in AM33XX
|
||||
*/
|
||||
#define SYSC_TYPE3_SIDLEMODE_SHIFT 0
|
||||
#define SYSC_TYPE3_SIDLEMODE_MASK (0x3 << SYSC_TYPE3_SIDLEMODE_SHIFT)
|
||||
#define SYSC_TYPE3_MIDLEMODE_SHIFT 2
|
||||
#define SYSC_TYPE3_MIDLEMODE_MASK (0x3 << SYSC_TYPE3_MIDLEMODE_SHIFT)
|
||||
|
||||
/* OCP SYSSTATUS bit shifts/masks */
|
||||
#define SYSS_RESETDONE_SHIFT 0
|
||||
@ -283,6 +295,7 @@ struct omap_hwmod_ocp_if {
|
||||
#define SYSS_HAS_RESET_STATUS (1 << 7)
|
||||
#define SYSC_NO_CACHE (1 << 8) /* XXX SW flag, belongs elsewhere */
|
||||
#define SYSC_HAS_RESET_STATUS (1 << 9)
|
||||
#define SYSC_HAS_DMADISABLE (1 << 10)
|
||||
|
||||
/* omap_hwmod_sysconfig.clockact flags */
|
||||
#define CLOCKACT_TEST_BOTH 0x0
|
||||
@ -298,6 +311,7 @@ struct omap_hwmod_ocp_if {
|
||||
* @enwkup_shift: Offset of the enawakeup bit
|
||||
* @srst_shift: Offset of the softreset bit
|
||||
* @autoidle_shift: Offset of the autoidle bit
|
||||
* @dmadisable_shift: Offset of the dmadisable bit
|
||||
*/
|
||||
struct omap_hwmod_sysc_fields {
|
||||
u8 midle_shift;
|
||||
@ -306,6 +320,7 @@ struct omap_hwmod_sysc_fields {
|
||||
u8 enwkup_shift;
|
||||
u8 srst_shift;
|
||||
u8 autoidle_shift;
|
||||
u8 dmadisable_shift;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -374,11 +389,13 @@ struct omap_hwmod_omap2_prcm {
|
||||
* struct omap_hwmod_omap4_prcm - OMAP4-specific PRCM data
|
||||
* @clkctrl_reg: PRCM address of the clock control register
|
||||
* @rstctrl_reg: address of the XXX_RSTCTRL register located in the PRM
|
||||
* @rstst_reg: (AM33XX only) address of the XXX_RSTST register in the PRM
|
||||
* @submodule_wkdep_bit: bit shift of the WKDEP range
|
||||
*/
|
||||
struct omap_hwmod_omap4_prcm {
|
||||
u16 clkctrl_offs;
|
||||
u16 rstctrl_offs;
|
||||
u16 rstst_offs;
|
||||
u16 context_offs;
|
||||
u8 submodule_wkdep_bit;
|
||||
u8 modulemode;
|
||||
@ -631,6 +648,8 @@ int omap_hwmod_pad_route_irq(struct omap_hwmod *oh, int pad_idx, int irq_idx);
|
||||
|
||||
extern void __init omap_hwmod_init(void);
|
||||
|
||||
const char *omap_hwmod_get_main_clk(struct omap_hwmod *oh);
|
||||
|
||||
/*
|
||||
* Chip variant-specific hwmod init routines - XXX should be converted
|
||||
* to use initcalls once the initial boot ordering is straightened out
|
||||
|
@ -123,7 +123,7 @@ struct omap_sdrc_params {
|
||||
u32 mr;
|
||||
};
|
||||
|
||||
#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
|
||||
#ifdef CONFIG_SOC_HAS_OMAP2_SDRC
|
||||
void omap2_sdrc_init(struct omap_sdrc_params *sdrc_cs0,
|
||||
struct omap_sdrc_params *sdrc_cs1);
|
||||
#else
|
||||
|
@ -85,7 +85,7 @@ static int is_sram_locked(void)
|
||||
__raw_writel(0xCFDE, OMAP24XX_VA_READPERM0); /* all i-read */
|
||||
__raw_writel(0xCFDE, OMAP24XX_VA_WRITEPERM0); /* all i-write */
|
||||
}
|
||||
if (cpu_is_omap34xx() && !cpu_is_am33xx()) {
|
||||
if (cpu_is_omap34xx()) {
|
||||
__raw_writel(0xFFFF, OMAP34XX_VA_REQINFOPERM0); /* all q-vects */
|
||||
__raw_writel(0xFFFF, OMAP34XX_VA_READPERM0); /* all i-read */
|
||||
__raw_writel(0xFFFF, OMAP34XX_VA_WRITEPERM0); /* all i-write */
|
||||
@ -123,7 +123,7 @@ static void __init omap_detect_sram(void)
|
||||
omap_sram_size = 0x800; /* 2K */
|
||||
}
|
||||
} else {
|
||||
if (cpu_is_am33xx()) {
|
||||
if (soc_is_am33xx()) {
|
||||
omap_sram_start = AM33XX_SRAM_PA;
|
||||
omap_sram_size = 0x10000; /* 64K */
|
||||
} else if (cpu_is_omap34xx()) {
|
||||
@ -386,7 +386,7 @@ int __init omap_sram_init(void)
|
||||
omap242x_sram_init();
|
||||
else if (cpu_is_omap2430())
|
||||
omap243x_sram_init();
|
||||
else if (cpu_is_am33xx())
|
||||
else if (soc_is_am33xx())
|
||||
am33xx_sram_init();
|
||||
else if (cpu_is_omap34xx())
|
||||
omap34xx_sram_init();
|
||||
|
Loading…
Reference in New Issue
Block a user