Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3a17bfa4 authored by Geert Uytterhoeven's avatar Geert Uytterhoeven
Browse files

m68k/amiga: Chip RAM - Always allocate from the start of memory



As of commit 5df1abdb ('m68k/amiga: Fix
"debug=mem"'), "debug=mem" no longer uses amiga_chip_alloc_res(), so we
can remove the hack to prefer memory at the safe end.

This allows to simplify the code and make amiga_chip_alloc() just call
amiga_chip_alloc_res() internally.

Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
parent b4f6f453
Loading
Loading
Loading
Loading
+15 −20
Original line number Diff line number Diff line
@@ -43,24 +43,20 @@ void __init amiga_chip_init(void)
void *amiga_chip_alloc(unsigned long size, const char *name)
{
	struct resource *res;
	void *p;

	/* round up */
	size = PAGE_ALIGN(size);

	pr_debug("amiga_chip_alloc: allocate %lu bytes\n", size);
	res = kzalloc(sizeof(struct resource), GFP_KERNEL);
	if (!res)
		return NULL;
	res->name = name;

	if (allocate_resource(&chipram_res, res, size, 0, UINT_MAX, PAGE_SIZE,
			      NULL, NULL) < 0) {
	res->name = name;
	p = amiga_chip_alloc_res(size, res);
	if (!p) {
		kfree(res);
		return NULL;
	}
	chipavail -= size;
	pr_debug("amiga_chip_alloc: returning %pR\n", res);
	return (void *)ZTWO_VADDR(res->start);

	return p;
}
EXPORT_SYMBOL(amiga_chip_alloc);

@@ -72,23 +68,22 @@ EXPORT_SYMBOL(amiga_chip_alloc);
	 *  those drivers must not free that Chip RAM afterwards.
	 */

void * __init amiga_chip_alloc_res(unsigned long size, struct resource *res)
void *amiga_chip_alloc_res(unsigned long size, struct resource *res)
{
	unsigned long start;
	int error;

	/* round up */
	size = PAGE_ALIGN(size);
	/* dmesg into chipmem prefers memory at the safe end */
	start = CHIP_PHYSADDR + chipavail - size;

	pr_debug("amiga_chip_alloc_res: allocate %lu bytes\n", size);
	if (allocate_resource(&chipram_res, res, size, start, UINT_MAX,
			      PAGE_SIZE, NULL, NULL) < 0) {
		pr_err("amiga_chip_alloc_res: first alloc failed!\n");
		if (allocate_resource(&chipram_res, res, size, 0, UINT_MAX,
				      PAGE_SIZE, NULL, NULL) < 0)
	error = allocate_resource(&chipram_res, res, size, 0, UINT_MAX,
				  PAGE_SIZE, NULL, NULL);
	if (error < 0) {
		pr_err("amiga_chip_alloc_res: allocate_resource() failed %d!\n",
		       error);
		return NULL;
	}

	chipavail -= size;
	pr_debug("amiga_chip_alloc_res: returning %pR\n", res);
	return (void *)ZTWO_VADDR(res->start);