ARM: OMAP2+: AM43x PRCM basic support
Subsystems (6)
v3 cover ARM: OMAP2+: AM43x PRCM basic support
Hi Paul, Benoit,
This series adds PRCM support for AM43x SoC's. It has been modified as compared to last version based on Rajendra's comments and discussion with him, please let me know your comments on this series.
Major changes (as compared to v2):
1. omap_hwmod_33xx_43xx_interconnect_data.c has all the common interconnect ocp's structs shared between AM335x and AM43x
2. omap_hwmod_33xx_43xx_ipblock_data.c has all the common hwmod structs shared between AM335x and AM43x
3. Instances where clock domain or clock topology has changed in the few cases, have separate structures for AM335x and AM43x
4. To handle scenarios where register offsets are different, they are dynamically init-ed in omap_hwmod_33xx_43xx_ipblock_data.c
5. Register offsets for hwmod's that are present either in AM335x or AM43x are updated statically in omap_hwmod_33xx_data.c or omap_hwmod_43xx_data.c as that was cleaner.
Please note that this series is only compile tested, yet to be tested on pre-silicon platform (hence RFC), testing on pre-silicon platform takes huge amount of time (1 second realtime ~ 1 hour on pre-silicon). Here the intention is to get early feedback on the approach taken for hwmod.
This series has been boot tested on AM335x-EVM.
And the diffstat is now +1500 (+3500 -2000).
The change that re-introduces SW_SLEEP for OMAP4 has been left out from this series, it will be properly taken care in the next version - as here main intention is to know acceptability of approach towards hwmod.
Some more details:
AM43x reuses most of the IP's from AM335x, as that is the case, much of the AM335x hwmod data is reused. As AM43x PRCM register layout differs from AM335x and is similar to OMAP4, power domain, clock domain & hwmod operations are reused from OMAP4. Currently there is no public TRM available for AM43x.
Regards
Afzal
Afzal Mohammed (8):
ARM: OMAP2+: hwmod: AM335x/AM43x: move common ocpif
ARM: OMAP2+: hwmod: AM335x/AM43x: move common hwmod
ARM: OMAP2+: hwmod: AM335x: runtime register update
ARM: OMAP2+: hwmod: AM335x: remove static register offs
ARM: OMAP2+: PRCM: AM43x definitions
ARM: OMAP2+: hwmod: AM43x support
ARM: OMAP2+: hwmod: AM43x operations
ARM: OMAP2+: AM43x: PRCM kbuild
Ambresh K (3):
ARM: OMAP2+: PM: AM43x powerdomain data
ARM: OMAP2+: CM: AM43x clockdomain data
ARM: OMAP2+: AM43x PRCM init
Ankur Kishore (1):
ARM: OMAP2+: CM: cm_inst offset s16->u16
arch/arm/mach-omap2/Makefile | 9 +- arch/arm/mach-omap2/clockdomain.h | 4 +- arch/arm/mach-omap2/clockdomains43xx_data.c | 199 ++ arch/arm/mach-omap2/cm33xx.c | 30 +- arch/arm/mach-omap2/cm33xx.h | 28 +- arch/arm/mach-omap2/cminst44xx.c | 40 +- arch/arm/mach-omap2/cminst44xx.h | 25 +- arch/arm/mach-omap2/io.c | 6 + arch/arm/mach-omap2/omap_hwmod.c | 8 + arch/arm/mach-omap2/omap_hwmod.h | 1 + arch/arm/mach-omap2/omap_hwmod_33xx_43xx_common.h | 157 ++ .../omap_hwmod_33xx_43xx_interconnect_data.c | 656 +++++++ .../mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c | 1475 +++++++++++++++ arch/arm/mach-omap2/omap_hwmod_33xx_data.c | 1969 +------------------- arch/arm/mach-omap2/omap_hwmod_43xx_data.c | 645 +++++++ arch/arm/mach-omap2/powerdomain.h | 1 + arch/arm/mach-omap2/powerdomains43xx_data.c | 145 ++ arch/arm/mach-omap2/prcm43xx.h | 141 ++ 18 files changed, 3514 insertions(+), 2025 deletions(-) create mode 100644 arch/arm/mach-omap2/clockdomains43xx_data.c create mode 100644 arch/arm/mach-omap2/omap_hwmod_33xx_43xx_common.h create mode 100644 arch/arm/mach-omap2/omap_hwmod_33xx_43xx_interconnect_data.c create mode 100644 arch/arm/mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c create mode 100644 arch/arm/mach-omap2/omap_hwmod_43xx_data.c create mode 100644 arch/arm/mach-omap2/powerdomains43xx_data.c create mode 100644 arch/arm/mach-omap2/prcm43xx.h
Signature · 1 line
1.8.3.4
RFC PATCH v3 1/12 ARM: OMAP2+: CM: cm_inst offset s16->u16
From: Ankur Kishore <[email protected]>
Most of the AM43x CM reg address offsets are with MSB bit '1' (on 16-bit value) leading to arithmetic miscalculations while calculating CLOCK ENABLE register's address because cm_inst field was a type of "const s16", so make it "const u16".
Also modify relevant functions so as to take care of the above.
--- arch/arm/mach-omap2/clockdomain.h | 2 +- arch/arm/mach-omap2/cm33xx.c | 30 +++++++++++++++--------------- arch/arm/mach-omap2/cm33xx.h | 26 +++++++++++++------------- arch/arm/mach-omap2/cminst44xx.c | 31 ++++++++++++++++--------------- arch/arm/mach-omap2/cminst44xx.h | 25 +++++++++++++------------ 5 files changed, 58 insertions(+), 56 deletions(-)
arch/arm/mach-omap2/clockdomain.h +1 -1
@@ -132,7 +132,7 @@ struct clockdomain {u8 _flags;const u8 dep_bit;const u8 prcm_partition; -const s16 cm_inst; +const u16 cm_inst;const u16 clkdm_offs;struct clkdm_dep *wkdep_srcs;struct clkdm_dep *sleepdep_srcs;
arch/arm/mach-omap2/cm33xx.c +15 -15
@@ -48,13 +48,13 @@/* Private functions */ /* Read a register in a CM instance */ -static inline u32 am33xx_cm_read_reg (s16 inst,u16 idx) +static inline u32 am33xx_cm_read_reg (u16 inst,u16 idx) {return __raw_readl (cm_base + inst + idx); }/* Write into a register in a CM */ -static inline void am33xx_cm_write_reg (u32 val,s16 inst,u16 idx) +static inline void am33xx_cm_write_reg (u32 val,u16 inst,u16 idx) {__raw_writel (val, cm_base + inst + idx); }
@@ -82,7 +82,7 @@ static inline u32 am33xx_cm_clear_reg_bits(u32 bits, s16 inst, s16 idx)return am33xx_cm_rmw_reg_bits (bits,0x0 , inst, idx); } -static inline u32 am33xx_cm_read_reg_bits (u16 inst,s16 idx,u32 mask) +static inline u32 am33xx_cm_read_reg_bits (u16 inst,u16 idx,u32 mask) {u32 v;
@@ -102,7 +102,7 @@ static inline u32 am33xx_cm_read_reg_bits(u16 inst, s16 idx, u32 mask)* Return the IDLEST bitfield of a CM_*_CLKCTRL register, shifted down to * bit 0. */ -static u32 _clkctrl_idlest (u16 inst,s16 cdoffs,u16 clkctrl_offs) +static u32 _clkctrl_idlest (u16 inst,u16 cdoffs,u16 clkctrl_offs) {u32 v =am33xx_cm_read_reg (inst, clkctrl_offs); v &=AM33XX_IDLEST_MASK ;
@@ -119,7 +119,7 @@ static u32 _clkctrl_idlest(u16 inst, s16 cdoffs, u16 clkctrl_offs)* Returns true if the module's CM_*_CLKCTRL.IDLEST bitfield is either * *FUNCTIONAL or *INTERFACE_IDLE; false otherwise. */ -static bool _is_module_ready (u16 inst,s16 cdoffs,u16 clkctrl_offs) +static bool _is_module_ready (u16 inst,u16 cdoffs,u16 clkctrl_offs) {u32 v;
@@ -138,7 +138,7 @@ static bool _is_module_ready(u16 inst, s16 cdoffs, u16 clkctrl_offs)* @c must be the unshifted value for CLKTRCTRL - i.e., this function * will handle the shift itself. */ -static void _clktrctrl_write (u8 c,s16 inst,u16 cdoffs) +static void _clktrctrl_write (u8 c,u16 inst,u16 cdoffs) {u32 v;
@@ -158,7 +158,7 @@ static void _clktrctrl_write(u8 c, s16 inst, u16 cdoffs)* Returns true if the clockdomain referred to by (@inst, @cdoffs) * is in hardware-supervised idle mode, or 0 otherwise. */ -bool am33xx_cm_is_clkdm_in_hwsup (s16 inst,u16 cdoffs) +bool am33xx_cm_is_clkdm_in_hwsup (u16 inst,u16 cdoffs) {u32 v;
@@ -177,7 +177,7 @@ bool am33xx_cm_is_clkdm_in_hwsup(s16 inst, u16 cdoffs)* Put a clockdomain referred to by (@inst, @cdoffs) into * hardware-supervised idle mode. No return value. */ -void am33xx_cm_clkdm_enable_hwsup (s16 inst,u16 cdoffs) +void am33xx_cm_clkdm_enable_hwsup (u16 inst,u16 cdoffs) {_clktrctrl_write (OMAP34XX_CLKSTCTRL_ENABLE_AUTO , inst, cdoffs); }
@@ -191,7 +191,7 @@ void am33xx_cm_clkdm_enable_hwsup(s16 inst, u16 cdoffs)* software-supervised idle mode, i.e., controlled manually by the * Linux OMAP clockdomain code. No return value. */ -void am33xx_cm_clkdm_disable_hwsup (s16 inst,u16 cdoffs) +void am33xx_cm_clkdm_disable_hwsup (u16 inst,u16 cdoffs) {_clktrctrl_write (OMAP34XX_CLKSTCTRL_DISABLE_AUTO , inst, cdoffs); }
@@ -204,7 +204,7 @@ void am33xx_cm_clkdm_disable_hwsup(s16 inst, u16 cdoffs)* Put a clockdomain referred to by (@inst, @cdoffs) into idle * No return value. */ -void am33xx_cm_clkdm_force_sleep (s16 inst,u16 cdoffs) +void am33xx_cm_clkdm_force_sleep (u16 inst,u16 cdoffs) {_clktrctrl_write (OMAP34XX_CLKSTCTRL_FORCE_SLEEP , inst, cdoffs); }
@@ -217,7 +217,7 @@ void am33xx_cm_clkdm_force_sleep(s16 inst, u16 cdoffs)* Take a clockdomain referred to by (@inst, @cdoffs) out of idle, * waking it up. No return value. */ -void am33xx_cm_clkdm_force_wakeup (s16 inst,u16 cdoffs) +void am33xx_cm_clkdm_force_wakeup (u16 inst,u16 cdoffs) {_clktrctrl_write (OMAP34XX_CLKSTCTRL_FORCE_WAKEUP , inst, cdoffs); }
@@ -237,7 +237,7 @@ void am33xx_cm_clkdm_force_wakeup(s16 inst, u16 cdoffs)* sysconfig cannot be accessed and will probably lead to an "imprecise * external abort" */ -int am33xx_cm_wait_module_ready (u16 inst,s16 cdoffs,u16 clkctrl_offs) +int am33xx_cm_wait_module_ready (u16 inst,u16 cdoffs,u16 clkctrl_offs) {int i =0 ;
@@ -258,7 +258,7 @@ int am33xx_cm_wait_module_ready(u16 inst, s16 cdoffs, u16 clkctrl_offs)* like reset assertion or parent clock de-activation must wait the * module to be fully disabled. */ -int am33xx_cm_wait_module_idle (u16 inst,s16 cdoffs,u16 clkctrl_offs) +int am33xx_cm_wait_module_idle (u16 inst,u16 cdoffs,u16 clkctrl_offs) {int i =0 ;
@@ -281,7 +281,7 @@ int am33xx_cm_wait_module_idle(u16 inst, s16 cdoffs, u16 clkctrl_offs)* * No return value. */ -void am33xx_cm_module_enable (u8 mode,u16 inst,s16 cdoffs,u16 clkctrl_offs) +void am33xx_cm_module_enable (u8 mode,u16 inst,u16 cdoffs,u16 clkctrl_offs) {u32 v;
@@ -299,7 +299,7 @@ void am33xx_cm_module_enable(u8 mode, u16 inst, s16 cdoffs, u16 clkctrl_offs)* * No return value. */ -void am33xx_cm_module_disable (u16 inst,s16 cdoffs,u16 clkctrl_offs) +void am33xx_cm_module_disable (u16 inst,u16 cdoffs,u16 clkctrl_offs) {u32 v;
arch/arm/mach-omap2/cm33xx.h +13 -13
@@ -377,36 +377,36 @@ #ifndef __ASSEMBLER__ -extern bool am33xx_cm_is_clkdm_in_hwsup(s16 inst, u16 cdoffs); -extern void am33xx_cm_clkdm_enable_hwsup(s16 inst, u16 cdoffs); -extern void am33xx_cm_clkdm_disable_hwsup(s16 inst, u16 cdoffs); -extern void am33xx_cm_clkdm_force_sleep(s16 inst, u16 cdoffs); -extern void am33xx_cm_clkdm_force_wakeup(s16 inst, u16 cdoffs); +extern bool am33xx_cm_is_clkdm_in_hwsup(u16 inst, u16 cdoffs); +extern void am33xx_cm_clkdm_enable_hwsup(u16 inst, u16 cdoffs); +extern void am33xx_cm_clkdm_disable_hwsup(u16 inst, u16 cdoffs); +extern void am33xx_cm_clkdm_force_sleep(u16 inst, u16 cdoffs); +extern void am33xx_cm_clkdm_force_wakeup(u16 inst, u16 cdoffs); #if defined(CONFIG_SOC_AM33XX) || defined(CONFIG_SOC_AM43XX) -extern int am33xx_cm_wait_module_idle(u16 inst, s16 cdoffs, +extern int am33xx_cm_wait_module_idle(u16 inst, u16 cdoffs, u16 clkctrl_offs); -extern void am33xx_cm_module_enable(u8 mode, u16 inst, s16 cdoffs, +extern void am33xx_cm_module_enable(u8 mode, u16 inst, u16 cdoffs, u16 clkctrl_offs); -extern void am33xx_cm_module_disable(u16 inst, s16 cdoffs, +extern void am33xx_cm_module_disable(u16 inst, u16 cdoffs, u16 clkctrl_offs); -extern int am33xx_cm_wait_module_ready(u16 inst, s16 cdoffs, +extern int am33xx_cm_wait_module_ready(u16 inst, u16 cdoffs, u16 clkctrl_offs); #else -static inline int am33xx_cm_wait_module_idle(u16 inst, s16 cdoffs, +static inline int am33xx_cm_wait_module_idle(u16 inst, u16 cdoffs, u16 clkctrl_offs) { return 0; } -static inline void am33xx_cm_module_enable(u8 mode, u16 inst, s16 cdoffs, +static inline void am33xx_cm_module_enable(u8 mode, u16 inst, u16 cdoffs, u16 clkctrl_offs) { } -static inline void am33xx_cm_module_disable(u16 inst, s16 cdoffs, +static inline void am33xx_cm_module_disable(u16 inst, u16 cdoffs, u16 clkctrl_offs) { } -static inline int am33xx_cm_wait_module_ready(u16 inst, s16 cdoffs, +static inline int am33xx_cm_wait_module_ready(u16 inst, u16 cdoffs, u16 clkctrl_offs) { return 0;
arch/arm/mach-omap2/cminst44xx.c +16 -15
@@ -80,7 +80,7 @@ void omap_cm_base_init(void)* Return the IDLEST bitfield of a CM_*_CLKCTRL register, shifted down to * bit 0. */ -static u32 _clkctrl_idlest (u8 part,u16 inst,s16 cdoffs,u16 clkctrl_offs) +static u32 _clkctrl_idlest (u8 part,u16 inst,u16 cdoffs,u16 clkctrl_offs) {u32 v =omap4_cminst_read_inst_reg (part, inst, clkctrl_offs); v &=OMAP4430_IDLEST_MASK ;
@@ -98,7 +98,7 @@ static u32 _clkctrl_idlest(u8 part, u16 inst, s16 cdoffs, u16 clkctrl_offs)* Returns true if the module's CM_*_CLKCTRL.IDLEST bitfield is either * *FUNCTIONAL or *INTERFACE_IDLE; false otherwise. */ -static bool _is_module_ready (u8 part,u16 inst,s16 cdoffs,u16 clkctrl_offs) +static bool _is_module_ready (u8 part,u16 inst,u16 cdoffs,u16 clkctrl_offs) {u32 v;
@@ -111,7 +111,7 @@ static bool _is_module_ready(u8 part, u16 inst, s16 cdoffs, u16 clkctrl_offs)/* Public functions */ /* Read a register in a CM instance */ -u32 omap4_cminst_read_inst_reg (u8 part,s16 inst,u16 idx) +u32 omap4_cminst_read_inst_reg (u8 part,u16 inst,u16 idx) { BUG_ON(part >= OMAP4_MAX_PRCM_PARTITIONS || part == OMAP4430_INVALID_PRCM_PARTITION ||
@@ -120,7 +120,7 @@ u32 omap4_cminst_read_inst_reg(u8 part, s16 inst, u16 idx) }/* Write into a register in a CM instance */ -void omap4_cminst_write_inst_reg (u32 val,u8 part,s16 inst,u16 idx) +void omap4_cminst_write_inst_reg (u32 val,u8 part,u16 inst,u16 idx) { BUG_ON(part >= OMAP4_MAX_PRCM_PARTITIONS || part == OMAP4430_INVALID_PRCM_PARTITION ||
@@ -152,7 +152,7 @@ u32 omap4_cminst_clear_inst_reg_bits(u32 bits, u8 part, s16 inst, s16 idx)return omap4_cminst_rmw_inst_reg_bits (bits,0x0 , part, inst, idx); } -u32 omap4_cminst_read_inst_reg_bits (u8 part,u16 inst,s16 idx,u32 mask) +u32 omap4_cminst_read_inst_reg_bits (u8 part,u16 inst,u16 idx,u32 mask) {u32 v;
@@ -177,7 +177,7 @@ u32 omap4_cminst_read_inst_reg_bits(u8 part, u16 inst, s16 idx, u32 mask)* @c must be the unshifted value for CLKTRCTRL - i.e., this function * will handle the shift itself. */ -static void _clktrctrl_write (u8 c,u8 part,s16 inst,u16 cdoffs) +static void _clktrctrl_write (u8 c,u8 part,u16 inst,u16 cdoffs) {u32 v;
@@ -196,7 +196,7 @@ static void _clktrctrl_write(u8 c, u8 part, s16 inst, u16 cdoffs)* Returns true if the clockdomain referred to by (@part, @inst, @cdoffs) * is in hardware-supervised idle mode, or 0 otherwise. */ -bool omap4_cminst_is_clkdm_in_hwsup (u8 part,s16 inst,u16 cdoffs) +bool omap4_cminst_is_clkdm_in_hwsup (u8 part,u16 inst,u16 cdoffs) {u32 v;
@@ -216,7 +216,7 @@ bool omap4_cminst_is_clkdm_in_hwsup(u8 part, s16 inst, u16 cdoffs)* Put a clockdomain referred to by (@part, @inst, @cdoffs) into * hardware-supervised idle mode. No return value. */ -void omap4_cminst_clkdm_enable_hwsup (u8 part,s16 inst,u16 cdoffs) +void omap4_cminst_clkdm_enable_hwsup (u8 part,u16 inst,u16 cdoffs) {_clktrctrl_write (OMAP34XX_CLKSTCTRL_ENABLE_AUTO , part, inst, cdoffs); }
@@ -231,7 +231,7 @@ void omap4_cminst_clkdm_enable_hwsup(u8 part, s16 inst, u16 cdoffs)* software-supervised idle mode, i.e., controlled manually by the * Linux OMAP clockdomain code. No return value. */ -void omap4_cminst_clkdm_disable_hwsup (u8 part,s16 inst,u16 cdoffs) +void omap4_cminst_clkdm_disable_hwsup (u8 part,u16 inst,u16 cdoffs) {_clktrctrl_write (OMAP34XX_CLKSTCTRL_DISABLE_AUTO , part, inst, cdoffs); }
@@ -245,7 +245,7 @@ void omap4_cminst_clkdm_disable_hwsup(u8 part, s16 inst, u16 cdoffs)* Take a clockdomain referred to by (@part, @inst, @cdoffs) out of idle, * waking it up. No return value. */ -void omap4_cminst_clkdm_force_wakeup (u8 part,s16 inst,u16 cdoffs) +void omap4_cminst_clkdm_force_wakeup (u8 part,u16 inst,u16 cdoffs) {_clktrctrl_write (OMAP34XX_CLKSTCTRL_FORCE_WAKEUP , part, inst, cdoffs); }
@@ -259,7 +259,7 @@ void omap4_cminst_clkdm_force_wakeup(u8 part, s16 inst, u16 cdoffs)* Put a clockdomain referred to by (@part, @inst, @cdoffs) to idle, * forcing it to sleep. No return value. */ -void omap4_cminst_clkdm_force_sleep (u8 part,s16 inst,u16 cdoffs) +void omap4_cminst_clkdm_force_sleep (u8 part,u16 inst,u16 cdoffs) {_clktrctrl_write (OMAP34XX_CLKSTCTRL_FORCE_SLEEP , part, inst, cdoffs); }
@@ -280,7 +280,7 @@ void omap4_cminst_clkdm_force_sleep(u8 part, s16 inst, u16 cdoffs)* sysconfig cannot be accessed and will probably lead to an "imprecise * external abort" */ -int omap4_cminst_wait_module_ready (u8 part,u16 inst,s16 cdoffs, +int omap4_cminst_wait_module_ready (u8 part,u16 inst,u16 cdoffs,u16 clkctrl_offs) {int i =0 ;
@@ -306,7 +306,8 @@ int omap4_cminst_wait_module_ready(u8 part, u16 inst, s16 cdoffs,* like reset assertion or parent clock de-activation must wait the * module to be fully disabled. */ -int omap4_cminst_wait_module_idle (u8 part,u16 inst,s16 cdoffs,u16 clkctrl_offs) +int omap4_cminst_wait_module_idle (u8 part,u16 inst, +u16 cdoffs,u16 clkctrl_offs) {int i =0 ;
@@ -330,7 +331,7 @@ int omap4_cminst_wait_module_idle(u8 part, u16 inst, s16 cdoffs, u16 clkctrl_off* * No return value. */ -void omap4_cminst_module_enable (u8 mode,u8 part,u16 inst,s16 cdoffs, +void omap4_cminst_module_enable (u8 mode,u8 part,u16 inst,u16 cdoffs,u16 clkctrl_offs) {u32 v;
@@ -350,7 +351,7 @@ void omap4_cminst_module_enable(u8 mode, u8 part, u16 inst, s16 cdoffs,* * No return value. */ -void omap4_cminst_module_disable (u8 part,u16 inst,s16 cdoffs, +void omap4_cminst_module_disable (u8 part,u16 inst,u16 cdoffs,u16 clkctrl_offs) {u32 v;
arch/arm/mach-omap2/cminst44xx.h +13 -12
@@ -11,31 +11,32 @@#ifndef __ARCH_ASM_MACH_OMAP2_CMINST44XX_H#define __ARCH_ASM_MACH_OMAP2_CMINST44XX_H -extern bool omap4_cminst_is_clkdm_in_hwsup (u8 part,s16 inst,u16 cdoffs); -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); -extern int omap4_cminst_wait_module_idle (u8 part,u16 inst,s16 cdoffs, +extern bool omap4_cminst_is_clkdm_in_hwsup (u8 part,u16 inst,u16 cdoffs); +extern void omap4_cminst_clkdm_enable_hwsup (u8 part,u16 inst,u16 cdoffs); +extern void omap4_cminst_clkdm_disable_hwsup (u8 part,u16 inst,u16 cdoffs); +extern void omap4_cminst_clkdm_force_sleep (u8 part,u16 inst,u16 cdoffs); +extern void omap4_cminst_clkdm_force_wakeup (u8 part,u16 inst,u16 cdoffs); +extern int omap4_cminst_wait_module_ready (u8 part,u16 inst, +u16 cdoffs,u16 clkctrl_offs); +extern int omap4_cminst_wait_module_idle (u8 part,u16 inst,u16 cdoffs,u16 clkctrl_offs); -extern void omap4_cminst_module_enable (u8 mode,u8 part,u16 inst,s16 cdoffs, +extern void omap4_cminst_module_enable (u8 mode,u8 part,u16 inst,u16 cdoffs,u16 clkctrl_offs); -extern void omap4_cminst_module_disable (u8 part,u16 inst,s16 cdoffs, +extern void omap4_cminst_module_disable (u8 part,u16 inst,u16 cdoffs,u16 clkctrl_offs);/* * In an ideal world, we would not export these low-level functions, * but this will probably take some time to fix properly */ -extern u32 omap4_cminst_read_inst_reg (u8 part,s16 inst,u16 idx); -extern void omap4_cminst_write_inst_reg (u32 val,u8 part,s16 inst,u16 idx); +extern u32 omap4_cminst_read_inst_reg (u8 part,u16 inst,u16 idx); +extern void omap4_cminst_write_inst_reg (u32 val,u8 part,u16 inst,u16 idx);extern u32 omap4_cminst_rmw_inst_reg_bits (u32 mask,u32 bits,u8 part,s16 inst,s16 idx);extern u32 omap4_cminst_set_inst_reg_bits (u32 bits,u8 part,s16 inst,s16 idx);extern u32 omap4_cminst_clear_inst_reg_bits (u32 bits,u8 part,s16 inst,s16 idx); -extern u32 omap4_cminst_read_inst_reg_bits (u8 part,u16 inst,s16 idx, +extern u32 omap4_cminst_read_inst_reg_bits (u8 part,u16 inst,u16 idx,u32 mask);extern void omap_cm_base_init (void );
Signature · 1 line
1.8.3.4
RFC PATCH v3 2/12 ARM: OMAP2+: hwmod: AM335x/AM43x: move common ocpif
In reply to Afzal MohammedAM335x and AM43x have most of the interconnect's similar. Instead of adding redundant hwmod data, move interconnects similar between AM335x and AM43x to a common location. This helps in reuse on AM43x.
AM335x interconnects that has difference and not present in AM43x is not moved. Ocp clock of those in l4_wkup is fed from a different source for AM43x. Also pruss interconnect is different.
--- arch/arm/mach-omap2/Makefile | 1 + arch/arm/mach-omap2/omap_hwmod_33xx_43xx_common.h | 76 +++ .../omap_hwmod_33xx_43xx_interconnect_data.c | 656 +++++++++++++++++++++ arch/arm/mach-omap2/omap_hwmod_33xx_data.c | 625 +------------------- 4 files changed, 734 insertions(+), 624 deletions(-) create mode 100644 arch/arm/mach-omap2/omap_hwmod_33xx_43xx_common.h create mode 100644 arch/arm/mach-omap2/omap_hwmod_33xx_43xx_interconnect_data.c
arch/arm/mach-omap2/Makefile +1 -0
@@ -210,6 +210,7 @@ obj-$(CONFIG_ARCH_OMAP3) += omap_hwmod_2xxx_3xxx_ipblock_data.o obj-$(CONFIG_ARCH_OMAP3) += omap_hwmod_2xxx_3xxx_interconnect_data.o obj-$(CONFIG_ARCH_OMAP3) += omap_hwmod_3xxx_data.o obj-$(CONFIG_SOC_AM33XX) += omap_hwmod_33xx_data.o +obj-$(CONFIG_SOC_AM33XX) += omap_hwmod_33xx_43xx_interconnect_data.o obj-$(CONFIG_ARCH_OMAP4) += omap_hwmod_44xx_data.o obj-$(CONFIG_SOC_OMAP5) += omap_hwmod_54xx_data.o obj-$(CONFIG_SOC_DRA7XX) += omap_hwmod_7xx_data.o
arch/arm/mach-omap2/omap_hwmod_33xx_43xx_common.h new file +76 -0
76 lines not on this page · raw message
arch/arm/mach-omap2/omap_hwmod_33xx_43xx_interconnect_data.c new file +656 -0
656 lines not on this page · raw message
arch/arm/mach-omap2/omap_hwmod_33xx_data.c +1 -624
691 lines not on this page · raw message
Signature · 1 line
1.8.3.4
RFC PATCH v3 3/12 ARM: OMAP2+: hwmod: AM335x/AM43x: move common hwmod
In reply to Afzal MohammedAM335x and AM43x have most of the IP's similar. Instead of adding redundant hwmod data for AM43x support, move hwmod's similar between AM335x and AM43x to a common location. This helps in reuse on AM43x.
AM335x hwmod's that has difference (difference is in main clock of wkup_m3, control, gpio0 and clock domain of l4_hs, adc_tsc as compared to AM43x) and not present in AM43x is not moved.
--- arch/arm/mach-omap2/Makefile | 1 + arch/arm/mach-omap2/omap_hwmod_33xx_43xx_common.h | 78 ++ .../mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c | 1372 ++++++++++++++++++++ arch/arm/mach-omap2/omap_hwmod_33xx_data.c | 1343 ------------------- 4 files changed, 1451 insertions(+), 1343 deletions(-) create mode 100644 arch/arm/mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c
arch/arm/mach-omap2/Makefile +1 -0
@@ -211,6 +211,7 @@ obj-$(CONFIG_ARCH_OMAP3) += omap_hwmod_2xxx_3xxx_interconnect_data.o obj-$(CONFIG_ARCH_OMAP3) += omap_hwmod_3xxx_data.o obj-$(CONFIG_SOC_AM33XX) += omap_hwmod_33xx_data.o obj-$(CONFIG_SOC_AM33XX) += omap_hwmod_33xx_43xx_interconnect_data.o +obj-$(CONFIG_SOC_AM33XX) += omap_hwmod_33xx_43xx_ipblock_data.o obj-$(CONFIG_ARCH_OMAP4) += omap_hwmod_44xx_data.o obj-$(CONFIG_SOC_OMAP5) += omap_hwmod_54xx_data.o obj-$(CONFIG_SOC_DRA7XX) += omap_hwmod_7xx_data.o
arch/arm/mach-omap2/omap_hwmod_33xx_43xx_common.h +78 -0
81 lines not on this page · raw message
arch/arm/mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c new file +1372 -0
1,372 lines not on this page · raw message
arch/arm/mach-omap2/omap_hwmod_33xx_data.c +0 -1343
1,391 lines not on this page · raw message
Signature · 1 line
1.8.3.4
RFC PATCH v3 4/12 ARM: OMAP2+: hwmod: AM335x: runtime register update
In reply to Afzal MohammedMost of IP's in AM335x is present on AM43x and so in those cases both will use same hwmod database (except for a few cases where clock related details differ), but there is difference w.r.t register offset between these. Update register offsets at runtime based on the SoC detected to help in sharing otherwise same hwmod.
--- arch/arm/mach-omap2/omap_hwmod_33xx_43xx_common.h | 2 + .../mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c | 78 ++++++++++++++++++++++ arch/arm/mach-omap2/omap_hwmod_33xx_data.c | 1 + 3 files changed, 81 insertions(+)
arch/arm/mach-omap2/omap_hwmod_33xx_43xx_common.h +2 -0
@@ -152,3 +152,5 @@ extern struct omap_hwmod_class am33xx_spi_hwmod_class;extern struct omap_gpio_dev_attr gpio_dev_attr;extern struct omap2_mcspi_dev_attr mcspi_attrib; + +extern void omap_hwmod_am33xx_reg (void );
arch/arm/mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c +78 -0
87 lines not on this page · raw message
arch/arm/mach-omap2/omap_hwmod_33xx_data.c +1 -0
@@ -598,6 +598,7 @@ static struct omap_hwmod_ocp_if *am33xx_hwmod_ocp_ifs[] __initdata = {int __init am33xx_hwmod_init (void ) { +omap_hwmod_am33xx_reg ();omap_hwmod_init ();return omap_hwmod_register_links (am33xx_hwmod_ocp_ifs); }
Signature · 1 line
1.8.3.4
RFC PATCH v3 5/12 ARM: OMAP2+: hwmod: AM335x: remove static register offs
In reply to Afzal MohammedHwmod common to AM43x and AM335x has register offsets different. It is now updated based on SoC detection at run time, hence remove statically initialized ones.
--- .../mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c | 50 ---------------------- 1 file changed, 50 deletions(-)
arch/arm/mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c +0 -50
@@ -51,7 +51,6 @@ struct omap_hwmod am33xx_l3_main_hwmod = { .main_clk = "l3_gclk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_L3_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -73,7 +72,6 @@ struct omap_hwmod am33xx_l3_instr_hwmod = { .main_clk = "l3_gclk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_L3_INSTR_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -96,7 +94,6 @@ struct omap_hwmod am33xx_l4_ls_hwmod = { .main_clk = "l4ls_gclk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_L4LS_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -110,7 +107,6 @@ struct omap_hwmod am33xx_l4_wkup_hwmod = { .flags = (HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET), .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_WKUP_L4WKUP_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -131,7 +127,6 @@ struct omap_hwmod am33xx_mpu_hwmod = { .main_clk = "dpll_mpu_m2_ck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_MPU_MPU_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -158,7 +153,6 @@ struct omap_hwmod am33xx_pruss_hwmod = { .main_clk = "pruss_ocp_gclk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_PRUSS_CLKCTRL_OFFSET, .rstctrl_offs = AM33XX_RM_PER_RSTCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, },
@@ -184,7 +178,6 @@ struct omap_hwmod am33xx_gfx_hwmod = { .main_clk = "gfx_fck_div_ck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_GFX_GFX_CLKCTRL_OFFSET, .rstctrl_offs = AM33XX_RM_GFX_RSTCTRL_OFFSET, .rstst_offs = AM33XX_RM_GFX_RSTST_OFFSET, .modulemode = MODULEMODE_SWCTRL,
@@ -249,7 +242,6 @@ struct omap_hwmod am33xx_aes0_hwmod = { .main_clk = "aes0_fck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_AES0_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -275,7 +267,6 @@ struct omap_hwmod am33xx_sha0_hwmod = { .main_clk = "l3_gclk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_SHA0_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -294,7 +285,6 @@ struct omap_hwmod am33xx_ocmcram_hwmod = { .main_clk = "l3_gclk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_OCMCRAM_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -313,7 +303,6 @@ struct omap_hwmod am33xx_smartreflex0_hwmod = { .main_clk = "smartreflex0_fck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_WKUP_SMARTREFLEX0_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -327,7 +316,6 @@ struct omap_hwmod am33xx_smartreflex1_hwmod = { .main_clk = "smartreflex1_fck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_WKUP_SMARTREFLEX1_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -362,7 +350,6 @@ struct omap_hwmod am33xx_cpgmac0_hwmod = { .mpu_rt_idx = 1, .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_CPGMAC0_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -397,7 +384,6 @@ struct omap_hwmod am33xx_dcan0_hwmod = { .main_clk = "dcan0_fck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_DCAN0_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -411,7 +397,6 @@ struct omap_hwmod am33xx_dcan1_hwmod = { .main_clk = "dcan1_fck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_DCAN1_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -441,7 +426,6 @@ struct omap_hwmod am33xx_elm_hwmod = { .main_clk = "l4ls_gclk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_ELM_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -483,7 +467,6 @@ struct omap_hwmod am33xx_epwmss0_hwmod = { .main_clk = "l4ls_gclk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_EPWMSS0_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -521,7 +504,6 @@ struct omap_hwmod am33xx_epwmss1_hwmod = { .main_clk = "l4ls_gclk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_EPWMSS1_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -559,7 +541,6 @@ struct omap_hwmod am33xx_epwmss2_hwmod = { .main_clk = "l4ls_gclk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_EPWMSS2_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -628,7 +609,6 @@ struct omap_hwmod am33xx_gpio1_hwmod = { .main_clk = "l4ls_gclk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_GPIO1_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -650,7 +630,6 @@ struct omap_hwmod am33xx_gpio2_hwmod = { .main_clk = "l4ls_gclk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_GPIO2_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -672,7 +651,6 @@ struct omap_hwmod am33xx_gpio3_hwmod = { .main_clk = "l4ls_gclk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_GPIO3_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -705,7 +683,6 @@ struct omap_hwmod am33xx_gpmc_hwmod = { .main_clk = "l3s_gclk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_GPMC_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -759,7 +736,6 @@ struct omap_hwmod am33xx_i2c2_hwmod = { .main_clk = "dpll_per_m2_div4_ck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_I2C1_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -775,7 +751,6 @@ struct omap_hwmod am33xx_i2c3_hwmod = { .main_clk = "dpll_per_m2_div4_ck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_I2C2_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -808,7 +783,6 @@ struct omap_hwmod am33xx_mailbox_hwmod = { .main_clk = "l4ls_gclk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_MAILBOX0_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -838,7 +812,6 @@ struct omap_hwmod am33xx_mcasp0_hwmod = { .main_clk = "mcasp0_fck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_MCASP0_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -852,7 +825,6 @@ struct omap_hwmod am33xx_mcasp1_hwmod = { .main_clk = "mcasp1_fck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_MCASP1_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -887,7 +859,6 @@ struct omap_hwmod am33xx_mmc0_hwmod = { .main_clk = "mmc_clk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_MMC0_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -906,7 +877,6 @@ struct omap_hwmod am33xx_mmc1_hwmod = { .main_clk = "mmc_clk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_MMC1_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -924,7 +894,6 @@ struct omap_hwmod am33xx_mmc2_hwmod = { .main_clk = "mmc_clk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_MMC2_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -956,7 +925,6 @@ struct omap_hwmod am33xx_rtc_hwmod = { .main_clk = "clk_32768_ck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_RTC_RTC_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -991,7 +959,6 @@ struct omap_hwmod am33xx_spi0_hwmod = { .main_clk = "dpll_per_m2_div4_ck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_SPI0_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -1006,7 +973,6 @@ struct omap_hwmod am33xx_spi1_hwmod = { .main_clk = "dpll_per_m2_div4_ck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_SPI1_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -1029,7 +995,6 @@ struct omap_hwmod am33xx_spinlock_hwmod = { .main_clk = "l4ls_gclk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_SPINLOCK_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -1088,7 +1053,6 @@ struct omap_hwmod am33xx_timer2_hwmod = { .main_clk = "timer2_fck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_TIMER2_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -1101,7 +1065,6 @@ struct omap_hwmod am33xx_timer3_hwmod = { .main_clk = "timer3_fck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_TIMER3_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -1114,7 +1077,6 @@ struct omap_hwmod am33xx_timer4_hwmod = { .main_clk = "timer4_fck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_TIMER4_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -1127,7 +1089,6 @@ struct omap_hwmod am33xx_timer5_hwmod = { .main_clk = "timer5_fck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_TIMER5_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -1140,7 +1101,6 @@ struct omap_hwmod am33xx_timer6_hwmod = { .main_clk = "timer6_fck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_TIMER6_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -1153,7 +1113,6 @@ struct omap_hwmod am33xx_timer7_hwmod = { .main_clk = "timer7_fck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_TIMER7_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -1171,7 +1130,6 @@ struct omap_hwmod am33xx_tpcc_hwmod = { .main_clk = "l3_gclk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_TPCC_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -1201,7 +1159,6 @@ struct omap_hwmod am33xx_tptc0_hwmod = { .main_clk = "l3_gclk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_TPTC0_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -1216,7 +1173,6 @@ struct omap_hwmod am33xx_tptc1_hwmod = { .main_clk = "l3_gclk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_TPTC1_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -1231,7 +1187,6 @@ struct omap_hwmod am33xx_tptc2_hwmod = { .main_clk = "l3_gclk", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_TPTC2_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -1276,7 +1231,6 @@ struct omap_hwmod am33xx_uart2_hwmod = { .main_clk = "dpll_per_m2_div4_ck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_UART1_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -1291,7 +1245,6 @@ struct omap_hwmod am33xx_uart3_hwmod = { .main_clk = "dpll_per_m2_div4_ck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_UART2_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -1305,7 +1258,6 @@ struct omap_hwmod am33xx_uart4_hwmod = { .main_clk = "dpll_per_m2_div4_ck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_UART3_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -1319,7 +1271,6 @@ struct omap_hwmod am33xx_uart5_hwmod = { .main_clk = "dpll_per_m2_div4_ck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_UART4_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
@@ -1333,7 +1284,6 @@ struct omap_hwmod am33xx_uart6_hwmod = { .main_clk = "dpll_per_m2_div4_ck", .prcm = { .omap4 = { - .clkctrl_offs = AM33XX_CM_PER_UART5_CLKCTRL_OFFSET, .modulemode = MODULEMODE_SWCTRL, }, },
Signature · 1 line
1.8.3.4
RFC PATCH v3 6/12 ARM: OMAP2+: PRCM: AM43x definitions
In reply to Afzal MohammedAdd AM43x CMINST, CDOFFS, RM_RSTST & RM_RSTCTRL definitions - minimal ones that would be used.
--- arch/arm/mach-omap2/prcm43xx.h | 141 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 arch/arm/mach-omap2/prcm43xx.h
arch/arm/mach-omap2/prcm43xx.h new file +141 -0
@@ -0,0 +1,141 @@ +/* +* AM43x PRCM defines +* +* Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/ +* +* This file is licensed under the terms of the GNU General Public License +* version 2. This program is licensed "as is" without any warranty of any +* kind, whether express or implied. +*/ + +#ifndef __ARCH_ARM_MACH_OMAP2_PRCM_43XX_H +#define __ARCH_ARM_MACH_OMAP2_PRCM_43XX_H + +#define AM43XX_PRM_PARTITION 1 +#define AM43XX_CM_PARTITION 1 + +/* PRM instances */ +#define AM43XX_PRM_OCP_SOCKET_INST 0x0000 +#define AM43XX_PRM_MPU_INST 0x0300 +#define AM43XX_PRM_GFX_INST 0x0400 +#define AM43XX_PRM_RTC_INST 0x0500 +#define AM43XX_PRM_TAMPER_INST 0x0600 +#define AM43XX_PRM_CEFUSE_INST 0x0700 +#define AM43XX_PRM_PER_INST 0x0800 +#define AM43XX_PRM_WKUP_INST 0x2000 +#define AM43XX_PRM_DEVICE_INST 0x4000 + +/* RM RSTCTRL offsets */ +#define AM43XX_RM_PER_RSTCTRL_OFFSET 0x0010 +#define AM43XX_RM_GFX_RSTCTRL_OFFSET 0x0010 +#define AM43XX_RM_WKUP_RSTCTRL_OFFSET 0x0010 + +/* RM RSTST offsets */ +#define AM43XX_RM_GFX_RSTST_OFFSET 0x0014 +#define AM43XX_RM_WKUP_RSTST_OFFSET 0x0014 + +/* CM instances */ +#define AM43XX_CM_WKUP_INST 0x2800 +#define AM43XX_CM_DEVICE_INST 0x4100 +#define AM43XX_CM_DPLL_INST 0x4200 +#define AM43XX_CM_MPU_INST 0x8300 +#define AM43XX_CM_GFX_INST 0x8400 +#define AM43XX_CM_RTC_INST 0x8500 +#define AM43XX_CM_TAMPER_INST 0x8600 +#define AM43XX_CM_CEFUSE_INST 0x8700 +#define AM43XX_CM_PER_INST 0x8800 + +/* CD offsets */ +#define AM43XX_CM_WKUP_L3_AON_CDOFFS 0x0000 +#define AM43XX_CM_WKUP_L3S_TSC_CDOFFS 0x0100 +#define AM43XX_CM_WKUP_L4_WKUP_AON_CDOFFS 0x0200 +#define AM43XX_CM_WKUP_WKUP_CDOFFS 0x0300 +#define AM43XX_CM_MPU_MPU_CDOFFS 0x0000 +#define AM43XX_CM_GFX_GFX_L3_CDOFFS 0x0000 +#define AM43XX_CM_RTC_RTC_CDOFFS 0x0000 +#define AM43XX_CM_TAMPER_TAMPER_CDOFFS 0x0000 +#define AM43XX_CM_CEFUSE_CEFUSE_CDOFFS 0x0000 +#define AM43XX_CM_PER_L3_CDOFFS 0x0000 +#define AM43XX_CM_PER_L3S_CDOFFS 0x0200 +#define AM43XX_CM_PER_ICSS_CDOFFS 0x0300 +#define AM43XX_CM_PER_L4LS_CDOFFS 0x0400 +#define AM43XX_CM_PER_EMIF_CDOFFS 0x0700 +#define AM43XX_CM_PER_DSS_CDOFFS 0x0a00 +#define AM43XX_CM_PER_CPSW_CDOFFS 0x0b00 +#define AM43XX_CM_PER_OCPWP_L3_CDOFFS 0x0c00 + +/* CLK CTRL offsets */ +#define AM43XX_CM_PER_UART1_CLKCTRL_OFFSET 0x0580 +#define AM43XX_CM_PER_UART2_CLKCTRL_OFFSET 0x0588 +#define AM43XX_CM_PER_UART3_CLKCTRL_OFFSET 0x0590 +#define AM43XX_CM_PER_UART4_CLKCTRL_OFFSET 0x0598 +#define AM43XX_CM_PER_UART5_CLKCTRL_OFFSET 0x05a0 +#define AM43XX_CM_PER_DCAN0_CLKCTRL_OFFSET 0x0428 +#define AM43XX_CM_PER_DCAN1_CLKCTRL_OFFSET 0x0430 +#define AM43XX_CM_PER_ELM_CLKCTRL_OFFSET 0x0468 +#define AM43XX_CM_PER_EPWMSS0_CLKCTRL_OFFSET 0x0438 +#define AM43XX_CM_PER_EPWMSS1_CLKCTRL_OFFSET 0x0440 +#define AM43XX_CM_PER_EPWMSS2_CLKCTRL_OFFSET 0x0448 +#define AM43XX_CM_PER_GPIO1_CLKCTRL_OFFSET 0x0478 +#define AM43XX_CM_PER_GPIO2_CLKCTRL_OFFSET 0x0480 +#define AM43XX_CM_PER_GPIO3_CLKCTRL_OFFSET 0x0488 +#define AM43XX_CM_PER_I2C1_CLKCTRL_OFFSET 0x04a8 +#define AM43XX_CM_PER_I2C2_CLKCTRL_OFFSET 0x04b0 +#define AM43XX_CM_PER_MAILBOX0_CLKCTRL_OFFSET 0x04b8 +#define AM43XX_CM_PER_MMC0_CLKCTRL_OFFSET 0x04c0 +#define AM43XX_CM_PER_MMC1_CLKCTRL_OFFSET 0x04c8 +#define AM43XX_CM_PER_SPI0_CLKCTRL_OFFSET 0x0500 +#define AM43XX_CM_PER_SPI1_CLKCTRL_OFFSET 0x0508 +#define AM43XX_CM_PER_SPINLOCK_CLKCTRL_OFFSET 0x0528 +#define AM43XX_CM_PER_TIMER2_CLKCTRL_OFFSET 0x0530 +#define AM43XX_CM_PER_TIMER3_CLKCTRL_OFFSET 0x0538 +#define AM43XX_CM_PER_TIMER4_CLKCTRL_OFFSET 0x0540 +#define AM43XX_CM_PER_TIMER5_CLKCTRL_OFFSET 0x0548 +#define AM43XX_CM_PER_TIMER6_CLKCTRL_OFFSET 0x0550 +#define AM43XX_CM_PER_TIMER7_CLKCTRL_OFFSET 0x0558 +#define AM43XX_CM_WKUP_WKUP_M3_CLKCTRL_OFFSET 0x0228 +#define AM43XX_CM_WKUP_CONTROL_CLKCTRL_OFFSET 0x0360 +#define AM43XX_CM_WKUP_SMARTREFLEX0_CLKCTRL_OFFSET 0x0350 +#define AM43XX_CM_WKUP_SMARTREFLEX1_CLKCTRL_OFFSET 0x0358 +#define AM43XX_CM_WKUP_UART0_CLKCTRL_OFFSET 0x0348 +#define AM43XX_CM_WKUP_TIMER1_CLKCTRL_OFFSET 0x0328 +#define AM43XX_CM_WKUP_I2C0_CLKCTRL_OFFSET 0x0340 +#define AM43XX_CM_WKUP_GPIO0_CLKCTRL_OFFSET 0x0368 +#define AM43XX_CM_WKUP_ADC_TSC_CLKCTRL_OFFSET 0x0120 +#define AM43XX_CM_WKUP_WDT1_CLKCTRL_OFFSET 0x0338 +#define AM43XX_CM_WKUP_L4WKUP_CLKCTRL_OFFSET 0x0220 +#define AM43XX_CM_RTC_RTC_CLKCTRL_OFFSET 0x0020 +#define AM43XX_CM_PER_MMC2_CLKCTRL_OFFSET 0x0248 +#define AM43XX_CM_PER_GPMC_CLKCTRL_OFFSET 0x0220 +#define AM43XX_CM_PER_MCASP0_CLKCTRL_OFFSET 0x0238 +#define AM43XX_CM_PER_MCASP1_CLKCTRL_OFFSET 0x0240 +#define AM43XX_CM_PER_L4LS_CLKCTRL_OFFSET 0x0420 +#define AM43XX_CM_PER_L3_CLKCTRL_OFFSET 0x0020 +#define AM43XX_CM_PER_TPCC_CLKCTRL_OFFSET 0x0078 +#define AM43XX_CM_PER_TPTC0_CLKCTRL_OFFSET 0x0080 +#define AM43XX_CM_PER_TPTC1_CLKCTRL_OFFSET 0x0088 +#define AM43XX_CM_PER_TPTC2_CLKCTRL_OFFSET 0x0090 +#define AM43XX_CM_PER_CPGMAC0_CLKCTRL_OFFSET 0x0b20 +#define AM43XX_CM_PER_PRUSS_CLKCTRL_OFFSET 0x0320 +#define AM43XX_CM_GFX_GFX_CLKCTRL_OFFSET 0x0020 +#define AM43XX_CM_PER_L4HS_CLKCTRL_OFFSET 0x00a0 +#define AM43XX_CM_MPU_MPU_CLKCTRL_OFFSET 0x0020 +#define AM43XX_CM_PER_L3_INSTR_CLKCTRL_OFFSET 0x0040 +#define AM43XX_CM_PER_OCMCRAM_CLKCTRL_OFFSET 0x0050 +#define AM43XX_CM_PER_SHA0_CLKCTRL_OFFSET 0x0058 +#define AM43XX_CM_PER_AES0_CLKCTRL_OFFSET 0x0028 +#define AM43XX_CM_PER_TIMER8_CLKCTRL_OFFSET 0x0560 +#define AM43XX_CM_PER_TIMER9_CLKCTRL_OFFSET 0x0568 +#define AM43XX_CM_PER_TIMER10_CLKCTRL_OFFSET 0x0570 +#define AM43XX_CM_PER_TIMER11_CLKCTRL_OFFSET 0x0578 +#define AM43XX_CM_WKUP_SYNCTIMER_CLKCTRL_OFFSET 0x0230 +#define AM43XX_CM_PER_EPWMSS3_CLKCTRL_OFFSET 0x0450 +#define AM43XX_CM_PER_EPWMSS4_CLKCTRL_OFFSET 0x0458 +#define AM43XX_CM_PER_EPWMSS5_CLKCTRL_OFFSET 0x0460 +#define AM43XX_CM_PER_SPI2_CLKCTRL_OFFSET 0x0510 +#define AM43XX_CM_PER_SPI3_CLKCTRL_OFFSET 0x0518 +#define AM43XX_CM_PER_SPI4_CLKCTRL_OFFSET 0x0520 +#define AM43XX_CM_PER_GPIO4_CLKCTRL_OFFSET 0x0490 +#define AM43XX_CM_PER_GPIO5_CLKCTRL_OFFSET 0x0498 + +#endif
Signature · 1 line
1.8.3.4
RFC PATCH v3 7/12 ARM: OMAP2+: PM: AM43x powerdomain data
In reply to Afzal MohammedFrom: Ambresh K <[email protected]>
Add the data file to describe all power domains in AM43x SoC. OMAP4 powerdomain operations is being reused here.
--- arch/arm/mach-omap2/powerdomain.h | 1 + arch/arm/mach-omap2/powerdomains43xx_data.c | 145 ++++++++++++++++++++++++++++ 2 files changed, 146 insertions(+) create mode 100644 arch/arm/mach-omap2/powerdomains43xx_data.c
arch/arm/mach-omap2/powerdomain.h +1 -0
@@ -254,6 +254,7 @@ extern void omap242x_powerdomains_init(void);extern void omap243x_powerdomains_init (void );extern void omap3xxx_powerdomains_init (void );extern void am33xx_powerdomains_init (void ); +extern void am43xx_powerdomains_init (void );extern void omap44xx_powerdomains_init (void );extern void omap54xx_powerdomains_init (void );extern void dra7xx_powerdomains_init (void );
arch/arm/mach-omap2/powerdomains43xx_data.c new file +145 -0
145 lines not on this page · raw message
Signature · 1 line
1.8.3.4
RFC PATCH v3 8/12 ARM: OMAP2+: CM: AM43x clockdomain data
In reply to Afzal MohammedFrom: Ambresh K <[email protected]>
Add the data file to describe clock domains in AM43x SoC. OMAP4 clockdomain operations is being reused here.
--- arch/arm/mach-omap2/clockdomain.h | 2 + arch/arm/mach-omap2/clockdomains43xx_data.c | 199 ++++++++++++++++++++++++++++ arch/arm/mach-omap2/cminst44xx.c | 9 ++ 3 files changed, 210 insertions(+) create mode 100644 arch/arm/mach-omap2/clockdomains43xx_data.c
arch/arm/mach-omap2/clockdomain.h +2 -0
@@ -215,6 +215,7 @@ extern void __init omap242x_clockdomains_init(void);extern void __init omap243x_clockdomains_init (void );extern void __init omap3xxx_clockdomains_init (void );extern void __init am33xx_clockdomains_init (void ); +extern void am43xx_clockdomains_init (void );extern void __init omap44xx_clockdomains_init (void );extern void __init omap54xx_clockdomains_init (void );extern void __init dra7xx_clockdomains_init (void );
@@ -226,6 +227,7 @@ extern struct clkdm_ops omap2_clkdm_operations;extern struct clkdm_ops omap3_clkdm_operations;extern struct clkdm_ops omap4_clkdm_operations;extern struct clkdm_ops am33xx_clkdm_operations; +extern struct clkdm_ops am43xx_clkdm_operations;extern struct clkdm_dep gfx_24xx_wkdeps[];extern struct clkdm_dep dsp_24xx_wkdeps[];
arch/arm/mach-omap2/clockdomains43xx_data.c new file +199 -0
199 lines not on this page · raw message
arch/arm/mach-omap2/cminst44xx.c +9 -0
@@ -498,3 +498,12 @@ struct clkdm_ops omap4_clkdm_operations = { .clkdm_clk_enable = omap4_clkdm_clk_enable, .clkdm_clk_disable = omap4_clkdm_clk_disable, }; + +struct clkdm_ops am43xx_clkdm_operations = { + .clkdm_sleep = omap4_clkdm_sleep, + .clkdm_wakeup = omap4_clkdm_wakeup, + .clkdm_allow_idle = omap4_clkdm_allow_idle, + .clkdm_deny_idle = omap4_clkdm_deny_idle, + .clkdm_clk_enable = omap4_clkdm_clk_enable, + .clkdm_clk_disable = omap4_clkdm_clk_disable, +};
Signature · 1 line
1.8.3.4
RFC PATCH v3 8/12 ARM: OMAP2+: CM: AM43x clockdomain data
Quoted 5 lines · Afzal Mohammed
From: Ambresh K <[email protected]>
Add the data file to describe clock domains in AM43x SoC. OMAP4 clockdomain operations is being reused here.
Quoted 8 lines
Signed-off-by Ambresh K <[email protected]>Signed-off-by Afzal Mohammed <[email protected]>--- arch/arm/mach-omap2/clockdomain.h | 2 + arch/arm/mach-omap2/clockdomains43xx_data.c | 199 ++++++++++++++++++++++++++++ arch/arm/mach-omap2/cminst44xx.c | 9 ++ 3 files changed, 210 insertions(+) create mode 100644 arch/arm/mach-omap2/clockdomains43xx_data.c
I suggest we drop this. this can be addressed by Tero's clk series.
Signature · 2 lines
Regards, Nishanth Menon
RFC PATCH v3 8/12 ARM: OMAP2+: CM: AM43x clockdomain data
Hi Nishant,
Quoted 16 lines · Nishanth Menon
Quoted 5 lines · Afzal Mohammed
From: Ambresh K <[email protected]>
Add the data file to describe clock domains in AM43x SoC. OMAP4 clockdomain operations is being reused here.
Quoted 8 lines
Signed-off-by Ambresh K <[email protected]>Signed-off-by Afzal Mohammed <[email protected]>--- arch/arm/mach-omap2/clockdomain.h | 2 + arch/arm/mach-omap2/clockdomains43xx_data.c | 199 ++++++++++++++++++++++++++++ arch/arm/mach-omap2/cminst44xx.c | 9 ++ 3 files changed, 210 insertions(+) create mode 100644 arch/arm/mach-omap2/clockdomains43xx_data.c
Quoted 1 line
I suggest we drop this. this can be addressed by Tero's clk series.
Probably you misunderstood clock domain data as clock data, as Tero's series does not take care of clock domain data, we would require this.
Regards
Afzal
RFC PATCH v3 8/12 ARM: OMAP2+: CM: AM43x clockdomain data
Quoted 19 lines · Afzal Mohammed
Hi Nishant,
Quoted 16 lines · Nishanth Menon
Quoted 13 lines · Afzal Mohammed
From: Ambresh K <[email protected]>
Add the data file to describe clock domains in AM43x SoC. OMAP4 clockdomain operations is being reused here.
Signed-off-by Ambresh K <[email protected]>Signed-off-by Afzal Mohammed <[email protected]>--- arch/arm/mach-omap2/clockdomain.h | 2 + arch/arm/mach-omap2/clockdomains43xx_data.c | 199 ++++++++++++++++++++++++++++ arch/arm/mach-omap2/cminst44xx.c | 9 ++ 3 files changed, 210 insertions(+) create mode 100644 arch/arm/mach-omap2/clockdomains43xx_data.c
Quoted 4 lines
Quoted 1 line
I suggest we drop this. this can be addressed by Tero's clk series.
Probably you misunderstood clock domain data as clock data, as Tero's series does not take care of clock domain data, we would require this.
Arrgh.. yes - my bad. thanks for clarifying.
Signature · 2 lines
Regards, Nishanth Menon
RFC PATCH v3 9/12 ARM: OMAP2+: hwmod: AM43x support
In reply to Afzal MohammedAdd hwmod support for IP's that are present in AM43x, but not in AM335x. AM43x additional ones added here are,
1. synctimer
2. timer8-11
3. ehrpwm3-5
4. spi2-4
5. gpio4-5
AM43x pruss interconnect which is different as compared to AM335x, has been taken care.
And register offsets for same hwmod's shared with AM335x is different, AM43x register offsets are updated appropriately.
Ocp clock of those in l4_wkup is fed from "sys_clkin_ck" instead of "dpll_core_m4_div2_ck", so "ocpif" for those in AM43x l4_wkup has been added seperately.
Hwmod's has been added for those that have main clock (wkup_m3, control, gpio0) and clock domain (l4_hs) different from AM335x.
AM43x also has IP's like qspi, hdq1w, vpfe, des, rng, usb, dss. These are not handled here due to both/either of following two reasons,
1. To avoid churn; most of them don't have DT bindings, which would necessitate adding address space in hwmod, which any way would have to be removed once DT bindings happen with driver support.
2. patches would come in from sources other than the author
--- arch/arm/mach-omap2/omap_hwmod.h | 1 + arch/arm/mach-omap2/omap_hwmod_33xx_43xx_common.h | 1 + .../mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c | 75 +++ arch/arm/mach-omap2/omap_hwmod_43xx_data.c | 645 +++++++++++++++++++++ 4 files changed, 722 insertions(+) create mode 100644 arch/arm/mach-omap2/omap_hwmod_43xx_data.c
arch/arm/mach-omap2/omap_hwmod.h +1 -0
@@ -751,6 +751,7 @@ extern int omap3xxx_hwmod_init(void);extern int omap44xx_hwmod_init (void );extern int omap54xx_hwmod_init (void );extern int am33xx_hwmod_init (void ); +extern int am43xx_hwmod_init (void );extern int dra7xx_hwmod_init (void );extern int __init omap_hwmod_register_links (struct omap_hwmod_ocp_if **ois);
arch/arm/mach-omap2/omap_hwmod_33xx_43xx_common.h +1 -0
@@ -154,3 +154,4 @@ extern struct omap_gpio_dev_attr gpio_dev_attr;extern struct omap2_mcspi_dev_attr mcspi_attrib;extern void omap_hwmod_am33xx_reg (void ); +extern void omap_hwmod_am43xx_reg (void );
arch/arm/mach-omap2/omap_hwmod_33xx_43xx_ipblock_data.c +75 -0
84 lines not on this page · raw message
arch/arm/mach-omap2/omap_hwmod_43xx_data.c new file +645 -0
645 lines not on this page · raw message
Signature · 1 line
1.8.3.4
RFC PATCH v3 10/12 ARM: OMAP2+: hwmod: AM43x operations
In reply to Afzal MohammedReuse OMAP4 operations on AM43x.
--- arch/arm/mach-omap2/omap_hwmod.c | 8 ++++++++ 1 file changed, 8 insertions(+)
arch/arm/mach-omap2/omap_hwmod.c +8 -0
@@ -4125,6 +4125,14 @@ void __init omap_hwmod_init(void) soc_ops.init_clkdm = _init_clkdm; soc_ops.update_context_lost = _omap4_update_context_lost; soc_ops.get_context_lost = _omap4_get_context_lost; + }else if (soc_is_am43xx ()) { + soc_ops.enable_module = _omap4_enable_module; + soc_ops.disable_module = _omap4_disable_module; + soc_ops.wait_target_ready = _omap4_wait_target_ready; + soc_ops.assert_hardreset = _omap4_assert_hardreset; + soc_ops.deassert_hardreset = _omap4_deassert_hardreset; + soc_ops.is_hardreset_asserted = _omap4_is_hardreset_asserted; + soc_ops.init_clkdm = _init_clkdm; }else if (soc_is_am33xx ()) { soc_ops.enable_module = _am33xx_enable_module; soc_ops.disable_module = _am33xx_disable_module;
Signature · 1 line
1.8.3.4
RFC PATCH v3 11/12 ARM: OMAP2+: AM43x: PRCM kbuild
In reply to Afzal MohammedBuild AM43x power domain, clock domain and hwmod data.
Many of AM43x IP's and interconnects are similar as that in AM335x, hence AM335x hwmod data is being reused with necessary changes.
Earlier the plan was to reuse AM335x specific PRCM code, but as AM43x PRCM register layout is much similar to OMAP4/5, AM335x PRCM is divorced and instead married with OMAP4/5 PRCM for AM43x.
--- arch/arm/mach-omap2/Makefile | 7 ++++++- arch/arm/mach-omap2/cm33xx.h | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-)
arch/arm/mach-omap2/Makefile +6 -1
@@ -112,13 +112,13 @@ obj-$(CONFIG_ARCH_OMAP2) += prm2xxx_3xxx.o prm2xxx.o cm2xxx.o obj-$(CONFIG_ARCH_OMAP3) += prm2xxx_3xxx.o prm3xxx.o cm3xxx.o obj-$(CONFIG_ARCH_OMAP3) += vc3xxx_data.o vp3xxx_data.o obj-$(CONFIG_SOC_AM33XX) += prm33xx.o cm33xx.o -obj-$(CONFIG_SOC_AM43XX) += prm33xx.o cm33xx.o omap-prcm-4-5-common = cminst44xx.o cm44xx.o prm44xx.o \ prcm_mpu44xx.o prminst44xx.o \ vc44xx_data.o vp44xx_data.o obj-$(CONFIG_ARCH_OMAP4) += $(omap-prcm-4-5-common) obj-$(CONFIG_SOC_OMAP5) += $(omap-prcm-4-5-common) obj-$(CONFIG_SOC_DRA7XX) += $(omap-prcm-4-5-common) +obj-$(CONFIG_SOC_AM43XX) += $(omap-prcm-4-5-common) # OMAP voltage domains voltagedomain-common := voltage.o vc.o vp.o
@@ -146,6 +146,7 @@ obj-$(CONFIG_ARCH_OMAP4) += powerdomains44xx_data.o obj-$(CONFIG_SOC_AM33XX) += $(powerdomain-common) obj-$(CONFIG_SOC_AM33XX) += powerdomains33xx_data.o obj-$(CONFIG_SOC_AM43XX) += $(powerdomain-common) +obj-$(CONFIG_SOC_AM43XX) += powerdomains43xx_data.o obj-$(CONFIG_SOC_OMAP5) += $(powerdomain-common) obj-$(CONFIG_SOC_OMAP5) += powerdomains54xx_data.o obj-$(CONFIG_SOC_DRA7XX) += $(powerdomain-common)
@@ -165,6 +166,7 @@ obj-$(CONFIG_ARCH_OMAP4) += clockdomains44xx_data.o obj-$(CONFIG_SOC_AM33XX) += $(clockdomain-common) obj-$(CONFIG_SOC_AM33XX) += clockdomains33xx_data.o obj-$(CONFIG_SOC_AM43XX) += $(clockdomain-common) +obj-$(CONFIG_SOC_AM43XX) += clockdomains43xx_data.o obj-$(CONFIG_SOC_OMAP5) += $(clockdomain-common) obj-$(CONFIG_SOC_OMAP5) += clockdomains54xx_data.o obj-$(CONFIG_SOC_DRA7XX) += $(clockdomain-common)
@@ -212,6 +214,9 @@ obj-$(CONFIG_ARCH_OMAP3) += omap_hwmod_3xxx_data.o obj-$(CONFIG_SOC_AM33XX) += omap_hwmod_33xx_data.o obj-$(CONFIG_SOC_AM33XX) += omap_hwmod_33xx_43xx_interconnect_data.o obj-$(CONFIG_SOC_AM33XX) += omap_hwmod_33xx_43xx_ipblock_data.o +obj-$(CONFIG_SOC_AM43XX) += omap_hwmod_43xx_data.o +obj-$(CONFIG_SOC_AM43XX) += omap_hwmod_33xx_43xx_interconnect_data.o +obj-$(CONFIG_SOC_AM43XX) += omap_hwmod_33xx_43xx_ipblock_data.o obj-$(CONFIG_ARCH_OMAP4) += omap_hwmod_44xx_data.o obj-$(CONFIG_SOC_OMAP5) += omap_hwmod_54xx_data.o obj-$(CONFIG_SOC_DRA7XX) += omap_hwmod_7xx_data.o
arch/arm/mach-omap2/cm33xx.h +1 -1
@@ -383,7 +383,7 @@ extern void am33xx_cm_clkdm_disable_hwsup(u16 inst, u16 cdoffs);extern void am33xx_cm_clkdm_force_sleep (u16 inst,u16 cdoffs);extern void am33xx_cm_clkdm_force_wakeup (u16 inst,u16 cdoffs); -#if defined(CONFIG_SOC_AM33XX ) || defined(CONFIG_SOC_AM43XX ) +#ifdef CONFIG_SOC_AM33XX extern int am33xx_cm_wait_module_idle (u16 inst,u16 cdoffs,u16 clkctrl_offs); extern void am33xx_cm_module_enable(u8 mode, u16 inst, u16 cdoffs,
Signature · 1 line
1.8.3.4
RFC PATCH v3 12/12 ARM: OMAP2+: AM43x PRCM init
In reply to Afzal MohammedFrom: Ambresh K <[email protected]>
Initialise AM43x HWMOD, powerdomains and clockdomains.
--- arch/arm/mach-omap2/io.c | 6 ++++++ 1 file changed, 6 insertions(+)
arch/arm/mach-omap2/io.c +6 -0
@@ -594,7 +594,13 @@ void __init am43xx_init_early(void) NULL);omap2_set_globals_prm (AM33XX_L4_WK_IO_ADDRESS (AM43XX_PRCM_BASE ));omap2_set_globals_cm (AM33XX_L4_WK_IO_ADDRESS (AM43XX_PRCM_BASE ),NULL ); +omap_prm_base_init (); +omap_cm_base_init ();omap3xxx_check_revision (); +am43xx_powerdomains_init (); +am43xx_clockdomains_init (); +am43xx_hwmod_init (); + omap_hwmod_init_postsetup(); }#endif
Signature · 1 line
1.8.3.4