arch/arm/mach-omap2/cm3xxx.c
Source file repositories/reference/linux-study-clean/arch/arm/mach-omap2/cm3xxx.c
File Facts
- System
- Linux kernel
- Corpus path
arch/arm/mach-omap2/cm3xxx.c- Extension
.c- Size
- 22314 bytes
- Lines
- 679
- Domain
- Architecture Layer
- Bucket
- arch/arm
- Inferred role
- Architecture Layer: implementation source
- Status
- source implementation candidate
Why This File Exists
CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/kernel.hlinux/types.hlinux/delay.hlinux/errno.hlinux/err.hlinux/io.hprm2xxx_3xxx.hcm.hcm3xxx.hcm-regbits-34xx.hclockdomain.h
Detected Declarations
struct omap3_cm_regsfunction _write_clktrctrlfunction omap3xxx_cm_is_clkdm_in_hwsupfunction omap3xxx_cm_clkdm_enable_hwsupfunction omap3xxx_cm_clkdm_disable_hwsupfunction omap3xxx_cm_clkdm_force_sleepfunction omap3xxx_cm_clkdm_force_wakeupfunction omap3xxx_cm_wait_module_readyfunction omap3xxx_cm_split_idlest_regfunction omap3xxx_clkdm_add_sleepdepfunction omap3xxx_clkdm_del_sleepdepfunction omap3xxx_clkdm_read_sleepdepfunction omap3xxx_clkdm_clear_all_sleepdepsfunction omap3xxx_clkdm_sleepfunction omap3xxx_clkdm_wakeupfunction omap3xxx_clkdm_allow_idlefunction omap3xxx_clkdm_deny_idlefunction omap3xxx_clkdm_clk_enablefunction omap3xxx_clkdm_clk_disablefunction omap3_cm_save_contextfunction omap3_cm_restore_contextfunction omap3_cm_save_scratchpad_contentsfunction omap3xxx_cm_initfunction omap3xxx_cm_exit
Annotated Snippet
struct omap3_cm_regs {
u32 iva2_cm_clksel1;
u32 iva2_cm_clksel2;
u32 cm_sysconfig;
u32 sgx_cm_clksel;
u32 dss_cm_clksel;
u32 cam_cm_clksel;
u32 per_cm_clksel;
u32 emu_cm_clksel;
u32 emu_cm_clkstctrl;
u32 pll_cm_autoidle;
u32 pll_cm_autoidle2;
u32 pll_cm_clksel4;
u32 pll_cm_clksel5;
u32 pll_cm_clken2;
u32 cm_polctrl;
u32 iva2_cm_fclken;
u32 iva2_cm_clken_pll;
u32 core_cm_fclken1;
u32 core_cm_fclken3;
u32 sgx_cm_fclken;
u32 wkup_cm_fclken;
u32 dss_cm_fclken;
u32 cam_cm_fclken;
u32 per_cm_fclken;
u32 usbhost_cm_fclken;
u32 core_cm_iclken1;
u32 core_cm_iclken2;
u32 core_cm_iclken3;
u32 sgx_cm_iclken;
u32 wkup_cm_iclken;
u32 dss_cm_iclken;
u32 cam_cm_iclken;
u32 per_cm_iclken;
u32 usbhost_cm_iclken;
u32 iva2_cm_autoidle2;
u32 mpu_cm_autoidle2;
u32 iva2_cm_clkstctrl;
u32 mpu_cm_clkstctrl;
u32 core_cm_clkstctrl;
u32 sgx_cm_clkstctrl;
u32 dss_cm_clkstctrl;
u32 cam_cm_clkstctrl;
u32 per_cm_clkstctrl;
u32 neon_cm_clkstctrl;
u32 usbhost_cm_clkstctrl;
u32 core_cm_autoidle1;
u32 core_cm_autoidle2;
u32 core_cm_autoidle3;
u32 wkup_cm_autoidle;
u32 dss_cm_autoidle;
u32 cam_cm_autoidle;
u32 per_cm_autoidle;
u32 usbhost_cm_autoidle;
u32 sgx_cm_sleepdep;
u32 dss_cm_sleepdep;
u32 cam_cm_sleepdep;
u32 per_cm_sleepdep;
u32 usbhost_cm_sleepdep;
u32 cm_clkout_ctrl;
};
static struct omap3_cm_regs cm_context;
void omap3_cm_save_context(void)
{
cm_context.iva2_cm_clksel1 =
omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_CLKSEL1);
cm_context.iva2_cm_clksel2 =
omap2_cm_read_mod_reg(OMAP3430_IVA2_MOD, CM_CLKSEL2);
cm_context.cm_sysconfig =
omap2_cm_read_mod_reg(OCP_MOD, OMAP3430_CM_SYSCONFIG);
cm_context.sgx_cm_clksel =
omap2_cm_read_mod_reg(OMAP3430ES2_SGX_MOD, CM_CLKSEL);
cm_context.dss_cm_clksel =
omap2_cm_read_mod_reg(OMAP3430_DSS_MOD, CM_CLKSEL);
cm_context.cam_cm_clksel =
omap2_cm_read_mod_reg(OMAP3430_CAM_MOD, CM_CLKSEL);
cm_context.per_cm_clksel =
omap2_cm_read_mod_reg(OMAP3430_PER_MOD, CM_CLKSEL);
cm_context.emu_cm_clksel =
omap2_cm_read_mod_reg(OMAP3430_EMU_MOD, CM_CLKSEL1);
cm_context.emu_cm_clkstctrl =
omap2_cm_read_mod_reg(OMAP3430_EMU_MOD, OMAP2_CM_CLKSTCTRL);
/*
* As per erratum i671, ROM code does not respect the PER DPLL
* programming scheme if CM_AUTOIDLE_PLL.AUTO_PERIPH_DPLL == 1.
* In this case, even though this register has been saved in
* scratchpad contents, we need to restore AUTO_PERIPH_DPLL
* by ourselves. So, we need to save it anyway.
Annotation
- Immediate include surface: `linux/kernel.h`, `linux/types.h`, `linux/delay.h`, `linux/errno.h`, `linux/err.h`, `linux/io.h`, `prm2xxx_3xxx.h`, `cm.h`.
- Detected declarations: `struct omap3_cm_regs`, `function _write_clktrctrl`, `function omap3xxx_cm_is_clkdm_in_hwsup`, `function omap3xxx_cm_clkdm_enable_hwsup`, `function omap3xxx_cm_clkdm_disable_hwsup`, `function omap3xxx_cm_clkdm_force_sleep`, `function omap3xxx_cm_clkdm_force_wakeup`, `function omap3xxx_cm_wait_module_ready`, `function omap3xxx_cm_split_idlest_reg`, `function omap3xxx_clkdm_add_sleepdep`.
- Atlas domain: Architecture Layer / arch/arm.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.