diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-02-07 17:32:51 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-02-07 17:32:51 -0800 |
commit | 2bb48629d8d7e3b0f1d2065f6b3ddda667b7bf7d (patch) | |
tree | fd4770418a3aae8d438ba7a25294fd94ed46a3c8 | |
parent | f56dadc96c6e1693e2fbd0212872534f7229eb56 (diff) | |
download | ltsi-kernel-2bb48629d8d7e3b0f1d2065f6b3ddda667b7bf7d.tar.gz |
Update to 3.4.29
16 files changed, 132 insertions, 260 deletions
diff --git a/patches.at91/0039-ARM-at91-Add-machine-files-for-AT91SAM9N12-SoC.patch b/patches.at91/0039-ARM-at91-Add-machine-files-for-AT91SAM9N12-SoC.patch index e4743efb17c71f..17392b099cc081 100644 --- a/patches.at91/0039-ARM-at91-Add-machine-files-for-AT91SAM9N12-SoC.patch +++ b/patches.at91/0039-ARM-at91-Add-machine-files-for-AT91SAM9N12-SoC.patch @@ -9,17 +9,15 @@ Signed-off-by: Hong Xu <hong.xu@atmel.com> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> --- - arch/arm/mach-at91/Kconfig | 8 ++ - arch/arm/mach-at91/Makefile | 1 + - arch/arm/mach-at91/Makefile.boot | 2 + - arch/arm/mach-at91/at91sam9n12.c | 233 +++++++++++++++++++++++++++++++++++++++ - arch/arm/mach-at91/clock.c | 15 ++- - arch/arm/mach-at91/setup.c | 6 + + arch/arm/mach-at91/Kconfig | 8 + + arch/arm/mach-at91/Makefile | 1 + arch/arm/mach-at91/Makefile.boot | 2 + arch/arm/mach-at91/at91sam9n12.c | 233 +++++++++++++++++++++++++++++++++++++++ + arch/arm/mach-at91/clock.c | 15 +- + arch/arm/mach-at91/setup.c | 6 + 6 files changed, 260 insertions(+), 5 deletions(-) create mode 100644 arch/arm/mach-at91/at91sam9n12.c -diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig -index 98a42f3..19505c0 100644 --- a/arch/arm/mach-at91/Kconfig +++ b/arch/arm/mach-at91/Kconfig @@ -91,6 +91,14 @@ config SOC_AT91SAM9X5 @@ -37,11 +35,9 @@ index 98a42f3..19505c0 100644 choice prompt "Atmel AT91 Processor Devices for non DT boards" -diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile -index 79d0f60..3bb7a51 100644 --- a/arch/arm/mach-at91/Makefile +++ b/arch/arm/mach-at91/Makefile -@@ -18,6 +18,7 @@ obj-$(CONFIG_SOC_AT91SAM9260) += at91sam9260.o +@@ -18,6 +18,7 @@ obj-$(CONFIG_SOC_AT91SAM9260) += at91sam obj-$(CONFIG_SOC_AT91SAM9261) += at91sam9261.o obj-$(CONFIG_SOC_AT91SAM9263) += at91sam9263.o obj-$(CONFIG_SOC_AT91SAM9G45) += at91sam9g45.o @@ -49,11 +45,9 @@ index 79d0f60..3bb7a51 100644 obj-$(CONFIG_SOC_AT91SAM9X5) += at91sam9x5.o obj-$(CONFIG_SOC_AT91SAM9RL) += at91sam9rl.o -diff --git a/arch/arm/mach-at91/Makefile.boot b/arch/arm/mach-at91/Makefile.boot -index c03417d..9e84fe4 100644 --- a/arch/arm/mach-at91/Makefile.boot +++ b/arch/arm/mach-at91/Makefile.boot -@@ -30,5 +30,7 @@ dtb-$(CONFIG_MACH_AT91SAM_DT) += tny_a9g20.dtb +@@ -30,5 +30,7 @@ dtb-$(CONFIG_MACH_AT91SAM_DT) += tny_a9g dtb-$(CONFIG_MACH_AT91SAM_DT) += usb_a9g20.dtb # sam9g45 dtb-$(CONFIG_MACH_AT91SAM_DT) += at91sam9m10g45ek.dtb @@ -61,9 +55,6 @@ index c03417d..9e84fe4 100644 +dtb-$(CONFIG_MACH_AT91SAM_DT) += at91sam9n12ek.dtb # sam9x5 dtb-$(CONFIG_MACH_AT91SAM_DT) += at91sam9g25ek.dtb -diff --git a/arch/arm/mach-at91/at91sam9n12.c b/arch/arm/mach-at91/at91sam9n12.c -new file mode 100644 -index 0000000..0849466 --- /dev/null +++ b/arch/arm/mach-at91/at91sam9n12.c @@ -0,0 +1,233 @@ @@ -300,8 +291,6 @@ index 0000000..0849466 + .register_clocks = at91sam9n12_register_clocks, + .init = at91sam9n12_initialize, +}; -diff --git a/arch/arm/mach-at91/clock.c b/arch/arm/mach-at91/clock.c -index 6b69282..de2ec6b 100644 --- a/arch/arm/mach-at91/clock.c +++ b/arch/arm/mach-at91/clock.c @@ -58,13 +58,15 @@ EXPORT_SYMBOL_GPL(at91_pmc_base); @@ -341,11 +330,9 @@ index 6b69282..de2ec6b 100644 static LIST_HEAD(clocks); static DEFINE_SPINLOCK(clk_lock); -diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c -index f44a2e7..944bffb 100644 --- a/arch/arm/mach-at91/setup.c +++ b/arch/arm/mach-at91/setup.c -@@ -143,6 +143,11 @@ static void __init soc_detect(u32 dbgu_base) +@@ -145,6 +145,11 @@ static void __init soc_detect(u32 dbgu_b at91_soc_initdata.type = AT91_SOC_SAM9X5; at91_boot_soc = at91sam9x5_soc; break; @@ -357,7 +344,7 @@ index f44a2e7..944bffb 100644 } /* at91sam9g10 */ -@@ -210,6 +215,7 @@ static const char *soc_name[] = { +@@ -212,6 +217,7 @@ static const char *soc_name[] = { [AT91_SOC_SAM9G45] = "at91sam9g45", [AT91_SOC_SAM9RL] = "at91sam9rl", [AT91_SOC_SAM9X5] = "at91sam9x5", @@ -365,6 +352,3 @@ index f44a2e7..944bffb 100644 [AT91_SOC_NONE] = "Unknown" }; --- -1.8.0.197.g5a90748 - diff --git a/patches.at91/0212-ARM-at91-add-dummies-pinctrl-for-non-dt-platform.patch b/patches.at91/0212-ARM-at91-add-dummies-pinctrl-for-non-dt-platform.patch index 5a907ec2191075..bcaf461a6dab78 100644 --- a/patches.at91/0212-ARM-at91-add-dummies-pinctrl-for-non-dt-platform.patch +++ b/patches.at91/0212-ARM-at91-add-dummies-pinctrl-for-non-dt-platform.patch @@ -7,11 +7,9 @@ Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com> Acked-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> --- - arch/arm/mach-at91/setup.c | 3 +++ + arch/arm/mach-at91/setup.c | 3 +++ 1 file changed, 3 insertions(+) -diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c -index 944bffb..50c69b5 100644 --- a/arch/arm/mach-at91/setup.c +++ b/arch/arm/mach-at91/setup.c @@ -10,6 +10,7 @@ @@ -22,13 +20,10 @@ index 944bffb..50c69b5 100644 #include <asm/system_misc.h> #include <asm/mach/map.h> -@@ -463,4 +464,6 @@ void __init at91_initialize(unsigned long main_clock) +@@ -465,4 +466,6 @@ void __init at91_initialize(unsigned lon at91_boot_soc.register_clocks(); at91_boot_soc.init(); + + pinctrl_provide_dummies(); } --- -1.8.0.197.g5a90748 - diff --git a/patches.at91/0214-arm-at91-dt-at91sam9-add-pinctrl-support.patch b/patches.at91/0214-arm-at91-dt-at91sam9-add-pinctrl-support.patch index f10774a942788b..ddfbd9e4af67e4 100644 --- a/patches.at91/0214-arm-at91-dt-at91sam9-add-pinctrl-support.patch +++ b/patches.at91/0214-arm-at91-dt-at91sam9-add-pinctrl-support.patch @@ -11,27 +11,25 @@ Conflicts: arch/arm/mach-at91/at91sam9n12.c arch/arm/mach-at91/at91sam9x5.c --- - .../bindings/pinctrl/atmel,at91-pinctrl.txt | 68 +++++++++++++++++++--- - arch/arm/boot/dts/at91sam9260.dtsi | 9 +++ - arch/arm/boot/dts/at91sam9263.dtsi | 12 ++++ - arch/arm/boot/dts/at91sam9g45.dtsi | 11 ++++ - arch/arm/boot/dts/at91sam9n12.dtsi | 12 +++- - arch/arm/boot/dts/at91sam9x5.dtsi | 12 +++- - arch/arm/configs/at91_dt_defconfig | 1 + - arch/arm/mach-at91/at91sam9260.c | 3 + - arch/arm/mach-at91/at91sam9263.c | 5 ++ - arch/arm/mach-at91/at91sam9g45.c | 6 ++ - arch/arm/mach-at91/at91sam9n12.c | 11 ++-- - arch/arm/mach-at91/at91sam9x5.c | 18 ++---- - arch/arm/mach-at91/setup.c | 3 +- - drivers/pinctrl/pinctrl-at91.c | 2 +- + Documentation/devicetree/bindings/pinctrl/atmel,at91-pinctrl.txt | 68 ++++++++-- + arch/arm/boot/dts/at91sam9260.dtsi | 9 + + arch/arm/boot/dts/at91sam9263.dtsi | 12 + + arch/arm/boot/dts/at91sam9g45.dtsi | 11 + + arch/arm/boot/dts/at91sam9n12.dtsi | 12 + + arch/arm/boot/dts/at91sam9x5.dtsi | 12 + + arch/arm/configs/at91_dt_defconfig | 1 + arch/arm/mach-at91/at91sam9260.c | 3 + arch/arm/mach-at91/at91sam9263.c | 5 + arch/arm/mach-at91/at91sam9g45.c | 6 + arch/arm/mach-at91/at91sam9n12.c | 11 - + arch/arm/mach-at91/at91sam9x5.c | 18 -- + arch/arm/mach-at91/setup.c | 3 + drivers/pinctrl/pinctrl-at91.c | 2 14 files changed, 140 insertions(+), 33 deletions(-) -diff --git a/Documentation/devicetree/bindings/pinctrl/atmel,at91-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/atmel,at91-pinctrl.txt -index 0296ef4..20a987e 100644 --- a/Documentation/devicetree/bindings/pinctrl/atmel,at91-pinctrl.txt +++ b/Documentation/devicetree/bindings/pinctrl/atmel,at91-pinctrl.txt -@@ -22,6 +22,62 @@ Required properties for iomux controller: +@@ -22,6 +22,62 @@ Required properties for iomux controller - atmel,mux-mask: array of mask (periph per bank) to describe if a pin can be configured in this periph mode. All the periph and bank need to be describe. @@ -117,8 +115,6 @@ index 0296ef4..20a987e 100644 Examples: -diff --git a/arch/arm/boot/dts/at91sam9260.dtsi b/arch/arm/boot/dts/at91sam9260.dtsi -index e50261d..3654ace 100644 --- a/arch/arm/boot/dts/at91sam9260.dtsi +++ b/arch/arm/boot/dts/at91sam9260.dtsi @@ -104,6 +104,15 @@ @@ -137,8 +133,6 @@ index e50261d..3654ace 100644 pioA: gpio@fffff400 { compatible = "atmel,at91rm9200-gpio"; reg = <0xfffff400 0x200>; -diff --git a/arch/arm/boot/dts/at91sam9263.dtsi b/arch/arm/boot/dts/at91sam9263.dtsi -index 45e5363..d7f416d 100644 --- a/arch/arm/boot/dts/at91sam9263.dtsi +++ b/arch/arm/boot/dts/at91sam9263.dtsi @@ -95,6 +95,17 @@ @@ -167,8 +161,6 @@ index 45e5363..d7f416d 100644 }; dbgu: serial@ffffee00 { -diff --git a/arch/arm/boot/dts/at91sam9g45.dtsi b/arch/arm/boot/dts/at91sam9g45.dtsi -index 59a21c1..e2fa457 100644 --- a/arch/arm/boot/dts/at91sam9g45.dtsi +++ b/arch/arm/boot/dts/at91sam9g45.dtsi @@ -115,6 +115,17 @@ @@ -189,8 +181,6 @@ index 59a21c1..e2fa457 100644 pioA: gpio@fffff200 { compatible = "atmel,at91rm9200-gpio"; reg = <0xfffff200 0x200>; -diff --git a/arch/arm/boot/dts/at91sam9n12.dtsi b/arch/arm/boot/dts/at91sam9n12.dtsi -index 135ecef..fc451f9 100644 --- a/arch/arm/boot/dts/at91sam9n12.dtsi +++ b/arch/arm/boot/dts/at91sam9n12.dtsi @@ -115,9 +115,19 @@ @@ -214,8 +204,6 @@ index 135ecef..fc451f9 100644 pioA: gpio@fffff400 { compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; reg = <0xfffff400 0x200>; -diff --git a/arch/arm/boot/dts/at91sam9x5.dtsi b/arch/arm/boot/dts/at91sam9x5.dtsi -index 4e61a5d..84baa90 100644 --- a/arch/arm/boot/dts/at91sam9x5.dtsi +++ b/arch/arm/boot/dts/at91sam9x5.dtsi @@ -116,9 +116,19 @@ @@ -239,8 +227,6 @@ index 4e61a5d..84baa90 100644 pioA: gpio@fffff400 { compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; reg = <0xfffff400 0x200>; -diff --git a/arch/arm/configs/at91_dt_defconfig b/arch/arm/configs/at91_dt_defconfig -index 67bc571..b175577 100644 --- a/arch/arm/configs/at91_dt_defconfig +++ b/arch/arm/configs/at91_dt_defconfig @@ -111,6 +111,7 @@ CONFIG_I2C=y @@ -251,11 +237,9 @@ index 67bc571..b175577 100644 # CONFIG_HWMON is not set CONFIG_WATCHDOG=y CONFIG_AT91SAM9X_WATCHDOG=y -diff --git a/arch/arm/mach-at91/at91sam9260.c b/arch/arm/mach-at91/at91sam9260.c -index bb9bc50..23a8cfb 100644 --- a/arch/arm/mach-at91/at91sam9260.c +++ b/arch/arm/mach-at91/at91sam9260.c -@@ -228,6 +228,9 @@ static struct clk_lookup periph_clocks_lookups[] = { +@@ -228,6 +228,9 @@ static struct clk_lookup periph_clocks_l CLKDEV_CON_ID("pioA", &pioA_clk), CLKDEV_CON_ID("pioB", &pioB_clk), CLKDEV_CON_ID("pioC", &pioC_clk), @@ -265,11 +249,9 @@ index bb9bc50..23a8cfb 100644 }; static struct clk_lookup usart_clocks_lookups[] = { -diff --git a/arch/arm/mach-at91/at91sam9263.c b/arch/arm/mach-at91/at91sam9263.c -index 76499a6..7639f6b 100644 --- a/arch/arm/mach-at91/at91sam9263.c +++ b/arch/arm/mach-at91/at91sam9263.c -@@ -214,6 +214,11 @@ static struct clk_lookup periph_clocks_lookups[] = { +@@ -214,6 +214,11 @@ static struct clk_lookup periph_clocks_l CLKDEV_CON_DEV_ID("mci_clk", "fff80000.mmc", &mmc0_clk), CLKDEV_CON_DEV_ID("mci_clk", "fff84000.mmc", &mmc1_clk), CLKDEV_CON_DEV_ID(NULL, "fff88000.i2c", &twi_clk), @@ -281,11 +263,9 @@ index 76499a6..7639f6b 100644 }; static struct clk_lookup usart_clocks_lookups[] = { -diff --git a/arch/arm/mach-at91/at91sam9g45.c b/arch/arm/mach-at91/at91sam9g45.c -index 5e7a1dd..2575bbf 100644 --- a/arch/arm/mach-at91/at91sam9g45.c +++ b/arch/arm/mach-at91/at91sam9g45.c -@@ -258,6 +258,12 @@ static struct clk_lookup periph_clocks_lookups[] = { +@@ -258,6 +258,12 @@ static struct clk_lookup periph_clocks_l CLKDEV_CON_DEV_ID("sha_clk", "fffc8000.sha", &aestdessha_clk), /* fake hclk clock */ CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &uhphs_clk), @@ -298,11 +278,9 @@ index 5e7a1dd..2575bbf 100644 CLKDEV_CON_ID("pioA", &pioA_clk), CLKDEV_CON_ID("pioB", &pioB_clk), CLKDEV_CON_ID("pioC", &pioC_clk), -diff --git a/arch/arm/mach-at91/at91sam9n12.c b/arch/arm/mach-at91/at91sam9n12.c -index 6fa0df1..f313142 100644 --- a/arch/arm/mach-at91/at91sam9n12.c +++ b/arch/arm/mach-at91/at91sam9n12.c -@@ -186,12 +186,12 @@ static struct clk_lookup periph_clocks_lookups[] = { +@@ -186,12 +186,12 @@ static struct clk_lookup periph_clocks_l CLKDEV_CON_DEV_ID("dma_clk", "ffffec00.dma-controller", &dma_clk), CLKDEV_CON_DEV_ID(NULL, "f8010000.i2c", &twi0_clk), CLKDEV_CON_DEV_ID(NULL, "f8014000.i2c", &twi1_clk), @@ -319,7 +297,7 @@ index 6fa0df1..f313142 100644 /* additional fake clock for macb_hclk */ CLKDEV_CON_DEV_ID("hclk", "500000.ohci", &uhp_clk), CLKDEV_CON_DEV_ID("ohci_clk", "500000.ohci", &uhp_clk), -@@ -241,9 +241,6 @@ static void __init at91sam9n12_map_io(void) +@@ -241,9 +241,6 @@ static void __init at91sam9n12_map_io(vo void __init at91sam9n12_initialize(void) { at91_extern_irq = (1 << AT91SAM9N12_ID_IRQ0); @@ -329,11 +307,9 @@ index 6fa0df1..f313142 100644 } AT91_SOC_START(sam9n12) -diff --git a/arch/arm/mach-at91/at91sam9x5.c b/arch/arm/mach-at91/at91sam9x5.c -index af00de4..2870367 100644 --- a/arch/arm/mach-at91/at91sam9x5.c +++ b/arch/arm/mach-at91/at91sam9x5.c -@@ -227,16 +227,13 @@ static struct clk_lookup periph_clocks_lookups[] = { +@@ -227,16 +227,13 @@ static struct clk_lookup periph_clocks_l CLKDEV_CON_DEV_ID("dma_clk", "ffffee00.dma-controller", &dma1_clk), CLKDEV_CON_DEV_ID("mci_clk", "f0008000.mmc", &mmc0_clk), CLKDEV_CON_DEV_ID("mci_clk", "f000c000.mmc", &mmc1_clk), @@ -354,7 +330,7 @@ index af00de4..2870367 100644 /* additional fake clock for macb_hclk */ CLKDEV_CON_DEV_ID("hclk", "f802c000.ethernet", &macb0_clk), CLKDEV_CON_DEV_ID("hclk", "f8030000.ethernet", &macb1_clk), -@@ -313,12 +310,6 @@ static void __init at91sam9x5_map_io(void) +@@ -313,12 +310,6 @@ static void __init at91sam9x5_map_io(voi init_consistent_dma_size(SZ_8M); } @@ -373,11 +349,9 @@ index af00de4..2870367 100644 .register_clocks = at91sam9x5_register_clocks, - .init = at91sam9x5_initialize, AT91_SOC_END -diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c -index 50c69b5..fcb66ea 100644 --- a/arch/arm/mach-at91/setup.c +++ b/arch/arm/mach-at91/setup.c -@@ -449,7 +449,8 @@ void __init at91_dt_initialize(void) +@@ -451,7 +451,8 @@ void __init at91_dt_initialize(void) /* Register the processor-specific clocks */ at91_boot_soc.register_clocks(); @@ -387,11 +361,9 @@ index 50c69b5..fcb66ea 100644 } #endif -diff --git a/drivers/pinctrl/pinctrl-at91.c b/drivers/pinctrl/pinctrl-at91.c -index e4712d1..9c0fe11 100644 --- a/drivers/pinctrl/pinctrl-at91.c +++ b/drivers/pinctrl/pinctrl-at91.c -@@ -749,7 +749,7 @@ static int __devinit at91_pinctrl_parse_groups(struct device_node *np, +@@ -749,7 +749,7 @@ static int __devinit at91_pinctrl_parse_ grp->name = np->name; /* @@ -400,6 +372,3 @@ index e4712d1..9c0fe11 100644 * do sanity check and calculate pins number */ list = of_get_property(np, "atmel,pins", &size); --- -1.8.0.197.g5a90748 - diff --git a/patches.dma-mapping/arm-dma-mapping-add-support-for-iommu-mapper.patch b/patches.dma-mapping/arm-dma-mapping-add-support-for-iommu-mapper.patch index 04f0cc75bbabb9..20cf54972f6414 100644 --- a/patches.dma-mapping/arm-dma-mapping-add-support-for-iommu-mapper.patch +++ b/patches.dma-mapping/arm-dma-mapping-add-support-for-iommu-mapper.patch @@ -57,16 +57,14 @@ Conflicts: Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- - arch/arm/Kconfig | 8 + - arch/arm/include/asm/device.h | 3 + - arch/arm/include/asm/dma-iommu.h | 34 ++ - arch/arm/mm/dma-mapping.c | 694 +++++++++++++++++++++++++++++++++++++- - arch/arm/mm/vmregion.h | 2 +- + arch/arm/Kconfig | 8 + arch/arm/include/asm/device.h | 3 + arch/arm/include/asm/dma-iommu.h | 34 + + arch/arm/mm/dma-mapping.c | 694 ++++++++++++++++++++++++++++++++++++++- + arch/arm/mm/vmregion.h | 2 5 files changed, 736 insertions(+), 5 deletions(-) create mode 100644 arch/arm/include/asm/dma-iommu.h -diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig -index 9bc6663..c7a542c 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -48,6 +48,14 @@ config ARM @@ -84,8 +82,6 @@ index 9bc6663..c7a542c 100644 config HAVE_PWM bool -diff --git a/arch/arm/include/asm/device.h b/arch/arm/include/asm/device.h -index 6e2cb0e..b69c0d3 100644 --- a/arch/arm/include/asm/device.h +++ b/arch/arm/include/asm/device.h @@ -14,6 +14,9 @@ struct dev_archdata { @@ -98,9 +94,6 @@ index 6e2cb0e..b69c0d3 100644 }; struct omap_device; -diff --git a/arch/arm/include/asm/dma-iommu.h b/arch/arm/include/asm/dma-iommu.h -new file mode 100644 -index 0000000..799b094 --- /dev/null +++ b/arch/arm/include/asm/dma-iommu.h @@ -0,0 +1,34 @@ @@ -138,8 +131,6 @@ index 0000000..799b094 + +#endif /* __KERNEL__ */ +#endif -diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c -index ee4cb48..ea6b431 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c @@ -21,6 +21,8 @@ @@ -159,7 +150,7 @@ index ee4cb48..ea6b431 100644 #include <asm/mach/map.h> #include <asm/system_info.h> #include <asm/dma-contiguous.h> -@@ -168,9 +171,11 @@ static void __dma_clear_buffer(struct page *page, size_t size) +@@ -168,9 +171,11 @@ static void __dma_clear_buffer(struct pa * lurking in the kernel direct-mapped region is invalidated. */ ptr = page_address(page); @@ -185,7 +176,7 @@ index ee4cb48..ea6b431 100644 consistent_pte = kmalloc(num_ptes * sizeof(pte_t), GFP_KERNEL); if (!consistent_pte) { -@@ -437,7 +444,7 @@ __dma_alloc_remap(struct page *page, size_t size, gfp_t gfp, pgprot_t prot, +@@ -437,7 +444,7 @@ __dma_alloc_remap(struct page *page, siz u32 off = CONSISTENT_OFFSET(c->vm_start) & (PTRS_PER_PTE-1); pte = consistent_pte[idx] + off; @@ -194,7 +185,7 @@ index ee4cb48..ea6b431 100644 do { BUG_ON(!pte_none(*pte)); -@@ -889,6 +896,9 @@ int arm_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, +@@ -891,6 +898,9 @@ int arm_dma_map_sg(struct device *dev, s int i, j; for_each_sg(sg, s, nents, i) { @@ -204,7 +195,7 @@ index ee4cb48..ea6b431 100644 s->dma_address = ops->map_page(dev, sg_page(s), s->offset, s->length, dir, attrs); if (dma_mapping_error(dev, s->dma_address)) -@@ -997,3 +1007,679 @@ static int __init dma_debug_do_init(void) +@@ -999,3 +1009,679 @@ static int __init dma_debug_do_init(void return 0; } fs_initcall(dma_debug_do_init); @@ -884,8 +875,6 @@ index ee4cb48..ea6b431 100644 +} + +#endif -diff --git a/arch/arm/mm/vmregion.h b/arch/arm/mm/vmregion.h -index 162be66..bf312c3 100644 --- a/arch/arm/mm/vmregion.h +++ b/arch/arm/mm/vmregion.h @@ -17,7 +17,7 @@ struct arm_vmregion { @@ -897,6 +886,3 @@ index 162be66..bf312c3 100644 int vm_active; const void *caller; }; --- -1.7.5.4 - diff --git a/patches.dma-mapping/arm-dma-mapping-fix-buffer-chunk-allocation-order.patch b/patches.dma-mapping/arm-dma-mapping-fix-buffer-chunk-allocation-order.patch index 1f16839816c48e..5b9cfdcbb2c4bb 100644 --- a/patches.dma-mapping/arm-dma-mapping-fix-buffer-chunk-allocation-order.patch +++ b/patches.dma-mapping/arm-dma-mapping-fix-buffer-chunk-allocation-order.patch @@ -29,13 +29,11 @@ Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp> --- arch/arm/mm/dma-mapping.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) + 1 file changed, 1 insertion(+), 1 deletion(-) -diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c -index caf2f3d..1ce34ba 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c -@@ -940,7 +940,7 @@ static struct page **__iommu_alloc_buffer(struct device *dev, size_t size, gfp_t +@@ -942,7 +942,7 @@ static struct page **__iommu_alloc_buffe return NULL; while (count) { @@ -44,6 +42,3 @@ index caf2f3d..1ce34ba 100644 pages[i] = alloc_pages(gfp | __GFP_NOWARN, order); while (!pages[i] && order) --- -1.7.5.4 - diff --git a/patches.dma-mapping/arm-dma-mapping-fix-error-path-for-memory-allocation-failure.patch b/patches.dma-mapping/arm-dma-mapping-fix-error-path-for-memory-allocation-failure.patch index 97fec16f8a7464..594e664b3abce1 100644 --- a/patches.dma-mapping/arm-dma-mapping-fix-error-path-for-memory-allocation-failure.patch +++ b/patches.dma-mapping/arm-dma-mapping-fix-error-path-for-memory-allocation-failure.patch @@ -20,13 +20,11 @@ Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp> --- arch/arm/mm/dma-mapping.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) + 1 file changed, 1 insertion(+), 1 deletion(-) -diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c -index 6a94d17..caf2f3d 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c -@@ -961,7 +961,7 @@ static struct page **__iommu_alloc_buffer(struct device *dev, size_t size, gfp_t +@@ -963,7 +963,7 @@ static struct page **__iommu_alloc_buffe return pages; error: @@ -35,6 +33,3 @@ index 6a94d17..caf2f3d 100644 if (pages[i]) __free_pages(pages[i], 0); if (array_size <= PAGE_SIZE) --- -1.7.5.4 - diff --git a/patches.dma-mapping/arm-dma-mapping-implement-dma-sg-methods-on-top-of-any-generic-dma-ops.patch b/patches.dma-mapping/arm-dma-mapping-implement-dma-sg-methods-on-top-of-any-generic-dma-ops.patch index bf649730b2c4eb..94555e7401ebc0 100644 --- a/patches.dma-mapping/arm-dma-mapping-implement-dma-sg-methods-on-top-of-any-generic-dma-ops.patch +++ b/patches.dma-mapping/arm-dma-mapping-implement-dma-sg-methods-on-top-of-any-generic-dma-ops.patch @@ -33,13 +33,11 @@ Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- arch/arm/mm/dma-mapping.c | 43 +++++++++++++++++++------------------------ - 1 files changed, 19 insertions(+), 24 deletions(-) + 1 file changed, 19 insertions(+), 24 deletions(-) -diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c -index 4a1f336..5b2b652 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c -@@ -858,7 +858,7 @@ void ___dma_page_dev_to_cpu(struct page *page, unsigned long off, +@@ -860,7 +860,7 @@ void ___dma_page_dev_to_cpu(struct page EXPORT_SYMBOL(___dma_page_dev_to_cpu); /** @@ -48,7 +46,7 @@ index 4a1f336..5b2b652 100644 * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices * @sg: list of buffers * @nents: number of buffers to map -@@ -876,12 +876,13 @@ EXPORT_SYMBOL(___dma_page_dev_to_cpu); +@@ -878,12 +878,13 @@ EXPORT_SYMBOL(___dma_page_dev_to_cpu); int arm_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, struct dma_attrs *attrs) { @@ -64,7 +62,7 @@ index 4a1f336..5b2b652 100644 if (dma_mapping_error(dev, s->dma_address)) goto bad_mapping; } -@@ -889,12 +890,12 @@ int arm_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, +@@ -891,12 +892,12 @@ int arm_dma_map_sg(struct device *dev, s bad_mapping: for_each_sg(sg, s, i, j) @@ -79,7 +77,7 @@ index 4a1f336..5b2b652 100644 * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices * @sg: list of buffers * @nents: number of buffers to unmap (same as was passed to dma_map_sg) -@@ -906,15 +907,17 @@ int arm_dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, +@@ -908,15 +909,17 @@ int arm_dma_map_sg(struct device *dev, s void arm_dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir, struct dma_attrs *attrs) { @@ -99,7 +97,7 @@ index 4a1f336..5b2b652 100644 * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices * @sg: list of buffers * @nents: number of buffers to map (returned from dma_map_sg) -@@ -923,21 +926,17 @@ void arm_dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, +@@ -925,21 +928,17 @@ void arm_dma_unmap_sg(struct device *dev void arm_dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir) { @@ -126,7 +124,7 @@ index 4a1f336..5b2b652 100644 * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices * @sg: list of buffers * @nents: number of buffers to map (returned from dma_map_sg) -@@ -946,17 +945,13 @@ void arm_dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, +@@ -948,17 +947,13 @@ void arm_dma_sync_sg_for_cpu(struct devi void arm_dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction dir) { @@ -148,6 +146,3 @@ index 4a1f336..5b2b652 100644 } /* --- -1.7.5.4 - diff --git a/patches.dma-mapping/arm-dma-mapping-modify-condition-check-while-freeing-pages.patch b/patches.dma-mapping/arm-dma-mapping-modify-condition-check-while-freeing-pages.patch index 62a2fd77b44ddb..8efd2fbefaabce 100644 --- a/patches.dma-mapping/arm-dma-mapping-modify-condition-check-while-freeing-pages.patch +++ b/patches.dma-mapping/arm-dma-mapping-modify-condition-check-while-freeing-pages.patch @@ -43,13 +43,11 @@ Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- arch/arm/mm/dma-mapping.c | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) + 1 file changed, 2 insertions(+), 2 deletions(-) -diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c -index d766e42..6f85d3d 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c -@@ -1091,7 +1091,7 @@ error: +@@ -1093,7 +1093,7 @@ error: while (--i) if (pages[i]) __free_pages(pages[i], 0); @@ -58,7 +56,7 @@ index d766e42..6f85d3d 100644 kfree(pages); else vfree(pages); -@@ -1106,7 +1106,7 @@ static int __iommu_free_buffer(struct device *dev, struct page **pages, size_t s +@@ -1108,7 +1108,7 @@ static int __iommu_free_buffer(struct de for (i = 0; i < count; i++) if (pages[i]) __free_pages(pages[i], 0); @@ -67,6 +65,3 @@ index d766e42..6f85d3d 100644 kfree(pages); else vfree(pages); --- -1.7.5.4 - diff --git a/patches.dma-mapping/arm-dma-mapping-move-all-dma-bounce-code-to-separate-dma-ops-structure.patch b/patches.dma-mapping/arm-dma-mapping-move-all-dma-bounce-code-to-separate-dma-ops-structure.patch index a68a411ba6353c..a8165140bf206b 100644 --- a/patches.dma-mapping/arm-dma-mapping-move-all-dma-bounce-code-to-separate-dma-ops-structure.patch +++ b/patches.dma-mapping/arm-dma-mapping-move-all-dma-bounce-code-to-separate-dma-ops-structure.patch @@ -22,15 +22,13 @@ Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- arch/arm/common/dmabounce.c | 62 ++++++++++++++++++----- - arch/arm/include/asm/dma-mapping.h | 99 +----------------------------------- + arch/arm/include/asm/dma-mapping.h | 99 ------------------------------------- arch/arm/mm/dma-mapping.c | 79 +++++++++++++++++++++++++---- 3 files changed, 120 insertions(+), 120 deletions(-) -diff --git a/arch/arm/common/dmabounce.c b/arch/arm/common/dmabounce.c -index 32e9cc6..813c29d 100644 --- a/arch/arm/common/dmabounce.c +++ b/arch/arm/common/dmabounce.c -@@ -308,8 +308,9 @@ static inline void unmap_single(struct device *dev, struct safe_buffer *buf, +@@ -308,8 +308,9 @@ static inline void unmap_single(struct d * substitute the safe buffer for the unsafe one. * (basically move the buffer from an unsafe area to a safe one) */ @@ -42,7 +40,7 @@ index 32e9cc6..813c29d 100644 { dma_addr_t dma_addr; int ret; -@@ -324,7 +325,7 @@ dma_addr_t __dma_map_page(struct device *dev, struct page *page, +@@ -324,7 +325,7 @@ dma_addr_t __dma_map_page(struct device return DMA_ERROR_CODE; if (ret == 0) { @@ -51,7 +49,7 @@ index 32e9cc6..813c29d 100644 return dma_addr; } -@@ -335,7 +336,6 @@ dma_addr_t __dma_map_page(struct device *dev, struct page *page, +@@ -335,7 +336,6 @@ dma_addr_t __dma_map_page(struct device return map_single(dev, page_address(page) + offset, size, dir); } @@ -70,7 +68,7 @@ index 32e9cc6..813c29d 100644 { struct safe_buffer *buf; -@@ -353,16 +353,14 @@ void __dma_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size, +@@ -353,16 +353,14 @@ void __dma_unmap_page(struct device *dev buf = find_safe_buffer_dev(dev, dma_addr, __func__); if (!buf) { @@ -89,7 +87,7 @@ index 32e9cc6..813c29d 100644 size_t sz, enum dma_data_direction dir) { struct safe_buffer *buf; -@@ -392,9 +390,17 @@ int dmabounce_sync_for_cpu(struct device *dev, dma_addr_t addr, +@@ -392,9 +390,17 @@ int dmabounce_sync_for_cpu(struct device } return 0; } @@ -109,7 +107,7 @@ index 32e9cc6..813c29d 100644 size_t sz, enum dma_data_direction dir) { struct safe_buffer *buf; -@@ -424,7 +430,35 @@ int dmabounce_sync_for_device(struct device *dev, dma_addr_t addr, +@@ -424,7 +430,35 @@ int dmabounce_sync_for_device(struct dev } return 0; } @@ -146,7 +144,7 @@ index 32e9cc6..813c29d 100644 static int dmabounce_init_pool(struct dmabounce_pool *pool, struct device *dev, const char *name, unsigned long size) -@@ -486,6 +520,7 @@ int dmabounce_register_dev(struct device *dev, unsigned long small_buffer_size, +@@ -486,6 +520,7 @@ int dmabounce_register_dev(struct device #endif dev->archdata.dmabounce = device_info; @@ -154,7 +152,7 @@ index 32e9cc6..813c29d 100644 dev_info(dev, "dmabounce: registered device\n"); -@@ -504,6 +539,7 @@ void dmabounce_unregister_dev(struct device *dev) +@@ -504,6 +539,7 @@ void dmabounce_unregister_dev(struct dev struct dmabounce_device_info *device_info = dev->archdata.dmabounce; dev->archdata.dmabounce = NULL; @@ -162,11 +160,9 @@ index 32e9cc6..813c29d 100644 if (!device_info) { dev_warn(dev, -diff --git a/arch/arm/include/asm/dma-mapping.h b/arch/arm/include/asm/dma-mapping.h -index 6725a08..7a7c3c7 100644 --- a/arch/arm/include/asm/dma-mapping.h +++ b/arch/arm/include/asm/dma-mapping.h -@@ -85,62 +85,6 @@ static inline dma_addr_t virt_to_dma(struct device *dev, void *addr) +@@ -85,62 +85,6 @@ static inline dma_addr_t virt_to_dma(str #endif /* @@ -229,7 +225,7 @@ index 6725a08..7a7c3c7 100644 * DMA errors are defined by all-bits-set in the DMA address. */ static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr) -@@ -163,6 +107,8 @@ static inline void dma_free_noncoherent(struct device *dev, size_t size, +@@ -163,6 +107,8 @@ static inline void dma_free_noncoherent( { } @@ -238,7 +234,7 @@ index 6725a08..7a7c3c7 100644 /** * dma_alloc_coherent - allocate consistent memory for DMA * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices -@@ -235,7 +181,6 @@ int dma_mmap_writecombine(struct device *, struct vm_area_struct *, +@@ -235,7 +181,6 @@ int dma_mmap_writecombine(struct device extern void __init init_consistent_dma_size(unsigned long size); @@ -246,7 +242,7 @@ index 6725a08..7a7c3c7 100644 /* * For SA-1111, IXP425, and ADI systems the dma-mapping functions are "magic" * and utilize bounce buffers as needed to work around limited DMA windows. -@@ -275,47 +220,7 @@ extern int dmabounce_register_dev(struct device *, unsigned long, +@@ -275,48 +220,8 @@ extern int dmabounce_register_dev(struct */ extern void dmabounce_unregister_dev(struct device *); @@ -275,7 +271,7 @@ index 6725a08..7a7c3c7 100644 -{ - return 1; -} -- + -static inline dma_addr_t __dma_map_page(struct device *dev, struct page *page, - unsigned long offset, size_t size, enum dma_data_direction dir) @@ -291,11 +287,10 @@ index 6725a08..7a7c3c7 100644 - handle & ~PAGE_MASK, size, dir); -} -#endif /* CONFIG_DMABOUNCE */ - +- /* * The scatter list versions of the above methods. -diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c -index 5b2b652..0265733 100644 + */ --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c @@ -34,6 +34,75 @@ @@ -374,7 +369,7 @@ index 5b2b652..0265733 100644 /** * arm_dma_map_page - map a portion of a page for streaming DMA * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices -@@ -81,9 +150,6 @@ static inline void arm_dma_sync_single_for_cpu(struct device *dev, +@@ -81,9 +150,6 @@ static inline void arm_dma_sync_single_f { unsigned int offset = handle & (PAGE_SIZE - 1); struct page *page = pfn_to_page(dma_to_pfn(dev, handle-offset)); @@ -384,7 +379,7 @@ index 5b2b652..0265733 100644 __dma_page_dev_to_cpu(page, offset, size, dir); } -@@ -92,9 +158,6 @@ static inline void arm_dma_sync_single_for_device(struct device *dev, +@@ -92,9 +158,6 @@ static inline void arm_dma_sync_single_f { unsigned int offset = handle & (PAGE_SIZE - 1); struct page *page = pfn_to_page(dma_to_pfn(dev, handle-offset)); @@ -394,7 +389,7 @@ index 5b2b652..0265733 100644 __dma_page_cpu_to_dev(page, offset, size, dir); } -@@ -835,7 +898,6 @@ void ___dma_page_cpu_to_dev(struct page *page, unsigned long off, +@@ -837,7 +900,6 @@ void ___dma_page_cpu_to_dev(struct page } /* FIXME: non-speculating: flush on bidirectional mappings? */ } @@ -402,7 +397,7 @@ index 5b2b652..0265733 100644 void ___dma_page_dev_to_cpu(struct page *page, unsigned long off, size_t size, enum dma_data_direction dir) -@@ -855,7 +917,6 @@ void ___dma_page_dev_to_cpu(struct page *page, unsigned long off, +@@ -857,7 +919,6 @@ void ___dma_page_dev_to_cpu(struct page if (dir != DMA_TO_DEVICE && off == 0 && size >= PAGE_SIZE) set_bit(PG_dcache_clean, &page->flags); } @@ -410,7 +405,7 @@ index 5b2b652..0265733 100644 /** * arm_dma_map_sg - map a set of SG buffers for streaming mode DMA -@@ -973,9 +1034,7 @@ static int arm_dma_set_mask(struct device *dev, u64 dma_mask) +@@ -975,9 +1036,7 @@ static int arm_dma_set_mask(struct devic if (!dev->dma_mask || !dma_supported(dev, dma_mask)) return -EIO; @@ -420,6 +415,3 @@ index 5b2b652..0265733 100644 return 0; } --- -1.7.5.4 - diff --git a/patches.dma-mapping/arm-dma-mapping-remove-custom-consistent-dma-region.patch b/patches.dma-mapping/arm-dma-mapping-remove-custom-consistent-dma-region.patch index da0ba40bd96c0c..3a95f324672d29 100644 --- a/patches.dma-mapping/arm-dma-mapping-remove-custom-consistent-dma-region.patch +++ b/patches.dma-mapping/arm-dma-mapping-remove-custom-consistent-dma-region.patch @@ -507,7 +507,7 @@ Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp> else addr = __alloc_from_contiguous(dev, size, prot, &page); -@@ -998,9 +868,6 @@ static int arm_dma_set_mask(struct devic +@@ -1000,9 +870,6 @@ static int arm_dma_set_mask(struct devic static int __init dma_debug_do_init(void) { @@ -517,7 +517,7 @@ Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp> dma_debug_init(PREALLOC_DMA_DEBUG_ENTRIES); return 0; } -@@ -1117,61 +984,32 @@ static int __iommu_free_buffer(struct de +@@ -1119,61 +986,32 @@ static int __iommu_free_buffer(struct de * Create a CPU mapping for a specified pages */ static void * @@ -602,7 +602,7 @@ Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp> return NULL; } -@@ -1230,6 +1068,16 @@ static int __iommu_remove_mapping(struct +@@ -1232,6 +1070,16 @@ static int __iommu_remove_mapping(struct return 0; } @@ -619,7 +619,7 @@ Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp> static void *arm_iommu_alloc_attrs(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp, struct dma_attrs *attrs) { -@@ -1248,7 +1096,8 @@ static void *arm_iommu_alloc_attrs(struc +@@ -1250,7 +1098,8 @@ static void *arm_iommu_alloc_attrs(struc if (*handle == DMA_ERROR_CODE) goto err_buffer; @@ -629,7 +629,7 @@ Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp> if (!addr) goto err_mapping; -@@ -1265,31 +1114,25 @@ static int arm_iommu_mmap_attrs(struct d +@@ -1267,31 +1116,25 @@ static int arm_iommu_mmap_attrs(struct d void *cpu_addr, dma_addr_t dma_addr, size_t size, struct dma_attrs *attrs) { @@ -675,7 +675,7 @@ Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp> return 0; } -@@ -1300,16 +1143,19 @@ static int arm_iommu_mmap_attrs(struct d +@@ -1302,16 +1145,19 @@ static int arm_iommu_mmap_attrs(struct d void arm_iommu_free_attrs(struct device *dev, size_t size, void *cpu_addr, dma_addr_t handle, struct dma_attrs *attrs) { diff --git a/patches.dma-mapping/arm-dma-mapping-remove-offset-parameter-to-prepare-for-generic-dma_ops.patch b/patches.dma-mapping/arm-dma-mapping-remove-offset-parameter-to-prepare-for-generic-dma_ops.patch index c3cab3b4e8268c..e2f92775aa1a7c 100644 --- a/patches.dma-mapping/arm-dma-mapping-remove-offset-parameter-to-prepare-for-generic-dma_ops.patch +++ b/patches.dma-mapping/arm-dma-mapping-remove-offset-parameter-to-prepare-for-generic-dma_ops.patch @@ -52,15 +52,13 @@ Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- arch/arm/common/dmabounce.c | 13 +++++-- - arch/arm/include/asm/dma-mapping.h | 67 +++++++++++++++++------------------ + arch/arm/include/asm/dma-mapping.h | 67 ++++++++++++++++++------------------- arch/arm/mm/dma-mapping.c | 4 +- 3 files changed, 45 insertions(+), 39 deletions(-) -diff --git a/arch/arm/common/dmabounce.c b/arch/arm/common/dmabounce.c -index 210ad1b..32e9cc6 100644 --- a/arch/arm/common/dmabounce.c +++ b/arch/arm/common/dmabounce.c -@@ -173,7 +173,8 @@ find_safe_buffer(struct dmabounce_device_info *device_info, dma_addr_t safe_dma_ +@@ -173,7 +173,8 @@ find_safe_buffer(struct dmabounce_device read_lock_irqsave(&device_info->lock, flags); list_for_each_entry(b, &device_info->safe_buffers, node) @@ -70,7 +68,7 @@ index 210ad1b..32e9cc6 100644 rb = b; break; } -@@ -362,9 +363,10 @@ void __dma_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size, +@@ -362,9 +363,10 @@ void __dma_unmap_page(struct device *dev EXPORT_SYMBOL(__dma_unmap_page); int dmabounce_sync_for_cpu(struct device *dev, dma_addr_t addr, @@ -82,7 +80,7 @@ index 210ad1b..32e9cc6 100644 dev_dbg(dev, "%s(dma=%#x,off=%#lx,sz=%zx,dir=%x)\n", __func__, addr, off, sz, dir); -@@ -373,6 +375,8 @@ int dmabounce_sync_for_cpu(struct device *dev, dma_addr_t addr, +@@ -373,6 +375,8 @@ int dmabounce_sync_for_cpu(struct device if (!buf) return 1; @@ -91,7 +89,7 @@ index 210ad1b..32e9cc6 100644 BUG_ON(buf->direction != dir); dev_dbg(dev, "%s: unsafe buffer %p (dma=%#x) mapped to %p (dma=%#x)\n", -@@ -391,9 +395,10 @@ int dmabounce_sync_for_cpu(struct device *dev, dma_addr_t addr, +@@ -391,9 +395,10 @@ int dmabounce_sync_for_cpu(struct device EXPORT_SYMBOL(dmabounce_sync_for_cpu); int dmabounce_sync_for_device(struct device *dev, dma_addr_t addr, @@ -103,7 +101,7 @@ index 210ad1b..32e9cc6 100644 dev_dbg(dev, "%s(dma=%#x,off=%#lx,sz=%zx,dir=%x)\n", __func__, addr, off, sz, dir); -@@ -402,6 +407,8 @@ int dmabounce_sync_for_device(struct device *dev, dma_addr_t addr, +@@ -402,6 +407,8 @@ int dmabounce_sync_for_device(struct dev if (!buf) return 1; @@ -112,11 +110,9 @@ index 210ad1b..32e9cc6 100644 BUG_ON(buf->direction != dir); dev_dbg(dev, "%s: unsafe buffer %p (dma=%#x) mapped to %p (dma=%#x)\n", -diff --git a/arch/arm/include/asm/dma-mapping.h b/arch/arm/include/asm/dma-mapping.h -index 6a838da..eeddbe2 100644 --- a/arch/arm/include/asm/dma-mapping.h +++ b/arch/arm/include/asm/dma-mapping.h -@@ -266,19 +266,17 @@ extern void __dma_unmap_page(struct device *, dma_addr_t, size_t, +@@ -266,19 +266,17 @@ extern void __dma_unmap_page(struct devi /* * Private functions */ @@ -140,7 +136,7 @@ index 6a838da..eeddbe2 100644 { return 1; } -@@ -401,6 +399,33 @@ static inline void dma_unmap_page(struct device *dev, dma_addr_t handle, +@@ -401,6 +399,33 @@ static inline void dma_unmap_page(struct __dma_unmap_page(dev, handle, size, dir); } @@ -174,7 +170,7 @@ index 6a838da..eeddbe2 100644 /** * dma_sync_single_range_for_cpu * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices -@@ -423,40 +448,14 @@ static inline void dma_sync_single_range_for_cpu(struct device *dev, +@@ -423,40 +448,14 @@ static inline void dma_sync_single_range dma_addr_t handle, unsigned long offset, size_t size, enum dma_data_direction dir) { @@ -217,11 +213,9 @@ index 6a838da..eeddbe2 100644 } /* -diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c -index fab24ec..c17c353 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c -@@ -896,7 +896,7 @@ void dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, +@@ -898,7 +898,7 @@ void dma_sync_sg_for_cpu(struct device * int i; for_each_sg(sg, s, nents, i) { @@ -230,7 +224,7 @@ index fab24ec..c17c353 100644 sg_dma_len(s), dir)) continue; -@@ -922,7 +922,7 @@ void dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, +@@ -924,7 +924,7 @@ void dma_sync_sg_for_device(struct devic int i; for_each_sg(sg, s, nents, i) { @@ -239,6 +233,3 @@ index fab24ec..c17c353 100644 sg_dma_len(s), dir)) continue; --- -1.7.5.4 - diff --git a/patches.dma-mapping/arm-dma-mapping-remove-redundant-code-and-do-the-cleanup.patch b/patches.dma-mapping/arm-dma-mapping-remove-redundant-code-and-do-the-cleanup.patch index ba1c71d50456bf..94ace5def7c6b7 100644 --- a/patches.dma-mapping/arm-dma-mapping-remove-redundant-code-and-do-the-cleanup.patch +++ b/patches.dma-mapping/arm-dma-mapping-remove-redundant-code-and-do-the-cleanup.patch @@ -22,11 +22,9 @@ Tested-By: Subash Patel <subash.ramaswamy@linaro.org> Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- - arch/arm/mm/dma-mapping.c | 88 ++++++++++++-------------------------------- - 1 files changed, 24 insertions(+), 64 deletions(-) + arch/arm/mm/dma-mapping.c | 88 ++++++++++++---------------------------------- + 1 file changed, 24 insertions(+), 64 deletions(-) -diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c -index 0265733..f7fbbda 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c @@ -45,64 +45,12 @@ @@ -96,7 +94,7 @@ index 0265733..f7fbbda 100644 /** * arm_dma_map_page - map a portion of a page for streaming DMA * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices -@@ -117,11 +65,13 @@ static inline void __dma_unmap_page(struct device *dev, dma_addr_t handle, +@@ -117,11 +65,13 @@ static inline void __dma_unmap_page(stru * The device owns this memory once this call has completed. The CPU * can regain ownership by calling dma_unmap_page(). */ @@ -112,7 +110,7 @@ index 0265733..f7fbbda 100644 } /** -@@ -138,27 +88,31 @@ static inline dma_addr_t arm_dma_map_page(struct device *dev, struct page *page, +@@ -138,27 +88,31 @@ static inline dma_addr_t arm_dma_map_pag * After this call, reads by the CPU to the buffer are guaranteed to see * whatever the device wrote there. */ @@ -150,7 +148,7 @@ index 0265733..f7fbbda 100644 } static int arm_dma_set_mask(struct device *dev, u64 dma_mask); -@@ -883,7 +837,13 @@ static void dma_cache_maint_page(struct page *page, unsigned long offset, +@@ -885,7 +839,13 @@ static void dma_cache_maint_page(struct } while (left); } @@ -165,7 +163,7 @@ index 0265733..f7fbbda 100644 size_t size, enum dma_data_direction dir) { unsigned long paddr; -@@ -899,7 +859,7 @@ void ___dma_page_cpu_to_dev(struct page *page, unsigned long off, +@@ -901,7 +861,7 @@ void ___dma_page_cpu_to_dev(struct page /* FIXME: non-speculating: flush on bidirectional mappings? */ } @@ -174,6 +172,3 @@ index 0265733..f7fbbda 100644 size_t size, enum dma_data_direction dir) { unsigned long paddr = page_to_phys(page) + off; --- -1.7.5.4 - diff --git a/patches.dma-mapping/arm-dma-mapping-use-asm-generic-dma-mapping-common.h.patch b/patches.dma-mapping/arm-dma-mapping-use-asm-generic-dma-mapping-common.h.patch index 286042a5b6b656..9d5a169fff7d76 100644 --- a/patches.dma-mapping/arm-dma-mapping-use-asm-generic-dma-mapping-common.h.patch +++ b/patches.dma-mapping/arm-dma-mapping-use-asm-generic-dma-mapping-common.h.patch @@ -25,14 +25,12 @@ Conflicts: Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- - arch/arm/Kconfig | 1 + - arch/arm/include/asm/device.h | 1 + - arch/arm/include/asm/dma-mapping.h | 196 +++++------------------------------- + arch/arm/Kconfig | 1 + arch/arm/include/asm/device.h | 1 + arch/arm/include/asm/dma-mapping.h | 196 +++++-------------------------------- arch/arm/mm/dma-mapping.c | 148 ++++++++++++++++----------- 4 files changed, 115 insertions(+), 231 deletions(-) -diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig -index d06c359..9bc6663 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -4,6 +4,7 @@ config ARM @@ -43,8 +41,6 @@ index d06c359..9bc6663 100644 select HAVE_DMA_CONTIGUOUS if (CPU_V6 || CPU_V6K || CPU_V7) select CMA if (CPU_V6 || CPU_V6K || CPU_V7) select HAVE_MEMBLOCK -diff --git a/arch/arm/include/asm/device.h b/arch/arm/include/asm/device.h -index 7aa3680..6e2cb0e 100644 --- a/arch/arm/include/asm/device.h +++ b/arch/arm/include/asm/device.h @@ -7,6 +7,7 @@ @@ -55,8 +51,6 @@ index 7aa3680..6e2cb0e 100644 #ifdef CONFIG_DMABOUNCE struct dmabounce_device_info *dmabounce; #endif -diff --git a/arch/arm/include/asm/dma-mapping.h b/arch/arm/include/asm/dma-mapping.h -index eeddbe2..6725a08 100644 --- a/arch/arm/include/asm/dma-mapping.h +++ b/arch/arm/include/asm/dma-mapping.h @@ -11,6 +11,27 @@ @@ -87,7 +81,7 @@ index eeddbe2..6725a08 100644 #ifdef __arch_page_to_dma #error Please update to __arch_pfn_to_dma -@@ -119,7 +140,6 @@ static inline void __dma_page_dev_to_cpu(struct page *page, unsigned long off, +@@ -119,7 +140,6 @@ static inline void __dma_page_dev_to_cpu extern int dma_supported(struct device *, u64); extern int dma_set_mask(struct device *, u64); @@ -95,7 +89,7 @@ index eeddbe2..6725a08 100644 /* * DMA errors are defined by all-bits-set in the DMA address. */ -@@ -297,179 +317,17 @@ static inline void __dma_unmap_page(struct device *dev, dma_addr_t handle, +@@ -297,179 +317,17 @@ static inline void __dma_unmap_page(stru } #endif /* CONFIG_DMABOUNCE */ @@ -281,8 +275,6 @@ index eeddbe2..6725a08 100644 #endif /* __KERNEL__ */ #endif -diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c -index c17c353..4a1f336 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c @@ -34,6 +34,85 @@ @@ -371,7 +363,7 @@ index c17c353..4a1f336 100644 static u64 get_coherent_dma_mask(struct device *dev) { u64 mask = (u64)arm_dma_limit; -@@ -697,47 +776,6 @@ void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr +@@ -697,47 +776,6 @@ void dma_free_coherent(struct device *de } EXPORT_SYMBOL(dma_free_coherent); @@ -419,7 +411,7 @@ index c17c353..4a1f336 100644 static void dma_cache_maint_page(struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, void (*op)(const void *, size_t, int)) -@@ -835,21 +873,18 @@ EXPORT_SYMBOL(___dma_page_dev_to_cpu); +@@ -837,21 +875,18 @@ EXPORT_SYMBOL(___dma_page_dev_to_cpu); * Device ownership issues as mentioned for dma_map_single are the same * here. */ @@ -443,7 +435,7 @@ index c17c353..4a1f336 100644 return nents; bad_mapping: -@@ -857,7 +892,6 @@ int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, +@@ -859,7 +894,6 @@ int dma_map_sg(struct device *dev, struc __dma_unmap_page(dev, sg_dma_address(s), sg_dma_len(s), dir); return 0; } @@ -451,7 +443,7 @@ index c17c353..4a1f336 100644 /** * dma_unmap_sg - unmap a set of SG buffers mapped by dma_map_sg -@@ -869,18 +903,15 @@ EXPORT_SYMBOL(dma_map_sg); +@@ -871,18 +905,15 @@ EXPORT_SYMBOL(dma_map_sg); * Unmap a set of streaming mode DMA translations. Again, CPU access * rules concerning calls here are the same as for dma_unmap_single(). */ @@ -472,7 +464,7 @@ index c17c353..4a1f336 100644 /** * dma_sync_sg_for_cpu -@@ -889,7 +920,7 @@ EXPORT_SYMBOL(dma_unmap_sg); +@@ -891,7 +922,7 @@ EXPORT_SYMBOL(dma_unmap_sg); * @nents: number of buffers to map (returned from dma_map_sg) * @dir: DMA transfer direction (same as was passed to dma_map_sg) */ @@ -481,7 +473,7 @@ index c17c353..4a1f336 100644 int nents, enum dma_data_direction dir) { struct scatterlist *s; -@@ -903,10 +934,7 @@ void dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, +@@ -905,10 +936,7 @@ void dma_sync_sg_for_cpu(struct device * __dma_page_dev_to_cpu(sg_page(s), s->offset, s->length, dir); } @@ -492,7 +484,7 @@ index c17c353..4a1f336 100644 /** * dma_sync_sg_for_device -@@ -915,7 +943,7 @@ EXPORT_SYMBOL(dma_sync_sg_for_cpu); +@@ -917,7 +945,7 @@ EXPORT_SYMBOL(dma_sync_sg_for_cpu); * @nents: number of buffers to map (returned from dma_map_sg) * @dir: DMA transfer direction (same as was passed to dma_map_sg) */ @@ -501,7 +493,7 @@ index c17c353..4a1f336 100644 int nents, enum dma_data_direction dir) { struct scatterlist *s; -@@ -929,10 +957,7 @@ void dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, +@@ -931,10 +959,7 @@ void dma_sync_sg_for_device(struct devic __dma_page_cpu_to_dev(sg_page(s), s->offset, s->length, dir); } @@ -512,7 +504,7 @@ index c17c353..4a1f336 100644 /* * Return whether the given device DMA address mask can be supported -@@ -948,7 +973,7 @@ int dma_supported(struct device *dev, u64 mask) +@@ -950,7 +975,7 @@ int dma_supported(struct device *dev, u6 } EXPORT_SYMBOL(dma_supported); @@ -521,7 +513,7 @@ index c17c353..4a1f336 100644 { if (!dev->dma_mask || !dma_supported(dev, dma_mask)) return -EIO; -@@ -959,7 +984,6 @@ int dma_set_mask(struct device *dev, u64 dma_mask) +@@ -961,7 +986,6 @@ int dma_set_mask(struct device *dev, u64 return 0; } @@ -529,6 +521,3 @@ index c17c353..4a1f336 100644 #define PREALLOC_DMA_DEBUG_ENTRIES 4096 --- -1.7.5.4 - diff --git a/patches.dma-mapping/mm-compaction-export-some-of-the-functions.patch b/patches.dma-mapping/mm-compaction-export-some-of-the-functions.patch index e310166c1c7052..790863ddec49e7 100644 --- a/patches.dma-mapping/mm-compaction-export-some-of-the-functions.patch +++ b/patches.dma-mapping/mm-compaction-export-some-of-the-functions.patch @@ -32,16 +32,14 @@ Tested-by: Barry Song <Baohua.Song@csr.com> Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- - mm/Makefile | 3 +- - mm/compaction.c | 328 ++++++++++++++++++++++++++----------------------------- - mm/internal.h | 33 ++++++ + mm/Makefile | 3 + mm/compaction.c | 328 ++++++++++++++++++++++++++------------------------------ + mm/internal.h | 33 +++++ 3 files changed, 191 insertions(+), 173 deletions(-) -diff --git a/mm/Makefile b/mm/Makefile -index 50ec00e..8aada89 100644 --- a/mm/Makefile +++ b/mm/Makefile -@@ -13,7 +13,7 @@ obj-y := filemap.o mempool.o oom_kill.o fadvise.o \ +@@ -13,7 +13,7 @@ obj-y := filemap.o mempool.o oom_kill. readahead.o swap.o truncate.o vmscan.o shmem.o \ prio_tree.o util.o mmzone.o vmstat.o backing-dev.o \ page_isolation.o mm_init.o mmu_context.o percpu.o \ @@ -58,8 +56,6 @@ index 50ec00e..8aada89 100644 obj-$(CONFIG_MMU_NOTIFIER) += mmu_notifier.o obj-$(CONFIG_KSM) += ksm.o obj-$(CONFIG_PAGE_POISONING) += debug-pagealloc.o -diff --git a/mm/compaction.c b/mm/compaction.c -index b150a62..dcb3865 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -16,30 +16,11 @@ @@ -95,7 +91,7 @@ index b150a62..dcb3865 100644 static unsigned long release_freepages(struct list_head *freelist) { struct page *page, *next; -@@ -54,6 +35,16 @@ static unsigned long release_freepages(struct list_head *freelist) +@@ -54,6 +35,16 @@ static unsigned long release_freepages(s return count; } @@ -112,7 +108,7 @@ index b150a62..dcb3865 100644 /* * Isolate free pages onto a private freelist. Caller must hold zone->lock. * If @strict is true, will abort returning 0 on any invalid PFNs or non-free -@@ -122,7 +113,7 @@ static unsigned long isolate_freepages_block(unsigned long blockpfn, +@@ -122,7 +113,7 @@ static unsigned long isolate_freepages_b * (which may be greater then end_pfn if end fell in a middle of * a free page). */ @@ -121,7 +117,7 @@ index b150a62..dcb3865 100644 isolate_freepages_range(unsigned long start_pfn, unsigned long end_pfn) { unsigned long isolated, pfn, block_end_pfn, flags; -@@ -176,127 +167,6 @@ isolate_freepages_range(unsigned long start_pfn, unsigned long end_pfn) +@@ -176,127 +167,6 @@ isolate_freepages_range(unsigned long st return pfn; } @@ -249,7 +245,7 @@ index b150a62..dcb3865 100644 /* Update the number of anon and file isolated pages in the zone */ static void acct_isolated(struct zone *zone, struct compact_control *cc) { -@@ -325,13 +195,6 @@ static bool too_many_isolated(struct zone *zone) +@@ -325,13 +195,6 @@ static bool too_many_isolated(struct zon return isolated > (inactive + active) / 2; } @@ -272,7 +268,7 @@ index b150a62..dcb3865 100644 isolate_migratepages_range(struct zone *zone, struct compact_control *cc, unsigned long low_pfn, unsigned long end_pfn) { -@@ -487,35 +350,118 @@ isolate_migratepages_range(struct zone *zone, struct compact_control *cc, +@@ -487,35 +350,118 @@ isolate_migratepages_range(struct zone * return low_pfn; } @@ -411,7 +407,7 @@ index b150a62..dcb3865 100644 } /* -@@ -564,6 +510,44 @@ static void update_nr_listpages(struct compact_control *cc) +@@ -564,6 +510,44 @@ static void update_nr_listpages(struct c cc->nr_freepages = nr_freepages; } @@ -456,17 +452,15 @@ index b150a62..dcb3865 100644 static int compact_finished(struct zone *zone, struct compact_control *cc) { -@@ -913,3 +897,5 @@ void compaction_unregister_node(struct node *node) +@@ -911,3 +895,5 @@ void compaction_unregister_node(struct n return device_remove_file(&node->dev, &dev_attr_compact); } #endif /* CONFIG_SYSFS && CONFIG_NUMA */ + +#endif /* CONFIG_COMPACTION */ -diff --git a/mm/internal.h b/mm/internal.h -index 2189af4..aee4761 100644 --- a/mm/internal.h +++ b/mm/internal.h -@@ -100,6 +100,39 @@ extern void prep_compound_page(struct page *page, unsigned long order); +@@ -100,6 +100,39 @@ extern void prep_compound_page(struct pa extern bool is_free_buddy_page(struct page *page); #endif @@ -506,6 +500,3 @@ index 2189af4..aee4761 100644 /* * function for dealing with page's order in buddy system. --- -1.7.5.4 - diff --git a/patches.dma-mapping/x86-integrate-cma-with-dma-mapping-subsystem.patch b/patches.dma-mapping/x86-integrate-cma-with-dma-mapping-subsystem.patch index a63ce6abfa493c..13ebebc2a13ade 100644 --- a/patches.dma-mapping/x86-integrate-cma-with-dma-mapping-subsystem.patch +++ b/patches.dma-mapping/x86-integrate-cma-with-dma-mapping-subsystem.patch @@ -152,7 +152,7 @@ Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> #include <linux/errno.h> #include <linux/kernel.h> -@@ -948,6 +949,7 @@ void __init setup_arch(char **cmdline_p) +@@ -1028,6 +1029,7 @@ void __init setup_arch(char **cmdline_p) } #endif memblock.current_limit = get_max_mapped(); diff --git a/patches.ltsi/ltsi-makefile-addition.patch b/patches.ltsi/ltsi-makefile-addition.patch index ea1e4e769cca3c..0f2f50ecf2a9df 100644 --- a/patches.ltsi/ltsi-makefile-addition.patch +++ b/patches.ltsi/ltsi-makefile-addition.patch @@ -18,7 +18,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> @@ -1,7 +1,7 @@ VERSION = 3 PATCHLEVEL = 4 - SUBLEVEL = 25 + SUBLEVEL = 29 -EXTRAVERSION = +EXTRAVERSION = -ltsi NAME = Saber-toothed Squirrel |