diff options
author | Koen Kooi <koen@dominion.thruhere.net> | 2011-05-21 20:31:36 +0200 |
---|---|---|
committer | Koen Kooi <koen@dominion.thruhere.net> | 2011-05-23 09:34:57 +0200 |
commit | d697ad0981c5e1d44ab7dd071e61c1d70e0bfe72 (patch) | |
tree | 64b02849035cc5dbd73f273859d7ca13e879d1cb /recipes-kernel | |
parent | 1735237550d85da337ea57cb5d6be9ccc8c0355c (diff) | |
download | meta-ti-d697ad0981c5e1d44ab7dd071e61c1d70e0bfe72.tar.gz |
linux-omap 2.6.39: add cpufreq support and tweak beagleboard expansionboard patches
make it the default for beagleboard
Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
Diffstat (limited to 'recipes-kernel')
61 files changed, 3326 insertions, 108 deletions
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/beagle/0001-OMAP3-beagle-add-support-for-beagleboard-xM-revision.patch b/recipes-kernel/linux/linux-omap-2.6.39/beagle/0029-OMAP3-beagle-add-support-for-beagleboard-xM-revision.patch index c7b6230b..e2baa0dd 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/beagle/0001-OMAP3-beagle-add-support-for-beagleboard-xM-revision.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/beagle/0029-OMAP3-beagle-add-support-for-beagleboard-xM-revision.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From 6597e99e0b74076530e34608e2d9a7b86a694b8e Mon Sep 17 00:00:00 2001 | 1 | From 6597e99e0b74076530e34608e2d9a7b86a694b8e Mon Sep 17 00:00:00 2001 |
2 | From: Koen Kooi <koen@dominion.thruhere.net> | 2 | From: Koen Kooi <koen@dominion.thruhere.net> |
3 | Date: Fri, 20 May 2011 12:48:37 +0200 | 3 | Date: Fri, 20 May 2011 12:48:37 +0200 |
4 | Subject: [PATCH 1/2] OMAP3: beagle: add support for beagleboard xM revision C | 4 | Subject: [PATCH 29/59] OMAP3: beagle: add support for beagleboard xM revision C |
5 | 5 | ||
6 | The USB enable GPIO has been inverted and the USER button moved. | 6 | The USB enable GPIO has been inverted and the USER button moved. |
7 | 7 | ||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/beagle/0002-OMAP3-beagle-add-support-for-expansionboards.patch b/recipes-kernel/linux/linux-omap-2.6.39/beagle/0030-OMAP3-beagle-add-support-for-expansionboards.patch index 68f318b8..3dff19cf 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/beagle/0002-OMAP3-beagle-add-support-for-expansionboards.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/beagle/0030-OMAP3-beagle-add-support-for-expansionboards.patch | |||
@@ -1,15 +1,15 @@ | |||
1 | From 70b4b60b198137ca8aebd577142ea3bb6c273a55 Mon Sep 17 00:00:00 2001 | 1 | From d44d47891068bff220ef5c064ec406f8ed385758 Mon Sep 17 00:00:00 2001 |
2 | From: Koen Kooi <koen@dominion.thruhere.net> | 2 | From: Koen Kooi <koen@dominion.thruhere.net> |
3 | Date: Fri, 20 May 2011 13:06:24 +0200 | 3 | Date: Fri, 20 May 2011 13:06:24 +0200 |
4 | Subject: [PATCH 2/2] OMAP3: beagle: add support for expansionboards | 4 | Subject: [PATCH 30/59] OMAP3: beagle: add support for expansionboards |
5 | 5 | ||
6 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | 6 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> |
7 | --- | 7 | --- |
8 | arch/arm/mach-omap2/board-omap3beagle.c | 267 ++++++++++++++++++++++++++++++- | 8 | arch/arm/mach-omap2/board-omap3beagle.c | 272 ++++++++++++++++++++++++++++++- |
9 | 1 files changed, 264 insertions(+), 3 deletions(-) | 9 | 1 files changed, 269 insertions(+), 3 deletions(-) |
10 | 10 | ||
11 | diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c | 11 | diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c |
12 | index 1eb1e8e..40e54f2 100644 | 12 | index 1eb1e8e..70ed6f3 100644 |
13 | --- a/arch/arm/mach-omap2/board-omap3beagle.c | 13 | --- a/arch/arm/mach-omap2/board-omap3beagle.c |
14 | +++ b/arch/arm/mach-omap2/board-omap3beagle.c | 14 | +++ b/arch/arm/mach-omap2/board-omap3beagle.c |
15 | @@ -21,6 +21,7 @@ | 15 | @@ -21,6 +21,7 @@ |
@@ -20,7 +20,7 @@ index 1eb1e8e..40e54f2 100644 | |||
20 | #include <linux/input.h> | 20 | #include <linux/input.h> |
21 | #include <linux/gpio_keys.h> | 21 | #include <linux/gpio_keys.h> |
22 | #include <linux/opp.h> | 22 | #include <linux/opp.h> |
23 | @@ -153,6 +154,162 @@ fail0: | 23 | @@ -153,6 +154,167 @@ fail0: |
24 | return; | 24 | return; |
25 | } | 25 | } |
26 | 26 | ||
@@ -59,19 +59,24 @@ index 1eb1e8e..40e54f2 100644 | |||
59 | + .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD, | 59 | + .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD, |
60 | + .gpio_wp = -EINVAL, | 60 | + .gpio_wp = -EINVAL, |
61 | + .gpio_cd = -EINVAL, | 61 | + .gpio_cd = -EINVAL, |
62 | + .ocr_mask = MMC_VDD_165_195, | ||
62 | + .nonremovable = true, | 63 | + .nonremovable = true, |
63 | + }, | 64 | + }, |
64 | + {} /* Terminator */ | 65 | + {} /* Terminator */ |
65 | + }; | 66 | + }; |
66 | + | 67 | + |
67 | +static struct regulator_consumer_supply beagle_vmmc2_supply = { | 68 | +static struct regulator_consumer_supply beagle_vmmc2_supply = |
68 | + .supply = "vmmc", | 69 | + REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1"); |
69 | + .dev_name = "mmci-omap-hs.1", | ||
70 | +}; | ||
71 | + | 70 | + |
72 | +static struct regulator_init_data beagle_vmmc2 = { | 71 | +static struct regulator_init_data beagle_vmmc2 = { |
73 | + .constraints = { | 72 | + .constraints = { |
74 | + .valid_ops_mask = REGULATOR_CHANGE_STATUS, | 73 | + .min_uV = 1850000, |
74 | + .max_uV = 1850000, | ||
75 | + .apply_uV = true, | ||
76 | + .valid_modes_mask = REGULATOR_MODE_NORMAL | ||
77 | + | REGULATOR_MODE_STANDBY, | ||
78 | + .valid_ops_mask = REGULATOR_CHANGE_MODE | ||
79 | + | REGULATOR_CHANGE_STATUS, | ||
75 | + }, | 80 | + }, |
76 | + .num_consumer_supplies = 1, | 81 | + .num_consumer_supplies = 1, |
77 | + .consumer_supplies = &beagle_vmmc2_supply, | 82 | + .consumer_supplies = &beagle_vmmc2_supply, |
@@ -183,7 +188,7 @@ index 1eb1e8e..40e54f2 100644 | |||
183 | static struct mtd_partition omap3beagle_nand_partitions[] = { | 188 | static struct mtd_partition omap3beagle_nand_partitions[] = { |
184 | /* All the partition sizes are listed in terms of NAND block size */ | 189 | /* All the partition sizes are listed in terms of NAND block size */ |
185 | { | 190 | { |
186 | @@ -271,6 +428,12 @@ static struct omap2_hsmmc_info mmc[] = { | 191 | @@ -271,6 +433,12 @@ static struct omap2_hsmmc_info mmc[] = { |
187 | .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, | 192 | .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, |
188 | .gpio_wp = 29, | 193 | .gpio_wp = 29, |
189 | }, | 194 | }, |
@@ -196,7 +201,7 @@ index 1eb1e8e..40e54f2 100644 | |||
196 | {} /* Terminator */ | 201 | {} /* Terminator */ |
197 | }; | 202 | }; |
198 | 203 | ||
199 | @@ -300,11 +463,25 @@ static int beagle_twl_gpio_setup(struct device *dev, | 204 | @@ -300,11 +468,25 @@ static int beagle_twl_gpio_setup(struct device *dev, |
200 | } | 205 | } |
201 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ | 206 | /* gpio + 0 is "mmc0_cd" (input/IRQ) */ |
202 | mmc[0].gpio_cd = gpio + 0; | 207 | mmc[0].gpio_cd = gpio + 0; |
@@ -222,7 +227,7 @@ index 1eb1e8e..40e54f2 100644 | |||
222 | 227 | ||
223 | /* REVISIT: need ehci-omap hooks for external VBUS | 228 | /* REVISIT: need ehci-omap hooks for external VBUS |
224 | * power switch and overcurrent detect | 229 | * power switch and overcurrent detect |
225 | @@ -464,7 +641,7 @@ static struct twl4030_platform_data beagle_twldata = { | 230 | @@ -464,7 +646,7 @@ static struct twl4030_platform_data beagle_twldata = { |
226 | .vpll2 = &beagle_vpll2, | 231 | .vpll2 = &beagle_vpll2, |
227 | }; | 232 | }; |
228 | 233 | ||
@@ -231,7 +236,7 @@ index 1eb1e8e..40e54f2 100644 | |||
231 | { | 236 | { |
232 | I2C_BOARD_INFO("twl4030", 0x48), | 237 | I2C_BOARD_INFO("twl4030", 0x48), |
233 | .flags = I2C_CLIENT_WAKE, | 238 | .flags = I2C_CLIENT_WAKE, |
234 | @@ -479,10 +656,24 @@ static struct i2c_board_info __initdata beagle_i2c_eeprom[] = { | 239 | @@ -479,10 +661,24 @@ static struct i2c_board_info __initdata beagle_i2c_eeprom[] = { |
235 | }, | 240 | }, |
236 | }; | 241 | }; |
237 | 242 | ||
@@ -258,7 +263,7 @@ index 1eb1e8e..40e54f2 100644 | |||
258 | /* Bus 3 is attached to the DVI port where devices like the pico DLP | 263 | /* Bus 3 is attached to the DVI port where devices like the pico DLP |
259 | * projector don't work reliably with 400kHz */ | 264 | * projector don't work reliably with 400kHz */ |
260 | omap_register_i2c_bus(3, 100, beagle_i2c_eeprom, ARRAY_SIZE(beagle_i2c_eeprom)); | 265 | omap_register_i2c_bus(3, 100, beagle_i2c_eeprom, ARRAY_SIZE(beagle_i2c_eeprom)); |
261 | @@ -625,6 +816,15 @@ static struct omap_musb_board_data musb_board_data = { | 266 | @@ -625,6 +821,15 @@ static struct omap_musb_board_data musb_board_data = { |
262 | .power = 100, | 267 | .power = 100, |
263 | }; | 268 | }; |
264 | 269 | ||
@@ -274,7 +279,7 @@ index 1eb1e8e..40e54f2 100644 | |||
274 | static void __init beagle_opp_init(void) | 279 | static void __init beagle_opp_init(void) |
275 | { | 280 | { |
276 | int r = 0; | 281 | int r = 0; |
277 | @@ -691,6 +891,65 @@ static void __init omap3_beagle_init(void) | 282 | @@ -691,6 +896,65 @@ static void __init omap3_beagle_init(void) |
278 | /* REVISIT leave DVI powered down until it's needed ... */ | 283 | /* REVISIT leave DVI powered down until it's needed ... */ |
279 | gpio_direction_output(170, true); | 284 | gpio_direction_output(170, true); |
280 | 285 | ||
@@ -340,7 +345,7 @@ index 1eb1e8e..40e54f2 100644 | |||
340 | usb_musb_init(&musb_board_data); | 345 | usb_musb_init(&musb_board_data); |
341 | usbhs_init(&usbhs_bdata); | 346 | usbhs_init(&usbhs_bdata); |
342 | omap3beagle_flash_init(); | 347 | omap3beagle_flash_init(); |
343 | @@ -703,6 +962,8 @@ static void __init omap3_beagle_init(void) | 348 | @@ -703,6 +967,8 @@ static void __init omap3_beagle_init(void) |
344 | beagle_opp_init(); | 349 | beagle_opp_init(); |
345 | } | 350 | } |
346 | 351 | ||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/beagle/0031-OMAP3-beagle-add-MADC-support.patch b/recipes-kernel/linux/linux-omap-2.6.39/beagle/0031-OMAP3-beagle-add-MADC-support.patch new file mode 100644 index 00000000..9ec063d4 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/beagle/0031-OMAP3-beagle-add-MADC-support.patch | |||
@@ -0,0 +1,36 @@ | |||
1 | From 507e5855dc5a3d8247e5d5c41db4db18af41c641 Mon Sep 17 00:00:00 2001 | ||
2 | From: Koen Kooi <koen@dominion.thruhere.net> | ||
3 | Date: Sat, 21 May 2011 16:18:30 +0200 | ||
4 | Subject: [PATCH 31/59] OMAP3: beagle: add MADC support | ||
5 | |||
6 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
7 | --- | ||
8 | arch/arm/mach-omap2/board-omap3beagle.c | 5 +++++ | ||
9 | 1 files changed, 5 insertions(+), 0 deletions(-) | ||
10 | |||
11 | diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c | ||
12 | index 70ed6f3..aa7849a 100644 | ||
13 | --- a/arch/arm/mach-omap2/board-omap3beagle.c | ||
14 | +++ b/arch/arm/mach-omap2/board-omap3beagle.c | ||
15 | @@ -632,6 +632,10 @@ static struct twl4030_codec_data beagle_codec_data = { | ||
16 | .audio = &beagle_audio_data, | ||
17 | }; | ||
18 | |||
19 | +static struct twl4030_madc_platform_data beagle_madc_data = { | ||
20 | + .irq_line = 1, | ||
21 | +}; | ||
22 | + | ||
23 | static struct twl4030_platform_data beagle_twldata = { | ||
24 | .irq_base = TWL4030_IRQ_BASE, | ||
25 | .irq_end = TWL4030_IRQ_END, | ||
26 | @@ -640,6 +644,7 @@ static struct twl4030_platform_data beagle_twldata = { | ||
27 | .usb = &beagle_usb_data, | ||
28 | .gpio = &beagle_gpio_data, | ||
29 | .codec = &beagle_codec_data, | ||
30 | + .madc = &beagle_madc_data, | ||
31 | .vmmc1 = &beagle_vmmc1, | ||
32 | .vsim = &beagle_vsim, | ||
33 | .vdac = &beagle_vdac, | ||
34 | -- | ||
35 | 1.6.6.1 | ||
36 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/beagleboard/defconfig b/recipes-kernel/linux/linux-omap-2.6.39/beagleboard/defconfig index 9e81a057..e2207e5f 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/beagleboard/defconfig +++ b/recipes-kernel/linux/linux-omap-2.6.39/beagleboard/defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux/arm 2.6.39 Kernel Configuration | 3 | # Linux/arm 2.6.39 Kernel Configuration |
4 | # Fri May 20 13:11:13 2011 | 4 | # Sat May 21 19:52:37 2011 |
5 | # | 5 | # |
6 | CONFIG_ARM=y | 6 | CONFIG_ARM=y |
7 | CONFIG_HAVE_PWM=y | 7 | CONFIG_HAVE_PWM=y |
@@ -49,7 +49,8 @@ CONFIG_KERNEL_GZIP=y | |||
49 | CONFIG_SWAP=y | 49 | CONFIG_SWAP=y |
50 | CONFIG_SYSVIPC=y | 50 | CONFIG_SYSVIPC=y |
51 | CONFIG_SYSVIPC_SYSCTL=y | 51 | CONFIG_SYSVIPC_SYSCTL=y |
52 | # CONFIG_POSIX_MQUEUE is not set | 52 | CONFIG_POSIX_MQUEUE=y |
53 | CONFIG_POSIX_MQUEUE_SYSCTL=y | ||
53 | CONFIG_BSD_PROCESS_ACCT=y | 54 | CONFIG_BSD_PROCESS_ACCT=y |
54 | # CONFIG_BSD_PROCESS_ACCT_V3 is not set | 55 | # CONFIG_BSD_PROCESS_ACCT_V3 is not set |
55 | CONFIG_FHANDLE=y | 56 | CONFIG_FHANDLE=y |
@@ -71,13 +72,9 @@ CONFIG_GENERIC_IRQ_SHOW=y | |||
71 | # | 72 | # |
72 | # RCU Subsystem | 73 | # RCU Subsystem |
73 | # | 74 | # |
74 | CONFIG_TREE_PREEMPT_RCU=y | 75 | CONFIG_TINY_RCU=y |
75 | # CONFIG_TINY_RCU is not set | 76 | # CONFIG_PREEMPT_RCU is not set |
76 | # CONFIG_TINY_PREEMPT_RCU is not set | ||
77 | CONFIG_PREEMPT_RCU=y | ||
78 | # CONFIG_RCU_TRACE is not set | 77 | # CONFIG_RCU_TRACE is not set |
79 | CONFIG_RCU_FANOUT=32 | ||
80 | # CONFIG_RCU_FANOUT_EXACT is not set | ||
81 | # CONFIG_TREE_RCU_TRACE is not set | 78 | # CONFIG_TREE_RCU_TRACE is not set |
82 | CONFIG_IKCONFIG=y | 79 | CONFIG_IKCONFIG=y |
83 | CONFIG_IKCONFIG_PROC=y | 80 | CONFIG_IKCONFIG_PROC=y |
@@ -98,8 +95,14 @@ CONFIG_CGROUP_PERF=y | |||
98 | CONFIG_CGROUP_SCHED=y | 95 | CONFIG_CGROUP_SCHED=y |
99 | CONFIG_FAIR_GROUP_SCHED=y | 96 | CONFIG_FAIR_GROUP_SCHED=y |
100 | CONFIG_RT_GROUP_SCHED=y | 97 | CONFIG_RT_GROUP_SCHED=y |
101 | # CONFIG_BLK_CGROUP is not set | 98 | CONFIG_BLK_CGROUP=y |
102 | # CONFIG_NAMESPACES is not set | 99 | # CONFIG_DEBUG_BLK_CGROUP is not set |
100 | CONFIG_NAMESPACES=y | ||
101 | CONFIG_UTS_NS=y | ||
102 | CONFIG_IPC_NS=y | ||
103 | CONFIG_USER_NS=y | ||
104 | CONFIG_PID_NS=y | ||
105 | CONFIG_NET_NS=y | ||
103 | CONFIG_SCHED_AUTOGROUP=y | 106 | CONFIG_SCHED_AUTOGROUP=y |
104 | CONFIG_MM_OWNER=y | 107 | CONFIG_MM_OWNER=y |
105 | # CONFIG_SYSFS_DEPRECATED is not set | 108 | # CONFIG_SYSFS_DEPRECATED is not set |
@@ -107,8 +110,8 @@ CONFIG_MM_OWNER=y | |||
107 | CONFIG_BLK_DEV_INITRD=y | 110 | CONFIG_BLK_DEV_INITRD=y |
108 | CONFIG_INITRAMFS_SOURCE="" | 111 | CONFIG_INITRAMFS_SOURCE="" |
109 | CONFIG_RD_GZIP=y | 112 | CONFIG_RD_GZIP=y |
110 | # CONFIG_RD_BZIP2 is not set | 113 | CONFIG_RD_BZIP2=y |
111 | # CONFIG_RD_LZMA is not set | 114 | CONFIG_RD_LZMA=y |
112 | CONFIG_RD_XZ=y | 115 | CONFIG_RD_XZ=y |
113 | CONFIG_RD_LZO=y | 116 | CONFIG_RD_LZO=y |
114 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 117 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
@@ -175,7 +178,8 @@ CONFIG_MODULE_SRCVERSION_ALL=y | |||
175 | CONFIG_BLOCK=y | 178 | CONFIG_BLOCK=y |
176 | CONFIG_LBDAF=y | 179 | CONFIG_LBDAF=y |
177 | CONFIG_BLK_DEV_BSG=y | 180 | CONFIG_BLK_DEV_BSG=y |
178 | # CONFIG_BLK_DEV_INTEGRITY is not set | 181 | CONFIG_BLK_DEV_INTEGRITY=y |
182 | CONFIG_BLK_DEV_THROTTLING=y | ||
179 | 183 | ||
180 | # | 184 | # |
181 | # IO Schedulers | 185 | # IO Schedulers |
@@ -183,6 +187,7 @@ CONFIG_BLK_DEV_BSG=y | |||
183 | CONFIG_IOSCHED_NOOP=y | 187 | CONFIG_IOSCHED_NOOP=y |
184 | CONFIG_IOSCHED_DEADLINE=y | 188 | CONFIG_IOSCHED_DEADLINE=y |
185 | CONFIG_IOSCHED_CFQ=y | 189 | CONFIG_IOSCHED_CFQ=y |
190 | CONFIG_CFQ_GROUP_IOSCHED=y | ||
186 | # CONFIG_DEFAULT_DEADLINE is not set | 191 | # CONFIG_DEFAULT_DEADLINE is not set |
187 | CONFIG_DEFAULT_CFQ=y | 192 | CONFIG_DEFAULT_CFQ=y |
188 | # CONFIG_DEFAULT_NOOP is not set | 193 | # CONFIG_DEFAULT_NOOP is not set |
@@ -193,27 +198,27 @@ CONFIG_DEFAULT_IOSCHED="cfq" | |||
193 | # CONFIG_INLINE_SPIN_LOCK_BH is not set | 198 | # CONFIG_INLINE_SPIN_LOCK_BH is not set |
194 | # CONFIG_INLINE_SPIN_LOCK_IRQ is not set | 199 | # CONFIG_INLINE_SPIN_LOCK_IRQ is not set |
195 | # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set | 200 | # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set |
196 | # CONFIG_INLINE_SPIN_UNLOCK is not set | 201 | CONFIG_INLINE_SPIN_UNLOCK=y |
197 | # CONFIG_INLINE_SPIN_UNLOCK_BH is not set | 202 | # CONFIG_INLINE_SPIN_UNLOCK_BH is not set |
198 | # CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set | 203 | CONFIG_INLINE_SPIN_UNLOCK_IRQ=y |
199 | # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set | 204 | # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set |
200 | # CONFIG_INLINE_READ_TRYLOCK is not set | 205 | # CONFIG_INLINE_READ_TRYLOCK is not set |
201 | # CONFIG_INLINE_READ_LOCK is not set | 206 | # CONFIG_INLINE_READ_LOCK is not set |
202 | # CONFIG_INLINE_READ_LOCK_BH is not set | 207 | # CONFIG_INLINE_READ_LOCK_BH is not set |
203 | # CONFIG_INLINE_READ_LOCK_IRQ is not set | 208 | # CONFIG_INLINE_READ_LOCK_IRQ is not set |
204 | # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set | 209 | # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set |
205 | # CONFIG_INLINE_READ_UNLOCK is not set | 210 | CONFIG_INLINE_READ_UNLOCK=y |
206 | # CONFIG_INLINE_READ_UNLOCK_BH is not set | 211 | # CONFIG_INLINE_READ_UNLOCK_BH is not set |
207 | # CONFIG_INLINE_READ_UNLOCK_IRQ is not set | 212 | CONFIG_INLINE_READ_UNLOCK_IRQ=y |
208 | # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set | 213 | # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set |
209 | # CONFIG_INLINE_WRITE_TRYLOCK is not set | 214 | # CONFIG_INLINE_WRITE_TRYLOCK is not set |
210 | # CONFIG_INLINE_WRITE_LOCK is not set | 215 | # CONFIG_INLINE_WRITE_LOCK is not set |
211 | # CONFIG_INLINE_WRITE_LOCK_BH is not set | 216 | # CONFIG_INLINE_WRITE_LOCK_BH is not set |
212 | # CONFIG_INLINE_WRITE_LOCK_IRQ is not set | 217 | # CONFIG_INLINE_WRITE_LOCK_IRQ is not set |
213 | # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set | 218 | # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set |
214 | # CONFIG_INLINE_WRITE_UNLOCK is not set | 219 | CONFIG_INLINE_WRITE_UNLOCK=y |
215 | # CONFIG_INLINE_WRITE_UNLOCK_BH is not set | 220 | # CONFIG_INLINE_WRITE_UNLOCK_BH is not set |
216 | # CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set | 221 | CONFIG_INLINE_WRITE_UNLOCK_IRQ=y |
217 | # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set | 222 | # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set |
218 | # CONFIG_MUTEX_SPIN_ON_OWNER is not set | 223 | # CONFIG_MUTEX_SPIN_ON_OWNER is not set |
219 | CONFIG_FREEZER=y | 224 | CONFIG_FREEZER=y |
@@ -404,8 +409,8 @@ CONFIG_VMSPLIT_3G=y | |||
404 | # CONFIG_VMSPLIT_1G is not set | 409 | # CONFIG_VMSPLIT_1G is not set |
405 | CONFIG_PAGE_OFFSET=0xC0000000 | 410 | CONFIG_PAGE_OFFSET=0xC0000000 |
406 | # CONFIG_PREEMPT_NONE is not set | 411 | # CONFIG_PREEMPT_NONE is not set |
407 | # CONFIG_PREEMPT_VOLUNTARY is not set | 412 | CONFIG_PREEMPT_VOLUNTARY=y |
408 | CONFIG_PREEMPT=y | 413 | # CONFIG_PREEMPT is not set |
409 | CONFIG_HZ=128 | 414 | CONFIG_HZ=128 |
410 | # CONFIG_THUMB2_KERNEL is not set | 415 | # CONFIG_THUMB2_KERNEL is not set |
411 | CONFIG_AEABI=y | 416 | CONFIG_AEABI=y |
@@ -448,7 +453,7 @@ CONFIG_CMDLINE=" debug " | |||
448 | CONFIG_KEXEC=y | 453 | CONFIG_KEXEC=y |
449 | CONFIG_ATAGS_PROC=y | 454 | CONFIG_ATAGS_PROC=y |
450 | # CONFIG_CRASH_DUMP is not set | 455 | # CONFIG_CRASH_DUMP is not set |
451 | # CONFIG_AUTO_ZRELADDR is not set | 456 | CONFIG_AUTO_ZRELADDR=y |
452 | 457 | ||
453 | # | 458 | # |
454 | # CPU Power Management | 459 | # CPU Power Management |
@@ -458,11 +463,12 @@ CONFIG_CPU_FREQ_TABLE=y | |||
458 | CONFIG_CPU_FREQ_DEBUG=y | 463 | CONFIG_CPU_FREQ_DEBUG=y |
459 | CONFIG_CPU_FREQ_STAT=y | 464 | CONFIG_CPU_FREQ_STAT=y |
460 | CONFIG_CPU_FREQ_STAT_DETAILS=y | 465 | CONFIG_CPU_FREQ_STAT_DETAILS=y |
461 | # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set | 466 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y |
462 | # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set | 467 | # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set |
463 | CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y | 468 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set |
464 | # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set | 469 | # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set |
465 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set | 470 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set |
471 | # CONFIG_CPU_FREQ_DEFAULT_GOV_HOTPLUG is not set | ||
466 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | 472 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y |
467 | CONFIG_CPU_FREQ_GOV_POWERSAVE=y | 473 | CONFIG_CPU_FREQ_GOV_POWERSAVE=y |
468 | CONFIG_CPU_FREQ_GOV_USERSPACE=y | 474 | CONFIG_CPU_FREQ_GOV_USERSPACE=y |
@@ -972,7 +978,7 @@ CONFIG_KS959_DONGLE=m | |||
972 | CONFIG_USB_IRDA=m | 978 | CONFIG_USB_IRDA=m |
973 | CONFIG_SIGMATEL_FIR=m | 979 | CONFIG_SIGMATEL_FIR=m |
974 | CONFIG_MCS_FIR=m | 980 | CONFIG_MCS_FIR=m |
975 | CONFIG_BT=m | 981 | CONFIG_BT=y |
976 | CONFIG_BT_L2CAP=y | 982 | CONFIG_BT_L2CAP=y |
977 | CONFIG_BT_SCO=y | 983 | CONFIG_BT_SCO=y |
978 | CONFIG_BT_RFCOMM=m | 984 | CONFIG_BT_RFCOMM=m |
@@ -985,9 +991,9 @@ CONFIG_BT_HIDP=m | |||
985 | # | 991 | # |
986 | # Bluetooth device drivers | 992 | # Bluetooth device drivers |
987 | # | 993 | # |
988 | CONFIG_BT_HCIBTUSB=m | 994 | CONFIG_BT_HCIBTUSB=y |
989 | CONFIG_BT_HCIBTSDIO=m | 995 | CONFIG_BT_HCIBTSDIO=m |
990 | CONFIG_BT_HCIUART=m | 996 | CONFIG_BT_HCIUART=y |
991 | CONFIG_BT_HCIUART_H4=y | 997 | CONFIG_BT_HCIUART_H4=y |
992 | CONFIG_BT_HCIUART_BCSP=y | 998 | CONFIG_BT_HCIUART_BCSP=y |
993 | CONFIG_BT_HCIUART_ATH3K=y | 999 | CONFIG_BT_HCIUART_ATH3K=y |
@@ -996,7 +1002,8 @@ CONFIG_BT_HCIBCM203X=m | |||
996 | CONFIG_BT_HCIBPA10X=m | 1002 | CONFIG_BT_HCIBPA10X=m |
997 | CONFIG_BT_HCIBFUSB=m | 1003 | CONFIG_BT_HCIBFUSB=m |
998 | # CONFIG_BT_HCIVHCI is not set | 1004 | # CONFIG_BT_HCIVHCI is not set |
999 | # CONFIG_BT_MRVL is not set | 1005 | CONFIG_BT_MRVL=m |
1006 | # CONFIG_BT_MRVL_SDIO is not set | ||
1000 | CONFIG_BT_ATH3K=m | 1007 | CONFIG_BT_ATH3K=m |
1001 | CONFIG_BT_WILINK=m | 1008 | CONFIG_BT_WILINK=m |
1002 | CONFIG_AF_RXRPC=m | 1009 | CONFIG_AF_RXRPC=m |
@@ -1035,7 +1042,7 @@ CONFIG_MAC80211_LEDS=y | |||
1035 | # CONFIG_MAC80211_DEBUG_MENU is not set | 1042 | # CONFIG_MAC80211_DEBUG_MENU is not set |
1036 | CONFIG_WIMAX=m | 1043 | CONFIG_WIMAX=m |
1037 | CONFIG_WIMAX_DEBUG_LEVEL=8 | 1044 | CONFIG_WIMAX_DEBUG_LEVEL=8 |
1038 | CONFIG_RFKILL=m | 1045 | CONFIG_RFKILL=y |
1039 | CONFIG_RFKILL_LEDS=y | 1046 | CONFIG_RFKILL_LEDS=y |
1040 | CONFIG_RFKILL_INPUT=y | 1047 | CONFIG_RFKILL_INPUT=y |
1041 | CONFIG_NET_9P=m | 1048 | CONFIG_NET_9P=m |
@@ -2033,16 +2040,16 @@ CONFIG_VIDEO_ADV7180=m | |||
2033 | # CONFIG_VIDEO_BT856 is not set | 2040 | # CONFIG_VIDEO_BT856 is not set |
2034 | # CONFIG_VIDEO_BT866 is not set | 2041 | # CONFIG_VIDEO_BT866 is not set |
2035 | # CONFIG_VIDEO_KS0127 is not set | 2042 | # CONFIG_VIDEO_KS0127 is not set |
2036 | # CONFIG_VIDEO_OV7670 is not set | 2043 | CONFIG_VIDEO_OV7670=m |
2037 | CONFIG_VIDEO_MT9V011=m | 2044 | CONFIG_VIDEO_MT9V011=m |
2038 | # CONFIG_VIDEO_TCM825X is not set | 2045 | # CONFIG_VIDEO_TCM825X is not set |
2039 | # CONFIG_VIDEO_SAA7110 is not set | 2046 | # CONFIG_VIDEO_SAA7110 is not set |
2040 | CONFIG_VIDEO_SAA711X=m | 2047 | CONFIG_VIDEO_SAA711X=m |
2041 | # CONFIG_VIDEO_SAA717X is not set | 2048 | # CONFIG_VIDEO_SAA717X is not set |
2042 | # CONFIG_VIDEO_SAA7191 is not set | 2049 | # CONFIG_VIDEO_SAA7191 is not set |
2043 | # CONFIG_VIDEO_TVP514X is not set | 2050 | CONFIG_VIDEO_TVP514X=m |
2044 | # CONFIG_VIDEO_TVP5150 is not set | 2051 | CONFIG_VIDEO_TVP5150=m |
2045 | # CONFIG_VIDEO_TVP7002 is not set | 2052 | CONFIG_VIDEO_TVP7002=m |
2046 | # CONFIG_VIDEO_VPX3220 is not set | 2053 | # CONFIG_VIDEO_VPX3220 is not set |
2047 | 2054 | ||
2048 | # | 2055 | # |
@@ -2072,8 +2079,9 @@ CONFIG_VIDEO_CX2341X=m | |||
2072 | # CONFIG_VIDEO_UPD64031A is not set | 2079 | # CONFIG_VIDEO_UPD64031A is not set |
2073 | # CONFIG_VIDEO_UPD64083 is not set | 2080 | # CONFIG_VIDEO_UPD64083 is not set |
2074 | CONFIG_VIDEO_VIVI=m | 2081 | CONFIG_VIDEO_VIVI=m |
2082 | CONFIG_VIDEO_VPSS_SYSTEM=m | ||
2075 | CONFIG_VIDEO_VPFE_CAPTURE=y | 2083 | CONFIG_VIDEO_VPFE_CAPTURE=y |
2076 | # CONFIG_VIDEO_DM6446_CCDC is not set | 2084 | CONFIG_VIDEO_DM6446_CCDC=m |
2077 | CONFIG_VIDEO_OMAP2_VOUT=y | 2085 | CONFIG_VIDEO_OMAP2_VOUT=y |
2078 | # CONFIG_VIDEO_CPIA2 is not set | 2086 | # CONFIG_VIDEO_CPIA2 is not set |
2079 | CONFIG_VIDEO_TIMBERDALE=m | 2087 | CONFIG_VIDEO_TIMBERDALE=m |
@@ -2958,15 +2966,19 @@ CONFIG_CLKDEV_LOOKUP=y | |||
2958 | # File systems | 2966 | # File systems |
2959 | # | 2967 | # |
2960 | CONFIG_EXT2_FS=y | 2968 | CONFIG_EXT2_FS=y |
2961 | # CONFIG_EXT2_FS_XATTR is not set | 2969 | CONFIG_EXT2_FS_XATTR=y |
2970 | CONFIG_EXT2_FS_POSIX_ACL=y | ||
2971 | CONFIG_EXT2_FS_SECURITY=y | ||
2962 | # CONFIG_EXT2_FS_XIP is not set | 2972 | # CONFIG_EXT2_FS_XIP is not set |
2963 | CONFIG_EXT3_FS=y | 2973 | CONFIG_EXT3_FS=y |
2964 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | 2974 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set |
2965 | # CONFIG_EXT3_FS_XATTR is not set | 2975 | CONFIG_EXT3_FS_XATTR=y |
2976 | CONFIG_EXT3_FS_POSIX_ACL=y | ||
2977 | # CONFIG_EXT3_FS_SECURITY is not set | ||
2966 | CONFIG_EXT4_FS=y | 2978 | CONFIG_EXT4_FS=y |
2967 | CONFIG_EXT4_FS_XATTR=y | 2979 | CONFIG_EXT4_FS_XATTR=y |
2968 | # CONFIG_EXT4_FS_POSIX_ACL is not set | 2980 | CONFIG_EXT4_FS_POSIX_ACL=y |
2969 | # CONFIG_EXT4_FS_SECURITY is not set | 2981 | CONFIG_EXT4_FS_SECURITY=y |
2970 | # CONFIG_EXT4_DEBUG is not set | 2982 | # CONFIG_EXT4_DEBUG is not set |
2971 | CONFIG_JBD=y | 2983 | CONFIG_JBD=y |
2972 | # CONFIG_JBD_DEBUG is not set | 2984 | # CONFIG_JBD_DEBUG is not set |
@@ -2980,17 +2992,17 @@ CONFIG_REISERFS_FS_XATTR=y | |||
2980 | # CONFIG_REISERFS_FS_POSIX_ACL is not set | 2992 | # CONFIG_REISERFS_FS_POSIX_ACL is not set |
2981 | # CONFIG_REISERFS_FS_SECURITY is not set | 2993 | # CONFIG_REISERFS_FS_SECURITY is not set |
2982 | CONFIG_JFS_FS=m | 2994 | CONFIG_JFS_FS=m |
2983 | # CONFIG_JFS_POSIX_ACL is not set | 2995 | CONFIG_JFS_POSIX_ACL=y |
2984 | # CONFIG_JFS_SECURITY is not set | 2996 | # CONFIG_JFS_SECURITY is not set |
2985 | # CONFIG_JFS_DEBUG is not set | 2997 | # CONFIG_JFS_DEBUG is not set |
2986 | # CONFIG_JFS_STATISTICS is not set | 2998 | CONFIG_JFS_STATISTICS=y |
2987 | CONFIG_XFS_FS=m | 2999 | CONFIG_XFS_FS=m |
2988 | # CONFIG_XFS_QUOTA is not set | 3000 | CONFIG_XFS_QUOTA=y |
2989 | # CONFIG_XFS_POSIX_ACL is not set | 3001 | CONFIG_XFS_POSIX_ACL=y |
2990 | # CONFIG_XFS_RT is not set | 3002 | CONFIG_XFS_RT=y |
2991 | # CONFIG_XFS_DEBUG is not set | 3003 | # CONFIG_XFS_DEBUG is not set |
2992 | CONFIG_GFS2_FS=m | 3004 | CONFIG_GFS2_FS=m |
2993 | # CONFIG_GFS2_FS_LOCKING_DLM is not set | 3005 | CONFIG_GFS2_FS_LOCKING_DLM=y |
2994 | CONFIG_OCFS2_FS=m | 3006 | CONFIG_OCFS2_FS=m |
2995 | CONFIG_OCFS2_FS_O2CB=m | 3007 | CONFIG_OCFS2_FS_O2CB=m |
2996 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m | 3008 | CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m |
@@ -2998,8 +3010,8 @@ CONFIG_OCFS2_FS_STATS=y | |||
2998 | CONFIG_OCFS2_DEBUG_MASKLOG=y | 3010 | CONFIG_OCFS2_DEBUG_MASKLOG=y |
2999 | # CONFIG_OCFS2_DEBUG_FS is not set | 3011 | # CONFIG_OCFS2_DEBUG_FS is not set |
3000 | CONFIG_BTRFS_FS=m | 3012 | CONFIG_BTRFS_FS=m |
3001 | # CONFIG_BTRFS_FS_POSIX_ACL is not set | 3013 | CONFIG_BTRFS_FS_POSIX_ACL=y |
3002 | # CONFIG_NILFS2_FS is not set | 3014 | CONFIG_NILFS2_FS=m |
3003 | CONFIG_FS_POSIX_ACL=y | 3015 | CONFIG_FS_POSIX_ACL=y |
3004 | CONFIG_EXPORTFS=y | 3016 | CONFIG_EXPORTFS=y |
3005 | CONFIG_FILE_LOCKING=y | 3017 | CONFIG_FILE_LOCKING=y |
@@ -3015,15 +3027,22 @@ CONFIG_QUOTA_TREE=y | |||
3015 | # CONFIG_QFMT_V1 is not set | 3027 | # CONFIG_QFMT_V1 is not set |
3016 | CONFIG_QFMT_V2=y | 3028 | CONFIG_QFMT_V2=y |
3017 | CONFIG_QUOTACTL=y | 3029 | CONFIG_QUOTACTL=y |
3018 | CONFIG_AUTOFS4_FS=m | 3030 | CONFIG_AUTOFS4_FS=y |
3019 | CONFIG_FUSE_FS=m | 3031 | CONFIG_FUSE_FS=m |
3020 | # CONFIG_CUSE is not set | 3032 | CONFIG_CUSE=m |
3021 | CONFIG_GENERIC_ACL=y | 3033 | CONFIG_GENERIC_ACL=y |
3022 | 3034 | ||
3023 | # | 3035 | # |
3024 | # Caches | 3036 | # Caches |
3025 | # | 3037 | # |
3026 | # CONFIG_FSCACHE is not set | 3038 | CONFIG_FSCACHE=m |
3039 | CONFIG_FSCACHE_STATS=y | ||
3040 | CONFIG_FSCACHE_HISTOGRAM=y | ||
3041 | # CONFIG_FSCACHE_DEBUG is not set | ||
3042 | # CONFIG_FSCACHE_OBJECT_LIST is not set | ||
3043 | CONFIG_CACHEFILES=m | ||
3044 | # CONFIG_CACHEFILES_DEBUG is not set | ||
3045 | CONFIG_CACHEFILES_HISTOGRAM=y | ||
3027 | 3046 | ||
3028 | # | 3047 | # |
3029 | # CD-ROM/DVD Filesystems | 3048 | # CD-ROM/DVD Filesystems |
@@ -3044,7 +3063,7 @@ CONFIG_FAT_DEFAULT_CODEPAGE=437 | |||
3044 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | 3063 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" |
3045 | CONFIG_NTFS_FS=m | 3064 | CONFIG_NTFS_FS=m |
3046 | # CONFIG_NTFS_DEBUG is not set | 3065 | # CONFIG_NTFS_DEBUG is not set |
3047 | CONFIG_NTFS_RW=y | 3066 | # CONFIG_NTFS_RW is not set |
3048 | 3067 | ||
3049 | # | 3068 | # |
3050 | # Pseudo filesystems | 3069 | # Pseudo filesystems |
@@ -3120,9 +3139,10 @@ CONFIG_UFS_FS=m | |||
3120 | CONFIG_NETWORK_FILESYSTEMS=y | 3139 | CONFIG_NETWORK_FILESYSTEMS=y |
3121 | CONFIG_NFS_FS=y | 3140 | CONFIG_NFS_FS=y |
3122 | CONFIG_NFS_V3=y | 3141 | CONFIG_NFS_V3=y |
3123 | # CONFIG_NFS_V3_ACL is not set | 3142 | CONFIG_NFS_V3_ACL=y |
3124 | CONFIG_NFS_V4=y | 3143 | CONFIG_NFS_V4=y |
3125 | # CONFIG_NFS_V4_1 is not set | 3144 | CONFIG_NFS_V4_1=y |
3145 | CONFIG_PNFS_FILE_LAYOUT=y | ||
3126 | CONFIG_ROOT_NFS=y | 3146 | CONFIG_ROOT_NFS=y |
3127 | # CONFIG_NFS_USE_LEGACY_DNS is not set | 3147 | # CONFIG_NFS_USE_LEGACY_DNS is not set |
3128 | CONFIG_NFS_USE_KERNEL_DNS=y | 3148 | CONFIG_NFS_USE_KERNEL_DNS=y |
@@ -3135,7 +3155,7 @@ CONFIG_NFSD_V3_ACL=y | |||
3135 | CONFIG_NFSD_V4=y | 3155 | CONFIG_NFSD_V4=y |
3136 | CONFIG_LOCKD=y | 3156 | CONFIG_LOCKD=y |
3137 | CONFIG_LOCKD_V4=y | 3157 | CONFIG_LOCKD_V4=y |
3138 | CONFIG_NFS_ACL_SUPPORT=m | 3158 | CONFIG_NFS_ACL_SUPPORT=y |
3139 | CONFIG_NFS_COMMON=y | 3159 | CONFIG_NFS_COMMON=y |
3140 | CONFIG_SUNRPC=y | 3160 | CONFIG_SUNRPC=y |
3141 | CONFIG_SUNRPC_GSS=y | 3161 | CONFIG_SUNRPC_GSS=y |
@@ -3146,9 +3166,12 @@ CONFIG_CIFS_STATS=y | |||
3146 | CONFIG_CIFS_STATS2=y | 3166 | CONFIG_CIFS_STATS2=y |
3147 | # CONFIG_CIFS_WEAK_PW_HASH is not set | 3167 | # CONFIG_CIFS_WEAK_PW_HASH is not set |
3148 | # CONFIG_CIFS_UPCALL is not set | 3168 | # CONFIG_CIFS_UPCALL is not set |
3149 | # CONFIG_CIFS_XATTR is not set | 3169 | CONFIG_CIFS_XATTR=y |
3170 | CONFIG_CIFS_POSIX=y | ||
3150 | # CONFIG_CIFS_DEBUG2 is not set | 3171 | # CONFIG_CIFS_DEBUG2 is not set |
3151 | # CONFIG_CIFS_DFS_UPCALL is not set | 3172 | CONFIG_CIFS_DFS_UPCALL=y |
3173 | CONFIG_CIFS_FSCACHE=y | ||
3174 | CONFIG_CIFS_ACL=y | ||
3152 | CONFIG_CIFS_EXPERIMENTAL=y | 3175 | CONFIG_CIFS_EXPERIMENTAL=y |
3153 | CONFIG_NCP_FS=m | 3176 | CONFIG_NCP_FS=m |
3154 | # CONFIG_NCPFS_PACKET_SIGNING is not set | 3177 | # CONFIG_NCPFS_PACKET_SIGNING is not set |
@@ -3162,8 +3185,10 @@ CONFIG_NCP_FS=m | |||
3162 | CONFIG_CODA_FS=m | 3185 | CONFIG_CODA_FS=m |
3163 | CONFIG_AFS_FS=m | 3186 | CONFIG_AFS_FS=m |
3164 | # CONFIG_AFS_DEBUG is not set | 3187 | # CONFIG_AFS_DEBUG is not set |
3188 | # CONFIG_AFS_FSCACHE is not set | ||
3165 | CONFIG_9P_FS=m | 3189 | CONFIG_9P_FS=m |
3166 | # CONFIG_9P_FS_POSIX_ACL is not set | 3190 | CONFIG_9P_FSCACHE=y |
3191 | CONFIG_9P_FS_POSIX_ACL=y | ||
3167 | 3192 | ||
3168 | # | 3193 | # |
3169 | # Partition Types | 3194 | # Partition Types |
@@ -3257,7 +3282,6 @@ CONFIG_TIMER_STATS=y | |||
3257 | # CONFIG_DEBUG_OBJECTS is not set | 3282 | # CONFIG_DEBUG_OBJECTS is not set |
3258 | # CONFIG_DEBUG_SLAB is not set | 3283 | # CONFIG_DEBUG_SLAB is not set |
3259 | # CONFIG_DEBUG_KMEMLEAK is not set | 3284 | # CONFIG_DEBUG_KMEMLEAK is not set |
3260 | CONFIG_DEBUG_PREEMPT=y | ||
3261 | # CONFIG_DEBUG_RT_MUTEXES is not set | 3285 | # CONFIG_DEBUG_RT_MUTEXES is not set |
3262 | # CONFIG_RT_MUTEX_TESTER is not set | 3286 | # CONFIG_RT_MUTEX_TESTER is not set |
3263 | # CONFIG_DEBUG_SPINLOCK is not set | 3287 | # CONFIG_DEBUG_SPINLOCK is not set |
@@ -3281,7 +3305,6 @@ CONFIG_DEBUG_MUTEXES=y | |||
3281 | # CONFIG_DEBUG_CREDENTIALS is not set | 3305 | # CONFIG_DEBUG_CREDENTIALS is not set |
3282 | # CONFIG_BOOT_PRINTK_DELAY is not set | 3306 | # CONFIG_BOOT_PRINTK_DELAY is not set |
3283 | # CONFIG_RCU_TORTURE_TEST is not set | 3307 | # CONFIG_RCU_TORTURE_TEST is not set |
3284 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
3285 | # CONFIG_BACKTRACE_SELF_TEST is not set | 3308 | # CONFIG_BACKTRACE_SELF_TEST is not set |
3286 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | 3309 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set |
3287 | # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set | 3310 | # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set |
@@ -3301,7 +3324,6 @@ CONFIG_TRACING_SUPPORT=y | |||
3301 | CONFIG_FTRACE=y | 3324 | CONFIG_FTRACE=y |
3302 | # CONFIG_FUNCTION_TRACER is not set | 3325 | # CONFIG_FUNCTION_TRACER is not set |
3303 | # CONFIG_IRQSOFF_TRACER is not set | 3326 | # CONFIG_IRQSOFF_TRACER is not set |
3304 | # CONFIG_PREEMPT_TRACER is not set | ||
3305 | # CONFIG_SCHED_TRACER is not set | 3327 | # CONFIG_SCHED_TRACER is not set |
3306 | # CONFIG_ENABLE_DEFAULT_TRACERS is not set | 3328 | # CONFIG_ENABLE_DEFAULT_TRACERS is not set |
3307 | CONFIG_BRANCH_PROFILE_NONE=y | 3329 | CONFIG_BRANCH_PROFILE_NONE=y |
@@ -3476,6 +3498,8 @@ CONFIG_XZ_DEC_SPARC=y | |||
3476 | CONFIG_XZ_DEC_BCJ=y | 3498 | CONFIG_XZ_DEC_BCJ=y |
3477 | CONFIG_XZ_DEC_TEST=m | 3499 | CONFIG_XZ_DEC_TEST=m |
3478 | CONFIG_DECOMPRESS_GZIP=y | 3500 | CONFIG_DECOMPRESS_GZIP=y |
3501 | CONFIG_DECOMPRESS_BZIP2=y | ||
3502 | CONFIG_DECOMPRESS_LZMA=y | ||
3479 | CONFIG_DECOMPRESS_XZ=y | 3503 | CONFIG_DECOMPRESS_XZ=y |
3480 | CONFIG_DECOMPRESS_LZO=y | 3504 | CONFIG_DECOMPRESS_LZO=y |
3481 | CONFIG_TEXTSEARCH=y | 3505 | CONFIG_TEXTSEARCH=y |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0054-OMAP2-cpufreq-free-up-table-on-exit.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0054-OMAP2-cpufreq-free-up-table-on-exit.patch new file mode 100644 index 00000000..13f74b87 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0054-OMAP2-cpufreq-free-up-table-on-exit.patch | |||
@@ -0,0 +1,38 @@ | |||
1 | From 282243e365a651ca50d48d0a75a6f81163bc166e Mon Sep 17 00:00:00 2001 | ||
2 | From: Nishanth Menon <nm@ti.com> | ||
3 | Date: Thu, 12 May 2011 07:59:52 -0500 | ||
4 | Subject: [PATCH 54/59] OMAP2+: cpufreq: free up table on exit | ||
5 | |||
6 | freq_table allocated by opp_init_cpufreq_table in omap_cpu_init | ||
7 | needs to be freed in omap_cpu_exit. | ||
8 | |||
9 | Signed-off-by: Nishanth Menon <nm@ti.com> | ||
10 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
11 | --- | ||
12 | arch/arm/mach-omap2/omap2plus-cpufreq.c | 3 +++ | ||
13 | 1 files changed, 3 insertions(+), 0 deletions(-) | ||
14 | |||
15 | diff --git a/arch/arm/mach-omap2/omap2plus-cpufreq.c b/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
16 | index d53ce23..e38ebb8 100644 | ||
17 | --- a/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
18 | +++ b/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
19 | @@ -26,6 +26,7 @@ | ||
20 | #include <linux/clk.h> | ||
21 | #include <linux/io.h> | ||
22 | #include <linux/opp.h> | ||
23 | +#include <linux/slab.h> | ||
24 | #include <linux/cpu.h> | ||
25 | |||
26 | #include <asm/system.h> | ||
27 | @@ -216,6 +217,8 @@ static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy) | ||
28 | static int omap_cpu_exit(struct cpufreq_policy *policy) | ||
29 | { | ||
30 | clk_exit_cpufreq_table(&freq_table); | ||
31 | + kfree(freq_table); | ||
32 | + freq_table = NULL; | ||
33 | clk_put(mpu_clk); | ||
34 | return 0; | ||
35 | } | ||
36 | -- | ||
37 | 1.6.6.1 | ||
38 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0055-OMAP2-cpufreq-handle-invalid-cpufreq-table.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0055-OMAP2-cpufreq-handle-invalid-cpufreq-table.patch new file mode 100644 index 00000000..331027a5 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0055-OMAP2-cpufreq-handle-invalid-cpufreq-table.patch | |||
@@ -0,0 +1,44 @@ | |||
1 | From 01bf169f5ffd47e37b702da4176f57e852441e08 Mon Sep 17 00:00:00 2001 | ||
2 | From: Nishanth Menon <nm@ti.com> | ||
3 | Date: Thu, 12 May 2011 08:14:41 -0500 | ||
4 | Subject: [PATCH 55/59] OMAP2+: cpufreq: handle invalid cpufreq table | ||
5 | |||
6 | Handle the case when cpufreq_frequency_table_cpuinfo fails. freq_table | ||
7 | that we passed failed the internal test of cpufreq generic driver, | ||
8 | so we should'nt be using the freq_table as such. Instead, warn and | ||
9 | fallback to clock functions for validation and operation. | ||
10 | |||
11 | Signed-off-by: Nishanth Menon <nm@ti.com> | ||
12 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
13 | --- | ||
14 | arch/arm/mach-omap2/omap2plus-cpufreq.c | 12 ++++++++++-- | ||
15 | 1 files changed, 10 insertions(+), 2 deletions(-) | ||
16 | |||
17 | diff --git a/arch/arm/mach-omap2/omap2plus-cpufreq.c b/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
18 | index e38ebb8..6e3666a 100644 | ||
19 | --- a/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
20 | +++ b/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
21 | @@ -182,10 +182,18 @@ static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy) | ||
22 | |||
23 | if (freq_table) { | ||
24 | result = cpufreq_frequency_table_cpuinfo(policy, freq_table); | ||
25 | - if (!result) | ||
26 | + if (!result) { | ||
27 | cpufreq_frequency_table_get_attr(freq_table, | ||
28 | policy->cpu); | ||
29 | - } else { | ||
30 | + } else { | ||
31 | + WARN(true, "%s: fallback to clk_round(freq_table=%d)\n", | ||
32 | + __func__, result); | ||
33 | + kfree(freq_table); | ||
34 | + freq_table = NULL; | ||
35 | + } | ||
36 | + } | ||
37 | + | ||
38 | + if (!freq_table) { | ||
39 | policy->cpuinfo.min_freq = clk_round_rate(mpu_clk, 0) / 1000; | ||
40 | policy->cpuinfo.max_freq = clk_round_rate(mpu_clk, | ||
41 | VERY_HI_RATE) / 1000; | ||
42 | -- | ||
43 | 1.6.6.1 | ||
44 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0056-OMAP2-cpufreq-minor-comment-cleanup.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0056-OMAP2-cpufreq-minor-comment-cleanup.patch new file mode 100644 index 00000000..32ed628e --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0056-OMAP2-cpufreq-minor-comment-cleanup.patch | |||
@@ -0,0 +1,33 @@ | |||
1 | From a06384a5a4f2b5062b3dafea2d71726d59a49579 Mon Sep 17 00:00:00 2001 | ||
2 | From: Nishanth Menon <nm@ti.com> | ||
3 | Date: Thu, 12 May 2011 16:27:45 -0700 | ||
4 | Subject: [PATCH 56/59] OMAP2+: cpufreq: minor comment cleanup | ||
5 | |||
6 | this should probably get squashed in.. | ||
7 | |||
8 | Signed-off-by: Nishanth Menon <nm@ti.com> | ||
9 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
10 | --- | ||
11 | arch/arm/mach-omap2/omap2plus-cpufreq.c | 6 ++++-- | ||
12 | 1 files changed, 4 insertions(+), 2 deletions(-) | ||
13 | |||
14 | diff --git a/arch/arm/mach-omap2/omap2plus-cpufreq.c b/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
15 | index 6e3666a..45f1e9e 100644 | ||
16 | --- a/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
17 | +++ b/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
18 | @@ -84,8 +84,10 @@ static int omap_target(struct cpufreq_policy *policy, | ||
19 | if (is_smp() && (num_online_cpus() < NR_CPUS)) | ||
20 | return ret; | ||
21 | |||
22 | - /* Ensure desired rate is within allowed range. Some govenors | ||
23 | - * (ondemand) will just pass target_freq=0 to get the minimum. */ | ||
24 | + /* | ||
25 | + * Ensure desired rate is within allowed range. Some govenors | ||
26 | + * (ondemand) will just pass target_freq=0 to get the minimum. | ||
27 | + */ | ||
28 | if (target_freq < policy->min) | ||
29 | target_freq = policy->min; | ||
30 | if (target_freq > policy->max) | ||
31 | -- | ||
32 | 1.6.6.1 | ||
33 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0057-OMAP2-cpufreq-use-clk_init_cpufreq_table-if-OPPs-not.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0057-OMAP2-cpufreq-use-clk_init_cpufreq_table-if-OPPs-not.patch new file mode 100644 index 00000000..4fd21411 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0057-OMAP2-cpufreq-use-clk_init_cpufreq_table-if-OPPs-not.patch | |||
@@ -0,0 +1,48 @@ | |||
1 | From 52731e770e5a2dfbeacb9d9a595f865c3b4f7186 Mon Sep 17 00:00:00 2001 | ||
2 | From: Nishanth Menon <nm@ti.com> | ||
3 | Date: Fri, 13 May 2011 05:34:35 -0700 | ||
4 | Subject: [PATCH 57/59] OMAP2: cpufreq: use clk_init_cpufreq_table if OPPs not available | ||
5 | |||
6 | OMAP2 does not use OPP tables at the moment for DVFS. Currently, | ||
7 | we depend on opp table initialization to give us the freq_table, | ||
8 | which makes sense for OMAP3+. for OMAP2, we should be using | ||
9 | clk_init_cpufreq_table - so if the opp based frequency table | ||
10 | initilization fails, fall back to clk_init_cpufreq_table to give | ||
11 | us the table. | ||
12 | |||
13 | Signed-off-by: Nishanth Menon <nm@ti.com> | ||
14 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
15 | --- | ||
16 | arch/arm/mach-omap2/omap2plus-cpufreq.c | 9 ++++++++- | ||
17 | 1 files changed, 8 insertions(+), 1 deletions(-) | ||
18 | |||
19 | diff --git a/arch/arm/mach-omap2/omap2plus-cpufreq.c b/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
20 | index 45f1e9e..854f4b3 100644 | ||
21 | --- a/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
22 | +++ b/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
23 | @@ -180,7 +180,13 @@ static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy) | ||
24 | pr_warning("%s: unable to get the mpu device\n", __func__); | ||
25 | return -EINVAL; | ||
26 | } | ||
27 | - opp_init_cpufreq_table(mpu_dev, &freq_table); | ||
28 | + | ||
29 | + /* | ||
30 | + * if we dont get cpufreq table using opp, use traditional omap2 lookup | ||
31 | + * as a fallback | ||
32 | + */ | ||
33 | + if (opp_init_cpufreq_table(mpu_dev, &freq_table)) | ||
34 | + clk_init_cpufreq_table(&freq_table); | ||
35 | |||
36 | if (freq_table) { | ||
37 | result = cpufreq_frequency_table_cpuinfo(policy, freq_table); | ||
38 | @@ -188,6 +194,7 @@ static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy) | ||
39 | cpufreq_frequency_table_get_attr(freq_table, | ||
40 | policy->cpu); | ||
41 | } else { | ||
42 | + clk_exit_cpufreq_table(&freq_table); | ||
43 | WARN(true, "%s: fallback to clk_round(freq_table=%d)\n", | ||
44 | __func__, result); | ||
45 | kfree(freq_table); | ||
46 | -- | ||
47 | 1.6.6.1 | ||
48 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0058-OMAP2-cpufreq-use-cpufreq_frequency_table_target.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0058-OMAP2-cpufreq-use-cpufreq_frequency_table_target.patch new file mode 100644 index 00000000..5577625a --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0058-OMAP2-cpufreq-use-cpufreq_frequency_table_target.patch | |||
@@ -0,0 +1,78 @@ | |||
1 | From 754ac343ca86dd2879f597a6ec21c16463aee5b3 Mon Sep 17 00:00:00 2001 | ||
2 | From: Nishanth Menon <nm@ti.com> | ||
3 | Date: Fri, 13 May 2011 05:43:49 -0700 | ||
4 | Subject: [PATCH 58/59] OMAP2+: cpufreq: use cpufreq_frequency_table_target | ||
5 | |||
6 | Use cpufreq_frequency_table_target for finding the proper target | ||
7 | instead of seeing if the frequency requested is divisible alone. | ||
8 | if we have a frequency table, we should restrict ourselves to | ||
9 | selecting the "approved" frequencies alone and only in the case | ||
10 | where the frequency table is not available should we attempt at | ||
11 | closest roundable clock frequency. | ||
12 | |||
13 | Signed-off-by: Nishanth Menon <nm@ti.com> | ||
14 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
15 | --- | ||
16 | arch/arm/mach-omap2/omap2plus-cpufreq.c | 38 ++++++++++++++++++++++-------- | ||
17 | 1 files changed, 28 insertions(+), 10 deletions(-) | ||
18 | |||
19 | diff --git a/arch/arm/mach-omap2/omap2plus-cpufreq.c b/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
20 | index 854f4b3..d0b4f97 100644 | ||
21 | --- a/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
22 | +++ b/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
23 | @@ -77,24 +77,42 @@ static int omap_target(struct cpufreq_policy *policy, | ||
24 | unsigned int target_freq, | ||
25 | unsigned int relation) | ||
26 | { | ||
27 | - int i, ret = 0; | ||
28 | + unsigned int i; | ||
29 | + int ret = 0; | ||
30 | struct cpufreq_freqs freqs; | ||
31 | |||
32 | /* Changes not allowed until all CPUs are online */ | ||
33 | if (is_smp() && (num_online_cpus() < NR_CPUS)) | ||
34 | return ret; | ||
35 | |||
36 | - /* | ||
37 | - * Ensure desired rate is within allowed range. Some govenors | ||
38 | - * (ondemand) will just pass target_freq=0 to get the minimum. | ||
39 | - */ | ||
40 | - if (target_freq < policy->min) | ||
41 | - target_freq = policy->min; | ||
42 | - if (target_freq > policy->max) | ||
43 | - target_freq = policy->max; | ||
44 | + if (freq_table) { | ||
45 | + ret = cpufreq_frequency_table_target(policy, freq_table, | ||
46 | + target_freq, relation, &i); | ||
47 | + if (ret) { | ||
48 | + pr_debug("%s: cpu%d: no freq match for %d(ret=%d)\n", | ||
49 | + __func__, policy->cpu, target_freq, ret); | ||
50 | + return ret; | ||
51 | + } | ||
52 | + freqs.new = freq_table[i].frequency; | ||
53 | + } else { | ||
54 | + /* | ||
55 | + * Ensure desired rate is within allowed range. Some govenors | ||
56 | + * (ondemand) will just pass target_freq=0 to get the minimum. | ||
57 | + */ | ||
58 | + if (target_freq < policy->min) | ||
59 | + target_freq = policy->min; | ||
60 | + if (target_freq > policy->max) | ||
61 | + target_freq = policy->max; | ||
62 | + | ||
63 | + freqs.new = clk_round_rate(mpu_clk, target_freq * 1000) / 1000; | ||
64 | + } | ||
65 | + if (!freqs.new) { | ||
66 | + pr_err("%s: cpu%d: no match for freq %d\n", __func__, | ||
67 | + policy->cpu, target_freq); | ||
68 | + return -EINVAL; | ||
69 | + } | ||
70 | |||
71 | freqs.old = omap_getspeed(policy->cpu); | ||
72 | - freqs.new = clk_round_rate(mpu_clk, target_freq * 1000) / 1000; | ||
73 | freqs.cpu = policy->cpu; | ||
74 | |||
75 | if (freqs.old == freqs.new) | ||
76 | -- | ||
77 | 1.6.6.1 | ||
78 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0059-OMAP2-cpufreq-fix-freq_table-leak.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0059-OMAP2-cpufreq-fix-freq_table-leak.patch new file mode 100644 index 00000000..2c9eba90 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0059-OMAP2-cpufreq-fix-freq_table-leak.patch | |||
@@ -0,0 +1,100 @@ | |||
1 | From cdc549d4ac9225025303a9a8395eb9aa8a73b355 Mon Sep 17 00:00:00 2001 | ||
2 | From: Nishanth Menon <nm@ti.com> | ||
3 | Date: Wed, 18 May 2011 01:48:23 -0500 | ||
4 | Subject: [PATCH 59/59] OMAP2+: cpufreq: fix freq_table leak | ||
5 | |||
6 | Since we have two cpus the cpuinit call for cpu1 causes | ||
7 | freq_table of cpu0 to be overwritten. instead, we maintain | ||
8 | a counter to keep track of cpus who use the cpufreq table | ||
9 | allocate it once(one freq table for all CPUs) and free them | ||
10 | once the last user is done with it. | ||
11 | |||
12 | Signed-off-by: Nishanth Menon <nm@ti.com> | ||
13 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
14 | --- | ||
15 | arch/arm/mach-omap2/omap2plus-cpufreq.c | 33 ++++++++++++++++++++++++------ | ||
16 | 1 files changed, 26 insertions(+), 7 deletions(-) | ||
17 | |||
18 | diff --git a/arch/arm/mach-omap2/omap2plus-cpufreq.c b/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
19 | index d0b4f97..fc3d0fb 100644 | ||
20 | --- a/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
21 | +++ b/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
22 | @@ -42,6 +42,9 @@ | ||
23 | #define VERY_HI_RATE 900000000 | ||
24 | |||
25 | static struct cpufreq_frequency_table *freq_table; | ||
26 | +static int freq_table_users; | ||
27 | +static DEFINE_MUTEX(freq_table_lock); | ||
28 | + | ||
29 | static struct clk *mpu_clk; | ||
30 | |||
31 | static int omap_verify_speed(struct cpufreq_policy *policy) | ||
32 | @@ -172,6 +175,18 @@ skip_lpj: | ||
33 | return ret; | ||
34 | } | ||
35 | |||
36 | +static void freq_table_free(void) | ||
37 | +{ | ||
38 | + if (!freq_table_users) | ||
39 | + return; | ||
40 | + freq_table_users--; | ||
41 | + if (freq_table_users) | ||
42 | + return; | ||
43 | + clk_exit_cpufreq_table(&freq_table); | ||
44 | + kfree(freq_table); | ||
45 | + freq_table = NULL; | ||
46 | +} | ||
47 | + | ||
48 | static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy) | ||
49 | { | ||
50 | int result = 0; | ||
51 | @@ -199,14 +214,18 @@ static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy) | ||
52 | return -EINVAL; | ||
53 | } | ||
54 | |||
55 | + mutex_lock(&freq_table_lock); | ||
56 | /* | ||
57 | * if we dont get cpufreq table using opp, use traditional omap2 lookup | ||
58 | * as a fallback | ||
59 | */ | ||
60 | - if (opp_init_cpufreq_table(mpu_dev, &freq_table)) | ||
61 | - clk_init_cpufreq_table(&freq_table); | ||
62 | + if (!freq_table) { | ||
63 | + if (opp_init_cpufreq_table(mpu_dev, &freq_table)) | ||
64 | + clk_init_cpufreq_table(&freq_table); | ||
65 | + } | ||
66 | |||
67 | if (freq_table) { | ||
68 | + freq_table_users++; | ||
69 | result = cpufreq_frequency_table_cpuinfo(policy, freq_table); | ||
70 | if (!result) { | ||
71 | cpufreq_frequency_table_get_attr(freq_table, | ||
72 | @@ -215,10 +234,10 @@ static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy) | ||
73 | clk_exit_cpufreq_table(&freq_table); | ||
74 | WARN(true, "%s: fallback to clk_round(freq_table=%d)\n", | ||
75 | __func__, result); | ||
76 | - kfree(freq_table); | ||
77 | - freq_table = NULL; | ||
78 | + freq_table_free(); | ||
79 | } | ||
80 | } | ||
81 | + mutex_unlock(&freq_table_lock); | ||
82 | |||
83 | if (!freq_table) { | ||
84 | policy->cpuinfo.min_freq = clk_round_rate(mpu_clk, 0) / 1000; | ||
85 | @@ -251,9 +270,9 @@ static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy) | ||
86 | |||
87 | static int omap_cpu_exit(struct cpufreq_policy *policy) | ||
88 | { | ||
89 | - clk_exit_cpufreq_table(&freq_table); | ||
90 | - kfree(freq_table); | ||
91 | - freq_table = NULL; | ||
92 | + mutex_lock(&freq_table_lock); | ||
93 | + freq_table_free(); | ||
94 | + mutex_unlock(&freq_table_lock); | ||
95 | clk_put(mpu_clk); | ||
96 | return 0; | ||
97 | } | ||
98 | -- | ||
99 | 1.6.6.1 | ||
100 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-hotplug/0052-cpufreq-helpers-for-walking-the-frequency-table.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-hotplug/0052-cpufreq-helpers-for-walking-the-frequency-table.patch new file mode 100644 index 00000000..e8945f72 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-hotplug/0052-cpufreq-helpers-for-walking-the-frequency-table.patch | |||
@@ -0,0 +1,134 @@ | |||
1 | From 130c4f82c269aa0d4110d3e94c3737a14812314d Mon Sep 17 00:00:00 2001 | ||
2 | From: Mike Turquette <mturquette@ti.com> | ||
3 | Date: Tue, 17 May 2011 09:35:54 -0500 | ||
4 | Subject: [PATCH 52/59] cpufreq: helpers for walking the frequency table | ||
5 | |||
6 | Two new functions for getting the next higher and next lower frequencies | ||
7 | in the cpufreq table, based upon a frequency supplied in kHz. | ||
8 | |||
9 | This is useful for cpufreq governors that do not target frequencies | ||
10 | based upon a percentage or a pre-determined value, but instead access | ||
11 | the cpufreq table directly. | ||
12 | |||
13 | Signed-off-by: Mike Turquette <mturquette@ti.com> | ||
14 | Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
15 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
16 | --- | ||
17 | drivers/cpufreq/freq_table.c | 73 ++++++++++++++++++++++++++++++++++++++++++ | ||
18 | include/linux/cpufreq.h | 9 +++++ | ||
19 | 2 files changed, 82 insertions(+), 0 deletions(-) | ||
20 | |||
21 | diff --git a/drivers/cpufreq/freq_table.c b/drivers/cpufreq/freq_table.c | ||
22 | index 0543221..11a307b 100644 | ||
23 | --- a/drivers/cpufreq/freq_table.c | ||
24 | +++ b/drivers/cpufreq/freq_table.c | ||
25 | @@ -13,6 +13,7 @@ | ||
26 | #include <linux/module.h> | ||
27 | #include <linux/init.h> | ||
28 | #include <linux/cpufreq.h> | ||
29 | +#include <linux/err.h> | ||
30 | |||
31 | #define dprintk(msg...) \ | ||
32 | cpufreq_debug_printk(CPUFREQ_DEBUG_CORE, "freq-table", msg) | ||
33 | @@ -174,6 +175,78 @@ int cpufreq_frequency_table_target(struct cpufreq_policy *policy, | ||
34 | } | ||
35 | EXPORT_SYMBOL_GPL(cpufreq_frequency_table_target); | ||
36 | |||
37 | +int cpufreq_frequency_table_next_lowest(struct cpufreq_policy *policy, | ||
38 | + struct cpufreq_frequency_table *table, int *index) | ||
39 | +{ | ||
40 | + unsigned int cur_freq; | ||
41 | + unsigned int next_lowest_freq; | ||
42 | + int optimal_index = -1; | ||
43 | + int i = 0; | ||
44 | + | ||
45 | + if (!policy || IS_ERR(policy) || !table || IS_ERR(table) || | ||
46 | + !index || IS_ERR(index)) | ||
47 | + return -ENOMEM; | ||
48 | + | ||
49 | + cur_freq = policy->cur; | ||
50 | + next_lowest_freq = policy->min; | ||
51 | + | ||
52 | + /* we're at the lowest frequency in the table already, bail out */ | ||
53 | + if (cur_freq == policy->min) | ||
54 | + return -EINVAL; | ||
55 | + | ||
56 | + /* walk the list, find closest freq to cur_freq that is below it */ | ||
57 | + while(table[i].frequency != CPUFREQ_TABLE_END) { | ||
58 | + if (table[i].frequency < cur_freq && | ||
59 | + table[i].frequency >= next_lowest_freq) { | ||
60 | + next_lowest_freq = table[i].frequency; | ||
61 | + optimal_index = table[i].index; | ||
62 | + } | ||
63 | + | ||
64 | + i++; | ||
65 | + } | ||
66 | + | ||
67 | + *index = optimal_index; | ||
68 | + | ||
69 | + return 0; | ||
70 | +} | ||
71 | +EXPORT_SYMBOL_GPL(cpufreq_frequency_table_next_lowest); | ||
72 | + | ||
73 | +int cpufreq_frequency_table_next_highest(struct cpufreq_policy *policy, | ||
74 | + struct cpufreq_frequency_table *table, int *index) | ||
75 | +{ | ||
76 | + unsigned int cur_freq; | ||
77 | + unsigned int next_higher_freq; | ||
78 | + int optimal_index = -1; | ||
79 | + int i = 0; | ||
80 | + | ||
81 | + if (!policy || IS_ERR(policy) || !table || IS_ERR(table) || | ||
82 | + !index || IS_ERR(index)) | ||
83 | + return -ENOMEM; | ||
84 | + | ||
85 | + cur_freq = policy->cur; | ||
86 | + next_higher_freq = policy->max; | ||
87 | + | ||
88 | + /* we're at the highest frequency in the table already, bail out */ | ||
89 | + if (cur_freq == policy->max) | ||
90 | + return -EINVAL; | ||
91 | + | ||
92 | + /* walk the list, find closest freq to cur_freq that is above it */ | ||
93 | + while(table[i].frequency != CPUFREQ_TABLE_END) { | ||
94 | + if (table[i].frequency > cur_freq && | ||
95 | + table[i].frequency <= next_higher_freq) { | ||
96 | + next_higher_freq = table[i].frequency; | ||
97 | + optimal_index = table[i].index; | ||
98 | + } | ||
99 | + | ||
100 | + i++; | ||
101 | + } | ||
102 | + | ||
103 | + *index = optimal_index; | ||
104 | + | ||
105 | + return 0; | ||
106 | +} | ||
107 | +EXPORT_SYMBOL_GPL(cpufreq_frequency_table_next_highest); | ||
108 | + | ||
109 | static DEFINE_PER_CPU(struct cpufreq_frequency_table *, cpufreq_show_table); | ||
110 | /** | ||
111 | * show_available_freqs - show available frequencies for the specified CPU | ||
112 | diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h | ||
113 | index 9343dd3..a38fca8 100644 | ||
114 | --- a/include/linux/cpufreq.h | ||
115 | +++ b/include/linux/cpufreq.h | ||
116 | @@ -396,6 +396,15 @@ void cpufreq_frequency_table_get_attr(struct cpufreq_frequency_table *table, | ||
117 | |||
118 | void cpufreq_frequency_table_put_attr(unsigned int cpu); | ||
119 | |||
120 | +/* the following are for use in governors, or anywhere else */ | ||
121 | +extern int cpufreq_frequency_table_next_lowest(struct cpufreq_policy *policy, | ||
122 | + struct cpufreq_frequency_table *table, | ||
123 | + int *index); | ||
124 | + | ||
125 | +extern int cpufreq_frequency_table_next_highest(struct cpufreq_policy *policy, | ||
126 | + struct cpufreq_frequency_table *table, | ||
127 | + int *index); | ||
128 | + | ||
129 | |||
130 | /********************************************************************* | ||
131 | * UNIFIED DEBUG HELPERS * | ||
132 | -- | ||
133 | 1.6.6.1 | ||
134 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-hotplug/0053-cpufreq-introduce-hotplug-governor.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-hotplug/0053-cpufreq-introduce-hotplug-governor.patch new file mode 100644 index 00000000..6e9bf2f6 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-hotplug/0053-cpufreq-introduce-hotplug-governor.patch | |||
@@ -0,0 +1,879 @@ | |||
1 | From e524139aca0c528627bad699d06ddcbc9f3fb374 Mon Sep 17 00:00:00 2001 | ||
2 | From: Mike Turquette <mturquette@ti.com> | ||
3 | Date: Tue, 17 May 2011 09:43:09 -0500 | ||
4 | Subject: [PATCH 53/59] cpufreq: introduce hotplug governor | ||
5 | |||
6 | The "hotplug" governor scales CPU frequency based on load, similar to | ||
7 | "ondemand". It scales up to the highest frequency when "up_threshold" | ||
8 | is crossed and scales down one frequency at a time when "down_threshold" | ||
9 | is crossed. Unlike those governors, target frequencies are determined | ||
10 | by directly accessing the CPUfreq frequency table, instead of taking | ||
11 | some percentage of maximum available frequency. | ||
12 | |||
13 | The key difference in the "hotplug" governor is that it will disable | ||
14 | auxillary CPUs when the system is very idle, and enable them again once | ||
15 | the system becomes busy. This is achieved by averaging load over | ||
16 | multiple sampling periods; if CPUs were online or offlined based on a | ||
17 | single sampling period then thrashing will occur. | ||
18 | |||
19 | Sysfs entries exist for "hotplug_in_sampling_periods" and for | ||
20 | "hotplug_out_sampling_periods" which determine how many consecutive | ||
21 | periods get averaged to determine if auxillery CPUs should be onlined or | ||
22 | offlined. Defaults are 5 periods and 20 periods respectively. | ||
23 | Otherwise the standard sysfs entries you might find for "ondemand" and | ||
24 | "conservative" governors are there. | ||
25 | |||
26 | To use this governor it is assumed that your CPUfreq driver has | ||
27 | populated the CPUfreq table, CONFIG_NO_HZ is enabled and | ||
28 | CONFIG_HOTPLUG_CPU is enabled. | ||
29 | |||
30 | Changes in V2: | ||
31 | Corrected default sampling periods | ||
32 | Optimized load history array resizing | ||
33 | Maintain load history when resizing array | ||
34 | Add locking to dbs_check_cpu | ||
35 | Switch from enable_nonboot_cpus to cpu_up | ||
36 | Switch from disable_nonboot_cpus to down_cpu | ||
37 | Fix some printks | ||
38 | Coding style around for-loops | ||
39 | |||
40 | Signed-off-by: Mike Turquette <mturquette@ti.com> | ||
41 | Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
42 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
43 | --- | ||
44 | Documentation/cpu-freq/governors.txt | 28 ++ | ||
45 | drivers/cpufreq/Kconfig | 33 ++ | ||
46 | drivers/cpufreq/Makefile | 1 + | ||
47 | drivers/cpufreq/cpufreq_hotplug.c | 705 ++++++++++++++++++++++++++++++++++ | ||
48 | include/linux/cpufreq.h | 3 + | ||
49 | 5 files changed, 770 insertions(+), 0 deletions(-) | ||
50 | create mode 100644 drivers/cpufreq/cpufreq_hotplug.c | ||
51 | |||
52 | diff --git a/Documentation/cpu-freq/governors.txt b/Documentation/cpu-freq/governors.txt | ||
53 | index e74d0a2..c2e3d3d 100644 | ||
54 | --- a/Documentation/cpu-freq/governors.txt | ||
55 | +++ b/Documentation/cpu-freq/governors.txt | ||
56 | @@ -193,6 +193,34 @@ governor but for the opposite direction. For example when set to its | ||
57 | default value of '20' it means that if the CPU usage needs to be below | ||
58 | 20% between samples to have the frequency decreased. | ||
59 | |||
60 | + | ||
61 | +2.6 Hotplug | ||
62 | +----------- | ||
63 | + | ||
64 | +The CPUfreq governor "hotplug" operates similary to "ondemand" and | ||
65 | +"conservative". It's decisions are based primarily on CPU load. Like | ||
66 | +"ondemand" the "hotplug" governor will ramp up to the highest frequency | ||
67 | +once the run-time tunable "up_threshold" parameter is crossed. Like | ||
68 | +"conservative", the "hotplug" governor exports a "down_threshold" | ||
69 | +parameter that is also tunable at run-time. When the "down_threshold" | ||
70 | +is crossed the CPU transitions to the next lowest frequency in the | ||
71 | +CPUfreq frequency table instead of decrementing the frequency based on a | ||
72 | +percentage of maximum load. | ||
73 | + | ||
74 | +The main reason "hotplug" governor exists is for architectures requiring | ||
75 | +that only the master CPU be online in order to hit low-power states | ||
76 | +(C-states). OMAP4 is one such example of this. The "hotplug" governor | ||
77 | +is also helpful in reducing thermal output in devices with tight thermal | ||
78 | +constraints. | ||
79 | + | ||
80 | +Auxillary CPUs are onlined/offline based on CPU load, but the decision | ||
81 | +to do so is made after averaging several sampling windows. This is to | ||
82 | +reduce CPU hotplug "thrashing", which can be caused by normal system | ||
83 | +entropy and leads to lots of spurious plug-in and plug-out transitions. | ||
84 | +The number of sampling periods averaged together is tunable via the | ||
85 | +"hotplug_in_sampling_periods" and "hotplug_out_sampling_periods" | ||
86 | +run-time tunable parameters. | ||
87 | + | ||
88 | 3. The Governor Interface in the CPUfreq Core | ||
89 | ============================================= | ||
90 | |||
91 | diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig | ||
92 | index ca8ee80..c716a0e 100644 | ||
93 | --- a/drivers/cpufreq/Kconfig | ||
94 | +++ b/drivers/cpufreq/Kconfig | ||
95 | @@ -110,6 +110,19 @@ config CPU_FREQ_DEFAULT_GOV_CONSERVATIVE | ||
96 | Be aware that not all cpufreq drivers support the conservative | ||
97 | governor. If unsure have a look at the help section of the | ||
98 | driver. Fallback governor will be the performance governor. | ||
99 | + | ||
100 | +config CPU_FREQ_DEFAULT_GOV_HOTPLUG | ||
101 | + bool "hotplug" | ||
102 | + select CPU_FREQ_GOV_HOTPLUG | ||
103 | + select CPU_FREQ_GOV_PERFORMANCE | ||
104 | + help | ||
105 | + Use the CPUFreq governor 'hotplug' as default. This allows you | ||
106 | + to get a full dynamic frequency capable system with CPU | ||
107 | + hotplug support by simply loading your cpufreq low-level | ||
108 | + hardware driver. Be aware that not all cpufreq drivers | ||
109 | + support the hotplug governor. If unsure have a look at | ||
110 | + the help section of the driver. Fallback governor will be the | ||
111 | + performance governor. | ||
112 | endchoice | ||
113 | |||
114 | config CPU_FREQ_GOV_PERFORMANCE | ||
115 | @@ -190,4 +203,24 @@ config CPU_FREQ_GOV_CONSERVATIVE | ||
116 | |||
117 | If in doubt, say N. | ||
118 | |||
119 | +config CPU_FREQ_GOV_HOTPLUG | ||
120 | + tristate "'hotplug' cpufreq governor" | ||
121 | + depends on CPU_FREQ && NO_HZ && HOTPLUG_CPU | ||
122 | + help | ||
123 | + 'hotplug' - this driver mimics the frequency scaling behavior | ||
124 | + in 'ondemand', but with several key differences. First is | ||
125 | + that frequency transitions use the CPUFreq table directly, | ||
126 | + instead of incrementing in a percentage of the maximum | ||
127 | + available frequency. Second 'hotplug' will offline auxillary | ||
128 | + CPUs when the system is idle, and online those CPUs once the | ||
129 | + system becomes busy again. This last feature is needed for | ||
130 | + architectures which transition to low power states when only | ||
131 | + the "master" CPU is online, or for thermally constrained | ||
132 | + devices. | ||
133 | + | ||
134 | + If you don't have one of these architectures or devices, use | ||
135 | + 'ondemand' instead. | ||
136 | + | ||
137 | + If in doubt, say N. | ||
138 | + | ||
139 | endif # CPU_FREQ | ||
140 | diff --git a/drivers/cpufreq/Makefile b/drivers/cpufreq/Makefile | ||
141 | index 71fc3b4..05d564c 100644 | ||
142 | --- a/drivers/cpufreq/Makefile | ||
143 | +++ b/drivers/cpufreq/Makefile | ||
144 | @@ -9,6 +9,7 @@ obj-$(CONFIG_CPU_FREQ_GOV_POWERSAVE) += cpufreq_powersave.o | ||
145 | obj-$(CONFIG_CPU_FREQ_GOV_USERSPACE) += cpufreq_userspace.o | ||
146 | obj-$(CONFIG_CPU_FREQ_GOV_ONDEMAND) += cpufreq_ondemand.o | ||
147 | obj-$(CONFIG_CPU_FREQ_GOV_CONSERVATIVE) += cpufreq_conservative.o | ||
148 | +obj-$(CONFIG_CPU_FREQ_GOV_HOTPLUG) += cpufreq_hotplug.o | ||
149 | |||
150 | # CPUfreq cross-arch helpers | ||
151 | obj-$(CONFIG_CPU_FREQ_TABLE) += freq_table.o | ||
152 | diff --git a/drivers/cpufreq/cpufreq_hotplug.c b/drivers/cpufreq/cpufreq_hotplug.c | ||
153 | new file mode 100644 | ||
154 | index 0000000..85aa6d2 | ||
155 | --- /dev/null | ||
156 | +++ b/drivers/cpufreq/cpufreq_hotplug.c | ||
157 | @@ -0,0 +1,705 @@ | ||
158 | +/* | ||
159 | + * CPUFreq hotplug governor | ||
160 | + * | ||
161 | + * Copyright (C) 2010 Texas Instruments, Inc. | ||
162 | + * Mike Turquette <mturquette@ti.com> | ||
163 | + * Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
164 | + * | ||
165 | + * Based on ondemand governor | ||
166 | + * Copyright (C) 2001 Russell King | ||
167 | + * (C) 2003 Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>, | ||
168 | + * Jun Nakajima <jun.nakajima@intel.com> | ||
169 | + * | ||
170 | + * This program is free software; you can redistribute it and/or modify | ||
171 | + * it under the terms of the GNU General Public License version 2 as | ||
172 | + * published by the Free Software Foundation. | ||
173 | + */ | ||
174 | + | ||
175 | +#include <linux/kernel.h> | ||
176 | +#include <linux/module.h> | ||
177 | +#include <linux/init.h> | ||
178 | +#include <linux/cpufreq.h> | ||
179 | +#include <linux/cpu.h> | ||
180 | +#include <linux/jiffies.h> | ||
181 | +#include <linux/kernel_stat.h> | ||
182 | +#include <linux/mutex.h> | ||
183 | +#include <linux/hrtimer.h> | ||
184 | +#include <linux/tick.h> | ||
185 | +#include <linux/ktime.h> | ||
186 | +#include <linux/sched.h> | ||
187 | +#include <linux/err.h> | ||
188 | +#include <linux/slab.h> | ||
189 | + | ||
190 | +/* greater than 80% avg load across online CPUs increases frequency */ | ||
191 | +#define DEFAULT_UP_FREQ_MIN_LOAD (80) | ||
192 | + | ||
193 | +/* less than 20% avg load across online CPUs decreases frequency */ | ||
194 | +#define DEFAULT_DOWN_FREQ_MAX_LOAD (20) | ||
195 | + | ||
196 | +/* default sampling period (uSec) is bogus; 10x ondemand's default for x86 */ | ||
197 | +#define DEFAULT_SAMPLING_PERIOD (100000) | ||
198 | + | ||
199 | +/* default number of sampling periods to average before hotplug-in decision */ | ||
200 | +#define DEFAULT_HOTPLUG_IN_SAMPLING_PERIODS (5) | ||
201 | + | ||
202 | +/* default number of sampling periods to average before hotplug-out decision */ | ||
203 | +#define DEFAULT_HOTPLUG_OUT_SAMPLING_PERIODS (20) | ||
204 | + | ||
205 | +static void do_dbs_timer(struct work_struct *work); | ||
206 | +static int cpufreq_governor_dbs(struct cpufreq_policy *policy, | ||
207 | + unsigned int event); | ||
208 | + | ||
209 | +#ifndef CONFIG_CPU_FREQ_DEFAULT_GOV_HOTPLUG | ||
210 | +static | ||
211 | +#endif | ||
212 | +struct cpufreq_governor cpufreq_gov_hotplug = { | ||
213 | + .name = "hotplug", | ||
214 | + .governor = cpufreq_governor_dbs, | ||
215 | + .owner = THIS_MODULE, | ||
216 | +}; | ||
217 | + | ||
218 | +struct cpu_dbs_info_s { | ||
219 | + cputime64_t prev_cpu_idle; | ||
220 | + cputime64_t prev_cpu_wall; | ||
221 | + cputime64_t prev_cpu_nice; | ||
222 | + struct cpufreq_policy *cur_policy; | ||
223 | + struct delayed_work work; | ||
224 | + struct cpufreq_frequency_table *freq_table; | ||
225 | + int cpu; | ||
226 | + /* | ||
227 | + * percpu mutex that serializes governor limit change with | ||
228 | + * do_dbs_timer invocation. We do not want do_dbs_timer to run | ||
229 | + * when user is changing the governor or limits. | ||
230 | + */ | ||
231 | + struct mutex timer_mutex; | ||
232 | +}; | ||
233 | +static DEFINE_PER_CPU(struct cpu_dbs_info_s, hp_cpu_dbs_info); | ||
234 | + | ||
235 | +static unsigned int dbs_enable; /* number of CPUs using this policy */ | ||
236 | + | ||
237 | +/* | ||
238 | + * dbs_mutex protects data in dbs_tuners_ins from concurrent changes on | ||
239 | + * different CPUs. It protects dbs_enable in governor start/stop. | ||
240 | + */ | ||
241 | +static DEFINE_MUTEX(dbs_mutex); | ||
242 | + | ||
243 | +static struct workqueue_struct *khotplug_wq; | ||
244 | + | ||
245 | +static struct dbs_tuners { | ||
246 | + unsigned int sampling_rate; | ||
247 | + unsigned int up_threshold; | ||
248 | + unsigned int down_threshold; | ||
249 | + unsigned int hotplug_in_sampling_periods; | ||
250 | + unsigned int hotplug_out_sampling_periods; | ||
251 | + unsigned int hotplug_load_index; | ||
252 | + unsigned int *hotplug_load_history; | ||
253 | + unsigned int ignore_nice; | ||
254 | + unsigned int io_is_busy; | ||
255 | +} dbs_tuners_ins = { | ||
256 | + .sampling_rate = DEFAULT_SAMPLING_PERIOD, | ||
257 | + .up_threshold = DEFAULT_UP_FREQ_MIN_LOAD, | ||
258 | + .down_threshold = DEFAULT_DOWN_FREQ_MAX_LOAD, | ||
259 | + .hotplug_in_sampling_periods = DEFAULT_HOTPLUG_IN_SAMPLING_PERIODS, | ||
260 | + .hotplug_out_sampling_periods = DEFAULT_HOTPLUG_OUT_SAMPLING_PERIODS, | ||
261 | + .hotplug_load_index = 0, | ||
262 | + .ignore_nice = 0, | ||
263 | + .io_is_busy = 0, | ||
264 | +}; | ||
265 | + | ||
266 | +/* | ||
267 | + * A corner case exists when switching io_is_busy at run-time: comparing idle | ||
268 | + * times from a non-io_is_busy period to an io_is_busy period (or vice-versa) | ||
269 | + * will misrepresent the actual change in system idleness. We ignore this | ||
270 | + * corner case: enabling io_is_busy might cause freq increase and disabling | ||
271 | + * might cause freq decrease, which probably matches the original intent. | ||
272 | + */ | ||
273 | +static inline cputime64_t get_cpu_idle_time(unsigned int cpu, cputime64_t *wall) | ||
274 | +{ | ||
275 | + u64 idle_time; | ||
276 | + u64 iowait_time; | ||
277 | + | ||
278 | + /* cpufreq-hotplug always assumes CONFIG_NO_HZ */ | ||
279 | + idle_time = get_cpu_idle_time_us(cpu, wall); | ||
280 | + | ||
281 | + /* add time spent doing I/O to idle time */ | ||
282 | + if (dbs_tuners_ins.io_is_busy) { | ||
283 | + iowait_time = get_cpu_iowait_time_us(cpu, wall); | ||
284 | + /* cpufreq-hotplug always assumes CONFIG_NO_HZ */ | ||
285 | + if (iowait_time != -1ULL && idle_time >= iowait_time) | ||
286 | + idle_time -= iowait_time; | ||
287 | + } | ||
288 | + | ||
289 | + return idle_time; | ||
290 | +} | ||
291 | + | ||
292 | +/************************** sysfs interface ************************/ | ||
293 | + | ||
294 | +/* XXX look at global sysfs macros in cpufreq.h, can those be used here? */ | ||
295 | + | ||
296 | +/* cpufreq_hotplug Governor Tunables */ | ||
297 | +#define show_one(file_name, object) \ | ||
298 | +static ssize_t show_##file_name \ | ||
299 | +(struct kobject *kobj, struct attribute *attr, char *buf) \ | ||
300 | +{ \ | ||
301 | + return sprintf(buf, "%u\n", dbs_tuners_ins.object); \ | ||
302 | +} | ||
303 | +show_one(sampling_rate, sampling_rate); | ||
304 | +show_one(up_threshold, up_threshold); | ||
305 | +show_one(down_threshold, down_threshold); | ||
306 | +show_one(hotplug_in_sampling_periods, hotplug_in_sampling_periods); | ||
307 | +show_one(hotplug_out_sampling_periods, hotplug_out_sampling_periods); | ||
308 | +show_one(ignore_nice_load, ignore_nice); | ||
309 | +show_one(io_is_busy, io_is_busy); | ||
310 | + | ||
311 | +static ssize_t store_sampling_rate(struct kobject *a, struct attribute *b, | ||
312 | + const char *buf, size_t count) | ||
313 | +{ | ||
314 | + unsigned int input; | ||
315 | + int ret; | ||
316 | + ret = sscanf(buf, "%u", &input); | ||
317 | + if (ret != 1) | ||
318 | + return -EINVAL; | ||
319 | + | ||
320 | + mutex_lock(&dbs_mutex); | ||
321 | + dbs_tuners_ins.sampling_rate = input; | ||
322 | + mutex_unlock(&dbs_mutex); | ||
323 | + | ||
324 | + return count; | ||
325 | +} | ||
326 | + | ||
327 | +static ssize_t store_up_threshold(struct kobject *a, struct attribute *b, | ||
328 | + const char *buf, size_t count) | ||
329 | +{ | ||
330 | + unsigned int input; | ||
331 | + int ret; | ||
332 | + ret = sscanf(buf, "%u", &input); | ||
333 | + | ||
334 | + if (ret != 1 || input <= dbs_tuners_ins.down_threshold) { | ||
335 | + return -EINVAL; | ||
336 | + } | ||
337 | + | ||
338 | + mutex_lock(&dbs_mutex); | ||
339 | + dbs_tuners_ins.up_threshold = input; | ||
340 | + mutex_unlock(&dbs_mutex); | ||
341 | + | ||
342 | + return count; | ||
343 | +} | ||
344 | + | ||
345 | +static ssize_t store_down_threshold(struct kobject *a, struct attribute *b, | ||
346 | + const char *buf, size_t count) | ||
347 | +{ | ||
348 | + unsigned int input; | ||
349 | + int ret; | ||
350 | + ret = sscanf(buf, "%u", &input); | ||
351 | + | ||
352 | + if (ret != 1 || input >= dbs_tuners_ins.up_threshold) { | ||
353 | + return -EINVAL; | ||
354 | + } | ||
355 | + | ||
356 | + mutex_lock(&dbs_mutex); | ||
357 | + dbs_tuners_ins.down_threshold = input; | ||
358 | + mutex_unlock(&dbs_mutex); | ||
359 | + | ||
360 | + return count; | ||
361 | +} | ||
362 | + | ||
363 | +static ssize_t store_hotplug_in_sampling_periods(struct kobject *a, | ||
364 | + struct attribute *b, const char *buf, size_t count) | ||
365 | +{ | ||
366 | + unsigned int input; | ||
367 | + unsigned int *temp; | ||
368 | + unsigned int max_windows; | ||
369 | + int ret; | ||
370 | + ret = sscanf(buf, "%u", &input); | ||
371 | + | ||
372 | + if (ret != 1) | ||
373 | + return -EINVAL; | ||
374 | + | ||
375 | + /* already using this value, bail out */ | ||
376 | + if (input == dbs_tuners_ins.hotplug_in_sampling_periods) | ||
377 | + return count; | ||
378 | + | ||
379 | + mutex_lock(&dbs_mutex); | ||
380 | + ret = count; | ||
381 | + max_windows = max(dbs_tuners_ins.hotplug_in_sampling_periods, | ||
382 | + dbs_tuners_ins.hotplug_out_sampling_periods); | ||
383 | + | ||
384 | + /* no need to resize array */ | ||
385 | + if (input <= max_windows) { | ||
386 | + dbs_tuners_ins.hotplug_in_sampling_periods = input; | ||
387 | + goto out; | ||
388 | + } | ||
389 | + | ||
390 | + /* resize array */ | ||
391 | + temp = kmalloc((sizeof(unsigned int) * input), GFP_KERNEL); | ||
392 | + | ||
393 | + if (!temp || IS_ERR(temp)) { | ||
394 | + ret = -ENOMEM; | ||
395 | + goto out; | ||
396 | + } | ||
397 | + | ||
398 | + memcpy(temp, dbs_tuners_ins.hotplug_load_history, | ||
399 | + (max_windows * sizeof(unsigned int))); | ||
400 | + kfree(dbs_tuners_ins.hotplug_load_history); | ||
401 | + | ||
402 | + /* replace old buffer, old number of sampling periods & old index */ | ||
403 | + dbs_tuners_ins.hotplug_load_history = temp; | ||
404 | + dbs_tuners_ins.hotplug_in_sampling_periods = input; | ||
405 | + dbs_tuners_ins.hotplug_load_index = max_windows; | ||
406 | +out: | ||
407 | + mutex_unlock(&dbs_mutex); | ||
408 | + | ||
409 | + return ret; | ||
410 | +} | ||
411 | + | ||
412 | +static ssize_t store_hotplug_out_sampling_periods(struct kobject *a, | ||
413 | + struct attribute *b, const char *buf, size_t count) | ||
414 | +{ | ||
415 | + unsigned int input; | ||
416 | + unsigned int *temp; | ||
417 | + unsigned int max_windows; | ||
418 | + int ret; | ||
419 | + ret = sscanf(buf, "%u", &input); | ||
420 | + | ||
421 | + if (ret != 1) | ||
422 | + return -EINVAL; | ||
423 | + | ||
424 | + /* already using this value, bail out */ | ||
425 | + if (input == dbs_tuners_ins.hotplug_out_sampling_periods) | ||
426 | + return count; | ||
427 | + | ||
428 | + mutex_lock(&dbs_mutex); | ||
429 | + ret = count; | ||
430 | + max_windows = max(dbs_tuners_ins.hotplug_in_sampling_periods, | ||
431 | + dbs_tuners_ins.hotplug_out_sampling_periods); | ||
432 | + | ||
433 | + /* no need to resize array */ | ||
434 | + if (input <= max_windows) { | ||
435 | + dbs_tuners_ins.hotplug_out_sampling_periods = input; | ||
436 | + goto out; | ||
437 | + } | ||
438 | + | ||
439 | + /* resize array */ | ||
440 | + temp = kmalloc((sizeof(unsigned int) * input), GFP_KERNEL); | ||
441 | + | ||
442 | + if (!temp || IS_ERR(temp)) { | ||
443 | + ret = -ENOMEM; | ||
444 | + goto out; | ||
445 | + } | ||
446 | + | ||
447 | + memcpy(temp, dbs_tuners_ins.hotplug_load_history, | ||
448 | + (max_windows * sizeof(unsigned int))); | ||
449 | + kfree(dbs_tuners_ins.hotplug_load_history); | ||
450 | + | ||
451 | + /* replace old buffer, old number of sampling periods & old index */ | ||
452 | + dbs_tuners_ins.hotplug_load_history = temp; | ||
453 | + dbs_tuners_ins.hotplug_out_sampling_periods = input; | ||
454 | + dbs_tuners_ins.hotplug_load_index = max_windows; | ||
455 | +out: | ||
456 | + mutex_unlock(&dbs_mutex); | ||
457 | + | ||
458 | + return ret; | ||
459 | +} | ||
460 | + | ||
461 | +static ssize_t store_ignore_nice_load(struct kobject *a, struct attribute *b, | ||
462 | + const char *buf, size_t count) | ||
463 | +{ | ||
464 | + unsigned int input; | ||
465 | + int ret; | ||
466 | + | ||
467 | + unsigned int j; | ||
468 | + | ||
469 | + ret = sscanf(buf, "%u", &input); | ||
470 | + if (ret != 1) | ||
471 | + return -EINVAL; | ||
472 | + | ||
473 | + if (input > 1) | ||
474 | + input = 1; | ||
475 | + | ||
476 | + mutex_lock(&dbs_mutex); | ||
477 | + if (input == dbs_tuners_ins.ignore_nice) { /* nothing to do */ | ||
478 | + mutex_unlock(&dbs_mutex); | ||
479 | + return count; | ||
480 | + } | ||
481 | + dbs_tuners_ins.ignore_nice = input; | ||
482 | + | ||
483 | + /* we need to re-evaluate prev_cpu_idle */ | ||
484 | + for_each_online_cpu(j) { | ||
485 | + struct cpu_dbs_info_s *dbs_info; | ||
486 | + dbs_info = &per_cpu(hp_cpu_dbs_info, j); | ||
487 | + dbs_info->prev_cpu_idle = get_cpu_idle_time(j, | ||
488 | + &dbs_info->prev_cpu_wall); | ||
489 | + if (dbs_tuners_ins.ignore_nice) | ||
490 | + dbs_info->prev_cpu_nice = kstat_cpu(j).cpustat.nice; | ||
491 | + | ||
492 | + } | ||
493 | + mutex_unlock(&dbs_mutex); | ||
494 | + | ||
495 | + return count; | ||
496 | +} | ||
497 | + | ||
498 | +static ssize_t store_io_is_busy(struct kobject *a, struct attribute *b, | ||
499 | + const char *buf, size_t count) | ||
500 | +{ | ||
501 | + unsigned int input; | ||
502 | + int ret; | ||
503 | + | ||
504 | + ret = sscanf(buf, "%u", &input); | ||
505 | + if (ret != 1) | ||
506 | + return -EINVAL; | ||
507 | + | ||
508 | + mutex_lock(&dbs_mutex); | ||
509 | + dbs_tuners_ins.io_is_busy = !!input; | ||
510 | + mutex_unlock(&dbs_mutex); | ||
511 | + | ||
512 | + return count; | ||
513 | +} | ||
514 | + | ||
515 | +define_one_global_rw(sampling_rate); | ||
516 | +define_one_global_rw(up_threshold); | ||
517 | +define_one_global_rw(down_threshold); | ||
518 | +define_one_global_rw(hotplug_in_sampling_periods); | ||
519 | +define_one_global_rw(hotplug_out_sampling_periods); | ||
520 | +define_one_global_rw(ignore_nice_load); | ||
521 | +define_one_global_rw(io_is_busy); | ||
522 | + | ||
523 | +static struct attribute *dbs_attributes[] = { | ||
524 | + &sampling_rate.attr, | ||
525 | + &up_threshold.attr, | ||
526 | + &down_threshold.attr, | ||
527 | + &hotplug_in_sampling_periods.attr, | ||
528 | + &hotplug_out_sampling_periods.attr, | ||
529 | + &ignore_nice_load.attr, | ||
530 | + &io_is_busy.attr, | ||
531 | + NULL | ||
532 | +}; | ||
533 | + | ||
534 | +static struct attribute_group dbs_attr_group = { | ||
535 | + .attrs = dbs_attributes, | ||
536 | + .name = "hotplug", | ||
537 | +}; | ||
538 | + | ||
539 | +/************************** sysfs end ************************/ | ||
540 | + | ||
541 | +static void dbs_check_cpu(struct cpu_dbs_info_s *this_dbs_info) | ||
542 | +{ | ||
543 | + /* combined load of all enabled CPUs */ | ||
544 | + unsigned int total_load = 0; | ||
545 | + /* single largest CPU load */ | ||
546 | + unsigned int max_load = 0; | ||
547 | + /* average load across all enabled CPUs */ | ||
548 | + unsigned int avg_load = 0; | ||
549 | + /* average load across multiple sampling periods for hotplug events */ | ||
550 | + unsigned int hotplug_in_avg_load = 0; | ||
551 | + unsigned int hotplug_out_avg_load = 0; | ||
552 | + /* number of sampling periods averaged for hotplug decisions */ | ||
553 | + unsigned int periods; | ||
554 | + | ||
555 | + struct cpufreq_policy *policy; | ||
556 | + unsigned int index = 0; | ||
557 | + unsigned int i, j; | ||
558 | + | ||
559 | + policy = this_dbs_info->cur_policy; | ||
560 | + | ||
561 | + /* | ||
562 | + * cpu load accounting | ||
563 | + * get highest load, total load and average load across all CPUs | ||
564 | + */ | ||
565 | + for_each_cpu(j, policy->cpus) { | ||
566 | + unsigned int load; | ||
567 | + unsigned int idle_time, wall_time; | ||
568 | + cputime64_t cur_wall_time, cur_idle_time; | ||
569 | + struct cpu_dbs_info_s *j_dbs_info; | ||
570 | + | ||
571 | + j_dbs_info = &per_cpu(hp_cpu_dbs_info, j); | ||
572 | + | ||
573 | + /* update both cur_idle_time and cur_wall_time */ | ||
574 | + cur_idle_time = get_cpu_idle_time(j, &cur_wall_time); | ||
575 | + | ||
576 | + /* how much wall time has passed since last iteration? */ | ||
577 | + wall_time = (unsigned int) cputime64_sub(cur_wall_time, | ||
578 | + j_dbs_info->prev_cpu_wall); | ||
579 | + j_dbs_info->prev_cpu_wall = cur_wall_time; | ||
580 | + | ||
581 | + /* how much idle time has passed since last iteration? */ | ||
582 | + idle_time = (unsigned int) cputime64_sub(cur_idle_time, | ||
583 | + j_dbs_info->prev_cpu_idle); | ||
584 | + j_dbs_info->prev_cpu_idle = cur_idle_time; | ||
585 | + | ||
586 | + if (unlikely(!wall_time || wall_time < idle_time)) | ||
587 | + continue; | ||
588 | + | ||
589 | + /* load is the percentage of time not spent in idle */ | ||
590 | + load = 100 * (wall_time - idle_time) / wall_time; | ||
591 | + | ||
592 | + /* keep track of combined load across all CPUs */ | ||
593 | + total_load += load; | ||
594 | + | ||
595 | + /* keep track of highest single load across all CPUs */ | ||
596 | + if (load > max_load) | ||
597 | + max_load = load; | ||
598 | + } | ||
599 | + | ||
600 | + /* calculate the average load across all related CPUs */ | ||
601 | + avg_load = total_load / num_online_cpus(); | ||
602 | + | ||
603 | + | ||
604 | + /* | ||
605 | + * hotplug load accounting | ||
606 | + * average load over multiple sampling periods | ||
607 | + */ | ||
608 | + | ||
609 | + /* how many sampling periods do we use for hotplug decisions? */ | ||
610 | + periods = max(dbs_tuners_ins.hotplug_in_sampling_periods, | ||
611 | + dbs_tuners_ins.hotplug_out_sampling_periods); | ||
612 | + | ||
613 | + /* store avg_load in the circular buffer */ | ||
614 | + dbs_tuners_ins.hotplug_load_history[dbs_tuners_ins.hotplug_load_index] | ||
615 | + = avg_load; | ||
616 | + | ||
617 | + /* compute average load across in & out sampling periods */ | ||
618 | + for (i = 0, j = dbs_tuners_ins.hotplug_load_index; | ||
619 | + i < periods; i++, j--) { | ||
620 | + if (i < dbs_tuners_ins.hotplug_in_sampling_periods) | ||
621 | + hotplug_in_avg_load += | ||
622 | + dbs_tuners_ins.hotplug_load_history[j]; | ||
623 | + if (i < dbs_tuners_ins.hotplug_out_sampling_periods) | ||
624 | + hotplug_out_avg_load += | ||
625 | + dbs_tuners_ins.hotplug_load_history[j]; | ||
626 | + | ||
627 | + if (j == 0) | ||
628 | + j = periods; | ||
629 | + } | ||
630 | + | ||
631 | + hotplug_in_avg_load = hotplug_in_avg_load / | ||
632 | + dbs_tuners_ins.hotplug_in_sampling_periods; | ||
633 | + | ||
634 | + hotplug_out_avg_load = hotplug_out_avg_load / | ||
635 | + dbs_tuners_ins.hotplug_out_sampling_periods; | ||
636 | + | ||
637 | + /* return to first element if we're at the circular buffer's end */ | ||
638 | + if (++dbs_tuners_ins.hotplug_load_index == periods) | ||
639 | + dbs_tuners_ins.hotplug_load_index = 0; | ||
640 | + | ||
641 | + /* check for frequency increase */ | ||
642 | + if (avg_load > dbs_tuners_ins.up_threshold) { | ||
643 | + /* should we enable auxillary CPUs? */ | ||
644 | + if (num_online_cpus() < 2 && hotplug_in_avg_load > | ||
645 | + dbs_tuners_ins.up_threshold) { | ||
646 | + /* hotplug with cpufreq is nasty | ||
647 | + * a call to cpufreq_governor_dbs may cause a lockup. | ||
648 | + * wq is not running here so its safe. | ||
649 | + */ | ||
650 | + mutex_unlock(&this_dbs_info->timer_mutex); | ||
651 | + cpu_up(1); | ||
652 | + mutex_lock(&this_dbs_info->timer_mutex); | ||
653 | + goto out; | ||
654 | + } | ||
655 | + | ||
656 | + /* increase to highest frequency supported */ | ||
657 | + if (policy->cur < policy->max) | ||
658 | + __cpufreq_driver_target(policy, policy->max, | ||
659 | + CPUFREQ_RELATION_H); | ||
660 | + | ||
661 | + goto out; | ||
662 | + } | ||
663 | + | ||
664 | + /* check for frequency decrease */ | ||
665 | + if (avg_load < dbs_tuners_ins.down_threshold) { | ||
666 | + /* are we at the minimum frequency already? */ | ||
667 | + if (policy->cur == policy->min) { | ||
668 | + /* should we disable auxillary CPUs? */ | ||
669 | + if (num_online_cpus() > 1 && hotplug_out_avg_load < | ||
670 | + dbs_tuners_ins.down_threshold) { | ||
671 | + mutex_unlock(&this_dbs_info->timer_mutex); | ||
672 | + cpu_down(1); | ||
673 | + mutex_lock(&this_dbs_info->timer_mutex); | ||
674 | + } | ||
675 | + goto out; | ||
676 | + } | ||
677 | + | ||
678 | + /* bump down to the next lowest frequency in the table */ | ||
679 | + if (cpufreq_frequency_table_next_lowest(policy, | ||
680 | + this_dbs_info->freq_table, &index)) { | ||
681 | + pr_err("%s: failed to get next lowest frequency\n", | ||
682 | + __func__); | ||
683 | + goto out; | ||
684 | + } | ||
685 | + | ||
686 | + __cpufreq_driver_target(policy, | ||
687 | + this_dbs_info->freq_table[index].frequency, | ||
688 | + CPUFREQ_RELATION_L); | ||
689 | + } | ||
690 | +out: | ||
691 | + return; | ||
692 | +} | ||
693 | + | ||
694 | +static void do_dbs_timer(struct work_struct *work) | ||
695 | +{ | ||
696 | + struct cpu_dbs_info_s *dbs_info = | ||
697 | + container_of(work, struct cpu_dbs_info_s, work.work); | ||
698 | + unsigned int cpu = dbs_info->cpu; | ||
699 | + | ||
700 | + /* We want all related CPUs to do sampling nearly on same jiffy */ | ||
701 | + int delay = usecs_to_jiffies(dbs_tuners_ins.sampling_rate); | ||
702 | + | ||
703 | + mutex_lock(&dbs_info->timer_mutex); | ||
704 | + dbs_check_cpu(dbs_info); | ||
705 | + queue_delayed_work_on(cpu, khotplug_wq, &dbs_info->work, delay); | ||
706 | + mutex_unlock(&dbs_info->timer_mutex); | ||
707 | +} | ||
708 | + | ||
709 | +static inline void dbs_timer_init(struct cpu_dbs_info_s *dbs_info) | ||
710 | +{ | ||
711 | + /* We want all related CPUs to do sampling nearly on same jiffy */ | ||
712 | + int delay = usecs_to_jiffies(dbs_tuners_ins.sampling_rate); | ||
713 | + delay -= jiffies % delay; | ||
714 | + | ||
715 | + INIT_DELAYED_WORK_DEFERRABLE(&dbs_info->work, do_dbs_timer); | ||
716 | + queue_delayed_work_on(dbs_info->cpu, khotplug_wq, &dbs_info->work, | ||
717 | + delay); | ||
718 | +} | ||
719 | + | ||
720 | +static inline void dbs_timer_exit(struct cpu_dbs_info_s *dbs_info) | ||
721 | +{ | ||
722 | + cancel_delayed_work_sync(&dbs_info->work); | ||
723 | +} | ||
724 | + | ||
725 | +static int cpufreq_governor_dbs(struct cpufreq_policy *policy, | ||
726 | + unsigned int event) | ||
727 | +{ | ||
728 | + unsigned int cpu = policy->cpu; | ||
729 | + struct cpu_dbs_info_s *this_dbs_info; | ||
730 | + unsigned int i, j, max_periods; | ||
731 | + int rc; | ||
732 | + | ||
733 | + this_dbs_info = &per_cpu(hp_cpu_dbs_info, cpu); | ||
734 | + | ||
735 | + switch (event) { | ||
736 | + case CPUFREQ_GOV_START: | ||
737 | + if ((!cpu_online(cpu)) || (!policy->cur)) | ||
738 | + return -EINVAL; | ||
739 | + | ||
740 | + mutex_lock(&dbs_mutex); | ||
741 | + dbs_enable++; | ||
742 | + for_each_cpu(j, policy->cpus) { | ||
743 | + struct cpu_dbs_info_s *j_dbs_info; | ||
744 | + j_dbs_info = &per_cpu(hp_cpu_dbs_info, j); | ||
745 | + j_dbs_info->cur_policy = policy; | ||
746 | + | ||
747 | + j_dbs_info->prev_cpu_idle = get_cpu_idle_time(j, | ||
748 | + &j_dbs_info->prev_cpu_wall); | ||
749 | + if (dbs_tuners_ins.ignore_nice) { | ||
750 | + j_dbs_info->prev_cpu_nice = | ||
751 | + kstat_cpu(j).cpustat.nice; | ||
752 | + } | ||
753 | + | ||
754 | + max_periods = max(DEFAULT_HOTPLUG_IN_SAMPLING_PERIODS, | ||
755 | + DEFAULT_HOTPLUG_OUT_SAMPLING_PERIODS); | ||
756 | + dbs_tuners_ins.hotplug_load_history = kmalloc( | ||
757 | + (sizeof(unsigned int) * max_periods), | ||
758 | + GFP_KERNEL); | ||
759 | + if (!dbs_tuners_ins.hotplug_load_history) { | ||
760 | + WARN_ON(1); | ||
761 | + return -ENOMEM; | ||
762 | + } | ||
763 | + for (i = 0; i < max_periods; i++) | ||
764 | + dbs_tuners_ins.hotplug_load_history[i] = 50; | ||
765 | + } | ||
766 | + this_dbs_info->cpu = cpu; | ||
767 | + this_dbs_info->freq_table = cpufreq_frequency_get_table(cpu); | ||
768 | + /* | ||
769 | + * Start the timerschedule work, when this governor | ||
770 | + * is used for first time | ||
771 | + */ | ||
772 | + if (dbs_enable == 1) { | ||
773 | + rc = sysfs_create_group(cpufreq_global_kobject, | ||
774 | + &dbs_attr_group); | ||
775 | + if (rc) { | ||
776 | + mutex_unlock(&dbs_mutex); | ||
777 | + return rc; | ||
778 | + } | ||
779 | + } | ||
780 | + mutex_unlock(&dbs_mutex); | ||
781 | + | ||
782 | + mutex_init(&this_dbs_info->timer_mutex); | ||
783 | + dbs_timer_init(this_dbs_info); | ||
784 | + break; | ||
785 | + | ||
786 | + case CPUFREQ_GOV_STOP: | ||
787 | + dbs_timer_exit(this_dbs_info); | ||
788 | + | ||
789 | + mutex_lock(&dbs_mutex); | ||
790 | + mutex_destroy(&this_dbs_info->timer_mutex); | ||
791 | + dbs_enable--; | ||
792 | + mutex_unlock(&dbs_mutex); | ||
793 | + if (!dbs_enable) | ||
794 | + sysfs_remove_group(cpufreq_global_kobject, | ||
795 | + &dbs_attr_group); | ||
796 | + kfree(dbs_tuners_ins.hotplug_load_history); | ||
797 | + /* | ||
798 | + * XXX BIG CAVEAT: Stopping the governor with CPU1 offline | ||
799 | + * will result in it remaining offline until the user onlines | ||
800 | + * it again. It is up to the user to do this (for now). | ||
801 | + */ | ||
802 | + break; | ||
803 | + | ||
804 | + case CPUFREQ_GOV_LIMITS: | ||
805 | + mutex_lock(&this_dbs_info->timer_mutex); | ||
806 | + if (policy->max < this_dbs_info->cur_policy->cur) | ||
807 | + __cpufreq_driver_target(this_dbs_info->cur_policy, | ||
808 | + policy->max, CPUFREQ_RELATION_H); | ||
809 | + else if (policy->min > this_dbs_info->cur_policy->cur) | ||
810 | + __cpufreq_driver_target(this_dbs_info->cur_policy, | ||
811 | + policy->min, CPUFREQ_RELATION_L); | ||
812 | + mutex_unlock(&this_dbs_info->timer_mutex); | ||
813 | + break; | ||
814 | + } | ||
815 | + return 0; | ||
816 | +} | ||
817 | + | ||
818 | +static int __init cpufreq_gov_dbs_init(void) | ||
819 | +{ | ||
820 | + int err; | ||
821 | + cputime64_t wall; | ||
822 | + u64 idle_time; | ||
823 | + int cpu = get_cpu(); | ||
824 | + | ||
825 | + idle_time = get_cpu_idle_time_us(cpu, &wall); | ||
826 | + put_cpu(); | ||
827 | + if (idle_time != -1ULL) { | ||
828 | + dbs_tuners_ins.up_threshold = DEFAULT_UP_FREQ_MIN_LOAD; | ||
829 | + } else { | ||
830 | + pr_err("cpufreq-hotplug: %s: assumes CONFIG_NO_HZ\n", | ||
831 | + __func__); | ||
832 | + return -EINVAL; | ||
833 | + } | ||
834 | + | ||
835 | + khotplug_wq = create_workqueue("khotplug"); | ||
836 | + if (!khotplug_wq) { | ||
837 | + pr_err("Creation of khotplug failed\n"); | ||
838 | + return -EFAULT; | ||
839 | + } | ||
840 | + err = cpufreq_register_governor(&cpufreq_gov_hotplug); | ||
841 | + if (err) | ||
842 | + destroy_workqueue(khotplug_wq); | ||
843 | + | ||
844 | + return err; | ||
845 | +} | ||
846 | + | ||
847 | +static void __exit cpufreq_gov_dbs_exit(void) | ||
848 | +{ | ||
849 | + cpufreq_unregister_governor(&cpufreq_gov_hotplug); | ||
850 | + destroy_workqueue(khotplug_wq); | ||
851 | +} | ||
852 | + | ||
853 | +MODULE_AUTHOR("Mike Turquette <mturquette@ti.com>"); | ||
854 | +MODULE_DESCRIPTION("'cpufreq_hotplug' - cpufreq governor for dynamic frequency scaling and CPU hotplugging"); | ||
855 | +MODULE_LICENSE("GPL"); | ||
856 | + | ||
857 | +#ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_HOTPLUG | ||
858 | +fs_initcall(cpufreq_gov_dbs_init); | ||
859 | +#else | ||
860 | +module_init(cpufreq_gov_dbs_init); | ||
861 | +#endif | ||
862 | +module_exit(cpufreq_gov_dbs_exit); | ||
863 | diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h | ||
864 | index a38fca8..6cbc3df 100644 | ||
865 | --- a/include/linux/cpufreq.h | ||
866 | +++ b/include/linux/cpufreq.h | ||
867 | @@ -355,6 +355,9 @@ extern struct cpufreq_governor cpufreq_gov_ondemand; | ||
868 | #elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE) | ||
869 | extern struct cpufreq_governor cpufreq_gov_conservative; | ||
870 | #define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_conservative) | ||
871 | +#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_HOTPLUG) | ||
872 | +extern struct cpufreq_governor cpufreq_gov_hotplug; | ||
873 | +#define CPUFREQ_DEFAULT_GOVERNOR (&cpufreq_gov_hotplug) | ||
874 | #endif | ||
875 | |||
876 | |||
877 | -- | ||
878 | 1.6.6.1 | ||
879 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0044-OMAP-CPUfreq-ensure-driver-initializes-after-cpufreq.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0044-OMAP-CPUfreq-ensure-driver-initializes-after-cpufreq.patch new file mode 100644 index 00000000..a8da2573 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0044-OMAP-CPUfreq-ensure-driver-initializes-after-cpufreq.patch | |||
@@ -0,0 +1,27 @@ | |||
1 | From 48ec8ab4a64104f7ecc9dabb9e23e2c3d0d1feee Mon Sep 17 00:00:00 2001 | ||
2 | From: Peter 'p2' De Schrijver <peter.de-schrijver@nokia.com> | ||
3 | Date: Wed, 11 Aug 2010 17:02:43 -0700 | ||
4 | Subject: [PATCH 44/59] OMAP: CPUfreq: ensure driver initializes after cpufreq framework and governors | ||
5 | |||
6 | Signed-off-by: Peter 'p2' De Schrijver <peter.de-schrijver@nokia.com> | ||
7 | Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com> | ||
8 | --- | ||
9 | arch/arm/plat-omap/cpu-omap.c | 2 +- | ||
10 | 1 files changed, 1 insertions(+), 1 deletions(-) | ||
11 | |||
12 | diff --git a/arch/arm/plat-omap/cpu-omap.c b/arch/arm/plat-omap/cpu-omap.c | ||
13 | index da4f68d..cd09d4b 100644 | ||
14 | --- a/arch/arm/plat-omap/cpu-omap.c | ||
15 | +++ b/arch/arm/plat-omap/cpu-omap.c | ||
16 | @@ -160,7 +160,7 @@ static int __init omap_cpufreq_init(void) | ||
17 | return cpufreq_register_driver(&omap_driver); | ||
18 | } | ||
19 | |||
20 | -arch_initcall(omap_cpufreq_init); | ||
21 | +late_initcall(omap_cpufreq_init); | ||
22 | |||
23 | /* | ||
24 | * if ever we want to remove this, upon cleanup call: | ||
25 | -- | ||
26 | 1.6.6.1 | ||
27 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0045-OMAP-CPUfreq-ensure-policy-is-fully-initialized.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0045-OMAP-CPUfreq-ensure-policy-is-fully-initialized.patch new file mode 100644 index 00000000..132aeec6 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0045-OMAP-CPUfreq-ensure-policy-is-fully-initialized.patch | |||
@@ -0,0 +1,31 @@ | |||
1 | From 56cee7bf023af728c952f692f4c24822392882a1 Mon Sep 17 00:00:00 2001 | ||
2 | From: Kevin Hilman <khilman@deeprootsystems.com> | ||
3 | Date: Wed, 11 Aug 2010 17:05:38 -0700 | ||
4 | Subject: [PATCH 45/59] OMAP: CPUfreq: ensure policy is fully initialized | ||
5 | |||
6 | Ensure policy min/max/cur values are initialized when OMAP | ||
7 | CPUfreq driver starts. | ||
8 | |||
9 | Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com> | ||
10 | --- | ||
11 | arch/arm/plat-omap/cpu-omap.c | 4 ++++ | ||
12 | 1 files changed, 4 insertions(+), 0 deletions(-) | ||
13 | |||
14 | diff --git a/arch/arm/plat-omap/cpu-omap.c b/arch/arm/plat-omap/cpu-omap.c | ||
15 | index cd09d4b..1b36664 100644 | ||
16 | --- a/arch/arm/plat-omap/cpu-omap.c | ||
17 | +++ b/arch/arm/plat-omap/cpu-omap.c | ||
18 | @@ -126,6 +126,10 @@ static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy) | ||
19 | VERY_HI_RATE) / 1000; | ||
20 | } | ||
21 | |||
22 | + policy->min = policy->cpuinfo.min_freq; | ||
23 | + policy->max = policy->cpuinfo.max_freq; | ||
24 | + policy->cur = omap_getspeed(0); | ||
25 | + | ||
26 | /* FIXME: what's the actual transition time? */ | ||
27 | policy->cpuinfo.transition_latency = 300 * 1000; | ||
28 | |||
29 | -- | ||
30 | 1.6.6.1 | ||
31 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0046-OMAP3-PM-CPUFreq-driver-for-OMAP3.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0046-OMAP3-PM-CPUFreq-driver-for-OMAP3.patch new file mode 100644 index 00000000..371ad292 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0046-OMAP3-PM-CPUFreq-driver-for-OMAP3.patch | |||
@@ -0,0 +1,263 @@ | |||
1 | From a5072bdf333b8fb1080aac5d2b986553ea8de0f9 Mon Sep 17 00:00:00 2001 | ||
2 | From: Rajendra Nayak <rnayak@ti.com> | ||
3 | Date: Mon, 10 Nov 2008 17:00:25 +0530 | ||
4 | Subject: [PATCH 46/59] OMAP3 PM: CPUFreq driver for OMAP3 | ||
5 | |||
6 | CPUFreq driver for OMAP3 | ||
7 | |||
8 | With additional fixes and cleanups from Tero Kristo: | ||
9 | - Fix rate calculation bug in omap3_select_table_rate | ||
10 | - Refreshed DVFS VDD1 control against latest clock fw | ||
11 | |||
12 | Signed-off-by: Tero Kristo <tero.kristo@nokia.com> | ||
13 | Signed-off-by: Rajendra Nayak <rnayak@ti.com> | ||
14 | |||
15 | OMAP3: PM: CPUFreq: Fix omap_getspeed. | ||
16 | |||
17 | Signed-off-by: Peter 'p2' De Schrijver <peter.de-schrijver@nokia.com> | ||
18 | |||
19 | Make sure omap cpufreq driver initializes after cpufreq framework and governors | ||
20 | |||
21 | Signed-off-by: Peter 'p2' De Schrijver <peter.de-schrijver@nokia.com> | ||
22 | |||
23 | merge: CPUFreq: remove obsolete funcs | ||
24 | |||
25 | OMAP3 clock: Update cpufreq driver | ||
26 | |||
27 | This patch removes all refrences to virtual clock | ||
28 | nodes in CPUFreq driver. | ||
29 | |||
30 | Signed-off-by: Rajendra Nayak <rnayak@ti.com> | ||
31 | Signed-off-by: Tero Kristo <tero.kristo@nokia.com> | ||
32 | Signed-off-by: Jean Pihet <jpihet@mvista.com> | ||
33 | |||
34 | PM: Prevent direct cpufreq scaling during initialization | ||
35 | |||
36 | It is seen that the OMAP specific cpufreq initialization code tries to | ||
37 | scale the MPU frequency to the highest possible without taking care of | ||
38 | the voltage level. On power on reset the power IC does not provide the | ||
39 | necessary voltage for the highest available MPU frequency (that would | ||
40 | satisfy all Si families). This potentially is an window of opportunity | ||
41 | for things to go wrong. | ||
42 | |||
43 | Signed-off-by: Romit Dasgupta <romit@ti.com> | ||
44 | Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com> | ||
45 | |||
46 | OMAP3: PM: enable 600MHz (overdrive) OPP | ||
47 | |||
48 | Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com> | ||
49 | |||
50 | omap3: introduce cpufreq | ||
51 | |||
52 | OMAP OPP layer functions now have dependencies of CONFIG_CPU_FREQ only. | ||
53 | |||
54 | With this patch, omap opp layer now has its compilation flags | ||
55 | bound to CONFIG_CPU_FREQ. Also its code has been removed from pm34xx.c. | ||
56 | |||
57 | A new file has been created to contain cpu freq code related to | ||
58 | OMAP3: cpufreq34xx.c | ||
59 | |||
60 | OMAP34xx and OMAP36xx family OPPs are made available | ||
61 | |||
62 | Signed-off-by: Eduardo Valentin <eduardo.valentin@nokia.com> | ||
63 | Signed-off-by: Paul Walmsley <paul@pwsan.com> | ||
64 | Signed-off-by: Nishanth Menon <nm@ti.com> | ||
65 | Signed-off-by: Vishwanath BS <vishwanath.bs@ti.com> | ||
66 | Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com> | ||
67 | Signed-off-by: Romit Dasgupta <romit@ti.com> | ||
68 | Signed-off-by: Rajendra Nayak <rnayak@ti.com> | ||
69 | |||
70 | omap3: cpufreq: allow default opp table init | ||
71 | |||
72 | For board files which choose to override the defaults, the existing | ||
73 | mechanism will work, for boards that would like to work with defaults, | ||
74 | allow init_common_hw to call init_opp_table to initialize if not | ||
75 | already initialized. this will allow all omap boards which have opp | ||
76 | tables predefined for a silicon to use the same. | ||
77 | |||
78 | Originally reported for overo: | ||
79 | http://marc.info/?t=127265269400004&r=1&w=2 | ||
80 | |||
81 | Signed-off-by: Nishanth Menon <nm@ti.com> | ||
82 | Reported-by: Peter Tseng <tsenpet09@gmail.com> | ||
83 | Cc: Cliff Brake <cliff.brake@gmail.com> | ||
84 | Cc: Kevin Hilman <khilman@deeprootsystems.com> | ||
85 | |||
86 | OMAP2: update OPP data to be device based | ||
87 | |||
88 | Cc: Nishanth Menon <nm@ti.com> | ||
89 | Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com> | ||
90 | |||
91 | OMAP3: CPUfreq: update to device-based OPP API | ||
92 | |||
93 | Update usage of OPP API to use new device-based API. This requires | ||
94 | getting the 'struct device' for the MPU and using that with the OPP | ||
95 | API. | ||
96 | |||
97 | Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com> | ||
98 | |||
99 | omap3: opp: make independent of cpufreq | ||
100 | |||
101 | Make opp3xx data which is registered with the opp layer | ||
102 | dependent purely on CONFIG_PM as opp layer and pm.c users | ||
103 | are CONFIG_PM dependent not cpufreq dependent. | ||
104 | so we rename the data definition to opp3xxx_data.c (inline with what | ||
105 | we have for omap2), also move the build definition to be under | ||
106 | the existing CONFIG_PM build instead of CPUFREQ. | ||
107 | |||
108 | Cc: Eduardo Valentin <eduardo.valentin@nokia.com> | ||
109 | Cc: Kevin Hilman <khilman@deeprootsystems.com> | ||
110 | Cc: Paul Walmsley <paul@pwsan.com> | ||
111 | Cc: Rajendra Nayak <rnayak@ti.com> | ||
112 | Cc: Sanjeev Premi <premi@ti.com> | ||
113 | Cc: Thara Gopinath <thara@ti.com> | ||
114 | Cc: Tony Lindgren <tony@atomide.com> | ||
115 | |||
116 | Signed-off-by: Nishanth Menon <nm@ti.com> | ||
117 | --- | ||
118 | arch/arm/mach-omap2/clock.h | 14 +++++++++++++- | ||
119 | arch/arm/mach-omap2/clock34xx.c | 2 ++ | ||
120 | arch/arm/plat-omap/cpu-omap.c | 34 +++++++++++++++++++++++++++++++--- | ||
121 | 3 files changed, 46 insertions(+), 4 deletions(-) | ||
122 | |||
123 | diff --git a/arch/arm/mach-omap2/clock.h b/arch/arm/mach-omap2/clock.h | ||
124 | index e10ff2b..0a07e50 100644 | ||
125 | --- a/arch/arm/mach-omap2/clock.h | ||
126 | +++ b/arch/arm/mach-omap2/clock.h | ||
127 | @@ -141,7 +141,9 @@ extern const struct clksel_rate gpt_sys_rates[]; | ||
128 | extern const struct clksel_rate gfx_l3_rates[]; | ||
129 | extern const struct clksel_rate dsp_ick_rates[]; | ||
130 | |||
131 | -#if defined(CONFIG_ARCH_OMAP2) && defined(CONFIG_CPU_FREQ) | ||
132 | +#ifdef CONFIG_CPU_FREQ | ||
133 | + | ||
134 | +#ifdef CONFIG_ARCH_OMAP2 | ||
135 | extern void omap2_clk_init_cpufreq_table(struct cpufreq_frequency_table **table); | ||
136 | extern void omap2_clk_exit_cpufreq_table(struct cpufreq_frequency_table **table); | ||
137 | #else | ||
138 | @@ -149,6 +151,16 @@ extern void omap2_clk_exit_cpufreq_table(struct cpufreq_frequency_table **table) | ||
139 | #define omap2_clk_exit_cpufreq_table 0 | ||
140 | #endif | ||
141 | |||
142 | +#ifdef CONFIG_ARCH_OMAP3 | ||
143 | +extern void omap3_clk_init_cpufreq_table(struct cpufreq_frequency_table **table); | ||
144 | +extern void omap3_clk_exit_cpufreq_table(struct cpufreq_frequency_table **table); | ||
145 | +#else | ||
146 | +#define omap3_clk_init_cpufreq_table 0 | ||
147 | +#define omap3_clk_exit_cpufreq_table 0 | ||
148 | +#endif | ||
149 | + | ||
150 | +#endif /* CONFIG_CPU_FREQ */ | ||
151 | + | ||
152 | extern const struct clkops clkops_omap2_iclk_dflt_wait; | ||
153 | extern const struct clkops clkops_omap2_iclk_dflt; | ||
154 | extern const struct clkops clkops_omap2_iclk_idle_only; | ||
155 | diff --git a/arch/arm/mach-omap2/clock34xx.c b/arch/arm/mach-omap2/clock34xx.c | ||
156 | index 1fc96b9..119e135 100644 | ||
157 | --- a/arch/arm/mach-omap2/clock34xx.c | ||
158 | +++ b/arch/arm/mach-omap2/clock34xx.c | ||
159 | @@ -20,6 +20,8 @@ | ||
160 | #include <linux/kernel.h> | ||
161 | #include <linux/clk.h> | ||
162 | #include <linux/io.h> | ||
163 | +#include <linux/err.h> | ||
164 | +#include <linux/cpufreq.h> | ||
165 | |||
166 | #include <plat/clock.h> | ||
167 | |||
168 | diff --git a/arch/arm/plat-omap/cpu-omap.c b/arch/arm/plat-omap/cpu-omap.c | ||
169 | index 1b36664..f0f9430 100644 | ||
170 | --- a/arch/arm/plat-omap/cpu-omap.c | ||
171 | +++ b/arch/arm/plat-omap/cpu-omap.c | ||
172 | @@ -8,6 +8,10 @@ | ||
173 | * | ||
174 | * Based on cpu-sa1110.c, Copyright (C) 2001 Russell King | ||
175 | * | ||
176 | + * Copyright (C) 2007-2008 Texas Instruments, Inc. | ||
177 | + * Updated to support OMAP3 | ||
178 | + * Rajendra Nayak <rnayak@ti.com> | ||
179 | + * | ||
180 | * This program is free software; you can redistribute it and/or modify | ||
181 | * it under the terms of the GNU General Public License version 2 as | ||
182 | * published by the Free Software Foundation. | ||
183 | @@ -26,12 +30,19 @@ | ||
184 | #include <plat/clock.h> | ||
185 | #include <asm/system.h> | ||
186 | |||
187 | +#if defined(CONFIG_ARCH_OMAP3) && !defined(CONFIG_OMAP_PM_NONE) | ||
188 | +#include <plat/omap-pm.h> | ||
189 | +#include <plat/opp.h> | ||
190 | +#endif | ||
191 | + | ||
192 | #define VERY_HI_RATE 900000000 | ||
193 | |||
194 | static struct cpufreq_frequency_table *freq_table; | ||
195 | |||
196 | #ifdef CONFIG_ARCH_OMAP1 | ||
197 | #define MPU_CLK "mpu" | ||
198 | +#elif CONFIG_ARCH_OMAP3 | ||
199 | +#define MPU_CLK "arm_fck" | ||
200 | #else | ||
201 | #define MPU_CLK "virt_prcm_set" | ||
202 | #endif | ||
203 | @@ -73,7 +84,13 @@ static int omap_target(struct cpufreq_policy *policy, | ||
204 | unsigned int target_freq, | ||
205 | unsigned int relation) | ||
206 | { | ||
207 | +#ifdef CONFIG_ARCH_OMAP1 | ||
208 | struct cpufreq_freqs freqs; | ||
209 | +#endif | ||
210 | +#if defined(CONFIG_ARCH_OMAP3) && !defined(CONFIG_OMAP_PM_NONE) | ||
211 | + unsigned long freq; | ||
212 | + struct device *mpu_dev = omap2_get_mpuss_device(); | ||
213 | +#endif | ||
214 | int ret = 0; | ||
215 | |||
216 | /* Ensure desired rate is within allowed range. Some govenors | ||
217 | @@ -83,13 +100,13 @@ static int omap_target(struct cpufreq_policy *policy, | ||
218 | if (target_freq > policy->max) | ||
219 | target_freq = policy->max; | ||
220 | |||
221 | +#ifdef CONFIG_ARCH_OMAP1 | ||
222 | freqs.old = omap_getspeed(0); | ||
223 | freqs.new = clk_round_rate(mpu_clk, target_freq * 1000) / 1000; | ||
224 | freqs.cpu = 0; | ||
225 | |||
226 | if (freqs.old == freqs.new) | ||
227 | return ret; | ||
228 | - | ||
229 | cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); | ||
230 | #ifdef CONFIG_CPU_FREQ_DEBUG | ||
231 | printk(KERN_DEBUG "cpufreq-omap: transition: %u --> %u\n", | ||
232 | @@ -97,7 +114,11 @@ static int omap_target(struct cpufreq_policy *policy, | ||
233 | #endif | ||
234 | ret = clk_set_rate(mpu_clk, freqs.new * 1000); | ||
235 | cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); | ||
236 | - | ||
237 | +#elif defined(CONFIG_ARCH_OMAP3) && !defined(CONFIG_OMAP_PM_NONE) | ||
238 | + freq = target_freq * 1000; | ||
239 | + if (opp_find_freq_ceil(mpu_dev, &freq)) | ||
240 | + omap_pm_cpu_set_freq(freq); | ||
241 | +#endif | ||
242 | return ret; | ||
243 | } | ||
244 | |||
245 | @@ -114,7 +135,14 @@ static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy) | ||
246 | |||
247 | policy->cur = policy->min = policy->max = omap_getspeed(0); | ||
248 | |||
249 | - clk_init_cpufreq_table(&freq_table); | ||
250 | + if (!cpu_is_omap34xx()) { | ||
251 | + clk_init_cpufreq_table(&freq_table); | ||
252 | + } else { | ||
253 | + struct device *mpu_dev = omap2_get_mpuss_device(); | ||
254 | + | ||
255 | + opp_init_cpufreq_table(mpu_dev, &freq_table); | ||
256 | + } | ||
257 | + | ||
258 | if (freq_table) { | ||
259 | result = cpufreq_frequency_table_cpuinfo(policy, freq_table); | ||
260 | if (!result) | ||
261 | -- | ||
262 | 1.6.6.1 | ||
263 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0047-OMAP-PM-CPUFREQ-Fix-conditional-compilation.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0047-OMAP-PM-CPUFREQ-Fix-conditional-compilation.patch new file mode 100644 index 00000000..5d7b02ab --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0047-OMAP-PM-CPUFREQ-Fix-conditional-compilation.patch | |||
@@ -0,0 +1,32 @@ | |||
1 | From 4b4c71142858947f540b337873caf5c1436b4d73 Mon Sep 17 00:00:00 2001 | ||
2 | From: Silesh C V <silesh@ti.com> | ||
3 | Date: Wed, 29 Sep 2010 14:52:54 +0530 | ||
4 | Subject: [PATCH 47/59] OMAP: PM: CPUFREQ: Fix conditional compilation | ||
5 | |||
6 | Fix conditional compilation. A conditional expresiion | ||
7 | should follow "#elif", in this case #elif clause should | ||
8 | check whether CONFIG_ARCH_OMAP3 is defined or not | ||
9 | (ie. defined(CONFIG_ARCH_OMAP3)) rather than checking for | ||
10 | the value of the macro. | ||
11 | |||
12 | Signed-off-by: Silesh C V <silesh@ti.com> | ||
13 | --- | ||
14 | arch/arm/plat-omap/cpu-omap.c | 2 +- | ||
15 | 1 files changed, 1 insertions(+), 1 deletions(-) | ||
16 | |||
17 | diff --git a/arch/arm/plat-omap/cpu-omap.c b/arch/arm/plat-omap/cpu-omap.c | ||
18 | index f0f9430..c3ac065 100644 | ||
19 | --- a/arch/arm/plat-omap/cpu-omap.c | ||
20 | +++ b/arch/arm/plat-omap/cpu-omap.c | ||
21 | @@ -41,7 +41,7 @@ static struct cpufreq_frequency_table *freq_table; | ||
22 | |||
23 | #ifdef CONFIG_ARCH_OMAP1 | ||
24 | #define MPU_CLK "mpu" | ||
25 | -#elif CONFIG_ARCH_OMAP3 | ||
26 | +#elif defined(CONFIG_ARCH_OMAP3) | ||
27 | #define MPU_CLK "arm_fck" | ||
28 | #else | ||
29 | #define MPU_CLK "virt_prcm_set" | ||
30 | -- | ||
31 | 1.6.6.1 | ||
32 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0048-cpufreq-fixup-after-new-OPP-layer-merged.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0048-cpufreq-fixup-after-new-OPP-layer-merged.patch new file mode 100644 index 00000000..4bbaeedf --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0048-cpufreq-fixup-after-new-OPP-layer-merged.patch | |||
@@ -0,0 +1,33 @@ | |||
1 | From 6dac35adbd97f167ddbf26fd1bcea66d1e8a6c6f Mon Sep 17 00:00:00 2001 | ||
2 | From: Kevin Hilman <khilman@deeprootsystems.com> | ||
3 | Date: Tue, 16 Nov 2010 11:48:41 -0800 | ||
4 | Subject: [PATCH 48/59] cpufreq: fixup after new OPP layer merged | ||
5 | |||
6 | --- | ||
7 | arch/arm/plat-omap/cpu-omap.c | 3 ++- | ||
8 | 1 files changed, 2 insertions(+), 1 deletions(-) | ||
9 | |||
10 | diff --git a/arch/arm/plat-omap/cpu-omap.c b/arch/arm/plat-omap/cpu-omap.c | ||
11 | index c3ac065..9cd2709 100644 | ||
12 | --- a/arch/arm/plat-omap/cpu-omap.c | ||
13 | +++ b/arch/arm/plat-omap/cpu-omap.c | ||
14 | @@ -25,6 +25,7 @@ | ||
15 | #include <linux/err.h> | ||
16 | #include <linux/clk.h> | ||
17 | #include <linux/io.h> | ||
18 | +#include <linux/opp.h> | ||
19 | |||
20 | #include <mach/hardware.h> | ||
21 | #include <plat/clock.h> | ||
22 | @@ -32,7 +33,7 @@ | ||
23 | |||
24 | #if defined(CONFIG_ARCH_OMAP3) && !defined(CONFIG_OMAP_PM_NONE) | ||
25 | #include <plat/omap-pm.h> | ||
26 | -#include <plat/opp.h> | ||
27 | +#include <plat/common.h> | ||
28 | #endif | ||
29 | |||
30 | #define VERY_HI_RATE 900000000 | ||
31 | -- | ||
32 | 1.6.6.1 | ||
33 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0049-OMAP-cpufreq-Split-OMAP1-and-OMAP2PLUS-CPUfreq-drive.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0049-OMAP-cpufreq-Split-OMAP1-and-OMAP2PLUS-CPUfreq-drive.patch new file mode 100644 index 00000000..9fedb6c0 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0049-OMAP-cpufreq-Split-OMAP1-and-OMAP2PLUS-CPUfreq-drive.patch | |||
@@ -0,0 +1,669 @@ | |||
1 | From 989bfeaacfc9eb39762aefbfb5f25ecbd05892cc Mon Sep 17 00:00:00 2001 | ||
2 | From: Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
3 | Date: Mon, 14 Mar 2011 17:08:48 +0530 | ||
4 | Subject: [PATCH 49/59] OMAP: cpufreq: Split OMAP1 and OMAP2PLUS CPUfreq drivers. | ||
5 | |||
6 | This patch is an attempt to cleanup the #ifdeferry in the | ||
7 | omap CPUfreq drivers. | ||
8 | |||
9 | The split betwenn OMAP1 and OMAP2PLUS is logical because | ||
10 | - OMAP1 doesn't support opp layer. | ||
11 | - OMAP1 build is seperate from omap2plus. | ||
12 | |||
13 | Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
14 | Cc: Kevin Hilman <khilman@ti.com> | ||
15 | Cc: Vishwanath BS <vishwanath.bs@ti.com> | ||
16 | --- | ||
17 | arch/arm/mach-omap1/Makefile | 3 + | ||
18 | arch/arm/mach-omap1/omap1-cpufreq.c | 176 ++++++++++++++++++++++++++ | ||
19 | arch/arm/mach-omap2/Makefile | 3 + | ||
20 | arch/arm/mach-omap2/omap2plus-cpufreq.c | 201 ++++++++++++++++++++++++++++++ | ||
21 | arch/arm/plat-omap/Makefile | 1 - | ||
22 | arch/arm/plat-omap/cpu-omap.c | 204 ------------------------------- | ||
23 | 6 files changed, 383 insertions(+), 205 deletions(-) | ||
24 | create mode 100644 arch/arm/mach-omap1/omap1-cpufreq.c | ||
25 | create mode 100644 arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
26 | delete mode 100644 arch/arm/plat-omap/cpu-omap.c | ||
27 | |||
28 | diff --git a/arch/arm/mach-omap1/Makefile b/arch/arm/mach-omap1/Makefile | ||
29 | index af98117..e5082b0 100644 | ||
30 | --- a/arch/arm/mach-omap1/Makefile | ||
31 | +++ b/arch/arm/mach-omap1/Makefile | ||
32 | @@ -10,6 +10,9 @@ obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o | ||
33 | |||
34 | obj-$(CONFIG_OMAP_32K_TIMER) += timer32k.o | ||
35 | |||
36 | +# CPUFREQ driver | ||
37 | +obj-$(CONFIG_CPU_FREQ) += omap1-cpufreq.o | ||
38 | + | ||
39 | # Power Management | ||
40 | obj-$(CONFIG_PM) += pm.o sleep.o pm_bus.o | ||
41 | |||
42 | diff --git a/arch/arm/mach-omap1/omap1-cpufreq.c b/arch/arm/mach-omap1/omap1-cpufreq.c | ||
43 | new file mode 100644 | ||
44 | index 0000000..682cdc8 | ||
45 | --- /dev/null | ||
46 | +++ b/arch/arm/mach-omap1/omap1-cpufreq.c | ||
47 | @@ -0,0 +1,176 @@ | ||
48 | +/* | ||
49 | + * OMAP1 cpufreq driver | ||
50 | + * | ||
51 | + * CPU frequency scaling for OMAP | ||
52 | + * | ||
53 | + * Copyright (C) 2005 Nokia Corporation | ||
54 | + * Written by Tony Lindgren <tony@atomide.com> | ||
55 | + * | ||
56 | + * Based on cpu-sa1110.c, Copyright (C) 2001 Russell King | ||
57 | + * | ||
58 | + * Copyright (C) 2007-2008 Texas Instruments, Inc. | ||
59 | + * Updated to support OMAP3 | ||
60 | + * Rajendra Nayak <rnayak@ti.com> | ||
61 | + * | ||
62 | + * This program is free software; you can redistribute it and/or modify | ||
63 | + * it under the terms of the GNU General Public License version 2 as | ||
64 | + * published by the Free Software Foundation. | ||
65 | + */ | ||
66 | +#include <linux/types.h> | ||
67 | +#include <linux/kernel.h> | ||
68 | +#include <linux/sched.h> | ||
69 | +#include <linux/cpufreq.h> | ||
70 | +#include <linux/delay.h> | ||
71 | +#include <linux/init.h> | ||
72 | +#include <linux/err.h> | ||
73 | +#include <linux/clk.h> | ||
74 | +#include <linux/io.h> | ||
75 | +#include <linux/opp.h> | ||
76 | + | ||
77 | +#include <asm/system.h> | ||
78 | + | ||
79 | +#include <plat/clock.h> | ||
80 | +#include <plat/omap-pm.h> | ||
81 | + | ||
82 | +#include <mach/hardware.h> | ||
83 | + | ||
84 | +#define VERY_HI_RATE 900000000 | ||
85 | + | ||
86 | +static struct cpufreq_frequency_table *freq_table; | ||
87 | +static struct clk *mpu_clk; | ||
88 | + | ||
89 | +static int omap_verify_speed(struct cpufreq_policy *policy) | ||
90 | +{ | ||
91 | + if (freq_table) | ||
92 | + return cpufreq_frequency_table_verify(policy, freq_table); | ||
93 | + | ||
94 | + if (policy->cpu) | ||
95 | + return -EINVAL; | ||
96 | + | ||
97 | + cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq, | ||
98 | + policy->cpuinfo.max_freq); | ||
99 | + | ||
100 | + policy->min = clk_round_rate(mpu_clk, policy->min * 1000) / 1000; | ||
101 | + policy->max = clk_round_rate(mpu_clk, policy->max * 1000) / 1000; | ||
102 | + cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq, | ||
103 | + policy->cpuinfo.max_freq); | ||
104 | + return 0; | ||
105 | +} | ||
106 | + | ||
107 | +static unsigned int omap_getspeed(unsigned int cpu) | ||
108 | +{ | ||
109 | + unsigned long rate; | ||
110 | + | ||
111 | + if (cpu) | ||
112 | + return 0; | ||
113 | + | ||
114 | + rate = clk_get_rate(mpu_clk) / 1000; | ||
115 | + return rate; | ||
116 | +} | ||
117 | + | ||
118 | +static int omap_target(struct cpufreq_policy *policy, | ||
119 | + unsigned int target_freq, | ||
120 | + unsigned int relation) | ||
121 | +{ | ||
122 | + struct cpufreq_freqs freqs; | ||
123 | + int ret = 0; | ||
124 | + | ||
125 | + /* Ensure desired rate is within allowed range. Some govenors | ||
126 | + * (ondemand) will just pass target_freq=0 to get the minimum. */ | ||
127 | + if (target_freq < policy->min) | ||
128 | + target_freq = policy->min; | ||
129 | + if (target_freq > policy->max) | ||
130 | + target_freq = policy->max; | ||
131 | + | ||
132 | + freqs.old = omap_getspeed(0); | ||
133 | + freqs.new = clk_round_rate(mpu_clk, target_freq * 1000) / 1000; | ||
134 | + freqs.cpu = 0; | ||
135 | + | ||
136 | + if (freqs.old == freqs.new) | ||
137 | + return ret; | ||
138 | + | ||
139 | + cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); | ||
140 | + | ||
141 | +#ifdef CONFIG_CPU_FREQ_DEBUG | ||
142 | + pr_info("cpufreq-omap: transition: %u --> %u\n", freqs.old, freqs.new); | ||
143 | +#endif | ||
144 | + ret = clk_set_rate(mpu_clk, freqs.new * 1000); | ||
145 | + | ||
146 | + cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); | ||
147 | + | ||
148 | + return ret; | ||
149 | +} | ||
150 | + | ||
151 | +static int __init omap_cpu_init(struct cpufreq_policy *policy) | ||
152 | +{ | ||
153 | + int result = 0; | ||
154 | + | ||
155 | + mpu_clk = clk_get(NULL, "mpu"); | ||
156 | + if (IS_ERR(mpu_clk)) | ||
157 | + return PTR_ERR(mpu_clk); | ||
158 | + | ||
159 | + if (policy->cpu != 0) | ||
160 | + return -EINVAL; | ||
161 | + | ||
162 | + policy->cur = policy->min = policy->max = omap_getspeed(0); | ||
163 | + | ||
164 | + clk_init_cpufreq_table(&freq_table); | ||
165 | + | ||
166 | + if (freq_table) { | ||
167 | + result = cpufreq_frequency_table_cpuinfo(policy, freq_table); | ||
168 | + if (!result) | ||
169 | + cpufreq_frequency_table_get_attr(freq_table, | ||
170 | + policy->cpu); | ||
171 | + } else { | ||
172 | + policy->cpuinfo.min_freq = clk_round_rate(mpu_clk, 0) / 1000; | ||
173 | + policy->cpuinfo.max_freq = clk_round_rate(mpu_clk, | ||
174 | + VERY_HI_RATE) / 1000; | ||
175 | + } | ||
176 | + | ||
177 | + policy->min = policy->cpuinfo.min_freq; | ||
178 | + policy->max = policy->cpuinfo.max_freq; | ||
179 | + policy->cur = omap_getspeed(0); | ||
180 | + | ||
181 | + /* FIXME: what's the actual transition time? */ | ||
182 | + policy->cpuinfo.transition_latency = 300 * 1000; | ||
183 | + | ||
184 | + return 0; | ||
185 | +} | ||
186 | + | ||
187 | +static int omap_cpu_exit(struct cpufreq_policy *policy) | ||
188 | +{ | ||
189 | + clk_exit_cpufreq_table(&freq_table); | ||
190 | + clk_put(mpu_clk); | ||
191 | + return 0; | ||
192 | +} | ||
193 | + | ||
194 | +static struct freq_attr *omap_cpufreq_attr[] = { | ||
195 | + &cpufreq_freq_attr_scaling_available_freqs, | ||
196 | + NULL, | ||
197 | +}; | ||
198 | + | ||
199 | +static struct cpufreq_driver omap_driver = { | ||
200 | + .flags = CPUFREQ_STICKY, | ||
201 | + .verify = omap_verify_speed, | ||
202 | + .target = omap_target, | ||
203 | + .get = omap_getspeed, | ||
204 | + .init = omap_cpu_init, | ||
205 | + .exit = omap_cpu_exit, | ||
206 | + .name = "omap1", | ||
207 | + .attr = omap_cpufreq_attr, | ||
208 | +}; | ||
209 | + | ||
210 | +static int __init omap_cpufreq_init(void) | ||
211 | +{ | ||
212 | + return cpufreq_register_driver(&omap_driver); | ||
213 | +} | ||
214 | + | ||
215 | +static void __exit omap_cpufreq_exit(void) | ||
216 | +{ | ||
217 | + cpufreq_unregister_driver(&omap_driver); | ||
218 | +} | ||
219 | + | ||
220 | +MODULE_DESCRIPTION("cpufreq driver for OMAP1 SOCs"); | ||
221 | +MODULE_LICENSE("GPL"); | ||
222 | +module_init(omap_cpufreq_init); | ||
223 | +module_exit(omap_cpufreq_exit); | ||
224 | diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile | ||
225 | index 512b152..42924f3 100644 | ||
226 | --- a/arch/arm/mach-omap2/Makefile | ||
227 | +++ b/arch/arm/mach-omap2/Makefile | ||
228 | @@ -56,6 +56,9 @@ obj-$(CONFIG_ARCH_OMAP3) += opp3xxx_data.o | ||
229 | obj-$(CONFIG_ARCH_OMAP4) += opp4xxx_data.o | ||
230 | endif | ||
231 | |||
232 | +# CPUFREQ driver | ||
233 | +obj-$(CONFIG_CPU_FREQ) += omap2plus-cpufreq.o | ||
234 | + | ||
235 | # Power Management | ||
236 | ifeq ($(CONFIG_PM),y) | ||
237 | obj-$(CONFIG_ARCH_OMAP2) += pm24xx.o | ||
238 | diff --git a/arch/arm/mach-omap2/omap2plus-cpufreq.c b/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
239 | new file mode 100644 | ||
240 | index 0000000..14f84cc | ||
241 | --- /dev/null | ||
242 | +++ b/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
243 | @@ -0,0 +1,201 @@ | ||
244 | +/* | ||
245 | + * OMAP2PLUS cpufreq driver | ||
246 | + * | ||
247 | + * CPU frequency scaling for OMAP | ||
248 | + * | ||
249 | + * Copyright (C) 2005 Nokia Corporation | ||
250 | + * Written by Tony Lindgren <tony@atomide.com> | ||
251 | + * | ||
252 | + * Based on cpu-sa1110.c, Copyright (C) 2001 Russell King | ||
253 | + * | ||
254 | + * Copyright (C) 2007-2008 Texas Instruments, Inc. | ||
255 | + * Updated to support OMAP3 | ||
256 | + * Rajendra Nayak <rnayak@ti.com> | ||
257 | + * | ||
258 | + * This program is free software; you can redistribute it and/or modify | ||
259 | + * it under the terms of the GNU General Public License version 2 as | ||
260 | + * published by the Free Software Foundation. | ||
261 | + */ | ||
262 | +#include <linux/types.h> | ||
263 | +#include <linux/kernel.h> | ||
264 | +#include <linux/sched.h> | ||
265 | +#include <linux/cpufreq.h> | ||
266 | +#include <linux/delay.h> | ||
267 | +#include <linux/init.h> | ||
268 | +#include <linux/err.h> | ||
269 | +#include <linux/clk.h> | ||
270 | +#include <linux/io.h> | ||
271 | +#include <linux/opp.h> | ||
272 | + | ||
273 | +#include <asm/system.h> | ||
274 | +#include <asm/smp_plat.h> | ||
275 | + | ||
276 | +#include <plat/clock.h> | ||
277 | +#include <plat/omap-pm.h> | ||
278 | +#include <plat/common.h> | ||
279 | + | ||
280 | +#include <mach/hardware.h> | ||
281 | + | ||
282 | +#define VERY_HI_RATE 900000000 | ||
283 | + | ||
284 | +static struct cpufreq_frequency_table *freq_table; | ||
285 | +static struct clk *mpu_clk; | ||
286 | + | ||
287 | +static int omap_verify_speed(struct cpufreq_policy *policy) | ||
288 | +{ | ||
289 | + if (freq_table) | ||
290 | + return cpufreq_frequency_table_verify(policy, freq_table); | ||
291 | + | ||
292 | + if (policy->cpu) | ||
293 | + return -EINVAL; | ||
294 | + | ||
295 | + cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq, | ||
296 | + policy->cpuinfo.max_freq); | ||
297 | + | ||
298 | + policy->min = clk_round_rate(mpu_clk, policy->min * 1000) / 1000; | ||
299 | + policy->max = clk_round_rate(mpu_clk, policy->max * 1000) / 1000; | ||
300 | + cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq, | ||
301 | + policy->cpuinfo.max_freq); | ||
302 | + return 0; | ||
303 | +} | ||
304 | + | ||
305 | +static unsigned int omap_getspeed(unsigned int cpu) | ||
306 | +{ | ||
307 | + unsigned long rate; | ||
308 | + | ||
309 | + if (cpu) | ||
310 | + return 0; | ||
311 | + | ||
312 | + rate = clk_get_rate(mpu_clk) / 1000; | ||
313 | + return rate; | ||
314 | +} | ||
315 | + | ||
316 | +static int omap_target(struct cpufreq_policy *policy, | ||
317 | + unsigned int target_freq, | ||
318 | + unsigned int relation) | ||
319 | +{ | ||
320 | + int ret = 0; | ||
321 | + struct cpufreq_freqs freqs; | ||
322 | + | ||
323 | + /* Ensure desired rate is within allowed range. Some govenors | ||
324 | + * (ondemand) will just pass target_freq=0 to get the minimum. */ | ||
325 | + if (target_freq < policy->min) | ||
326 | + target_freq = policy->min; | ||
327 | + if (target_freq > policy->max) | ||
328 | + target_freq = policy->max; | ||
329 | + | ||
330 | + freqs.old = omap_getspeed(0); | ||
331 | + freqs.new = clk_round_rate(mpu_clk, target_freq * 1000) / 1000; | ||
332 | + freqs.cpu = 0; | ||
333 | + | ||
334 | + if (freqs.old == freqs.new) | ||
335 | + return ret; | ||
336 | + | ||
337 | + cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); | ||
338 | + | ||
339 | +#ifdef CONFIG_CPU_FREQ_DEBUG | ||
340 | + pr_info("cpufreq-omap: transition: %u --> %u\n", freqs.old, freqs.new); | ||
341 | +#endif | ||
342 | + | ||
343 | + ret = clk_set_rate(mpu_clk, freqs.new * 1000); | ||
344 | + | ||
345 | + /* | ||
346 | + * Generic CPUFREQ driver jiffy update is under !SMP. So jiffies | ||
347 | + * won't get updated when UP machine cpufreq build with | ||
348 | + * CONFIG_SMP enabled. Below code is added only to manage that | ||
349 | + * scenario | ||
350 | + */ | ||
351 | + if (!is_smp()) | ||
352 | + loops_per_jiffy = | ||
353 | + cpufreq_scale(loops_per_jiffy, freqs.old, freqs.new); | ||
354 | + | ||
355 | + cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); | ||
356 | + | ||
357 | + return ret; | ||
358 | +} | ||
359 | + | ||
360 | +static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy) | ||
361 | +{ | ||
362 | + int result = 0; | ||
363 | + struct device *mpu_dev; | ||
364 | + | ||
365 | + if (cpu_is_omap24xx()) | ||
366 | + mpu_clk = clk_get(NULL, "virt_prcm_set"); | ||
367 | + else if (cpu_is_omap34xx()) | ||
368 | + mpu_clk = clk_get(NULL, "dpll1_ck"); | ||
369 | + else if (cpu_is_omap34xx()) | ||
370 | + mpu_clk = clk_get(NULL, "dpll_mpu_ck"); | ||
371 | + | ||
372 | + if (IS_ERR(mpu_clk)) | ||
373 | + return PTR_ERR(mpu_clk); | ||
374 | + | ||
375 | + if (policy->cpu != 0) | ||
376 | + return -EINVAL; | ||
377 | + | ||
378 | + policy->cur = policy->min = policy->max = omap_getspeed(0); | ||
379 | + | ||
380 | + mpu_dev = omap2_get_mpuss_device(); | ||
381 | + if (!mpu_dev) { | ||
382 | + pr_warning("%s: unable to get the mpu device\n", __func__); | ||
383 | + return -EINVAL; | ||
384 | + } | ||
385 | + opp_init_cpufreq_table(mpu_dev, &freq_table); | ||
386 | + | ||
387 | + if (freq_table) { | ||
388 | + result = cpufreq_frequency_table_cpuinfo(policy, freq_table); | ||
389 | + if (!result) | ||
390 | + cpufreq_frequency_table_get_attr(freq_table, | ||
391 | + policy->cpu); | ||
392 | + } else { | ||
393 | + policy->cpuinfo.min_freq = clk_round_rate(mpu_clk, 0) / 1000; | ||
394 | + policy->cpuinfo.max_freq = clk_round_rate(mpu_clk, | ||
395 | + VERY_HI_RATE) / 1000; | ||
396 | + } | ||
397 | + | ||
398 | + policy->min = policy->cpuinfo.min_freq; | ||
399 | + policy->max = policy->cpuinfo.max_freq; | ||
400 | + policy->cur = omap_getspeed(0); | ||
401 | + | ||
402 | + /* FIXME: what's the actual transition time? */ | ||
403 | + policy->cpuinfo.transition_latency = 300 * 1000; | ||
404 | + | ||
405 | + return 0; | ||
406 | +} | ||
407 | + | ||
408 | +static int omap_cpu_exit(struct cpufreq_policy *policy) | ||
409 | +{ | ||
410 | + clk_exit_cpufreq_table(&freq_table); | ||
411 | + clk_put(mpu_clk); | ||
412 | + return 0; | ||
413 | +} | ||
414 | + | ||
415 | +static struct freq_attr *omap_cpufreq_attr[] = { | ||
416 | + &cpufreq_freq_attr_scaling_available_freqs, | ||
417 | + NULL, | ||
418 | +}; | ||
419 | + | ||
420 | +static struct cpufreq_driver omap_driver = { | ||
421 | + .flags = CPUFREQ_STICKY, | ||
422 | + .verify = omap_verify_speed, | ||
423 | + .target = omap_target, | ||
424 | + .get = omap_getspeed, | ||
425 | + .init = omap_cpu_init, | ||
426 | + .exit = omap_cpu_exit, | ||
427 | + .name = "omap2plus", | ||
428 | + .attr = omap_cpufreq_attr, | ||
429 | +}; | ||
430 | + | ||
431 | +static int __init omap_cpufreq_init(void) | ||
432 | +{ | ||
433 | + return cpufreq_register_driver(&omap_driver); | ||
434 | +} | ||
435 | + | ||
436 | +static void __exit omap_cpufreq_exit(void) | ||
437 | +{ | ||
438 | + cpufreq_unregister_driver(&omap_driver); | ||
439 | +} | ||
440 | + | ||
441 | +MODULE_DESCRIPTION("cpufreq driver for OMAP2PLUS SOCs"); | ||
442 | +MODULE_LICENSE("GPL"); | ||
443 | +module_init(omap_cpufreq_init); | ||
444 | +module_exit(omap_cpufreq_exit); | ||
445 | diff --git a/arch/arm/plat-omap/Makefile b/arch/arm/plat-omap/Makefile | ||
446 | index a4a1285..ec7862e 100644 | ||
447 | --- a/arch/arm/plat-omap/Makefile | ||
448 | +++ b/arch/arm/plat-omap/Makefile | ||
449 | @@ -21,7 +21,6 @@ obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o | ||
450 | obj-$(CONFIG_OMAP_IOMMU) += iommu.o iovmm.o | ||
451 | obj-$(CONFIG_OMAP_IOMMU_DEBUG) += iommu-debug.o | ||
452 | |||
453 | -obj-$(CONFIG_CPU_FREQ) += cpu-omap.o | ||
454 | obj-$(CONFIG_OMAP_DM_TIMER) += dmtimer.o | ||
455 | obj-$(CONFIG_OMAP_DEBUG_DEVICES) += debug-devices.o | ||
456 | obj-$(CONFIG_OMAP_DEBUG_LEDS) += debug-leds.o | ||
457 | diff --git a/arch/arm/plat-omap/cpu-omap.c b/arch/arm/plat-omap/cpu-omap.c | ||
458 | deleted file mode 100644 | ||
459 | index 9cd2709..0000000 | ||
460 | --- a/arch/arm/plat-omap/cpu-omap.c | ||
461 | +++ /dev/null | ||
462 | @@ -1,204 +0,0 @@ | ||
463 | -/* | ||
464 | - * linux/arch/arm/plat-omap/cpu-omap.c | ||
465 | - * | ||
466 | - * CPU frequency scaling for OMAP | ||
467 | - * | ||
468 | - * Copyright (C) 2005 Nokia Corporation | ||
469 | - * Written by Tony Lindgren <tony@atomide.com> | ||
470 | - * | ||
471 | - * Based on cpu-sa1110.c, Copyright (C) 2001 Russell King | ||
472 | - * | ||
473 | - * Copyright (C) 2007-2008 Texas Instruments, Inc. | ||
474 | - * Updated to support OMAP3 | ||
475 | - * Rajendra Nayak <rnayak@ti.com> | ||
476 | - * | ||
477 | - * This program is free software; you can redistribute it and/or modify | ||
478 | - * it under the terms of the GNU General Public License version 2 as | ||
479 | - * published by the Free Software Foundation. | ||
480 | - */ | ||
481 | -#include <linux/types.h> | ||
482 | -#include <linux/kernel.h> | ||
483 | -#include <linux/sched.h> | ||
484 | -#include <linux/cpufreq.h> | ||
485 | -#include <linux/delay.h> | ||
486 | -#include <linux/init.h> | ||
487 | -#include <linux/err.h> | ||
488 | -#include <linux/clk.h> | ||
489 | -#include <linux/io.h> | ||
490 | -#include <linux/opp.h> | ||
491 | - | ||
492 | -#include <mach/hardware.h> | ||
493 | -#include <plat/clock.h> | ||
494 | -#include <asm/system.h> | ||
495 | - | ||
496 | -#if defined(CONFIG_ARCH_OMAP3) && !defined(CONFIG_OMAP_PM_NONE) | ||
497 | -#include <plat/omap-pm.h> | ||
498 | -#include <plat/common.h> | ||
499 | -#endif | ||
500 | - | ||
501 | -#define VERY_HI_RATE 900000000 | ||
502 | - | ||
503 | -static struct cpufreq_frequency_table *freq_table; | ||
504 | - | ||
505 | -#ifdef CONFIG_ARCH_OMAP1 | ||
506 | -#define MPU_CLK "mpu" | ||
507 | -#elif defined(CONFIG_ARCH_OMAP3) | ||
508 | -#define MPU_CLK "arm_fck" | ||
509 | -#else | ||
510 | -#define MPU_CLK "virt_prcm_set" | ||
511 | -#endif | ||
512 | - | ||
513 | -static struct clk *mpu_clk; | ||
514 | - | ||
515 | -/* TODO: Add support for SDRAM timing changes */ | ||
516 | - | ||
517 | -static int omap_verify_speed(struct cpufreq_policy *policy) | ||
518 | -{ | ||
519 | - if (freq_table) | ||
520 | - return cpufreq_frequency_table_verify(policy, freq_table); | ||
521 | - | ||
522 | - if (policy->cpu) | ||
523 | - return -EINVAL; | ||
524 | - | ||
525 | - cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq, | ||
526 | - policy->cpuinfo.max_freq); | ||
527 | - | ||
528 | - policy->min = clk_round_rate(mpu_clk, policy->min * 1000) / 1000; | ||
529 | - policy->max = clk_round_rate(mpu_clk, policy->max * 1000) / 1000; | ||
530 | - cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq, | ||
531 | - policy->cpuinfo.max_freq); | ||
532 | - return 0; | ||
533 | -} | ||
534 | - | ||
535 | -static unsigned int omap_getspeed(unsigned int cpu) | ||
536 | -{ | ||
537 | - unsigned long rate; | ||
538 | - | ||
539 | - if (cpu) | ||
540 | - return 0; | ||
541 | - | ||
542 | - rate = clk_get_rate(mpu_clk) / 1000; | ||
543 | - return rate; | ||
544 | -} | ||
545 | - | ||
546 | -static int omap_target(struct cpufreq_policy *policy, | ||
547 | - unsigned int target_freq, | ||
548 | - unsigned int relation) | ||
549 | -{ | ||
550 | -#ifdef CONFIG_ARCH_OMAP1 | ||
551 | - struct cpufreq_freqs freqs; | ||
552 | -#endif | ||
553 | -#if defined(CONFIG_ARCH_OMAP3) && !defined(CONFIG_OMAP_PM_NONE) | ||
554 | - unsigned long freq; | ||
555 | - struct device *mpu_dev = omap2_get_mpuss_device(); | ||
556 | -#endif | ||
557 | - int ret = 0; | ||
558 | - | ||
559 | - /* Ensure desired rate is within allowed range. Some govenors | ||
560 | - * (ondemand) will just pass target_freq=0 to get the minimum. */ | ||
561 | - if (target_freq < policy->min) | ||
562 | - target_freq = policy->min; | ||
563 | - if (target_freq > policy->max) | ||
564 | - target_freq = policy->max; | ||
565 | - | ||
566 | -#ifdef CONFIG_ARCH_OMAP1 | ||
567 | - freqs.old = omap_getspeed(0); | ||
568 | - freqs.new = clk_round_rate(mpu_clk, target_freq * 1000) / 1000; | ||
569 | - freqs.cpu = 0; | ||
570 | - | ||
571 | - if (freqs.old == freqs.new) | ||
572 | - return ret; | ||
573 | - cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); | ||
574 | -#ifdef CONFIG_CPU_FREQ_DEBUG | ||
575 | - printk(KERN_DEBUG "cpufreq-omap: transition: %u --> %u\n", | ||
576 | - freqs.old, freqs.new); | ||
577 | -#endif | ||
578 | - ret = clk_set_rate(mpu_clk, freqs.new * 1000); | ||
579 | - cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); | ||
580 | -#elif defined(CONFIG_ARCH_OMAP3) && !defined(CONFIG_OMAP_PM_NONE) | ||
581 | - freq = target_freq * 1000; | ||
582 | - if (opp_find_freq_ceil(mpu_dev, &freq)) | ||
583 | - omap_pm_cpu_set_freq(freq); | ||
584 | -#endif | ||
585 | - return ret; | ||
586 | -} | ||
587 | - | ||
588 | -static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy) | ||
589 | -{ | ||
590 | - int result = 0; | ||
591 | - | ||
592 | - mpu_clk = clk_get(NULL, MPU_CLK); | ||
593 | - if (IS_ERR(mpu_clk)) | ||
594 | - return PTR_ERR(mpu_clk); | ||
595 | - | ||
596 | - if (policy->cpu != 0) | ||
597 | - return -EINVAL; | ||
598 | - | ||
599 | - policy->cur = policy->min = policy->max = omap_getspeed(0); | ||
600 | - | ||
601 | - if (!cpu_is_omap34xx()) { | ||
602 | - clk_init_cpufreq_table(&freq_table); | ||
603 | - } else { | ||
604 | - struct device *mpu_dev = omap2_get_mpuss_device(); | ||
605 | - | ||
606 | - opp_init_cpufreq_table(mpu_dev, &freq_table); | ||
607 | - } | ||
608 | - | ||
609 | - if (freq_table) { | ||
610 | - result = cpufreq_frequency_table_cpuinfo(policy, freq_table); | ||
611 | - if (!result) | ||
612 | - cpufreq_frequency_table_get_attr(freq_table, | ||
613 | - policy->cpu); | ||
614 | - } else { | ||
615 | - policy->cpuinfo.min_freq = clk_round_rate(mpu_clk, 0) / 1000; | ||
616 | - policy->cpuinfo.max_freq = clk_round_rate(mpu_clk, | ||
617 | - VERY_HI_RATE) / 1000; | ||
618 | - } | ||
619 | - | ||
620 | - policy->min = policy->cpuinfo.min_freq; | ||
621 | - policy->max = policy->cpuinfo.max_freq; | ||
622 | - policy->cur = omap_getspeed(0); | ||
623 | - | ||
624 | - /* FIXME: what's the actual transition time? */ | ||
625 | - policy->cpuinfo.transition_latency = 300 * 1000; | ||
626 | - | ||
627 | - return 0; | ||
628 | -} | ||
629 | - | ||
630 | -static int omap_cpu_exit(struct cpufreq_policy *policy) | ||
631 | -{ | ||
632 | - clk_exit_cpufreq_table(&freq_table); | ||
633 | - clk_put(mpu_clk); | ||
634 | - return 0; | ||
635 | -} | ||
636 | - | ||
637 | -static struct freq_attr *omap_cpufreq_attr[] = { | ||
638 | - &cpufreq_freq_attr_scaling_available_freqs, | ||
639 | - NULL, | ||
640 | -}; | ||
641 | - | ||
642 | -static struct cpufreq_driver omap_driver = { | ||
643 | - .flags = CPUFREQ_STICKY, | ||
644 | - .verify = omap_verify_speed, | ||
645 | - .target = omap_target, | ||
646 | - .get = omap_getspeed, | ||
647 | - .init = omap_cpu_init, | ||
648 | - .exit = omap_cpu_exit, | ||
649 | - .name = "omap", | ||
650 | - .attr = omap_cpufreq_attr, | ||
651 | -}; | ||
652 | - | ||
653 | -static int __init omap_cpufreq_init(void) | ||
654 | -{ | ||
655 | - return cpufreq_register_driver(&omap_driver); | ||
656 | -} | ||
657 | - | ||
658 | -late_initcall(omap_cpufreq_init); | ||
659 | - | ||
660 | -/* | ||
661 | - * if ever we want to remove this, upon cleanup call: | ||
662 | - * | ||
663 | - * cpufreq_unregister_driver() | ||
664 | - * cpufreq_frequency_table_put_attr() | ||
665 | - */ | ||
666 | - | ||
667 | -- | ||
668 | 1.6.6.1 | ||
669 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0050-OMAP2PLUS-cpufreq-Add-SMP-support-to-cater-OMAP4430.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0050-OMAP2PLUS-cpufreq-Add-SMP-support-to-cater-OMAP4430.patch new file mode 100644 index 00000000..c9e42893 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0050-OMAP2PLUS-cpufreq-Add-SMP-support-to-cater-OMAP4430.patch | |||
@@ -0,0 +1,170 @@ | |||
1 | From d1774fef215a30d5a5db713170f74cc8da82933f Mon Sep 17 00:00:00 2001 | ||
2 | From: Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
3 | Date: Mon, 14 Mar 2011 17:08:49 +0530 | ||
4 | Subject: [PATCH 50/59] OMAP2PLUS: cpufreq: Add SMP support to cater OMAP4430 | ||
5 | |||
6 | On OMAP SMP configuartion, both processors share the voltage | ||
7 | and clock. So both CPUs needs to be scaled together and hence | ||
8 | needs software co-ordination. | ||
9 | |||
10 | Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com> | ||
11 | Cc: Kevin Hilman <khilman@ti.com> | ||
12 | cc: Vishwanath BS <vishwanath.bs@ti.com> | ||
13 | --- | ||
14 | arch/arm/mach-omap2/omap2plus-cpufreq.c | 73 ++++++++++++++++++++++++++----- | ||
15 | 1 files changed, 62 insertions(+), 11 deletions(-) | ||
16 | |||
17 | diff --git a/arch/arm/mach-omap2/omap2plus-cpufreq.c b/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
18 | index 14f84cc..8d472f6 100644 | ||
19 | --- a/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
20 | +++ b/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
21 | @@ -26,9 +26,11 @@ | ||
22 | #include <linux/clk.h> | ||
23 | #include <linux/io.h> | ||
24 | #include <linux/opp.h> | ||
25 | +#include <linux/cpu.h> | ||
26 | |||
27 | #include <asm/system.h> | ||
28 | #include <asm/smp_plat.h> | ||
29 | +#include <asm/cpu.h> | ||
30 | |||
31 | #include <plat/clock.h> | ||
32 | #include <plat/omap-pm.h> | ||
33 | @@ -63,7 +65,7 @@ static unsigned int omap_getspeed(unsigned int cpu) | ||
34 | { | ||
35 | unsigned long rate; | ||
36 | |||
37 | - if (cpu) | ||
38 | + if (cpu >= NR_CPUS) | ||
39 | return 0; | ||
40 | |||
41 | rate = clk_get_rate(mpu_clk) / 1000; | ||
42 | @@ -74,9 +76,13 @@ static int omap_target(struct cpufreq_policy *policy, | ||
43 | unsigned int target_freq, | ||
44 | unsigned int relation) | ||
45 | { | ||
46 | - int ret = 0; | ||
47 | + int i, ret = 0; | ||
48 | struct cpufreq_freqs freqs; | ||
49 | |||
50 | + /* Changes not allowed until all CPUs are online */ | ||
51 | + if (is_smp() && (num_online_cpus() < NR_CPUS)) | ||
52 | + return ret; | ||
53 | + | ||
54 | /* Ensure desired rate is within allowed range. Some govenors | ||
55 | * (ondemand) will just pass target_freq=0 to get the minimum. */ | ||
56 | if (target_freq < policy->min) | ||
57 | @@ -84,15 +90,25 @@ static int omap_target(struct cpufreq_policy *policy, | ||
58 | if (target_freq > policy->max) | ||
59 | target_freq = policy->max; | ||
60 | |||
61 | - freqs.old = omap_getspeed(0); | ||
62 | + freqs.old = omap_getspeed(policy->cpu); | ||
63 | freqs.new = clk_round_rate(mpu_clk, target_freq * 1000) / 1000; | ||
64 | - freqs.cpu = 0; | ||
65 | + freqs.cpu = policy->cpu; | ||
66 | |||
67 | if (freqs.old == freqs.new) | ||
68 | return ret; | ||
69 | |||
70 | - cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); | ||
71 | + if (!is_smp()) { | ||
72 | + cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); | ||
73 | + goto set_freq; | ||
74 | + } | ||
75 | + | ||
76 | + /* notifiers */ | ||
77 | + for_each_cpu(i, policy->cpus) { | ||
78 | + freqs.cpu = i; | ||
79 | + cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); | ||
80 | + } | ||
81 | |||
82 | +set_freq: | ||
83 | #ifdef CONFIG_CPU_FREQ_DEBUG | ||
84 | pr_info("cpufreq-omap: transition: %u --> %u\n", freqs.old, freqs.new); | ||
85 | #endif | ||
86 | @@ -105,12 +121,33 @@ static int omap_target(struct cpufreq_policy *policy, | ||
87 | * CONFIG_SMP enabled. Below code is added only to manage that | ||
88 | * scenario | ||
89 | */ | ||
90 | - if (!is_smp()) | ||
91 | + freqs.new = omap_getspeed(policy->cpu); | ||
92 | + if (!is_smp()) { | ||
93 | loops_per_jiffy = | ||
94 | cpufreq_scale(loops_per_jiffy, freqs.old, freqs.new); | ||
95 | + cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); | ||
96 | + goto skip_lpj; | ||
97 | + } | ||
98 | |||
99 | - cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); | ||
100 | +#ifdef CONFIG_SMP | ||
101 | + /* | ||
102 | + * Note that loops_per_jiffy is not updated on SMP systems in | ||
103 | + * cpufreq driver. So, update the per-CPU loops_per_jiffy value | ||
104 | + * on frequency transition. We need to update all dependent CPUs. | ||
105 | + */ | ||
106 | + for_each_cpu(i, policy->cpus) | ||
107 | + per_cpu(cpu_data, i).loops_per_jiffy = | ||
108 | + cpufreq_scale(per_cpu(cpu_data, i).loops_per_jiffy, | ||
109 | + freqs.old, freqs.new); | ||
110 | +#endif | ||
111 | |||
112 | + /* notifiers */ | ||
113 | + for_each_cpu(i, policy->cpus) { | ||
114 | + freqs.cpu = i; | ||
115 | + cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); | ||
116 | + } | ||
117 | + | ||
118 | +skip_lpj: | ||
119 | return ret; | ||
120 | } | ||
121 | |||
122 | @@ -118,6 +155,7 @@ static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy) | ||
123 | { | ||
124 | int result = 0; | ||
125 | struct device *mpu_dev; | ||
126 | + static cpumask_var_t cpumask; | ||
127 | |||
128 | if (cpu_is_omap24xx()) | ||
129 | mpu_clk = clk_get(NULL, "virt_prcm_set"); | ||
130 | @@ -129,12 +167,12 @@ static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy) | ||
131 | if (IS_ERR(mpu_clk)) | ||
132 | return PTR_ERR(mpu_clk); | ||
133 | |||
134 | - if (policy->cpu != 0) | ||
135 | + if (policy->cpu >= NR_CPUS) | ||
136 | return -EINVAL; | ||
137 | |||
138 | - policy->cur = policy->min = policy->max = omap_getspeed(0); | ||
139 | - | ||
140 | + policy->cur = policy->min = policy->max = omap_getspeed(policy->cpu); | ||
141 | mpu_dev = omap2_get_mpuss_device(); | ||
142 | + | ||
143 | if (!mpu_dev) { | ||
144 | pr_warning("%s: unable to get the mpu device\n", __func__); | ||
145 | return -EINVAL; | ||
146 | @@ -154,7 +192,20 @@ static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy) | ||
147 | |||
148 | policy->min = policy->cpuinfo.min_freq; | ||
149 | policy->max = policy->cpuinfo.max_freq; | ||
150 | - policy->cur = omap_getspeed(0); | ||
151 | + policy->cur = omap_getspeed(policy->cpu); | ||
152 | + | ||
153 | + /* | ||
154 | + * On OMAP SMP configuartion, both processors share the voltage | ||
155 | + * and clock. So both CPUs needs to be scaled together and hence | ||
156 | + * needs software co-ordination. Use cpufreq affected_cpus | ||
157 | + * interface to handle this scenario. Additional is_smp() check | ||
158 | + * is to keep SMP_ON_UP build working. | ||
159 | + */ | ||
160 | + if (is_smp()) { | ||
161 | + policy->shared_type = CPUFREQ_SHARED_TYPE_ANY; | ||
162 | + cpumask_or(cpumask, cpumask_of(policy->cpu), cpumask); | ||
163 | + cpumask_copy(policy->cpus, cpumask); | ||
164 | + } | ||
165 | |||
166 | /* FIXME: what's the actual transition time? */ | ||
167 | policy->cpuinfo.transition_latency = 300 * 1000; | ||
168 | -- | ||
169 | 1.6.6.1 | ||
170 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0051-OMAP2PLUS-cpufreq-Fix-typo-when-attempting-to-set-mp.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0051-OMAP2PLUS-cpufreq-Fix-typo-when-attempting-to-set-mp.patch new file mode 100644 index 00000000..3685af92 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0051-OMAP2PLUS-cpufreq-Fix-typo-when-attempting-to-set-mp.patch | |||
@@ -0,0 +1,29 @@ | |||
1 | From b25a843135dc8ba5053befd1d39ac2286a3d9fa4 Mon Sep 17 00:00:00 2001 | ||
2 | From: Jarkko Nikula <jhnikula@gmail.com> | ||
3 | Date: Thu, 14 Apr 2011 16:21:58 +0300 | ||
4 | Subject: [PATCH 51/59] OMAP2PLUS: cpufreq: Fix typo when attempting to set mpu_clk for OMAP4 | ||
5 | |||
6 | Fix this typo as there is no dpll_mpu_ck for OMAP3 and code flow is clearly | ||
7 | trying to set mpu_clk for OMAP4 for which this dpll_mpu_ck is available. | ||
8 | |||
9 | Signed-off-by: Jarkko Nikula <jhnikula@gmail.com> | ||
10 | --- | ||
11 | arch/arm/mach-omap2/omap2plus-cpufreq.c | 2 +- | ||
12 | 1 files changed, 1 insertions(+), 1 deletions(-) | ||
13 | |||
14 | diff --git a/arch/arm/mach-omap2/omap2plus-cpufreq.c b/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
15 | index 8d472f6..d53ce23 100644 | ||
16 | --- a/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
17 | +++ b/arch/arm/mach-omap2/omap2plus-cpufreq.c | ||
18 | @@ -161,7 +161,7 @@ static int __cpuinit omap_cpu_init(struct cpufreq_policy *policy) | ||
19 | mpu_clk = clk_get(NULL, "virt_prcm_set"); | ||
20 | else if (cpu_is_omap34xx()) | ||
21 | mpu_clk = clk_get(NULL, "dpll1_ck"); | ||
22 | - else if (cpu_is_omap34xx()) | ||
23 | + else if (cpu_is_omap44xx()) | ||
24 | mpu_clk = clk_get(NULL, "dpll_mpu_ck"); | ||
25 | |||
26 | if (IS_ERR(mpu_clk)) | ||
27 | -- | ||
28 | 1.6.6.1 | ||
29 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0032-OMAP3-voltage-remove-spurious-pr_notice-for-debugfs.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0032-OMAP3-voltage-remove-spurious-pr_notice-for-debugfs.patch new file mode 100644 index 00000000..b6541942 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0032-OMAP3-voltage-remove-spurious-pr_notice-for-debugfs.patch | |||
@@ -0,0 +1,30 @@ | |||
1 | From bbd4463bb8bfcbe9968a37caa368803b153718f3 Mon Sep 17 00:00:00 2001 | ||
2 | From: Nishanth Menon <nm@ti.com> | ||
3 | Date: Sat, 12 Feb 2011 17:27:14 +0530 | ||
4 | Subject: [PATCH 32/59] OMAP3+: voltage: remove spurious pr_notice for debugfs | ||
5 | |||
6 | cat of debugfs entry for vp_volt provides voltage. The additional pr_notice | ||
7 | is just spam on console and provides no additional information. | ||
8 | |||
9 | Signed-off-by: Nishanth Menon <nm@ti.com> | ||
10 | Signed-off-by: Kevin Hilman <khilman@ti.com> | ||
11 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
12 | --- | ||
13 | arch/arm/mach-omap2/voltage.c | 1 - | ||
14 | 1 files changed, 0 insertions(+), 1 deletions(-) | ||
15 | |||
16 | diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c | ||
17 | index 0c1552d..9ef3789 100644 | ||
18 | --- a/arch/arm/mach-omap2/voltage.c | ||
19 | +++ b/arch/arm/mach-omap2/voltage.c | ||
20 | @@ -148,7 +148,6 @@ static int vp_volt_debug_get(void *data, u64 *val) | ||
21 | } | ||
22 | |||
23 | vsel = vdd->read_reg(prm_mod_offs, vdd->vp_data->voltage); | ||
24 | - pr_notice("curr_vsel = %x\n", vsel); | ||
25 | |||
26 | if (!vdd->pmic_info->vsel_to_uv) { | ||
27 | pr_warning("PMIC function to convert vsel to voltage" | ||
28 | -- | ||
29 | 1.6.6.1 | ||
30 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0033-OMAP4-PM-remove-redundant-ifdef-CONFIG_PM.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0033-OMAP4-PM-remove-redundant-ifdef-CONFIG_PM.patch new file mode 100644 index 00000000..e93fa401 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0033-OMAP4-PM-remove-redundant-ifdef-CONFIG_PM.patch | |||
@@ -0,0 +1,41 @@ | |||
1 | From 111ad0be33804ba5a6173a0dda14ebe524271b4f Mon Sep 17 00:00:00 2001 | ||
2 | From: Nishanth Menon <nm@ti.com> | ||
3 | Date: Sun, 13 Mar 2011 09:07:23 +0530 | ||
4 | Subject: [PATCH 33/59] OMAP4: PM: remove redundant #ifdef CONFIG_PM | ||
5 | |||
6 | pm44xx.c is built only when CONFIG_PM is setup, | ||
7 | remove redundant CONFIG_PM check. | ||
8 | |||
9 | This also fixes: | ||
10 | https://bugzilla.kernel.org/show_bug.cgi?id=25022 | ||
11 | |||
12 | Reported-by: Martin Etti <ettl.martin@gmx.de> | ||
13 | |||
14 | Signed-off-by: Nishanth Menon <nm@ti.com> | ||
15 | Signed-off-by: Kevin Hilman <khilman@ti.com> | ||
16 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
17 | --- | ||
18 | arch/arm/mach-omap2/pm44xx.c | 2 -- | ||
19 | 1 files changed, 0 insertions(+), 2 deletions(-) | ||
20 | |||
21 | diff --git a/arch/arm/mach-omap2/pm44xx.c b/arch/arm/mach-omap2/pm44xx.c | ||
22 | index 76cfff2..59a870b 100644 | ||
23 | --- a/arch/arm/mach-omap2/pm44xx.c | ||
24 | +++ b/arch/arm/mach-omap2/pm44xx.c | ||
25 | @@ -105,13 +105,11 @@ static int __init omap4_pm_init(void) | ||
26 | |||
27 | pr_err("Power Management for TI OMAP4.\n"); | ||
28 | |||
29 | -#ifdef CONFIG_PM | ||
30 | ret = pwrdm_for_each(pwrdms_setup, NULL); | ||
31 | if (ret) { | ||
32 | pr_err("Failed to setup powerdomains\n"); | ||
33 | goto err2; | ||
34 | } | ||
35 | -#endif | ||
36 | |||
37 | #ifdef CONFIG_SUSPEND | ||
38 | suspend_set_ops(&omap_pm_ops); | ||
39 | -- | ||
40 | 1.6.6.1 | ||
41 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0034-OMAP3-smartreflex-fix-sr_late_init-error-path-in-pro.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0034-OMAP3-smartreflex-fix-sr_late_init-error-path-in-pro.patch new file mode 100644 index 00000000..a487d257 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0034-OMAP3-smartreflex-fix-sr_late_init-error-path-in-pro.patch | |||
@@ -0,0 +1,30 @@ | |||
1 | From ef07d331b0b76889b19fa3de7b0300dc0bbc5366 Mon Sep 17 00:00:00 2001 | ||
2 | From: Aaro Koskinen <aaro.koskinen@nokia.com> | ||
3 | Date: Thu, 24 Mar 2011 18:35:31 +0200 | ||
4 | Subject: [PATCH 34/59] OMAP3+: smartreflex: fix sr_late_init() error path in probe | ||
5 | |||
6 | sr_late_init() will take care of freeing the resources. | ||
7 | |||
8 | Signed-off-by: Aaro Koskinen <aaro.koskinen@nokia.com> | ||
9 | Signed-off-by: Kevin Hilman <khilman@ti.com> | ||
10 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
11 | --- | ||
12 | arch/arm/mach-omap2/smartreflex.c | 2 +- | ||
13 | 1 files changed, 1 insertions(+), 1 deletions(-) | ||
14 | |||
15 | diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c | ||
16 | index 13e24f9..dbc4b6f 100644 | ||
17 | --- a/arch/arm/mach-omap2/smartreflex.c | ||
18 | +++ b/arch/arm/mach-omap2/smartreflex.c | ||
19 | @@ -883,7 +883,7 @@ static int __init omap_sr_probe(struct platform_device *pdev) | ||
20 | ret = sr_late_init(sr_info); | ||
21 | if (ret) { | ||
22 | pr_warning("%s: Error in SR late init\n", __func__); | ||
23 | - goto err_release_region; | ||
24 | + return ret; | ||
25 | } | ||
26 | } | ||
27 | |||
28 | -- | ||
29 | 1.6.6.1 | ||
30 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0035-OMAP3-smartreflex-request-the-memory-region.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0035-OMAP3-smartreflex-request-the-memory-region.patch new file mode 100644 index 00000000..6ba603c0 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0035-OMAP3-smartreflex-request-the-memory-region.patch | |||
@@ -0,0 +1,36 @@ | |||
1 | From 2b5e2efb76a51a07721352afeeaddb249267042e Mon Sep 17 00:00:00 2001 | ||
2 | From: Aaro Koskinen <aaro.koskinen@nokia.com> | ||
3 | Date: Thu, 24 Mar 2011 18:35:32 +0200 | ||
4 | Subject: [PATCH 35/59] OMAP3+: smartreflex: request the memory region | ||
5 | |||
6 | We are releasing the memory region, but never actually request it. | ||
7 | |||
8 | Signed-off-by: Aaro Koskinen <aaro.koskinen@nokia.com> | ||
9 | Signed-off-by: Kevin Hilman <khilman@ti.com> | ||
10 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
11 | --- | ||
12 | arch/arm/mach-omap2/smartreflex.c | 8 ++++++++ | ||
13 | 1 files changed, 8 insertions(+), 0 deletions(-) | ||
14 | |||
15 | diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c | ||
16 | index dbc4b6f..703143a 100644 | ||
17 | --- a/arch/arm/mach-omap2/smartreflex.c | ||
18 | +++ b/arch/arm/mach-omap2/smartreflex.c | ||
19 | @@ -847,6 +847,14 @@ static int __init omap_sr_probe(struct platform_device *pdev) | ||
20 | goto err_free_devinfo; | ||
21 | } | ||
22 | |||
23 | + mem = request_mem_region(mem->start, resource_size(mem), | ||
24 | + dev_name(&pdev->dev)); | ||
25 | + if (!mem) { | ||
26 | + dev_err(&pdev->dev, "%s: no mem region\n", __func__); | ||
27 | + ret = -EBUSY; | ||
28 | + goto err_free_devinfo; | ||
29 | + } | ||
30 | + | ||
31 | irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); | ||
32 | |||
33 | pm_runtime_enable(&pdev->dev); | ||
34 | -- | ||
35 | 1.6.6.1 | ||
36 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0036-OMAP3-smartreflex-fix-ioremap-leak-on-probe-error.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0036-OMAP3-smartreflex-fix-ioremap-leak-on-probe-error.patch new file mode 100644 index 00000000..28ee84fc --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0036-OMAP3-smartreflex-fix-ioremap-leak-on-probe-error.patch | |||
@@ -0,0 +1,66 @@ | |||
1 | From 1108cddc9f227ba5ded64c1c8141ce9147a4902d Mon Sep 17 00:00:00 2001 | ||
2 | From: Aaro Koskinen <aaro.koskinen@nokia.com> | ||
3 | Date: Thu, 24 Mar 2011 18:35:33 +0200 | ||
4 | Subject: [PATCH 36/59] OMAP3+: smartreflex: fix ioremap leak on probe error | ||
5 | |||
6 | Add missing iounmap() to error paths. | ||
7 | |||
8 | Signed-off-by: Aaro Koskinen <aaro.koskinen@nokia.com> | ||
9 | Signed-off-by: Kevin Hilman <khilman@ti.com> | ||
10 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
11 | --- | ||
12 | arch/arm/mach-omap2/smartreflex.c | 10 ++++++---- | ||
13 | 1 files changed, 6 insertions(+), 4 deletions(-) | ||
14 | |||
15 | diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c | ||
16 | index 703143a..156807e 100644 | ||
17 | --- a/arch/arm/mach-omap2/smartreflex.c | ||
18 | +++ b/arch/arm/mach-omap2/smartreflex.c | ||
19 | @@ -904,7 +904,7 @@ static int __init omap_sr_probe(struct platform_device *pdev) | ||
20 | vdd_dbg_dir = omap_voltage_get_dbgdir(sr_info->voltdm); | ||
21 | if (!vdd_dbg_dir) { | ||
22 | ret = -EINVAL; | ||
23 | - goto err_release_region; | ||
24 | + goto err_iounmap; | ||
25 | } | ||
26 | |||
27 | sr_info->dbg_dir = debugfs_create_dir("smartreflex", vdd_dbg_dir); | ||
28 | @@ -912,7 +912,7 @@ static int __init omap_sr_probe(struct platform_device *pdev) | ||
29 | dev_err(&pdev->dev, "%s: Unable to create debugfs directory\n", | ||
30 | __func__); | ||
31 | ret = PTR_ERR(sr_info->dbg_dir); | ||
32 | - goto err_release_region; | ||
33 | + goto err_iounmap; | ||
34 | } | ||
35 | |||
36 | (void) debugfs_create_file("autocomp", S_IRUGO | S_IWUSR, | ||
37 | @@ -929,7 +929,7 @@ static int __init omap_sr_probe(struct platform_device *pdev) | ||
38 | dev_err(&pdev->dev, "%s: Unable to create debugfs directory" | ||
39 | "for n-values\n", __func__); | ||
40 | ret = PTR_ERR(nvalue_dir); | ||
41 | - goto err_release_region; | ||
42 | + goto err_iounmap; | ||
43 | } | ||
44 | |||
45 | omap_voltage_get_volttable(sr_info->voltdm, &volt_data); | ||
46 | @@ -939,7 +939,7 @@ static int __init omap_sr_probe(struct platform_device *pdev) | ||
47 | "entries for n-values\n", | ||
48 | __func__, sr_info->voltdm->name); | ||
49 | ret = -ENODATA; | ||
50 | - goto err_release_region; | ||
51 | + goto err_iounmap; | ||
52 | } | ||
53 | |||
54 | for (i = 0; i < sr_info->nvalue_count; i++) { | ||
55 | @@ -953,6 +953,8 @@ static int __init omap_sr_probe(struct platform_device *pdev) | ||
56 | |||
57 | return ret; | ||
58 | |||
59 | +err_iounmap: | ||
60 | + iounmap(sr_info->base); | ||
61 | err_release_region: | ||
62 | release_mem_region(mem->start, resource_size(mem)); | ||
63 | err_free_devinfo: | ||
64 | -- | ||
65 | 1.6.6.1 | ||
66 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0037-OMAP3-smartreflex-delete-instance-from-sr_list-on-pr.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0037-OMAP3-smartreflex-delete-instance-from-sr_list-on-pr.patch new file mode 100644 index 00000000..b90d5458 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0037-OMAP3-smartreflex-delete-instance-from-sr_list-on-pr.patch | |||
@@ -0,0 +1,29 @@ | |||
1 | From 75fb23b53cbbd38aac84143ead8a33432dcfecdc Mon Sep 17 00:00:00 2001 | ||
2 | From: Aaro Koskinen <aaro.koskinen@nokia.com> | ||
3 | Date: Thu, 24 Mar 2011 18:35:34 +0200 | ||
4 | Subject: [PATCH 37/59] OMAP3+: smartreflex: delete instance from sr_list on probe error | ||
5 | |||
6 | If the probe fails, the node should be deleted from sr_list. | ||
7 | |||
8 | Signed-off-by: Aaro Koskinen <aaro.koskinen@nokia.com> | ||
9 | Signed-off-by: Kevin Hilman <khilman@ti.com> | ||
10 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
11 | --- | ||
12 | arch/arm/mach-omap2/smartreflex.c | 1 + | ||
13 | 1 files changed, 1 insertions(+), 0 deletions(-) | ||
14 | |||
15 | diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c | ||
16 | index 156807e..f0a488a 100644 | ||
17 | --- a/arch/arm/mach-omap2/smartreflex.c | ||
18 | +++ b/arch/arm/mach-omap2/smartreflex.c | ||
19 | @@ -954,6 +954,7 @@ static int __init omap_sr_probe(struct platform_device *pdev) | ||
20 | return ret; | ||
21 | |||
22 | err_iounmap: | ||
23 | + list_del(&sr_info->node); | ||
24 | iounmap(sr_info->base); | ||
25 | err_release_region: | ||
26 | release_mem_region(mem->start, resource_size(mem)); | ||
27 | -- | ||
28 | 1.6.6.1 | ||
29 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0038-OMAP3-smartreflex-delete-debugfs-entries-on-probe-er.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0038-OMAP3-smartreflex-delete-debugfs-entries-on-probe-er.patch new file mode 100644 index 00000000..1090a569 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0038-OMAP3-smartreflex-delete-debugfs-entries-on-probe-er.patch | |||
@@ -0,0 +1,48 @@ | |||
1 | From c919cf5aaa6a54e8ad944c550e2292830d17c526 Mon Sep 17 00:00:00 2001 | ||
2 | From: Aaro Koskinen <aaro.koskinen@nokia.com> | ||
3 | Date: Thu, 24 Mar 2011 18:35:35 +0200 | ||
4 | Subject: [PATCH 38/59] OMAP3+: smartreflex: delete debugfs entries on probe error | ||
5 | |||
6 | Delete created debugfs entries if probe fails. | ||
7 | |||
8 | Signed-off-by: Aaro Koskinen <aaro.koskinen@nokia.com> | ||
9 | Signed-off-by: Kevin Hilman <khilman@ti.com> | ||
10 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
11 | --- | ||
12 | arch/arm/mach-omap2/smartreflex.c | 6 ++++-- | ||
13 | 1 files changed, 4 insertions(+), 2 deletions(-) | ||
14 | |||
15 | diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c | ||
16 | index f0a488a..fb7dc52 100644 | ||
17 | --- a/arch/arm/mach-omap2/smartreflex.c | ||
18 | +++ b/arch/arm/mach-omap2/smartreflex.c | ||
19 | @@ -929,7 +929,7 @@ static int __init omap_sr_probe(struct platform_device *pdev) | ||
20 | dev_err(&pdev->dev, "%s: Unable to create debugfs directory" | ||
21 | "for n-values\n", __func__); | ||
22 | ret = PTR_ERR(nvalue_dir); | ||
23 | - goto err_iounmap; | ||
24 | + goto err_debugfs; | ||
25 | } | ||
26 | |||
27 | omap_voltage_get_volttable(sr_info->voltdm, &volt_data); | ||
28 | @@ -939,7 +939,7 @@ static int __init omap_sr_probe(struct platform_device *pdev) | ||
29 | "entries for n-values\n", | ||
30 | __func__, sr_info->voltdm->name); | ||
31 | ret = -ENODATA; | ||
32 | - goto err_iounmap; | ||
33 | + goto err_debugfs; | ||
34 | } | ||
35 | |||
36 | for (i = 0; i < sr_info->nvalue_count; i++) { | ||
37 | @@ -953,6 +953,8 @@ static int __init omap_sr_probe(struct platform_device *pdev) | ||
38 | |||
39 | return ret; | ||
40 | |||
41 | +err_debugfs: | ||
42 | + debugfs_remove_recursive(sr_info->dbg_dir); | ||
43 | err_iounmap: | ||
44 | list_del(&sr_info->node); | ||
45 | iounmap(sr_info->base); | ||
46 | -- | ||
47 | 1.6.6.1 | ||
48 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0039-OMAP3-cpuidle-remove-useless-SDP-specific-timings.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0039-OMAP3-cpuidle-remove-useless-SDP-specific-timings.patch new file mode 100644 index 00000000..ef048836 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0039-OMAP3-cpuidle-remove-useless-SDP-specific-timings.patch | |||
@@ -0,0 +1,57 @@ | |||
1 | From be5b001b92e2c49f2f16d082e8ac33d371990ad4 Mon Sep 17 00:00:00 2001 | ||
2 | From: Jean Pihet <j-pihet@ti.com> | ||
3 | Date: Fri, 29 Apr 2011 11:26:22 +0200 | ||
4 | Subject: [PATCH 39/59] OMAP3 cpuidle: remove useless SDP specific timings | ||
5 | |||
6 | The cpuidle states settings can be overriden by some board- | ||
7 | specific settings, by calling omap3_pm_init_cpuidle. | ||
8 | Remove the 3430SDP specific states settings registration | ||
9 | since the figures are identical to the default ones (in cpuidle34xx.c). | ||
10 | |||
11 | Signed-off-by: Jean Pihet <j-pihet@ti.com> | ||
12 | Signed-off-by: Kevin Hilman <khilman@ti.com> | ||
13 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
14 | --- | ||
15 | arch/arm/mach-omap2/board-3430sdp.c | 19 ------------------- | ||
16 | 1 files changed, 0 insertions(+), 19 deletions(-) | ||
17 | |||
18 | diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c | ||
19 | index 9afd087..7ffad7b 100644 | ||
20 | --- a/arch/arm/mach-omap2/board-3430sdp.c | ||
21 | +++ b/arch/arm/mach-omap2/board-3430sdp.c | ||
22 | @@ -59,24 +59,6 @@ | ||
23 | |||
24 | #define TWL4030_MSECURE_GPIO 22 | ||
25 | |||
26 | -/* FIXME: These values need to be updated based on more profiling on 3430sdp*/ | ||
27 | -static struct cpuidle_params omap3_cpuidle_params_table[] = { | ||
28 | - /* C1 */ | ||
29 | - {1, 2, 2, 5}, | ||
30 | - /* C2 */ | ||
31 | - {1, 10, 10, 30}, | ||
32 | - /* C3 */ | ||
33 | - {1, 50, 50, 300}, | ||
34 | - /* C4 */ | ||
35 | - {1, 1500, 1800, 4000}, | ||
36 | - /* C5 */ | ||
37 | - {1, 2500, 7500, 12000}, | ||
38 | - /* C6 */ | ||
39 | - {1, 3000, 8500, 15000}, | ||
40 | - /* C7 */ | ||
41 | - {1, 10000, 30000, 300000}, | ||
42 | -}; | ||
43 | - | ||
44 | static uint32_t board_keymap[] = { | ||
45 | KEY(0, 0, KEY_LEFT), | ||
46 | KEY(0, 1, KEY_RIGHT), | ||
47 | @@ -883,7 +865,6 @@ static void __init omap_3430sdp_init(void) | ||
48 | omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); | ||
49 | omap_board_config = sdp3430_config; | ||
50 | omap_board_config_size = ARRAY_SIZE(sdp3430_config); | ||
51 | - omap3_pm_init_cpuidle(omap3_cpuidle_params_table); | ||
52 | omap3430_i2c_init(); | ||
53 | omap_display_init(&sdp3430_dss_data); | ||
54 | if (omap_rev() > OMAP3430_REV_ES1_0) | ||
55 | -- | ||
56 | 1.6.6.1 | ||
57 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0040-OMAP3-SR-make-notify-independent-of-class.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0040-OMAP3-SR-make-notify-independent-of-class.patch new file mode 100644 index 00000000..652c5fd1 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0040-OMAP3-SR-make-notify-independent-of-class.patch | |||
@@ -0,0 +1,48 @@ | |||
1 | From 4e63fe929ae78610afd830f7fded2e9f7b65ec21 Mon Sep 17 00:00:00 2001 | ||
2 | From: Nishanth Menon <nm@ti.com> | ||
3 | Date: Mon, 14 Feb 2011 12:16:36 +0530 | ||
4 | Subject: [PATCH 40/59] OMAP3+: SR: make notify independent of class | ||
5 | |||
6 | Interrupt notification mechanism of SmartReflex can be used by the | ||
7 | choice of implementation of the class driver. For example, Class 2 and | ||
8 | Class 1.5 of SmartReflex can both use the interrupt notification to | ||
9 | identify the transition of voltage or other events. | ||
10 | |||
11 | Hence, the actual class does not matter for notifier. Let the class | ||
12 | driver's handling decide how it should be used. SmartReflex driver | ||
13 | should provide just the primitives. | ||
14 | |||
15 | Signed-off-by: Nishanth Menon <nm@ti.com> | ||
16 | Signed-off-by: Kevin Hilman <khilman@ti.com> | ||
17 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
18 | --- | ||
19 | arch/arm/mach-omap2/smartreflex.c | 6 ++---- | ||
20 | 1 files changed, 2 insertions(+), 4 deletions(-) | ||
21 | |||
22 | diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c | ||
23 | index fb7dc52..3ee7261 100644 | ||
24 | --- a/arch/arm/mach-omap2/smartreflex.c | ||
25 | +++ b/arch/arm/mach-omap2/smartreflex.c | ||
26 | @@ -143,7 +143,7 @@ static irqreturn_t sr_interrupt(int irq, void *data) | ||
27 | sr_write_reg(sr_info, IRQSTATUS, status); | ||
28 | } | ||
29 | |||
30 | - if (sr_class->class_type == SR_CLASS2 && sr_class->notify) | ||
31 | + if (sr_class->notify) | ||
32 | sr_class->notify(sr_info->voltdm, status); | ||
33 | |||
34 | return IRQ_HANDLED; | ||
35 | @@ -258,9 +258,7 @@ static int sr_late_init(struct omap_sr *sr_info) | ||
36 | struct resource *mem; | ||
37 | int ret = 0; | ||
38 | |||
39 | - if (sr_class->class_type == SR_CLASS2 && | ||
40 | - sr_class->notify_flags && sr_info->irq) { | ||
41 | - | ||
42 | + if (sr_class->notify && sr_class->notify_flags && sr_info->irq) { | ||
43 | name = kasprintf(GFP_KERNEL, "sr_%s", sr_info->voltdm->name); | ||
44 | if (name == NULL) { | ||
45 | ret = -ENOMEM; | ||
46 | -- | ||
47 | 1.6.6.1 | ||
48 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0041-OMAP3-SR-disable-interrupt-by-default.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0041-OMAP3-SR-disable-interrupt-by-default.patch new file mode 100644 index 00000000..109804a1 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0041-OMAP3-SR-disable-interrupt-by-default.patch | |||
@@ -0,0 +1,37 @@ | |||
1 | From bec14dd673e09459c45ef5b0408e68b92eebc404 Mon Sep 17 00:00:00 2001 | ||
2 | From: Nishanth Menon <nm@ti.com> | ||
3 | Date: Mon, 14 Feb 2011 12:41:10 +0530 | ||
4 | Subject: [PATCH 41/59] OMAP3+: SR: disable interrupt by default | ||
5 | |||
6 | We will enable and disable interrupt on a need basis in the class | ||
7 | driver. We need to keep the IRQ disabled by default else the | ||
8 | forceupdate or vcbypass events could trigger events that we don't | ||
9 | need/expect to handle. | ||
10 | |||
11 | This is a preparation for SmartReflex AVS class drivers such as | ||
12 | class 2 and class 1.5 which would need to use interrupts. Existing | ||
13 | SmartReflex AVS class 3 driver does not require to use interrupts | ||
14 | and is not impacted by this change. | ||
15 | |||
16 | Signed-off-by: Nishanth Menon <nm@ti.com> | ||
17 | Signed-off-by: Kevin Hilman <khilman@ti.com> | ||
18 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
19 | --- | ||
20 | arch/arm/mach-omap2/smartreflex.c | 1 + | ||
21 | 1 files changed, 1 insertions(+), 0 deletions(-) | ||
22 | |||
23 | diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c | ||
24 | index 3ee7261..616ef62 100644 | ||
25 | --- a/arch/arm/mach-omap2/smartreflex.c | ||
26 | +++ b/arch/arm/mach-omap2/smartreflex.c | ||
27 | @@ -268,6 +268,7 @@ static int sr_late_init(struct omap_sr *sr_info) | ||
28 | 0, name, (void *)sr_info); | ||
29 | if (ret) | ||
30 | goto error; | ||
31 | + disable_irq(sr_info->irq); | ||
32 | } | ||
33 | |||
34 | if (pdata && pdata->enable_on_init) | ||
35 | -- | ||
36 | 1.6.6.1 | ||
37 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0042-OMAP3-SR-enable-disable-SR-only-on-need.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0042-OMAP3-SR-enable-disable-SR-only-on-need.patch new file mode 100644 index 00000000..5549c5d5 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0042-OMAP3-SR-enable-disable-SR-only-on-need.patch | |||
@@ -0,0 +1,41 @@ | |||
1 | From 5f47ccf7f261602e30685bcf41c02ee8dc006fc9 Mon Sep 17 00:00:00 2001 | ||
2 | From: Nishanth Menon <nm@ti.com> | ||
3 | Date: Mon, 14 Feb 2011 21:14:17 +0530 | ||
4 | Subject: [PATCH 42/59] OMAP3+: SR: enable/disable SR only on need | ||
5 | |||
6 | Since we already know the state of the autocomp enablement, we can | ||
7 | see if the requested state is different from the current state and | ||
8 | enable/disable SR only on the need basis. | ||
9 | |||
10 | Signed-off-by: Nishanth Menon <nm@ti.com> | ||
11 | Signed-off-by: Kevin Hilman <khilman@ti.com> | ||
12 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
13 | --- | ||
14 | arch/arm/mach-omap2/smartreflex.c | 11 +++++++---- | ||
15 | 1 files changed, 7 insertions(+), 4 deletions(-) | ||
16 | |||
17 | diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c | ||
18 | index 616ef62..3bd9fac 100644 | ||
19 | --- a/arch/arm/mach-omap2/smartreflex.c | ||
20 | +++ b/arch/arm/mach-omap2/smartreflex.c | ||
21 | @@ -807,10 +807,13 @@ static int omap_sr_autocomp_store(void *data, u64 val) | ||
22 | return -EINVAL; | ||
23 | } | ||
24 | |||
25 | - if (!val) | ||
26 | - sr_stop_vddautocomp(sr_info); | ||
27 | - else | ||
28 | - sr_start_vddautocomp(sr_info); | ||
29 | + /* control enable/disable only if there is a delta in value */ | ||
30 | + if (sr_info->autocomp_active != val) { | ||
31 | + if (!val) | ||
32 | + sr_stop_vddautocomp(sr_info); | ||
33 | + else | ||
34 | + sr_start_vddautocomp(sr_info); | ||
35 | + } | ||
36 | |||
37 | return 0; | ||
38 | } | ||
39 | -- | ||
40 | 1.6.6.1 | ||
41 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0043-OMAP3-SR-fix-cosmetic-indentation.patch b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0043-OMAP3-SR-fix-cosmetic-indentation.patch new file mode 100644 index 00000000..04c61292 --- /dev/null +++ b/recipes-kernel/linux/linux-omap-2.6.39/pm/linux-omap-2.6.39-ti-pm/0043-OMAP3-SR-fix-cosmetic-indentation.patch | |||
@@ -0,0 +1,49 @@ | |||
1 | From ccdecc80f8c47e5fc20d10d17dd44d89302e0f83 Mon Sep 17 00:00:00 2001 | ||
2 | From: Nishanth Menon <nm@ti.com> | ||
3 | Date: Mon, 14 Feb 2011 12:33:13 +0530 | ||
4 | Subject: [PATCH 43/59] OMAP3+: SR: fix cosmetic indentation | ||
5 | |||
6 | Error label case seems to have a 2 tab indentation when just 1 is | ||
7 | necessary. | ||
8 | |||
9 | Signed-off-by: Nishanth Menon <nm@ti.com> | ||
10 | Signed-off-by: Kevin Hilman <khilman@ti.com> | ||
11 | Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> | ||
12 | --- | ||
13 | arch/arm/mach-omap2/smartreflex.c | 20 ++++++++++---------- | ||
14 | 1 files changed, 10 insertions(+), 10 deletions(-) | ||
15 | |||
16 | diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c | ||
17 | index 3bd9fac..2ce2fb7 100644 | ||
18 | --- a/arch/arm/mach-omap2/smartreflex.c | ||
19 | +++ b/arch/arm/mach-omap2/smartreflex.c | ||
20 | @@ -277,16 +277,16 @@ static int sr_late_init(struct omap_sr *sr_info) | ||
21 | return ret; | ||
22 | |||
23 | error: | ||
24 | - iounmap(sr_info->base); | ||
25 | - mem = platform_get_resource(sr_info->pdev, IORESOURCE_MEM, 0); | ||
26 | - release_mem_region(mem->start, resource_size(mem)); | ||
27 | - list_del(&sr_info->node); | ||
28 | - dev_err(&sr_info->pdev->dev, "%s: ERROR in registering" | ||
29 | - "interrupt handler. Smartreflex will" | ||
30 | - "not function as desired\n", __func__); | ||
31 | - kfree(name); | ||
32 | - kfree(sr_info); | ||
33 | - return ret; | ||
34 | + iounmap(sr_info->base); | ||
35 | + mem = platform_get_resource(sr_info->pdev, IORESOURCE_MEM, 0); | ||
36 | + release_mem_region(mem->start, resource_size(mem)); | ||
37 | + list_del(&sr_info->node); | ||
38 | + dev_err(&sr_info->pdev->dev, "%s: ERROR in registering" | ||
39 | + "interrupt handler. Smartreflex will" | ||
40 | + "not function as desired\n", __func__); | ||
41 | + kfree(name); | ||
42 | + kfree(sr_info); | ||
43 | + return ret; | ||
44 | } | ||
45 | |||
46 | static void sr_v1_disable(struct omap_sr *sr) | ||
47 | -- | ||
48 | 1.6.6.1 | ||
49 | |||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0001-OMAP-DSS2-DSI-fix-use_sys_clk-highfreq.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0001-OMAP-DSS2-DSI-fix-use_sys_clk-highfreq.patch index 248d3312..86331d94 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0001-OMAP-DSS2-DSI-fix-use_sys_clk-highfreq.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0001-OMAP-DSS2-DSI-fix-use_sys_clk-highfreq.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From 49958f1925489048aa5a6834f61d61c8551f8ec3 Mon Sep 17 00:00:00 2001 | 1 | From 49958f1925489048aa5a6834f61d61c8551f8ec3 Mon Sep 17 00:00:00 2001 |
2 | From: Tomi Valkeinen <tomi.valkeinen@ti.com> | 2 | From: Tomi Valkeinen <tomi.valkeinen@ti.com> |
3 | Date: Thu, 7 Apr 2011 15:28:47 +0300 | 3 | Date: Thu, 7 Apr 2011 15:28:47 +0300 |
4 | Subject: [PATCH 01/28] OMAP: DSS2: DSI: fix use_sys_clk & highfreq | 4 | Subject: [PATCH 01/59] OMAP: DSS2: DSI: fix use_sys_clk & highfreq |
5 | 5 | ||
6 | use_sys_clk and highfreq fields in dsi.current_cinfo were never set. | 6 | use_sys_clk and highfreq fields in dsi.current_cinfo were never set. |
7 | Luckily they weren't used anywhere so it didn't cause any problems. | 7 | Luckily they weren't used anywhere so it didn't cause any problems. |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0002-OMAP-DSS2-DSI-fix-dsi_dump_clocks.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0002-OMAP-DSS2-DSI-fix-dsi_dump_clocks.patch index 01fdd727..8dd413f1 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0002-OMAP-DSS2-DSI-fix-dsi_dump_clocks.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0002-OMAP-DSS2-DSI-fix-dsi_dump_clocks.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From ccf7f535d7e809e563812f1c4897bdb9a1ff9233 Mon Sep 17 00:00:00 2001 | 1 | From ccf7f535d7e809e563812f1c4897bdb9a1ff9233 Mon Sep 17 00:00:00 2001 |
2 | From: Tomi Valkeinen <tomi.valkeinen@ti.com> | 2 | From: Tomi Valkeinen <tomi.valkeinen@ti.com> |
3 | Date: Mon, 4 Apr 2011 10:02:53 +0300 | 3 | Date: Mon, 4 Apr 2011 10:02:53 +0300 |
4 | Subject: [PATCH 02/28] OMAP: DSS2: DSI: fix dsi_dump_clocks() | 4 | Subject: [PATCH 02/59] OMAP: DSS2: DSI: fix dsi_dump_clocks() |
5 | 5 | ||
6 | On OMAP4, reading DSI_PLL_CONFIGURATION2 register requires the L3 clock | 6 | On OMAP4, reading DSI_PLL_CONFIGURATION2 register requires the L3 clock |
7 | (CIO_CLK_ICG) to PLL. Currently dsi_dump_clocks() tries to read that | 7 | (CIO_CLK_ICG) to PLL. Currently dsi_dump_clocks() tries to read that |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0003-OMAP2PLUS-DSS2-Fix-Return-correct-lcd-clock-source-f.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0003-OMAP2PLUS-DSS2-Fix-Return-correct-lcd-clock-source-f.patch index fb49a3ef..a8d123d5 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0003-OMAP2PLUS-DSS2-Fix-Return-correct-lcd-clock-source-f.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0003-OMAP2PLUS-DSS2-Fix-Return-correct-lcd-clock-source-f.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From 2ffa7a6c3cafb4f2a48ae274b2952ad48ae78eeb Mon Sep 17 00:00:00 2001 | 1 | From 2ffa7a6c3cafb4f2a48ae274b2952ad48ae78eeb Mon Sep 17 00:00:00 2001 |
2 | From: Archit Taneja <archit@ti.com> | 2 | From: Archit Taneja <archit@ti.com> |
3 | Date: Thu, 31 Mar 2011 13:23:35 +0530 | 3 | Date: Thu, 31 Mar 2011 13:23:35 +0530 |
4 | Subject: [PATCH 03/28] OMAP2PLUS: DSS2: Fix: Return correct lcd clock source for OMAP2/3 | 4 | Subject: [PATCH 03/59] OMAP2PLUS: DSS2: Fix: Return correct lcd clock source for OMAP2/3 |
5 | 5 | ||
6 | dss.lcd_clk_source is set to the default value DSS_CLK_SRC_FCK at dss_init. | 6 | dss.lcd_clk_source is set to the default value DSS_CLK_SRC_FCK at dss_init. |
7 | For OMAP2 and OMAP3, the dss.lcd_clk_source should always be the same as | 7 | For OMAP2 and OMAP3, the dss.lcd_clk_source should always be the same as |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0004-OMAP-DSS-DSI-Fix-DSI-PLL-power-bug.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0004-OMAP-DSS-DSI-Fix-DSI-PLL-power-bug.patch index 81f82e7c..be2ac858 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0004-OMAP-DSS-DSI-Fix-DSI-PLL-power-bug.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0004-OMAP-DSS-DSI-Fix-DSI-PLL-power-bug.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From ee251e5c35b1325d696df35d297f34a9ccd6f5af Mon Sep 17 00:00:00 2001 | 1 | From ee251e5c35b1325d696df35d297f34a9ccd6f5af Mon Sep 17 00:00:00 2001 |
2 | From: Tomi Valkeinen <tomi.valkeinen@ti.com> | 2 | From: Tomi Valkeinen <tomi.valkeinen@ti.com> |
3 | Date: Fri, 15 Apr 2011 10:42:59 +0300 | 3 | Date: Fri, 15 Apr 2011 10:42:59 +0300 |
4 | Subject: [PATCH 04/28] OMAP: DSS: DSI: Fix DSI PLL power bug | 4 | Subject: [PATCH 04/59] OMAP: DSS: DSI: Fix DSI PLL power bug |
5 | 5 | ||
6 | OMAP3630 has a HW bug causing DSI PLL power command POWER_ON_DIV (0x3) | 6 | OMAP3630 has a HW bug causing DSI PLL power command POWER_ON_DIV (0x3) |
7 | to not work properly. The bug prevents us from enabling DSI PLL power | 7 | to not work properly. The bug prevents us from enabling DSI PLL power |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0005-OMAP-DSS2-fix-panel-Kconfig-dependencies.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0005-OMAP-DSS2-fix-panel-Kconfig-dependencies.patch index b1845e92..fb2b6664 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0005-OMAP-DSS2-fix-panel-Kconfig-dependencies.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0005-OMAP-DSS2-fix-panel-Kconfig-dependencies.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From c479d815f14b4b5ed7871660027d043a432968a8 Mon Sep 17 00:00:00 2001 | 1 | From c479d815f14b4b5ed7871660027d043a432968a8 Mon Sep 17 00:00:00 2001 |
2 | From: Tomi Valkeinen <tomi.valkeinen@ti.com> | 2 | From: Tomi Valkeinen <tomi.valkeinen@ti.com> |
3 | Date: Fri, 8 Apr 2011 09:30:27 +0300 | 3 | Date: Fri, 8 Apr 2011 09:30:27 +0300 |
4 | Subject: [PATCH 05/28] OMAP: DSS2: fix panel Kconfig dependencies | 4 | Subject: [PATCH 05/59] OMAP: DSS2: fix panel Kconfig dependencies |
5 | 5 | ||
6 | All DPI panels were missing dependency to OMAP2_DSS_DPI. Add the | 6 | All DPI panels were missing dependency to OMAP2_DSS_DPI. Add the |
7 | dependency. | 7 | dependency. |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0006-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0006-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch index 4b897607..0679c74f 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0006-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0006-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From 661c19e763f0bda0a07bc64159c6b0c5f2f52b60 Mon Sep 17 00:00:00 2001 | 1 | From 661c19e763f0bda0a07bc64159c6b0c5f2f52b60 Mon Sep 17 00:00:00 2001 |
2 | From: Steve Sakoman <steve@sakoman.com> | 2 | From: Steve Sakoman <steve@sakoman.com> |
3 | Date: Tue, 19 Jan 2010 21:19:15 -0800 | 3 | Date: Tue, 19 Jan 2010 21:19:15 -0800 |
4 | Subject: [PATCH 06/28] OMAP: DSS2: add bootarg for selecting svideo or composite for tv output | 4 | Subject: [PATCH 06/59] OMAP: DSS2: add bootarg for selecting svideo or composite for tv output |
5 | 5 | ||
6 | also add pal-16 and ntsc-16 omapfb.mode settings for 16bpp | 6 | also add pal-16 and ntsc-16 omapfb.mode settings for 16bpp |
7 | --- | 7 | --- |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0007-video-add-timings-for-hd720.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0007-video-add-timings-for-hd720.patch index f624d58a..5182a730 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0007-video-add-timings-for-hd720.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0007-video-add-timings-for-hd720.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From 14ea4d9f0f90726b653b42697043e73ef699b4ba Mon Sep 17 00:00:00 2001 | 1 | From 14ea4d9f0f90726b653b42697043e73ef699b4ba Mon Sep 17 00:00:00 2001 |
2 | From: Steve Sakoman <steve@sakoman.com> | 2 | From: Steve Sakoman <steve@sakoman.com> |
3 | Date: Sat, 19 Dec 2009 06:52:43 -0800 | 3 | Date: Sat, 19 Dec 2009 06:52:43 -0800 |
4 | Subject: [PATCH 07/28] video: add timings for hd720 | 4 | Subject: [PATCH 07/59] video: add timings for hd720 |
5 | 5 | ||
6 | --- | 6 | --- |
7 | drivers/video/modedb.c | 4 ++++ | 7 | drivers/video/modedb.c | 4 ++++ |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0008-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0008-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch index af14160d..716093f7 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0008-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0008-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From b62ecb49cfe8978390b7c8848e13555c4c699b0f Mon Sep 17 00:00:00 2001 | 1 | From b62ecb49cfe8978390b7c8848e13555c4c699b0f Mon Sep 17 00:00:00 2001 |
2 | From: Steve Sakoman <sakoman@gmail.com> | 2 | From: Steve Sakoman <sakoman@gmail.com> |
3 | Date: Tue, 15 Dec 2009 15:17:44 -0800 | 3 | Date: Tue, 15 Dec 2009 15:17:44 -0800 |
4 | Subject: [PATCH 08/28] drivers: net: smsc911x: return ENODEV if device is not found | 4 | Subject: [PATCH 08/59] drivers: net: smsc911x: return ENODEV if device is not found |
5 | 5 | ||
6 | Signed-off-by: Steve Sakoman <sakoman@gmail.com> | 6 | Signed-off-by: Steve Sakoman <sakoman@gmail.com> |
7 | --- | 7 | --- |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0009-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0009-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch index 042ab44a..567ed542 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0009-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0009-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From b1515f616ee48452a7cb2c5d0f31b1f8f4463f94 Mon Sep 17 00:00:00 2001 | 1 | From b1515f616ee48452a7cb2c5d0f31b1f8f4463f94 Mon Sep 17 00:00:00 2001 |
2 | From: Steve Sakoman <sakoman@gmail.com> | 2 | From: Steve Sakoman <sakoman@gmail.com> |
3 | Date: Tue, 15 Dec 2009 15:24:10 -0800 | 3 | Date: Tue, 15 Dec 2009 15:24:10 -0800 |
4 | Subject: [PATCH 09/28] drivers: input: touchscreen: ads7846: return ENODEV if device is not found | 4 | Subject: [PATCH 09/59] drivers: input: touchscreen: ads7846: return ENODEV if device is not found |
5 | 5 | ||
6 | Signed-off-by: Steve Sakoman <sakoman@gmail.com> | 6 | Signed-off-by: Steve Sakoman <sakoman@gmail.com> |
7 | --- | 7 | --- |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0010-Revert-omap2_mcspi-Flush-posted-writes.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0010-Revert-omap2_mcspi-Flush-posted-writes.patch index f5265a34..cc4b87e9 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0010-Revert-omap2_mcspi-Flush-posted-writes.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0010-Revert-omap2_mcspi-Flush-posted-writes.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From c2b7ff69cae57875b711eeb9cb6c97e7ba090c08 Mon Sep 17 00:00:00 2001 | 1 | From c2b7ff69cae57875b711eeb9cb6c97e7ba090c08 Mon Sep 17 00:00:00 2001 |
2 | From: Steve Sakoman <steve@sakoman.com> | 2 | From: Steve Sakoman <steve@sakoman.com> |
3 | Date: Thu, 3 Mar 2011 13:29:30 -0800 | 3 | Date: Thu, 3 Mar 2011 13:29:30 -0800 |
4 | Subject: [PATCH 10/28] Revert "omap2_mcspi: Flush posted writes" | 4 | Subject: [PATCH 10/59] Revert "omap2_mcspi: Flush posted writes" |
5 | 5 | ||
6 | This reverts commit a330ce2001b290c59fe98c37e981683ef0a75fdf. | 6 | This reverts commit a330ce2001b290c59fe98c37e981683ef0a75fdf. |
7 | --- | 7 | --- |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0011-Revert-omap_hsmmc-improve-interrupt-synchronisation.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0011-Revert-omap_hsmmc-improve-interrupt-synchronisation.patch index 7592bab2..24c6ded6 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0011-Revert-omap_hsmmc-improve-interrupt-synchronisation.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0011-Revert-omap_hsmmc-improve-interrupt-synchronisation.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From ed9bca69fdaa7edac3573e5ef3f011c7f7dc4898 Mon Sep 17 00:00:00 2001 | 1 | From ed9bca69fdaa7edac3573e5ef3f011c7f7dc4898 Mon Sep 17 00:00:00 2001 |
2 | From: Steve Sakoman <steve@sakoman.com> | 2 | From: Steve Sakoman <steve@sakoman.com> |
3 | Date: Fri, 19 Nov 2010 15:11:19 -0800 | 3 | Date: Fri, 19 Nov 2010 15:11:19 -0800 |
4 | Subject: [PATCH 11/28] Revert "omap_hsmmc: improve interrupt synchronisation" | 4 | Subject: [PATCH 11/59] Revert "omap_hsmmc: improve interrupt synchronisation" |
5 | 5 | ||
6 | This reverts commit b417577d3b9bbb06a4ddc9aa955af9bd503f7242. | 6 | This reverts commit b417577d3b9bbb06a4ddc9aa955af9bd503f7242. |
7 | 7 | ||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0012-Don-t-turn-SDIO-cards-off-to-save-power.-Doing-so-wi.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0012-Don-t-turn-SDIO-cards-off-to-save-power.-Doing-so-wi.patch index f0a3aa45..1ead8357 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0012-Don-t-turn-SDIO-cards-off-to-save-power.-Doing-so-wi.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0012-Don-t-turn-SDIO-cards-off-to-save-power.-Doing-so-wi.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From 1d73698debdf57f9da6c3312239459c43278e064 Mon Sep 17 00:00:00 2001 | 1 | From 1d73698debdf57f9da6c3312239459c43278e064 Mon Sep 17 00:00:00 2001 |
2 | From: David Vrabel <david.vrabel@csr.com> | 2 | From: David Vrabel <david.vrabel@csr.com> |
3 | Date: Fri, 2 Apr 2010 08:41:47 -0700 | 3 | Date: Fri, 2 Apr 2010 08:41:47 -0700 |
4 | Subject: [PATCH 12/28] Don't turn SDIO cards off to save power. Doing so will lose all | 4 | Subject: [PATCH 12/59] Don't turn SDIO cards off to save power. Doing so will lose all |
5 | internal state in the card. | 5 | internal state in the card. |
6 | 6 | ||
7 | Signed-off-by: David Vrabel <david.vrabel@csr.com> | 7 | Signed-off-by: David Vrabel <david.vrabel@csr.com> |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0013-Enable-the-use-of-SDIO-card-interrupts.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0013-Enable-the-use-of-SDIO-card-interrupts.patch index f2722766..339bb5d3 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0013-Enable-the-use-of-SDIO-card-interrupts.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0013-Enable-the-use-of-SDIO-card-interrupts.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From bb4c074079c12d808367c8666cedcbba1dc456cc Mon Sep 17 00:00:00 2001 | 1 | From bb4c074079c12d808367c8666cedcbba1dc456cc Mon Sep 17 00:00:00 2001 |
2 | From: David Vrabel <david.vrabel@csr.com> | 2 | From: David Vrabel <david.vrabel@csr.com> |
3 | Date: Fri, 2 Apr 2010 08:42:22 -0700 | 3 | Date: Fri, 2 Apr 2010 08:42:22 -0700 |
4 | Subject: [PATCH 13/28] Enable the use of SDIO card interrupts. | 4 | Subject: [PATCH 13/59] Enable the use of SDIO card interrupts. |
5 | 5 | ||
6 | FCLK must be enabled while SDIO interrupts are enabled or the MMC | 6 | FCLK must be enabled while SDIO interrupts are enabled or the MMC |
7 | module won't wake-up (even though ENAWAKEUP in SYSCONFIG and IWE in | 7 | module won't wake-up (even though ENAWAKEUP in SYSCONFIG and IWE in |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0014-soc-codecs-Enable-audio-capture-by-default-for-twl40.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0014-soc-codecs-Enable-audio-capture-by-default-for-twl40.patch index 12243d60..a82d0613 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0014-soc-codecs-Enable-audio-capture-by-default-for-twl40.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0014-soc-codecs-Enable-audio-capture-by-default-for-twl40.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From cee637c9d2b877dd40c5fc8c42dc70a21adb454b Mon Sep 17 00:00:00 2001 | 1 | From cee637c9d2b877dd40c5fc8c42dc70a21adb454b Mon Sep 17 00:00:00 2001 |
2 | From: Steve Sakoman <steve@sakoman.com> | 2 | From: Steve Sakoman <steve@sakoman.com> |
3 | Date: Thu, 17 Dec 2009 12:45:20 -0800 | 3 | Date: Thu, 17 Dec 2009 12:45:20 -0800 |
4 | Subject: [PATCH 14/28] soc: codecs: Enable audio capture by default for twl4030 | 4 | Subject: [PATCH 14/59] soc: codecs: Enable audio capture by default for twl4030 |
5 | 5 | ||
6 | --- | 6 | --- |
7 | sound/soc/codecs/twl4030.c | 4 ++-- | 7 | sound/soc/codecs/twl4030.c | 4 ++-- |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0015-soc-codecs-twl4030-Turn-on-mic-bias-by-default.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0015-soc-codecs-twl4030-Turn-on-mic-bias-by-default.patch index b3fa02ca..e2dfe983 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0015-soc-codecs-twl4030-Turn-on-mic-bias-by-default.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0015-soc-codecs-twl4030-Turn-on-mic-bias-by-default.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From 19fbeb71b9576ecdefa7809980aa3f0eecda408c Mon Sep 17 00:00:00 2001 | 1 | From 19fbeb71b9576ecdefa7809980aa3f0eecda408c Mon Sep 17 00:00:00 2001 |
2 | From: Steve Sakoman <steve@sakoman.com> | 2 | From: Steve Sakoman <steve@sakoman.com> |
3 | Date: Wed, 29 Dec 2010 11:39:16 -0800 | 3 | Date: Wed, 29 Dec 2010 11:39:16 -0800 |
4 | Subject: [PATCH 15/28] soc: codecs: twl4030: Turn on mic bias by default | 4 | Subject: [PATCH 15/59] soc: codecs: twl4030: Turn on mic bias by default |
5 | 5 | ||
6 | --- | 6 | --- |
7 | sound/soc/codecs/twl4030.c | 2 +- | 7 | sound/soc/codecs/twl4030.c | 2 +- |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0016-RTC-add-support-for-backup-battery-recharge.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0016-RTC-add-support-for-backup-battery-recharge.patch index 55673b37..3bf42607 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0016-RTC-add-support-for-backup-battery-recharge.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0016-RTC-add-support-for-backup-battery-recharge.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From 1c679da3fc28bd358c79b6fae05de81c9b84a681 Mon Sep 17 00:00:00 2001 | 1 | From 1c679da3fc28bd358c79b6fae05de81c9b84a681 Mon Sep 17 00:00:00 2001 |
2 | From: Steve Sakoman <steve@sakoman.com> | 2 | From: Steve Sakoman <steve@sakoman.com> |
3 | Date: Thu, 4 Feb 2010 12:26:22 -0800 | 3 | Date: Thu, 4 Feb 2010 12:26:22 -0800 |
4 | Subject: [PATCH 16/28] RTC: add support for backup battery recharge | 4 | Subject: [PATCH 16/59] RTC: add support for backup battery recharge |
5 | 5 | ||
6 | --- | 6 | --- |
7 | drivers/rtc/rtc-twl.c | 25 +++++++++++++++++++++++++ | 7 | drivers/rtc/rtc-twl.c | 25 +++++++++++++++++++++++++ |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0017-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0017-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch index 6aacbf7a..9a9b4661 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0017-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0017-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From 83b4a493176cbd50c8d2503440fecfa6e499f30e Mon Sep 17 00:00:00 2001 | 1 | From 83b4a493176cbd50c8d2503440fecfa6e499f30e Mon Sep 17 00:00:00 2001 |
2 | From: Steve Sakoman <steve@sakoman.com> | 2 | From: Steve Sakoman <steve@sakoman.com> |
3 | Date: Sun, 24 Jan 2010 09:33:56 -0800 | 3 | Date: Sun, 24 Jan 2010 09:33:56 -0800 |
4 | Subject: [PATCH 17/28] ARM: OMAP2: mmc-twl4030: move clock input selection prior to vcc test | 4 | Subject: [PATCH 17/59] ARM: OMAP2: mmc-twl4030: move clock input selection prior to vcc test |
5 | 5 | ||
6 | otherwise it is not executed on systems that use non-twl regulators | 6 | otherwise it is not executed on systems that use non-twl regulators |
7 | --- | 7 | --- |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0018-Add-power-off-support-for-the-TWL4030-companion.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0018-Add-power-off-support-for-the-TWL4030-companion.patch index c5359c1b..044aa01b 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0018-Add-power-off-support-for-the-TWL4030-companion.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0018-Add-power-off-support-for-the-TWL4030-companion.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From 890a8385d7f9bee69bf22616d16b225790b1d18c Mon Sep 17 00:00:00 2001 | 1 | From 890a8385d7f9bee69bf22616d16b225790b1d18c Mon Sep 17 00:00:00 2001 |
2 | From: =?UTF-8?q?Bernhard=20W=C3=B6rndl-Aichriedler?= <bwa@xdevelop.at> | 2 | From: =?UTF-8?q?Bernhard=20W=C3=B6rndl-Aichriedler?= <bwa@xdevelop.at> |
3 | Date: Sat, 15 May 2010 16:34:05 +0200 | 3 | Date: Sat, 15 May 2010 16:34:05 +0200 |
4 | Subject: [PATCH 18/28] Add power-off support for the TWL4030 companion | 4 | Subject: [PATCH 18/59] Add power-off support for the TWL4030 companion |
5 | 5 | ||
6 | This patch adds support for the power-off on shutdown feature of the TWL4030 | 6 | This patch adds support for the power-off on shutdown feature of the TWL4030 |
7 | --- | 7 | --- |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0019-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0019-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch index 045089e0..73637aee 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0019-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0019-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From 5b1ae684aa507a50630555d48c834a6f1fd2d1cf Mon Sep 17 00:00:00 2001 | 1 | From 5b1ae684aa507a50630555d48c834a6f1fd2d1cf Mon Sep 17 00:00:00 2001 |
2 | From: Steve Sakoman <steve@sakoman.com> | 2 | From: Steve Sakoman <steve@sakoman.com> |
3 | Date: Thu, 17 Dec 2009 14:27:15 -0800 | 3 | Date: Thu, 17 Dec 2009 14:27:15 -0800 |
4 | Subject: [PATCH 19/28] ARM: OMAP: Add twl4030 madc support to Overo | 4 | Subject: [PATCH 19/59] ARM: OMAP: Add twl4030 madc support to Overo |
5 | 5 | ||
6 | Signed-off-by: Steve Sakoman <steve@sakoman.com> | 6 | Signed-off-by: Steve Sakoman <steve@sakoman.com> |
7 | --- | 7 | --- |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0020-Enabling-Hwmon-driver-for-twl4030-madc.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0020-Enabling-Hwmon-driver-for-twl4030-madc.patch index 771c2846..4002e2a9 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0020-Enabling-Hwmon-driver-for-twl4030-madc.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0020-Enabling-Hwmon-driver-for-twl4030-madc.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From 79dc823c9ce624a2164a01b35a89452b22a7d174 Mon Sep 17 00:00:00 2001 | 1 | From 79dc823c9ce624a2164a01b35a89452b22a7d174 Mon Sep 17 00:00:00 2001 |
2 | From: Keerthy <j-keerthy@ti.com> | 2 | From: Keerthy <j-keerthy@ti.com> |
3 | Date: Wed, 4 May 2011 01:14:50 +0530 | 3 | Date: Wed, 4 May 2011 01:14:50 +0530 |
4 | Subject: [PATCH 20/28] Enabling Hwmon driver for twl4030-madc | 4 | Subject: [PATCH 20/59] Enabling Hwmon driver for twl4030-madc |
5 | 5 | ||
6 | Signed-off-by: Keerthy <j-keerthy@ti.com> | 6 | Signed-off-by: Keerthy <j-keerthy@ti.com> |
7 | --- | 7 | --- |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0021-mfd-twl-core-enable-madc-clock.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0021-mfd-twl-core-enable-madc-clock.patch index 05cd10d1..6b4b33aa 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0021-mfd-twl-core-enable-madc-clock.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0021-mfd-twl-core-enable-madc-clock.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From 243d5534666eb795815f12d382cfcb77d5a43a8d Mon Sep 17 00:00:00 2001 | 1 | From 243d5534666eb795815f12d382cfcb77d5a43a8d Mon Sep 17 00:00:00 2001 |
2 | From: Steve Sakoman <steve@sakoman.com> | 2 | From: Steve Sakoman <steve@sakoman.com> |
3 | Date: Sat, 23 Jan 2010 06:26:54 -0800 | 3 | Date: Sat, 23 Jan 2010 06:26:54 -0800 |
4 | Subject: [PATCH 21/28] mfd: twl-core: enable madc clock | 4 | Subject: [PATCH 21/59] mfd: twl-core: enable madc clock |
5 | 5 | ||
6 | Now that the madc driver has been merged it is also necessary to enable the clock to the madc block | 6 | Now that the madc driver has been merged it is also necessary to enable the clock to the madc block |
7 | 7 | ||
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0022-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0022-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch index 6d2a38a7..11134645 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0022-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0022-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From df17c7eeca25cd9923828a4732a995e2c37d070b Mon Sep 17 00:00:00 2001 | 1 | From df17c7eeca25cd9923828a4732a995e2c37d070b Mon Sep 17 00:00:00 2001 |
2 | From: Steve Sakoman <steve@sakoman.com> | 2 | From: Steve Sakoman <steve@sakoman.com> |
3 | Date: Wed, 24 Feb 2010 10:37:22 -0800 | 3 | Date: Wed, 24 Feb 2010 10:37:22 -0800 |
4 | Subject: [PATCH 22/28] ARM: OMAP: automatically set musb mode in platform data based on CONFIG options | 4 | Subject: [PATCH 22/59] ARM: OMAP: automatically set musb mode in platform data based on CONFIG options |
5 | 5 | ||
6 | --- | 6 | --- |
7 | arch/arm/mach-omap2/board-omap3beagle.c | 6 ++++++ | 7 | arch/arm/mach-omap2/board-omap3beagle.c | 6 ++++++ |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0023-omap-mmc-Adjust-dto-to-eliminate-timeout-errors.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0023-omap-mmc-Adjust-dto-to-eliminate-timeout-errors.patch index 212c5f02..22c0243c 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0023-omap-mmc-Adjust-dto-to-eliminate-timeout-errors.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0023-omap-mmc-Adjust-dto-to-eliminate-timeout-errors.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From c60f16ec7e69f59b3bef9f9b7041a973d144dc87 Mon Sep 17 00:00:00 2001 | 1 | From c60f16ec7e69f59b3bef9f9b7041a973d144dc87 Mon Sep 17 00:00:00 2001 |
2 | From: Steve Sakoman <steve@sakoman.com> | 2 | From: Steve Sakoman <steve@sakoman.com> |
3 | Date: Wed, 12 Jan 2011 05:54:55 -0800 | 3 | Date: Wed, 12 Jan 2011 05:54:55 -0800 |
4 | Subject: [PATCH 23/28] omap: mmc: Adjust dto to eliminate timeout errors | 4 | Subject: [PATCH 23/59] omap: mmc: Adjust dto to eliminate timeout errors |
5 | 5 | ||
6 | A number of SD card types were experiencing timeout errors. This | 6 | A number of SD card types were experiencing timeout errors. This |
7 | could also lead to data corruption in some cases. | 7 | could also lead to data corruption in some cases. |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0024-omap-Fix-mtd-subpage-read-alignment.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0024-omap-Fix-mtd-subpage-read-alignment.patch index 13b7631a..e9cd3ffe 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0024-omap-Fix-mtd-subpage-read-alignment.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0024-omap-Fix-mtd-subpage-read-alignment.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From 592fdd511dacc42bf97f249ca596ba28d0c25281 Mon Sep 17 00:00:00 2001 | 1 | From 592fdd511dacc42bf97f249ca596ba28d0c25281 Mon Sep 17 00:00:00 2001 |
2 | From: Charles Manning <cdhmanning@gmail.com> | 2 | From: Charles Manning <cdhmanning@gmail.com> |
3 | Date: Tue, 18 Jan 2011 11:25:25 +1300 | 3 | Date: Tue, 18 Jan 2011 11:25:25 +1300 |
4 | Subject: [PATCH 24/28] omap: Fix mtd subpage read alignment | 4 | Subject: [PATCH 24/59] omap: Fix mtd subpage read alignment |
5 | 5 | ||
6 | This allows the omap2 prefetch engine to work properly for subpage | 6 | This allows the omap2 prefetch engine to work properly for subpage |
7 | reads. Without this ECC errors will stop UBIFS from working. | 7 | reads. Without this ECC errors will stop UBIFS from working. |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0025-mtd-nand-omap2-Force-all-buffer-reads-to-u32-alignme.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0025-mtd-nand-omap2-Force-all-buffer-reads-to-u32-alignme.patch index dadaa1c4..113e4da0 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0025-mtd-nand-omap2-Force-all-buffer-reads-to-u32-alignme.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0025-mtd-nand-omap2-Force-all-buffer-reads-to-u32-alignme.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From 2611e93b57147877fabb181bd86c78fd425a5467 Mon Sep 17 00:00:00 2001 | 1 | From 2611e93b57147877fabb181bd86c78fd425a5467 Mon Sep 17 00:00:00 2001 |
2 | From: Charles Manning <manningc2@actrix.gen.nz> | 2 | From: Charles Manning <manningc2@actrix.gen.nz> |
3 | Date: Thu, 16 Dec 2010 20:35:56 -0800 | 3 | Date: Thu, 16 Dec 2010 20:35:56 -0800 |
4 | Subject: [PATCH 25/28] mtd: nand: omap2: Force all buffer reads to u32 alignment | 4 | Subject: [PATCH 25/59] mtd: nand: omap2: Force all buffer reads to u32 alignment |
5 | 5 | ||
6 | --- | 6 | --- |
7 | drivers/mtd/nand/omap2.c | 12 ++++++++++++ | 7 | drivers/mtd/nand/omap2.c | 12 ++++++++++++ |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0026-omap-nand-fix-subpage-ecc-issue-with-prefetch.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0026-omap-nand-fix-subpage-ecc-issue-with-prefetch.patch index c8dacdc9..2d786dba 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0026-omap-nand-fix-subpage-ecc-issue-with-prefetch.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0026-omap-nand-fix-subpage-ecc-issue-with-prefetch.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From 1f0278a4f5475cc9ad67e007763368dfdd7dee29 Mon Sep 17 00:00:00 2001 | 1 | From 1f0278a4f5475cc9ad67e007763368dfdd7dee29 Mon Sep 17 00:00:00 2001 |
2 | From: kishore kadiyala <kishore.kadiyala@ti.com> | 2 | From: kishore kadiyala <kishore.kadiyala@ti.com> |
3 | Date: Mon, 2 May 2011 11:10:38 +0000 | 3 | Date: Mon, 2 May 2011 11:10:38 +0000 |
4 | Subject: [PATCH 26/28] omap : nand : fix subpage ecc issue with prefetch | 4 | Subject: [PATCH 26/59] omap : nand : fix subpage ecc issue with prefetch |
5 | 5 | ||
6 | For prefetch engine, read and write got broken in commit '2c01946c'. | 6 | For prefetch engine, read and write got broken in commit '2c01946c'. |
7 | We never hit a scenario of not getting 'gpmc_prefetch_enable' | 7 | We never hit a scenario of not getting 'gpmc_prefetch_enable' |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0027-OMAP-Overo-Add-support-for-spidev.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0027-OMAP-Overo-Add-support-for-spidev.patch index d126ca73..1241d4a3 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0027-OMAP-Overo-Add-support-for-spidev.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0027-OMAP-Overo-Add-support-for-spidev.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From 61e1cb7dbff3b611644d6ba811f8b83db148c1e1 Mon Sep 17 00:00:00 2001 | 1 | From 61e1cb7dbff3b611644d6ba811f8b83db148c1e1 Mon Sep 17 00:00:00 2001 |
2 | From: Scott Ellis <scottellis.developer@gmail.com> | 2 | From: Scott Ellis <scottellis.developer@gmail.com> |
3 | Date: Sun, 23 Jan 2011 20:39:35 -0800 | 3 | Date: Sun, 23 Jan 2011 20:39:35 -0800 |
4 | Subject: [PATCH 27/28] OMAP: Overo: Add support for spidev | 4 | Subject: [PATCH 27/59] OMAP: Overo: Add support for spidev |
5 | 5 | ||
6 | --- | 6 | --- |
7 | arch/arm/mach-omap2/board-overo.c | 16 ++++++++++++++++ | 7 | arch/arm/mach-omap2/board-overo.c | 16 ++++++++++++++++ |
diff --git a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0028-unionfs-Add-support-for-unionfs-2.5.9.patch b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0028-unionfs-Add-support-for-unionfs-2.5.9.patch index 24cc7287..513de9f9 100644 --- a/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0028-unionfs-Add-support-for-unionfs-2.5.9.patch +++ b/recipes-kernel/linux/linux-omap-2.6.39/sakoman/0028-unionfs-Add-support-for-unionfs-2.5.9.patch | |||
@@ -1,7 +1,7 @@ | |||
1 | From d84fb8f137d9392574422213ec6c3dc53bb00abf Mon Sep 17 00:00:00 2001 | 1 | From d84fb8f137d9392574422213ec6c3dc53bb00abf Mon Sep 17 00:00:00 2001 |
2 | From: Steve Sakoman <steve@sakoman.com> | 2 | From: Steve Sakoman <steve@sakoman.com> |
3 | Date: Mon, 2 May 2011 16:14:34 -0700 | 3 | Date: Mon, 2 May 2011 16:14:34 -0700 |
4 | Subject: [PATCH 28/28] unionfs: Add support for unionfs 2.5.9 | 4 | Subject: [PATCH 28/59] unionfs: Add support for unionfs 2.5.9 |
5 | 5 | ||
6 | --- | 6 | --- |
7 | Documentation/filesystems/00-INDEX | 2 + | 7 | Documentation/filesystems/00-INDEX | 2 + |
diff --git a/recipes-kernel/linux/linux-omap_2.6.39.bb b/recipes-kernel/linux/linux-omap_2.6.39.bb index b6927e17..087c2a78 100644 --- a/recipes-kernel/linux/linux-omap_2.6.39.bb +++ b/recipes-kernel/linux/linux-omap_2.6.39.bb | |||
@@ -43,8 +43,41 @@ SRC_URI_append = " \ | |||
43 | file://sakoman/0027-OMAP-Overo-Add-support-for-spidev.patch \ | 43 | file://sakoman/0027-OMAP-Overo-Add-support-for-spidev.patch \ |
44 | file://sakoman/0028-unionfs-Add-support-for-unionfs-2.5.9.patch \ | 44 | file://sakoman/0028-unionfs-Add-support-for-unionfs-2.5.9.patch \ |
45 | \ | 45 | \ |
46 | file://beagle/0001-OMAP3-beagle-add-support-for-beagleboard-xM-revision.patch \ | 46 | file://beagle/0029-OMAP3-beagle-add-support-for-beagleboard-xM-revision.patch \ |
47 | file://beagle/0002-OMAP3-beagle-add-support-for-expansionboards.patch \ | 47 | file://beagle/0030-OMAP3-beagle-add-support-for-expansionboards.patch \ |
48 | file://beagle/0031-OMAP3-beagle-add-MADC-support.patch \ | ||
49 | \ | ||
50 | file://pm/linux-omap-2.6.39-ti-pm/0032-OMAP3-voltage-remove-spurious-pr_notice-for-debugfs.patch \ | ||
51 | file://pm/linux-omap-2.6.39-ti-pm/0033-OMAP4-PM-remove-redundant-ifdef-CONFIG_PM.patch \ | ||
52 | file://pm/linux-omap-2.6.39-ti-pm/0034-OMAP3-smartreflex-fix-sr_late_init-error-path-in-pro.patch \ | ||
53 | file://pm/linux-omap-2.6.39-ti-pm/0035-OMAP3-smartreflex-request-the-memory-region.patch \ | ||
54 | file://pm/linux-omap-2.6.39-ti-pm/0036-OMAP3-smartreflex-fix-ioremap-leak-on-probe-error.patch \ | ||
55 | file://pm/linux-omap-2.6.39-ti-pm/0037-OMAP3-smartreflex-delete-instance-from-sr_list-on-pr.patch \ | ||
56 | file://pm/linux-omap-2.6.39-ti-pm/0038-OMAP3-smartreflex-delete-debugfs-entries-on-probe-er.patch \ | ||
57 | file://pm/linux-omap-2.6.39-ti-pm/0039-OMAP3-cpuidle-remove-useless-SDP-specific-timings.patch \ | ||
58 | file://pm/linux-omap-2.6.39-ti-pm/0040-OMAP3-SR-make-notify-independent-of-class.patch \ | ||
59 | file://pm/linux-omap-2.6.39-ti-pm/0041-OMAP3-SR-disable-interrupt-by-default.patch \ | ||
60 | file://pm/linux-omap-2.6.39-ti-pm/0042-OMAP3-SR-enable-disable-SR-only-on-need.patch \ | ||
61 | file://pm/linux-omap-2.6.39-ti-pm/0043-OMAP3-SR-fix-cosmetic-indentation.patch \ | ||
62 | \ | ||
63 | file://pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0044-OMAP-CPUfreq-ensure-driver-initializes-after-cpufreq.patch \ | ||
64 | file://pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0045-OMAP-CPUfreq-ensure-policy-is-fully-initialized.patch \ | ||
65 | file://pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0046-OMAP3-PM-CPUFreq-driver-for-OMAP3.patch \ | ||
66 | file://pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0047-OMAP-PM-CPUFREQ-Fix-conditional-compilation.patch \ | ||
67 | file://pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0048-cpufreq-fixup-after-new-OPP-layer-merged.patch \ | ||
68 | file://pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0049-OMAP-cpufreq-Split-OMAP1-and-OMAP2PLUS-CPUfreq-drive.patch \ | ||
69 | file://pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0050-OMAP2PLUS-cpufreq-Add-SMP-support-to-cater-OMAP4430.patch \ | ||
70 | file://pm/linux-omap-2.6.39-ti-pm-wip-cpufreq/0051-OMAP2PLUS-cpufreq-Fix-typo-when-attempting-to-set-mp.patch \ | ||
71 | \ | ||
72 | file://pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-hotplug/0052-cpufreq-helpers-for-walking-the-frequency-table.patch \ | ||
73 | file://pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-hotplug/0053-cpufreq-introduce-hotplug-governor.patch \ | ||
74 | \ | ||
75 | file://pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0054-OMAP2-cpufreq-free-up-table-on-exit.patch \ | ||
76 | file://pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0055-OMAP2-cpufreq-handle-invalid-cpufreq-table.patch \ | ||
77 | file://pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0056-OMAP2-cpufreq-minor-comment-cleanup.patch \ | ||
78 | file://pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0057-OMAP2-cpufreq-use-clk_init_cpufreq_table-if-OPPs-not.patch \ | ||
79 | file://pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0058-OMAP2-cpufreq-use-cpufreq_frequency_table_target.patch \ | ||
80 | file://pm/linux-omap-2.6.39-ti-pm-wip-cpufreq-fixes/0059-OMAP2-cpufreq-fix-freq_table-leak.patch \ | ||
48 | " | 81 | " |
49 | 82 | ||
50 | SRC_URI_append_beagleboard = " file://logo_linux_clut224.ppm \ | 83 | SRC_URI_append_beagleboard = " file://logo_linux_clut224.ppm \ |