Misc. OMAP PM-related fixes for v3.7-rc
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJQhxRxAAoJEFk3GJrT+8ZlR+8P/07C6AUn/f2cPZkB/6c96Uv2 nBJv3HTsrQS3A5clfJz0VH3kdEo9nC2bj80KsPUbBMO1r+EUQMPEa/cyQ8bhFGOt SlhsP4Wj4wpmn9OEGVMMvxS1J8a86tQPLnATltp7+g2m87FNlzNulJau+6WsgnYh Y8nOo0vXdKEer0l6hS2C36oq4Chm1f7gWtmkhxUWseE9G8AfhdWl8XElIUPsPv4a sSCBAXytNUi3GRGD6CZBgb0C3PIBfS5EywjCoSHrp0rOpAQhg9oov11HtO1okaM3 OLbSgIvdzZ4mXZZRuayYsUSydr35tctaPKY7tolE8AhOP2/n3wkCZ4lNNZCNnEoF yoJg8oLTe6K8eVdoEHH6HaBcheQj7l4yw6gX75Yqg9wRt+g9S9C36a2VHDSEsRIS 1dnPbCBPEV/SdhlE0hFZ0FdWQFMLY1taOQhFOPJ8eRqjO2p1qunzUlQ9PMe+0goj B2Et56Cm3InDDD4cxcK+tnmAp+WALzSREWYX4dYZVy2y1rg0dzk51ms7aiJAUOwU CZQtWq4nchxTC6jGD4KZ7GAucO+SZqBKUeO+m2xQSGrFY2BFu3k4hSYe+F/zsPBG i7HQTjIZfb+AXHZh1lu5uW6qr9j7VMo1lemKEjda7c0rWac3tQdywbo77Uh4DbKr LrQQL30sb5kQQ+xcMiR4 =toVu -----END PGP SIGNATURE----- Merge tag 'for_3.7-rc3-fixes-pm' of git://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-omap-pm into omap-for-v3.7-rc2/fixes Misc. OMAP PM-related fixes for v3.7-rc
This commit is contained in:
commit
126c414a22
|
@ -24,6 +24,7 @@
|
|||
#include <linux/input.h>
|
||||
#include <linux/gpio_keys.h>
|
||||
#include <linux/opp.h>
|
||||
#include <linux/cpu.h>
|
||||
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
|
@ -444,27 +445,31 @@ static struct omap_board_mux board_mux[] __initdata = {
|
|||
};
|
||||
#endif
|
||||
|
||||
static void __init beagle_opp_init(void)
|
||||
static int __init beagle_opp_init(void)
|
||||
{
|
||||
int r = 0;
|
||||
|
||||
/* Initialize the omap3 opp table */
|
||||
if (omap3_opp_init()) {
|
||||
if (!machine_is_omap3_beagle())
|
||||
return 0;
|
||||
|
||||
/* Initialize the omap3 opp table if not already created. */
|
||||
r = omap3_opp_init();
|
||||
if (IS_ERR_VALUE(r) && (r != -EEXIST)) {
|
||||
pr_err("%s: opp default init failed\n", __func__);
|
||||
return;
|
||||
return r;
|
||||
}
|
||||
|
||||
/* Custom OPP enabled for all xM versions */
|
||||
if (cpu_is_omap3630()) {
|
||||
struct device *mpu_dev, *iva_dev;
|
||||
|
||||
mpu_dev = omap_device_get_by_hwmod_name("mpu");
|
||||
mpu_dev = get_cpu_device(0);
|
||||
iva_dev = omap_device_get_by_hwmod_name("iva");
|
||||
|
||||
if (IS_ERR(mpu_dev) || IS_ERR(iva_dev)) {
|
||||
pr_err("%s: Aiee.. no mpu/dsp devices? %p %p\n",
|
||||
__func__, mpu_dev, iva_dev);
|
||||
return;
|
||||
return -ENODEV;
|
||||
}
|
||||
/* Enable MPU 1GHz and lower opps */
|
||||
r = opp_enable(mpu_dev, 800000000);
|
||||
|
@ -484,8 +489,9 @@ static void __init beagle_opp_init(void)
|
|||
opp_disable(iva_dev, 660000000);
|
||||
}
|
||||
}
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
device_initcall(beagle_opp_init);
|
||||
|
||||
static void __init omap3_beagle_init(void)
|
||||
{
|
||||
|
@ -522,8 +528,6 @@ static void __init omap3_beagle_init(void)
|
|||
/* Ensure SDRC pins are mux'd for self-refresh */
|
||||
omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);
|
||||
omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT);
|
||||
|
||||
beagle_opp_init();
|
||||
}
|
||||
|
||||
MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
|
||||
|
|
|
@ -91,6 +91,7 @@ extern void omap3_save_scratchpad_contents(void);
|
|||
|
||||
#define PM_RTA_ERRATUM_i608 (1 << 0)
|
||||
#define PM_SDRC_WAKEUP_ERRATUM_i583 (1 << 1)
|
||||
#define PM_PER_MEMORIES_ERRATUM_i582 (1 << 2)
|
||||
|
||||
#if defined(CONFIG_PM) && defined(CONFIG_ARCH_OMAP3)
|
||||
extern u16 pm34xx_errata;
|
||||
|
|
|
@ -652,14 +652,17 @@ static void __init pm_errata_configure(void)
|
|||
/* Enable the l2 cache toggling in sleep logic */
|
||||
enable_omap3630_toggle_l2_on_restore();
|
||||
if (omap_rev() < OMAP3630_REV_ES1_2)
|
||||
pm34xx_errata |= PM_SDRC_WAKEUP_ERRATUM_i583;
|
||||
pm34xx_errata |= (PM_SDRC_WAKEUP_ERRATUM_i583 |
|
||||
PM_PER_MEMORIES_ERRATUM_i582);
|
||||
} else if (cpu_is_omap34xx()) {
|
||||
pm34xx_errata |= PM_PER_MEMORIES_ERRATUM_i582;
|
||||
}
|
||||
}
|
||||
|
||||
int __init omap3_pm_init(void)
|
||||
{
|
||||
struct power_state *pwrst, *tmp;
|
||||
struct clockdomain *neon_clkdm, *mpu_clkdm;
|
||||
struct clockdomain *neon_clkdm, *mpu_clkdm, *per_clkdm, *wkup_clkdm;
|
||||
int ret;
|
||||
|
||||
if (!omap3_has_io_chain_ctrl())
|
||||
|
@ -711,6 +714,8 @@ int __init omap3_pm_init(void)
|
|||
|
||||
neon_clkdm = clkdm_lookup("neon_clkdm");
|
||||
mpu_clkdm = clkdm_lookup("mpu_clkdm");
|
||||
per_clkdm = clkdm_lookup("per_clkdm");
|
||||
wkup_clkdm = clkdm_lookup("wkup_clkdm");
|
||||
|
||||
#ifdef CONFIG_SUSPEND
|
||||
omap_pm_suspend = omap3_pm_suspend;
|
||||
|
@ -727,6 +732,27 @@ int __init omap3_pm_init(void)
|
|||
if (IS_PM34XX_ERRATUM(PM_RTA_ERRATUM_i608))
|
||||
omap3630_ctrl_disable_rta();
|
||||
|
||||
/*
|
||||
* The UART3/4 FIFO and the sidetone memory in McBSP2/3 are
|
||||
* not correctly reset when the PER powerdomain comes back
|
||||
* from OFF or OSWR when the CORE powerdomain is kept active.
|
||||
* See OMAP36xx Erratum i582 "PER Domain reset issue after
|
||||
* Domain-OFF/OSWR Wakeup". This wakeup dependency is not a
|
||||
* complete workaround. The kernel must also prevent the PER
|
||||
* powerdomain from going to OSWR/OFF while the CORE
|
||||
* powerdomain is not going to OSWR/OFF. And if PER last
|
||||
* power state was off while CORE last power state was ON, the
|
||||
* UART3/4 and McBSP2/3 SIDETONE devices need to run a
|
||||
* self-test using their loopback tests; if that fails, those
|
||||
* devices are unusable until the PER/CORE can complete a transition
|
||||
* from ON to OSWR/OFF and then back to ON.
|
||||
*
|
||||
* XXX Technically this workaround is only needed if off-mode
|
||||
* or OSWR is enabled.
|
||||
*/
|
||||
if (IS_PM34XX_ERRATUM(PM_PER_MEMORIES_ERRATUM_i582))
|
||||
clkdm_add_wkdep(per_clkdm, wkup_clkdm);
|
||||
|
||||
clkdm_add_wkdep(neon_clkdm, mpu_clkdm);
|
||||
if (omap_type() != OMAP2_DEVICE_TYPE_GP) {
|
||||
omap3_secure_ram_storage =
|
||||
|
|
|
@ -329,6 +329,11 @@ void __init omap_serial_init_port(struct omap_board_data *bdata,
|
|||
|
||||
oh->mux = omap_hwmod_mux_init(bdata->pads, bdata->pads_cnt);
|
||||
|
||||
if (console_uart_id == bdata->id) {
|
||||
omap_device_enable(pdev);
|
||||
pm_runtime_set_active(&pdev->dev);
|
||||
}
|
||||
|
||||
oh->dev_attr = uart;
|
||||
|
||||
if (((cpu_is_omap34xx() || cpu_is_omap44xx()) && bdata->pads)
|
||||
|
|
Loading…
Reference in New Issue