Commit 98954f4b authored by Olof Johansson's avatar Olof Johansson

Merge tag 'omap-for-v3.16/soc-signed' of...

Merge tag 'omap-for-v3.16/soc-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into next/soc

Pull "ARM: omap soc changes for v3.16 merge window" from Tony Lindgren:

SoC related changes for omaps.

* tag 'omap-for-v3.16/soc-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap:
  ARM: DRA752: add detection of SoC information
  ARM: OMAP2+: Remove suspend_set_ops from common pm late init
  ARM: OMAP2+: hwmod: OMAP5 DSS hwmod data
  ARM: omap4: hwmod_data: Clean up audio related structures (remove/merge them)
Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
parents e58cf019 733d20ee
...@@ -628,6 +628,41 @@ void __init omap5xxx_check_revision(void) ...@@ -628,6 +628,41 @@ void __init omap5xxx_check_revision(void)
pr_info("%s %s\n", soc_name, soc_rev); pr_info("%s %s\n", soc_name, soc_rev);
} }
void __init dra7xxx_check_revision(void)
{
u32 idcode;
u16 hawkeye;
u8 rev;
idcode = read_tap_reg(OMAP_TAP_IDCODE);
hawkeye = (idcode >> 12) & 0xffff;
rev = (idcode >> 28) & 0xff;
switch (hawkeye) {
case 0xb990:
switch (rev) {
case 0:
omap_revision = DRA752_REV_ES1_0;
break;
case 1:
default:
omap_revision = DRA752_REV_ES1_1;
}
break;
default:
/* Unknown default to latest silicon rev as default*/
pr_warn("%s: unknown idcode=0x%08x (hawkeye=0x%08x,rev=0x%d)\n",
__func__, idcode, hawkeye, rev);
omap_revision = DRA752_REV_ES1_1;
}
sprintf(soc_name, "DRA%03x", omap_rev() >> 16);
sprintf(soc_rev, "ES%d.%d", (omap_rev() >> 12) & 0xf,
(omap_rev() >> 8) & 0xf);
pr_info("%s %s\n", soc_name, soc_rev);
}
/* /*
* Set up things for map_io and processor detection later on. Gets called * Set up things for map_io and processor detection later on. Gets called
* pretty much first thing from board init. For multi-omap, this gets * pretty much first thing from board init. For multi-omap, this gets
...@@ -669,6 +704,8 @@ static const char * __init omap_get_family(void) ...@@ -669,6 +704,8 @@ static const char * __init omap_get_family(void)
return kasprintf(GFP_KERNEL, "OMAP5"); return kasprintf(GFP_KERNEL, "OMAP5");
else if (soc_is_am43xx()) else if (soc_is_am43xx())
return kasprintf(GFP_KERNEL, "AM43xx"); return kasprintf(GFP_KERNEL, "AM43xx");
else if (soc_is_dra7xx())
return kasprintf(GFP_KERNEL, "DRA7");
else else
return kasprintf(GFP_KERNEL, "Unknown"); return kasprintf(GFP_KERNEL, "Unknown");
} }
......
...@@ -693,6 +693,7 @@ void __init dra7xx_init_early(void) ...@@ -693,6 +693,7 @@ void __init dra7xx_init_early(void)
omap_prm_base_init(); omap_prm_base_init();
omap_cm_base_init(); omap_cm_base_init();
omap44xx_prm_init(); omap44xx_prm_init();
dra7xxx_check_revision();
dra7xx_powerdomains_init(); dra7xx_powerdomains_init();
dra7xx_clockdomains_init(); dra7xx_clockdomains_init();
dra7xx_hwmod_init(); dra7xx_hwmod_init();
......
...@@ -3635,15 +3635,7 @@ static struct omap_hwmod_ocp_if omap44xx_l4_abe__dmic = { ...@@ -3635,15 +3635,7 @@ static struct omap_hwmod_ocp_if omap44xx_l4_abe__dmic = {
.master = &omap44xx_l4_abe_hwmod, .master = &omap44xx_l4_abe_hwmod,
.slave = &omap44xx_dmic_hwmod, .slave = &omap44xx_dmic_hwmod,
.clk = "ocp_abe_iclk", .clk = "ocp_abe_iclk",
.user = OCP_USER_MPU, .user = OCP_USER_MPU | OCP_USER_SDMA,
};
/* l4_abe -> dmic (dma) */
static struct omap_hwmod_ocp_if omap44xx_l4_abe__dmic_dma = {
.master = &omap44xx_l4_abe_hwmod,
.slave = &omap44xx_dmic_hwmod,
.clk = "ocp_abe_iclk",
.user = OCP_USER_SDMA,
}; };
/* dsp -> iva */ /* dsp -> iva */
...@@ -4209,15 +4201,7 @@ static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp1 = { ...@@ -4209,15 +4201,7 @@ static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp1 = {
.master = &omap44xx_l4_abe_hwmod, .master = &omap44xx_l4_abe_hwmod,
.slave = &omap44xx_mcbsp1_hwmod, .slave = &omap44xx_mcbsp1_hwmod,
.clk = "ocp_abe_iclk", .clk = "ocp_abe_iclk",
.user = OCP_USER_MPU, .user = OCP_USER_MPU | OCP_USER_SDMA,
};
/* l4_abe -> mcbsp1 (dma) */
static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp1_dma = {
.master = &omap44xx_l4_abe_hwmod,
.slave = &omap44xx_mcbsp1_hwmod,
.clk = "ocp_abe_iclk",
.user = OCP_USER_SDMA,
}; };
/* l4_abe -> mcbsp2 */ /* l4_abe -> mcbsp2 */
...@@ -4225,15 +4209,7 @@ static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp2 = { ...@@ -4225,15 +4209,7 @@ static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp2 = {
.master = &omap44xx_l4_abe_hwmod, .master = &omap44xx_l4_abe_hwmod,
.slave = &omap44xx_mcbsp2_hwmod, .slave = &omap44xx_mcbsp2_hwmod,
.clk = "ocp_abe_iclk", .clk = "ocp_abe_iclk",
.user = OCP_USER_MPU, .user = OCP_USER_MPU | OCP_USER_SDMA,
};
/* l4_abe -> mcbsp2 (dma) */
static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp2_dma = {
.master = &omap44xx_l4_abe_hwmod,
.slave = &omap44xx_mcbsp2_hwmod,
.clk = "ocp_abe_iclk",
.user = OCP_USER_SDMA,
}; };
/* l4_abe -> mcbsp3 */ /* l4_abe -> mcbsp3 */
...@@ -4241,15 +4217,7 @@ static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp3 = { ...@@ -4241,15 +4217,7 @@ static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp3 = {
.master = &omap44xx_l4_abe_hwmod, .master = &omap44xx_l4_abe_hwmod,
.slave = &omap44xx_mcbsp3_hwmod, .slave = &omap44xx_mcbsp3_hwmod,
.clk = "ocp_abe_iclk", .clk = "ocp_abe_iclk",
.user = OCP_USER_MPU, .user = OCP_USER_MPU | OCP_USER_SDMA,
};
/* l4_abe -> mcbsp3 (dma) */
static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcbsp3_dma = {
.master = &omap44xx_l4_abe_hwmod,
.slave = &omap44xx_mcbsp3_hwmod,
.clk = "ocp_abe_iclk",
.user = OCP_USER_SDMA,
}; };
/* l4_per -> mcbsp4 */ /* l4_per -> mcbsp4 */
...@@ -4265,15 +4233,7 @@ static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcpdm = { ...@@ -4265,15 +4233,7 @@ static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcpdm = {
.master = &omap44xx_l4_abe_hwmod, .master = &omap44xx_l4_abe_hwmod,
.slave = &omap44xx_mcpdm_hwmod, .slave = &omap44xx_mcpdm_hwmod,
.clk = "ocp_abe_iclk", .clk = "ocp_abe_iclk",
.user = OCP_USER_MPU, .user = OCP_USER_MPU | OCP_USER_SDMA,
};
/* l4_abe -> mcpdm (dma) */
static struct omap_hwmod_ocp_if omap44xx_l4_abe__mcpdm_dma = {
.master = &omap44xx_l4_abe_hwmod,
.slave = &omap44xx_mcpdm_hwmod,
.clk = "ocp_abe_iclk",
.user = OCP_USER_SDMA,
}; };
/* l4_per -> mcspi1 */ /* l4_per -> mcspi1 */
...@@ -4575,15 +4535,7 @@ static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer5 = { ...@@ -4575,15 +4535,7 @@ static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer5 = {
.master = &omap44xx_l4_abe_hwmod, .master = &omap44xx_l4_abe_hwmod,
.slave = &omap44xx_timer5_hwmod, .slave = &omap44xx_timer5_hwmod,
.clk = "ocp_abe_iclk", .clk = "ocp_abe_iclk",
.user = OCP_USER_MPU, .user = OCP_USER_MPU | OCP_USER_SDMA,
};
/* l4_abe -> timer5 (dma) */
static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer5_dma = {
.master = &omap44xx_l4_abe_hwmod,
.slave = &omap44xx_timer5_hwmod,
.clk = "ocp_abe_iclk",
.user = OCP_USER_SDMA,
}; };
/* l4_abe -> timer6 */ /* l4_abe -> timer6 */
...@@ -4591,15 +4543,7 @@ static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer6 = { ...@@ -4591,15 +4543,7 @@ static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer6 = {
.master = &omap44xx_l4_abe_hwmod, .master = &omap44xx_l4_abe_hwmod,
.slave = &omap44xx_timer6_hwmod, .slave = &omap44xx_timer6_hwmod,
.clk = "ocp_abe_iclk", .clk = "ocp_abe_iclk",
.user = OCP_USER_MPU, .user = OCP_USER_MPU | OCP_USER_SDMA,
};
/* l4_abe -> timer6 (dma) */
static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer6_dma = {
.master = &omap44xx_l4_abe_hwmod,
.slave = &omap44xx_timer6_hwmod,
.clk = "ocp_abe_iclk",
.user = OCP_USER_SDMA,
}; };
/* l4_abe -> timer7 */ /* l4_abe -> timer7 */
...@@ -4607,15 +4551,7 @@ static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer7 = { ...@@ -4607,15 +4551,7 @@ static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer7 = {
.master = &omap44xx_l4_abe_hwmod, .master = &omap44xx_l4_abe_hwmod,
.slave = &omap44xx_timer7_hwmod, .slave = &omap44xx_timer7_hwmod,
.clk = "ocp_abe_iclk", .clk = "ocp_abe_iclk",
.user = OCP_USER_MPU, .user = OCP_USER_MPU | OCP_USER_SDMA,
};
/* l4_abe -> timer7 (dma) */
static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer7_dma = {
.master = &omap44xx_l4_abe_hwmod,
.slave = &omap44xx_timer7_hwmod,
.clk = "ocp_abe_iclk",
.user = OCP_USER_SDMA,
}; };
/* l4_abe -> timer8 */ /* l4_abe -> timer8 */
...@@ -4623,15 +4559,7 @@ static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer8 = { ...@@ -4623,15 +4559,7 @@ static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer8 = {
.master = &omap44xx_l4_abe_hwmod, .master = &omap44xx_l4_abe_hwmod,
.slave = &omap44xx_timer8_hwmod, .slave = &omap44xx_timer8_hwmod,
.clk = "ocp_abe_iclk", .clk = "ocp_abe_iclk",
.user = OCP_USER_MPU, .user = OCP_USER_MPU | OCP_USER_SDMA,
};
/* l4_abe -> timer8 (dma) */
static struct omap_hwmod_ocp_if omap44xx_l4_abe__timer8_dma = {
.master = &omap44xx_l4_abe_hwmod,
.slave = &omap44xx_timer8_hwmod,
.clk = "ocp_abe_iclk",
.user = OCP_USER_SDMA,
}; };
/* l4_per -> timer9 */ /* l4_per -> timer9 */
...@@ -4831,7 +4759,6 @@ static struct omap_hwmod_ocp_if *omap44xx_hwmod_ocp_ifs[] __initdata = { ...@@ -4831,7 +4759,6 @@ static struct omap_hwmod_ocp_if *omap44xx_hwmod_ocp_ifs[] __initdata = {
&omap44xx_l3_instr__debugss, &omap44xx_l3_instr__debugss,
&omap44xx_l4_cfg__dma_system, &omap44xx_l4_cfg__dma_system,
&omap44xx_l4_abe__dmic, &omap44xx_l4_abe__dmic,
&omap44xx_l4_abe__dmic_dma,
&omap44xx_dsp__iva, &omap44xx_dsp__iva,
/* &omap44xx_dsp__sl2if, */ /* &omap44xx_dsp__sl2if, */
&omap44xx_l4_cfg__dsp, &omap44xx_l4_cfg__dsp,
...@@ -4874,14 +4801,10 @@ static struct omap_hwmod_ocp_if *omap44xx_hwmod_ocp_ifs[] __initdata = { ...@@ -4874,14 +4801,10 @@ static struct omap_hwmod_ocp_if *omap44xx_hwmod_ocp_ifs[] __initdata = {
&omap44xx_l4_abe__mcasp, &omap44xx_l4_abe__mcasp,
&omap44xx_l4_abe__mcasp_dma, &omap44xx_l4_abe__mcasp_dma,
&omap44xx_l4_abe__mcbsp1, &omap44xx_l4_abe__mcbsp1,
&omap44xx_l4_abe__mcbsp1_dma,
&omap44xx_l4_abe__mcbsp2, &omap44xx_l4_abe__mcbsp2,
&omap44xx_l4_abe__mcbsp2_dma,
&omap44xx_l4_abe__mcbsp3, &omap44xx_l4_abe__mcbsp3,
&omap44xx_l4_abe__mcbsp3_dma,
&omap44xx_l4_per__mcbsp4, &omap44xx_l4_per__mcbsp4,
&omap44xx_l4_abe__mcpdm, &omap44xx_l4_abe__mcpdm,
&omap44xx_l4_abe__mcpdm_dma,
&omap44xx_l4_per__mcspi1, &omap44xx_l4_per__mcspi1,
&omap44xx_l4_per__mcspi2, &omap44xx_l4_per__mcspi2,
&omap44xx_l4_per__mcspi3, &omap44xx_l4_per__mcspi3,
...@@ -4913,13 +4836,9 @@ static struct omap_hwmod_ocp_if *omap44xx_hwmod_ocp_ifs[] __initdata = { ...@@ -4913,13 +4836,9 @@ static struct omap_hwmod_ocp_if *omap44xx_hwmod_ocp_ifs[] __initdata = {
&omap44xx_l4_per__timer3, &omap44xx_l4_per__timer3,
&omap44xx_l4_per__timer4, &omap44xx_l4_per__timer4,
&omap44xx_l4_abe__timer5, &omap44xx_l4_abe__timer5,
&omap44xx_l4_abe__timer5_dma,
&omap44xx_l4_abe__timer6, &omap44xx_l4_abe__timer6,
&omap44xx_l4_abe__timer6_dma,
&omap44xx_l4_abe__timer7, &omap44xx_l4_abe__timer7,
&omap44xx_l4_abe__timer7_dma,
&omap44xx_l4_abe__timer8, &omap44xx_l4_abe__timer8,
&omap44xx_l4_abe__timer8_dma,
&omap44xx_l4_per__timer9, &omap44xx_l4_per__timer9,
&omap44xx_l4_per__timer10, &omap44xx_l4_per__timer10,
&omap44xx_l4_per__timer11, &omap44xx_l4_per__timer11,
......
...@@ -333,6 +333,235 @@ static struct omap_hwmod omap54xx_dmic_hwmod = { ...@@ -333,6 +333,235 @@ static struct omap_hwmod omap54xx_dmic_hwmod = {
}, },
}; };
/*
* 'dss' class
* display sub-system
*/
static struct omap_hwmod_class_sysconfig omap54xx_dss_sysc = {
.rev_offs = 0x0000,
.syss_offs = 0x0014,
.sysc_flags = SYSS_HAS_RESET_STATUS,
};
static struct omap_hwmod_class omap54xx_dss_hwmod_class = {
.name = "dss",
.sysc = &omap54xx_dss_sysc,
.reset = omap_dss_reset,
};
/* dss */
static struct omap_hwmod_opt_clk dss_opt_clks[] = {
{ .role = "32khz_clk", .clk = "dss_32khz_clk" },
{ .role = "sys_clk", .clk = "dss_sys_clk" },
{ .role = "hdmi_clk", .clk = "dss_48mhz_clk" },
};
static struct omap_hwmod omap54xx_dss_hwmod = {
.name = "dss_core",
.class = &omap54xx_dss_hwmod_class,
.clkdm_name = "dss_clkdm",
.flags = HWMOD_CONTROL_OPT_CLKS_IN_RESET,
.main_clk = "dss_dss_clk",
.prcm = {
.omap4 = {
.clkctrl_offs = OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET,
.context_offs = OMAP54XX_RM_DSS_DSS_CONTEXT_OFFSET,
.modulemode = MODULEMODE_SWCTRL,
},
},
.opt_clks = dss_opt_clks,
.opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
};
/*
* 'dispc' class
* display controller
*/
static struct omap_hwmod_class_sysconfig omap54xx_dispc_sysc = {
.rev_offs = 0x0000,
.sysc_offs = 0x0010,
.syss_offs = 0x0014,
.sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
SYSC_HAS_ENAWAKEUP | SYSC_HAS_MIDLEMODE |
SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
SYSS_HAS_RESET_STATUS),
.idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
.sysc_fields = &omap_hwmod_sysc_type1,
};
static struct omap_hwmod_class omap54xx_dispc_hwmod_class = {
.name = "dispc",
.sysc = &omap54xx_dispc_sysc,
};
/* dss_dispc */
static struct omap_hwmod_opt_clk dss_dispc_opt_clks[] = {
{ .role = "sys_clk", .clk = "dss_sys_clk" },
};
/* dss_dispc dev_attr */
static struct omap_dss_dispc_dev_attr dss_dispc_dev_attr = {
.has_framedonetv_irq = 1,
.manager_count = 4,
};
static struct omap_hwmod omap54xx_dss_dispc_hwmod = {
.name = "dss_dispc",
.class = &omap54xx_dispc_hwmod_class,
.clkdm_name = "dss_clkdm",
.main_clk = "dss_dss_clk",
.prcm = {
.omap4 = {
.clkctrl_offs = OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET,
.flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
},
},
.opt_clks = dss_dispc_opt_clks,
.opt_clks_cnt = ARRAY_SIZE(dss_dispc_opt_clks),
.dev_attr = &dss_dispc_dev_attr,
};
/*
* 'dsi1' class
* display serial interface controller
*/
static struct omap_hwmod_class_sysconfig omap54xx_dsi1_sysc = {
.rev_offs = 0x0000,
.sysc_offs = 0x0010,
.syss_offs = 0x0014,
.sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_CLOCKACTIVITY |
SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
.idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
.sysc_fields = &omap_hwmod_sysc_type1,
};
static struct omap_hwmod_class omap54xx_dsi1_hwmod_class = {
.name = "dsi1",
.sysc = &omap54xx_dsi1_sysc,
};
/* dss_dsi1_a */
static struct omap_hwmod_opt_clk dss_dsi1_a_opt_clks[] = {
{ .role = "sys_clk", .clk = "dss_sys_clk" },
};
static struct omap_hwmod omap54xx_dss_dsi1_a_hwmod = {
.name = "dss_dsi1",
.class = &omap54xx_dsi1_hwmod_class,
.clkdm_name = "dss_clkdm",
.main_clk = "dss_dss_clk",
.prcm = {
.omap4 = {
.clkctrl_offs = OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET,
.flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
},
},
.opt_clks = dss_dsi1_a_opt_clks,
.opt_clks_cnt = ARRAY_SIZE(dss_dsi1_a_opt_clks),
};
/* dss_dsi1_c */
static struct omap_hwmod_opt_clk dss_dsi1_c_opt_clks[] = {
{ .role = "sys_clk", .clk = "dss_sys_clk" },
};
static struct omap_hwmod omap54xx_dss_dsi1_c_hwmod = {
.name = "dss_dsi2",
.class = &omap54xx_dsi1_hwmod_class,
.clkdm_name = "dss_clkdm",
.main_clk = "dss_dss_clk",
.prcm = {
.omap4 = {
.clkctrl_offs = OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET,
.flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
},
},
.opt_clks = dss_dsi1_c_opt_clks,
.opt_clks_cnt = ARRAY_SIZE(dss_dsi1_c_opt_clks),
};
/*
* 'hdmi' class
* hdmi controller
*/
static struct omap_hwmod_class_sysconfig omap54xx_hdmi_sysc = {
.rev_offs = 0x0000,
.sysc_offs = 0x0010,
.sysc_flags = (SYSC_HAS_RESET_STATUS | SYSC_HAS_SIDLEMODE |
SYSC_HAS_SOFTRESET),
.idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
SIDLE_SMART_WKUP),
.sysc_fields = &omap_hwmod_sysc_type2,
};
static struct omap_hwmod_class omap54xx_hdmi_hwmod_class = {
.name = "hdmi",
.sysc = &omap54xx_hdmi_sysc,
};
static struct omap_hwmod_opt_clk dss_hdmi_opt_clks[] = {
{ .role = "sys_clk", .clk = "dss_sys_clk" },
};
static struct omap_hwmod omap54xx_dss_hdmi_hwmod = {
.name = "dss_hdmi",
.class = &omap54xx_hdmi_hwmod_class,
.clkdm_name = "dss_clkdm",
.main_clk = "dss_48mhz_clk",
.prcm = {
.omap4 = {
.clkctrl_offs = OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET,
.flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
},
},
.opt_clks = dss_hdmi_opt_clks,
.opt_clks_cnt = ARRAY_SIZE(dss_hdmi_opt_clks),
};
/*
* 'rfbi' class
* remote frame buffer interface
*/
static struct omap_hwmod_class_sysconfig omap54xx_rfbi_sysc = {
.rev_offs = 0x0000,
.sysc_offs = 0x0010,
.syss_offs = 0x0014,
.sysc_flags = (SYSC_HAS_AUTOIDLE | SYSC_HAS_SIDLEMODE |
SYSC_HAS_SOFTRESET | SYSS_HAS_RESET_STATUS),
.idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
.sysc_fields = &omap_hwmod_sysc_type1,
};
static struct omap_hwmod_class omap54xx_rfbi_hwmod_class = {
.name = "rfbi",
.sysc = &omap54xx_rfbi_sysc,
};
/* dss_rfbi */
static struct omap_hwmod_opt_clk dss_rfbi_opt_clks[] = {
{ .role = "ick", .clk = "l3_iclk_div" },
};
static struct omap_hwmod omap54xx_dss_rfbi_hwmod = {
.name = "dss_rfbi",
.class = &omap54xx_rfbi_hwmod_class,
.clkdm_name = "dss_clkdm",
.prcm = {
.omap4 = {
.clkctrl_offs = OMAP54XX_CM_DSS_DSS_CLKCTRL_OFFSET,
.flags = HWMOD_OMAP4_NO_CONTEXT_LOSS_BIT,
},
},
.opt_clks = dss_rfbi_opt_clks,
.opt_clks_cnt = ARRAY_SIZE(dss_rfbi_opt_clks),
};
/* /*
* 'emif' class * 'emif' class
* external memory interface no1 (wrapper) * external memory interface no1 (wrapper)
...@@ -1974,6 +2203,54 @@ static struct omap_hwmod_ocp_if omap54xx_l4_abe__dmic = { ...@@ -1974,6 +2203,54 @@ static struct omap_hwmod_ocp_if omap54xx_l4_abe__dmic = {
.user = OCP_USER_MPU, .user = OCP_USER_MPU,
}; };
/* l3_main_2 -> dss */
static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss = {
.master = &omap54xx_l3_main_2_hwmod,
.slave = &omap54xx_dss_hwmod,
.clk = "l3_iclk_div",
.user = OCP_USER_MPU | OCP_USER_SDMA,
};
/* l3_main_2 -> dss_dispc */
static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_dispc = {
.master = &omap54xx_l3_main_2_hwmod,
.slave = &omap54xx_dss_dispc_hwmod,
.clk = "l3_iclk_div",
.user = OCP_USER_MPU | OCP_USER_SDMA,
};
/* l3_main_2 -> dss_dsi1_a */
static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_dsi1_a = {
.master = &omap54xx_l3_main_2_hwmod,
.slave = &omap54xx_dss_dsi1_a_hwmod,
.clk = "l3_iclk_div",
.user = OCP_USER_MPU | OCP_USER_SDMA,
};
/* l3_main_2 -> dss_dsi1_c */
static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_dsi1_c = {
.master = &omap54xx_l3_main_2_hwmod,
.slave = &omap54xx_dss_dsi1_c_hwmod,
.clk = "l3_iclk_div",
.user = OCP_USER_MPU | OCP_USER_SDMA,
};
/* l3_main_2 -> dss_hdmi */
static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_hdmi = {
.master = &omap54xx_l3_main_2_hwmod,
.slave = &omap54xx_dss_hdmi_hwmod,
.clk = "l3_iclk_div",
.user = OCP_USER_MPU | OCP_USER_SDMA,
};
/* l3_main_2 -> dss_rfbi */
static struct omap_hwmod_ocp_if omap54xx_l3_main_2__dss_rfbi = {
.master = &omap54xx_l3_main_2_hwmod,
.slave = &omap54xx_dss_rfbi_hwmod,
.clk = "l3_iclk_div",
.user = OCP_USER_MPU | OCP_USER_SDMA,
};
/* mpu -> emif1 */ /* mpu -> emif1 */
static struct omap_hwmod_ocp_if omap54xx_mpu__emif1 = { static struct omap_hwmod_ocp_if omap54xx_mpu__emif1 = {
.master = &omap54xx_mpu_hwmod, .master = &omap54xx_mpu_hwmod,
...@@ -2427,6 +2704,12 @@ static struct omap_hwmod_ocp_if *omap54xx_hwmod_ocp_ifs[] __initdata = { ...@@ -2427,6 +2704,12 @@ static struct omap_hwmod_ocp_if *omap54xx_hwmod_ocp_ifs[] __initdata = {
&omap54xx_l4_cfg__dma_system, &omap54xx_l4_cfg__dma_system,
&omap54xx_l4_abe__dmic, &omap54xx_l4_abe__dmic,
&omap54xx_l4_cfg__mmu_dsp, &omap54xx_l4_cfg__mmu_dsp,
&omap54xx_l3_main_2__dss,
&omap54xx_l3_main_2__dss_dispc,
&omap54xx_l3_main_2__dss_dsi1_a,
&omap54xx_l3_main_2__dss_dsi1_c,
&omap54xx_l3_main_2__dss_hdmi,
&omap54xx_l3_main_2__dss_rfbi,
&omap54xx_mpu__emif1, &omap54xx_mpu__emif1,
&omap54xx_mpu__emif2, &omap54xx_mpu__emif2,
&omap54xx_l4_wkup__gpio1, &omap54xx_l4_wkup__gpio1,
......
...@@ -32,11 +32,13 @@ ...@@ -32,11 +32,13 @@
#include "pm.h" #include "pm.h"
#include "twl-common.h" #include "twl-common.h"
#ifdef CONFIG_SUSPEND
/* /*
* omap_pm_suspend: points to a function that does the SoC-specific * omap_pm_suspend: points to a function that does the SoC-specific
* suspend work * suspend work
*/ */
int (*omap_pm_suspend)(void); static int (*omap_pm_suspend)(void);
#endif
#ifdef CONFIG_PM #ifdef CONFIG_PM
/** /**
...@@ -243,6 +245,15 @@ static const struct platform_suspend_ops omap_pm_ops = { ...@@ -243,6 +245,15 @@ static const struct platform_suspend_ops omap_pm_ops = {
.valid = suspend_valid_only_mem, .valid = suspend_valid_only_mem,
}; };
/**
* omap_common_suspend_init - Set common suspend routines for OMAP SoCs
* @pm_suspend: function pointer to SoC specific suspend function
*/
void omap_common_suspend_init(void *pm_suspend)
{
omap_pm_suspend = pm_suspend;
suspend_set_ops(&omap_pm_ops);
}
#endif /* CONFIG_SUSPEND */ #endif /* CONFIG_SUSPEND */
static void __init omap3_init_voltages(void) static void __init omap3_init_voltages(void)
...@@ -310,9 +321,5 @@ int __init omap2_common_pm_late_init(void) ...@@ -310,9 +321,5 @@ int __init omap2_common_pm_late_init(void)
/* cpufreq dummy device instantiation */ /* cpufreq dummy device instantiation */
omap_init_cpufreq(); omap_init_cpufreq();
#ifdef CONFIG_SUSPEND
suspend_set_ops(&omap_pm_ops);
#endif
return 0; return 0;
} }
...@@ -34,7 +34,6 @@ extern void *omap3_secure_ram_storage; ...@@ -34,7 +34,6 @@ extern void *omap3_secure_ram_storage;
extern void omap3_pm_off_mode_enable(int); extern void omap3_pm_off_mode_enable(int);
extern void omap_sram_idle(void); extern void omap_sram_idle(void);
extern int omap_pm_clkdms_setup(struct clockdomain *clkdm, void *unused); extern int omap_pm_clkdms_setup(struct clockdomain *clkdm, void *unused);
extern int (*omap_pm_suspend)(void);
#if defined(CONFIG_PM_OPP) #if defined(CONFIG_PM_OPP)
extern int omap3_opp_init(void); extern int omap3_opp_init(void);
...@@ -147,4 +146,11 @@ static inline void omap_pm_get_oscillator(u32 *tstart, u32 *tshut) { *tstart = * ...@@ -147,4 +146,11 @@ static inline void omap_pm_get_oscillator(u32 *tstart, u32 *tshut) { *tstart = *
static inline void omap_pm_setup_sr_i2c_pcb_length(u32 mm) { } static inline void omap_pm_setup_sr_i2c_pcb_length(u32 mm) { }
#endif #endif
#ifdef CONFIG_SUSPEND
void omap_common_suspend_init(void *pm_suspend);
#else
static inline void omap_common_suspend_init(void *pm_suspend)
{
}
#endif /* CONFIG_SUSPEND */
#endif #endif
...@@ -229,9 +229,7 @@ static void __init prcm_setup_regs(void) ...@@ -229,9 +229,7 @@ static void __init prcm_setup_regs(void)
clkdm_for_each(omap_pm_clkdms_setup, NULL); clkdm_for_each(omap_pm_clkdms_setup, NULL);
clkdm_add_wkdep(mpu_clkdm, wkup_clkdm); clkdm_add_wkdep(mpu_clkdm, wkup_clkdm);
#ifdef CONFIG_SUSPEND omap_common_suspend_init(omap2_enter_full_retention);
omap_pm_suspend = omap2_enter_full_retention;
#endif
/* REVISIT: Configure number of 32 kHz clock cycles for sys_clk /* REVISIT: Configure number of 32 kHz clock cycles for sys_clk
* stabilisation */ * stabilisation */
......
...@@ -391,7 +391,8 @@ static int omap3_pm_suspend(void) ...@@ -391,7 +391,8 @@ static int omap3_pm_suspend(void)
return ret; return ret;
} }
#else
#define omap3_pm_suspend NULL
#endif /* CONFIG_SUSPEND */ #endif /* CONFIG_SUSPEND */
...@@ -705,9 +706,7 @@ int __init omap3_pm_init(void) ...@@ -705,9 +706,7 @@ int __init omap3_pm_init(void)
per_clkdm = clkdm_lookup("per_clkdm"); per_clkdm = clkdm_lookup("per_clkdm");
wkup_clkdm = clkdm_lookup("wkup_clkdm"); wkup_clkdm = clkdm_lookup("wkup_clkdm");
#ifdef CONFIG_SUSPEND omap_common_suspend_init(omap3_pm_suspend);
omap_pm_suspend = omap3_pm_suspend;
#endif
arm_pm_idle = omap3_pm_idle; arm_pm_idle = omap3_pm_idle;
omap3_idle_init(); omap3_idle_init();
......
...@@ -96,6 +96,8 @@ static int omap4_pm_suspend(void) ...@@ -96,6 +96,8 @@ static int omap4_pm_suspend(void)
return 0; return 0;
} }
#else
#define omap4_pm_suspend NULL
#endif /* CONFIG_SUSPEND */ #endif /* CONFIG_SUSPEND */
static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused) static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused)
...@@ -251,9 +253,7 @@ int __init omap4_pm_init(void) ...@@ -251,9 +253,7 @@ int __init omap4_pm_init(void)
(void) clkdm_for_each(omap_pm_clkdms_setup, NULL); (void) clkdm_for_each(omap_pm_clkdms_setup, NULL);
#ifdef CONFIG_SUSPEND omap_common_suspend_init(omap4_pm_suspend);
omap_pm_suspend = omap4_pm_suspend;
#endif
/* Overwrite the default cpu_do_idle() */ /* Overwrite the default cpu_do_idle() */
arm_pm_idle = omap_default_idle; arm_pm_idle = omap_default_idle;
......
...@@ -459,10 +459,15 @@ IS_OMAP_TYPE(3430, 0x3430) ...@@ -459,10 +459,15 @@ IS_OMAP_TYPE(3430, 0x3430)
#define OMAP5430_REV_ES2_0 (OMAP54XX_CLASS | (0x30 << 16) | (0x20 << 8)) #define OMAP5430_REV_ES2_0 (OMAP54XX_CLASS | (0x30 << 16) | (0x20 << 8))
#define OMAP5432_REV_ES2_0 (OMAP54XX_CLASS | (0x32 << 16) | (0x20 << 8)) #define OMAP5432_REV_ES2_0 (OMAP54XX_CLASS | (0x32 << 16) | (0x20 << 8))
#define DRA7XX_CLASS 0x07000000
#define DRA752_REV_ES1_0 (DRA7XX_CLASS | (0x52 << 16) | (0x10 << 8))
#define DRA752_REV_ES1_1 (DRA7XX_CLASS | (0x52 << 16) | (0x11 << 8))
void omap2xxx_check_revision(void); void omap2xxx_check_revision(void);
void omap3xxx_check_revision(void); void omap3xxx_check_revision(void);
void omap4xxx_check_revision(void); void omap4xxx_check_revision(void);
void omap5xxx_check_revision(void); void omap5xxx_check_revision(void);
void dra7xxx_check_revision(void);
void omap3xxx_check_features(void); void omap3xxx_check_features(void);
void ti81xx_check_features(void); void ti81xx_check_features(void);
void am33xx_check_features(void); void am33xx_check_features(void);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment