2 * Copyright (C) 2004 - 2007 Paul Mundt
4 * This file is subject to the terms and conditions of the GNU General Public
5 * License. See the file "COPYING" in the main directory of this archive
9 #include <linux/init.h>
10 #include <linux/platform_device.h>
11 #include <linux/dma-mapping.h>
14 static int __init
memchunk_setup(char *str
)
16 return 1; /* accept anything that begins with "memchunk." */
18 __setup("memchunk.", memchunk_setup
);
20 static void __init
memchunk_cmdline_override(char *name
, unsigned long *sizep
)
22 char *p
= boot_command_line
;
25 while ((p
= strstr(p
, "memchunk."))) {
26 p
+= 9; /* strlen("memchunk.") */
27 if (!strncmp(name
, p
, k
) && p
[k
] == '=') {
29 *sizep
= memparse(p
, NULL
);
30 pr_info("%s: forcing memory chunk size to 0x%08lx\n",
37 int __init
platform_resource_setup_memory(struct platform_device
*pdev
,
38 char *name
, unsigned long memsize
)
41 dma_addr_t dma_handle
;
44 r
= pdev
->resource
+ pdev
->num_resources
- 1;
46 pr_warn("%s: unable to find empty space for resource\n", name
);
50 memchunk_cmdline_override(name
, &memsize
);
54 buf
= dma_alloc_coherent(&pdev
->dev
, memsize
, &dma_handle
, GFP_KERNEL
);
56 pr_warn("%s: unable to allocate memory\n", name
);
60 memset(buf
, 0, memsize
);
62 r
->flags
= IORESOURCE_MEM
;
63 r
->start
= dma_handle
;
64 r
->end
= r
->start
+ memsize
- 1;