forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'tegra/soc' into next/cleanup2
Conflicts: arch/arm/mach-tegra/Makefile Signed-off-by: Olof Johansson <[email protected]>
- Loading branch information
Showing
14 changed files
with
3,456 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
/* | ||
* arch/arm/mach-tegra/cpuidle.c | ||
* | ||
* CPU idle driver for Tegra CPUs | ||
* | ||
* Copyright (c) 2010-2012, NVIDIA Corporation. | ||
* Copyright (c) 2011 Google, Inc. | ||
* Author: Colin Cross <[email protected]> | ||
* Gary King <[email protected]> | ||
* | ||
* Rework for 3.3 by Peter De Schrijver <[email protected]> | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation; either version 2 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, but WITHOUT | ||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
* more details. | ||
*/ | ||
|
||
#include <linux/kernel.h> | ||
#include <linux/module.h> | ||
#include <linux/cpu.h> | ||
#include <linux/cpuidle.h> | ||
#include <linux/hrtimer.h> | ||
|
||
#include <mach/iomap.h> | ||
|
||
extern void tegra_cpu_wfi(void); | ||
|
||
static int tegra_idle_enter_lp3(struct cpuidle_device *dev, | ||
struct cpuidle_driver *drv, int index); | ||
|
||
struct cpuidle_driver tegra_idle_driver = { | ||
.name = "tegra_idle", | ||
.owner = THIS_MODULE, | ||
.state_count = 1, | ||
.states = { | ||
[0] = { | ||
.enter = tegra_idle_enter_lp3, | ||
.exit_latency = 10, | ||
.target_residency = 10, | ||
.power_usage = 600, | ||
.flags = CPUIDLE_FLAG_TIME_VALID, | ||
.name = "LP3", | ||
.desc = "CPU flow-controlled", | ||
}, | ||
}, | ||
}; | ||
|
||
static DEFINE_PER_CPU(struct cpuidle_device, tegra_idle_device); | ||
|
||
static int tegra_idle_enter_lp3(struct cpuidle_device *dev, | ||
struct cpuidle_driver *drv, int index) | ||
{ | ||
ktime_t enter, exit; | ||
s64 us; | ||
|
||
local_irq_disable(); | ||
local_fiq_disable(); | ||
|
||
enter = ktime_get(); | ||
|
||
tegra_cpu_wfi(); | ||
|
||
exit = ktime_sub(ktime_get(), enter); | ||
us = ktime_to_us(exit); | ||
|
||
local_fiq_enable(); | ||
local_irq_enable(); | ||
|
||
dev->last_residency = us; | ||
|
||
return index; | ||
} | ||
|
||
static int __init tegra_cpuidle_init(void) | ||
{ | ||
int ret; | ||
unsigned int cpu; | ||
struct cpuidle_device *dev; | ||
struct cpuidle_driver *drv = &tegra_idle_driver; | ||
|
||
ret = cpuidle_register_driver(&tegra_idle_driver); | ||
if (ret) { | ||
pr_err("CPUidle driver registration failed\n"); | ||
return ret; | ||
} | ||
|
||
for_each_possible_cpu(cpu) { | ||
dev = &per_cpu(tegra_idle_device, cpu); | ||
dev->cpu = cpu; | ||
|
||
dev->state_count = drv->state_count; | ||
ret = cpuidle_register_device(dev); | ||
if (ret) { | ||
pr_err("CPU%u: CPUidle device registration failed\n", | ||
cpu); | ||
return ret; | ||
} | ||
} | ||
return 0; | ||
} | ||
device_initcall(tegra_cpuidle_init); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
/* | ||
* arch/arm/mach-tegra/flowctrl.h | ||
* | ||
* functions and macros to control the flowcontroller | ||
* | ||
* Copyright (c) 2010-2012, NVIDIA Corporation. All rights reserved. | ||
* | ||
* This program is free software; you can redistribute it and/or modify it | ||
* under the terms and conditions of the GNU General Public License, | ||
* version 2, as published by the Free Software Foundation. | ||
* | ||
* This program is distributed in the hope that it will be useful, but WITHOUT | ||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
* more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
#ifndef __MACH_TEGRA_FLOWCTRL_H | ||
#define __MACH_TEGRA_FLOWCTRL_H | ||
|
||
#define FLOW_CTRL_HALT_CPU0_EVENTS 0x0 | ||
#define FLOW_CTRL_WAITEVENT (2 << 29) | ||
#define FLOW_CTRL_WAIT_FOR_INTERRUPT (4 << 29) | ||
#define FLOW_CTRL_JTAG_RESUME (1 << 28) | ||
#define FLOW_CTRL_HALT_CPU_IRQ (1 << 10) | ||
#define FLOW_CTRL_HALT_CPU_FIQ (1 << 8) | ||
#define FLOW_CTRL_CPU0_CSR 0x8 | ||
#define FLOW_CTRL_CSR_INTR_FLAG (1 << 15) | ||
#define FLOW_CTRL_CSR_EVENT_FLAG (1 << 14) | ||
#define FLOW_CTRL_CSR_ENABLE (1 << 0) | ||
#define FLOW_CTRL_HALT_CPU1_EVENTS 0x14 | ||
#define FLOW_CTRL_CPU1_CSR 0x18 | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.