From: Romit Dasgupta <romit@ti.com>
To: paul@pwsan.com, nm@ti.com, khilman@deeprootsystems.com
Cc: "linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>
Subject: [PATCH 7/10] OPP layer and additional cleanups
Date: Thu, 31 Dec 2009 18:59:25 +0530 [thread overview]
Message-ID: <1262266165.20175.183.camel@boson> (raw)
Adapted the OMAP3 specific PM layer with the new OPP layer. The following
have been done
1. Remove struct omap_opp_def and use only struct omap_opp as the previous
was almost similar to struct omap_opp.
2. Introduce a function 'get_l3_target_freq' to obtain the L3 frequency
corresponding to MPU frequency.(This needs to be done neatly). I agree
that this is ugly.
3. Defined a voltage scaling registration function.
4. Invoke the new OPP layer APIs for registering OPPs.
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
index 9744a35..04265f5 100644
--- a/arch/arm/mach-omap2/pm34xx.c
+++ b/arch/arm/mach-omap2/pm34xx.c
@@ -113,7 +113,7 @@ static struct prm_setup_vc prm_setup = {
.vdd1_off = 0x00, /* 0.6v */
};
-static struct omap_opp_def __initdata omap34xx_mpu_rate_table[] = {
+static struct omap_opp __initdata omap34xx_mpu_rate_table[] = {
/* OPP1 */
OMAP_OPP_DEF(true, 125000000, 975000),
/* OPP2 */
@@ -128,7 +128,7 @@ static struct omap_opp_def __initdata omap34xx_mpu_rate_table[] = {
OMAP_OPP_DEF(0, 0, 0)
};
-static struct omap_opp_def __initdata omap34xx_l3_rate_table[] = {
+static struct omap_opp __initdata omap34xx_l3_rate_table[] = {
/* OPP1 */
OMAP_OPP_DEF(false, 0, 975000),
/* OPP2 */
@@ -139,7 +139,7 @@ static struct omap_opp_def __initdata omap34xx_l3_rate_table[] = {
OMAP_OPP_DEF(0, 0, 0)
};
-static struct omap_opp_def __initdata omap34xx_dsp_rate_table[] = {
+static struct omap_opp __initdata omap34xx_dsp_rate_table[] = {
/* OPP1 */
OMAP_OPP_DEF(true, 90000000, 975000),
/* OPP2 */
@@ -154,7 +154,7 @@ static struct omap_opp_def __initdata omap34xx_dsp_rate_table[] = {
OMAP_OPP_DEF(0, 0, 0)
};
-static struct omap_opp_def __initdata omap36xx_mpu_rate_table[] = {
+static struct omap_opp __initdata omap36xx_mpu_rate_table[] = {
/* OPP1 - OPP50 */
OMAP_OPP_DEF(true, 300000000, 930000),
/* OPP2 - OPP100 */
@@ -167,7 +167,7 @@ static struct omap_opp_def __initdata omap36xx_mpu_rate_table[] = {
OMAP_OPP_DEF(0, 0, 0)
};
-static struct omap_opp_def __initdata omap36xx_l3_rate_table[] = {
+static struct omap_opp __initdata omap36xx_l3_rate_table[] = {
/* OPP1 - OPP50 */
OMAP_OPP_DEF(true, 100000000, 930000),
/* OPP2 - OPP100, OPP-Turbo, OPP-SB */
@@ -176,7 +176,7 @@ static struct omap_opp_def __initdata omap36xx_l3_rate_table[] = {
OMAP_OPP_DEF(0, 0, 0)
};
-static struct omap_opp_def __initdata omap36xx_dsp_rate_table[] = {
+static struct omap_opp __initdata omap36xx_dsp_rate_table[] = {
/* OPP1 - OPP50 */
OMAP_OPP_DEF(true, 260000000, 930000),
/* OPP2 - OPP100 */
@@ -189,6 +189,27 @@ static struct omap_opp_def __initdata omap36xx_dsp_rate_table[] = {
OMAP_OPP_DEF(0, 0, 0)
};
+/*
+ *XXX: !!! Ugly Alert !!!
+ * Need this info from hw_mods or equivalent.
+ */
+unsigned long get_l3_target_freq(struct omap_opp *opp)
+{
+ if (cpu_is_omap3630()) {
+ if (opp_to_freq(opp) >= 600000000)
+ return 200000000;
+ else
+ return 100000000;
+ } else {
+ if (opp_to_freq(opp) >= 500000000)
+ return 166000000;
+ else
+ return 83000000;
+ }
+
+ return 0;
+}
+
static inline void omap3_per_save_context(void)
{
omap_gpio_save_context();
@@ -1107,14 +1128,6 @@ void omap3_pm_off_mode_enable(int enable)
else
state = PWRDM_POWER_RET;
-#ifdef CONFIG_OMAP_PM_SRF
- resource_lock_opp(VDD1_OPP);
- resource_lock_opp(VDD2_OPP);
- if (resource_refresh())
- printk(KERN_ERR "Error: could not refresh resources\n");
- resource_unlock_opp(VDD1_OPP);
- resource_unlock_opp(VDD2_OPP);
-#endif
list_for_each_entry(pwrst, &pwrst_list, node) {
pwrst->next_state = state;
set_pwrdm_state(pwrst->pwrdm, state);
@@ -1347,30 +1360,33 @@ static void __init configure_vc(void)
void __init omap3_pm_init_opp_table(void)
{
- int i;
- struct omap_opp_def **omap3_opp_def_list;
- struct omap_opp_def *omap34xx_opp_def_list[] = {
+ int i, entries;
+ struct omap_opp **omap3_opp_def_list;
+ struct omap_opp *omap34xx_opp_def_list[] = {
omap34xx_mpu_rate_table,
omap34xx_l3_rate_table,
omap34xx_dsp_rate_table
};
- struct omap_opp_def *omap36xx_opp_def_list[] = {
+ struct omap_opp *omap36xx_opp_def_list[] = {
omap36xx_mpu_rate_table,
omap36xx_l3_rate_table,
omap36xx_dsp_rate_table
};
- struct omap_opp **omap3_rate_tables[] = {
- &mpu_opps,
- &dsp_opps,
- &l3_opps
- };
omap3_opp_def_list = cpu_is_omap3630() ? omap36xx_opp_def_list :
omap34xx_opp_def_list;
- for (i = 0; i < ARRAY_SIZE(omap3_rate_tables); i++) {
- *omap3_rate_tables[i] = opp_init_list(omap3_opp_def_list[i]);
+
+ entries = cpu_is_omap3630() ? ARRAY_SIZE(omap36xx_opp_def_list) :
+ ARRAY_SIZE(omap34xx_opp_def_list);
+
+ for (i = 0; i < entries; i++) {
+ int ret;
+ /*
+ * Alert!! Careful with the order of the rate table entries.
+ */
+ ret = create_opp_list(i + 1, omap3_opp_def_list[i]);
/* We dont want half configured system at the moment */
- BUG_ON(IS_ERR(omap3_rate_tables[i]));
+ BUG_ON(ret);
}
}
@@ -1384,6 +1400,17 @@ static int __init omap3_pm_early_init(void)
return 0;
}
+/* static DEFINE_SPINLOCK(scale_fn_lock); */
+volt_scale_t voltage_scale;
+int pm_register_volt_scaling(volt_scale_t fn)
+{
+ /* The lock may be unnecessary right now */
+ /* spinlock_irq(&scale_fn_lock); */
+ voltage_scale = fn;
+ /* spin_unlock_irq(&scale_fn_lock); */
+ return 0;
+}
+
arch_initcall(omap3_pm_early_init);
late_initcall(omap3_pm_init);
reply other threads:[~2009-12-31 13:29 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1262266165.20175.183.camel@boson \
--to=romit@ti.com \
--cc=khilman@deeprootsystems.com \
--cc=linux-omap@vger.kernel.org \
--cc=nm@ti.com \
--cc=paul@pwsan.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.