Merge branch 'dma-size' of git://git.yxit.co.uk/linux into devel-stable
This commit is contained in:
@@ -205,6 +205,13 @@ extern void *dma_alloc_writecombine(struct device *, size_t, dma_addr_t *,
|
|||||||
int dma_mmap_writecombine(struct device *, struct vm_area_struct *,
|
int dma_mmap_writecombine(struct device *, struct vm_area_struct *,
|
||||||
void *, dma_addr_t, size_t);
|
void *, dma_addr_t, size_t);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This can be called during boot to increase the size of the consistent
|
||||||
|
* DMA region above it's default value of 2MB. It must be called before the
|
||||||
|
* memory allocator is initialised, i.e. before any core_initcall.
|
||||||
|
*/
|
||||||
|
extern void __init init_consistent_dma_size(unsigned long size);
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_DMABOUNCE
|
#ifdef CONFIG_DMABOUNCE
|
||||||
/*
|
/*
|
||||||
|
@@ -77,16 +77,7 @@
|
|||||||
*/
|
*/
|
||||||
#define IOREMAP_MAX_ORDER 24
|
#define IOREMAP_MAX_ORDER 24
|
||||||
|
|
||||||
/*
|
|
||||||
* Size of DMA-consistent memory region. Must be multiple of 2M,
|
|
||||||
* between 2MB and 14MB inclusive.
|
|
||||||
*/
|
|
||||||
#ifndef CONSISTENT_DMA_SIZE
|
|
||||||
#define CONSISTENT_DMA_SIZE SZ_2M
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define CONSISTENT_END (0xffe00000UL)
|
#define CONSISTENT_END (0xffe00000UL)
|
||||||
#define CONSISTENT_BASE (CONSISTENT_END - CONSISTENT_DMA_SIZE)
|
|
||||||
|
|
||||||
#else /* CONFIG_MMU */
|
#else /* CONFIG_MMU */
|
||||||
|
|
||||||
|
@@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/pm.h>
|
#include <linux/pm.h>
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
|
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
@@ -319,6 +320,7 @@ static void at91sam9g45_poweroff(void)
|
|||||||
static void __init at91sam9g45_map_io(void)
|
static void __init at91sam9g45_map_io(void)
|
||||||
{
|
{
|
||||||
at91_init_sram(0, AT91SAM9G45_SRAM_BASE, AT91SAM9G45_SRAM_SIZE);
|
at91_init_sram(0, AT91SAM9G45_SRAM_BASE, AT91SAM9G45_SRAM_SIZE);
|
||||||
|
init_consistent_dma_size(SZ_4M);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init at91sam9g45_initialize(void)
|
static void __init at91sam9g45_initialize(void)
|
||||||
|
@@ -128,8 +128,6 @@
|
|||||||
#define AT91SAM9G45_EHCI_BASE 0x00800000 /* USB Host controller (EHCI) */
|
#define AT91SAM9G45_EHCI_BASE 0x00800000 /* USB Host controller (EHCI) */
|
||||||
#define AT91SAM9G45_VDEC_BASE 0x00900000 /* Video Decoder Controller */
|
#define AT91SAM9G45_VDEC_BASE 0x00900000 /* Video Decoder Controller */
|
||||||
|
|
||||||
#define CONSISTENT_DMA_SIZE SZ_4M
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* DMA peripheral identifiers
|
* DMA peripheral identifiers
|
||||||
* for hardware handshaking interface
|
* for hardware handshaking interface
|
||||||
|
@@ -25,9 +25,4 @@
|
|||||||
|
|
||||||
#define PLAT_PHYS_OFFSET CFG_GLOBAL_RAM_BASE
|
#define PLAT_PHYS_OFFSET CFG_GLOBAL_RAM_BASE
|
||||||
|
|
||||||
/*
|
|
||||||
* Maximum DMA memory allowed is 14M
|
|
||||||
*/
|
|
||||||
#define CONSISTENT_DMA_SIZE (SZ_16M - SZ_2M)
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -13,6 +13,7 @@
|
|||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
#include <asm/mach/map.h>
|
#include <asm/mach/map.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
@@ -53,4 +54,6 @@ void __init bcmring_map_io(void)
|
|||||||
{
|
{
|
||||||
|
|
||||||
iotable_init(bcmring_io_desc, ARRAY_SIZE(bcmring_io_desc));
|
iotable_init(bcmring_io_desc, ARRAY_SIZE(bcmring_io_desc));
|
||||||
|
/* Maximum DMA memory allowed is 14M */
|
||||||
|
init_consistent_dma_size(14 << 20);
|
||||||
}
|
}
|
||||||
|
@@ -12,6 +12,7 @@
|
|||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/etherdevice.h>
|
#include <linux/etherdevice.h>
|
||||||
#include <linux/davinci_emac.h>
|
#include <linux/davinci_emac.h>
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
|
|
||||||
#include <asm/tlb.h>
|
#include <asm/tlb.h>
|
||||||
#include <asm/mach/map.h>
|
#include <asm/mach/map.h>
|
||||||
@@ -86,6 +87,8 @@ void __init davinci_common_init(struct davinci_soc_info *soc_info)
|
|||||||
iotable_init(davinci_soc_info.io_desc,
|
iotable_init(davinci_soc_info.io_desc,
|
||||||
davinci_soc_info.io_desc_num);
|
davinci_soc_info.io_desc_num);
|
||||||
|
|
||||||
|
init_consistent_dma_size(14 << 20);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Normally devicemaps_init() would flush caches and tlb after
|
* Normally devicemaps_init() would flush caches and tlb after
|
||||||
* mdesc->map_io(), but we must also do it here because of the CPU
|
* mdesc->map_io(), but we must also do it here because of the CPU
|
||||||
|
@@ -36,9 +36,4 @@
|
|||||||
#define DDR2_MCLKSTOPEN_BIT BIT(30)
|
#define DDR2_MCLKSTOPEN_BIT BIT(30)
|
||||||
#define DDR2_LPMODEN_BIT BIT(31)
|
#define DDR2_LPMODEN_BIT BIT(31)
|
||||||
|
|
||||||
/*
|
|
||||||
* Increase size of DMA-consistent memory region
|
|
||||||
*/
|
|
||||||
#define CONSISTENT_DMA_SIZE (14<<20)
|
|
||||||
|
|
||||||
#endif /* __ASM_ARCH_MEMORY_H */
|
#endif /* __ASM_ARCH_MEMORY_H */
|
||||||
|
@@ -121,6 +121,7 @@ void __init omap1_map_common_io(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
omap_sram_init();
|
omap_sram_init();
|
||||||
|
omap_init_consistent_dma_size();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -16,7 +16,6 @@
|
|||||||
* it under the terms of the GNU General Public License version 2 as
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
@@ -250,6 +249,7 @@ static void __init _omap2_map_common_io(void)
|
|||||||
|
|
||||||
omap2_check_revision();
|
omap2_check_revision();
|
||||||
omap_sram_init();
|
omap_sram_init();
|
||||||
|
omap_init_consistent_dma_size();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SOC_OMAP2420
|
#ifdef CONFIG_SOC_OMAP2420
|
||||||
|
@@ -20,6 +20,7 @@
|
|||||||
#include <linux/serial_core.h>
|
#include <linux/serial_core.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <mach/map.h>
|
#include <mach/map.h>
|
||||||
@@ -145,6 +146,7 @@ void __init s3c64xx_init_io(struct map_desc *mach_desc, int size)
|
|||||||
/* initialise the io descriptors we need for initialisation */
|
/* initialise the io descriptors we need for initialisation */
|
||||||
iotable_init(s3c_iodesc, ARRAY_SIZE(s3c_iodesc));
|
iotable_init(s3c_iodesc, ARRAY_SIZE(s3c_iodesc));
|
||||||
iotable_init(mach_desc, size);
|
iotable_init(mach_desc, size);
|
||||||
|
init_consistent_dma_size(SZ_8M);
|
||||||
|
|
||||||
idcode = __raw_readl(S3C_VA_SYS + 0x118);
|
idcode = __raw_readl(S3C_VA_SYS + 0x118);
|
||||||
if (!idcode) {
|
if (!idcode) {
|
||||||
|
@@ -15,6 +15,4 @@
|
|||||||
|
|
||||||
#define PLAT_PHYS_OFFSET UL(0x50000000)
|
#define PLAT_PHYS_OFFSET UL(0x50000000)
|
||||||
|
|
||||||
#define CONSISTENT_DMA_SIZE SZ_8M
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -20,6 +20,7 @@
|
|||||||
#include <linux/serial_core.h>
|
#include <linux/serial_core.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
|
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
#include <asm/mach/map.h>
|
#include <asm/mach/map.h>
|
||||||
@@ -111,6 +112,7 @@ void __init s5p6440_map_io(void)
|
|||||||
|
|
||||||
iotable_init(s5p64x0_iodesc, ARRAY_SIZE(s5p64x0_iodesc));
|
iotable_init(s5p64x0_iodesc, ARRAY_SIZE(s5p64x0_iodesc));
|
||||||
iotable_init(s5p6440_iodesc, ARRAY_SIZE(s5p6440_iodesc));
|
iotable_init(s5p6440_iodesc, ARRAY_SIZE(s5p6440_iodesc));
|
||||||
|
init_consistent_dma_size(SZ_8M);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init s5p6450_map_io(void)
|
void __init s5p6450_map_io(void)
|
||||||
@@ -120,6 +122,7 @@ void __init s5p6450_map_io(void)
|
|||||||
|
|
||||||
iotable_init(s5p64x0_iodesc, ARRAY_SIZE(s5p64x0_iodesc));
|
iotable_init(s5p64x0_iodesc, ARRAY_SIZE(s5p64x0_iodesc));
|
||||||
iotable_init(s5p6450_iodesc, ARRAY_SIZE(s5p6450_iodesc));
|
iotable_init(s5p6450_iodesc, ARRAY_SIZE(s5p6450_iodesc));
|
||||||
|
init_consistent_dma_size(SZ_8M);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -14,6 +14,5 @@
|
|||||||
#define __ASM_ARCH_MEMORY_H __FILE__
|
#define __ASM_ARCH_MEMORY_H __FILE__
|
||||||
|
|
||||||
#define PLAT_PHYS_OFFSET UL(0x20000000)
|
#define PLAT_PHYS_OFFSET UL(0x20000000)
|
||||||
#define CONSISTENT_DMA_SIZE SZ_8M
|
|
||||||
|
|
||||||
#endif /* __ASM_ARCH_MEMORY_H */
|
#endif /* __ASM_ARCH_MEMORY_H */
|
||||||
|
@@ -20,6 +20,7 @@
|
|||||||
#include <linux/sysdev.h>
|
#include <linux/sysdev.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
|
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
#include <asm/mach/map.h>
|
#include <asm/mach/map.h>
|
||||||
@@ -119,6 +120,7 @@ static void s5pv210_sw_reset(void)
|
|||||||
void __init s5pv210_map_io(void)
|
void __init s5pv210_map_io(void)
|
||||||
{
|
{
|
||||||
iotable_init(s5pv210_iodesc, ARRAY_SIZE(s5pv210_iodesc));
|
iotable_init(s5pv210_iodesc, ARRAY_SIZE(s5pv210_iodesc));
|
||||||
|
init_consistent_dma_size(14 << 20);
|
||||||
|
|
||||||
/* initialise device information early */
|
/* initialise device information early */
|
||||||
s5pv210_default_sdhci0();
|
s5pv210_default_sdhci0();
|
||||||
|
@@ -14,7 +14,6 @@
|
|||||||
#define __ASM_ARCH_MEMORY_H
|
#define __ASM_ARCH_MEMORY_H
|
||||||
|
|
||||||
#define PLAT_PHYS_OFFSET UL(0x20000000)
|
#define PLAT_PHYS_OFFSET UL(0x20000000)
|
||||||
#define CONSISTENT_DMA_SIZE (SZ_8M + SZ_4M + SZ_2M)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sparsemem support
|
* Sparsemem support
|
||||||
|
@@ -37,6 +37,7 @@
|
|||||||
#include <linux/mmc/sh_mobile_sdhi.h>
|
#include <linux/mmc/sh_mobile_sdhi.h>
|
||||||
#include <linux/mfd/tmio.h>
|
#include <linux/mfd/tmio.h>
|
||||||
#include <linux/sh_clk.h>
|
#include <linux/sh_clk.h>
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
#include <video/sh_mobile_lcdc.h>
|
#include <video/sh_mobile_lcdc.h>
|
||||||
#include <video/sh_mipi_dsi.h>
|
#include <video/sh_mipi_dsi.h>
|
||||||
#include <sound/sh_fsi.h>
|
#include <sound/sh_fsi.h>
|
||||||
@@ -446,6 +447,8 @@ static struct map_desc ag5evm_io_desc[] __initdata = {
|
|||||||
static void __init ag5evm_map_io(void)
|
static void __init ag5evm_map_io(void)
|
||||||
{
|
{
|
||||||
iotable_init(ag5evm_io_desc, ARRAY_SIZE(ag5evm_io_desc));
|
iotable_init(ag5evm_io_desc, ARRAY_SIZE(ag5evm_io_desc));
|
||||||
|
/* DMA memory at 0xf6000000 - 0xffdfffff */
|
||||||
|
init_consistent_dma_size(158 << 20);
|
||||||
|
|
||||||
/* setup early devices and console here as well */
|
/* setup early devices and console here as well */
|
||||||
sh73a0_add_early_devices();
|
sh73a0_add_early_devices();
|
||||||
|
@@ -42,6 +42,7 @@
|
|||||||
#include <linux/leds.h>
|
#include <linux/leds.h>
|
||||||
#include <linux/input/sh_keysc.h>
|
#include <linux/input/sh_keysc.h>
|
||||||
#include <linux/usb/r8a66597.h>
|
#include <linux/usb/r8a66597.h>
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
|
|
||||||
#include <media/sh_mobile_ceu.h>
|
#include <media/sh_mobile_ceu.h>
|
||||||
#include <media/sh_mobile_csi2.h>
|
#include <media/sh_mobile_csi2.h>
|
||||||
@@ -1170,6 +1171,8 @@ static struct map_desc ap4evb_io_desc[] __initdata = {
|
|||||||
static void __init ap4evb_map_io(void)
|
static void __init ap4evb_map_io(void)
|
||||||
{
|
{
|
||||||
iotable_init(ap4evb_io_desc, ARRAY_SIZE(ap4evb_io_desc));
|
iotable_init(ap4evb_io_desc, ARRAY_SIZE(ap4evb_io_desc));
|
||||||
|
/* DMA memory at 0xf6000000 - 0xffdfffff */
|
||||||
|
init_consistent_dma_size(158 << 20);
|
||||||
|
|
||||||
/* setup early devices and console here as well */
|
/* setup early devices and console here as well */
|
||||||
sh7372_add_early_devices();
|
sh7372_add_early_devices();
|
||||||
|
@@ -32,6 +32,7 @@
|
|||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
#include <linux/input/sh_keysc.h>
|
#include <linux/input/sh_keysc.h>
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
#include <mach/sh7367.h>
|
#include <mach/sh7367.h>
|
||||||
#include <mach/common.h>
|
#include <mach/common.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
@@ -260,6 +261,8 @@ static struct map_desc g3evm_io_desc[] __initdata = {
|
|||||||
static void __init g3evm_map_io(void)
|
static void __init g3evm_map_io(void)
|
||||||
{
|
{
|
||||||
iotable_init(g3evm_io_desc, ARRAY_SIZE(g3evm_io_desc));
|
iotable_init(g3evm_io_desc, ARRAY_SIZE(g3evm_io_desc));
|
||||||
|
/* DMA memory at 0xf6000000 - 0xffdfffff */
|
||||||
|
init_consistent_dma_size(158 << 20);
|
||||||
|
|
||||||
/* setup early devices and console here as well */
|
/* setup early devices and console here as well */
|
||||||
sh7367_add_early_devices();
|
sh7367_add_early_devices();
|
||||||
|
@@ -33,6 +33,7 @@
|
|||||||
#include <linux/mmc/host.h>
|
#include <linux/mmc/host.h>
|
||||||
#include <linux/mmc/sh_mobile_sdhi.h>
|
#include <linux/mmc/sh_mobile_sdhi.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
#include <mach/sh7377.h>
|
#include <mach/sh7377.h>
|
||||||
#include <mach/common.h>
|
#include <mach/common.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
@@ -274,6 +275,8 @@ static struct map_desc g4evm_io_desc[] __initdata = {
|
|||||||
static void __init g4evm_map_io(void)
|
static void __init g4evm_map_io(void)
|
||||||
{
|
{
|
||||||
iotable_init(g4evm_io_desc, ARRAY_SIZE(g4evm_io_desc));
|
iotable_init(g4evm_io_desc, ARRAY_SIZE(g4evm_io_desc));
|
||||||
|
/* DMA memory at 0xf6000000 - 0xffdfffff */
|
||||||
|
init_consistent_dma_size(158 << 20);
|
||||||
|
|
||||||
/* setup early devices and console here as well */
|
/* setup early devices and console here as well */
|
||||||
sh7377_add_early_devices();
|
sh7377_add_early_devices();
|
||||||
|
@@ -45,6 +45,7 @@
|
|||||||
#include <linux/tca6416_keypad.h>
|
#include <linux/tca6416_keypad.h>
|
||||||
#include <linux/usb/r8a66597.h>
|
#include <linux/usb/r8a66597.h>
|
||||||
#include <linux/usb/renesas_usbhs.h>
|
#include <linux/usb/renesas_usbhs.h>
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
|
|
||||||
#include <video/sh_mobile_hdmi.h>
|
#include <video/sh_mobile_hdmi.h>
|
||||||
#include <video/sh_mobile_lcdc.h>
|
#include <video/sh_mobile_lcdc.h>
|
||||||
@@ -1377,6 +1378,8 @@ static struct map_desc mackerel_io_desc[] __initdata = {
|
|||||||
static void __init mackerel_map_io(void)
|
static void __init mackerel_map_io(void)
|
||||||
{
|
{
|
||||||
iotable_init(mackerel_io_desc, ARRAY_SIZE(mackerel_io_desc));
|
iotable_init(mackerel_io_desc, ARRAY_SIZE(mackerel_io_desc));
|
||||||
|
/* DMA memory at 0xf6000000 - 0xffdfffff */
|
||||||
|
init_consistent_dma_size(158 << 20);
|
||||||
|
|
||||||
/* setup early devices and console here as well */
|
/* setup early devices and console here as well */
|
||||||
sh7372_add_early_devices();
|
sh7372_add_early_devices();
|
||||||
|
@@ -4,7 +4,4 @@
|
|||||||
#define PLAT_PHYS_OFFSET UL(CONFIG_MEMORY_START)
|
#define PLAT_PHYS_OFFSET UL(CONFIG_MEMORY_START)
|
||||||
#define MEM_SIZE UL(CONFIG_MEMORY_SIZE)
|
#define MEM_SIZE UL(CONFIG_MEMORY_SIZE)
|
||||||
|
|
||||||
/* DMA memory at 0xf6000000 - 0xffdfffff */
|
|
||||||
#define CONSISTENT_DMA_SIZE (158 << 20)
|
|
||||||
|
|
||||||
#endif /* __ASM_MACH_MEMORY_H */
|
#endif /* __ASM_MACH_MEMORY_H */
|
||||||
|
@@ -25,6 +25,7 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/nand.h>
|
||||||
#include <linux/mtd/fsmc.h>
|
#include <linux/mtd/fsmc.h>
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
|
|
||||||
#include <asm/types.h>
|
#include <asm/types.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
@@ -92,6 +93,8 @@ static struct map_desc u300_io_desc[] __initdata = {
|
|||||||
void __init u300_map_io(void)
|
void __init u300_map_io(void)
|
||||||
{
|
{
|
||||||
iotable_init(u300_io_desc, ARRAY_SIZE(u300_io_desc));
|
iotable_init(u300_io_desc, ARRAY_SIZE(u300_io_desc));
|
||||||
|
/* We enable a real big DMA buffer if need be. */
|
||||||
|
init_consistent_dma_size(SZ_4M);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -34,9 +34,4 @@
|
|||||||
(CONFIG_MACH_U300_ACCESS_MEM_SIZE & 1))*1024*1024 + 0x100)
|
(CONFIG_MACH_U300_ACCESS_MEM_SIZE & 1))*1024*1024 + 0x100)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
* We enable a real big DMA buffer if need be.
|
|
||||||
*/
|
|
||||||
#define CONSISTENT_DMA_SIZE SZ_4M
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -18,12 +18,14 @@
|
|||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/highmem.h>
|
#include <linux/highmem.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
|
|
||||||
#include <asm/memory.h>
|
#include <asm/memory.h>
|
||||||
#include <asm/highmem.h>
|
#include <asm/highmem.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
#include <asm/sizes.h>
|
#include <asm/sizes.h>
|
||||||
|
#include <asm/mach/arch.h>
|
||||||
|
|
||||||
#include "mm.h"
|
#include "mm.h"
|
||||||
|
|
||||||
@@ -117,26 +119,37 @@ static void __dma_free_buffer(struct page *page, size_t size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
/* Sanity check size */
|
|
||||||
#if (CONSISTENT_DMA_SIZE % SZ_2M)
|
|
||||||
#error "CONSISTENT_DMA_SIZE must be multiple of 2MiB"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define CONSISTENT_OFFSET(x) (((unsigned long)(x) - CONSISTENT_BASE) >> PAGE_SHIFT)
|
|
||||||
#define CONSISTENT_PTE_INDEX(x) (((unsigned long)(x) - CONSISTENT_BASE) >> PGDIR_SHIFT)
|
#define CONSISTENT_OFFSET(x) (((unsigned long)(x) - consistent_base) >> PAGE_SHIFT)
|
||||||
#define NUM_CONSISTENT_PTES (CONSISTENT_DMA_SIZE >> PGDIR_SHIFT)
|
#define CONSISTENT_PTE_INDEX(x) (((unsigned long)(x) - consistent_base) >> PGDIR_SHIFT)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* These are the page tables (2MB each) covering uncached, DMA consistent allocations
|
* These are the page tables (2MB each) covering uncached, DMA consistent allocations
|
||||||
*/
|
*/
|
||||||
static pte_t *consistent_pte[NUM_CONSISTENT_PTES];
|
static pte_t **consistent_pte;
|
||||||
|
|
||||||
|
#define DEFAULT_CONSISTENT_DMA_SIZE SZ_2M
|
||||||
|
|
||||||
|
unsigned long consistent_base = CONSISTENT_END - DEFAULT_CONSISTENT_DMA_SIZE;
|
||||||
|
|
||||||
|
void __init init_consistent_dma_size(unsigned long size)
|
||||||
|
{
|
||||||
|
unsigned long base = CONSISTENT_END - ALIGN(size, SZ_2M);
|
||||||
|
|
||||||
|
BUG_ON(consistent_pte); /* Check we're called before DMA region init */
|
||||||
|
BUG_ON(base < VMALLOC_END);
|
||||||
|
|
||||||
|
/* Grow region to accommodate specified size */
|
||||||
|
if (base < consistent_base)
|
||||||
|
consistent_base = base;
|
||||||
|
}
|
||||||
|
|
||||||
#include "vmregion.h"
|
#include "vmregion.h"
|
||||||
|
|
||||||
static struct arm_vmregion_head consistent_head = {
|
static struct arm_vmregion_head consistent_head = {
|
||||||
.vm_lock = __SPIN_LOCK_UNLOCKED(&consistent_head.vm_lock),
|
.vm_lock = __SPIN_LOCK_UNLOCKED(&consistent_head.vm_lock),
|
||||||
.vm_list = LIST_HEAD_INIT(consistent_head.vm_list),
|
.vm_list = LIST_HEAD_INIT(consistent_head.vm_list),
|
||||||
.vm_start = CONSISTENT_BASE,
|
|
||||||
.vm_end = CONSISTENT_END,
|
.vm_end = CONSISTENT_END,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -155,7 +168,17 @@ static int __init consistent_init(void)
|
|||||||
pmd_t *pmd;
|
pmd_t *pmd;
|
||||||
pte_t *pte;
|
pte_t *pte;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
u32 base = CONSISTENT_BASE;
|
unsigned long base = consistent_base;
|
||||||
|
unsigned long num_ptes = (CONSISTENT_END - base) >> PGDIR_SHIFT;
|
||||||
|
|
||||||
|
consistent_pte = kmalloc(num_ptes * sizeof(pte_t), GFP_KERNEL);
|
||||||
|
if (!consistent_pte) {
|
||||||
|
pr_err("%s: no memory\n", __func__);
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
pr_debug("DMA memory: 0x%08lx - 0x%08lx:\n", base, CONSISTENT_END);
|
||||||
|
consistent_head.vm_start = base;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
pgd = pgd_offset(&init_mm, base);
|
pgd = pgd_offset(&init_mm, base);
|
||||||
@@ -198,7 +221,7 @@ __dma_alloc_remap(struct page *page, size_t size, gfp_t gfp, pgprot_t prot)
|
|||||||
size_t align;
|
size_t align;
|
||||||
int bit;
|
int bit;
|
||||||
|
|
||||||
if (!consistent_pte[0]) {
|
if (!consistent_pte) {
|
||||||
printk(KERN_ERR "%s: not initialised\n", __func__);
|
printk(KERN_ERR "%s: not initialised\n", __func__);
|
||||||
dump_stack();
|
dump_stack();
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@@ -653,9 +653,6 @@ void __init mem_init(void)
|
|||||||
" ITCM : 0x%08lx - 0x%08lx (%4ld kB)\n"
|
" ITCM : 0x%08lx - 0x%08lx (%4ld kB)\n"
|
||||||
#endif
|
#endif
|
||||||
" fixmap : 0x%08lx - 0x%08lx (%4ld kB)\n"
|
" fixmap : 0x%08lx - 0x%08lx (%4ld kB)\n"
|
||||||
#ifdef CONFIG_MMU
|
|
||||||
" DMA : 0x%08lx - 0x%08lx (%4ld MB)\n"
|
|
||||||
#endif
|
|
||||||
" vmalloc : 0x%08lx - 0x%08lx (%4ld MB)\n"
|
" vmalloc : 0x%08lx - 0x%08lx (%4ld MB)\n"
|
||||||
" lowmem : 0x%08lx - 0x%08lx (%4ld MB)\n"
|
" lowmem : 0x%08lx - 0x%08lx (%4ld MB)\n"
|
||||||
#ifdef CONFIG_HIGHMEM
|
#ifdef CONFIG_HIGHMEM
|
||||||
@@ -674,9 +671,6 @@ void __init mem_init(void)
|
|||||||
MLK(ITCM_OFFSET, (unsigned long) itcm_end),
|
MLK(ITCM_OFFSET, (unsigned long) itcm_end),
|
||||||
#endif
|
#endif
|
||||||
MLK(FIXADDR_START, FIXADDR_TOP),
|
MLK(FIXADDR_START, FIXADDR_TOP),
|
||||||
#ifdef CONFIG_MMU
|
|
||||||
MLM(CONSISTENT_BASE, CONSISTENT_END),
|
|
||||||
#endif
|
|
||||||
MLM(VMALLOC_START, VMALLOC_END),
|
MLM(VMALLOC_START, VMALLOC_END),
|
||||||
MLM(PAGE_OFFSET, (unsigned long)high_memory),
|
MLM(PAGE_OFFSET, (unsigned long)high_memory),
|
||||||
#ifdef CONFIG_HIGHMEM
|
#ifdef CONFIG_HIGHMEM
|
||||||
@@ -699,9 +693,6 @@ void __init mem_init(void)
|
|||||||
* be detected at build time already.
|
* be detected at build time already.
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
BUILD_BUG_ON(VMALLOC_END > CONSISTENT_BASE);
|
|
||||||
BUG_ON(VMALLOC_END > CONSISTENT_BASE);
|
|
||||||
|
|
||||||
BUILD_BUG_ON(TASK_SIZE > MODULES_VADDR);
|
BUILD_BUG_ON(TASK_SIZE > MODULES_VADDR);
|
||||||
BUG_ON(TASK_SIZE > MODULES_VADDR);
|
BUG_ON(TASK_SIZE > MODULES_VADDR);
|
||||||
#endif
|
#endif
|
||||||
|
@@ -40,19 +40,4 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_MX3_VIDEO)
|
|
||||||
/*
|
|
||||||
* Increase size of DMA-consistent memory region.
|
|
||||||
* This is required for mx3 camera driver to capture at least two QXGA frames.
|
|
||||||
*/
|
|
||||||
#define CONSISTENT_DMA_SIZE SZ_8M
|
|
||||||
|
|
||||||
#elif defined(CONFIG_MX1_VIDEO) || defined(CONFIG_VIDEO_MX2_HOSTSUPPORT)
|
|
||||||
/*
|
|
||||||
* Increase size of DMA-consistent memory region.
|
|
||||||
* This is required for i.MX camera driver to capture at least four VGA frames.
|
|
||||||
*/
|
|
||||||
#define CONSISTENT_DMA_SIZE SZ_4M
|
|
||||||
#endif /* CONFIG_MX1_VIDEO || CONFIG_VIDEO_MX2_HOSTSUPPORT */
|
|
||||||
|
|
||||||
#endif /* __ASM_ARCH_MXC_MEMORY_H__ */
|
#endif /* __ASM_ARCH_MXC_MEMORY_H__ */
|
||||||
|
@@ -309,6 +309,8 @@ extern void omap2_init_common_devices(struct omap_sdrc_params *sdrc_cs0,
|
|||||||
void __iomem *omap_ioremap(unsigned long phys, size_t size, unsigned int type);
|
void __iomem *omap_ioremap(unsigned long phys, size_t size, unsigned int type);
|
||||||
void omap_iounmap(volatile void __iomem *addr);
|
void omap_iounmap(volatile void __iomem *addr);
|
||||||
|
|
||||||
|
extern void __init omap_init_consistent_dma_size(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -85,18 +85,5 @@
|
|||||||
|
|
||||||
#endif /* CONFIG_ARCH_OMAP15XX */
|
#endif /* CONFIG_ARCH_OMAP15XX */
|
||||||
|
|
||||||
/* Override the ARM default */
|
|
||||||
#ifdef CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE
|
|
||||||
|
|
||||||
#if (CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE == 0)
|
|
||||||
#undef CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE
|
|
||||||
#define CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE 2
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define CONSISTENT_DMA_SIZE \
|
|
||||||
(((CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE + 1) & ~1) * 1024 * 1024)
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -12,6 +12,7 @@
|
|||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
|
#include <linux/dma-mapping.h>
|
||||||
|
|
||||||
#include <plat/omap7xx.h>
|
#include <plat/omap7xx.h>
|
||||||
#include <plat/omap1510.h>
|
#include <plat/omap1510.h>
|
||||||
@@ -139,3 +140,10 @@ void omap_iounmap(volatile void __iomem *addr)
|
|||||||
__iounmap(addr);
|
__iounmap(addr);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(omap_iounmap);
|
EXPORT_SYMBOL(omap_iounmap);
|
||||||
|
|
||||||
|
void __init omap_init_consistent_dma_size(void)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE
|
||||||
|
init_consistent_dma_size(CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE << 20);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user