~ubuntu-branches/ubuntu/maverick/uboot-imx/maverick

« back to all changes in this revision

Viewing changes to board/cm-bf527/gpio_cfi_flash.c

  • Committer: Bazaar Package Importer
  • Author(s): Oliver Grawert
  • Date: 2010-01-20 15:41:26 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20100120154126-7bha1jeyjegu7xm5
Tags: 2009.08+really2009.01-0ubuntu1
* revert to the 2009.01 upstream version, 2009.08 has still to 
  many work in progress items in the freescale patchset (MMC and NIC
  dont work at all)
* add the latest patchset from freescale for 2009.01
* add 1002_enable_hush_shell_and_ext2.patch to enable hush shell and ext2 
* add 1003_fix_board_revision_numbers to make sure babbage 2.5 boards have 
  revision 51120 and babbage 3.0 boards have revision 51130 properly set in 
  their cpuinfo

Show diffs side-by-side

added added

removed removed

Lines of Context:
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/io.h>
12
 
#include "gpio_cfi_flash.h"
13
 
 
14
 
#define GPIO_PIN_1  PH9
15
 
#define GPIO_MASK_1 (1 << 21)
16
 
#define GPIO_PIN_2  PG11
17
 
#define GPIO_MASK_2 (1 << 22)
18
 
#define GPIO_MASK   (GPIO_MASK_1 | GPIO_MASK_2)
19
 
 
20
 
void *gpio_cfi_flash_swizzle(void *vaddr)
21
 
{
22
 
        unsigned long addr = (unsigned long)vaddr;
23
 
 
24
 
        if (addr & GPIO_MASK_1)
25
 
                bfin_write_PORTHIO_SET(GPIO_PIN_1);
26
 
        else
27
 
                bfin_write_PORTHIO_CLEAR(GPIO_PIN_1);
28
 
 
29
 
#ifdef GPIO_MASK_2
30
 
        if (addr & GPIO_MASK_2)
31
 
                bfin_write_PORTGIO_SET(GPIO_PIN_2);
32
 
        else
33
 
                bfin_write_PORTGIO_CLEAR(GPIO_PIN_2);
34
 
#endif
35
 
 
36
 
        SSYNC();
37
 
 
38
 
        return (void *)(addr & ~GPIO_MASK);
39
 
}
40
 
 
41
 
#define __raw_writeq(value, addr) *(volatile u64 *)addr = value
42
 
#define __raw_readq(addr) *(volatile u64 *)addr
43
 
 
44
 
#define MAKE_FLASH(size, sfx) \
45
 
void flash_write##size(u##size value, void *addr) \
46
 
{ \
47
 
        __raw_write##sfx(value, gpio_cfi_flash_swizzle(addr)); \
48
 
} \
49
 
u##size flash_read##size(void *addr) \
50
 
{ \
51
 
        return __raw_read##sfx(gpio_cfi_flash_swizzle(addr)); \
52
 
}
53
 
MAKE_FLASH(8, b)  /* flash_write8()  flash_read8() */
54
 
MAKE_FLASH(16, w) /* flash_write16() flash_read16() */
55
 
MAKE_FLASH(32, l) /* flash_write32() flash_read32() */
56
 
MAKE_FLASH(64, q) /* flash_write64() flash_read64() */
57
 
 
58
 
void gpio_cfi_flash_init(void)
59
 
{
60
 
        bfin_write_PORTHIO_DIR(bfin_read_PORTHIO_DIR() | GPIO_PIN_1);
61
 
        bfin_write_PORTGIO_DIR(bfin_read_PORTGIO_DIR() | GPIO_PIN_2);
62
 
        gpio_cfi_flash_swizzle((void *)CONFIG_SYS_FLASH_BASE);
63
 
}