diff options
author | Harald Krapfenbauer <Harald.Krapfenbauer@bluetechnix.at> | 2009-08-20 19:20:41 -0400 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2009-09-02 05:58:37 -0400 |
commit | 4640c2b8699bcdd2346a2c633486f07f061a2939 (patch) | |
tree | e735ff79394a06394c38c6be29f5949b631ea1e4 /board/cm-bf537u/gpio_cfi_flash.c | |
parent | c4db335c2e0805e1ce4c33d278b77492c0812353 (diff) | |
download | u-boot-imx-4640c2b8699bcdd2346a2c633486f07f061a2939.zip u-boot-imx-4640c2b8699bcdd2346a2c633486f07f061a2939.tar.gz u-boot-imx-4640c2b8699bcdd2346a2c633486f07f061a2939.tar.bz2 |
Blackfin: cm-bf537u: new board port
The CM-BF537U is similar to the CM-BF537E module, but enough to need its
own board port.
Signed-off-by: Harald Krapfenbauer <Harald.Krapfenbauer@bluetechnix.at>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'board/cm-bf537u/gpio_cfi_flash.c')
-rw-r--r-- | board/cm-bf537u/gpio_cfi_flash.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/board/cm-bf537u/gpio_cfi_flash.c b/board/cm-bf537u/gpio_cfi_flash.c new file mode 100644 index 0000000..68633ec --- /dev/null +++ b/board/cm-bf537u/gpio_cfi_flash.c @@ -0,0 +1,60 @@ +/* + * gpio_cfi_flash.c - GPIO-assisted Flash Chip Support + * + * Copyright (c) 2009 Analog Devices Inc. + * + * Licensed under the GPL-2 or later. + */ + +#include <common.h> +#include <asm/blackfin.h> +#include <asm/io.h> +#include "gpio_cfi_flash.h" + +#define GPIO_PIN_1 PH0 +#define GPIO_MASK_1 (1 << 21) +#define GPIO_MASK (GPIO_MASK_1) + +void *gpio_cfi_flash_swizzle(void *vaddr) +{ + unsigned long addr = (unsigned long)vaddr; + + if (addr & GPIO_MASK_1) + bfin_write_PORTHIO_SET(GPIO_PIN_1); + else + bfin_write_PORTHIO_CLEAR(GPIO_PIN_1); + +#ifdef GPIO_MASK_2 + if (addr & GPIO_MASK_2) + bfin_write_PORTGIO_SET(GPIO_PIN_2); + else + bfin_write_PORTGIO_CLEAR(GPIO_PIN_2); +#endif + + SSYNC(); + + return (void *)(addr & ~GPIO_MASK); +} + +#define __raw_writeq(value, addr) *(volatile u64 *)addr = value +#define __raw_readq(addr) *(volatile u64 *)addr + +#define MAKE_FLASH(size, sfx) \ +void flash_write##size(u##size value, void *addr) \ +{ \ + __raw_write##sfx(value, gpio_cfi_flash_swizzle(addr)); \ +} \ +u##size flash_read##size(void *addr) \ +{ \ + return __raw_read##sfx(gpio_cfi_flash_swizzle(addr)); \ +} +MAKE_FLASH(8, b) /* flash_write8() flash_read8() */ +MAKE_FLASH(16, w) /* flash_write16() flash_read16() */ +MAKE_FLASH(32, l) /* flash_write32() flash_read32() */ +MAKE_FLASH(64, q) /* flash_write64() flash_read64() */ + +void gpio_cfi_flash_init(void) +{ + bfin_write_PORTHIO_DIR(bfin_read_PORTHIO_DIR() | GPIO_PIN_1); + gpio_cfi_flash_swizzle((void *)CONFIG_SYS_FLASH_BASE); +} |