uboot/board/cm-bf537u/gpio_cfi_flash.c
<<
>>
Prefs
   1/*
   2 * gpio_cfi_flash.c - GPIO-assisted Flash Chip Support
   3 *
   4 * Copyright (c) 2009 Analog Devices Inc.
   5 *
   6 * Licensed under the GPL-2 or later.
   7 */
   8
   9#include <common.h>
  10#include <asm/blackfin.h>
  11#include <asm/gpio.h>
  12#include <asm/io.h>
  13#include "gpio_cfi_flash.h"
  14
  15#define GPIO_PIN_1  GPIO_PH0
  16#define GPIO_MASK_1 (1 << 21)
  17#define GPIO_MASK   (GPIO_MASK_1)
  18
  19void *gpio_cfi_flash_swizzle(void *vaddr)
  20{
  21        unsigned long addr = (unsigned long)vaddr;
  22
  23        gpio_set_value(GPIO_PIN_1, addr & GPIO_MASK_1);
  24
  25#ifdef GPIO_MASK_2
  26        gpio_set_value(GPIO_PIN_2, addr & GPIO_MASK_2);
  27#endif
  28
  29        SSYNC();
  30
  31        return (void *)(addr & ~GPIO_MASK);
  32}
  33
  34#define __raw_writeq(value, addr) *(volatile u64 *)addr = value
  35#define __raw_readq(addr) *(volatile u64 *)addr
  36
  37#define MAKE_FLASH(size, sfx) \
  38void flash_write##size(u##size value, void *addr) \
  39{ \
  40        __raw_write##sfx(value, gpio_cfi_flash_swizzle(addr)); \
  41} \
  42u##size flash_read##size(void *addr) \
  43{ \
  44        return __raw_read##sfx(gpio_cfi_flash_swizzle(addr)); \
  45}
  46MAKE_FLASH(8, b)  /* flash_write8()  flash_read8() */
  47MAKE_FLASH(16, w) /* flash_write16() flash_read16() */
  48MAKE_FLASH(32, l) /* flash_write32() flash_read32() */
  49MAKE_FLASH(64, q) /* flash_write64() flash_read64() */
  50
  51void gpio_cfi_flash_init(void)
  52{
  53        gpio_request(GPIO_PIN_1, "gpio_cfi_flash");
  54#ifdef GPIO_MASK_2
  55        gpio_request(GPIO_PIN_2, "gpio_cfi_flash");
  56#endif
  57        gpio_cfi_flash_swizzle((void *)CONFIG_SYS_FLASH_BASE);
  58}
  59