Skip to content

Commit

Permalink
avr32: Add simple SRAM allocator
Browse files Browse the repository at this point in the history
Add SRAM allocator for avr32, which is just a thin wrapper around
genalloc.

Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
  • Loading branch information
Haavard Skinnemoen authored and Haavard Skinnemoen committed Jul 2, 2008
1 parent 7951f18 commit b83d6ee
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 0 deletions.
1 change: 1 addition & 0 deletions arch/avr32/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ config PLATFORM_AT32AP
select MMU
select PERFORMANCE_COUNTERS
select HAVE_GPIO_LIB
select GENERIC_ALLOCATOR

#
# CPU types
Expand Down
26 changes: 26 additions & 0 deletions arch/avr32/mach-at32ap/at32ap700x.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include <asm/arch/at32ap700x.h>
#include <asm/arch/board.h>
#include <asm/arch/portmux.h>
#include <asm/arch/sram.h>

#include <video/atmel_lcdc.h>

Expand Down Expand Up @@ -2120,3 +2121,28 @@ void __init setup_platform(void)
at32_init_pio(&pio3_device);
at32_init_pio(&pio4_device);
}

struct gen_pool *sram_pool;

static int __init sram_init(void)
{
struct gen_pool *pool;

/* 1KiB granularity */
pool = gen_pool_create(10, -1);
if (!pool)
goto fail;

if (gen_pool_add(pool, 0x24000000, 0x8000, -1))
goto err_pool_add;

sram_pool = pool;
return 0;

err_pool_add:
gen_pool_destroy(pool);
fail:
pr_err("Failed to create SRAM pool\n");
return -ENOMEM;
}
core_initcall(sram_init);
30 changes: 30 additions & 0 deletions include/asm-avr32/arch-at32ap/sram.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* Simple SRAM allocator
*
* Copyright (C) 2008 Atmel Corporation
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#ifndef __ASM_AVR32_ARCH_SRAM_H
#define __ASM_AVR32_ARCH_SRAM_H

#include <linux/genalloc.h>

extern struct gen_pool *sram_pool;

static inline unsigned long sram_alloc(size_t len)
{
if (!sram_pool)
return 0UL;

return gen_pool_alloc(sram_pool, len);
}

static inline void sram_free(unsigned long addr, size_t len)
{
return gen_pool_free(sram_pool, addr, len);
}

#endif /* __ASM_AVR32_ARCH_SRAM_H */

0 comments on commit b83d6ee

Please sign in to comment.