summaryrefslogtreecommitdiff
path: root/recipes/linux/linux-openmoko-2.6.32
diff options
context:
space:
mode:
authorMartin Jansa <Martin.Jansa@gmail.com>2010-07-21 11:03:25 +0200
committerMartin Jansa <Martin.Jansa@gmail.com>2010-07-22 22:03:20 +0200
commit511365a27aa69983c0bc2206d54a5b45a63a8ebb (patch)
tree4d236f225b8eb16cb74ed73e0e6f9c0fe5e75466 /recipes/linux/linux-openmoko-2.6.32
parent0efc37504d3552c5f8c15d99ad3d89379ffec617 (diff)
linux-openmoko-2.6.32: update stable patch to 2.6.32.16, rebase some patches and add possible WS fix
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Diffstat (limited to 'recipes/linux/linux-openmoko-2.6.32')
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0001-add-noinline-and-noclone-attributes-to-naked-functio.patch52
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0006-gta02-defconfigs-enable-LEDS_S3C24XX-and-dummy-batte.patch66
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0016-jbt6k74-fix-WS.patch64
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0017-s3c2410_ts-ignore-unexpected-interrupts.patch (renamed from recipes/linux/linux-openmoko-2.6.32/touchscreen_ignoreunexpectedintr29.patch)30
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0018-glamo-core-initialize-engine-states-as-disabled.patch36
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0019-wm8753-use-snd_soc_jack-on-neo1973.patch (renamed from recipes/linux/linux-openmoko-2.6.32/hs-jack.patch)12
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/0020-mfd-glamo-Enable-FIFO-stage-for-the-LCD-engine-s-mem.patch (renamed from recipes/linux/linux-openmoko-2.6.32/0001-mfd-glamo-Enable-FIFO-stage-for-the-LCD-engine-s-mem.patch)4
-rw-r--r--recipes/linux/linux-openmoko-2.6.32/use-noclone-attribute-for-naked.patch144
8 files changed, 187 insertions, 221 deletions
diff --git a/recipes/linux/linux-openmoko-2.6.32/0001-add-noinline-and-noclone-attributes-to-naked-functio.patch b/recipes/linux/linux-openmoko-2.6.32/0001-add-noinline-and-noclone-attributes-to-naked-functio.patch
new file mode 100644
index 0000000000..ac1efaec25
--- /dev/null
+++ b/recipes/linux/linux-openmoko-2.6.32/0001-add-noinline-and-noclone-attributes-to-naked-functio.patch
@@ -0,0 +1,52 @@
+From 6d97e1b1c2434fb769be7a72813efd11925225a9 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 6 Jun 2010 03:28:43 +0200
+Subject: [PATCH 03/22] add noinline and noclone attributes to naked functions
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ include/linux/compiler-gcc.h | 11 ++++++++++-
+ include/linux/compiler-gcc4.h | 2 ++
+ 2 files changed, 12 insertions(+), 1 deletions(-)
+
+diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
+index a3ed7cb..132a651 100644
+--- a/include/linux/compiler-gcc.h
++++ b/include/linux/compiler-gcc.h
+@@ -58,8 +58,12 @@
+ * naked functions because then mcount is called without stack and frame pointer
+ * being set up and there is no chance to restore the lr register to the value
+ * before mcount was called.
++ *
++ * The asm() bodies of naked functions often depend on standard calling conventions,
++ * therefore they must be noinline and noclone. GCC 4.[56] currently fail to enforce
++ * this, so we must do so ourselves. See GCC PR44290.
+ */
+-#define __naked __attribute__((naked)) notrace
++#define __naked __attribute__((naked)) noinline __noclone notrace
+
+ #define __noreturn __attribute__((noreturn))
+
+@@ -84,3 +88,8 @@
+ #define _gcc_header(x) __gcc_header(linux/compiler-gcc##x.h)
+ #define gcc_header(x) _gcc_header(x)
+ #include gcc_header(__GNUC__)
++
++#if !defined(__noclone)
++#define __noclone /* not needed */
++#endif
++
+diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h
+index 450fa59..cd5932a 100644
+--- a/include/linux/compiler-gcc4.h
++++ b/include/linux/compiler-gcc4.h
+@@ -36,4 +36,6 @@
+ the kernel context */
+ #define __cold __attribute__((__cold__))
+
++/* Mark a function definition as prohibited from being cloned. */
++#define __noclone __attribute__((__noclone__))
+ #endif
+--
+1.7.1.1
+
diff --git a/recipes/linux/linux-openmoko-2.6.32/0006-gta02-defconfigs-enable-LEDS_S3C24XX-and-dummy-batte.patch b/recipes/linux/linux-openmoko-2.6.32/0006-gta02-defconfigs-enable-LEDS_S3C24XX-and-dummy-batte.patch
deleted file mode 100644
index 103c06c886..0000000000
--- a/recipes/linux/linux-openmoko-2.6.32/0006-gta02-defconfigs-enable-LEDS_S3C24XX-and-dummy-batte.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-From 7e4a1fee4f08ef7ccedd4706b4890afc71f37dc4 Mon Sep 17 00:00:00 2001
-From: Martin Jansa <Martin.Jansa@gmail.com>
-Date: Mon, 17 May 2010 12:41:06 +0200
-Subject: [PATCH 06/14] gta02 defconfigs, enable LEDS_S3C24XX and dummy battery driver
-
----
- arch/arm/configs/gta02_defconfig | 2 +-
- arch/arm/configs/gta02_drm_defconfig | 10 +++++-----
- 2 files changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/arch/arm/configs/gta02_defconfig b/arch/arm/configs/gta02_defconfig
-index 73d26ba..55832ac 100644
---- a/arch/arm/configs/gta02_defconfig
-+++ b/arch/arm/configs/gta02_defconfig
-@@ -1635,7 +1635,7 @@ CONFIG_LEDS_CLASS=y
- #
- # LED drivers
- #
--# CONFIG_LEDS_S3C24XX is not set
-+CONFIG_LEDS_S3C24XX=y
- # CONFIG_LEDS_PCA9532 is not set
- CONFIG_LEDS_GPIO=y
- CONFIG_LEDS_GPIO_PLATFORM=y
-diff --git a/arch/arm/configs/gta02_drm_defconfig b/arch/arm/configs/gta02_drm_defconfig
-index 05aa130..62c1ee4 100644
---- a/arch/arm/configs/gta02_drm_defconfig
-+++ b/arch/arm/configs/gta02_drm_defconfig
-@@ -1,7 +1,7 @@
- #
- # Automatically generated make config: don't edit
--# Linux kernel version: 2.6.32.11
--# Sun Apr 11 14:20:07 2010
-+# Linux kernel version: 2.6.32.13
-+# Mon May 17 14:13:35 2010
- #
- CONFIG_ARM=y
- CONFIG_HAVE_PWM=y
-@@ -1233,7 +1233,7 @@ CONFIG_POWER_SUPPLY=y
- CONFIG_CHARGER_PCF50633=y
- CONFIG_BATTERY_BQ27000_HDQ=y
- CONFIG_HDQ_GPIO_BITBANG=y
--# CONFIG_BATTERY_PLATFORM is not set
-+CONFIG_BATTERY_PLATFORM=y
- # CONFIG_HWMON is not set
- # CONFIG_THERMAL is not set
- CONFIG_WATCHDOG=y
-@@ -1681,14 +1681,14 @@ CONFIG_LEDS_CLASS=y
- #
- # LED drivers
- #
--# CONFIG_LEDS_S3C24XX is not set
-+CONFIG_LEDS_S3C24XX=y
- # CONFIG_LEDS_PCA9532 is not set
- CONFIG_LEDS_GPIO=y
- CONFIG_LEDS_GPIO_PLATFORM=y
- # CONFIG_LEDS_LP3944 is not set
- # CONFIG_LEDS_PCA955X is not set
- # CONFIG_LEDS_DAC124S085 is not set
--# CONFIG_LEDS_PWM is not set
-+CONFIG_LEDS_PWM=y
- # CONFIG_LEDS_BD2802 is not set
-
- #
---
-1.7.1
-
diff --git a/recipes/linux/linux-openmoko-2.6.32/0016-jbt6k74-fix-WS.patch b/recipes/linux/linux-openmoko-2.6.32/0016-jbt6k74-fix-WS.patch
new file mode 100644
index 0000000000..e96a87d290
--- /dev/null
+++ b/recipes/linux/linux-openmoko-2.6.32/0016-jbt6k74-fix-WS.patch
@@ -0,0 +1,64 @@
+From 99ce90618a47cdc8c373838b7ee04348cc21d303 Mon Sep 17 00:00:00 2001
+From: Thibaut Girka <thib@sitedethib.com>
+Date: Wed, 21 Jul 2010 09:40:29 +0200
+Subject: [PATCH 16/23] jbt6k74: fix WS
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ drivers/video/backlight/jbt6k74.c | 15 +++++++++++----
+ 1 files changed, 11 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/video/backlight/jbt6k74.c b/drivers/video/backlight/jbt6k74.c
+index 56a3e3a..4db021f 100644
+--- a/drivers/video/backlight/jbt6k74.c
++++ b/drivers/video/backlight/jbt6k74.c
+@@ -268,8 +268,7 @@ static int jbt_off_to_normal(struct jbt_info *jbt)
+
+ gpio_set_value_cansleep(pdata->gpio_reset, 1);
+ ret = regulator_bulk_enable(ARRAY_SIZE(jbt->supplies), jbt->supplies);
+-
+- mdelay(120);
++ mdelay(200);
+
+ /* three times command zero */
+ ret |= jbt_reg_write_nodata(jbt, 0x00);
+@@ -282,10 +281,16 @@ static int jbt_off_to_normal(struct jbt_info *jbt)
+ /* deep standby out */
+ ret |= jbt_reg_write(jbt, JBT_REG_POWER_ON_OFF, 0x11);
+ mdelay(1);
++ if (ret != 0)
++ printk (KERN_ERR "Ignored ret value:%i",ret);
++
+ ret |= jbt_reg_write(jbt, JBT_REG_DISPLAY_MODE, 0x28);
+
+ /* (re)initialize register set */
+ ret |= jbt_init_regs(jbt);
++ if (ret != 0)
++ printk (KERN_ERR "Ignored ret value2:%i",ret);
++
+
+ /* Make sure we are 120 ms after SLEEP_OUT */
+ if (time_before(jiffies, jbt->next_sleep))
+@@ -644,7 +649,7 @@ static int jbt6k74_set_power(struct lcd_device *ld, int power)
+ struct jbt_info *jbt = dev_get_drvdata(&ld->dev);
+
+ jbt->blank_mode = power;
+- cancel_rearming_delayed_work(&jbt->blank_work);
++ //cancel_rearming_delayed_work(&jbt->blank_work);
+
+ switch (power) {
+ case FB_BLANK_UNBLANK:
+@@ -658,7 +663,9 @@ static int jbt6k74_set_power(struct lcd_device *ld, int power)
+ break;
+ case FB_BLANK_POWERDOWN:
+ dev_dbg(&jbt->spi->dev, "powerdown\n");
+- ret = jbt6k74_enter_power_mode(jbt, JBT_POWER_MODE_OFF);
++ //ret = schedule_delayed_work(&jbt->blank_work, HZ);
++ jbt6k74_enter_power_mode(jbt, JBT_POWER_MODE_OFF);
++ ret = 1;
+ break;
+ default:
+ break;
+--
+1.7.1.1
+
diff --git a/recipes/linux/linux-openmoko-2.6.32/touchscreen_ignoreunexpectedintr29.patch b/recipes/linux/linux-openmoko-2.6.32/0017-s3c2410_ts-ignore-unexpected-interrupts.patch
index cb99dd889d..0da1261d39 100644
--- a/recipes/linux/linux-openmoko-2.6.32/touchscreen_ignoreunexpectedintr29.patch
+++ b/recipes/linux/linux-openmoko-2.6.32/0017-s3c2410_ts-ignore-unexpected-interrupts.patch
@@ -1,5 +1,14 @@
+From fd25a512062b198af666bbdab805e8d6b51ed166 Mon Sep 17 00:00:00 2001
+From: Gennady Kupava <gb@bsdmn.com>
+Date: Sun, 27 Jun 2010 10:01:54 +0200
+Subject: [PATCH 17/22] s3c2410_ts: ignore unexpected interrupts
+
+---
+ drivers/input/touchscreen/s3c2410_ts.c | 30 +++++++++++++++++++++++++++++-
+ 1 files changed, 29 insertions(+), 1 deletions(-)
+
diff --git a/drivers/input/touchscreen/s3c2410_ts.c b/drivers/input/touchscreen/s3c2410_ts.c
-index bcfdd00..73994ff 100644
+index 97def9d..fd0b7d4 100644
--- a/drivers/input/touchscreen/s3c2410_ts.c
+++ b/drivers/input/touchscreen/s3c2410_ts.c
@@ -47,6 +47,9 @@
@@ -12,7 +21,7 @@ index bcfdd00..73994ff 100644
*/
#include <linux/errno.h>
-@@ -118,10 +121,15 @@ struct s3c2410ts {
+@@ -120,10 +123,15 @@ struct s3c2410ts {
struct kfifo *event_fifo;
struct s3c_adc_client *adc_client;
unsigned adc_selected;
@@ -28,7 +37,7 @@ index bcfdd00..73994ff 100644
static void __iomem *base_addr;
/*
-@@ -280,6 +288,19 @@ static irqreturn_t stylus_updown(int irq, void *dev_id)
+@@ -282,6 +290,19 @@ static irqreturn_t stylus_updown(int irq, void *dev_id)
ts.is_down = !(data0 & S3C2410_ADCDAT0_UPDOWN) &&
!(data1 & S3C2410_ADCDAT0_UPDOWN);
@@ -48,7 +57,7 @@ index bcfdd00..73994ff 100644
event_type = ts.is_down ? 'D' : 'U';
if (unlikely(__kfifo_put(ts.event_fifo, (unsigned char *)&event_type,
-@@ -289,8 +310,10 @@ static irqreturn_t stylus_updown(int irq, void *dev_id)
+@@ -291,8 +312,10 @@ static irqreturn_t stylus_updown(int irq, void *dev_id)
if (ts.is_down)
s3c2410_ts_start_adc_conversion();
@@ -60,7 +69,7 @@ index bcfdd00..73994ff 100644
mod_timer(&event_send_timer, jiffies + 1);
-@@ -325,6 +348,7 @@ static void stylus_adc_action(unsigned p0, unsigned p1, unsigned *conv_left)
+@@ -327,6 +350,7 @@ static void stylus_adc_action(struct s3c_adc_client *client, unsigned p0, unsign
case -1:
/* Too much noise. Ignore the event. */
ts_filter_chain_clear(ts.chain);
@@ -68,7 +77,7 @@ index bcfdd00..73994ff 100644
writel(WAIT4INT(1), base_addr + S3C2410_ADCTSC);
return;
};
-@@ -334,6 +358,7 @@ static void stylus_adc_action(unsigned p0, unsigned p1, unsigned *conv_left)
+@@ -336,6 +360,7 @@ static void stylus_adc_action(struct s3c_adc_client *client, unsigned p0, unsign
/* This will only happen if we have a bug. */
TSPRINTK("FIFO full\n");
@@ -76,7 +85,7 @@ index bcfdd00..73994ff 100644
writel(WAIT4INT(1), base_addr + S3C2410_ADCTSC);
mod_timer(&event_send_timer, jiffies + 1);
-@@ -371,6 +396,7 @@ static int __init s3c2410ts_probe(struct platform_device *pdev)
+@@ -373,6 +398,7 @@ static int __init s3c2410ts_probe(struct platform_device *pdev)
if (!strcmp(pdev->name, "s3c2410-ts"))
s3c2410_ts_connect();
@@ -84,7 +93,7 @@ index bcfdd00..73994ff 100644
writel(WAIT4INT(0), base_addr + S3C2410_ADCTSC);
/* Initialise input stuff */
-@@ -481,6 +507,7 @@ static int s3c2410ts_remove(struct platform_device *pdev)
+@@ -482,6 +508,7 @@ static int s3c2410ts_remove(struct platform_device *pdev)
static int s3c2410ts_suspend(struct platform_device *pdev, pm_message_t state)
{
@@ -92,7 +101,7 @@ index bcfdd00..73994ff 100644
writel(TSC_SLEEP, base_addr + S3C2410_ADCTSC);
writel(readl(base_addr + S3C2410_ADCCON) | S3C2410_ADCCON_STDBM,
base_addr + S3C2410_ADCCON);
-@@ -492,6 +519,7 @@ static int s3c2410ts_suspend(struct platform_device *pdev, pm_message_t state)
+@@ -493,6 +520,7 @@ static int s3c2410ts_suspend(struct platform_device *pdev, pm_message_t state)
static int s3c2410ts_resume(struct platform_device *pdev)
{
ts_filter_chain_clear(ts.chain);
@@ -100,3 +109,6 @@ index bcfdd00..73994ff 100644
enable_irq(IRQ_TC);
writel(WAIT4INT(0), base_addr + S3C2410_ADCTSC);
+--
+1.7.1.1
+
diff --git a/recipes/linux/linux-openmoko-2.6.32/0018-glamo-core-initialize-engine-states-as-disabled.patch b/recipes/linux/linux-openmoko-2.6.32/0018-glamo-core-initialize-engine-states-as-disabled.patch
new file mode 100644
index 0000000000..4888b94cd5
--- /dev/null
+++ b/recipes/linux/linux-openmoko-2.6.32/0018-glamo-core-initialize-engine-states-as-disabled.patch
@@ -0,0 +1,36 @@
+From 9615f587ce8ac94732b6473a44d776473c120af6 Mon Sep 17 00:00:00 2001
+From: Thibaut Girka <thib@sitedethib.com>
+Date: Fri, 25 Jun 2010 20:17:18 +0200
+Subject: [PATCH 18/22] glamo-core: initialize engine states as disabled
+
+This should fix random init failures such as white screen on boot.
+---
+ drivers/mfd/glamo/glamo-core.c | 5 ++++-
+ 1 files changed, 4 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/mfd/glamo/glamo-core.c b/drivers/mfd/glamo/glamo-core.c
+index 33a7a59..f6674f4 100644
+--- a/drivers/mfd/glamo/glamo-core.c
++++ b/drivers/mfd/glamo/glamo-core.c
+@@ -916,7 +916,7 @@ static int __devinit glamo_supported(struct glamo_core *glamo)
+
+ static int __devinit glamo_probe(struct platform_device *pdev)
+ {
+- int ret = 0, irq, irq_base;
++ int ret = 0, n, irq, irq_base;
+ struct glamo_core *glamo;
+ struct resource *mem;
+
+@@ -924,6 +924,9 @@ static int __devinit glamo_probe(struct platform_device *pdev)
+ if (!glamo)
+ return -ENOMEM;
+
++ for (n = 0; n < __NUM_GLAMO_ENGINES; n++)
++ glamo->engine_state[n] = GLAMO_ENGINE_DISABLED;
++
+ spin_lock_init(&glamo->lock);
+
+ glamo->pdev = pdev;
+--
+1.7.1.1
+
diff --git a/recipes/linux/linux-openmoko-2.6.32/hs-jack.patch b/recipes/linux/linux-openmoko-2.6.32/0019-wm8753-use-snd_soc_jack-on-neo1973.patch
index c92c3f6481..c3e3d02231 100644
--- a/recipes/linux/linux-openmoko-2.6.32/hs-jack.patch
+++ b/recipes/linux/linux-openmoko-2.6.32/0019-wm8753-use-snd_soc_jack-on-neo1973.patch
@@ -1,3 +1,12 @@
+From 261e2f00048ea8bfd5c261242c263e5a55401d64 Mon Sep 17 00:00:00 2001
+From: Lars-Peter Clausen <lars@metafoo.de>
+Date: Wed, 7 Jul 2010 15:29:33 +0200
+Subject: [PATCH 19/22] wm8753: use snd_soc_jack on neo1973
+
+---
+ sound/soc/s3c24xx/neo1973_wm8753.c | 46 ++++++++++++++++++++++++++++++++++++
+ 1 files changed, 46 insertions(+), 0 deletions(-)
+
diff --git a/sound/soc/s3c24xx/neo1973_wm8753.c b/sound/soc/s3c24xx/neo1973_wm8753.c
index 5cc1ef2..643dae3 100644
--- a/sound/soc/s3c24xx/neo1973_wm8753.c
@@ -83,3 +92,6 @@ index 5cc1ef2..643dae3 100644
platform_device_unregister(neo1973_snd_device);
if (machine_is_neo1973_gta01())
+--
+1.7.1.1
+
diff --git a/recipes/linux/linux-openmoko-2.6.32/0001-mfd-glamo-Enable-FIFO-stage-for-the-LCD-engine-s-mem.patch b/recipes/linux/linux-openmoko-2.6.32/0020-mfd-glamo-Enable-FIFO-stage-for-the-LCD-engine-s-mem.patch
index 8ccf940c6c..71b2dd4ca2 100644
--- a/recipes/linux/linux-openmoko-2.6.32/0001-mfd-glamo-Enable-FIFO-stage-for-the-LCD-engine-s-mem.patch
+++ b/recipes/linux/linux-openmoko-2.6.32/0020-mfd-glamo-Enable-FIFO-stage-for-the-LCD-engine-s-mem.patch
@@ -1,7 +1,7 @@
-From 135a829c2fe551a7418696138df68eefad5a9b39 Mon Sep 17 00:00:00 2001
+From 9a8375f9f03770c85e635fc5dbde7124efb66154 Mon Sep 17 00:00:00 2001
From: Thomas White <taw@bitwiz.org.uk>
Date: Thu, 26 Nov 2009 08:55:33 +0300
-Subject: [PATCH] mfd: glamo: Enable FIFO stage for the LCD engine's memory access
+Subject: [PATCH 20/22] mfd: glamo: Enable FIFO stage for the LCD engine's memory access
By avoiding conflicts of memory access inside Glamo, this doubles the
speed of internal memory access.
diff --git a/recipes/linux/linux-openmoko-2.6.32/use-noclone-attribute-for-naked.patch b/recipes/linux/linux-openmoko-2.6.32/use-noclone-attribute-for-naked.patch
deleted file mode 100644
index 110a13572a..0000000000
--- a/recipes/linux/linux-openmoko-2.6.32/use-noclone-attribute-for-naked.patch
+++ /dev/null
@@ -1,144 +0,0 @@
-From 583c7d937789398cb6e37989ef91cf96c16da204 Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Sun, 6 Jun 2010 03:28:43 +0200
-Subject: [PATCH] add noinline and noclone attributes to naked functions
-
-Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
----
- arch/arm/mm/copypage-feroceon.c | 4 ++--
- arch/arm/mm/copypage-v4wb.c | 4 ++--
- arch/arm/mm/copypage-v4wt.c | 4 ++--
- arch/arm/mm/copypage-xsc3.c | 4 ++--
- include/linux/compiler-gcc.h | 11 ++++++++++-
- include/linux/compiler-gcc4.h | 2 ++
- 6 files changed, 20 insertions(+), 9 deletions(-)
-
-diff --git a/arch/arm/mm/copypage-feroceon.c b/arch/arm/mm/copypage-feroceon.c
-index 70997d5..dd9598b 100644
---- a/arch/arm/mm/copypage-feroceon.c
-+++ b/arch/arm/mm/copypage-feroceon.c
-@@ -18,7 +18,7 @@ feroceon_copy_user_page(void *kto, const void *kfrom)
- {
- asm("\
- stmfd sp!, {r4-r9, lr} \n\
-- mov ip, %0 \n\
-+ mov ip, %2 \n\
- 1: mov lr, r1 \n\
- ldmia r1!, {r2 - r9} \n\
- pld [lr, #32] \n\
-@@ -64,7 +64,7 @@ feroceon_copy_user_page(void *kto, const void *kfrom)
- mcr p15, 0, ip, c7, c10, 4 @ drain WB\n\
- ldmfd sp!, {r4-r9, pc}"
- :
-- : "I" (PAGE_SIZE));
-+ : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE));
- }
-
- void feroceon_copy_user_highpage(struct page *to, struct page *from,
-diff --git a/arch/arm/mm/copypage-v4wb.c b/arch/arm/mm/copypage-v4wb.c
-index 9ab0984..7bc0ac7 100644
---- a/arch/arm/mm/copypage-v4wb.c
-+++ b/arch/arm/mm/copypage-v4wb.c
-@@ -27,7 +27,7 @@ v4wb_copy_user_page(void *kto, const void *kfrom)
- {
- asm("\
- stmfd sp!, {r4, lr} @ 2\n\
-- mov r2, %0 @ 1\n\
-+ mov r2, %2 @ 1\n\
- ldmia r1!, {r3, r4, ip, lr} @ 4\n\
- 1: mcr p15, 0, r0, c7, c6, 1 @ 1 invalidate D line\n\
- stmia r0!, {r3, r4, ip, lr} @ 4\n\
-@@ -44,7 +44,7 @@ v4wb_copy_user_page(void *kto, const void *kfrom)
- mcr p15, 0, r1, c7, c10, 4 @ 1 drain WB\n\
- ldmfd sp!, {r4, pc} @ 3"
- :
-- : "I" (PAGE_SIZE / 64));
-+ : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE / 64));
- }
-
- void v4wb_copy_user_highpage(struct page *to, struct page *from,
-diff --git a/arch/arm/mm/copypage-v4wt.c b/arch/arm/mm/copypage-v4wt.c
-index 300efaf..35bf609 100644
---- a/arch/arm/mm/copypage-v4wt.c
-+++ b/arch/arm/mm/copypage-v4wt.c
-@@ -25,7 +25,7 @@ v4wt_copy_user_page(void *kto, const void *kfrom)
- {
- asm("\
- stmfd sp!, {r4, lr} @ 2\n\
-- mov r2, %0 @ 1\n\
-+ mov r2, %2 @ 1\n\
- ldmia r1!, {r3, r4, ip, lr} @ 4\n\
- 1: stmia r0!, {r3, r4, ip, lr} @ 4\n\
- ldmia r1!, {r3, r4, ip, lr} @ 4+1\n\
-@@ -40,7 +40,7 @@ v4wt_copy_user_page(void *kto, const void *kfrom)
- mcr p15, 0, r2, c7, c7, 0 @ flush ID cache\n\
- ldmfd sp!, {r4, pc} @ 3"
- :
-- : "I" (PAGE_SIZE / 64));
-+ : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE / 64));
- }
-
- void v4wt_copy_user_highpage(struct page *to, struct page *from,
-diff --git a/arch/arm/mm/copypage-xsc3.c b/arch/arm/mm/copypage-xsc3.c
-index bc4525f..27dc363 100644
---- a/arch/arm/mm/copypage-xsc3.c
-+++ b/arch/arm/mm/copypage-xsc3.c
-@@ -34,7 +34,7 @@ xsc3_mc_copy_user_page(void *kto, const void *kfrom)
- {
- asm("\
- stmfd sp!, {r4, r5, lr} \n\
-- mov lr, %0 \n\
-+ mov lr, %2 \n\
- \n\
- pld [r1, #0] \n\
- pld [r1, #32] \n\
-@@ -67,7 +67,7 @@ xsc3_mc_copy_user_page(void *kto, const void *kfrom)
- \n\
- ldmfd sp!, {r4, r5, pc}"
- :
-- : "I" (PAGE_SIZE / 64 - 1));
-+ : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE / 64 - 1));
- }
-
- void xsc3_mc_copy_user_highpage(struct page *to, struct page *from,
-diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
-index a3ed7cb..132a651 100644
---- a/include/linux/compiler-gcc.h
-+++ b/include/linux/compiler-gcc.h
-@@ -58,8 +58,12 @@
- * naked functions because then mcount is called without stack and frame pointer
- * being set up and there is no chance to restore the lr register to the value
- * before mcount was called.
-+ *
-+ * The asm() bodies of naked functions often depend on standard calling conventions,
-+ * therefore they must be noinline and noclone. GCC 4.[56] currently fail to enforce
-+ * this, so we must do so ourselves. See GCC PR44290.
- */
--#define __naked __attribute__((naked)) notrace
-+#define __naked __attribute__((naked)) noinline __noclone notrace
-
- #define __noreturn __attribute__((noreturn))
-
-@@ -84,3 +88,8 @@
- #define _gcc_header(x) __gcc_header(linux/compiler-gcc##x.h)
- #define gcc_header(x) _gcc_header(x)
- #include gcc_header(__GNUC__)
-+
-+#if !defined(__noclone)
-+#define __noclone /* not needed */
-+#endif
-+
-diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h
-index 450fa59..cd5932a 100644
---- a/include/linux/compiler-gcc4.h
-+++ b/include/linux/compiler-gcc4.h
-@@ -36,4 +36,6 @@
- the kernel context */
- #define __cold __attribute__((__cold__))
-
-+/* Mark a function definition as prohibited from being cloned. */
-+#define __noclone __attribute__((__noclone__))
- #endif
---
-1.7.1
-