mirror of
https://git.yoctoproject.org/meta-ti
synced 2026-01-12 01:20:20 +00:00
linux-omap 2.6.39: add cpuidle patchset
Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
This commit is contained in:
@@ -2633,7 +2633,7 @@ CONFIG_USB_SERIAL_AIRCABLE=m
|
||||
CONFIG_USB_SERIAL_ARK3116=m
|
||||
CONFIG_USB_SERIAL_BELKIN=m
|
||||
CONFIG_USB_SERIAL_CH341=m
|
||||
CONFIG_USB_SERIAL_WHITEHEAT=m
|
||||
CONFIG_USB_SERIAL_WHITEHEAT=n
|
||||
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
|
||||
# CONFIG_USB_SERIAL_CP210X is not set
|
||||
CONFIG_USB_SERIAL_CYPRESS_M8=m
|
||||
@@ -2681,9 +2681,9 @@ CONFIG_USB_SERIAL_SAMBA=m
|
||||
CONFIG_USB_SERIAL_SIEMENS_MPI=m
|
||||
CONFIG_USB_SERIAL_SIERRAWIRELESS=m
|
||||
# CONFIG_USB_SERIAL_SYMBOL is not set
|
||||
CONFIG_USB_SERIAL_TI=m
|
||||
CONFIG_USB_SERIAL_TI=n
|
||||
CONFIG_USB_SERIAL_CYBERJACK=m
|
||||
CONFIG_USB_SERIAL_XIRCOM=m
|
||||
CONFIG_USB_SERIAL_XIRCOM=n
|
||||
# CONFIG_USB_SERIAL_OPTION is not set
|
||||
CONFIG_USB_SERIAL_OMNINET=m
|
||||
CONFIG_USB_SERIAL_OPTICON=m
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
From d19005cc07645703a61d4645c343ed586919575d Mon Sep 17 00:00:00 2001
|
||||
From: Rajendra Nayak <rnayak@ti.com>
|
||||
Date: Tue, 5 Apr 2011 15:22:31 +0530
|
||||
Subject: [PATCH 1/6] OMAP2+: clockdomain: Add an api to read idle mode
|
||||
|
||||
Add a clockdomain api to check if hardware supervised
|
||||
idle transitions are enabled on a clockdomain.
|
||||
|
||||
Signed-off-by: Rajendra Nayak <rnayak@ti.com>
|
||||
---
|
||||
arch/arm/mach-omap2/clockdomain.c | 21 +++++++++++++++++++++
|
||||
arch/arm/mach-omap2/clockdomain.h | 3 +++
|
||||
2 files changed, 24 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/clockdomain.c b/arch/arm/mach-omap2/clockdomain.c
|
||||
index 6cb6c03..2ab3686 100644
|
||||
--- a/arch/arm/mach-omap2/clockdomain.c
|
||||
+++ b/arch/arm/mach-omap2/clockdomain.c
|
||||
@@ -795,6 +795,27 @@ void clkdm_deny_idle(struct clockdomain *clkdm)
|
||||
arch_clkdm->clkdm_deny_idle(clkdm);
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * clkdm_is_idle - Check if the clkdm hwsup/autoidle is enabled
|
||||
+ * @clkdm: struct clockdomain *
|
||||
+ *
|
||||
+ * Returns true if the clockdomain is in hardware-supervised
|
||||
+ * idle mode, or 0 otherwise.
|
||||
+ *
|
||||
+ */
|
||||
+int clkdm_is_idle(struct clockdomain *clkdm)
|
||||
+{
|
||||
+ if (!clkdm)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ if (!arch_clkdm || !arch_clkdm->clkdm_is_idle)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ pr_debug("clockdomain: reading idle state for %s\n", clkdm->name);
|
||||
+
|
||||
+ return arch_clkdm->clkdm_is_idle(clkdm);
|
||||
+}
|
||||
+
|
||||
|
||||
/* Clockdomain-to-clock framework interface code */
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/clockdomain.h b/arch/arm/mach-omap2/clockdomain.h
|
||||
index 5823584..085ed82 100644
|
||||
--- a/arch/arm/mach-omap2/clockdomain.h
|
||||
+++ b/arch/arm/mach-omap2/clockdomain.h
|
||||
@@ -138,6 +138,7 @@ struct clockdomain {
|
||||
* @clkdm_wakeup: Force a clockdomain to wakeup
|
||||
* @clkdm_allow_idle: Enable hw supervised idle transitions for clock domain
|
||||
* @clkdm_deny_idle: Disable hw supervised idle transitions for clock domain
|
||||
+ * @clkdm_is_idle: Check if hw supervised idle transitions are enabled
|
||||
* @clkdm_clk_enable: Put the clkdm in right state for a clock enable
|
||||
* @clkdm_clk_disable: Put the clkdm in right state for a clock disable
|
||||
*/
|
||||
@@ -154,6 +155,7 @@ struct clkdm_ops {
|
||||
int (*clkdm_wakeup)(struct clockdomain *clkdm);
|
||||
void (*clkdm_allow_idle)(struct clockdomain *clkdm);
|
||||
void (*clkdm_deny_idle)(struct clockdomain *clkdm);
|
||||
+ int (*clkdm_is_idle)(struct clockdomain *clkdm);
|
||||
int (*clkdm_clk_enable)(struct clockdomain *clkdm);
|
||||
int (*clkdm_clk_disable)(struct clockdomain *clkdm);
|
||||
};
|
||||
@@ -177,6 +179,7 @@ int clkdm_clear_all_sleepdeps(struct clockdomain *clkdm);
|
||||
|
||||
void clkdm_allow_idle(struct clockdomain *clkdm);
|
||||
void clkdm_deny_idle(struct clockdomain *clkdm);
|
||||
+int clkdm_is_idle(struct clockdomain *clkdm);
|
||||
|
||||
int clkdm_wakeup(struct clockdomain *clkdm);
|
||||
int clkdm_sleep(struct clockdomain *clkdm);
|
||||
--
|
||||
1.6.6.1
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
From 2863828e636c1766c6d2de85c900f6656f4b6675 Mon Sep 17 00:00:00 2001
|
||||
From: Rajendra Nayak <rnayak@ti.com>
|
||||
Date: Tue, 5 Apr 2011 15:22:36 +0530
|
||||
Subject: [PATCH 2/6] OMAP2+: clockdomain: Add SoC support for clkdm_is_idle
|
||||
|
||||
Add the SoC specific implemenation for clkdm_is_idle
|
||||
for OMAP2/3 and OMAP4.
|
||||
|
||||
Signed-off-by: Rajendra Nayak <rnayak@ti.com>
|
||||
---
|
||||
arch/arm/mach-omap2/clockdomain2xxx_3xxx.c | 12 ++++++++++++
|
||||
arch/arm/mach-omap2/clockdomain44xx.c | 7 +++++++
|
||||
2 files changed, 19 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/clockdomain2xxx_3xxx.c b/arch/arm/mach-omap2/clockdomain2xxx_3xxx.c
|
||||
index 48d0db7..db49baa 100644
|
||||
--- a/arch/arm/mach-omap2/clockdomain2xxx_3xxx.c
|
||||
+++ b/arch/arm/mach-omap2/clockdomain2xxx_3xxx.c
|
||||
@@ -13,6 +13,7 @@
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
+#include <linux/errno.h>
|
||||
#include <plat/prcm.h>
|
||||
#include "prm.h"
|
||||
#include "prm2xxx_3xxx.h"
|
||||
@@ -146,6 +147,15 @@ static void omap2_clkdm_deny_idle(struct clockdomain *clkdm)
|
||||
_clkdm_del_autodeps(clkdm);
|
||||
}
|
||||
|
||||
+static int omap2_clkdm_is_idle(struct clockdomain *clkdm)
|
||||
+{
|
||||
+ if (!clkdm->clktrctrl_mask)
|
||||
+ return -1;
|
||||
+
|
||||
+ return omap2_cm_is_clkdm_in_hwsup(clkdm->pwrdm.ptr->prcm_offs,
|
||||
+ clkdm->clktrctrl_mask);
|
||||
+}
|
||||
+
|
||||
static void _enable_hwsup(struct clockdomain *clkdm)
|
||||
{
|
||||
if (cpu_is_omap24xx())
|
||||
@@ -252,6 +262,7 @@ struct clkdm_ops omap2_clkdm_operations = {
|
||||
.clkdm_wakeup = omap2_clkdm_wakeup,
|
||||
.clkdm_allow_idle = omap2_clkdm_allow_idle,
|
||||
.clkdm_deny_idle = omap2_clkdm_deny_idle,
|
||||
+ .clkdm_is_idle = omap2_clkdm_is_idle,
|
||||
.clkdm_clk_enable = omap2_clkdm_clk_enable,
|
||||
.clkdm_clk_disable = omap2_clkdm_clk_disable,
|
||||
};
|
||||
@@ -269,6 +280,7 @@ struct clkdm_ops omap3_clkdm_operations = {
|
||||
.clkdm_wakeup = omap3_clkdm_wakeup,
|
||||
.clkdm_allow_idle = omap3_clkdm_allow_idle,
|
||||
.clkdm_deny_idle = omap3_clkdm_deny_idle,
|
||||
+ .clkdm_is_idle = omap2_clkdm_is_idle,
|
||||
.clkdm_clk_enable = omap2_clkdm_clk_enable,
|
||||
.clkdm_clk_disable = omap2_clkdm_clk_disable,
|
||||
};
|
||||
diff --git a/arch/arm/mach-omap2/clockdomain44xx.c b/arch/arm/mach-omap2/clockdomain44xx.c
|
||||
index a1a4ecd..4b10727 100644
|
||||
--- a/arch/arm/mach-omap2/clockdomain44xx.c
|
||||
+++ b/arch/arm/mach-omap2/clockdomain44xx.c
|
||||
@@ -93,6 +93,12 @@ static void omap4_clkdm_deny_idle(struct clockdomain *clkdm)
|
||||
clkdm->cm_inst, clkdm->clkdm_offs);
|
||||
}
|
||||
|
||||
+static int omap4_clkdm_is_idle(struct clockdomain *clkdm)
|
||||
+{
|
||||
+ return omap4_cminst_is_clkdm_in_hwsup(clkdm->prcm_partition,
|
||||
+ clkdm->cm_inst, clkdm->clkdm_offs);
|
||||
+}
|
||||
+
|
||||
static int omap4_clkdm_clk_enable(struct clockdomain *clkdm)
|
||||
{
|
||||
bool hwsup = false;
|
||||
@@ -132,6 +138,7 @@ struct clkdm_ops omap4_clkdm_operations = {
|
||||
.clkdm_wakeup = omap4_clkdm_wakeup,
|
||||
.clkdm_allow_idle = omap4_clkdm_allow_idle,
|
||||
.clkdm_deny_idle = omap4_clkdm_deny_idle,
|
||||
+ .clkdm_is_idle = omap4_clkdm_is_idle,
|
||||
.clkdm_clk_enable = omap4_clkdm_clk_enable,
|
||||
.clkdm_clk_disable = omap4_clkdm_clk_disable,
|
||||
};
|
||||
--
|
||||
1.6.6.1
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
From dc352655af9c356f5c2db95c88718ed3a996569b Mon Sep 17 00:00:00 2001
|
||||
From: Rajendra Nayak <rnayak@ti.com>
|
||||
Date: Tue, 5 Apr 2011 15:22:41 +0530
|
||||
Subject: [PATCH 3/6] OMAP2+: PM: Initialise sleep_switch to a non-valid value
|
||||
|
||||
sleep_switch which is initialised to 0 in omap_set_pwrdm_state
|
||||
happens to be a valid sleep_switch type (FORCEWAKEUP_SWITCH)
|
||||
which are defined as
|
||||
#define FORCEWAKEUP_SWITCH 0
|
||||
#define LOWPOWERSTATE_SWITCH 1
|
||||
|
||||
This causes the function to wrongly program some clock domains
|
||||
even when the Powerdomain is in ON state.
|
||||
|
||||
Signed-off-by: Rajendra Nayak <rnayak@ti.com>
|
||||
---
|
||||
arch/arm/mach-omap2/pm.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c
|
||||
index 49486f5..d48813f 100644
|
||||
--- a/arch/arm/mach-omap2/pm.c
|
||||
+++ b/arch/arm/mach-omap2/pm.c
|
||||
@@ -106,7 +106,7 @@ static void omap2_init_processor_devices(void)
|
||||
int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 state)
|
||||
{
|
||||
u32 cur_state;
|
||||
- int sleep_switch = 0;
|
||||
+ int sleep_switch = -1;
|
||||
int ret = 0;
|
||||
|
||||
if (pwrdm == NULL || IS_ERR(pwrdm))
|
||||
--
|
||||
1.6.6.1
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
From 59bfd35cfef1c0b9c2c078082a47f957c27fa2fd Mon Sep 17 00:00:00 2001
|
||||
From: Rajendra Nayak <rnayak@ti.com>
|
||||
Date: Tue, 5 Apr 2011 15:22:48 +0530
|
||||
Subject: [PATCH 4/6] OMAP2+: PM: idle clkdms only if already in idle
|
||||
|
||||
The omap_set_pwrdm_state function forces clockdomains
|
||||
to idle, without checking the existing idle state
|
||||
programmed, instead based solely on the HW capability
|
||||
of the clockdomain to support idle.
|
||||
This is wrong and the clockdomains should be idled
|
||||
post a state_switch *only* if idle transitions on the
|
||||
clockdomain were already enabled.
|
||||
|
||||
Signed-off-by: Rajendra Nayak <rnayak@ti.com>
|
||||
---
|
||||
arch/arm/mach-omap2/pm.c | 4 +++-
|
||||
1 files changed, 3 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c
|
||||
index d48813f..840b0e1 100644
|
||||
--- a/arch/arm/mach-omap2/pm.c
|
||||
+++ b/arch/arm/mach-omap2/pm.c
|
||||
@@ -108,6 +108,7 @@ int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 state)
|
||||
u32 cur_state;
|
||||
int sleep_switch = -1;
|
||||
int ret = 0;
|
||||
+ int hwsup = 0;
|
||||
|
||||
if (pwrdm == NULL || IS_ERR(pwrdm))
|
||||
return -EINVAL;
|
||||
@@ -127,6 +128,7 @@ int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 state)
|
||||
(pwrdm->flags & PWRDM_HAS_LOWPOWERSTATECHANGE)) {
|
||||
sleep_switch = LOWPOWERSTATE_SWITCH;
|
||||
} else {
|
||||
+ hwsup = clkdm_is_idle(pwrdm->pwrdm_clkdms[0]);
|
||||
clkdm_wakeup(pwrdm->pwrdm_clkdms[0]);
|
||||
pwrdm_wait_transition(pwrdm);
|
||||
sleep_switch = FORCEWAKEUP_SWITCH;
|
||||
@@ -142,7 +144,7 @@ int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 state)
|
||||
|
||||
switch (sleep_switch) {
|
||||
case FORCEWAKEUP_SWITCH:
|
||||
- if (pwrdm->pwrdm_clkdms[0]->flags & CLKDM_CAN_ENABLE_AUTO)
|
||||
+ if (hwsup)
|
||||
clkdm_allow_idle(pwrdm->pwrdm_clkdms[0]);
|
||||
else
|
||||
clkdm_sleep(pwrdm->pwrdm_clkdms[0]);
|
||||
--
|
||||
1.6.6.1
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
From 8bde567522cb85c91f49858a9026d3ec24283331 Mon Sep 17 00:00:00 2001
|
||||
From: Rajendra Nayak <rnayak@ti.com>
|
||||
Date: Tue, 29 Mar 2011 22:37:43 +0530
|
||||
Subject: [PATCH 5/6] OMAP2+: hwmod: Follow the recomended PRCM sequence
|
||||
|
||||
Follow the recomended PRCM sequence.
|
||||
This still does not take care of Optional clocks.
|
||||
|
||||
Signed-off-by: Rajendra Nayak <rnayak@ti.com>
|
||||
---
|
||||
arch/arm/mach-omap2/omap_hwmod.c | 9 ++++++++-
|
||||
1 files changed, 8 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
|
||||
index e034294..fc0db0c 100644
|
||||
--- a/arch/arm/mach-omap2/omap_hwmod.c
|
||||
+++ b/arch/arm/mach-omap2/omap_hwmod.c
|
||||
@@ -1223,6 +1223,7 @@ static int _reset(struct omap_hwmod *oh)
|
||||
static int _enable(struct omap_hwmod *oh)
|
||||
{
|
||||
int r;
|
||||
+ int hwsup = 0;
|
||||
|
||||
if (oh->_state != _HWMOD_STATE_INITIALIZED &&
|
||||
oh->_state != _HWMOD_STATE_IDLE &&
|
||||
@@ -1250,10 +1251,16 @@ static int _enable(struct omap_hwmod *oh)
|
||||
omap_hwmod_mux(oh->mux, _HWMOD_STATE_ENABLED);
|
||||
|
||||
_add_initiator_dep(oh, mpu_oh);
|
||||
+ if (oh->_clk && oh->_clk->clkdm) {
|
||||
+ hwsup = clkdm_is_idle(oh->_clk->clkdm);
|
||||
+ clkdm_wakeup(oh->_clk->clkdm);
|
||||
+ }
|
||||
_enable_clocks(oh);
|
||||
-
|
||||
r = _wait_target_ready(oh);
|
||||
if (!r) {
|
||||
+ if (oh->_clk && oh->_clk->clkdm && hwsup)
|
||||
+ clkdm_allow_idle(oh->_clk->clkdm);
|
||||
+
|
||||
oh->_state = _HWMOD_STATE_ENABLED;
|
||||
|
||||
/* Access the sysconfig only if the target is ready */
|
||||
--
|
||||
1.6.6.1
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
From 06ef3c33307622a7c4ab0f7cbfaf0163a1be5a81 Mon Sep 17 00:00:00 2001
|
||||
From: Rajendra Nayak <rnayak@ti.com>
|
||||
Date: Tue, 2 Mar 2010 17:25:30 +0530
|
||||
Subject: [PATCH 6/6] OMAP: Serial: Check wk_st only if present
|
||||
|
||||
Uart on the resume path tries to read wk_st registers, even
|
||||
on architectures were its not present/populated.
|
||||
This patch fixes the issue.
|
||||
|
||||
Signed-off-by: Rajendra Nayak <rnayak@ti.com>
|
||||
---
|
||||
arch/arm/mach-omap2/serial.c | 5 +++--
|
||||
1 files changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c
|
||||
index 1ac361b..a0046ce 100644
|
||||
--- a/arch/arm/mach-omap2/serial.c
|
||||
+++ b/arch/arm/mach-omap2/serial.c
|
||||
@@ -418,8 +418,9 @@ void omap_uart_resume_idle(int num)
|
||||
}
|
||||
|
||||
/* Check for normal UART wakeup */
|
||||
- if (__raw_readl(uart->wk_st) & uart->wk_mask)
|
||||
- omap_uart_block_sleep(uart);
|
||||
+ if (uart->wk_st && uart->wk_mask)
|
||||
+ if (__raw_readl(uart->wk_st) & uart->wk_mask)
|
||||
+ omap_uart_block_sleep(uart);
|
||||
return;
|
||||
}
|
||||
}
|
||||
--
|
||||
1.6.6.1
|
||||
|
||||
@@ -7,7 +7,7 @@ COMPATIBLE_MACHINE = "(beagleboard)"
|
||||
|
||||
# The main PR is now using MACHINE_KERNEL_PR, for omap3 see conf/machine/include/omap3.inc
|
||||
SRCREV_pn-${PN} = "v2.6.39"
|
||||
MACHINE_KERNEL_PR_append = "b"
|
||||
MACHINE_KERNEL_PR_append = "c"
|
||||
|
||||
FILESPATHPKG_prepend = "linux-omap-2.6.39:"
|
||||
|
||||
@@ -81,6 +81,13 @@ SRC_URI_append = " \
|
||||
file://pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0004-OMAP2-cpufreq-use-clk_init_cpufreq_table-if-OPPs-not.patch \
|
||||
file://pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0005-OMAP2-cpufreq-use-cpufreq_frequency_table_target.patch \
|
||||
file://pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0006-OMAP2-cpufreq-fix-freq_table-leak.patch \
|
||||
\
|
||||
file://pm/linux-omap-2.6.39-ti-pm-wip-cpuidle/0001-OMAP2-clockdomain-Add-an-api-to-read-idle-mode.patch \
|
||||
file://pm/linux-omap-2.6.39-ti-pm-wip-cpuidle/0002-OMAP2-clockdomain-Add-SoC-support-for-clkdm_is_idle.patch \
|
||||
file://pm/linux-omap-2.6.39-ti-pm-wip-cpuidle/0003-OMAP2-PM-Initialise-sleep_switch-to-a-non-valid-valu.patch \
|
||||
file://pm/linux-omap-2.6.39-ti-pm-wip-cpuidle/0004-OMAP2-PM-idle-clkdms-only-if-already-in-idle.patch \
|
||||
file://pm/linux-omap-2.6.39-ti-pm-wip-cpuidle/0005-OMAP2-hwmod-Follow-the-recomended-PRCM-sequence.patch \
|
||||
file://pm/linux-omap-2.6.39-ti-pm-wip-cpuidle/0006-OMAP-Serial-Check-wk_st-only-if-present.patch \
|
||||
"
|
||||
|
||||
SRC_URI_append_beagleboard = " file://logo_linux_clut224.ppm \
|
||||
|
||||
Reference in New Issue
Block a user