]> git.sur5r.net Git - u-boot/commitdiff
Merge branch 'master' of git://git.denx.de/u-boot-mpc83xx
authorWolfgang Denk <wd@denx.de>
Wed, 14 Jul 2010 20:05:31 +0000 (22:05 +0200)
committerWolfgang Denk <wd@denx.de>
Wed, 14 Jul 2010 20:05:31 +0000 (22:05 +0200)
146 files changed:
MAINTAINERS
MAKEALL
Makefile
arch/arm/cpu/arm926ejs/kirkwood/cpu.c
arch/arm/cpu/arm926ejs/orion5x/cpu.c
arch/arm/include/asm/arch-kirkwood/kirkwood.h
arch/arm/include/asm/arch-orion5x/orion5x.h
arch/blackfin/cpu/Makefile
arch/blackfin/cpu/bootcount.c [new file with mode: 0644]
arch/blackfin/cpu/cmd_gpio.c [new file with mode: 0644]
arch/blackfin/cpu/cpu.c
arch/blackfin/cpu/cpu.h
arch/blackfin/cpu/gpio.c [new file with mode: 0644]
arch/blackfin/cpu/initcode.c
arch/blackfin/cpu/interrupt.S
arch/blackfin/cpu/serial.h
arch/blackfin/cpu/traps.c
arch/blackfin/include/asm/blackfin_local.h
arch/blackfin/include/asm/gpio.h [new file with mode: 0644]
arch/blackfin/include/asm/mach-bf527/anomaly.h
arch/blackfin/include/asm/mach-bf527/def_local.h
arch/blackfin/include/asm/mach-bf527/gpio.h [new file with mode: 0644]
arch/blackfin/include/asm/mach-bf527/portmux.h [new file with mode: 0644]
arch/blackfin/include/asm/mach-bf533/anomaly.h
arch/blackfin/include/asm/mach-bf533/def_local.h
arch/blackfin/include/asm/mach-bf533/gpio.h [new file with mode: 0644]
arch/blackfin/include/asm/mach-bf533/portmux.h [new file with mode: 0644]
arch/blackfin/include/asm/mach-bf537/anomaly.h
arch/blackfin/include/asm/mach-bf537/def_local.h
arch/blackfin/include/asm/mach-bf537/gpio.h [new file with mode: 0644]
arch/blackfin/include/asm/mach-bf537/portmux.h [new file with mode: 0644]
arch/blackfin/include/asm/mach-bf548/anomaly.h
arch/blackfin/include/asm/mach-bf548/def_local.h
arch/blackfin/include/asm/mach-bf548/gpio.h [new file with mode: 0644]
arch/blackfin/include/asm/mach-bf548/portmux.h [new file with mode: 0644]
arch/blackfin/include/asm/mach-bf561/anomaly.h
arch/blackfin/include/asm/mach-bf561/def_local.h
arch/blackfin/include/asm/mach-bf561/gpio.h [new file with mode: 0644]
arch/blackfin/include/asm/mach-bf561/portmux.h [new file with mode: 0644]
arch/blackfin/include/asm/portmux.h [new file with mode: 0644]
arch/blackfin/include/asm/system.h
board/LaCie/edminiv2/edminiv2.c
board/LaCie/edminiv2/edminiv2.h [new file with mode: 0644]
board/afeb9260/afeb9260.c
board/atmel/at91cap9adk/at91cap9adk.c
board/atmel/at91sam9260ek/at91sam9260ek.c
board/atmel/at91sam9263ek/at91sam9263ek.c
board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c
board/bf518f-ezbrd/bf518f-ezbrd.c
board/bf526-ezbrd/Makefile
board/bf526-ezbrd/status-led.c [deleted file]
board/bf527-ad7160-eval/Makefile [new file with mode: 0644]
board/bf527-ad7160-eval/bf527-ad7160-eval.c [new file with mode: 0644]
board/bf527-ad7160-eval/config.mk [new file with mode: 0644]
board/bf527-ezkit/bf527-ezkit.c
board/bf527-ezkit/video.c
board/bf533-stamp/bf533-stamp.c
board/bf533-stamp/bf533-stamp.h [deleted file]
board/bf533-stamp/ide-cf.c
board/bf537-stamp/Makefile
board/bf537-stamp/bf537-stamp.c
board/bf537-stamp/cmd_bf537led.c [deleted file]
board/bf537-stamp/spi_flash.c [deleted file]
board/bf548-ezkit/bf548-ezkit.c
board/bf548-ezkit/video.c
board/blackstamp/blackstamp.c
board/calao/sbc35_a9g20/sbc35_a9g20.c
board/cm-bf527/Makefile
board/cm-bf527/gpio.c [deleted file]
board/cm-bf527/gpio_cfi_flash.c
board/cm-bf537e/Makefile
board/cm-bf537e/flash.c [deleted file]
board/cm-bf537e/gpio_cfi_flash.c
board/cm-bf537u/Makefile
board/cm-bf537u/flash.c [deleted file]
board/cm-bf537u/gpio_cfi_flash.c
board/cm-bf548/cm-bf548.c
board/cm-bf548/video.c
board/eukrea/cpu9260/cpu9260.c
board/ibf-dsp561/ibf-dsp561.c
board/ronetix/pm9263/pm9263.c
board/tcm-bf537/Makefile
board/tcm-bf537/flash.c [deleted file]
board/tcm-bf537/gpio_cfi_flash.c
boards.cfg
common/cmd_nand.c
common/env_nand.c
doc/README.designware_eth [new file with mode: 0644]
drivers/block/pata_bfin.c
drivers/mmc/bfin_sdh.c
drivers/mtd/nand/bfin_nand.c
drivers/mtd/nand/nand_base.c
drivers/mtd/nand/nand_ids.c
drivers/mtd/nand/nand_plat.c
drivers/net/4xx_enet.c
drivers/net/Makefile
drivers/net/at91_emac.c
drivers/net/ax88180.c
drivers/net/ax88180.h
drivers/net/bfin_mac.c
drivers/net/designware.c [new file with mode: 0644]
drivers/net/designware.h [new file with mode: 0644]
drivers/net/dm9000x.c
drivers/net/kirkwood_egiga.c [deleted file]
drivers/net/kirkwood_egiga.h [deleted file]
drivers/net/macb.c
drivers/net/mvgbe.c [new file with mode: 0644]
drivers/net/mvgbe.h [new file with mode: 0644]
drivers/net/tsec.c
drivers/net/uli526x.c
drivers/spi/bfin_spi.c
examples/standalone/smc911x_eeprom.c
include/configs/bf518f-ezbrd.h
include/configs/bf526-ezbrd.h
include/configs/bf527-ad7160-eval.h [new file with mode: 0644]
include/configs/bf527-ezkit.h
include/configs/bf533-ezkit.h
include/configs/bf533-stamp.h
include/configs/bf537-pnav.h
include/configs/bf537-stamp.h
include/configs/bf538f-ezkit.h
include/configs/bf548-ezkit.h
include/configs/bf561-acvilon.h
include/configs/bf561-ezkit.h
include/configs/bfin_adi_common.h
include/configs/cm-bf527.h
include/configs/cm-bf537e.h
include/configs/cm-bf537u.h
include/configs/cm-bf548.h
include/configs/cpuat91.h
include/configs/edminiv2.h
include/configs/guruplug.h
include/configs/ibf-dsp561.h
include/configs/ip04.h
include/configs/km_arm.h
include/configs/mv88f6281gtw_ge.h
include/configs/openrd_base.h
include/configs/rd6281a.h
include/configs/sheevaplug.h
include/configs/tcm-bf518.h
include/configs/tcm-bf537.h
include/environment.h
include/nand.h
include/netdev.h
include/status_led.h
net/eth.c

index 67d1d133fa27c7ea2cef79afefb4831c48eb5f80..cee9b8d31a138d6cbd78ab5f016989a44ed16419 100644 (file)
@@ -1003,6 +1003,8 @@ Blackfin Team <u-boot-devel@blackfin.uclinux.org>
        BF548-EZKIT     BF548
        BF561-EZKIT     BF561
 
+       BF527-AD7160-EVAL       BF527
+
 Bluetechnix Tinyboards <bluetechnix@blackfin.uclinux.org>
 Blackfin Team <u-boot-devel@blackfin.uclinux.org>
 
diff --git a/MAKEALL b/MAKEALL
index ac41a517c0b26f6fdad3e18835eaabf64211af17..238146b165b1e835226a67ab74c8945b6783b8b6 100755 (executable)
--- a/MAKEALL
+++ b/MAKEALL
@@ -894,6 +894,7 @@ LIST_avr32="                \
 LIST_blackfin="                \
        bf518f-ezbrd    \
        bf526-ezbrd     \
+       bf527-ad7160-eval       \
        bf527-ezkit     \
        bf527-ezkit-v2  \
        bf533-ezkit     \
index 1d87f37074fbf18b0106aea401663d8745c670d7..9c4e3a44806337ebe9d24e4f4e06c6ad87458083 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2436,7 +2436,6 @@ clean:
               $(obj)board/netstar/{eeprom,crcek,crcit,*.srec,*.bin}      \
               $(obj)board/trab/trab_fkt   $(obj)board/voiceblue/eeprom   \
               $(obj)board/armltd/{integratorap,integratorcp}/u-boot.lds  \
-              $(obj)arch/blackfin/lib/u-boot.lds                                 \
               $(obj)u-boot.lds                                           \
               $(obj)arch/blackfin/cpu/bootrom-asm-offsets.[chs]
        @rm -f $(obj)include/bmp_logo.h
index 6fc3902580918d8448b563febe34cf7fd7629e3c..c63e8641f2146e0606c14a2499d1a8a4f2391570 100644 (file)
@@ -378,10 +378,10 @@ int arch_misc_init(void)
 }
 #endif /* CONFIG_ARCH_MISC_INIT */
 
-#ifdef CONFIG_KIRKWOOD_EGIGA
+#ifdef CONFIG_MVGBE
 int cpu_eth_init(bd_t *bis)
 {
-       kirkwood_egiga_initialize(bis);
+       mvgbe_initialize(bis);
        return 0;
 }
 #endif
index 03c6d0677c77de0b7157baf0e9153fa50b1fb3da..f3c1e2192e765c766cc9a66a343156c01bc05660 100644 (file)
@@ -268,3 +268,11 @@ int arch_misc_init(void)
        return 0;
 }
 #endif /* CONFIG_ARCH_MISC_INIT */
+
+#ifdef CONFIG_MVGBE
+int cpu_eth_init(bd_t *bis)
+{
+       mvgbe_initialize(bis);
+       return 0;
+}
+#endif
index 2470efbd8c98ec6f9a256d3f1dfd6f04a93ea76d..9edb0be5f5294b6e1b1225d2b6a4b4a118703e78 100644 (file)
 #define KW_EGIGA0_BASE                 (KW_REGISTER(0x72000))
 #define KW_EGIGA1_BASE                 (KW_REGISTER(0x76000))
 
+/* Kirkwood GbE controller has two ports */
+#define MAX_MVGBE_DEVS 2
+#define MVGBE0_BASE    KW_EGIGA0_BASE
+#define MVGBE1_BASE    KW_EGIGA1_BASE
+
 #if defined (CONFIG_KW88F6281)
 #include <asm/arch/kw88f6281.h>
 #elif defined (CONFIG_KW88F6192)
index 4008c842dffc659f8ad243d07b6f8edda3515f72..d257b66581d948a9e042c4e45960c40fadfe88b1 100644 (file)
 #define ORION5X_USB20_PORT1_BASE               (ORION5X_REGISTER(0xA0000))
 #define ORION5X_EGIGA_BASE                     (ORION5X_REGISTER(0x72000))
 
+/* Orion5x GbE controller has a single port */
+#define MAX_MVGBE_DEVS 1
+#define MVGBE0_BASE    ORION5X_EGIGA_BASE
+
 #define CONFIG_MAX_RAM_BANK_SIZE               (64*1024*1024)
 
 /* include here SoC variants. 5181, 5281, 6183 should go here when
index 211b8d5450b9b7088ab3dea337cf4705bf2b0e88..b7f991dea04959c5959b7b43a9c66fd871a2217d 100644 (file)
@@ -17,7 +17,10 @@ EXTRA    :=
 CEXTRA   := initcode.o
 SEXTRA   := start.o
 SOBJS    := interrupt.o cache.o
+COBJS-$(CONFIG_BOOTCOUNT_LIMIT) += bootcount.o
+COBJS-$(CONFIG_CMD_GPIO) += cmd_gpio.o
 COBJS-y  += cpu.o
+COBJS-y  += gpio.o
 COBJS-y  += interrupts.o
 COBJS-$(CONFIG_JTAG_CONSOLE) += jtag-console.o
 COBJS-y  += os_log.o
diff --git a/arch/blackfin/cpu/bootcount.c b/arch/blackfin/cpu/bootcount.c
new file mode 100644 (file)
index 0000000..6cf6dd5
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * functions for handling bootcount support
+ *
+ * Copyright (c) 2010 Analog Devices Inc.
+ *
+ * Licensed under the 2-clause BSD.
+ */
+
+/* This version uses one 32bit storage and combines the magic/count */
+
+#include <common.h>
+
+/* We abuse the EVT0 MMR for bootcount storage by default */
+#ifndef CONFIG_SYS_BOOTCOUNT_ADDR
+# define CONFIG_SYS_BOOTCOUNT_ADDR EVT0
+#endif
+
+#define MAGIC_MASK 0xffff0000
+#define COUNT_MASK 0x0000ffff
+
+void bootcount_store(ulong cnt)
+{
+       ulong magic = (BOOTCOUNT_MAGIC & MAGIC_MASK) | (cnt & COUNT_MASK);
+       bfin_write32(CONFIG_SYS_BOOTCOUNT_ADDR, magic);
+}
+
+ulong bootcount_load(void)
+{
+       ulong magic = bfin_read32(CONFIG_SYS_BOOTCOUNT_ADDR);
+       if ((magic & MAGIC_MASK) == (BOOTCOUNT_MAGIC & MAGIC_MASK))
+               return magic & COUNT_MASK;
+       else
+               return 0;
+}
diff --git a/arch/blackfin/cpu/cmd_gpio.c b/arch/blackfin/cpu/cmd_gpio.c
new file mode 100644 (file)
index 0000000..9e505b6
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ * Control GPIO pins on the fly
+ *
+ * Copyright (c) 2008-2010 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#include <common.h>
+#include <command.h>
+
+#include <asm/blackfin.h>
+#include <asm/gpio.h>
+
+enum {
+       GPIO_INPUT,
+       GPIO_SET,
+       GPIO_CLEAR,
+       GPIO_TOGGLE,
+};
+
+int do_gpio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+       if (argc == 2 && !strcmp(argv[1], "status")) {
+               bfin_gpio_labels();
+               return 0;
+       }
+
+       if (argc != 3) {
+ show_usage:
+               printf("Usage:\n%s\n", cmdtp->usage);
+               return 1;
+       }
+
+       /* parse the behavior */
+       ulong sub_cmd;
+       switch (argv[1][0]) {
+               case 'i': sub_cmd = GPIO_INPUT;  break;
+               case 's': sub_cmd = GPIO_SET;    break;
+               case 'c': sub_cmd = GPIO_CLEAR;  break;
+               case 't': sub_cmd = GPIO_TOGGLE; break;
+               default:  goto show_usage;
+       }
+
+       /* parse the pin with format: [p][port]<#> */
+       const char *str_pin = argv[2];
+
+       /* grab the [p]<port> portion */
+       ulong port_base;
+       if (*str_pin == 'p') ++str_pin;
+       switch (*str_pin) {
+#ifdef GPIO_PA0
+               case 'a': port_base = GPIO_PA0; break;
+#endif
+#ifdef GPIO_PB0
+               case 'b': port_base = GPIO_PB0; break;
+#endif
+#ifdef GPIO_PC0
+               case 'c': port_base = GPIO_PC0; break;
+#endif
+#ifdef GPIO_PD0
+               case 'd': port_base = GPIO_PD0; break;
+#endif
+#ifdef GPIO_PE0
+               case 'e': port_base = GPIO_PE0; break;
+#endif
+#ifdef GPIO_PF0
+               case 'f': port_base = GPIO_PF0; break;
+#endif
+#ifdef GPIO_PG0
+               case 'g': port_base = GPIO_PG0; break;
+#endif
+#ifdef GPIO_PH0
+               case 'h': port_base = GPIO_PH0; break;
+#endif
+#ifdef GPIO_PI0
+               case 'i': port_base = GPIO_PI0; break;
+#endif
+#ifdef GPIO_PJ
+               case 'j': port_base = GPIO_PJ0; break;
+#endif
+               default:  goto show_usage;
+       }
+
+       /* grab the <#> portion */
+       ulong pin = simple_strtoul(str_pin + 1, NULL, 10);
+       if (pin > 15)
+               goto show_usage;
+
+       /* grab the pin before we tweak it */
+       ulong gpio = port_base + pin;
+       gpio_request(gpio, "cmd_gpio");
+
+       /* finally, let's do it: set direction and exec command */
+       if (sub_cmd == GPIO_INPUT) {
+               gpio_direction_input(gpio);
+               printf("gpio: pin %lu on port %c set to input\n", pin, *str_pin);
+               return 0;
+       }
+
+       ulong value;
+       switch (sub_cmd) {
+               case GPIO_SET:    value = 1; break;
+               case GPIO_CLEAR:  value = 0; break;
+               case GPIO_TOGGLE: value = !gpio_get_value(gpio); break;
+               default:          goto show_usage;
+       }
+       gpio_direction_output(gpio, value);
+       printf("gpio: pin %lu on port %c (gpio %lu) value is %lu\n",
+               pin, *str_pin, gpio, value);
+
+       gpio_free(gpio);
+
+       return 0;
+}
+
+U_BOOT_CMD(gpio, 3, 0, do_gpio,
+       "set/clear/toggle gpio output pins",
+       "<set|clear|toggle> <port><pin>\n"
+       "    - set/clear/toggle the specified pin (e.g. PF10)");
index 2c8fd86b86f939e19cf897d1f43237a3ab57b4ad..18dbdf7abe9686b6e5220b534b5c3aa13bdbf2bb 100644 (file)
@@ -91,7 +91,9 @@ int irq_init(void)
 #else
        bfin_write_SIC_IMASK(0);
 #endif
-       bfin_write_EVT2(evt_default);   /* NMI */
+       /* Set up a dummy NMI handler if needed.  */
+       if (CONFIG_BFIN_BOOT_MODE == BFIN_BOOT_BYPASS || ANOMALY_05000219)
+               bfin_write_EVT2(evt_nmi);       /* NMI */
        bfin_write_EVT5(evt_default);   /* hardware error */
        bfin_write_EVT6(evt_default);   /* core timer */
        bfin_write_EVT7(evt_default);
index 0a13c285e0e468601be51a6206e5b830f1fa0f86..ba85e0b9a5cf07808a62048e456b65ca938493b6 100644 (file)
 
 void board_reset(void) __attribute__((__weak__));
 void bfin_reset_or_hang(void) __attribute__((__noreturn__));
+void bfin_dump(struct pt_regs *reg);
 void bfin_panic(struct pt_regs *reg);
 void dump(struct pt_regs *regs);
 
 asmlinkage void trap(void);
+asmlinkage void evt_nmi(void);
 asmlinkage void evt_default(void);
 
 #endif
diff --git a/arch/blackfin/cpu/gpio.c b/arch/blackfin/cpu/gpio.c
new file mode 100644 (file)
index 0000000..488ca11
--- /dev/null
@@ -0,0 +1,854 @@
+/*
+ * GPIO Abstraction Layer
+ *
+ * Copyright 2006-2010 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later
+ */
+
+#include <common.h>
+#include <asm/errno.h>
+#include <asm/gpio.h>
+#include <asm/portmux.h>
+
+#if ANOMALY_05000311 || ANOMALY_05000323
+enum {
+       AWA_data = SYSCR,
+       AWA_data_clear = SYSCR,
+       AWA_data_set = SYSCR,
+       AWA_toggle = SYSCR,
+       AWA_maska = UART_SCR,
+       AWA_maska_clear = UART_SCR,
+       AWA_maska_set = UART_SCR,
+       AWA_maska_toggle = UART_SCR,
+       AWA_maskb = UART_GCTL,
+       AWA_maskb_clear = UART_GCTL,
+       AWA_maskb_set = UART_GCTL,
+       AWA_maskb_toggle = UART_GCTL,
+       AWA_dir = SPORT1_STAT,
+       AWA_polar = SPORT1_STAT,
+       AWA_edge = SPORT1_STAT,
+       AWA_both = SPORT1_STAT,
+#if ANOMALY_05000311
+       AWA_inen = TIMER_ENABLE,
+#elif ANOMALY_05000323
+       AWA_inen = DMA1_1_CONFIG,
+#endif
+};
+       /* Anomaly Workaround */
+#define AWA_DUMMY_READ(name) bfin_read16(AWA_ ## name)
+#else
+#define AWA_DUMMY_READ(...)  do { } while (0)
+#endif
+
+static struct gpio_port_t * const gpio_array[] = {
+#if defined(BF533_FAMILY)
+       (struct gpio_port_t *) FIO_FLAG_D,
+#elif defined(CONFIG_BF52x) || defined(BF537_FAMILY) || defined(CONFIG_BF51x) \
+       || defined(BF538_FAMILY)
+       (struct gpio_port_t *) PORTFIO,
+# if !defined(BF538_FAMILY)
+       (struct gpio_port_t *) PORTGIO,
+       (struct gpio_port_t *) PORTHIO,
+# endif
+#elif defined(BF561_FAMILY)
+       (struct gpio_port_t *) FIO0_FLAG_D,
+       (struct gpio_port_t *) FIO1_FLAG_D,
+       (struct gpio_port_t *) FIO2_FLAG_D,
+#elif defined(CONFIG_BF54x)
+       (struct gpio_port_t *)PORTA_FER,
+       (struct gpio_port_t *)PORTB_FER,
+       (struct gpio_port_t *)PORTC_FER,
+       (struct gpio_port_t *)PORTD_FER,
+       (struct gpio_port_t *)PORTE_FER,
+       (struct gpio_port_t *)PORTF_FER,
+       (struct gpio_port_t *)PORTG_FER,
+       (struct gpio_port_t *)PORTH_FER,
+       (struct gpio_port_t *)PORTI_FER,
+       (struct gpio_port_t *)PORTJ_FER,
+#else
+# error no gpio arrays defined
+#endif
+};
+
+#if defined(CONFIG_BF52x) || defined(BF537_FAMILY) || defined(CONFIG_BF51x)
+static unsigned short * const port_fer[] = {
+       (unsigned short *) PORTF_FER,
+       (unsigned short *) PORTG_FER,
+       (unsigned short *) PORTH_FER,
+};
+
+# if !defined(BF537_FAMILY)
+static unsigned short * const port_mux[] = {
+       (unsigned short *) PORTF_MUX,
+       (unsigned short *) PORTG_MUX,
+       (unsigned short *) PORTH_MUX,
+};
+
+static const
+u8 pmux_offset[][16] = {
+#  if defined(CONFIG_BF52x)
+       { 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 4, 6, 8, 8, 10, 10 }, /* PORTF */
+       { 0, 0, 0, 0, 0, 2, 2, 4, 4, 6, 8, 10, 10, 10, 12, 12 }, /* PORTG */
+       { 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 4, 4, 4, 4, 4, 4 }, /* PORTH */
+#  elif defined(CONFIG_BF51x)
+       { 0, 2, 2, 2, 2, 2, 2, 4, 6, 6, 6, 8, 8, 8, 8, 10 }, /* PORTF */
+       { 0, 0, 0, 2, 4, 6, 6, 6, 8, 10, 10, 12, 14, 14, 14, 14 }, /* PORTG */
+       { 0, 0, 0, 0, 2, 2, 4, 6, 10, 10, 10, 10, 10, 10, 10, 10 }, /* PORTH */
+#  endif
+};
+# endif
+
+#elif defined(BF538_FAMILY)
+static unsigned short * const port_fer[] = {
+       (unsigned short *) PORTCIO_FER,
+       (unsigned short *) PORTDIO_FER,
+       (unsigned short *) PORTEIO_FER,
+};
+#endif
+
+#ifdef CONFIG_BFIN_GPIO_TRACK
+#define RESOURCE_LABEL_SIZE    16
+
+static struct str_ident {
+       char name[RESOURCE_LABEL_SIZE];
+} str_ident[MAX_RESOURCES];
+
+static void gpio_error(unsigned gpio)
+{
+       printf("bfin-gpio: GPIO %d wasn't requested!\n", gpio);
+}
+
+static void set_label(unsigned short ident, const char *label)
+{
+       if (label) {
+               strncpy(str_ident[ident].name, label,
+                        RESOURCE_LABEL_SIZE);
+               str_ident[ident].name[RESOURCE_LABEL_SIZE - 1] = 0;
+       }
+}
+
+static char *get_label(unsigned short ident)
+{
+       return (*str_ident[ident].name ? str_ident[ident].name : "UNKNOWN");
+}
+
+static int cmp_label(unsigned short ident, const char *label)
+{
+       if (label == NULL)
+               printf("bfin-gpio: please provide none-null label\n");
+
+       if (label)
+               return strcmp(str_ident[ident].name, label);
+       else
+               return -EINVAL;
+}
+
+#define map_entry(m, i)      reserved_##m##_map[gpio_bank(i)]
+#define is_reserved(m, i, e) (map_entry(m, i) & gpio_bit(i))
+#define reserve(m, i)        (map_entry(m, i) |= gpio_bit(i))
+#define unreserve(m, i)      (map_entry(m, i) &= ~gpio_bit(i))
+#define DECLARE_RESERVED_MAP(m, c) static unsigned short reserved_##m##_map[c]
+#else
+#define is_reserved(m, i, e) (!(e))
+#define reserve(m, i)
+#define unreserve(m, i)
+#define DECLARE_RESERVED_MAP(m, c)
+#define gpio_error(gpio)
+#define set_label(...)
+#define get_label(...) ""
+#define cmp_label(...) 1
+#endif
+
+DECLARE_RESERVED_MAP(gpio, GPIO_BANK_NUM);
+DECLARE_RESERVED_MAP(peri, gpio_bank(MAX_RESOURCES));
+
+inline int check_gpio(unsigned gpio)
+{
+#if defined(CONFIG_BF54x)
+       if (gpio == GPIO_PB15 || gpio == GPIO_PC14 || gpio == GPIO_PC15
+           || gpio == GPIO_PH14 || gpio == GPIO_PH15
+           || gpio == GPIO_PJ14 || gpio == GPIO_PJ15)
+               return -EINVAL;
+#endif
+       if (gpio >= MAX_BLACKFIN_GPIOS)
+               return -EINVAL;
+       return 0;
+}
+
+static void port_setup(unsigned gpio, unsigned short usage)
+{
+#if defined(BF538_FAMILY)
+       /*
+        * BF538/9 Port C,D and E are special.
+        * Inverted PORT_FER polarity on CDE and no PORF_FER on F
+        * Regular PORT F GPIOs are handled here, CDE are exclusively
+        * managed by GPIOLIB
+        */
+
+       if (gpio < MAX_BLACKFIN_GPIOS || gpio >= MAX_RESOURCES)
+               return;
+
+       gpio -= MAX_BLACKFIN_GPIOS;
+
+       if (usage == GPIO_USAGE)
+               *port_fer[gpio_bank(gpio)] |= gpio_bit(gpio);
+       else
+               *port_fer[gpio_bank(gpio)] &= ~gpio_bit(gpio);
+       SSYNC();
+       return;
+#endif
+
+       if (check_gpio(gpio))
+               return;
+
+#if defined(CONFIG_BF52x) || defined(BF537_FAMILY) || defined(CONFIG_BF51x)
+       if (usage == GPIO_USAGE)
+               *port_fer[gpio_bank(gpio)] &= ~gpio_bit(gpio);
+       else
+               *port_fer[gpio_bank(gpio)] |= gpio_bit(gpio);
+       SSYNC();
+#elif defined(CONFIG_BF54x)
+       if (usage == GPIO_USAGE)
+               gpio_array[gpio_bank(gpio)]->port_fer &= ~gpio_bit(gpio);
+       else
+               gpio_array[gpio_bank(gpio)]->port_fer |= gpio_bit(gpio);
+       SSYNC();
+#endif
+}
+
+#ifdef BF537_FAMILY
+static struct {
+       unsigned short res;
+       unsigned short offset;
+} port_mux_lut[] = {
+       {.res = P_PPI0_D13, .offset = 11},
+       {.res = P_PPI0_D14, .offset = 11},
+       {.res = P_PPI0_D15, .offset = 11},
+       {.res = P_SPORT1_TFS, .offset = 11},
+       {.res = P_SPORT1_TSCLK, .offset = 11},
+       {.res = P_SPORT1_DTPRI, .offset = 11},
+       {.res = P_PPI0_D10, .offset = 10},
+       {.res = P_PPI0_D11, .offset = 10},
+       {.res = P_PPI0_D12, .offset = 10},
+       {.res = P_SPORT1_RSCLK, .offset = 10},
+       {.res = P_SPORT1_RFS, .offset = 10},
+       {.res = P_SPORT1_DRPRI, .offset = 10},
+       {.res = P_PPI0_D8, .offset = 9},
+       {.res = P_PPI0_D9, .offset = 9},
+       {.res = P_SPORT1_DRSEC, .offset = 9},
+       {.res = P_SPORT1_DTSEC, .offset = 9},
+       {.res = P_TMR2, .offset = 8},
+       {.res = P_PPI0_FS3, .offset = 8},
+       {.res = P_TMR3, .offset = 7},
+       {.res = P_SPI0_SSEL4, .offset = 7},
+       {.res = P_TMR4, .offset = 6},
+       {.res = P_SPI0_SSEL5, .offset = 6},
+       {.res = P_TMR5, .offset = 5},
+       {.res = P_SPI0_SSEL6, .offset = 5},
+       {.res = P_UART1_RX, .offset = 4},
+       {.res = P_UART1_TX, .offset = 4},
+       {.res = P_TMR6, .offset = 4},
+       {.res = P_TMR7, .offset = 4},
+       {.res = P_UART0_RX, .offset = 3},
+       {.res = P_UART0_TX, .offset = 3},
+       {.res = P_DMAR0, .offset = 3},
+       {.res = P_DMAR1, .offset = 3},
+       {.res = P_SPORT0_DTSEC, .offset = 1},
+       {.res = P_SPORT0_DRSEC, .offset = 1},
+       {.res = P_CAN0_RX, .offset = 1},
+       {.res = P_CAN0_TX, .offset = 1},
+       {.res = P_SPI0_SSEL7, .offset = 1},
+       {.res = P_SPORT0_TFS, .offset = 0},
+       {.res = P_SPORT0_DTPRI, .offset = 0},
+       {.res = P_SPI0_SSEL2, .offset = 0},
+       {.res = P_SPI0_SSEL3, .offset = 0},
+};
+
+static void portmux_setup(unsigned short per)
+{
+       u16 y, offset, muxreg;
+       u16 function = P_FUNCT2MUX(per);
+
+       for (y = 0; y < ARRAY_SIZE(port_mux_lut); y++) {
+               if (port_mux_lut[y].res == per) {
+
+                       /* SET PORTMUX REG */
+
+                       offset = port_mux_lut[y].offset;
+                       muxreg = bfin_read_PORT_MUX();
+
+                       if (offset != 1)
+                               muxreg &= ~(1 << offset);
+                       else
+                               muxreg &= ~(3 << 1);
+
+                       muxreg |= (function << offset);
+                       bfin_write_PORT_MUX(muxreg);
+               }
+       }
+}
+#elif defined(CONFIG_BF54x)
+inline void portmux_setup(unsigned short per)
+{
+       u32 pmux;
+       u16 ident = P_IDENT(per);
+       u16 function = P_FUNCT2MUX(per);
+
+       pmux = gpio_array[gpio_bank(ident)]->port_mux;
+
+       pmux &= ~(0x3 << (2 * gpio_sub_n(ident)));
+       pmux |= (function & 0x3) << (2 * gpio_sub_n(ident));
+
+       gpio_array[gpio_bank(ident)]->port_mux = pmux;
+}
+
+inline u16 get_portmux(unsigned short per)
+{
+       u32 pmux;
+       u16 ident = P_IDENT(per);
+
+       pmux = gpio_array[gpio_bank(ident)]->port_mux;
+
+       return (pmux >> (2 * gpio_sub_n(ident)) & 0x3);
+}
+#elif defined(CONFIG_BF52x) || defined(CONFIG_BF51x)
+inline void portmux_setup(unsigned short per)
+{
+       u16 pmux, ident = P_IDENT(per), function = P_FUNCT2MUX(per);
+       u8 offset = pmux_offset[gpio_bank(ident)][gpio_sub_n(ident)];
+
+       pmux = *port_mux[gpio_bank(ident)];
+       pmux &= ~(3 << offset);
+       pmux |= (function & 3) << offset;
+       *port_mux[gpio_bank(ident)] = pmux;
+       SSYNC();
+}
+#else
+# define portmux_setup(...)  do { } while (0)
+#endif
+
+#ifndef CONFIG_BF54x
+/***********************************************************
+*
+* FUNCTIONS: Blackfin General Purpose Ports Access Functions
+*
+* INPUTS/OUTPUTS:
+* gpio - GPIO Number between 0 and MAX_BLACKFIN_GPIOS
+*
+*
+* DESCRIPTION: These functions abstract direct register access
+*              to Blackfin processor General Purpose
+*              Ports Regsiters
+*
+* CAUTION: These functions do not belong to the GPIO Driver API
+*************************************************************
+* MODIFICATION HISTORY :
+**************************************************************/
+
+/* Set a specific bit */
+
+#define SET_GPIO(name) \
+void set_gpio_ ## name(unsigned gpio, unsigned short arg) \
+{ \
+       unsigned long flags; \
+       local_irq_save(flags); \
+       if (arg) \
+               gpio_array[gpio_bank(gpio)]->name |= gpio_bit(gpio); \
+       else \
+               gpio_array[gpio_bank(gpio)]->name &= ~gpio_bit(gpio); \
+       AWA_DUMMY_READ(name); \
+       local_irq_restore(flags); \
+}
+
+SET_GPIO(dir)   /* set_gpio_dir() */
+SET_GPIO(inen)  /* set_gpio_inen() */
+SET_GPIO(polar) /* set_gpio_polar() */
+SET_GPIO(edge)  /* set_gpio_edge() */
+SET_GPIO(both)  /* set_gpio_both() */
+
+
+#define SET_GPIO_SC(name) \
+void set_gpio_ ## name(unsigned gpio, unsigned short arg) \
+{ \
+       unsigned long flags; \
+       if (ANOMALY_05000311 || ANOMALY_05000323) \
+               local_irq_save(flags); \
+       if (arg) \
+               gpio_array[gpio_bank(gpio)]->name ## _set = gpio_bit(gpio); \
+       else \
+               gpio_array[gpio_bank(gpio)]->name ## _clear = gpio_bit(gpio); \
+       if (ANOMALY_05000311 || ANOMALY_05000323) { \
+               AWA_DUMMY_READ(name); \
+               local_irq_restore(flags); \
+       } \
+}
+
+SET_GPIO_SC(maska)
+SET_GPIO_SC(maskb)
+SET_GPIO_SC(data)
+
+void set_gpio_toggle(unsigned gpio)
+{
+       unsigned long flags;
+       if (ANOMALY_05000311 || ANOMALY_05000323)
+               local_irq_save(flags);
+       gpio_array[gpio_bank(gpio)]->toggle = gpio_bit(gpio);
+       if (ANOMALY_05000311 || ANOMALY_05000323) {
+               AWA_DUMMY_READ(toggle);
+               local_irq_restore(flags);
+       }
+}
+
+/* Set current PORT date (16-bit word) */
+
+#define SET_GPIO_P(name) \
+void set_gpiop_ ## name(unsigned gpio, unsigned short arg) \
+{ \
+       unsigned long flags; \
+       if (ANOMALY_05000311 || ANOMALY_05000323) \
+               local_irq_save(flags); \
+       gpio_array[gpio_bank(gpio)]->name = arg; \
+       if (ANOMALY_05000311 || ANOMALY_05000323) { \
+               AWA_DUMMY_READ(name); \
+               local_irq_restore(flags); \
+       } \
+}
+
+SET_GPIO_P(data)
+SET_GPIO_P(dir)
+SET_GPIO_P(inen)
+SET_GPIO_P(polar)
+SET_GPIO_P(edge)
+SET_GPIO_P(both)
+SET_GPIO_P(maska)
+SET_GPIO_P(maskb)
+
+/* Get a specific bit */
+#define GET_GPIO(name) \
+unsigned short get_gpio_ ## name(unsigned gpio) \
+{ \
+       unsigned long flags; \
+       unsigned short ret; \
+       if (ANOMALY_05000311 || ANOMALY_05000323) \
+               local_irq_save(flags); \
+       ret = 0x01 & (gpio_array[gpio_bank(gpio)]->name >> gpio_sub_n(gpio)); \
+       if (ANOMALY_05000311 || ANOMALY_05000323) { \
+               AWA_DUMMY_READ(name); \
+               local_irq_restore(flags); \
+       } \
+       return ret; \
+}
+
+GET_GPIO(data)
+GET_GPIO(dir)
+GET_GPIO(inen)
+GET_GPIO(polar)
+GET_GPIO(edge)
+GET_GPIO(both)
+GET_GPIO(maska)
+GET_GPIO(maskb)
+
+/* Get current PORT date (16-bit word) */
+
+#define GET_GPIO_P(name) \
+unsigned short get_gpiop_ ## name(unsigned gpio) \
+{ \
+       unsigned long flags; \
+       unsigned short ret; \
+       if (ANOMALY_05000311 || ANOMALY_05000323) \
+               local_irq_save(flags); \
+       ret = (gpio_array[gpio_bank(gpio)]->name); \
+       if (ANOMALY_05000311 || ANOMALY_05000323) { \
+               AWA_DUMMY_READ(name); \
+               local_irq_restore(flags); \
+       } \
+       return ret; \
+}
+
+GET_GPIO_P(data)
+GET_GPIO_P(dir)
+GET_GPIO_P(inen)
+GET_GPIO_P(polar)
+GET_GPIO_P(edge)
+GET_GPIO_P(both)
+GET_GPIO_P(maska)
+GET_GPIO_P(maskb)
+
+#else /* CONFIG_BF54x */
+
+unsigned short get_gpio_dir(unsigned gpio)
+{
+       return (0x01 & (gpio_array[gpio_bank(gpio)]->dir_clear >> gpio_sub_n(gpio)));
+}
+
+#endif /* CONFIG_BF54x */
+
+/***********************************************************
+*
+* FUNCTIONS:   Blackfin Peripheral Resource Allocation
+*              and PortMux Setup
+*
+* INPUTS/OUTPUTS:
+* per  Peripheral Identifier
+* label        String
+*
+* DESCRIPTION: Blackfin Peripheral Resource Allocation and Setup API
+*
+* CAUTION:
+*************************************************************
+* MODIFICATION HISTORY :
+**************************************************************/
+
+int peripheral_request(unsigned short per, const char *label)
+{
+       unsigned short ident = P_IDENT(per);
+
+       /*
+        * Don't cares are pins with only one dedicated function
+        */
+
+       if (per & P_DONTCARE)
+               return 0;
+
+       if (!(per & P_DEFINED))
+               return -ENODEV;
+
+       BUG_ON(ident >= MAX_RESOURCES);
+
+       /* If a pin can be muxed as either GPIO or peripheral, make
+        * sure it is not already a GPIO pin when we request it.
+        */
+       if (unlikely(!check_gpio(ident) && is_reserved(gpio, ident, 1))) {
+               printf("%s: Peripheral %d is already reserved as GPIO by %s !\n",
+                      __func__, ident, get_label(ident));
+               return -EBUSY;
+       }
+
+       if (unlikely(is_reserved(peri, ident, 1))) {
+
+               /*
+                * Pin functions like AMC address strobes my
+                * be requested and used by several drivers
+                */
+
+#ifdef CONFIG_BF54x
+               if (!((per & P_MAYSHARE) && get_portmux(per) == P_FUNCT2MUX(per))) {
+#else
+               if (!(per & P_MAYSHARE)) {
+#endif
+                       /*
+                        * Allow that the identical pin function can
+                        * be requested from the same driver twice
+                        */
+
+                       if (cmp_label(ident, label) == 0)
+                               goto anyway;
+
+                       printf("%s: Peripheral %d function %d is already reserved by %s !\n",
+                              __func__, ident, P_FUNCT2MUX(per), get_label(ident));
+                       return -EBUSY;
+               }
+       }
+
+ anyway:
+       reserve(peri, ident);
+
+       portmux_setup(per);
+       port_setup(ident, PERIPHERAL_USAGE);
+
+       set_label(ident, label);
+
+       return 0;
+}
+
+int peripheral_request_list(const unsigned short per[], const char *label)
+{
+       u16 cnt;
+       int ret;
+
+       for (cnt = 0; per[cnt] != 0; cnt++) {
+
+               ret = peripheral_request(per[cnt], label);
+
+               if (ret < 0) {
+                       for ( ; cnt > 0; cnt--)
+                               peripheral_free(per[cnt - 1]);
+
+                       return ret;
+               }
+       }
+
+       return 0;
+}
+
+void peripheral_free(unsigned short per)
+{
+       unsigned short ident = P_IDENT(per);
+
+       if (per & P_DONTCARE)
+               return;
+
+       if (!(per & P_DEFINED))
+               return;
+
+       if (unlikely(!is_reserved(peri, ident, 0)))
+               return;
+
+       if (!(per & P_MAYSHARE))
+               port_setup(ident, GPIO_USAGE);
+
+       unreserve(peri, ident);
+
+       set_label(ident, "free");
+}
+
+void peripheral_free_list(const unsigned short per[])
+{
+       u16 cnt;
+       for (cnt = 0; per[cnt] != 0; cnt++)
+               peripheral_free(per[cnt]);
+}
+
+/***********************************************************
+*
+* FUNCTIONS: Blackfin GPIO Driver
+*
+* INPUTS/OUTPUTS:
+* gpio PIO Number between 0 and MAX_BLACKFIN_GPIOS
+* label        String
+*
+* DESCRIPTION: Blackfin GPIO Driver API
+*
+* CAUTION:
+*************************************************************
+* MODIFICATION HISTORY :
+**************************************************************/
+
+int bfin_gpio_request(unsigned gpio, const char *label)
+{
+       if (check_gpio(gpio) < 0)
+               return -EINVAL;
+
+       /*
+        * Allow that the identical GPIO can
+        * be requested from the same driver twice
+        * Do nothing and return -
+        */
+
+       if (cmp_label(gpio, label) == 0)
+               return 0;
+
+       if (unlikely(is_reserved(gpio, gpio, 1))) {
+               printf("bfin-gpio: GPIO %d is already reserved by %s !\n",
+                      gpio, get_label(gpio));
+               return -EBUSY;
+       }
+       if (unlikely(is_reserved(peri, gpio, 1))) {
+               printf("bfin-gpio: GPIO %d is already reserved as Peripheral by %s !\n",
+                      gpio, get_label(gpio));
+               return -EBUSY;
+       }
+#ifndef CONFIG_BF54x
+       else {  /* Reset POLAR setting when acquiring a gpio for the first time */
+               set_gpio_polar(gpio, 0);
+       }
+#endif
+
+       reserve(gpio, gpio);
+       set_label(gpio, label);
+
+       port_setup(gpio, GPIO_USAGE);
+
+       return 0;
+}
+
+void bfin_gpio_free(unsigned gpio)
+{
+       if (check_gpio(gpio) < 0)
+               return;
+
+       if (unlikely(!is_reserved(gpio, gpio, 0))) {
+               gpio_error(gpio);
+               return;
+       }
+
+       unreserve(gpio, gpio);
+
+       set_label(gpio, "free");
+}
+
+#ifdef BFIN_SPECIAL_GPIO_BANKS
+DECLARE_RESERVED_MAP(special_gpio, gpio_bank(MAX_RESOURCES));
+
+int bfin_special_gpio_request(unsigned gpio, const char *label)
+{
+       /*
+        * Allow that the identical GPIO can
+        * be requested from the same driver twice
+        * Do nothing and return -
+        */
+
+       if (cmp_label(gpio, label) == 0)
+               return 0;
+
+       if (unlikely(is_reserved(special_gpio, gpio, 1))) {
+               printf("bfin-gpio: GPIO %d is already reserved by %s !\n",
+                      gpio, get_label(gpio));
+               return -EBUSY;
+       }
+       if (unlikely(is_reserved(peri, gpio, 1))) {
+               printf("bfin-gpio: GPIO %d is already reserved as Peripheral by %s !\n",
+                      gpio, get_label(gpio));
+
+               return -EBUSY;
+       }
+
+       reserve(special_gpio, gpio);
+       reserve(peri, gpio);
+
+       set_label(gpio, label);
+       port_setup(gpio, GPIO_USAGE);
+
+       return 0;
+}
+
+void bfin_special_gpio_free(unsigned gpio)
+{
+       if (unlikely(!is_reserved(special_gpio, gpio, 0))) {
+               gpio_error(gpio);
+               return;
+       }
+
+       reserve(special_gpio, gpio);
+       reserve(peri, gpio);
+       set_label(gpio, "free");
+}
+#endif
+
+static inline void __bfin_gpio_direction_input(unsigned gpio)
+{
+#ifdef CONFIG_BF54x
+       gpio_array[gpio_bank(gpio)]->dir_clear = gpio_bit(gpio);
+#else
+       gpio_array[gpio_bank(gpio)]->dir &= ~gpio_bit(gpio);
+#endif
+       gpio_array[gpio_bank(gpio)]->inen |= gpio_bit(gpio);
+}
+
+int bfin_gpio_direction_input(unsigned gpio)
+{
+       unsigned long flags;
+
+       if (!is_reserved(gpio, gpio, 0)) {
+               gpio_error(gpio);
+               return -EINVAL;
+       }
+
+       local_irq_save(flags);
+       __bfin_gpio_direction_input(gpio);
+       AWA_DUMMY_READ(inen);
+       local_irq_restore(flags);
+
+       return 0;
+}
+
+void bfin_gpio_toggle_value(unsigned gpio)
+{
+#ifdef CONFIG_BF54x
+       gpio_set_value(gpio, !gpio_get_value(gpio));
+#else
+       gpio_array[gpio_bank(gpio)]->toggle = gpio_bit(gpio);
+#endif
+}
+
+void bfin_gpio_set_value(unsigned gpio, int arg)
+{
+       if (arg)
+               gpio_array[gpio_bank(gpio)]->data_set = gpio_bit(gpio);
+       else
+               gpio_array[gpio_bank(gpio)]->data_clear = gpio_bit(gpio);
+}
+
+int bfin_gpio_direction_output(unsigned gpio, int value)
+{
+       unsigned long flags;
+
+       if (!is_reserved(gpio, gpio, 0)) {
+               gpio_error(gpio);
+               return -EINVAL;
+       }
+
+       local_irq_save(flags);
+
+       gpio_array[gpio_bank(gpio)]->inen &= ~gpio_bit(gpio);
+       gpio_set_value(gpio, value);
+#ifdef CONFIG_BF54x
+       gpio_array[gpio_bank(gpio)]->dir_set = gpio_bit(gpio);
+#else
+       gpio_array[gpio_bank(gpio)]->dir |= gpio_bit(gpio);
+#endif
+
+       AWA_DUMMY_READ(dir);
+       local_irq_restore(flags);
+
+       return 0;
+}
+
+int bfin_gpio_get_value(unsigned gpio)
+{
+#ifdef CONFIG_BF54x
+       return (1 & (gpio_array[gpio_bank(gpio)]->data >> gpio_sub_n(gpio)));
+#else
+       unsigned long flags;
+
+       if (unlikely(get_gpio_edge(gpio))) {
+               int ret;
+               local_irq_save(flags);
+               set_gpio_edge(gpio, 0);
+               ret = get_gpio_data(gpio);
+               set_gpio_edge(gpio, 1);
+               local_irq_restore(flags);
+               return ret;
+       } else
+               return get_gpio_data(gpio);
+#endif
+}
+
+/* If we are booting from SPI and our board lacks a strong enough pull up,
+ * the core can reset and execute the bootrom faster than the resistor can
+ * pull the signal logically high.  To work around this (common) error in
+ * board design, we explicitly set the pin back to GPIO mode, force /CS
+ * high, and wait for the electrons to do their thing.
+ *
+ * This function only makes sense to be called from reset code, but it
+ * lives here as we need to force all the GPIO states w/out going through
+ * BUG() checks and such.
+ */
+void bfin_reset_boot_spi_cs(unsigned short pin)
+{
+       unsigned short gpio = P_IDENT(pin);
+       port_setup(gpio, GPIO_USAGE);
+       gpio_array[gpio_bank(gpio)]->data_set = gpio_bit(gpio);
+       AWA_DUMMY_READ(data_set);
+       udelay(1);
+}
+
+#ifdef CONFIG_BFIN_GPIO_TRACK
+void bfin_gpio_labels(void)
+{
+       int c, gpio;
+
+       for (c = 0; c < MAX_RESOURCES; c++) {
+               gpio = is_reserved(gpio, c, 1);
+               if (!check_gpio(c) && gpio)
+                       printf("GPIO_%d:\t%s\tGPIO %s\n", c,
+                               get_label(c),
+                               get_gpio_dir(c) ? "OUTPUT" : "INPUT");
+               else if (is_reserved(peri, c, 1))
+                       printf("GPIO_%d:\t%s\tPeripheral\n", c, get_label(c));
+               else
+                       continue;
+       }
+}
+#endif
index 5f80ad615e7e66d368d2c00c7303e1e16edcd71e..007f5ce7757fbd275ffaddf010c3b8d202614724 100644 (file)
@@ -101,6 +101,28 @@ static inline void serial_putc(char c)
                continue;
 }
 
+__attribute__((always_inline)) static inline void
+program_nmi_handler(void)
+{
+       u32 tmp1, tmp2;
+
+       /* Older bootroms don't create a dummy NMI handler,
+        * so make one ourselves ASAP in case it fires.
+        */
+       if (CONFIG_BFIN_BOOT_MODE != BFIN_BOOT_BYPASS && !ANOMALY_05000219)
+               return;
+
+       asm volatile (
+               "%0 = RETS;" /* Save current RETS */
+               "CALL 1f;"   /* Figure out current PC */
+               "RTN;"       /* The simple NMI handler */
+               "1:"
+               "%1 = RETS;" /* Load addr of NMI handler */
+               "RETS = %0;" /* Restore RETS */
+               "[%2] = %1;" /* Write NMI handler */
+               : "=r"(tmp1), "=r"(tmp2) : "ab"(EVT2)
+       );
+}
 
 /* Max SCLK can be 133MHz ... dividing that by (2*4) gives
  * us a freq of 16MHz for SPI which should generally be
@@ -640,6 +662,9 @@ void initcode(ADI_BOOT_DATA *bs)
 {
        ADI_BOOT_DATA bootstruct_scratch;
 
+       /* Setup NMI handler before anything else */
+       program_nmi_handler();
+
        serial_init();
 
        serial_putc('A');
@@ -675,7 +700,12 @@ void initcode(ADI_BOOT_DATA *bs)
 
 #ifdef CONFIG_BFIN_BOOTROM_USES_EVT1
        serial_putc('I');
-       /* tell the bootrom where our entry point is */
+       /* Tell the bootrom where our entry point is so that it knows
+        * where to jump to when finishing processing the LDR.  This
+        * allows us to avoid small jump blocks in the LDR, and also
+        * works around anomaly 05000389 (init address in external
+        * memory causes bootrom to trigger external addressing IVHW).
+        */
        if (CONFIG_BFIN_BOOT_MODE != BFIN_BOOT_BYPASS)
                bfin_write_EVT1(CONFIG_SYS_MONITOR_BASE);
 #endif
index 69bba3f5eeff81e685dbb4ec0b32e563c266bda9..0e5e59e15d6d903d9c0a9418c6e51ac6dd1899da 100644 (file)
@@ -150,3 +150,8 @@ ENTRY(_evt_default)
        RESTORE_ALL_SYS
        rti;
 ENDPROC(_evt_default)
+
+/* NMI handler */
+ENTRY(_evt_nmi)
+       rtn;
+ENDPROC(_evt_nmi)
index 5f9be8622d69f208ae730a48ac4dd9383e453ff9..f9e311f3eee819620f186274011a242c2f5b39b8 100644 (file)
@@ -26,6 +26,8 @@
 
 #ifndef __ASSEMBLY__
 
+#include <asm/portmux.h>
+
 #define LOB(x) ((x) & 0xFF)
 #define HIB(x) (((x) >> 8) & 0xFF)
 
@@ -103,6 +105,23 @@ struct bfin_mmr_serial {
 __attribute__((always_inline))
 static inline void serial_do_portmux(void)
 {
+       if (!BFIN_DEBUG_EARLY_SERIAL) {
+               const unsigned short pins[] = {
+#if CONFIG_UART_CONSOLE == 0
+                       P_UART0_TX, P_UART0_RX,
+#elif CONFIG_UART_CONSOLE == 1
+                       P_UART1_TX, P_UART1_RX,
+#elif CONFIG_UART_CONSOLE == 2
+                       P_UART2_TX, P_UART2_RX,
+#elif CONFIG_UART_CONSOLE == 3
+                       P_UART3_TX, P_UART3_RX,
+#endif
+                       0,
+               };
+               peripheral_request_list(pins, "bfin-uart");
+               return;
+       }
+
 #if defined(__ADSPBF51x__)
 # define DO_MUX(port, mux_tx, mux_rx, tx, rx) \
        bfin_write_PORT##port##_MUX((bfin_read_PORT##port##_MUX() & ~(PORT_x_MUX_##mux_tx##_MASK | PORT_x_MUX_##mux_rx##_MASK)) | PORT_x_MUX_##mux_tx##_FUNC_2 | PORT_x_MUX_##mux_rx##_FUNC_2); \
index caaea94106a556d2095a85847967743a3eabfd19..09388aa3d53a15ed8b34d188732ee31eded5499f 100644 (file)
 #include <asm/deferred.h>
 #include "cpu.h"
 
+#ifdef CONFIG_DEBUG_DUMP
+# define ENABLE_DUMP 1
+#else
+# define ENABLE_DUMP 0
+#endif
+
 #define trace_buffer_save(x) \
        do { \
+               if (!ENABLE_DUMP) \
+                       break; \
                (x) = bfin_read_TBUFCTL(); \
                bfin_write_TBUFCTL((x) & ~TBUFEN); \
        } while (0)
 
 #define trace_buffer_restore(x) \
-       bfin_write_TBUFCTL((x))
+       do { \
+               if (!ENABLE_DUMP) \
+                       break; \
+               bfin_write_TBUFCTL((x)); \
+       } while (0);
 
 /* The purpose of this map is to provide a mapping of address<->cplb settings
  * rather than an exact map of what is actually addressable on the part.  This
@@ -82,8 +94,16 @@ int trap_c(struct pt_regs *regs, uint32_t level)
 {
        uint32_t ret = 0;
        uint32_t trapnr = (regs->seqstat & EXCAUSE);
+       unsigned long tflags;
        bool data = false;
 
+       /*
+        * Keep the trace buffer so that a miss here points people
+        * to the right place (their code).  Crashes here rarely
+        * happen.  If they do, only the Blackfin maintainer cares.
+        */
+       trace_buffer_save(tflags);
+
        switch (trapnr) {
        /* 0x26 - Data CPLB Miss */
        case VEC_CPLB_M:
@@ -97,7 +117,7 @@ int trap_c(struct pt_regs *regs, uint32_t level)
                         */
                        if (last_cplb_fault_retx != regs->retx) {
                                last_cplb_fault_retx = regs->retx;
-                               return ret;
+                               break;
                        }
                }
 
@@ -110,7 +130,6 @@ int trap_c(struct pt_regs *regs, uint32_t level)
                uint32_t new_cplb_addr = 0, new_cplb_data = 0;
                static size_t last_evicted;
                size_t i;
-               unsigned long tflags;
 
 #ifdef CONFIG_EXCEPTION_DEFER
                /* This should never happen */
@@ -118,13 +137,6 @@ int trap_c(struct pt_regs *regs, uint32_t level)
                        bfin_panic(regs);
 #endif
 
-               /*
-                * Keep the trace buffer so that a miss here points people
-                * to the right place (their code).  Crashes here rarely
-                * happen.  If they do, only the Blackfin maintainer cares.
-                */
-               trace_buffer_save(tflags);
-
                new_cplb_addr = (data ? bfin_read_DCPLB_FAULT_ADDR() : bfin_read_ICPLB_FAULT_ADDR()) & ~(4 * 1024 * 1024 - 1);
 
                for (i = 0; i < ARRAY_SIZE(bfin_memory_map); ++i) {
@@ -180,7 +192,6 @@ int trap_c(struct pt_regs *regs, uint32_t level)
                for (i = 0; i < 16; ++i)
                        debug("%2i 0x%p 0x%08X\n", i, *CPLB_ADDR++, *CPLB_DATA++);
 
-               trace_buffer_restore(tflags);
                break;
        }
 #ifdef CONFIG_CMD_KGDB
@@ -208,23 +219,21 @@ int trap_c(struct pt_regs *regs, uint32_t level)
 #ifdef CONFIG_CMD_KGDB
                if (level == 3) {
                        /* We need to handle this at EVT5, so try again */
+                       bfin_dump(regs);
                        ret = 1;
                        break;
                }
                if (debugger_exception_handler && (*debugger_exception_handler)(regs))
-                       return 0;
+                       break;
 #endif
                bfin_panic(regs);
        }
+
+       trace_buffer_restore(tflags);
+
        return ret;
 }
 
-#ifdef CONFIG_DEBUG_DUMP
-# define ENABLE_DUMP 1
-#else
-# define ENABLE_DUMP 0
-#endif
-
 #ifndef CONFIG_KALLSYMS
 const char *symbol_lookup(unsigned long addr, unsigned long *caddr)
 {
@@ -364,17 +373,14 @@ void dump(struct pt_regs *fp)
        printf("\n");
 }
 
-void dump_bfin_trace_buffer(void)
+static void _dump_bfin_trace_buffer(void)
 {
        char buf[150];
-       unsigned long tflags;
        int i = 0;
 
        if (!ENABLE_DUMP)
                return;
 
-       trace_buffer_save(tflags);
-
        printf("Hardware Trace:\n");
 
        if (bfin_read_TBUFSTAT() & TBUFCNT) {
@@ -385,16 +391,21 @@ void dump_bfin_trace_buffer(void)
                        printf("     Source : %s\n", buf);
                }
        }
+}
 
+void dump_bfin_trace_buffer(void)
+{
+       unsigned long tflags;
+       trace_buffer_save(tflags);
+       _dump_bfin_trace_buffer();
        trace_buffer_restore(tflags);
 }
 
-void bfin_panic(struct pt_regs *regs)
+void bfin_dump(struct pt_regs *regs)
 {
-       if (ENABLE_DUMP) {
-               unsigned long tflags;
-               trace_buffer_save(tflags);
-       }
+       unsigned long tflags;
+
+       trace_buffer_save(tflags);
 
        puts(
                "\n"
@@ -404,7 +415,16 @@ void bfin_panic(struct pt_regs *regs)
                "\n"
        );
        dump(regs);
-       dump_bfin_trace_buffer();
+       _dump_bfin_trace_buffer();
        puts("\n");
+
+       trace_buffer_restore(tflags);
+}
+
+void bfin_panic(struct pt_regs *regs)
+{
+       unsigned long tflags;
+       trace_buffer_save(tflags);
+       bfin_dump(regs);
        bfin_reset_or_hang();
 }
index 3fd34b33fe7d4444e385d13fefd6100fe9be83bb..48f793a4ce6199343084291a23a7269b698d7636 100644 (file)
@@ -75,7 +75,15 @@ extern void blackfin_dcache_flush_invalidate_range(const void *, const void *);
  * regions can only be accessed via DMA, so if the address in question is in
  * that region, make sure we attempt to DMA indirectly.
  */
-# define addr_bfin_on_chip_mem(addr) (((unsigned long)(addr) & 0xFFF00000) == 0xFFA00000)
+# ifdef __ADSPBF561__
+  /* Core B regions all need dma from Core A */
+#  define addr_bfin_on_chip_mem(addr) \
+       ((((unsigned long)(addr) & 0xFFF00000) == 0xFFA00000) || \
+        (((unsigned long)(addr) & 0xFFC00000) == 0xFF400000))
+# else
+#  define addr_bfin_on_chip_mem(addr) \
+       (((unsigned long)(addr) & 0xFFF00000) == 0xFFA00000)
+# endif
 
 # include <asm/system.h>
 
diff --git a/arch/blackfin/include/asm/gpio.h b/arch/blackfin/include/asm/gpio.h
new file mode 100644 (file)
index 0000000..b650ef0
--- /dev/null
@@ -0,0 +1,201 @@
+/*
+ * Copyright 2006-2009 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#ifndef __ARCH_BLACKFIN_GPIO_H__
+#define __ARCH_BLACKFIN_GPIO_H__
+
+#define gpio_bank(x)   ((x) >> 4)
+#define gpio_bit(x)    (1<<((x) & 0xF))
+#define gpio_sub_n(x)  ((x) & 0xF)
+
+#define GPIO_BANKSIZE  16
+#define GPIO_BANK_NUM  DIV_ROUND_UP(MAX_BLACKFIN_GPIOS, GPIO_BANKSIZE)
+
+#define GPIO_0 0
+#define GPIO_1 1
+#define GPIO_2 2
+#define GPIO_3 3
+#define GPIO_4 4
+#define GPIO_5 5
+#define GPIO_6 6
+#define GPIO_7 7
+#define GPIO_8 8
+#define GPIO_9 9
+#define GPIO_10        10
+#define GPIO_11        11
+#define GPIO_12        12
+#define GPIO_13        13
+#define GPIO_14        14
+#define GPIO_15        15
+#define GPIO_16        16
+#define GPIO_17        17
+#define GPIO_18        18
+#define GPIO_19        19
+#define GPIO_20        20
+#define GPIO_21        21
+#define GPIO_22        22
+#define GPIO_23        23
+#define GPIO_24        24
+#define GPIO_25        25
+#define GPIO_26        26
+#define GPIO_27        27
+#define GPIO_28        28
+#define GPIO_29        29
+#define GPIO_30        30
+#define GPIO_31        31
+#define GPIO_32        32
+#define GPIO_33        33
+#define GPIO_34        34
+#define GPIO_35        35
+#define GPIO_36        36
+#define GPIO_37        37
+#define GPIO_38        38
+#define GPIO_39        39
+#define GPIO_40        40
+#define GPIO_41        41
+#define GPIO_42        42
+#define GPIO_43        43
+#define GPIO_44        44
+#define GPIO_45        45
+#define GPIO_46        46
+#define GPIO_47        47
+
+#define PERIPHERAL_USAGE 1
+#define GPIO_USAGE 0
+
+#ifndef __ASSEMBLY__
+
+#ifndef CONFIG_BF54x
+void set_gpio_dir(unsigned, unsigned short);
+void set_gpio_inen(unsigned, unsigned short);
+void set_gpio_polar(unsigned, unsigned short);
+void set_gpio_edge(unsigned, unsigned short);
+void set_gpio_both(unsigned, unsigned short);
+void set_gpio_data(unsigned, unsigned short);
+void set_gpio_maska(unsigned, unsigned short);
+void set_gpio_maskb(unsigned, unsigned short);
+void set_gpio_toggle(unsigned);
+void set_gpiop_dir(unsigned, unsigned short);
+void set_gpiop_inen(unsigned, unsigned short);
+void set_gpiop_polar(unsigned, unsigned short);
+void set_gpiop_edge(unsigned, unsigned short);
+void set_gpiop_both(unsigned, unsigned short);
+void set_gpiop_data(unsigned, unsigned short);
+void set_gpiop_maska(unsigned, unsigned short);
+void set_gpiop_maskb(unsigned, unsigned short);
+unsigned short get_gpio_dir(unsigned);
+unsigned short get_gpio_inen(unsigned);
+unsigned short get_gpio_polar(unsigned);
+unsigned short get_gpio_edge(unsigned);
+unsigned short get_gpio_both(unsigned);
+unsigned short get_gpio_maska(unsigned);
+unsigned short get_gpio_maskb(unsigned);
+unsigned short get_gpio_data(unsigned);
+unsigned short get_gpiop_dir(unsigned);
+unsigned short get_gpiop_inen(unsigned);
+unsigned short get_gpiop_polar(unsigned);
+unsigned short get_gpiop_edge(unsigned);
+unsigned short get_gpiop_both(unsigned);
+unsigned short get_gpiop_maska(unsigned);
+unsigned short get_gpiop_maskb(unsigned);
+unsigned short get_gpiop_data(unsigned);
+
+struct gpio_port_t {
+       unsigned short data;
+       unsigned short dummy1;
+       unsigned short data_clear;
+       unsigned short dummy2;
+       unsigned short data_set;
+       unsigned short dummy3;
+       unsigned short toggle;
+       unsigned short dummy4;
+       unsigned short maska;
+       unsigned short dummy5;
+       unsigned short maska_clear;
+       unsigned short dummy6;
+       unsigned short maska_set;
+       unsigned short dummy7;
+       unsigned short maska_toggle;
+       unsigned short dummy8;
+       unsigned short maskb;
+       unsigned short dummy9;
+       unsigned short maskb_clear;
+       unsigned short dummy10;
+       unsigned short maskb_set;
+       unsigned short dummy11;
+       unsigned short maskb_toggle;
+       unsigned short dummy12;
+       unsigned short dir;
+       unsigned short dummy13;
+       unsigned short polar;
+       unsigned short dummy14;
+       unsigned short edge;
+       unsigned short dummy15;
+       unsigned short both;
+       unsigned short dummy16;
+       unsigned short inen;
+};
+#endif
+
+#ifdef CONFIG_BFIN_GPIO_TRACK
+void bfin_gpio_labels(void);
+#else
+#define bfin_gpio_labels()
+#define bfin_gpio_request(gpio, label) bfin_gpio_request(gpio)
+#define bfin_special_gpio_request(gpio, label) bfin_special_gpio_request(gpio)
+#endif
+
+#ifdef BFIN_SPECIAL_GPIO_BANKS
+void bfin_special_gpio_free(unsigned gpio);
+int bfin_special_gpio_request(unsigned gpio, const char *label);
+#endif
+
+int bfin_gpio_request(unsigned gpio, const char *label);
+void bfin_gpio_free(unsigned gpio);
+int bfin_gpio_direction_input(unsigned gpio);
+int bfin_gpio_direction_output(unsigned gpio, int value);
+int bfin_gpio_get_value(unsigned gpio);
+void bfin_gpio_set_value(unsigned gpio, int value);
+void bfin_gpio_toggle_value(unsigned gpio);
+
+static inline int gpio_request(unsigned gpio, const char *label)
+{
+       return bfin_gpio_request(gpio, label);
+}
+
+static inline void gpio_free(unsigned gpio)
+{
+       return bfin_gpio_free(gpio);
+}
+
+static inline int gpio_direction_input(unsigned gpio)
+{
+       return bfin_gpio_direction_input(gpio);
+}
+
+static inline int gpio_direction_output(unsigned gpio, int value)
+{
+       return bfin_gpio_direction_output(gpio, value);
+}
+
+static inline int gpio_get_value(unsigned gpio)
+{
+       return bfin_gpio_get_value(gpio);
+}
+
+static inline void gpio_set_value(unsigned gpio, int value)
+{
+       return bfin_gpio_set_value(gpio, value);
+}
+
+static inline int gpio_is_valid(int number)
+{
+       return number >= 0 && number < MAX_BLACKFIN_GPIOS;
+}
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __ARCH_BLACKFIN_GPIO_H__ */
index 0fd7e3171089f46c9e44d7661fa13e0924bee08e..9358afa05c90f47058f6cc522ee0a5edbbce5e21 100644 (file)
@@ -1,19 +1,28 @@
 /*
- * File: include/asm-blackfin/mach-bf527/anomaly.h
- * Bugs: Enter bugs at http://blackfin.uclinux.org/
+ * DO NOT EDIT THIS FILE
+ * This file is under version control at
+ *   svn://sources.blackfin.uclinux.org/toolchain/trunk/proc-defs/header-frags/
+ * and can be replaced with that version at any time
+ * DO NOT EDIT THIS FILE
  *
- * Copyright (C) 2004-2009 Analog Devices Inc.
- * Licensed under the GPL-2 or later.
+ * Copyright 2004-2010 Analog Devices Inc.
+ * Licensed under the ADI BSD license.
+ *   https://docs.blackfin.uclinux.org/doku.php?id=adi_bsd
  */
 
 /* This file should be up to date with:
- *  - Revision B, 08/12/2008; ADSP-BF526 Blackfin Processor Anomaly List
- *  - Revision F, 03/03/2009; ADSP-BF527 Blackfin Processor Anomaly List
+ *  - Revision E, 03/15/2010; ADSP-BF526 Blackfin Processor Anomaly List
+ *  - Revision G, 08/25/2009; ADSP-BF527 Blackfin Processor Anomaly List
  */
 
 #ifndef _MACH_ANOMALY_H_
 #define _MACH_ANOMALY_H_
 
+/* We do not support old silicon - sorry */
+#if __SILICON_REVISION__ < 0
+# error will not work on BF526/BF527 silicon version
+#endif
+
 #if defined(__ADSPBF522__) || defined(__ADSPBF524__) || defined(__ADSPBF526__)
 # define ANOMALY_BF526 1
 #else
 # define ANOMALY_BF527 0
 #endif
 
-/* Multi-issue instruction with dsp32shiftimm in slot1 and P-reg store in slot 2 not supported */
+#define _ANOMALY_BF526(rev526) (ANOMALY_BF526 && __SILICON_REVISION__ rev526)
+#define _ANOMALY_BF527(rev527) (ANOMALY_BF527 && __SILICON_REVISION__ rev527)
+#define _ANOMALY_BF526_BF527(rev526, rev527) (_ANOMALY_BF526(rev526) || _ANOMALY_BF527(rev527))
+
+/* Multi-Issue Instruction with dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported */
 #define ANOMALY_05000074 (1)
 /* DMA_RUN Bit Is Not Valid after a Peripheral Receive Channel DMA Stops */
-#define ANOMALY_05000119 (1)   /* note: brokenness is noted in documentation, not anomaly sheet */
+#define ANOMALY_05000119 (1)
 /* Rx.H Cannot Be Used to Access 16-bit System MMR Registers */
 #define ANOMALY_05000122 (1)
 /* False Hardware Error from an Access in the Shadow of a Conditional Branch */
 /* False Hardware Errors Caused by Fetches at the Boundary of Reserved Memory */
 #define ANOMALY_05000310 (1)
 /* PPI Is Level-Sensitive on First Transfer In Single Frame Sync Modes */
-#define ANOMALY_05000313 (__SILICON_REVISION__ < 2)
+#define ANOMALY_05000313 (_ANOMALY_BF526_BF527(< 1, < 2))
 /* Incorrect Access of OTP_STATUS During otp_write() Function */
-#define ANOMALY_05000328 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000328 (_ANOMALY_BF527(< 2))
 /* Host DMA Boot Modes Are Not Functional */
 #define ANOMALY_05000330 (__SILICON_REVISION__ < 2)
 /* Disallowed Configuration Prevents Subsequent Allowed Configuration on Host DMA Port */
-#define ANOMALY_05000337 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000337 (_ANOMALY_BF527(< 2))
 /* Ethernet MAC MDIO Reads Do Not Meet IEEE Specification */
-#define ANOMALY_05000341 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000341 (_ANOMALY_BF527(< 2))
 /* TWI May Not Operate Correctly Under Certain Signal Termination Conditions */
-#define ANOMALY_05000342 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000342 (_ANOMALY_BF527(< 2))
 /* USB Calibration Value Is Not Initialized */
-#define ANOMALY_05000346 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000346 (_ANOMALY_BF526_BF527(< 1, < 2))
 /* USB Calibration Value to use */
 #define ANOMALY_05000346_value 0xE510
 /* Preboot Routine Incorrectly Alters Reset Value of USB Register */
-#define ANOMALY_05000347 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000347 (_ANOMALY_BF527(< 2))
 /* Security Features Are Not Functional */
-#define ANOMALY_05000348 (ANOMALY_BF527 && __SILICON_REVISION__ < 1)
+#define ANOMALY_05000348 (_ANOMALY_BF527(< 1))
 /* bfrom_SysControl() Firmware Function Performs Improper System Reset */
-#define ANOMALY_05000353 (ANOMALY_BF526)
+#define ANOMALY_05000353 (_ANOMALY_BF526(< 1))
 /* Regulator Programming Blocked when Hibernate Wakeup Source Remains Active */
-#define ANOMALY_05000355 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000355 (_ANOMALY_BF527(< 2))
 /* Serial Port (SPORT) Multichannel Transmit Failure when Channel 0 Is Disabled */
-#define ANOMALY_05000357 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000357 (_ANOMALY_BF527(< 2))
 /* Incorrect Revision Number in DSPID Register */
-#define ANOMALY_05000364 (ANOMALY_BF527 && __SILICON_REVISION__ == 1)
+#define ANOMALY_05000364 (_ANOMALY_BF527(== 1))
 /* PPI Underflow Error Goes Undetected in ITU-R 656 Mode */
 #define ANOMALY_05000366 (1)
 /* Incorrect Default CSEL Value in PLL_DIV */
-#define ANOMALY_05000368 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000368 (_ANOMALY_BF527(< 2))
 /* Possible RETS Register Corruption when Subroutine Is under 5 Cycles in Duration */
-#define ANOMALY_05000371 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000371 (_ANOMALY_BF527(< 2))
 /* Authentication Fails To Initiate */
-#define ANOMALY_05000376 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000376 (_ANOMALY_BF527(< 2))
 /* Data Read From L3 Memory by USB DMA May be Corrupted */
-#define ANOMALY_05000380 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000380 (_ANOMALY_BF527(< 2))
 /* 8-Bit NAND Flash Boot Mode Not Functional */
-#define ANOMALY_05000382 (__SILICON_REVISION__ < 2)
+#define ANOMALY_05000382 (_ANOMALY_BF526_BF527(< 1, < 2))
 /* Boot from OTP Memory Not Functional */
-#define ANOMALY_05000385 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000385 (_ANOMALY_BF527(< 2))
 /* bfrom_SysControl() Firmware Routine Not Functional */
-#define ANOMALY_05000386 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000386 (_ANOMALY_BF527(< 2))
 /* Programmable Preboot Settings Not Functional */
-#define ANOMALY_05000387 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000387 (_ANOMALY_BF527(< 2))
 /* CRC32 Checksum Support Not Functional */
-#define ANOMALY_05000388 (__SILICON_REVISION__ < 2)
+#define ANOMALY_05000388 (_ANOMALY_BF526_BF527(< 1, < 2))
 /* Reset Vector Must Not Be in SDRAM Memory Space */
-#define ANOMALY_05000389 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000389 (_ANOMALY_BF527(< 2))
 /* pTempCurrent Not Present in ADI_BOOT_DATA Structure */
-#define ANOMALY_05000392 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000392 (_ANOMALY_BF527(< 2))
 /* Deprecated Value of dTempByteCount in ADI_BOOT_DATA Structure */
-#define ANOMALY_05000393 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000393 (_ANOMALY_BF527(< 2))
 /* Log Buffer Not Functional */
-#define ANOMALY_05000394 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000394 (_ANOMALY_BF527(< 2))
 /* Hook Routine Not Functional */
-#define ANOMALY_05000395 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000395 (_ANOMALY_BF527(< 2))
 /* Header Indirect Bit Not Functional */
-#define ANOMALY_05000396 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000396 (_ANOMALY_BF527(< 2))
 /* BK_ONES, BK_ZEROS, and BK_DATECODE Constants Not Functional */
-#define ANOMALY_05000397 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000397 (_ANOMALY_BF527(< 2))
 /* SWRESET, DFRESET and WDRESET Bits in the SYSCR Register Not Functional */
-#define ANOMALY_05000398 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000398 (_ANOMALY_BF527(< 2))
 /* BCODE_NOBOOT in BCODE Field of SYSCR Register Not Functional */
-#define ANOMALY_05000399 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000399 (_ANOMALY_BF527(< 2))
 /* PPI Data Signals D0 and D8 do not Tristate After Disabling PPI */
-#define ANOMALY_05000401 (__SILICON_REVISION__ < 2)
+#define ANOMALY_05000401 (_ANOMALY_BF526_BF527(< 1, < 2))
 /* Level-Sensitive External GPIO Wakeups May Cause Indefinite Stall */
-#define ANOMALY_05000403 (__SILICON_REVISION__ < 2)
+#define ANOMALY_05000403 (_ANOMALY_BF526_BF527(< 1, < 2))
 /* Lockbox SESR Disallows Certain User Interrupts */
-#define ANOMALY_05000404 (__SILICON_REVISION__ < 2)
+#define ANOMALY_05000404 (_ANOMALY_BF526_BF527(< 1, < 2))
 /* Lockbox SESR Firmware Does Not Save/Restore Full Context */
 #define ANOMALY_05000405 (1)
 /* Lockbox SESR Firmware Arguments Are Not Retained After First Initialization */
-#define ANOMALY_05000407 (__SILICON_REVISION__ < 2)
+#define ANOMALY_05000407 (_ANOMALY_BF526_BF527(< 1, < 2))
 /* Lockbox Firmware Memory Cleanup Routine Does not Clear Registers */
 #define ANOMALY_05000408 (1)
 /* Lockbox firmware leaves MDMA0 channel enabled */
-#define ANOMALY_05000409 (__SILICON_REVISION__ < 2)
+#define ANOMALY_05000409 (_ANOMALY_BF526_BF527(< 1, < 2))
 /* Incorrect Default Internal Voltage Regulator Setting */
-#define ANOMALY_05000410 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000410 (_ANOMALY_BF527(< 2))
 /* bfrom_SysControl() Firmware Function Cannot be Used to Enter Power Saving Modes */
-#define ANOMALY_05000411 (__SILICON_REVISION__ < 2)
+#define ANOMALY_05000411 (_ANOMALY_BF526_BF527(< 1, < 2))
 /* OTP_CHECK_FOR_PREV_WRITE Bit is Not Functional in bfrom_OtpWrite() API */
-#define ANOMALY_05000414 (__SILICON_REVISION__ < 2)
+#define ANOMALY_05000414 (_ANOMALY_BF526_BF527(< 1, < 2))
 /* DEB2_URGENT Bit Not Functional */
-#define ANOMALY_05000415 (__SILICON_REVISION__ < 2)
+#define ANOMALY_05000415 (_ANOMALY_BF526_BF527(< 1, < 2))
 /* Speculative Fetches Can Cause Undesired External FIFO Operations */
 #define ANOMALY_05000416 (1)
 /* SPORT0 Ignores External TSCLK0 on PG14 When TMR6 is an Output */
-#define ANOMALY_05000417 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000417 (_ANOMALY_BF527(< 2))
 /* PPI Timing Requirements tSFSPE and tHFSPE Do Not Meet Data Sheet Specifications */
-#define ANOMALY_05000418 (__SILICON_REVISION__ < 2)
+#define ANOMALY_05000418 (_ANOMALY_BF526_BF527(< 1, < 2))
 /* USB PLL_STABLE Bit May Not Accurately Reflect the USB PLL's Status */
-#define ANOMALY_05000420 (__SILICON_REVISION__ < 2)
+#define ANOMALY_05000420 (_ANOMALY_BF526_BF527(< 1, < 2))
 /* TWI Fall Time (Tof) May Violate the Minimum I2C Specification */
 #define ANOMALY_05000421 (1)
 /* TWI Input Capacitance (Ci) May Violate the Maximum I2C Specification */
-#define ANOMALY_05000422 (ANOMALY_BF527 && __SILICON_REVISION__ > 1)
+#define ANOMALY_05000422 (_ANOMALY_BF526_BF527(> 0, > 1))
 /* Certain Ethernet Frames With Errors are Misclassified in RMII Mode */
-#define ANOMALY_05000423 (__SILICON_REVISION__ < 2)
+#define ANOMALY_05000423 (_ANOMALY_BF526_BF527(< 1, < 2))
 /* Internal Voltage Regulator Not Trimmed */
-#define ANOMALY_05000424 (ANOMALY_BF527 && __SILICON_REVISION__ < 2)
+#define ANOMALY_05000424 (_ANOMALY_BF527(< 2))
 /* Multichannel SPORT Channel Misalignment Under Specific Configuration */
-#define ANOMALY_05000425 (__SILICON_REVISION__ < 2)
+#define ANOMALY_05000425 (_ANOMALY_BF526_BF527(< 1, < 2))
 /* Speculative Fetches of Indirect-Pointer Instructions Can Cause False Hardware Errors */
 #define ANOMALY_05000426 (1)
 /* WB_EDGE Bit in NFC_IRQSTAT Incorrectly Reflects Buffer Status Instead of IRQ Status */
-#define ANOMALY_05000429 (__SILICON_REVISION__ < 2)
+#define ANOMALY_05000429 (_ANOMALY_BF526_BF527(< 1, < 2))
 /* Software System Reset Corrupts PLL_LOCKCNT Register */
-#define ANOMALY_05000430 (ANOMALY_BF527 && __SILICON_REVISION__ > 1)
+#define ANOMALY_05000430 (_ANOMALY_BF527(> 1))
 /* Incorrect Use of Stack in Lockbox Firmware During Authentication */
 #define ANOMALY_05000431 (1)
 /* bfrom_SysControl() Does Not Clear SIC_IWR1 Before Executing PLL Programming Sequence */
-#define ANOMALY_05000432 (ANOMALY_BF526)
+#define ANOMALY_05000432 (_ANOMALY_BF526(< 1))
+/* SW Breakpoints Ignored Upon Return From Lockbox Authentication */
+#define ANOMALY_05000434 (1)
 /* Certain SIC Registers are not Reset After Soft or Core Double Fault Reset */
-#define ANOMALY_05000435 ((ANOMALY_BF526 && __SILICON_REVISION__ < 1) || ANOMALY_BF527)
+#define ANOMALY_05000435 (_ANOMALY_BF526_BF527(< 1, >= 0))
 /* Preboot Cannot be Used to Alter the PLL_DIV Register */
-#define ANOMALY_05000439 (1)
+#define ANOMALY_05000439 (_ANOMALY_BF526_BF527(< 1, >= 0))
 /* bfrom_SysControl() Cannot be Used to Write the PLL_DIV Register */
-#define ANOMALY_05000440 (1)
+#define ANOMALY_05000440 (_ANOMALY_BF526_BF527(< 1, >= 0))
 /* OTP Write Accesses Not Supported */
-#define ANOMALY_05000442 (__SILICON_REVISION__ < 1)
+#define ANOMALY_05000442 (_ANOMALY_BF527(< 1))
 /* IFLUSH Instruction at End of Hardware Loop Causes Infinite Stall */
 #define ANOMALY_05000443 (1)
 /* The WURESET Bit in the SYSCR Register is not Functional */
 #define ANOMALY_05000445 (1)
+/* USB DMA Mode 1 Short Packet Data Corruption */
+#define ANOMALY_05000450 (1)
 /* BCODE_QUICKBOOT, BCODE_ALLBOOT, and BCODE_FULLBOOT Settings in SYSCR Register Not Functional */
 #define ANOMALY_05000451 (1)
 /* Incorrect Default Hysteresis Setting for RESET, NMI, and BMODE Signals */
-#define ANOMALY_05000452 (1)
+#define ANOMALY_05000452 (_ANOMALY_BF526_BF527(< 1, >= 0))
 /* USB Receive Interrupt Is Not Generated in DMA Mode 1 */
 #define ANOMALY_05000456 (1)
 /* Host DMA Port Responds to Certain Bus Activity Without HOST_CE Assertion */
 #define ANOMALY_05000457 (1)
+/* USB DMA Mode 1 Failure When Multiple USB DMA Channels Are Concurrently Enabled */
+#define ANOMALY_05000460 (1)
+/* False Hardware Error when RETI Points to Invalid Memory */
+#define ANOMALY_05000461 (1)
+/* Synchronization Problem at Startup May Cause SPORT Transmit Channels to Misalign */
+#define ANOMALY_05000462 (1)
+/* USB Rx DMA hang */
+#define ANOMALY_05000465 (1)
+/* TxPktRdy Bit Not Set for Transmit Endpoint When Core and DMA Access USB Endpoint FIFOs Simultaneously */
+#define ANOMALY_05000466 (1)
+/* Possible RX data corruption when control & data EP FIFOs are accessed via the core */
+#define ANOMALY_05000467 (1)
+/* PLL Latches Incorrect Settings During Reset */
+#define ANOMALY_05000469 (1)
+/* Incorrect Default MSEL Value in PLL_CTL */
+#define ANOMALY_05000472 (_ANOMALY_BF526(>= 0))
+/* Interrupted 32-Bit SPORT Data Register Access Results In Underflow */
+#define ANOMALY_05000473 (1)
+/* Possible Lockup Condition whem Modifying PLL from External Memory */
+#define ANOMALY_05000475 (1)
+/* TESTSET Instruction Cannot Be Interrupted */
+#define ANOMALY_05000477 (1)
+/* Reads of ITEST_COMMAND and ITEST_DATA Registers Cause Cache Corruption */
+#define ANOMALY_05000481 (1)
+/* Possible USB Data Corruption When Multiple Endpoints Are Accessed by the Core */
+#define ANOMALY_05000483 (1)
+/* PLL_CTL Change Using bfrom_SysControl() Can Result in Processor Overclocking */
+#define ANOMALY_05000485 (_ANOMALY_BF526_BF527(< 2, < 3))
+/* IFLUSH sucks at life */
+#define ANOMALY_05000491 (1)
 
 /* Anomalies that don't exist on this proc */
+#define ANOMALY_05000099 (0)
+#define ANOMALY_05000120 (0)
 #define ANOMALY_05000125 (0)
+#define ANOMALY_05000149 (0)
 #define ANOMALY_05000158 (0)
 #define ANOMALY_05000171 (0)
+#define ANOMALY_05000179 (0)
+#define ANOMALY_05000182 (0)
 #define ANOMALY_05000183 (0)
+#define ANOMALY_05000189 (0)
 #define ANOMALY_05000198 (0)
+#define ANOMALY_05000202 (0)
+#define ANOMALY_05000215 (0)
+#define ANOMALY_05000219 (0)
+#define ANOMALY_05000220 (0)
 #define ANOMALY_05000227 (0)
 #define ANOMALY_05000230 (0)
+#define ANOMALY_05000231 (0)
+#define ANOMALY_05000233 (0)
+#define ANOMALY_05000234 (0)
 #define ANOMALY_05000242 (0)
 #define ANOMALY_05000244 (0)
+#define ANOMALY_05000248 (0)
+#define ANOMALY_05000250 (0)
+#define ANOMALY_05000257 (0)
 #define ANOMALY_05000261 (0)
 #define ANOMALY_05000263 (0)
 #define ANOMALY_05000266 (0)
 #define ANOMALY_05000273 (0)
+#define ANOMALY_05000274 (0)
 #define ANOMALY_05000278 (0)
+#define ANOMALY_05000281 (0)
+#define ANOMALY_05000283 (0)
 #define ANOMALY_05000285 (0)
+#define ANOMALY_05000287 (0)
+#define ANOMALY_05000301 (0)
 #define ANOMALY_05000305 (0)
 #define ANOMALY_05000307 (0)
 #define ANOMALY_05000311 (0)
 #define ANOMALY_05000312 (0)
+#define ANOMALY_05000315 (0)
 #define ANOMALY_05000323 (0)
 #define ANOMALY_05000362 (1)
 #define ANOMALY_05000363 (0)
+#define ANOMALY_05000400 (0)
+#define ANOMALY_05000402 (0)
 #define ANOMALY_05000412 (0)
 #define ANOMALY_05000447 (0)
 #define ANOMALY_05000448 (0)
+#define ANOMALY_05000474 (0)
 
 #endif
index 81eca83bcecbc77324294e28e9ac4b126eea0b1e..1ffa2398172ed4af2ec06180ec78296485b31463 100644 (file)
@@ -1,2 +1,6 @@
+#include "gpio.h"
 #include "mem_map.h"
+#include "portmux.h"
 #include "ports.h"
+
+#define CONFIG_BF52x 1 /* Linux glue */
diff --git a/arch/blackfin/include/asm/mach-bf527/gpio.h b/arch/blackfin/include/asm/mach-bf527/gpio.h
new file mode 100644 (file)
index 0000000..f80c299
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2008 Analog Devices Inc.
+ * Licensed under the GPL-2 or later.
+ */
+
+
+#ifndef _MACH_GPIO_H_
+#define _MACH_GPIO_H_
+
+#define MAX_BLACKFIN_GPIOS 48
+
+#define GPIO_PF0       0
+#define GPIO_PF1       1
+#define GPIO_PF2       2
+#define GPIO_PF3       3
+#define GPIO_PF4       4
+#define GPIO_PF5       5
+#define GPIO_PF6       6
+#define GPIO_PF7       7
+#define GPIO_PF8       8
+#define GPIO_PF9       9
+#define GPIO_PF10      10
+#define GPIO_PF11      11
+#define GPIO_PF12      12
+#define GPIO_PF13      13
+#define GPIO_PF14      14
+#define GPIO_PF15      15
+#define GPIO_PG0       16
+#define GPIO_PG1       17
+#define GPIO_PG2       18
+#define GPIO_PG3       19
+#define GPIO_PG4       20
+#define GPIO_PG5       21
+#define GPIO_PG6       22
+#define GPIO_PG7       23
+#define GPIO_PG8       24
+#define GPIO_PG9       25
+#define GPIO_PG10      26
+#define GPIO_PG11      27
+#define GPIO_PG12      28
+#define GPIO_PG13      29
+#define GPIO_PG14      30
+#define GPIO_PG15      31
+#define GPIO_PH0       32
+#define GPIO_PH1       33
+#define GPIO_PH2       34
+#define GPIO_PH3       35
+#define GPIO_PH4       36
+#define GPIO_PH5       37
+#define GPIO_PH6       38
+#define GPIO_PH7       39
+#define GPIO_PH8       40
+#define GPIO_PH9       41
+#define GPIO_PH10      42
+#define GPIO_PH11      43
+#define GPIO_PH12      44
+#define GPIO_PH13      45
+#define GPIO_PH14      46
+#define GPIO_PH15      47
+
+#define PORT_F GPIO_PF0
+#define PORT_G GPIO_PG0
+#define PORT_H GPIO_PH0
+
+#endif /* _MACH_GPIO_H_ */
diff --git a/arch/blackfin/include/asm/mach-bf527/portmux.h b/arch/blackfin/include/asm/mach-bf527/portmux.h
new file mode 100644 (file)
index 0000000..aa16558
--- /dev/null
@@ -0,0 +1,220 @@
+/*
+ * Copyright 2007-2009 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later
+ */
+
+#ifndef _MACH_PORTMUX_H_
+#define _MACH_PORTMUX_H_
+
+#define MAX_RESOURCES  MAX_BLACKFIN_GPIOS
+
+#define P_PPI0_D0      (P_DEFINED | P_IDENT(GPIO_PF0) | P_FUNCT(0))
+#define P_PPI0_D1      (P_DEFINED | P_IDENT(GPIO_PF1) | P_FUNCT(0))
+#define P_PPI0_D2      (P_DEFINED | P_IDENT(GPIO_PF2) | P_FUNCT(0))
+#define P_PPI0_D3      (P_DEFINED | P_IDENT(GPIO_PF3) | P_FUNCT(0))
+#define P_PPI0_D4      (P_DEFINED | P_IDENT(GPIO_PF4) | P_FUNCT(0))
+#define P_PPI0_D5      (P_DEFINED | P_IDENT(GPIO_PF5) | P_FUNCT(0))
+#define P_PPI0_D6      (P_DEFINED | P_IDENT(GPIO_PF6) | P_FUNCT(0))
+#define P_PPI0_D7      (P_DEFINED | P_IDENT(GPIO_PF7) | P_FUNCT(0))
+#define P_PPI0_D8      (P_DEFINED | P_IDENT(GPIO_PF8) | P_FUNCT(0))
+#define P_PPI0_D9      (P_DEFINED | P_IDENT(GPIO_PF9) | P_FUNCT(0))
+#define P_PPI0_D10     (P_DEFINED | P_IDENT(GPIO_PF10) | P_FUNCT(0))
+#define P_PPI0_D11     (P_DEFINED | P_IDENT(GPIO_PF11) | P_FUNCT(0))
+#define P_PPI0_D12     (P_DEFINED | P_IDENT(GPIO_PF12) | P_FUNCT(0))
+#define P_PPI0_D13     (P_DEFINED | P_IDENT(GPIO_PF13) | P_FUNCT(0))
+#define P_PPI0_D14     (P_DEFINED | P_IDENT(GPIO_PF14) | P_FUNCT(0))
+#define P_PPI0_D15     (P_DEFINED | P_IDENT(GPIO_PF15) | P_FUNCT(0))
+
+#if !defined(CONFIG_BF527_SPORT0_PORTG)
+#define P_SPORT0_DRPRI (P_DEFINED | P_IDENT(GPIO_PF0) | P_FUNCT(1))
+#define P_SPORT0_RFS   (P_DEFINED | P_IDENT(GPIO_PF1) | P_FUNCT(1))
+#define P_SPORT0_RSCLK (P_DEFINED | P_IDENT(GPIO_PF2) | P_FUNCT(1))
+#define P_SPORT0_DTPRI (P_DEFINED | P_IDENT(GPIO_PF3) | P_FUNCT(1))
+#define P_SPORT0_TFS   (P_DEFINED | P_IDENT(GPIO_PF4) | P_FUNCT(1))
+#define P_SPORT0_TSCLK (P_DEFINED | P_IDENT(GPIO_PF5) | P_FUNCT(1))
+#define P_SPORT0_DTSEC (P_DEFINED | P_IDENT(GPIO_PF6) | P_FUNCT(1))
+#define P_SPORT0_DRSEC (P_DEFINED | P_IDENT(GPIO_PF7) | P_FUNCT(1))
+#else
+#define P_SPORT0_DTPRI (P_DEFINED | P_IDENT(GPIO_PG6) | P_FUNCT(0))
+#define P_SPORT0_DRSEC (P_DEFINED | P_IDENT(GPIO_PG3) | P_FUNCT(1))
+#define P_SPORT0_DTSEC (P_DEFINED | P_IDENT(GPIO_PG4) | P_FUNCT(1))
+#define P_SPORT0_DRPRI (P_DEFINED | P_IDENT(GPIO_PG7) | P_FUNCT(1))
+#define P_SPORT0_RFS   (P_DEFINED | P_IDENT(GPIO_PG8) | P_FUNCT(1))
+#define P_SPORT0_RSCLK (P_DEFINED | P_IDENT(GPIO_PG9) | P_FUNCT(1))
+#if !defined(CONFIG_BF527_SPORT0_TSCLK_PG14)
+#define P_SPORT0_TSCLK (P_DEFINED | P_IDENT(GPIO_PG10) | P_FUNCT(1))
+#else
+#define P_SPORT0_TSCLK (P_DEFINED | P_IDENT(GPIO_PG14) | P_FUNCT(0))
+#endif
+#define P_SPORT0_TFS   (P_DEFINED | P_IDENT(GPIO_PG15) | P_FUNCT(0))
+#endif
+
+#define P_SPORT1_DRPRI (P_DEFINED | P_IDENT(GPIO_PF8) | P_FUNCT(1))
+#define P_SPORT1_RSCLK (P_DEFINED | P_IDENT(GPIO_PF9) | P_FUNCT(1))
+#define P_SPORT1_RFS   (P_DEFINED | P_IDENT(GPIO_PF10) | P_FUNCT(1))
+#define P_SPORT1_TFS   (P_DEFINED | P_IDENT(GPIO_PF11) | P_FUNCT(1))
+#define P_SPORT1_DTPRI (P_DEFINED | P_IDENT(GPIO_PF12) | P_FUNCT(1))
+#define P_SPORT1_TSCLK (P_DEFINED | P_IDENT(GPIO_PF13) | P_FUNCT(1))
+#define P_SPORT1_DTSEC (P_DEFINED | P_IDENT(GPIO_PF14) | P_FUNCT(1))
+#define P_SPORT1_DRSEC (P_DEFINED | P_IDENT(GPIO_PF15) | P_FUNCT(1))
+
+#define P_SPI0_SSEL6   (P_DEFINED | P_IDENT(GPIO_PF9) | P_FUNCT(2))
+#define P_SPI0_SSEL7   (P_DEFINED | P_IDENT(GPIO_PF10) | P_FUNCT(2))
+
+#define P_SPI0_SSEL2   (P_DEFINED | P_IDENT(GPIO_PF12) | P_FUNCT(2))
+#define P_SPI0_SSEL3   (P_DEFINED | P_IDENT(GPIO_PF13) | P_FUNCT(2))
+
+#if !defined(CONFIG_BF527_UART1_PORTG)
+#define P_UART1_TX     (P_DEFINED | P_IDENT(GPIO_PF14) | P_FUNCT(2))
+#define P_UART1_RX     (P_DEFINED | P_IDENT(GPIO_PF15) | P_FUNCT(2))
+#else
+#define P_UART1_TX     (P_DEFINED | P_IDENT(GPIO_PG12) | P_FUNCT(1))
+#define P_UART1_RX     (P_DEFINED | P_IDENT(GPIO_PG13) | P_FUNCT(1))
+#endif
+
+#define P_CNT_CZM      (P_DEFINED | P_IDENT(GPIO_PF11) | P_FUNCT(3))
+#define P_CNT_CDG      (P_DEFINED | P_IDENT(GPIO_PF12) | P_FUNCT(3))
+#define P_CNT_CUD      (P_DEFINED | P_IDENT(GPIO_PF13) | P_FUNCT(3))
+
+#define P_HWAIT                (P_DONTCARE)
+
+#define GPIO_DEFAULT_BOOT_SPI_CS GPIO_PG1
+#define P_DEFAULT_BOOT_SPI_CS P_SPI0_SSEL1
+
+#define P_SPI0_SS      (P_DEFINED | P_IDENT(GPIO_PG1) | P_FUNCT(0))
+#define P_SPI0_SSEL1   (P_DEFINED | P_IDENT(GPIO_PG1) | P_FUNCT(2))
+#define P_SPI0_SCK     (P_DEFINED | P_IDENT(GPIO_PG2) | P_FUNCT(2))
+#define P_SPI0_MISO    (P_DEFINED | P_IDENT(GPIO_PG3) | P_FUNCT(2))
+#define P_SPI0_MOSI    (P_DEFINED | P_IDENT(GPIO_PG4) | P_FUNCT(2))
+#define P_TMR1         (P_DEFINED | P_IDENT(GPIO_PG5) | P_FUNCT(0))
+#define P_PPI0_FS2     (P_DEFINED | P_IDENT(GPIO_PG5) | P_FUNCT(0))
+#define P_TMR3         (P_DEFINED | P_IDENT(GPIO_PG7) | P_FUNCT(0))
+#define P_TMR4         (P_DEFINED | P_IDENT(GPIO_PG8) | P_FUNCT(0))
+#define P_TMR5         (P_DEFINED | P_IDENT(GPIO_PG9) | P_FUNCT(0))
+#define P_TMR6         (P_DEFINED | P_IDENT(GPIO_PG10) | P_FUNCT(0))
+/* #define P_TMR7              (P_DEFINED | P_IDENT(GPIO_PG11) | P_FUNCT(0)) */
+#define P_DMAR1                (P_DEFINED | P_IDENT(GPIO_PG12) | P_FUNCT(0))
+#define P_DMAR0                (P_DEFINED | P_IDENT(GPIO_PG13) | P_FUNCT(0))
+#define P_TMR2         (P_DEFINED | P_IDENT(GPIO_PG6) | P_FUNCT(1))
+#define P_TMR7         (P_DEFINED | P_IDENT(GPIO_PG11) | P_FUNCT(1))
+#define P_MDC          (P_DEFINED | P_IDENT(GPIO_PG14) | P_FUNCT(1))
+#define P_RMII0_MDINT  (P_DEFINED | P_IDENT(GPIO_PG15) | P_FUNCT(1))
+#define P_MII0_PHYINT  (P_DEFINED | P_IDENT(GPIO_PG15) | P_FUNCT(1))
+
+#define P_PPI0_FS3     (P_DEFINED | P_IDENT(GPIO_PG6) | P_FUNCT(2))
+#define P_UART0_TX     (P_DEFINED | P_IDENT(GPIO_PG7) | P_FUNCT(2))
+#define P_UART0_RX     (P_DEFINED | P_IDENT(GPIO_PG8) | P_FUNCT(2))
+
+#define P_HOST_WR      (P_DEFINED | P_IDENT(GPIO_PG11) | P_FUNCT(2))
+#define P_HOST_ACK     (P_DEFINED | P_IDENT(GPIO_PG12) | P_FUNCT(2))
+#define P_HOST_ADDR    (P_DEFINED | P_IDENT(GPIO_PG13) | P_FUNCT(2))
+#define P_HOST_RD      (P_DEFINED | P_IDENT(GPIO_PG14) | P_FUNCT(2))
+#define P_HOST_CE      (P_DEFINED | P_IDENT(GPIO_PG15) | P_FUNCT(2))
+
+#if defined(CONFIG_BF527_NAND_D_PORTF)
+#define P_NAND_D0      (P_DEFINED | P_IDENT(GPIO_PF0) | P_FUNCT(2))
+#define P_NAND_D1      (P_DEFINED | P_IDENT(GPIO_PF1) | P_FUNCT(2))
+#define P_NAND_D2      (P_DEFINED | P_IDENT(GPIO_PF2) | P_FUNCT(2))
+#define P_NAND_D3      (P_DEFINED | P_IDENT(GPIO_PF3) | P_FUNCT(2))
+#define P_NAND_D4      (P_DEFINED | P_IDENT(GPIO_PF4) | P_FUNCT(2))
+#define P_NAND_D5      (P_DEFINED | P_IDENT(GPIO_PF5) | P_FUNCT(2))
+#define P_NAND_D6      (P_DEFINED | P_IDENT(GPIO_PF6) | P_FUNCT(2))
+#define P_NAND_D7      (P_DEFINED | P_IDENT(GPIO_PF7) | P_FUNCT(2))
+#else /*if defined(CONFIG_BF527_NAND_D_PORTH)*/
+#define P_NAND_D0      (P_DEFINED | P_IDENT(GPIO_PH0) | P_FUNCT(0))
+#define P_NAND_D1      (P_DEFINED | P_IDENT(GPIO_PH1) | P_FUNCT(0))
+#define P_NAND_D2      (P_DEFINED | P_IDENT(GPIO_PH2) | P_FUNCT(0))
+#define P_NAND_D3      (P_DEFINED | P_IDENT(GPIO_PH3) | P_FUNCT(0))
+#define P_NAND_D4      (P_DEFINED | P_IDENT(GPIO_PH4) | P_FUNCT(0))
+#define P_NAND_D5      (P_DEFINED | P_IDENT(GPIO_PH5) | P_FUNCT(0))
+#define P_NAND_D6      (P_DEFINED | P_IDENT(GPIO_PH6) | P_FUNCT(0))
+#define P_NAND_D7      (P_DEFINED | P_IDENT(GPIO_PH7) | P_FUNCT(0))
+#endif
+
+#define P_SPI0_SSEL4   (P_DEFINED | P_IDENT(GPIO_PH8) | P_FUNCT(0))
+#define P_SPI0_SSEL5   (P_DEFINED | P_IDENT(GPIO_PH9) | P_FUNCT(0))
+#define P_NAND_CE      (P_DEFINED | P_IDENT(GPIO_PH10) | P_FUNCT(0))
+#define P_NAND_WE      (P_DEFINED | P_IDENT(GPIO_PH11) | P_FUNCT(0))
+#define P_NAND_RE      (P_DEFINED | P_IDENT(GPIO_PH12) | P_FUNCT(0))
+#define P_NAND_RB      (P_DEFINED | P_IDENT(GPIO_PH13) | P_FUNCT(0))
+#define P_NAND_CLE     (P_DEFINED | P_IDENT(GPIO_PH14) | P_FUNCT(0))
+#define P_NAND_ALE     (P_DEFINED | P_IDENT(GPIO_PH15) | P_FUNCT(0))
+
+#define P_HOST_D0      (P_DEFINED | P_IDENT(GPIO_PH0) | P_FUNCT(2))
+#define P_HOST_D1      (P_DEFINED | P_IDENT(GPIO_PH1) | P_FUNCT(2))
+#define P_HOST_D2      (P_DEFINED | P_IDENT(GPIO_PH2) | P_FUNCT(2))
+#define P_HOST_D3      (P_DEFINED | P_IDENT(GPIO_PH3) | P_FUNCT(2))
+#define P_HOST_D4      (P_DEFINED | P_IDENT(GPIO_PH4) | P_FUNCT(2))
+#define P_HOST_D5      (P_DEFINED | P_IDENT(GPIO_PH5) | P_FUNCT(2))
+#define P_HOST_D6      (P_DEFINED | P_IDENT(GPIO_PH6) | P_FUNCT(2))
+#define P_HOST_D7      (P_DEFINED | P_IDENT(GPIO_PH7) | P_FUNCT(2))
+#define P_HOST_D8      (P_DEFINED | P_IDENT(GPIO_PH8) | P_FUNCT(2))
+#define P_HOST_D9      (P_DEFINED | P_IDENT(GPIO_PH9) | P_FUNCT(2))
+#define P_HOST_D10     (P_DEFINED | P_IDENT(GPIO_PH10) | P_FUNCT(2))
+#define P_HOST_D11     (P_DEFINED | P_IDENT(GPIO_PH11) | P_FUNCT(2))
+#define P_HOST_D12     (P_DEFINED | P_IDENT(GPIO_PH12) | P_FUNCT(2))
+#define P_HOST_D13     (P_DEFINED | P_IDENT(GPIO_PH13) | P_FUNCT(2))
+#define P_HOST_D14     (P_DEFINED | P_IDENT(GPIO_PH14) | P_FUNCT(2))
+#define P_HOST_D15     (P_DEFINED | P_IDENT(GPIO_PH15) | P_FUNCT(2))
+
+#define P_MII0_ETxD0   (P_DEFINED | P_IDENT(GPIO_PH5) | P_FUNCT(1))
+#define P_MII0_ETxD1   (P_DEFINED | P_IDENT(GPIO_PH7) | P_FUNCT(1))
+#define P_MII0_ETxD2   (P_DEFINED | P_IDENT(GPIO_PH9) | P_FUNCT(1))
+#define P_MII0_ETxD3   (P_DEFINED | P_IDENT(GPIO_PH11) | P_FUNCT(1))
+#define P_MII0_ETxEN   (P_DEFINED | P_IDENT(GPIO_PH3) | P_FUNCT(1))
+#define P_MII0_TxCLK   (P_DEFINED | P_IDENT(GPIO_PH4) | P_FUNCT(1))
+#define P_MII0_COL     (P_DEFINED | P_IDENT(GPIO_PH15) | P_FUNCT(1))
+#define P_MII0_ERxD0   (P_DEFINED | P_IDENT(GPIO_PH6) | P_FUNCT(1))
+#define P_MII0_ERxD1   (P_DEFINED | P_IDENT(GPIO_PH8) | P_FUNCT(1))
+#define P_MII0_ERxD2   (P_DEFINED | P_IDENT(GPIO_PH10) | P_FUNCT(1))
+#define P_MII0_ERxD3   (P_DEFINED | P_IDENT(GPIO_PH12) | P_FUNCT(1))
+#define P_MII0_ERxDV   (P_DEFINED | P_IDENT(GPIO_PH14) | P_FUNCT(1))
+#define P_MII0_ERxCLK  (P_DEFINED | P_IDENT(GPIO_PH13) | P_FUNCT(1))
+#define P_MII0_ERxER   (P_DEFINED | P_IDENT(GPIO_PH1) | P_FUNCT(1))
+#define P_MII0_CRS     (P_DEFINED | P_IDENT(GPIO_PH0) | P_FUNCT(1))
+#define P_RMII0_REF_CLK        (P_DEFINED | P_IDENT(GPIO_PH4) | P_FUNCT(1))
+#define P_RMII0_CRS_DV (P_DEFINED | P_IDENT(GPIO_PH0) | P_FUNCT(1))
+#define P_MDIO         (P_DEFINED | P_IDENT(GPIO_PH2) | P_FUNCT(1))
+
+#define P_TWI0_SCL     (P_DONTCARE)
+#define P_TWI0_SDA     (P_DONTCARE)
+#define P_PPI0_FS1     (P_DONTCARE)
+#define P_TMR0         (P_DONTCARE)
+#define P_TMRCLK       (P_DONTCARE)
+#define P_PPI0_CLK     (P_DONTCARE)
+
+#define P_MII0 {\
+       P_MII0_ETxD0, \
+       P_MII0_ETxD1, \
+       P_MII0_ETxD2, \
+       P_MII0_ETxD3, \
+       P_MII0_ETxEN, \
+       P_MII0_TxCLK, \
+       P_MII0_PHYINT, \
+       P_MII0_COL, \
+       P_MII0_ERxD0, \
+       P_MII0_ERxD1, \
+       P_MII0_ERxD2, \
+       P_MII0_ERxD3, \
+       P_MII0_ERxDV, \
+       P_MII0_ERxCLK, \
+       P_MII0_ERxER, \
+       P_MII0_CRS, \
+       P_MDC, \
+       P_MDIO, 0}
+
+#define P_RMII0 {\
+       P_MII0_ETxD0, \
+       P_MII0_ETxD1, \
+       P_MII0_ETxEN, \
+       P_MII0_ERxD0, \
+       P_MII0_ERxD1, \
+       P_MII0_ERxER, \
+       P_RMII0_REF_CLK, \
+       P_RMII0_MDINT, \
+       P_RMII0_CRS_DV, \
+       P_MDC, \
+       P_MDIO, 0}
+
+#endif                         /* _MACH_PORTMUX_H_ */
index c98747f6fab2b4bd1e3aee058d86b191c7810993..78f8721879180f72c630755455573be016dca955 100644 (file)
@@ -1,9 +1,13 @@
 /*
- * File: include/asm-blackfin/mach-bf533/anomaly.h
- * Bugs: Enter bugs at http://blackfin.uclinux.org/
+ * DO NOT EDIT THIS FILE
+ * This file is under version control at
+ *   svn://sources.blackfin.uclinux.org/toolchain/trunk/proc-defs/header-frags/
+ * and can be replaced with that version at any time
+ * DO NOT EDIT THIS FILE
  *
- * Copyright (C) 2004-2009 Analog Devices Inc.
- * Licensed under the GPL-2 or later.
+ * Copyright 2004-2010 Analog Devices Inc.
+ * Licensed under the ADI BSD license.
+ *   https://docs.blackfin.uclinux.org/doku.php?id=adi_bsd
  */
 
 /* This file should be up to date with:
@@ -34,7 +38,7 @@
 # define ANOMALY_BF533 0
 #endif
 
-/* Multi-issue instruction with dsp32shiftimm in slot1 and P-reg store in slot 2 not supported */
+/* Multi-Issue Instruction with dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported */
 #define ANOMALY_05000074 (1)
 /* UART Line Status Register (UART_LSR) Bits Are Not Updated at the Same Time */
 #define ANOMALY_05000099 (__SILICON_REVISION__ < 5)
@@ -46,7 +50,7 @@
 #define ANOMALY_05000122 (1)
 /* Instruction DMA Can Cause Data Cache Fills to Fail (Boot Implications) */
 #define ANOMALY_05000158 (__SILICON_REVISION__ < 5)
-/* PPI Data Lengths Between 8 and 16 Do Not Zero Out Upper Bits */
+/* PPI Data Lengths between 8 and 16 Do Not Zero Out Upper Bits */
 #define ANOMALY_05000166 (1)
 /* Turning SPORTs on while External Frame Sync Is Active May Corrupt Data */
 #define ANOMALY_05000167 (1)
 #define ANOMALY_05000180 (1)
 /* Timer Pin Limitations for PPI TX Modes with External Frame Syncs */
 #define ANOMALY_05000183 (__SILICON_REVISION__ < 4)
-/* False Protection Exceptions */
+/* False Protection Exceptions when Speculative Fetch Is Cancelled */
 #define ANOMALY_05000189 (__SILICON_REVISION__ < 4)
 /* False I/O Pin Interrupts on Edge-Sensitive Inputs When Polarity Setting Is Changed */
 #define ANOMALY_05000193 (__SILICON_REVISION__ < 4)
 /* Restarting SPORT in Specific Modes May Cause Data Corruption */
 #define ANOMALY_05000194 (__SILICON_REVISION__ < 4)
-/* Failing MMR Accesses When Stalled by Preceding Memory Read */
+/* Failing MMR Accesses when Preceding Memory Read Stalls */
 #define ANOMALY_05000198 (__SILICON_REVISION__ < 5)
 /* Current DMA Address Shows Wrong Value During Carry Fix */
 #define ANOMALY_05000199 (__SILICON_REVISION__ < 4)
@@ -74,7 +78,7 @@
 #define ANOMALY_05000202 (__SILICON_REVISION__ < 5)
 /* Specific Sequence That Can Cause DMA Error or DMA Stopping */
 #define ANOMALY_05000203 (__SILICON_REVISION__ < 4)
-/* Incorrect data read with write-through cache and allocate cache lines on reads only mode */
+/* Incorrect Data Read with Writethrough "Allocate Cache Lines on Reads Only" Cache Mode */
 #define ANOMALY_05000204 (__SILICON_REVISION__ < 4 && ANOMALY_BF533)
 /* Recovery from "Brown-Out" Condition */
 #define ANOMALY_05000207 (__SILICON_REVISION__ < 4)
 #define ANOMALY_05000244 (__SILICON_REVISION__ < 5)
 /* False Hardware Error from an Access in the Shadow of a Conditional Branch */
 #define ANOMALY_05000245 (1)
-/* Data CPLBs Should Prevent Spurious Hardware Errors */
+/* Data CPLBs Should Prevent False Hardware Errors */
 #define ANOMALY_05000246 (__SILICON_REVISION__ < 5)
 /* Incorrect Bit Shift of Data Word in Multichannel (TDM) Mode in Certain Conditions */
 #define ANOMALY_05000250 (__SILICON_REVISION__ == 4)
 #define ANOMALY_05000277 (__SILICON_REVISION__ < 6)
 /* Disabling Peripherals with DMA Running May Cause DMA System Instability */
 #define ANOMALY_05000278 (__SILICON_REVISION__ < 6)
-/* False Hardware Error Exception When ISR Context Is Not Restored */
+/* False Hardware Error Exception when ISR Context Is Not Restored */
 #define ANOMALY_05000281 (__SILICON_REVISION__ < 6)
 /* Memory DMA Corruption with 32-Bit Data and Traffic Control */
 #define ANOMALY_05000282 (__SILICON_REVISION__ < 6)
-/* System MMR Write Is Stalled Indefinitely When Killed in a Particular Stage */
+/* System MMR Write Is Stalled Indefinitely when Killed in a Particular Stage */
 #define ANOMALY_05000283 (__SILICON_REVISION__ < 6)
 /* SPORTs May Receive Bad Data If FIFOs Fill Up */
 #define ANOMALY_05000288 (__SILICON_REVISION__ < 6)
 /* Memory-To-Memory DMA Source/Destination Descriptors Must Be in Same Memory Space */
 #define ANOMALY_05000301 (__SILICON_REVISION__ < 6)
-/* SSYNCs After Writes To DMA MMR Registers May Not Be Handled Correctly */
+/* SSYNCs after Writes to DMA MMR Registers May Not Be Handled Correctly */
 #define ANOMALY_05000302 (__SILICON_REVISION__ < 5)
 /* SPORT_HYS Bit in PLL_CTL Register Is Not Functional */
 #define ANOMALY_05000305 (__SILICON_REVISION__ < 5)
-/* New Feature: Additional PPI Frame Sync Sampling Options (Not Available On Older Silicon) */
+/* ALT_TIMING Bit in PPI_CONTROL Register Is Not Functional */
 #define ANOMALY_05000306 (__SILICON_REVISION__ < 5)
 /* SCKELOW Bit Does Not Maintain State Through Hibernate */
 #define ANOMALY_05000307 (1)   /* note: brokenness is noted in documentation, not anomaly sheet */
 #define ANOMALY_05000310 (1)
 /* Erroneous Flag (GPIO) Pin Operations under Specific Sequences */
 #define ANOMALY_05000311 (__SILICON_REVISION__ < 6)
-/* Errors When SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted */
+/* Errors when SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted */
 #define ANOMALY_05000312 (__SILICON_REVISION__ < 6)
 /* PPI Is Level-Sensitive on First Transfer In Single Frame Sync Modes */
 #define ANOMALY_05000313 (__SILICON_REVISION__ < 6)
-/* Killed System MMR Write Completes Erroneously On Next System MMR Access */
+/* Killed System MMR Write Completes Erroneously on Next System MMR Access */
 #define ANOMALY_05000315 (__SILICON_REVISION__ < 6)
 /* Internal Voltage Regulator Values of 1.05V, 1.10V and 1.15V Not Allowed for LQFP Packages */
 #define ANOMALY_05000319 ((ANOMALY_BF531 || ANOMALY_BF532) && __SILICON_REVISION__ < 6)
 #define ANOMALY_05000426 (1)
 /* IFLUSH Instruction at End of Hardware Loop Causes Infinite Stall */
 #define ANOMALY_05000443 (1)
+/* False Hardware Error when RETI Points to Invalid Memory */
+#define ANOMALY_05000461 (1)
+/* Interrupted 32-Bit SPORT Data Register Access Results In Underflow */
+#define ANOMALY_05000473 (1)
+/* Possible Lockup Condition whem Modifying PLL from External Memory */
+#define ANOMALY_05000475 (1)
+/* TESTSET Instruction Cannot Be Interrupted */
+#define ANOMALY_05000477 (1)
+/* Reads of ITEST_COMMAND and ITEST_DATA Registers Cause Cache Corruption */
+#define ANOMALY_05000481 (1)
+/* IFLUSH sucks at life */
+#define ANOMALY_05000491 (1)
 
 /* These anomalies have been "phased" out of analog.com anomaly sheets and are
  * here to show running on older silicon just isn't feasible.
 #define ANOMALY_05000070 (__SILICON_REVISION__ < 2)
 /* Writing FIO_DIR can corrupt a programmable flag's data */
 #define ANOMALY_05000079 (__SILICON_REVISION__ < 2)
-/* Timer Auto-Baud Mode requires the UART clock to be enabled */
+/* Timer Auto-Baud Mode requires the UART clock to be enabled. */
 #define ANOMALY_05000086 (__SILICON_REVISION__ < 2)
 /* Internal Clocking Modes on SPORT0 not supported */
 #define ANOMALY_05000088 (__SILICON_REVISION__ < 2)
 /* Internal voltage regulator does not wake up from an RTC wakeup */
 #define ANOMALY_05000092 (__SILICON_REVISION__ < 2)
-/* The IFLUSH instruction must be preceded by a CSYNC instruction */
+/* The IFLUSH Instruction Must Be Preceded by a CSYNC Instruction */
 #define ANOMALY_05000093 (__SILICON_REVISION__ < 2)
-/* Vectoring to an instruction that is presently being filled into the instruction cache may cause erroneous behavior */
+/* Vectoring to instruction that is being filled into the i-cache may cause erroneous behavior */
 #define ANOMALY_05000095 (__SILICON_REVISION__ < 2)
-/* PREFETCH, FLUSH, and FLUSHINV must be followed by a CSYNC */
+/* PREFETCH, FLUSH, and FLUSHINV Instructions Must Be Followed by a CSYNC Instruction */
 #define ANOMALY_05000096 (__SILICON_REVISION__ < 2)
 /* Performance Monitor 0 and 1 are swapped when monitoring memory events */
 #define ANOMALY_05000097 (__SILICON_REVISION__ < 2)
 #define ANOMALY_05000100 (__SILICON_REVISION__ < 2)
 /* Reading X_MODIFY or Y_MODIFY while DMA channel is active */
 #define ANOMALY_05000101 (__SILICON_REVISION__ < 2)
-/* Descriptor-based MemDMA may lock up with 32-bit transfers or if transfers span 64KB buffers */
+/* Descriptor MemDMA may lock up with 32-bit transfers or if transfers span 64KB buffers */
 #define ANOMALY_05000102 (__SILICON_REVISION__ < 2)
-/* Incorrect value written to the cycle counters */
+/* Incorrect Value Written to the Cycle Counters */
 #define ANOMALY_05000103 (__SILICON_REVISION__ < 2)
-/* Stores to L1 Data memory incorrect when a specific sequence is followed */
+/* Stores to L1 Data Memory Incorrect when a Specific Sequence Is Followed */
 #define ANOMALY_05000104 (__SILICON_REVISION__ < 2)
 /* Programmable Flag (PF3) functionality not supported in all PPI modes */
 #define ANOMALY_05000106 (__SILICON_REVISION__ < 2)
 /* Data store can be lost when targeting a cache line fill */
 #define ANOMALY_05000107 (__SILICON_REVISION__ < 2)
-/* Reserved bits in SYSCFG register not set at power on */
+/* Reserved Bits in SYSCFG Register Not Set at Power-On */
 #define ANOMALY_05000109 (__SILICON_REVISION__ < 3)
 /* Infinite Core Stall */
 #define ANOMALY_05000114 (__SILICON_REVISION__ < 2)
-/* PPI_FSx may glitch when generated by the on chip Timers */
+/* PPI_FSx may glitch when generated by the on chip Timers. */
 #define ANOMALY_05000115 (__SILICON_REVISION__ < 2)
-/* Trace Buffers may record discontinuities into emulation mode and/or exception, NMI, reset handlers */
+/* Trace Buffers May Contain Errors in Emulation Mode and/or Exception, NMI, Reset Handlers */
 #define ANOMALY_05000116 (__SILICON_REVISION__ < 3)
 /* DTEST registers allow access to Data Cache when DTEST_COMMAND< 14 >= 0 */
 #define ANOMALY_05000117 (__SILICON_REVISION__ < 2)
 /* Booting from an 8-bit or 24-bit Addressable SPI device is not supported */
 #define ANOMALY_05000118 (__SILICON_REVISION__ < 2)
-/* DTEST_COMMAND initiated memory access may be incorrect if data cache or DMA is active */
+/* DTEST_COMMAND Initiated Memory Access May Be Incorrect If Data Cache or DMA Is Active */
 #define ANOMALY_05000123 (__SILICON_REVISION__ < 3)
 /* DMA Lock-up at CCLK to SCLK ratios of 4:1, 2:1, or 1:1 */
 #define ANOMALY_05000124 (__SILICON_REVISION__ < 3)
-/* Erroneous exception when enabling cache */
+/* Erroneous Exception when Enabling Cache */
 #define ANOMALY_05000125 (__SILICON_REVISION__ < 3)
 /* SPI clock polarity and phase bits incorrect during booting */
 #define ANOMALY_05000126 (__SILICON_REVISION__ < 3)
-/* DMEM_CONTROL is not set on Reset */
+/* DMEM_CONTROL<12> Is Not Set on Reset */
 #define ANOMALY_05000137 (__SILICON_REVISION__ < 3)
 /* SPI boot will not complete if there is a zero fill block in the loader file */
 #define ANOMALY_05000138 (__SILICON_REVISION__ == 2)
-/* Timerx_Config must be set for using the PPI in GP output mode with internal Frame Syncs */
+/* TIMERx_CONFIG[5] must be set for PPI in GP output mode with internal Frame Syncs */
 #define ANOMALY_05000139 (__SILICON_REVISION__ < 2)
 /* Allowing the SPORT RX FIFO to fill will cause an overflow */
 #define ANOMALY_05000140 (__SILICON_REVISION__ < 3)
-/* An Infinite Stall occurs with a particular sequence of consecutive dual dag events */
+/* Infinite Stall may occur with a particular sequence of consecutive dual dag events */
 #define ANOMALY_05000141 (__SILICON_REVISION__ < 3)
 /* Interrupts may be lost when a programmable input flag is configured to be edge sensitive */
 #define ANOMALY_05000142 (__SILICON_REVISION__ < 3)
 #define ANOMALY_05000146 (__SILICON_REVISION__ < 3)
 /* Source MDMA descriptor may stop with a DMA Error near beginning of descriptor fetch */
 #define ANOMALY_05000147 (__SILICON_REVISION__ < 3)
-/* When booting from a 16-bit asynchronous memory device, the upper 8-bits of each word must be 0x00 */
+/* When booting from 16-bit asynchronous memory, the upper 8 bits of each word must be 0x00 */
 #define ANOMALY_05000148 (__SILICON_REVISION__ < 3)
 /* Frame Delay in SPORT Multichannel Mode */
 #define ANOMALY_05000153 (__SILICON_REVISION__ < 3)
 #define ANOMALY_05000154 (__SILICON_REVISION__ < 3)
 /* Timer1 can not be used for PWMOUT mode when a certain PPI mode is in use */
 #define ANOMALY_05000155 (__SILICON_REVISION__ < 3)
-/* Killed 32-bit MMR write leads to next system MMR access thinking it should be 32-bit */
+/* Killed 32-Bit MMR Write Leads to Next System MMR Access Thinking It Should Be 32-Bit */
 #define ANOMALY_05000157 (__SILICON_REVISION__ < 3)
-/* SPORT transmit data is not gated by external frame sync in certain conditions */
+/* SPORT Transmit Data Is Not Gated by External Frame Sync in Certain Conditions */
 #define ANOMALY_05000163 (__SILICON_REVISION__ < 3)
-/* SDRAM auto-refresh and subsequent Power Ups */
+/* Undefined Behavior when Power-Up Sequence Is Issued to SDRAM during Auto-Refresh */
 #define ANOMALY_05000168 (__SILICON_REVISION__ < 3)
-/* DATA CPLB page miss can result in lost write-through cache data writes */
+/* DATA CPLB Page Miss Can Result in Lost Write-Through Data Cache Writes */
 #define ANOMALY_05000169 (__SILICON_REVISION__ < 3)
 /* DMA vs Core accesses to external memory */
 #define ANOMALY_05000173 (__SILICON_REVISION__ < 3)
 #define ANOMALY_05000174 (__SILICON_REVISION__ < 3)
 /* Overlapping Sequencer and Memory Stalls */
 #define ANOMALY_05000175 (__SILICON_REVISION__ < 3)
-/* Multiplication of (-1) by (-1) followed by an accumulator saturation */
+/* Overflow Bit Asserted when Multiplication of -1 by -1 Followed by Accumulator Saturation */
 #define ANOMALY_05000176 (__SILICON_REVISION__ < 3)
-/* Disabling the PPI resets the PPI configuration registers */
+/* Disabling the PPI Resets the PPI Configuration Registers */
 #define ANOMALY_05000181 (__SILICON_REVISION__ < 3)
-/* PPI TX Mode with 2 External Frame Syncs */
+/* Early PPI Transmit when FS1 Asserts before FS2 in TX Mode with 2 External Frame Syncs */
 #define ANOMALY_05000185 (__SILICON_REVISION__ < 3)
 /* PPI does not invert the Driving PPICLK edge in Transmit Modes */
 #define ANOMALY_05000191 (__SILICON_REVISION__ < 3)
-/* In PPI Transmit Modes with External Frame Syncs POLC */
+/* In PPI Transmit Modes with External Frame Syncs POLC bit must be set to 1 */
 #define ANOMALY_05000192 (__SILICON_REVISION__ < 3)
 /* Internal Voltage Regulator may not start up */
 #define ANOMALY_05000206 (__SILICON_REVISION__ < 3)
 
 /* Anomalies that don't exist on this proc */
+#define ANOMALY_05000120 (0)
+#define ANOMALY_05000149 (0)
 #define ANOMALY_05000171 (0)
+#define ANOMALY_05000182 (0)
+#define ANOMALY_05000220 (0)
+#define ANOMALY_05000248 (0)
 #define ANOMALY_05000266 (0)
+#define ANOMALY_05000274 (0)
+#define ANOMALY_05000287 (0)
 #define ANOMALY_05000323 (0)
 #define ANOMALY_05000353 (1)
 #define ANOMALY_05000362 (1)
+#define ANOMALY_05000364 (0)
 #define ANOMALY_05000380 (0)
 #define ANOMALY_05000386 (1)
+#define ANOMALY_05000389 (0)
 #define ANOMALY_05000412 (0)
 #define ANOMALY_05000430 (0)
 #define ANOMALY_05000432 (0)
 #define ANOMALY_05000435 (0)
 #define ANOMALY_05000447 (0)
 #define ANOMALY_05000448 (0)
+#define ANOMALY_05000456 (0)
+#define ANOMALY_05000450 (0)
+#define ANOMALY_05000465 (0)
+#define ANOMALY_05000467 (0)
+#define ANOMALY_05000474 (0)
+#define ANOMALY_05000485 (0)
 
 #endif
index 14c111f712a246970608ced63d4dd11d87ecfcbe..c545b545136b78c047dc892f23eb9fa6219d43ad 100644 (file)
@@ -1 +1,5 @@
+#include "gpio.h"
+#include "portmux.h"
 #include "ports.h"
+
+#define BF533_FAMILY 1 /* Linux glue */
diff --git a/arch/blackfin/include/asm/mach-bf533/gpio.h b/arch/blackfin/include/asm/mach-bf533/gpio.h
new file mode 100644 (file)
index 0000000..e02416d
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2008 Analog Devices Inc.
+ * Licensed under the GPL-2 or later.
+ */
+
+
+#ifndef _MACH_GPIO_H_
+#define _MACH_GPIO_H_
+
+#define MAX_BLACKFIN_GPIOS 16
+
+#define GPIO_PF0       0
+#define GPIO_PF1       1
+#define GPIO_PF2       2
+#define GPIO_PF3       3
+#define GPIO_PF4       4
+#define GPIO_PF5       5
+#define GPIO_PF6       6
+#define GPIO_PF7       7
+#define GPIO_PF8       8
+#define GPIO_PF9       9
+#define GPIO_PF10      10
+#define GPIO_PF11      11
+#define GPIO_PF12      12
+#define GPIO_PF13      13
+#define GPIO_PF14      14
+#define GPIO_PF15      15
+
+#define PORT_F GPIO_PF0
+
+#endif /* _MACH_GPIO_H_ */
diff --git a/arch/blackfin/include/asm/mach-bf533/portmux.h b/arch/blackfin/include/asm/mach-bf533/portmux.h
new file mode 100644 (file)
index 0000000..96f5d91
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2007-2009 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later
+ */
+
+#ifndef _MACH_PORTMUX_H_
+#define _MACH_PORTMUX_H_
+
+#define MAX_RESOURCES  MAX_BLACKFIN_GPIOS
+
+#define P_PPI0_CLK     (P_DONTCARE)
+#define P_PPI0_FS1     (P_DONTCARE)
+#define P_PPI0_FS2     (P_DONTCARE)
+#define P_PPI0_FS3     (P_DEFINED | P_IDENT(GPIO_PF3))
+#define P_PPI0_D15     (P_DEFINED | P_IDENT(GPIO_PF4))
+#define P_PPI0_D14     (P_DEFINED | P_IDENT(GPIO_PF5))
+#define P_PPI0_D13     (P_DEFINED | P_IDENT(GPIO_PF6))
+#define P_PPI0_D12     (P_DEFINED | P_IDENT(GPIO_PF7))
+#define P_PPI0_D11     (P_DEFINED | P_IDENT(GPIO_PF8))
+#define P_PPI0_D10     (P_DEFINED | P_IDENT(GPIO_PF9))
+#define P_PPI0_D9      (P_DEFINED | P_IDENT(GPIO_PF10))
+#define P_PPI0_D8      (P_DEFINED | P_IDENT(GPIO_PF11))
+#define P_PPI0_D0      (P_DONTCARE)
+#define P_PPI0_D1      (P_DONTCARE)
+#define P_PPI0_D2      (P_DONTCARE)
+#define P_PPI0_D3      (P_DONTCARE)
+#define P_PPI0_D4      (P_DEFINED | P_IDENT(GPIO_PF15))
+#define P_PPI0_D5      (P_DEFINED | P_IDENT(GPIO_PF14))
+#define P_PPI0_D6      (P_DEFINED | P_IDENT(GPIO_PF13))
+#define P_PPI0_D7      (P_DEFINED | P_IDENT(GPIO_PF12))
+
+#define P_SPORT1_TSCLK (P_DONTCARE)
+#define P_SPORT1_RSCLK (P_DONTCARE)
+#define P_SPORT0_TSCLK (P_DONTCARE)
+#define P_SPORT0_RSCLK (P_DONTCARE)
+#define P_UART0_RX     (P_DONTCARE)
+#define P_UART0_TX     (P_DONTCARE)
+#define P_SPORT1_DRSEC (P_DONTCARE)
+#define P_SPORT1_RFS   (P_DONTCARE)
+#define P_SPORT1_DTPRI (P_DONTCARE)
+#define P_SPORT1_DTSEC (P_DONTCARE)
+#define P_SPORT1_TFS   (P_DONTCARE)
+#define P_SPORT1_DRPRI (P_DONTCARE)
+#define P_SPORT0_DRSEC (P_DONTCARE)
+#define P_SPORT0_RFS   (P_DONTCARE)
+#define P_SPORT0_DTPRI (P_DONTCARE)
+#define P_SPORT0_DTSEC (P_DONTCARE)
+#define P_SPORT0_TFS   (P_DONTCARE)
+#define P_SPORT0_DRPRI (P_DONTCARE)
+
+#define P_SPI0_MOSI    (P_DONTCARE)
+#define P_SPI0_MISO    (P_DONTCARE)
+#define P_SPI0_SCK     (P_DONTCARE)
+#define P_SPI0_SSEL7   (P_DEFINED | P_IDENT(GPIO_PF7))
+#define P_SPI0_SSEL6   (P_DEFINED | P_IDENT(GPIO_PF6))
+#define P_SPI0_SSEL5   (P_DEFINED | P_IDENT(GPIO_PF5))
+#define P_SPI0_SSEL4   (P_DEFINED | P_IDENT(GPIO_PF4))
+#define P_SPI0_SSEL3   (P_DEFINED | P_IDENT(GPIO_PF3))
+#define P_SPI0_SSEL2   (P_DEFINED | P_IDENT(GPIO_PF2))
+#define P_SPI0_SSEL1   (P_DEFINED | P_IDENT(GPIO_PF1))
+#define P_SPI0_SS      (P_DEFINED | P_IDENT(GPIO_PF0))
+#define GPIO_DEFAULT_BOOT_SPI_CS GPIO_PF2
+#define P_DEFAULT_BOOT_SPI_CS P_SPI0_SSEL2
+
+#define P_TMR2         (P_DONTCARE)
+#define P_TMR1         (P_DONTCARE)
+#define P_TMR0         (P_DONTCARE)
+#define P_TMRCLK       (P_DEFINED | P_IDENT(GPIO_PF1))
+
+#endif /* _MACH_PORTMUX_H_ */
index b7f1a3f301a9011ee7d69613e39dfa9249a78708..43df6afd22ad71c2fca56d00e708f7493204605b 100644 (file)
@@ -1,9 +1,13 @@
 /*
- * File: include/asm-blackfin/mach-bf537/anomaly.h
- * Bugs: Enter bugs at http://blackfin.uclinux.org/
+ * DO NOT EDIT THIS FILE
+ * This file is under version control at
+ *   svn://sources.blackfin.uclinux.org/toolchain/trunk/proc-defs/header-frags/
+ * and can be replaced with that version at any time
+ * DO NOT EDIT THIS FILE
  *
- * Copyright (C) 2004-2009 Analog Devices Inc.
- * Licensed under the GPL-2 or later.
+ * Copyright 2004-2010 Analog Devices Inc.
+ * Licensed under the ADI BSD license.
+ *   https://docs.blackfin.uclinux.org/doku.php?id=adi_bsd
  */
 
 /* This file should be up to date with:
 # define ANOMALY_BF537 0
 #endif
 
-/* Multi-issue instruction with dsp32shiftimm in slot1 and P-reg store in slot 2 not supported */
+/* Multi-Issue Instruction with dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported */
 #define ANOMALY_05000074 (1)
 /* DMA_RUN Bit Is Not Valid after a Peripheral Receive Channel DMA Stops */
 #define ANOMALY_05000119 (1)
 /* Rx.H Cannot Be Used to Access 16-bit System MMR Registers */
 #define ANOMALY_05000122 (1)
-/* Killed 32-bit MMR write leads to next system MMR access thinking it should be 32-bit */
+/* Killed 32-Bit MMR Write Leads to Next System MMR Access Thinking It Should Be 32-Bit */
 #define ANOMALY_05000157 (__SILICON_REVISION__ < 2)
 /* PPI_DELAY Not Functional in PPI Modes with 0 Frame Syncs */
 #define ANOMALY_05000180 (1)
 #define ANOMALY_05000244 (__SILICON_REVISION__ < 3)
 /* False Hardware Error from an Access in the Shadow of a Conditional Branch */
 #define ANOMALY_05000245 (1)
-/* CLKIN Buffer Output Enable Reset Behavior Is Changed */
+/* Buffered CLKIN Output Is Disabled by Default */
 #define ANOMALY_05000247 (1)
 /* Incorrect Bit Shift of Data Word in Multichannel (TDM) Mode in Certain Conditions */
 #define ANOMALY_05000250 (__SILICON_REVISION__ < 3)
-/* EMAC Tx DMA error after an early frame abort */
+/* EMAC TX DMA Error After an Early Frame Abort */
 #define ANOMALY_05000252 (__SILICON_REVISION__ < 3)
 /* Maximum External Clock Speed for Timers */
 #define ANOMALY_05000253 (__SILICON_REVISION__ < 3)
@@ -62,7 +66,7 @@
 #define ANOMALY_05000254 (__SILICON_REVISION__ > 2)
 /* Entering Hibernate State with RTC Seconds Interrupt Not Functional */
 #define ANOMALY_05000255 (__SILICON_REVISION__ < 3)
-/* EMAC MDIO input latched on wrong MDC edge */
+/* EMAC MDIO Input Latched on Wrong MDC Edge */
 #define ANOMALY_05000256 (__SILICON_REVISION__ < 3)
 /* Interrupt/Exception During Short Hardware Loop May Cause Bad Instruction Fetches */
 #define ANOMALY_05000257 (__SILICON_REVISION__ < 3)
@@ -80,7 +84,7 @@
 #define ANOMALY_05000264 (__SILICON_REVISION__ < 3)
 /* Sensitivity To Noise with Slow Input Edge Rates on External SPORT TX and RX Clocks */
 #define ANOMALY_05000265 (1)
-/* Memory DMA error when peripheral DMA is running with non-zero DEB_TRAFFIC_PERIOD */
+/* Memory DMA Error when Peripheral DMA Is Running with Non-Zero DEB_TRAFFIC_PERIOD */
 #define ANOMALY_05000268 (__SILICON_REVISION__ < 3)
 /* High I/O Activity Causes Output Voltage of Internal Voltage Regulator (Vddint) to Decrease */
 #define ANOMALY_05000270 (__SILICON_REVISION__ < 3)
 #define ANOMALY_05000277 (__SILICON_REVISION__ < 3)
 /* Disabling Peripherals with DMA Running May Cause DMA System Instability */
 #define ANOMALY_05000278 (((ANOMALY_BF536 || ANOMALY_BF537) && __SILICON_REVISION__ < 3) || (ANOMALY_BF534 && __SILICON_REVISION__ < 2))
-/* SPI Master boot mode does not work well with Atmel Data flash devices */
+/* SPI Master Boot Mode Does Not Work Well with Atmel Data Flash Devices */
 #define ANOMALY_05000280 (1)
-/* False Hardware Error Exception When ISR Context Is Not Restored */
+/* False Hardware Error Exception when ISR Context Is Not Restored */
 #define ANOMALY_05000281 (__SILICON_REVISION__ < 3)
 /* Memory DMA Corruption with 32-Bit Data and Traffic Control */
 #define ANOMALY_05000282 (__SILICON_REVISION__ < 3)
-/* System MMR Write Is Stalled Indefinitely When Killed in a Particular Stage */
+/* System MMR Write Is Stalled Indefinitely when Killed in a Particular Stage */
 #define ANOMALY_05000283 (__SILICON_REVISION__ < 3)
-/* New Feature: EMAC TX DMA Word Alignment (Not Available On Older Silicon) */
+/* TXDWA Bit in EMAC_SYSCTL Register Is Not Functional */
 #define ANOMALY_05000285 (__SILICON_REVISION__ < 3)
 /* SPORTs May Receive Bad Data If FIFOs Fill Up */
 #define ANOMALY_05000288 (__SILICON_REVISION__ < 3)
 #define ANOMALY_05000305 (__SILICON_REVISION__ < 3)
 /* SCKELOW Bit Does Not Maintain State Through Hibernate */
 #define ANOMALY_05000307 (__SILICON_REVISION__ < 3)
-/* Writing UART_THR while UART clock is disabled sends erroneous start bit */
+/* Writing UART_THR While UART Clock Is Disabled Sends Erroneous Start Bit */
 #define ANOMALY_05000309 (__SILICON_REVISION__ < 3)
 /* False Hardware Errors Caused by Fetches at the Boundary of Reserved Memory */
 #define ANOMALY_05000310 (1)
-/* Errors When SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted */
+/* Errors when SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted */
 #define ANOMALY_05000312 (1)
 /* PPI Is Level-Sensitive on First Transfer In Single Frame Sync Modes */
 #define ANOMALY_05000313 (1)
-/* Killed System MMR Write Completes Erroneously On Next System MMR Access */
+/* Killed System MMR Write Completes Erroneously on Next System MMR Access */
 #define ANOMALY_05000315 (__SILICON_REVISION__ < 3)
-/* EMAC RMII mode: collisions occur in Full Duplex mode */
+/* EMAC RMII Mode: Collisions Occur in Full Duplex Mode */
 #define ANOMALY_05000316 (__SILICON_REVISION__ < 3)
-/* EMAC RMII mode: TX frames in half duplex fail with status No Carrier */
+/* EMAC RMII Mode: TX Frames in Half Duplex Fail with Status "No Carrier" */
 #define ANOMALY_05000321 (__SILICON_REVISION__ < 3)
-/* EMAC RMII mode at 10-Base-T speed: RX frames not received properly */
+/* EMAC RMII Mode at 10-Base-T Speed: RX Frames Not Received Properly */
 #define ANOMALY_05000322 (1)
 /* Ethernet MAC MDIO Reads Do Not Meet IEEE Specification */
 #define ANOMALY_05000341 (__SILICON_REVISION__ >= 3)
-/* New Feature: UART Remains Enabled after UART Boot */
+/* UART Gets Disabled after UART Boot */
 #define ANOMALY_05000350 (__SILICON_REVISION__ >= 3)
 /* Regulator Programming Blocked when Hibernate Wakeup Source Remains Active */
 #define ANOMALY_05000355 (1)
 /* Possible RETS Register Corruption when Subroutine Is under 5 Cycles in Duration */
 #define ANOMALY_05000371 (1)
 /* SSYNC Stalls Processor when Executed from Non-Cacheable Memory */
-#define ANOMALY_05000402 (__SILICON_REVISION__ >= 5)
+#define ANOMALY_05000402 (__SILICON_REVISION__ == 2)
 /* Level-Sensitive External GPIO Wakeups May Cause Indefinite Stall */
 #define ANOMALY_05000403 (1)
 /* Speculative Fetches Can Cause Undesired External FIFO Operations */
 #define ANOMALY_05000426 (1)
 /* IFLUSH Instruction at End of Hardware Loop Causes Infinite Stall */
 #define ANOMALY_05000443 (1)
+/* False Hardware Error when RETI Points to Invalid Memory */
+#define ANOMALY_05000461 (1)
+/* Interrupted 32-Bit SPORT Data Register Access Results In Underflow */
+#define ANOMALY_05000473 (1)
+/* Possible Lockup Condition whem Modifying PLL from External Memory */
+#define ANOMALY_05000475 (1)
+/* TESTSET Instruction Cannot Be Interrupted */
+#define ANOMALY_05000477 (1)
+/* Reads of ITEST_COMMAND and ITEST_DATA Registers Cause Cache Corruption */
+#define ANOMALY_05000481 (1)
+/* IFLUSH sucks at life */
+#define ANOMALY_05000491 (1)
 
 /* Anomalies that don't exist on this proc */
+#define ANOMALY_05000099 (0)
+#define ANOMALY_05000120 (0)
 #define ANOMALY_05000125 (0)
+#define ANOMALY_05000149 (0)
 #define ANOMALY_05000158 (0)
 #define ANOMALY_05000171 (0)
+#define ANOMALY_05000179 (0)
+#define ANOMALY_05000182 (0)
 #define ANOMALY_05000183 (0)
+#define ANOMALY_05000189 (0)
 #define ANOMALY_05000198 (0)
+#define ANOMALY_05000202 (0)
+#define ANOMALY_05000215 (0)
+#define ANOMALY_05000219 (0)
+#define ANOMALY_05000220 (0)
 #define ANOMALY_05000227 (0)
 #define ANOMALY_05000230 (0)
+#define ANOMALY_05000231 (0)
+#define ANOMALY_05000233 (0)
+#define ANOMALY_05000234 (0)
 #define ANOMALY_05000242 (0)
+#define ANOMALY_05000248 (0)
 #define ANOMALY_05000266 (0)
+#define ANOMALY_05000274 (0)
+#define ANOMALY_05000287 (0)
 #define ANOMALY_05000311 (0)
 #define ANOMALY_05000323 (0)
 #define ANOMALY_05000353 (1)
 #define ANOMALY_05000362 (1)
 #define ANOMALY_05000363 (0)
+#define ANOMALY_05000364 (0)
 #define ANOMALY_05000380 (0)
 #define ANOMALY_05000386 (1)
+#define ANOMALY_05000389 (0)
+#define ANOMALY_05000400 (0)
 #define ANOMALY_05000412 (0)
 #define ANOMALY_05000430 (0)
 #define ANOMALY_05000432 (0)
 #define ANOMALY_05000435 (0)
 #define ANOMALY_05000447 (0)
 #define ANOMALY_05000448 (0)
+#define ANOMALY_05000456 (0)
+#define ANOMALY_05000450 (0)
+#define ANOMALY_05000465 (0)
+#define ANOMALY_05000467 (0)
+#define ANOMALY_05000474 (0)
+#define ANOMALY_05000485 (0)
 
 #endif
index 14c111f712a246970608ced63d4dd11d87ecfcbe..e210db980d01eb73c7dd12cf6ba78f6e3dba3c1a 100644 (file)
@@ -1 +1,5 @@
+#include "gpio.h"
+#include "portmux.h"
 #include "ports.h"
+
+#define BF537_FAMILY 1 /* Linux glue */
diff --git a/arch/blackfin/include/asm/mach-bf537/gpio.h b/arch/blackfin/include/asm/mach-bf537/gpio.h
new file mode 100644 (file)
index 0000000..f80c299
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2008 Analog Devices Inc.
+ * Licensed under the GPL-2 or later.
+ */
+
+
+#ifndef _MACH_GPIO_H_
+#define _MACH_GPIO_H_
+
+#define MAX_BLACKFIN_GPIOS 48
+
+#define GPIO_PF0       0
+#define GPIO_PF1       1
+#define GPIO_PF2       2
+#define GPIO_PF3       3
+#define GPIO_PF4       4
+#define GPIO_PF5       5
+#define GPIO_PF6       6
+#define GPIO_PF7       7
+#define GPIO_PF8       8
+#define GPIO_PF9       9
+#define GPIO_PF10      10
+#define GPIO_PF11      11
+#define GPIO_PF12      12
+#define GPIO_PF13      13
+#define GPIO_PF14      14
+#define GPIO_PF15      15
+#define GPIO_PG0       16
+#define GPIO_PG1       17
+#define GPIO_PG2       18
+#define GPIO_PG3       19
+#define GPIO_PG4       20
+#define GPIO_PG5       21
+#define GPIO_PG6       22
+#define GPIO_PG7       23
+#define GPIO_PG8       24
+#define GPIO_PG9       25
+#define GPIO_PG10      26
+#define GPIO_PG11      27
+#define GPIO_PG12      28
+#define GPIO_PG13      29
+#define GPIO_PG14      30
+#define GPIO_PG15      31
+#define GPIO_PH0       32
+#define GPIO_PH1       33
+#define GPIO_PH2       34
+#define GPIO_PH3       35
+#define GPIO_PH4       36
+#define GPIO_PH5       37
+#define GPIO_PH6       38
+#define GPIO_PH7       39
+#define GPIO_PH8       40
+#define GPIO_PH9       41
+#define GPIO_PH10      42
+#define GPIO_PH11      43
+#define GPIO_PH12      44
+#define GPIO_PH13      45
+#define GPIO_PH14      46
+#define GPIO_PH15      47
+
+#define PORT_F GPIO_PF0
+#define PORT_G GPIO_PG0
+#define PORT_H GPIO_PH0
+
+#endif /* _MACH_GPIO_H_ */
diff --git a/arch/blackfin/include/asm/mach-bf537/portmux.h b/arch/blackfin/include/asm/mach-bf537/portmux.h
new file mode 100644 (file)
index 0000000..71d9eae
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+ * Copyright 2007-2009 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later
+ */
+
+#ifndef _MACH_PORTMUX_H_
+#define _MACH_PORTMUX_H_
+
+#define MAX_RESOURCES  (MAX_BLACKFIN_GPIOS + GPIO_BANKSIZE)    /* We additionally handle PORTJ */
+
+#define P_UART0_TX     (P_DEFINED | P_IDENT(GPIO_PF0) | P_FUNCT(0))
+#define P_UART0_RX     (P_DEFINED | P_IDENT(GPIO_PF1) | P_FUNCT(0))
+#define P_UART1_TX     (P_DEFINED | P_IDENT(GPIO_PF2) | P_FUNCT(0))
+#define P_UART1_RX     (P_DEFINED | P_IDENT(GPIO_PF3) | P_FUNCT(0))
+#define P_TMR5         (P_DEFINED | P_IDENT(GPIO_PF4) | P_FUNCT(0))
+#define P_TMR4         (P_DEFINED | P_IDENT(GPIO_PF5) | P_FUNCT(0))
+#define P_TMR3         (P_DEFINED | P_IDENT(GPIO_PF6) | P_FUNCT(0))
+#define P_TMR2         (P_DEFINED | P_IDENT(GPIO_PF7) | P_FUNCT(0))
+#define P_TMR1         (P_DEFINED | P_IDENT(GPIO_PF8) | P_FUNCT(0))
+#define P_TMR0         (P_DEFINED | P_IDENT(GPIO_PF9) | P_FUNCT(0))
+#define P_SPI0_SSEL1   (P_DEFINED | P_IDENT(GPIO_PF10) | P_FUNCT(0))
+#define P_SPI0_MOSI    (P_DEFINED | P_IDENT(GPIO_PF11) | P_FUNCT(0))
+#define P_SPI0_MISO    (P_DEFINED | P_IDENT(GPIO_PF12) | P_FUNCT(0))
+#define P_SPI0_SCK     (P_DEFINED | P_IDENT(GPIO_PF13) | P_FUNCT(0))
+#define P_SPI0_SS      (P_DEFINED | P_IDENT(GPIO_PF14) | P_FUNCT(0))
+#define P_PPI0_CLK     (P_DEFINED | P_IDENT(GPIO_PF15) | P_FUNCT(0))
+#define P_DMAR0                (P_DEFINED | P_IDENT(GPIO_PF0) | P_FUNCT(1))
+#define P_DMAR1                (P_DEFINED | P_IDENT(GPIO_PF1) | P_FUNCT(1))
+#define P_TMR7         (P_DEFINED | P_IDENT(GPIO_PF2) | P_FUNCT(1))
+#define P_TMR6         (P_DEFINED | P_IDENT(GPIO_PF3) | P_FUNCT(1))
+#define P_SPI0_SSEL6   (P_DEFINED | P_IDENT(GPIO_PF4) | P_FUNCT(1))
+#define P_SPI0_SSEL5   (P_DEFINED | P_IDENT(GPIO_PF5) | P_FUNCT(1))
+#define P_SPI0_SSEL4   (P_DEFINED | P_IDENT(GPIO_PF6) | P_FUNCT(1))
+#define P_PPI0_FS3     (P_DEFINED | P_IDENT(GPIO_PF7) | P_FUNCT(1))
+#define P_PPI0_FS2     (P_DEFINED | P_IDENT(GPIO_PF8) | P_FUNCT(1))
+#define P_PPI0_FS1     (P_DEFINED | P_IDENT(GPIO_PF9) | P_FUNCT(1))
+#define P_TACLK0       (P_DEFINED | P_IDENT(GPIO_PF14) | P_FUNCT(1))
+#define P_TMRCLK       (P_DEFINED | P_IDENT(GPIO_PF15) | P_FUNCT(1))
+#define GPIO_DEFAULT_BOOT_SPI_CS GPIO_PF10
+#define P_DEFAULT_BOOT_SPI_CS P_SPI0_SSEL1
+
+#define P_PPI0_D0      (P_DEFINED | P_IDENT(GPIO_PG0) | P_FUNCT(0))
+#define P_PPI0_D1      (P_DEFINED | P_IDENT(GPIO_PG1) | P_FUNCT(0))
+#define P_PPI0_D2      (P_DEFINED | P_IDENT(GPIO_PG2) | P_FUNCT(0))
+#define P_PPI0_D3      (P_DEFINED | P_IDENT(GPIO_PG3) | P_FUNCT(0))
+#define P_PPI0_D4      (P_DEFINED | P_IDENT(GPIO_PG4) | P_FUNCT(0))
+#define P_PPI0_D5      (P_DEFINED | P_IDENT(GPIO_PG5) | P_FUNCT(0))
+#define P_PPI0_D6      (P_DEFINED | P_IDENT(GPIO_PG6) | P_FUNCT(0))
+#define P_PPI0_D7      (P_DEFINED | P_IDENT(GPIO_PG7) | P_FUNCT(0))
+#define P_PPI0_D8      (P_DEFINED | P_IDENT(GPIO_PG8) | P_FUNCT(0))
+#define P_PPI0_D9      (P_DEFINED | P_IDENT(GPIO_PG9) | P_FUNCT(0))
+#define P_PPI0_D10     (P_DEFINED | P_IDENT(GPIO_PG10) | P_FUNCT(0))
+#define P_PPI0_D11     (P_DEFINED | P_IDENT(GPIO_PG11) | P_FUNCT(0))
+#define P_PPI0_D12     (P_DEFINED | P_IDENT(GPIO_PG12) | P_FUNCT(0))
+#define P_PPI0_D13     (P_DEFINED | P_IDENT(GPIO_PG13) | P_FUNCT(0))
+#define P_PPI0_D14     (P_DEFINED | P_IDENT(GPIO_PG14) | P_FUNCT(0))
+#define P_PPI0_D15     (P_DEFINED | P_IDENT(GPIO_PG15) | P_FUNCT(0))
+#define P_SPORT1_DRSEC (P_DEFINED | P_IDENT(GPIO_PG8) | P_FUNCT(1))
+#define P_SPORT1_DTSEC (P_DEFINED | P_IDENT(GPIO_PG9) | P_FUNCT(1))
+#define P_SPORT1_RSCLK (P_DEFINED | P_IDENT(GPIO_PG10) | P_FUNCT(1))
+#define P_SPORT1_RFS   (P_DEFINED | P_IDENT(GPIO_PG11) | P_FUNCT(1))
+#define P_SPORT1_DRPRI (P_DEFINED | P_IDENT(GPIO_PG12) | P_FUNCT(1))
+#define P_SPORT1_TSCLK (P_DEFINED | P_IDENT(GPIO_PG13) | P_FUNCT(1))
+#define P_SPORT1_TFS   (P_DEFINED | P_IDENT(GPIO_PG14) | P_FUNCT(1))
+#define P_SPORT1_DTPRI (P_DEFINED | P_IDENT(GPIO_PG15) | P_FUNCT(1))
+
+#define P_MII0_ETxD0   (P_DEFINED | P_IDENT(GPIO_PH0) | P_FUNCT(0))
+#define P_MII0_ETxD1   (P_DEFINED | P_IDENT(GPIO_PH1) | P_FUNCT(0))
+#define P_MII0_ETxD2   (P_DEFINED | P_IDENT(GPIO_PH2) | P_FUNCT(0))
+#define P_MII0_ETxD3   (P_DEFINED | P_IDENT(GPIO_PH3) | P_FUNCT(0))
+#define P_MII0_ETxEN   (P_DEFINED | P_IDENT(GPIO_PH4) | P_FUNCT(0))
+#define P_MII0_TxCLK   (P_DEFINED | P_IDENT(GPIO_PH5) | P_FUNCT(0))
+#define P_MII0_PHYINT  (P_DEFINED | P_IDENT(GPIO_PH6) | P_FUNCT(0))
+#define P_MII0_COL     (P_DEFINED | P_IDENT(GPIO_PH7) | P_FUNCT(0))
+#define P_MII0_ERxD0   (P_DEFINED | P_IDENT(GPIO_PH8) | P_FUNCT(0))
+#define P_MII0_ERxD1   (P_DEFINED | P_IDENT(GPIO_PH9) | P_FUNCT(0))
+#define P_MII0_ERxD2   (P_DEFINED | P_IDENT(GPIO_PH10) | P_FUNCT(0))
+#define P_MII0_ERxD3   (P_DEFINED | P_IDENT(GPIO_PH11) | P_FUNCT(0))
+#define P_MII0_ERxDV   (P_DEFINED | P_IDENT(GPIO_PH12) | P_FUNCT(0))
+#define P_MII0_ERxCLK  (P_DEFINED | P_IDENT(GPIO_PH13) | P_FUNCT(0))
+#define P_MII0_ERxER   (P_DEFINED | P_IDENT(GPIO_PH14) | P_FUNCT(0))
+#define P_MII0_CRS     (P_DEFINED | P_IDENT(GPIO_PH15) | P_FUNCT(0))
+#define P_RMII0_REF_CLK        (P_DEFINED | P_IDENT(GPIO_PH5) | P_FUNCT(1))
+#define P_RMII0_MDINT  (P_DEFINED | P_IDENT(GPIO_PH6) | P_FUNCT(1))
+#define P_RMII0_CRS_DV (P_DEFINED | P_IDENT(GPIO_PH15) | P_FUNCT(1))
+
+#define PORT_PJ0       (GPIO_PH15 + 1)
+#define PORT_PJ1       (GPIO_PH15 + 2)
+#define PORT_PJ2       (GPIO_PH15 + 3)
+#define PORT_PJ3       (GPIO_PH15 + 4)
+#define PORT_PJ4       (GPIO_PH15 + 5)
+#define PORT_PJ5       (GPIO_PH15 + 6)
+#define PORT_PJ6       (GPIO_PH15 + 7)
+#define PORT_PJ7       (GPIO_PH15 + 8)
+#define PORT_PJ8       (GPIO_PH15 + 9)
+#define PORT_PJ9       (GPIO_PH15 + 10)
+#define PORT_PJ10      (GPIO_PH15 + 11)
+#define PORT_PJ11      (GPIO_PH15 + 12)
+
+#define P_MDC          (P_DEFINED | P_IDENT(PORT_PJ0) | P_FUNCT(0))
+#define P_MDIO         (P_DEFINED | P_IDENT(PORT_PJ1) | P_FUNCT(0))
+#define P_TWI0_SCL     (P_DEFINED | P_IDENT(PORT_PJ2) | P_FUNCT(0))
+#define P_TWI0_SDA     (P_DEFINED | P_IDENT(PORT_PJ3) | P_FUNCT(0))
+#define P_SPORT0_DRSEC (P_DEFINED | P_IDENT(PORT_PJ4) | P_FUNCT(0))
+#define P_SPORT0_DTSEC (P_DEFINED | P_IDENT(PORT_PJ5) | P_FUNCT(0))
+#define P_SPORT0_RSCLK (P_DEFINED | P_IDENT(PORT_PJ6) | P_FUNCT(0))
+#define P_SPORT0_RFS   (P_DEFINED | P_IDENT(PORT_PJ7) | P_FUNCT(0))
+#define P_SPORT0_DRPRI (P_DEFINED | P_IDENT(PORT_PJ8) | P_FUNCT(0))
+#define P_SPORT0_TSCLK (P_DEFINED | P_IDENT(PORT_PJ9) | P_FUNCT(0))
+#define P_SPORT0_TFS   (P_DEFINED | P_IDENT(PORT_PJ10) | P_FUNCT(0))
+#define P_SPORT0_DTPRI (P_DEFINED | P_IDENT(PORT_PJ11) | P_FUNCT(0))
+#define P_CAN0_RX      (P_DEFINED | P_IDENT(PORT_PJ4) | P_FUNCT(1))
+#define P_CAN0_TX      (P_DEFINED | P_IDENT(PORT_PJ5) | P_FUNCT(1))
+#define P_SPI0_SSEL3   (P_DEFINED | P_IDENT(PORT_PJ10) | P_FUNCT(1))
+#define P_SPI0_SSEL2   (P_DEFINED | P_IDENT(PORT_PJ11) | P_FUNCT(1))
+#define P_SPI0_SSEL7   (P_DEFINED | P_IDENT(PORT_PJ5) | P_FUNCT(2))
+
+#define P_MII0 {\
+       P_MII0_ETxD0, \
+       P_MII0_ETxD1, \
+       P_MII0_ETxD2, \
+       P_MII0_ETxD3, \
+       P_MII0_ETxEN, \
+       P_MII0_TxCLK, \
+       P_MII0_PHYINT, \
+       P_MII0_COL, \
+       P_MII0_ERxD0, \
+       P_MII0_ERxD1, \
+       P_MII0_ERxD2, \
+       P_MII0_ERxD3, \
+       P_MII0_ERxDV, \
+       P_MII0_ERxCLK, \
+       P_MII0_ERxER, \
+       P_MII0_CRS, \
+       P_MDC, \
+       P_MDIO, 0}
+
+#define P_RMII0 {\
+       P_MII0_ETxD0, \
+       P_MII0_ETxD1, \
+       P_MII0_ETxEN, \
+       P_MII0_ERxD0, \
+       P_MII0_ERxD1, \
+       P_MII0_ERxER, \
+       P_RMII0_REF_CLK, \
+       P_RMII0_MDINT, \
+       P_RMII0_CRS_DV, \
+       P_MDC, \
+       P_MDIO, 0}
+
+#endif /* _MACH_PORTMUX_H_ */
index 192dd67c23ab4b0c8dd4051e72049a7ca14ad848..7bda09c0b2844a65e492c2af1fca835f5342b630 100644 (file)
@@ -1,41 +1,54 @@
 /*
- * File: include/asm-blackfin/mach-bf548/anomaly.h
- * Bugs: Enter bugs at http://blackfin.uclinux.org/
+ * DO NOT EDIT THIS FILE
+ * This file is under version control at
+ *   svn://sources.blackfin.uclinux.org/toolchain/trunk/proc-defs/header-frags/
+ * and can be replaced with that version at any time
+ * DO NOT EDIT THIS FILE
  *
- * Copyright (C) 2004-2009 Analog Devices Inc.
- * Licensed under the GPL-2 or later.
+ * Copyright 2004-2010 Analog Devices Inc.
+ * Licensed under the ADI BSD license.
+ *   https://docs.blackfin.uclinux.org/doku.php?id=adi_bsd
  */
 
 /* This file should be up to date with:
- *  - Revision H, 01/16/2009; ADSP-BF542/BF544/BF547/BF548/BF549 Blackfin Processor Anomaly List
+ *  - Revision I, 07/23/2009; ADSP-BF542/BF544/BF547/BF548/BF549 Blackfin Processor Anomaly List
  */
 
 #ifndef _MACH_ANOMALY_H_
 #define _MACH_ANOMALY_H_
 
-/* Multi-issue instruction with dsp32shiftimm in slot1 and P-reg store in slot 2 not supported */
+/* We do not support 0.0 or 0.1 silicon - sorry */
+/* XXX: let u-boot slide
+#if __SILICON_REVISION__ < 2
+# error will not work on BF548 silicon version 0.0, or 0.1
+#endif
+*/
+
+/* Multi-Issue Instruction with dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported */
 #define ANOMALY_05000074 (1)
 /* DMA_RUN Bit Is Not Valid after a Peripheral Receive Channel DMA Stops */
 #define ANOMALY_05000119 (1)
 /* Rx.H Cannot Be Used to Access 16-bit System MMR Registers */
 #define ANOMALY_05000122 (1)
+/* Data Corruption/Core Hang with L2/L3 Configured in Writeback Cache Mode */
+#define ANOMALY_05000220 (1)
 /* False Hardware Error from an Access in the Shadow of a Conditional Branch */
 #define ANOMALY_05000245 (1)
 /* Sensitivity To Noise with Slow Input Edge Rates on External SPORT TX and RX Clocks */
 #define ANOMALY_05000265 (1)
 /* Certain Data Cache Writethrough Modes Fail for Vddint <= 0.9V */
 #define ANOMALY_05000272 (1)
-/* False Hardware Error Exception When ISR Context Is Not Restored */
+/* False Hardware Error Exception when ISR Context Is Not Restored */
 #define ANOMALY_05000281 (__SILICON_REVISION__ < 1)
 /* SSYNCs After Writes To CAN/DMA MMR Registers Are Not Always Handled Correctly */
 #define ANOMALY_05000304 (__SILICON_REVISION__ < 1)
 /* False Hardware Errors Caused by Fetches at the Boundary of Reserved Memory */
 #define ANOMALY_05000310 (1)
-/* Errors When SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted */
+/* Errors when SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted */
 #define ANOMALY_05000312 (__SILICON_REVISION__ < 1)
 /* TWI Slave Boot Mode Is Not Functional */
 #define ANOMALY_05000324 (__SILICON_REVISION__ < 1)
-/* External FIFO Boot Mode Is Not Functional */
+/* FIFO Boot Mode Not Functional */
 #define ANOMALY_05000325 (__SILICON_REVISION__ < 2)
 /* Data Lost When Core and DMA Accesses Are Made to the USB FIFO Simultaneously */
 #define ANOMALY_05000327 (__SILICON_REVISION__ < 1)
 #define ANOMALY_05000430 (__SILICON_REVISION__ >= 2)
 /* Incorrect Use of Stack in Lockbox Firmware During Authentication */
 #define ANOMALY_05000431 (__SILICON_REVISION__ < 3)
+/* SW Breakpoints Ignored Upon Return From Lockbox Authentication */
+#define ANOMALY_05000434 (1)
 /* OTP Write Accesses Not Supported */
 #define ANOMALY_05000442 (__SILICON_REVISION__ < 1)
 /* IFLUSH Instruction at End of Hardware Loop Causes Infinite Stall */
 /* Reduced Timing Margins on DDR Output Setup and Hold (tDS and tDH) */
 #define ANOMALY_05000449 (__SILICON_REVISION__ == 1)
 /* USB DMA Mode 1 Short Packet Data Corruption */
-#define ANOMALY_05000450 (1
+#define ANOMALY_05000450 (1)
+/* Incorrect Default Hysteresis Setting for RESET, NMI, and BMODE Signals */
+#define ANOMALY_05000452 (__SILICON_REVISION__ < 1)
+/* USB Receive Interrupt Is Not Generated in DMA Mode 1 */
+#define ANOMALY_05000456 (1)
+/* Host DMA Port Responds to Certain Bus Activity Without HOST_CE Assertion */
+#define ANOMALY_05000457 (1)
+/* USB DMA Mode 1 Failure When Multiple USB DMA Channels Are Concurrently Enabled */
+#define ANOMALY_05000460 (1)
+/* False Hardware Error when RETI Points to Invalid Memory */
+#define ANOMALY_05000461 (1)
+/* Synchronization Problem at Startup May Cause SPORT Transmit Channels to Misalign */
+#define ANOMALY_05000462 (1)
+/* USB DMA RX Data Corruption */
+#define ANOMALY_05000463 (1)
+/* USB TX DMA Hang */
+#define ANOMALY_05000464 (1)
+/* USB Rx DMA hang */
+#define ANOMALY_05000465 (1)
+/* TxPktRdy Bit Not Set for Transmit Endpoint When Core and DMA Access USB Endpoint FIFOs Simultaneously */
+#define ANOMALY_05000466 (1)
+/* Possible RX data corruption when control & data EP FIFOs are accessed via the core */
+#define ANOMALY_05000467 (1)
+/* Interrupted 32-Bit SPORT Data Register Access Results In Underflow */
+#define ANOMALY_05000473 (1)
+/* Access to DDR-SDRAM causes system hang under certain PLL/VR settings */
+#define ANOMALY_05000474 (1)
+/* TESTSET Instruction Cannot Be Interrupted */
+#define ANOMALY_05000477 (1)
+/* Reads of ITEST_COMMAND and ITEST_DATA Registers Cause Cache Corruption */
+#define ANOMALY_05000481 (1)
+/* Possible USB Data Corruption When Multiple Endpoints Are Accessed by the Core */
+#define ANOMALY_05000483 (1)
+/* PLL_CTL Change Using bfrom_SysControl() Can Result in Processor Overclocking */
+#define ANOMALY_05000485 (__SILICON_REVISION__ >= 2)
+/* IFLUSH sucks at life */
+#define ANOMALY_05000491 (1)
 
 /* Anomalies that don't exist on this proc */
+#define ANOMALY_05000099 (0)
+#define ANOMALY_05000120 (0)
 #define ANOMALY_05000125 (0)
+#define ANOMALY_05000149 (0)
 #define ANOMALY_05000158 (0)
 #define ANOMALY_05000171 (0)
+#define ANOMALY_05000179 (0)
+#define ANOMALY_05000182 (0)
 #define ANOMALY_05000183 (0)
+#define ANOMALY_05000189 (0)
 #define ANOMALY_05000198 (0)
+#define ANOMALY_05000202 (0)
+#define ANOMALY_05000215 (0)
+#define ANOMALY_05000219 (0)
 #define ANOMALY_05000227 (0)
 #define ANOMALY_05000230 (0)
+#define ANOMALY_05000231 (0)
+#define ANOMALY_05000233 (0)
+#define ANOMALY_05000234 (0)
 #define ANOMALY_05000242 (0)
 #define ANOMALY_05000244 (0)
+#define ANOMALY_05000248 (0)
+#define ANOMALY_05000250 (0)
+#define ANOMALY_05000254 (0)
+#define ANOMALY_05000257 (0)
 #define ANOMALY_05000261 (0)
 #define ANOMALY_05000263 (0)
 #define ANOMALY_05000266 (0)
 #define ANOMALY_05000273 (0)
+#define ANOMALY_05000274 (0)
 #define ANOMALY_05000278 (0)
+#define ANOMALY_05000283 (0)
+#define ANOMALY_05000287 (0)
+#define ANOMALY_05000301 (0)
 #define ANOMALY_05000305 (0)
 #define ANOMALY_05000307 (0)
 #define ANOMALY_05000311 (0)
+#define ANOMALY_05000315 (0)
 #define ANOMALY_05000323 (0)
 #define ANOMALY_05000362 (1)
 #define ANOMALY_05000363 (0)
+#define ANOMALY_05000364 (0)
 #define ANOMALY_05000380 (0)
+#define ANOMALY_05000400 (0)
+#define ANOMALY_05000402 (0)
 #define ANOMALY_05000412 (0)
 #define ANOMALY_05000432 (0)
 #define ANOMALY_05000435 (0)
+#define ANOMALY_05000475 (0)
 
 #endif
index 81eca83bcecbc77324294e28e9ac4b126eea0b1e..f1e69a7b0de2efdf4b8562d4ab002820c2c3203e 100644 (file)
@@ -1,2 +1,6 @@
+#include "gpio.h"
 #include "mem_map.h"
+#include "portmux.h"
 #include "ports.h"
+
+#define CONFIG_BF54x 1 /* Linux glue */
diff --git a/arch/blackfin/include/asm/mach-bf548/gpio.h b/arch/blackfin/include/asm/mach-bf548/gpio.h
new file mode 100644 (file)
index 0000000..28037e3
--- /dev/null
@@ -0,0 +1,203 @@
+/*
+ * Copyright 2007-2009 Analog Devices Inc.
+ * Licensed under the GPL-2 or later.
+ */
+
+
+#ifndef _MACH_GPIO_H_
+#define _MACH_GPIO_H_
+
+#define GPIO_PA0       0
+#define GPIO_PA1       1
+#define GPIO_PA2       2
+#define GPIO_PA3       3
+#define GPIO_PA4       4
+#define GPIO_PA5       5
+#define GPIO_PA6       6
+#define GPIO_PA7       7
+#define GPIO_PA8       8
+#define GPIO_PA9       9
+#define GPIO_PA10      10
+#define GPIO_PA11      11
+#define GPIO_PA12      12
+#define GPIO_PA13      13
+#define GPIO_PA14      14
+#define GPIO_PA15      15
+#define GPIO_PB0       16
+#define GPIO_PB1       17
+#define GPIO_PB2       18
+#define GPIO_PB3       19
+#define GPIO_PB4       20
+#define GPIO_PB5       21
+#define GPIO_PB6       22
+#define GPIO_PB7       23
+#define GPIO_PB8       24
+#define GPIO_PB9       25
+#define GPIO_PB10      26
+#define GPIO_PB11      27
+#define GPIO_PB12      28
+#define GPIO_PB13      29
+#define GPIO_PB14      30
+#define GPIO_PB15      31      /* N/A */
+#define GPIO_PC0       32
+#define GPIO_PC1       33
+#define GPIO_PC2       34
+#define GPIO_PC3       35
+#define GPIO_PC4       36
+#define GPIO_PC5       37
+#define GPIO_PC6       38
+#define GPIO_PC7       39
+#define GPIO_PC8       40
+#define GPIO_PC9       41
+#define GPIO_PC10      42
+#define GPIO_PC11      43
+#define GPIO_PC12      44
+#define GPIO_PC13      45
+#define GPIO_PC14      46      /* N/A */
+#define GPIO_PC15      47      /* N/A */
+#define GPIO_PD0       48
+#define GPIO_PD1       49
+#define GPIO_PD2       50
+#define GPIO_PD3       51
+#define GPIO_PD4       52
+#define GPIO_PD5       53
+#define GPIO_PD6       54
+#define GPIO_PD7       55
+#define GPIO_PD8       56
+#define GPIO_PD9       57
+#define GPIO_PD10      58
+#define GPIO_PD11      59
+#define GPIO_PD12      60
+#define GPIO_PD13      61
+#define GPIO_PD14      62
+#define GPIO_PD15      63
+#define GPIO_PE0       64
+#define GPIO_PE1       65
+#define GPIO_PE2       66
+#define GPIO_PE3       67
+#define GPIO_PE4       68
+#define GPIO_PE5       69
+#define GPIO_PE6       70
+#define GPIO_PE7       71
+#define GPIO_PE8       72
+#define GPIO_PE9       73
+#define GPIO_PE10      74
+#define GPIO_PE11      75
+#define GPIO_PE12      76
+#define GPIO_PE13      77
+#define GPIO_PE14      78
+#define GPIO_PE15      79
+#define GPIO_PF0       80
+#define GPIO_PF1       81
+#define GPIO_PF2       82
+#define GPIO_PF3       83
+#define GPIO_PF4       84
+#define GPIO_PF5       85
+#define GPIO_PF6       86
+#define GPIO_PF7       87
+#define GPIO_PF8       88
+#define GPIO_PF9       89
+#define GPIO_PF10      90
+#define GPIO_PF11      91
+#define GPIO_PF12      92
+#define GPIO_PF13      93
+#define GPIO_PF14      94
+#define GPIO_PF15      95
+#define GPIO_PG0       96
+#define GPIO_PG1       97
+#define GPIO_PG2       98
+#define GPIO_PG3       99
+#define GPIO_PG4       100
+#define GPIO_PG5       101
+#define GPIO_PG6       102
+#define GPIO_PG7       103
+#define GPIO_PG8       104
+#define GPIO_PG9       105
+#define GPIO_PG10      106
+#define GPIO_PG11      107
+#define GPIO_PG12      108
+#define GPIO_PG13      109
+#define GPIO_PG14      110
+#define GPIO_PG15      111
+#define GPIO_PH0       112
+#define GPIO_PH1       113
+#define GPIO_PH2       114
+#define GPIO_PH3       115
+#define GPIO_PH4       116
+#define GPIO_PH5       117
+#define GPIO_PH6       118
+#define GPIO_PH7       119
+#define GPIO_PH8       120
+#define GPIO_PH9       121
+#define GPIO_PH10      122
+#define GPIO_PH11      123
+#define GPIO_PH12      124
+#define GPIO_PH13      125
+#define GPIO_PH14      126     /* N/A */
+#define GPIO_PH15      127     /* N/A */
+#define GPIO_PI0       128
+#define GPIO_PI1       129
+#define GPIO_PI2       130
+#define GPIO_PI3       131
+#define GPIO_PI4       132
+#define GPIO_PI5       133
+#define GPIO_PI6       134
+#define GPIO_PI7       135
+#define GPIO_PI8       136
+#define GPIO_PI9       137
+#define GPIO_PI10      138
+#define GPIO_PI11      139
+#define GPIO_PI12      140
+#define GPIO_PI13      141
+#define GPIO_PI14      142
+#define GPIO_PI15      143
+#define GPIO_PJ0       144
+#define GPIO_PJ1       145
+#define GPIO_PJ2       146
+#define GPIO_PJ3       147
+#define GPIO_PJ4       148
+#define GPIO_PJ5       149
+#define GPIO_PJ6       150
+#define GPIO_PJ7       151
+#define GPIO_PJ8       152
+#define GPIO_PJ9       153
+#define GPIO_PJ10      154
+#define GPIO_PJ11      155
+#define GPIO_PJ12      156
+#define GPIO_PJ13      157
+#define GPIO_PJ14      158     /* N/A */
+#define GPIO_PJ15      159     /* N/A */
+
+#define MAX_BLACKFIN_GPIOS 160
+
+#ifndef __ASSEMBLY__
+
+struct gpio_port_t {
+       unsigned short port_fer;
+       unsigned short dummy1;
+       unsigned short data;
+       unsigned short dummy2;
+       unsigned short data_set;
+       unsigned short dummy3;
+       unsigned short data_clear;
+       unsigned short dummy4;
+       unsigned short dir_set;
+       unsigned short dummy5;
+       unsigned short dir_clear;
+       unsigned short dummy6;
+       unsigned short inen;
+       unsigned short dummy7;
+       unsigned int port_mux;
+};
+
+struct gpio_port_s {
+       unsigned short fer;
+       unsigned short data;
+       unsigned short dir;
+       unsigned short inen;
+       unsigned int mux;
+};
+
+#endif
+
+#endif /* _MACH_GPIO_H_ */
diff --git a/arch/blackfin/include/asm/mach-bf548/portmux.h b/arch/blackfin/include/asm/mach-bf548/portmux.h
new file mode 100644 (file)
index 0000000..e222462
--- /dev/null
@@ -0,0 +1,320 @@
+/*
+ * Copyright 2007-2009 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#ifndef _MACH_PORTMUX_H_
+#define _MACH_PORTMUX_H_
+
+#define MAX_RESOURCES  MAX_BLACKFIN_GPIOS
+
+#define P_SPORT2_TFS   (P_DEFINED | P_IDENT(GPIO_PA0) | P_FUNCT(0))
+#define P_SPORT2_DTSEC (P_DEFINED | P_IDENT(GPIO_PA1) | P_FUNCT(0))
+#define P_SPORT2_DTPRI (P_DEFINED | P_IDENT(GPIO_PA2) | P_FUNCT(0))
+#define P_SPORT2_TSCLK (P_DEFINED | P_IDENT(GPIO_PA3) | P_FUNCT(0))
+#define P_SPORT2_RFS   (P_DEFINED | P_IDENT(GPIO_PA4) | P_FUNCT(0))
+#define P_SPORT2_DRSEC (P_DEFINED | P_IDENT(GPIO_PA5) | P_FUNCT(0))
+#define P_SPORT2_DRPRI (P_DEFINED | P_IDENT(GPIO_PA6) | P_FUNCT(0))
+#define P_SPORT2_RSCLK (P_DEFINED | P_IDENT(GPIO_PA7) | P_FUNCT(0))
+#define P_SPORT3_TFS   (P_DEFINED | P_IDENT(GPIO_PA8) | P_FUNCT(0))
+#define P_SPORT3_DTSEC (P_DEFINED | P_IDENT(GPIO_PA9) | P_FUNCT(0))
+#define P_SPORT3_DTPRI (P_DEFINED | P_IDENT(GPIO_PA10) | P_FUNCT(0))
+#define P_SPORT3_TSCLK (P_DEFINED | P_IDENT(GPIO_PA11) | P_FUNCT(0))
+#define P_SPORT3_RFS   (P_DEFINED | P_IDENT(GPIO_PA12) | P_FUNCT(0))
+#define P_SPORT3_DRSEC (P_DEFINED | P_IDENT(GPIO_PA13) | P_FUNCT(0))
+#define P_SPORT3_DRPRI (P_DEFINED | P_IDENT(GPIO_PA14) | P_FUNCT(0))
+#define P_SPORT3_RSCLK (P_DEFINED | P_IDENT(GPIO_PA15) | P_FUNCT(0))
+#define P_TMR4 (P_DEFINED | P_IDENT(GPIO_PA1) | P_FUNCT(1))
+#define P_TMR5 (P_DEFINED | P_IDENT(GPIO_PA5) | P_FUNCT(1))
+#define P_TMR6 (P_DEFINED | P_IDENT(GPIO_PA9) | P_FUNCT(1))
+#define P_TMR7 (P_DEFINED | P_IDENT(GPIO_PA13) | P_FUNCT(1))
+
+#define P_TWI1_SCL     (P_DEFINED | P_IDENT(GPIO_PB0) | P_FUNCT(0))
+#define P_TWI1_SDA     (P_DEFINED | P_IDENT(GPIO_PB1) | P_FUNCT(0))
+#define P_UART3_RTS    (P_DEFINED | P_IDENT(GPIO_PB2) | P_FUNCT(0))
+#define P_UART3_CTS    (P_DEFINED | P_IDENT(GPIO_PB3) | P_FUNCT(0))
+#define P_UART2_TX     (P_DEFINED | P_IDENT(GPIO_PB4) | P_FUNCT(0))
+#define P_UART2_RX     (P_DEFINED | P_IDENT(GPIO_PB5) | P_FUNCT(0))
+#define P_UART3_TX     (P_DEFINED | P_IDENT(GPIO_PB6) | P_FUNCT(0))
+#define P_UART3_RX     (P_DEFINED | P_IDENT(GPIO_PB7) | P_FUNCT(0))
+#define P_SPI2_SS      (P_DEFINED | P_IDENT(GPIO_PB8) | P_FUNCT(0))
+#define P_SPI2_SSEL1   (P_DEFINED | P_IDENT(GPIO_PB9) | P_FUNCT(0))
+#define P_SPI2_SSEL2   (P_DEFINED | P_IDENT(GPIO_PB10) | P_FUNCT(0))
+#define P_SPI2_SSEL3   (P_DEFINED | P_IDENT(GPIO_PB11) | P_FUNCT(0))
+#define P_SPI2_SCK     (P_DEFINED | P_IDENT(GPIO_PB12) | P_FUNCT(0))
+#define P_SPI2_MOSI    (P_DEFINED | P_IDENT(GPIO_PB13) | P_FUNCT(0))
+#define P_SPI2_MISO    (P_DEFINED | P_IDENT(GPIO_PB14) | P_FUNCT(0))
+#define P_TMR0 (P_DEFINED | P_IDENT(GPIO_PB8) | P_FUNCT(1))
+#define P_TMR1 (P_DEFINED | P_IDENT(GPIO_PB9) | P_FUNCT(1))
+#define P_TMR2 (P_DEFINED | P_IDENT(GPIO_PB10) | P_FUNCT(1))
+#define P_TMR3 (P_DEFINED | P_IDENT(GPIO_PB11) | P_FUNCT(1))
+
+#define P_SPORT0_TFS   (P_DEFINED | P_IDENT(GPIO_PC0) | P_FUNCT(0))
+#define P_SPORT0_DTSEC (P_DEFINED | P_IDENT(GPIO_PC1) | P_FUNCT(0))
+#define P_SPORT0_DTPRI (P_DEFINED | P_IDENT(GPIO_PC2) | P_FUNCT(0))
+#define P_SPORT0_TSCLK (P_DEFINED | P_IDENT(GPIO_PC3) | P_FUNCT(0))
+#define P_SPORT0_RFS   (P_DEFINED | P_IDENT(GPIO_PC4) | P_FUNCT(0))
+#define P_SPORT0_DRSEC (P_DEFINED | P_IDENT(GPIO_PC5) | P_FUNCT(0))
+#define P_SPORT0_DRPRI (P_DEFINED | P_IDENT(GPIO_PC6) | P_FUNCT(0))
+#define P_SPORT0_RSCLK (P_DEFINED | P_IDENT(GPIO_PC7) | P_FUNCT(0))
+#define P_SD_D0        (P_DEFINED | P_IDENT(GPIO_PC8) | P_FUNCT(0))
+#define P_SD_D1        (P_DEFINED | P_IDENT(GPIO_PC9) | P_FUNCT(0))
+#define P_SD_D2        (P_DEFINED | P_IDENT(GPIO_PC10) | P_FUNCT(0))
+#define P_SD_D3        (P_DEFINED | P_IDENT(GPIO_PC11) | P_FUNCT(0))
+#define P_SD_CLK       (P_DEFINED | P_IDENT(GPIO_PC12) | P_FUNCT(0))
+#define P_SD_CMD       (P_DEFINED | P_IDENT(GPIO_PC13) | P_FUNCT(0))
+#define P_MMCLK        (P_DEFINED | P_IDENT(GPIO_PC1) | P_FUNCT(1))
+#define P_MBCLK        (P_DEFINED | P_IDENT(GPIO_PC5) | P_FUNCT(1))
+
+#define P_PPI1_D0      (P_DEFINED | P_IDENT(GPIO_PD0) | P_FUNCT(0))
+#define P_PPI1_D1      (P_DEFINED | P_IDENT(GPIO_PD1) | P_FUNCT(0))
+#define P_PPI1_D2      (P_DEFINED | P_IDENT(GPIO_PD2) | P_FUNCT(0))
+#define P_PPI1_D3      (P_DEFINED | P_IDENT(GPIO_PD3) | P_FUNCT(0))
+#define P_PPI1_D4      (P_DEFINED | P_IDENT(GPIO_PD4) | P_FUNCT(0))
+#define P_PPI1_D5      (P_DEFINED | P_IDENT(GPIO_PD5) | P_FUNCT(0))
+#define P_PPI1_D6      (P_DEFINED | P_IDENT(GPIO_PD6) | P_FUNCT(0))
+#define P_PPI1_D7      (P_DEFINED | P_IDENT(GPIO_PD7) | P_FUNCT(0))
+#define P_PPI1_D8      (P_DEFINED | P_IDENT(GPIO_PD8) | P_FUNCT(0))
+#define P_PPI1_D9      (P_DEFINED | P_IDENT(GPIO_PD9) | P_FUNCT(0))
+#define P_PPI1_D10     (P_DEFINED | P_IDENT(GPIO_PD10) | P_FUNCT(0))
+#define P_PPI1_D11     (P_DEFINED | P_IDENT(GPIO_PD11) | P_FUNCT(0))
+#define P_PPI1_D12     (P_DEFINED | P_IDENT(GPIO_PD12) | P_FUNCT(0))
+#define P_PPI1_D13     (P_DEFINED | P_IDENT(GPIO_PD13) | P_FUNCT(0))
+#define P_PPI1_D14     (P_DEFINED | P_IDENT(GPIO_PD14) | P_FUNCT(0))
+#define P_PPI1_D15     (P_DEFINED | P_IDENT(GPIO_PD15) | P_FUNCT(0))
+
+#define P_HOST_D8      (P_DEFINED | P_IDENT(GPIO_PD0) | P_FUNCT(1))
+#define P_HOST_D9      (P_DEFINED | P_IDENT(GPIO_PD1) | P_FUNCT(1))
+#define P_HOST_D10     (P_DEFINED | P_IDENT(GPIO_PD2) | P_FUNCT(1))
+#define P_HOST_D11     (P_DEFINED | P_IDENT(GPIO_PD3) | P_FUNCT(1))
+#define P_HOST_D12     (P_DEFINED | P_IDENT(GPIO_PD4) | P_FUNCT(1))
+#define P_HOST_D13     (P_DEFINED | P_IDENT(GPIO_PD5) | P_FUNCT(1))
+#define P_HOST_D14     (P_DEFINED | P_IDENT(GPIO_PD6) | P_FUNCT(1))
+#define P_HOST_D15     (P_DEFINED | P_IDENT(GPIO_PD7) | P_FUNCT(1))
+#define P_HOST_D0      (P_DEFINED | P_IDENT(GPIO_PD8) | P_FUNCT(1))
+#define P_HOST_D1      (P_DEFINED | P_IDENT(GPIO_PD9) | P_FUNCT(1))
+#define P_HOST_D2      (P_DEFINED | P_IDENT(GPIO_PD10) | P_FUNCT(1))
+#define P_HOST_D3      (P_DEFINED | P_IDENT(GPIO_PD11) | P_FUNCT(1))
+#define P_HOST_D4      (P_DEFINED | P_IDENT(GPIO_PD12) | P_FUNCT(1))
+#define P_HOST_D5      (P_DEFINED | P_IDENT(GPIO_PD13) | P_FUNCT(1))
+#define P_HOST_D6      (P_DEFINED | P_IDENT(GPIO_PD14) | P_FUNCT(1))
+#define P_HOST_D7      (P_DEFINED | P_IDENT(GPIO_PD15) | P_FUNCT(1))
+#define P_SPORT1_TFS   (P_DEFINED | P_IDENT(GPIO_PD0) | P_FUNCT(2))
+#define P_SPORT1_DTSEC (P_DEFINED | P_IDENT(GPIO_PD1) | P_FUNCT(2))
+#define P_SPORT1_DTPRI (P_DEFINED | P_IDENT(GPIO_PD2) | P_FUNCT(2))
+#define P_SPORT1_TSCLK (P_DEFINED | P_IDENT(GPIO_PD3) | P_FUNCT(2))
+#define P_SPORT1_RFS   (P_DEFINED | P_IDENT(GPIO_PD4) | P_FUNCT(2))
+#define P_SPORT1_DRSEC (P_DEFINED | P_IDENT(GPIO_PD5) | P_FUNCT(2))
+#define P_SPORT1_DRPRI (P_DEFINED | P_IDENT(GPIO_PD6) | P_FUNCT(2))
+#define P_SPORT1_RSCLK (P_DEFINED | P_IDENT(GPIO_PD7) | P_FUNCT(2))
+#define P_PPI2_D0      (P_DEFINED | P_IDENT(GPIO_PD8) | P_FUNCT(2))
+#define P_PPI2_D1      (P_DEFINED | P_IDENT(GPIO_PD9) | P_FUNCT(2))
+#define P_PPI2_D2      (P_DEFINED | P_IDENT(GPIO_PD10) | P_FUNCT(2))
+#define P_PPI2_D3      (P_DEFINED | P_IDENT(GPIO_PD11) | P_FUNCT(2))
+#define P_PPI2_D4      (P_DEFINED | P_IDENT(GPIO_PD12) | P_FUNCT(2))
+#define P_PPI2_D5      (P_DEFINED | P_IDENT(GPIO_PD13) | P_FUNCT(2))
+#define P_PPI2_D6      (P_DEFINED | P_IDENT(GPIO_PD14) | P_FUNCT(2))
+#define P_PPI2_D7      (P_DEFINED | P_IDENT(GPIO_PD15) | P_FUNCT(2))
+#define P_PPI0_D18     (P_DEFINED | P_IDENT(GPIO_PD0) | P_FUNCT(3))
+#define P_PPI0_D19     (P_DEFINED | P_IDENT(GPIO_PD1) | P_FUNCT(3))
+#define P_PPI0_D20     (P_DEFINED | P_IDENT(GPIO_PD2) | P_FUNCT(3))
+#define P_PPI0_D21     (P_DEFINED | P_IDENT(GPIO_PD3) | P_FUNCT(3))
+#define P_PPI0_D22     (P_DEFINED | P_IDENT(GPIO_PD4) | P_FUNCT(3))
+#define P_PPI0_D23     (P_DEFINED | P_IDENT(GPIO_PD5) | P_FUNCT(3))
+#define P_KEY_ROW0     (P_DEFINED | P_IDENT(GPIO_PD8) | P_FUNCT(3))
+#define P_KEY_ROW1     (P_DEFINED | P_IDENT(GPIO_PD9) | P_FUNCT(3))
+#define P_KEY_ROW2     (P_DEFINED | P_IDENT(GPIO_PD10) | P_FUNCT(3))
+#define P_KEY_ROW3     (P_DEFINED | P_IDENT(GPIO_PD11) | P_FUNCT(3))
+#define P_KEY_COL0     (P_DEFINED | P_IDENT(GPIO_PD12) | P_FUNCT(3))
+#define P_KEY_COL1     (P_DEFINED | P_IDENT(GPIO_PD13) | P_FUNCT(3))
+#define P_KEY_COL2     (P_DEFINED | P_IDENT(GPIO_PD14) | P_FUNCT(3))
+#define P_KEY_COL3     (P_DEFINED | P_IDENT(GPIO_PD15) | P_FUNCT(3))
+
+#define GPIO_DEFAULT_BOOT_SPI_CS GPIO_PE4
+#define P_DEFAULT_BOOT_SPI_CS P_SPI0_SSEL1
+#define P_SPI0_SCK     (P_DEFINED | P_IDENT(GPIO_PE0) | P_FUNCT(0))
+#define P_SPI0_MISO    (P_DEFINED | P_IDENT(GPIO_PE1) | P_FUNCT(0))
+#define P_SPI0_MOSI    (P_DEFINED | P_IDENT(GPIO_PE2) | P_FUNCT(0))
+#define P_SPI0_SS      (P_DEFINED | P_IDENT(GPIO_PE3) | P_FUNCT(0))
+#define P_SPI0_SSEL1   (P_DEFINED | P_IDENT(GPIO_PE4) | P_FUNCT(0))
+#define P_SPI0_SSEL2   (P_DEFINED | P_IDENT(GPIO_PE5) | P_FUNCT(0))
+#define P_SPI0_SSEL3   (P_DEFINED | P_IDENT(GPIO_PE6) | P_FUNCT(0))
+#define P_UART0_TX     (P_DEFINED | P_IDENT(GPIO_PE7) | P_FUNCT(0))
+#define P_UART0_RX     (P_DEFINED | P_IDENT(GPIO_PE8) | P_FUNCT(0))
+#define P_UART1_RTS    (P_DEFINED | P_IDENT(GPIO_PE9) | P_FUNCT(0))
+#define P_UART1_CTS    (P_DEFINED | P_IDENT(GPIO_PE10) | P_FUNCT(0))
+#define P_PPI1_CLK     (P_DEFINED | P_IDENT(GPIO_PE11) | P_FUNCT(0))
+#define P_PPI1_FS1     (P_DEFINED | P_IDENT(GPIO_PE12) | P_FUNCT(0))
+#define P_PPI1_FS2     (P_DEFINED | P_IDENT(GPIO_PE13) | P_FUNCT(0))
+#define P_TWI0_SCL     (P_DEFINED | P_IDENT(GPIO_PE14) | P_FUNCT(0))
+#define P_TWI0_SDA     (P_DEFINED | P_IDENT(GPIO_PE15) | P_FUNCT(0))
+#define P_KEY_COL7     (P_DEFINED | P_IDENT(GPIO_PE0) | P_FUNCT(1))
+#define P_KEY_ROW6     (P_DEFINED | P_IDENT(GPIO_PE1) | P_FUNCT(1))
+#define P_KEY_COL6     (P_DEFINED | P_IDENT(GPIO_PE2) | P_FUNCT(1))
+#define P_KEY_ROW5     (P_DEFINED | P_IDENT(GPIO_PE3) | P_FUNCT(1))
+#define P_KEY_COL5     (P_DEFINED | P_IDENT(GPIO_PE4) | P_FUNCT(1))
+#define P_KEY_ROW4     (P_DEFINED | P_IDENT(GPIO_PE5) | P_FUNCT(1))
+#define P_KEY_COL4     (P_DEFINED | P_IDENT(GPIO_PE6) | P_FUNCT(1))
+#define P_KEY_ROW7     (P_DEFINED | P_IDENT(GPIO_PE7) | P_FUNCT(1))
+
+#define P_PPI0_D0      (P_DEFINED | P_IDENT(GPIO_PF0) | P_FUNCT(0))
+#define P_PPI0_D1      (P_DEFINED | P_IDENT(GPIO_PF1) | P_FUNCT(0))
+#define P_PPI0_D2      (P_DEFINED | P_IDENT(GPIO_PF2) | P_FUNCT(0))
+#define P_PPI0_D3      (P_DEFINED | P_IDENT(GPIO_PF3) | P_FUNCT(0))
+#define P_PPI0_D4      (P_DEFINED | P_IDENT(GPIO_PF4) | P_FUNCT(0))
+#define P_PPI0_D5      (P_DEFINED | P_IDENT(GPIO_PF5) | P_FUNCT(0))
+#define P_PPI0_D6      (P_DEFINED | P_IDENT(GPIO_PF6) | P_FUNCT(0))
+#define P_PPI0_D7      (P_DEFINED | P_IDENT(GPIO_PF7) | P_FUNCT(0))
+#define P_PPI0_D8      (P_DEFINED | P_IDENT(GPIO_PF8) | P_FUNCT(0))
+#define P_PPI0_D9      (P_DEFINED | P_IDENT(GPIO_PF9) | P_FUNCT(0))
+#define P_PPI0_D10     (P_DEFINED | P_IDENT(GPIO_PF10) | P_FUNCT(0))
+#define P_PPI0_D11     (P_DEFINED | P_IDENT(GPIO_PF11) | P_FUNCT(0))
+#define P_PPI0_D12     (P_DEFINED | P_IDENT(GPIO_PF12) | P_FUNCT(0))
+#define P_PPI0_D13     (P_DEFINED | P_IDENT(GPIO_PF13) | P_FUNCT(0))
+#define P_PPI0_D14     (P_DEFINED | P_IDENT(GPIO_PF14) | P_FUNCT(0))
+#define P_PPI0_D15     (P_DEFINED | P_IDENT(GPIO_PF15) | P_FUNCT(0))
+
+#ifdef CONFIG_BF548_ATAPI_ALTERNATIVE_PORT
+# define P_ATAPI_D0A   (P_DEFINED | P_IDENT(GPIO_PF0) | P_FUNCT(1))
+# define P_ATAPI_D1A   (P_DEFINED | P_IDENT(GPIO_PF1) | P_FUNCT(1))
+# define P_ATAPI_D2A   (P_DEFINED | P_IDENT(GPIO_PF2) | P_FUNCT(1))
+# define P_ATAPI_D3A   (P_DEFINED | P_IDENT(GPIO_PF3) | P_FUNCT(1))
+# define P_ATAPI_D4A   (P_DEFINED | P_IDENT(GPIO_PF4) | P_FUNCT(1))
+# define P_ATAPI_D5A   (P_DEFINED | P_IDENT(GPIO_PF5) | P_FUNCT(1))
+# define P_ATAPI_D6A   (P_DEFINED | P_IDENT(GPIO_PF6) | P_FUNCT(1))
+# define P_ATAPI_D7A   (P_DEFINED | P_IDENT(GPIO_PF7) | P_FUNCT(1))
+# define P_ATAPI_D8A   (P_DEFINED | P_IDENT(GPIO_PF8) | P_FUNCT(1))
+# define P_ATAPI_D9A   (P_DEFINED | P_IDENT(GPIO_PF9) | P_FUNCT(1))
+# define P_ATAPI_D10A  (P_DEFINED | P_IDENT(GPIO_PF10) | P_FUNCT(1))
+# define P_ATAPI_D11A  (P_DEFINED | P_IDENT(GPIO_PF11) | P_FUNCT(1))
+# define P_ATAPI_D12A  (P_DEFINED | P_IDENT(GPIO_PF12) | P_FUNCT(1))
+# define P_ATAPI_D13A  (P_DEFINED | P_IDENT(GPIO_PF13) | P_FUNCT(1))
+# define P_ATAPI_D14A  (P_DEFINED | P_IDENT(GPIO_PF14) | P_FUNCT(1))
+# define P_ATAPI_D15A  (P_DEFINED | P_IDENT(GPIO_PF15) | P_FUNCT(1))
+#else
+# define P_ATAPI_D0A   (P_DONTCARE)
+# define P_ATAPI_D1A   (P_DONTCARE)
+# define P_ATAPI_D2A   (P_DONTCARE)
+# define P_ATAPI_D3A   (P_DONTCARE)
+# define P_ATAPI_D4A   (P_DONTCARE)
+# define P_ATAPI_D5A   (P_DONTCARE)
+# define P_ATAPI_D6A   (P_DONTCARE)
+# define P_ATAPI_D7A   (P_DONTCARE)
+# define P_ATAPI_D8A   (P_DONTCARE)
+# define P_ATAPI_D9A   (P_DONTCARE)
+# define P_ATAPI_D10A  (P_DONTCARE)
+# define P_ATAPI_D11A  (P_DONTCARE)
+# define P_ATAPI_D12A  (P_DONTCARE)
+# define P_ATAPI_D13A  (P_DONTCARE)
+# define P_ATAPI_D14A  (P_DONTCARE)
+# define P_ATAPI_D15A  (P_DONTCARE)
+#endif
+
+#define P_PPI0_CLK     (P_DEFINED | P_IDENT(GPIO_PG0) | P_FUNCT(0))
+#define P_PPI0_FS1     (P_DEFINED | P_IDENT(GPIO_PG1) | P_FUNCT(0))
+#define P_PPI0_FS2     (P_DEFINED | P_IDENT(GPIO_PG2) | P_FUNCT(0))
+#define P_PPI0_D16     (P_DEFINED | P_IDENT(GPIO_PG3) | P_FUNCT(0))
+#define P_PPI0_D17     (P_DEFINED | P_IDENT(GPIO_PG4) | P_FUNCT(0))
+#define P_SPI1_SSEL1   (P_DEFINED | P_IDENT(GPIO_PG5) | P_FUNCT(0))
+#define P_SPI1_SSEL2   (P_DEFINED | P_IDENT(GPIO_PG6) | P_FUNCT(0))
+#define P_SPI1_SSEL3   (P_DEFINED | P_IDENT(GPIO_PG7) | P_FUNCT(0))
+#define P_SPI1_SCK     (P_DEFINED | P_IDENT(GPIO_PG8) | P_FUNCT(0))
+#define P_SPI1_MISO    (P_DEFINED | P_IDENT(GPIO_PG9) | P_FUNCT(0))
+#define P_SPI1_MOSI    (P_DEFINED | P_IDENT(GPIO_PG10) | P_FUNCT(0))
+#define P_SPI1_SS      (P_DEFINED | P_IDENT(GPIO_PG11) | P_FUNCT(0))
+#define P_CAN0_TX      (P_DEFINED | P_IDENT(GPIO_PG12) | P_FUNCT(0))
+#define P_CAN0_RX      (P_DEFINED | P_IDENT(GPIO_PG13) | P_FUNCT(0))
+#define P_CAN1_TX      (P_DEFINED | P_IDENT(GPIO_PG14) | P_FUNCT(0))
+#define P_CAN1_RX      (P_DEFINED | P_IDENT(GPIO_PG15) | P_FUNCT(0))
+#ifdef CONFIG_BF548_ATAPI_ALTERNATIVE_PORT
+# define P_ATAPI_A0A   (P_DEFINED | P_IDENT(GPIO_PG2) | P_FUNCT(1))
+# define P_ATAPI_A1A   (P_DEFINED | P_IDENT(GPIO_PG3) | P_FUNCT(1))
+# define P_ATAPI_A2A   (P_DEFINED | P_IDENT(GPIO_PG4) | P_FUNCT(1))
+#else
+# define P_ATAPI_A0A   (P_DONTCARE)
+# define P_ATAPI_A1A   (P_DONTCARE)
+# define P_ATAPI_A2A   (P_DONTCARE)
+#endif
+#define P_HOST_CE      (P_DEFINED | P_IDENT(GPIO_PG5) | P_FUNCT(1))
+#define P_HOST_RD      (P_DEFINED | P_IDENT(GPIO_PG6) | P_FUNCT(1))
+#define P_HOST_WR      (P_DEFINED | P_IDENT(GPIO_PG7) | P_FUNCT(1))
+#define P_MTXONB       (P_DEFINED | P_IDENT(GPIO_PG11) | P_FUNCT(1))
+#define P_PPI2_FS2     (P_DEFINED | P_IDENT(GPIO_PG5) | P_FUNCT(2))
+#define P_PPI2_FS1     (P_DEFINED | P_IDENT(GPIO_PG6) | P_FUNCT(2))
+#define P_PPI2_CLK     (P_DEFINED | P_IDENT(GPIO_PG7) | P_FUNCT(2))
+#define P_CNT_CZM      (P_DEFINED | P_IDENT(GPIO_PG5) | P_FUNCT(3))
+
+#define P_UART1_TX     (P_DEFINED | P_IDENT(GPIO_PH0) | P_FUNCT(0))
+#define P_UART1_RX     (P_DEFINED | P_IDENT(GPIO_PH1) | P_FUNCT(0))
+#define P_ATAPI_RESET  (P_DEFINED | P_IDENT(GPIO_PH2) | P_FUNCT(0))
+#define P_HOST_ADDR    (P_DEFINED | P_IDENT(GPIO_PH3) | P_FUNCT(0))
+#define P_HOST_ACK     (P_DEFINED | P_IDENT(GPIO_PH4) | P_FUNCT(0))
+#define P_MTX  (P_DEFINED | P_IDENT(GPIO_PH5) | P_FUNCT(0))
+#define P_MRX  (P_DEFINED | P_IDENT(GPIO_PH6) | P_FUNCT(0))
+#define P_MRXONB       (P_DEFINED | P_IDENT(GPIO_PH7) | P_FUNCT(0))
+#define P_A4   (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PH8) | P_FUNCT(0))
+#define P_A5   (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PH9) | P_FUNCT(0))
+#define P_A6   (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PH10) | P_FUNCT(0))
+#define P_A7   (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PH11) | P_FUNCT(0))
+#define P_A8   (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PH12) | P_FUNCT(0))
+#define P_A9   (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PH13) | P_FUNCT(0))
+#define P_PPI1_FS3     (P_DEFINED | P_IDENT(GPIO_PH0) | P_FUNCT(1))
+#define P_PPI2_FS3     (P_DEFINED | P_IDENT(GPIO_PH1) | P_FUNCT(1))
+#define P_TMR8 (P_DEFINED | P_IDENT(GPIO_PH2) | P_FUNCT(1))
+#define P_TMR9 (P_DEFINED | P_IDENT(GPIO_PH3) | P_FUNCT(1))
+#define P_TMR10        (P_DEFINED | P_IDENT(GPIO_PH4) | P_FUNCT(1))
+#define P_DMAR0        (P_DEFINED | P_IDENT(GPIO_PH5) | P_FUNCT(1))
+#define P_DMAR1        (P_DEFINED | P_IDENT(GPIO_PH6) | P_FUNCT(1))
+#define P_PPI0_FS3     (P_DEFINED | P_IDENT(GPIO_PH2) | P_FUNCT(2))
+#define P_CNT_CDG      (P_DEFINED | P_IDENT(GPIO_PH3) | P_FUNCT(2))
+#define P_CNT_CUD      (P_DEFINED | P_IDENT(GPIO_PH4) | P_FUNCT(2))
+
+#define P_A10  (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PI0) | P_FUNCT(0))
+#define P_A11  (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PI1) | P_FUNCT(0))
+#define P_A12  (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PI2) | P_FUNCT(0))
+#define P_A13  (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PI3) | P_FUNCT(0))
+#define P_A14  (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PI4) | P_FUNCT(0))
+#define P_A15  (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PI5) | P_FUNCT(0))
+#define P_A16  (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PI6) | P_FUNCT(0))
+#define P_A17  (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PI7) | P_FUNCT(0))
+#define P_A18  (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PI8) | P_FUNCT(0))
+#define P_A19  (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PI9) | P_FUNCT(0))
+#define P_A20  (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PI10) | P_FUNCT(0))
+#define P_A21  (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PI11) | P_FUNCT(0))
+#define P_A22  (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PI12) | P_FUNCT(0))
+#define P_A23  (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PI13) | P_FUNCT(0))
+#define P_A24  (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PI14) | P_FUNCT(0))
+#define P_A25  (P_MAYSHARE | P_DEFINED | P_IDENT(GPIO_PI15) | P_FUNCT(0))
+#define P_NOR_CLK      (P_DEFINED | P_IDENT(GPIO_PI15) | P_FUNCT(1))
+
+#define P_AMC_ARDY_NOR_WAIT    (P_DEFINED | P_IDENT(GPIO_PJ0) | P_FUNCT(0))
+#define P_NAND_CE      (P_DEFINED | P_IDENT(GPIO_PJ1) | P_FUNCT(0))
+#define P_NAND_RB      (P_DEFINED | P_IDENT(GPIO_PJ2) | P_FUNCT(0))
+#define P_ATAPI_DIOR   (P_DEFINED | P_IDENT(GPIO_PJ3) | P_FUNCT(0))
+#define P_ATAPI_DIOW   (P_DEFINED | P_IDENT(GPIO_PJ4) | P_FUNCT(0))
+#define P_ATAPI_CS0    (P_DEFINED | P_IDENT(GPIO_PJ5) | P_FUNCT(0))
+#define P_ATAPI_CS1    (P_DEFINED | P_IDENT(GPIO_PJ6) | P_FUNCT(0))
+#define P_ATAPI_DMACK  (P_DEFINED | P_IDENT(GPIO_PJ7) | P_FUNCT(0))
+#define P_ATAPI_DMARQ  (P_DEFINED | P_IDENT(GPIO_PJ8) | P_FUNCT(0))
+#define P_ATAPI_INTRQ  (P_DEFINED | P_IDENT(GPIO_PJ9) | P_FUNCT(0))
+#define P_ATAPI_IORDY  (P_DEFINED | P_IDENT(GPIO_PJ10) | P_FUNCT(0))
+#define P_AMC_BR       (P_DEFINED | P_IDENT(GPIO_PJ11) | P_FUNCT(0))
+#define P_AMC_BG       (P_DEFINED | P_IDENT(GPIO_PJ12) | P_FUNCT(0))
+#define P_AMC_BGH      (P_DEFINED | P_IDENT(GPIO_PJ13) | P_FUNCT(0))
+
+
+#define P_NAND_D0      (P_DONTCARE)
+#define P_NAND_D1      (P_DONTCARE)
+#define P_NAND_D2      (P_DONTCARE)
+#define P_NAND_D3      (P_DONTCARE)
+#define P_NAND_D4      (P_DONTCARE)
+#define P_NAND_D5      (P_DONTCARE)
+#define P_NAND_D6      (P_DONTCARE)
+#define P_NAND_D7      (P_DONTCARE)
+#define P_NAND_WE      (P_DONTCARE)
+#define P_NAND_RE      (P_DONTCARE)
+#define P_NAND_CLE     (P_DONTCARE)
+#define P_NAND_ALE     (P_DONTCARE)
+
+#endif /* _MACH_PORTMUX_H_ */
index e4aa20c525a6908c68bb56369569a7d1454f6298..4c108c99cb6ebca31efbab522674b58bedb23582 100644 (file)
@@ -1,9 +1,13 @@
 /*
- * File: include/asm-blackfin/mach-bf561/anomaly.h
- * Bugs: Enter bugs at http://blackfin.uclinux.org/
+ * DO NOT EDIT THIS FILE
+ * This file is under version control at
+ *   svn://sources.blackfin.uclinux.org/toolchain/trunk/proc-defs/header-frags/
+ * and can be replaced with that version at any time
+ * DO NOT EDIT THIS FILE
  *
- * Copyright (C) 2004-2009 Analog Devices Inc.
- * Licensed under the GPL-2 or later.
+ * Copyright 2004-2010 Analog Devices Inc.
+ * Licensed under the ADI BSD license.
+ *   https://docs.blackfin.uclinux.org/doku.php?id=adi_bsd
  */
 
 /* This file should be up to date with:
 # error will not work on BF561 silicon version 0.0, 0.1, 0.2, or 0.4
 #endif
 
-/* Multi-issue instruction with dsp32shiftimm in slot1 and P-reg store in slot 2 not supported */
+/* Multi-Issue Instruction with dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported */
 #define ANOMALY_05000074 (1)
 /* UART Line Status Register (UART_LSR) Bits Are Not Updated at the Same Time */
 #define ANOMALY_05000099 (__SILICON_REVISION__ < 5)
-/* Trace Buffers may record discontinuities into emulation mode and/or exception, NMI, reset handlers */
+/* Trace Buffers May Contain Errors in Emulation Mode and/or Exception, NMI, Reset Handlers */
 #define ANOMALY_05000116 (__SILICON_REVISION__ < 3)
-/* Testset instructions restricted to 32-bit aligned memory locations */
+/* TESTSET Instructions Restricted to 32-Bit Aligned Memory Locations */
 #define ANOMALY_05000120 (1)
 /* Rx.H Cannot Be Used to Access 16-bit System MMR Registers */
 #define ANOMALY_05000122 (1)
-/* Erroneous exception when enabling cache */
+/* Erroneous Exception when Enabling Cache */
 #define ANOMALY_05000125 (__SILICON_REVISION__ < 3)
-/* Signbits instruction not functional under certain conditions */
+/* SIGNBITS Instruction Not Functional under Certain Conditions */
 #define ANOMALY_05000127 (1)
 /* Two bits in the Watchpoint Status Register (WPSTAT) are swapped */
 #define ANOMALY_05000134 (__SILICON_REVISION__ < 3)
@@ -40,7 +44,7 @@
 #define ANOMALY_05000136 (__SILICON_REVISION__ < 3)
 /* Allowing the SPORT RX FIFO to fill will cause an overflow */
 #define ANOMALY_05000140 (__SILICON_REVISION__ < 3)
-/* An Infinite Stall occurs with a particular sequence of consecutive dual dag events */
+/* Infinite Stall may occur with a particular sequence of consecutive dual dag events */
 #define ANOMALY_05000141 (__SILICON_REVISION__ < 3)
 /* Interrupts may be lost when a programmable input flag is configured to be edge sensitive */
 #define ANOMALY_05000142 (__SILICON_REVISION__ < 3)
@@ -52,7 +56,7 @@
 #define ANOMALY_05000146 (__SILICON_REVISION__ < 3)
 /* Source MDMA descriptor may stop with a DMA Error near beginning of descriptor fetch */
 #define ANOMALY_05000147 (__SILICON_REVISION__ < 3)
-/* IMDMA S1/D1 channel may stall */
+/* IMDMA S1/D1 Channel May Stall */
 #define ANOMALY_05000149 (1)
 /* DMA engine may lose data due to incorrect handshaking */
 #define ANOMALY_05000150 (__SILICON_REVISION__ < 3)
@@ -66,7 +70,7 @@
 #define ANOMALY_05000154 (__SILICON_REVISION__ < 3)
 /* Timers in PWM-Out Mode with PPI GP Receive (Input) Mode with 0 Frame Syncs */
 #define ANOMALY_05000156 (__SILICON_REVISION__ < 4)
-/* Killed 32-bit MMR write leads to next system MMR access thinking it should be 32-bit */
+/* Killed 32-Bit MMR Write Leads to Next System MMR Access Thinking It Should Be 32-Bit */
 #define ANOMALY_05000157 (__SILICON_REVISION__ < 3)
 /* DMA Lock-up at CCLK to SCLK ratios of 4:1, 2:1, or 1:1 */
 #define ANOMALY_05000159 (__SILICON_REVISION__ < 3)
 #define ANOMALY_05000161 (__SILICON_REVISION__ < 3)
 /* DMEM_CONTROL<12> is not set on Reset */
 #define ANOMALY_05000162 (__SILICON_REVISION__ < 3)
-/* SPORT transmit data is not gated by external frame sync in certain conditions */
+/* SPORT Transmit Data Is Not Gated by External Frame Sync in Certain Conditions */
 #define ANOMALY_05000163 (__SILICON_REVISION__ < 3)
-/* PPI Data Lengths Between 8 and 16 Do Not Zero Out Upper Bits */
+/* PPI Data Lengths between 8 and 16 Do Not Zero Out Upper Bits */
 #define ANOMALY_05000166 (1)
 /* Turning SPORTs on while External Frame Sync Is Active May Corrupt Data */
 #define ANOMALY_05000167 (1)
-/* SDRAM auto-refresh and subsequent Power Ups */
+/* Undefined Behavior when Power-Up Sequence Is Issued to SDRAM during Auto-Refresh */
 #define ANOMALY_05000168 (__SILICON_REVISION__ < 5)
-/* DATA CPLB page miss can result in lost write-through cache data writes */
+/* DATA CPLB Page Miss Can Result in Lost Write-Through Data Cache Writes */
 #define ANOMALY_05000169 (__SILICON_REVISION__ < 5)
-/* Boot-ROM code modifies SICA_IWRx wakeup registers */
+/* Boot-ROM Modifies SICA_IWRx Wakeup Registers */
 #define ANOMALY_05000171 (__SILICON_REVISION__ < 5)
 /* DSPID register values incorrect */
 #define ANOMALY_05000172 (__SILICON_REVISION__ < 3)
 #define ANOMALY_05000174 (__SILICON_REVISION__ < 5)
 /* Overlapping Sequencer and Memory Stalls */
 #define ANOMALY_05000175 (__SILICON_REVISION__ < 5)
-/* Multiplication of (-1) by (-1) followed by an accumulator saturation */
+/* Overflow Bit Asserted when Multiplication of -1 by -1 Followed by Accumulator Saturation */
 #define ANOMALY_05000176 (__SILICON_REVISION__ < 5)
 /* PPI_COUNT Cannot Be Programmed to 0 in General Purpose TX or RX Modes */
 #define ANOMALY_05000179 (__SILICON_REVISION__ < 5)
 /* PPI_DELAY Not Functional in PPI Modes with 0 Frame Syncs */
 #define ANOMALY_05000180 (1)
-/* Disabling the PPI resets the PPI configuration registers */
+/* Disabling the PPI Resets the PPI Configuration Registers */
 #define ANOMALY_05000181 (__SILICON_REVISION__ < 5)
-/* IMDMA does not operate to full speed for 600MHz and higher devices */
+/* Internal Memory DMA Does Not Operate at Full Speed */
 #define ANOMALY_05000182 (1)
-/* Timer Pin limitations for PPI TX Modes with External Frame Syncs */
+/* Timer Pin Limitations for PPI TX Modes with External Frame Syncs */
 #define ANOMALY_05000184 (__SILICON_REVISION__ < 5)
-/* PPI TX Mode with 2 External Frame Syncs */
+/* Early PPI Transmit when FS1 Asserts before FS2 in TX Mode with 2 External Frame Syncs */
 #define ANOMALY_05000185 (__SILICON_REVISION__ < 5)
-/* PPI packing with Data Length greater than 8 bits (not a meaningful mode) */
+/* Upper PPI Pins Driven when PPI Packing Enabled and Data Length >8 Bits */
 #define ANOMALY_05000186 (__SILICON_REVISION__ < 5)
 /* IMDMA Corrupted Data after a Halt */
 #define ANOMALY_05000187 (1)
 /* IMDMA Restrictions on Descriptor and Buffer Placement in Memory */
 #define ANOMALY_05000188 (__SILICON_REVISION__ < 5)
-/* False Protection Exceptions */
+/* False Protection Exceptions when Speculative Fetch Is Cancelled */
 #define ANOMALY_05000189 (__SILICON_REVISION__ < 5)
-/* PPI not functional at core voltage < 1Volt */
+/* PPI Not Functional at Core Voltage < 1Volt */
 #define ANOMALY_05000190 (1)
 /* PPI does not invert the Driving PPICLK edge in Transmit Modes */
 #define ANOMALY_05000191 (__SILICON_REVISION__ < 3)
 #define ANOMALY_05000193 (__SILICON_REVISION__ < 5)
 /* Restarting SPORT in Specific Modes May Cause Data Corruption */
 #define ANOMALY_05000194 (__SILICON_REVISION__ < 5)
-/* Failing MMR Accesses When Stalled by Preceding Memory Read */
+/* Failing MMR Accesses when Preceding Memory Read Stalls */
 #define ANOMALY_05000198 (__SILICON_REVISION__ < 5)
 /* Current DMA Address Shows Wrong Value During Carry Fix */
 #define ANOMALY_05000199 (__SILICON_REVISION__ < 5)
 #define ANOMALY_05000200 (__SILICON_REVISION__ < 5)
 /* Possible Infinite Stall with Specific Dual-DAG Situation */
 #define ANOMALY_05000202 (__SILICON_REVISION__ < 5)
-/* Incorrect data read with write-through cache and allocate cache lines on reads only mode */
+/* Incorrect Data Read with Writethrough "Allocate Cache Lines on Reads Only" Cache Mode */
 #define ANOMALY_05000204 (__SILICON_REVISION__ < 5)
-/* Specific sequence that can cause DMA error or DMA stopping */
+/* Specific Sequence that Can Cause DMA Error or DMA Stopping */
 #define ANOMALY_05000205 (__SILICON_REVISION__ < 5)
 /* Recovery from "Brown-Out" Condition */
 #define ANOMALY_05000207 (__SILICON_REVISION__ < 5)
 #define ANOMALY_05000215 (__SILICON_REVISION__ < 5)
 /* NMI Event at Boot Time Results in Unpredictable State */
 #define ANOMALY_05000219 (__SILICON_REVISION__ < 5)
-/* Data Corruption with Cached External Memory and Non-Cached On-Chip L2 Memory */
-#define ANOMALY_05000220 (__SILICON_REVISION__ < 5)
+/* Data Corruption/Core Hang with L2/L3 Configured in Writeback Cache Mode */
+#define ANOMALY_05000220 (__SILICON_REVISION__ < 4)
 /* Incorrect Pulse-Width of UART Start Bit */
 #define ANOMALY_05000225 (__SILICON_REVISION__ < 5)
 /* Scratchpad Memory Bank Reads May Return Incorrect Data */
 #define ANOMALY_05000230 (__SILICON_REVISION__ < 5)
 /* UART STB Bit Incorrectly Affects Receiver Setting */
 #define ANOMALY_05000231 (__SILICON_REVISION__ < 5)
-/* SPORT data transmit lines are incorrectly driven in multichannel mode */
+/* SPORT Data Transmit Lines Are Incorrectly Driven in Multichannel Mode */
 #define ANOMALY_05000232 (__SILICON_REVISION__ < 5)
 /* DF Bit in PLL_CTL Register Does Not Respond to Hardware Reset */
 #define ANOMALY_05000242 (__SILICON_REVISION__ < 5)
 #define ANOMALY_05000244 (__SILICON_REVISION__ < 5)
 /* False Hardware Error from an Access in the Shadow of a Conditional Branch */
 #define ANOMALY_05000245 (__SILICON_REVISION__ < 5)
-/* TESTSET operation forces stall on the other core */
+/* TESTSET Operation Forces Stall on the Other Core */
 #define ANOMALY_05000248 (__SILICON_REVISION__ < 5)
 /* Incorrect Bit Shift of Data Word in Multichannel (TDM) Mode in Certain Conditions */
 #define ANOMALY_05000250 (__SILICON_REVISION__ > 2 && __SILICON_REVISION__ < 5)
 #define ANOMALY_05000264 (__SILICON_REVISION__ < 5)
 /* Sensitivity To Noise with Slow Input Edge Rates on External SPORT TX and RX Clocks */
 #define ANOMALY_05000265 (__SILICON_REVISION__ < 5)
-/* IMDMA destination IRQ status must be read prior to using IMDMA */
+/* IMDMA Destination IRQ Status Must Be Read Prior to Using IMDMA */
 #define ANOMALY_05000266 (__SILICON_REVISION__ > 3)
-/* IMDMA may corrupt data under certain conditions */
+/* IMDMA May Corrupt Data under Certain Conditions */
 #define ANOMALY_05000267 (1)
 /* High I/O Activity Causes Output Voltage of Internal Voltage Regulator (Vddint) to Increase */
 #define ANOMALY_05000269 (1)
 #define ANOMALY_05000270 (1)
 /* Certain Data Cache Writethrough Modes Fail for Vddint <= 0.9V */
 #define ANOMALY_05000272 (1)
-/* Data cache write back to external synchronous memory may be lost */
+/* Data Cache Write Back to External Synchronous Memory May Be Lost */
 #define ANOMALY_05000274 (1)
 /* PPI Timing and Sampling Information Updates */
 #define ANOMALY_05000275 (__SILICON_REVISION__ > 2)
 #define ANOMALY_05000277 (__SILICON_REVISION__ < 3)
 /* Disabling Peripherals with DMA Running May Cause DMA System Instability */
 #define ANOMALY_05000278 (__SILICON_REVISION__ < 5)
-/* False Hardware Error Exception When ISR Context Is Not Restored */
-#define ANOMALY_05000281 (__SILICON_REVISION__ < 5)
-/* System MMR Write Is Stalled Indefinitely When Killed in a Particular Stage */
+/* False Hardware Error Exception when ISR Context Is Not Restored */
+/* Temporarily walk around for bug 5423 till this issue is confirmed by
+ * official anomaly document. It looks 05000281 still exists on bf561
+ * v0.5.
+ */
+#define ANOMALY_05000281 (__SILICON_REVISION__ <= 5)
+/* System MMR Write Is Stalled Indefinitely when Killed in a Particular Stage */
 #define ANOMALY_05000283 (1)
-/* A read will receive incorrect data under certain conditions */
+/* Reads Will Receive Incorrect Data under Certain Conditions */
 #define ANOMALY_05000287 (__SILICON_REVISION__ < 5)
 /* SPORTs May Receive Bad Data If FIFOs Fill Up */
 #define ANOMALY_05000288 (__SILICON_REVISION__ < 5)
 /* Memory-To-Memory DMA Source/Destination Descriptors Must Be in Same Memory Space */
 #define ANOMALY_05000301 (1)
-/* SSYNCs After Writes To DMA MMR Registers May Not Be Handled Correctly */
+/* SSYNCs after Writes to DMA MMR Registers May Not Be Handled Correctly */
 #define ANOMALY_05000302 (1)
 /* SPORT_HYS Bit in PLL_CTL Register Is Not Functional */
 #define ANOMALY_05000305 (__SILICON_REVISION__ < 5)
 #define ANOMALY_05000307 (__SILICON_REVISION__ < 5)
 /* False Hardware Errors Caused by Fetches at the Boundary of Reserved Memory */
 #define ANOMALY_05000310 (1)
-/* Errors When SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted */
+/* Errors when SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted */
 #define ANOMALY_05000312 (1)
 /* PPI Is Level-Sensitive on First Transfer In Single Frame Sync Modes */
 #define ANOMALY_05000313 (1)
-/* Killed System MMR Write Completes Erroneously On Next System MMR Access */
+/* Killed System MMR Write Completes Erroneously on Next System MMR Access */
 #define ANOMALY_05000315 (1)
-/* PF2 Output Remains Asserted After SPI Master Boot */
+/* PF2 Output Remains Asserted after SPI Master Boot */
 #define ANOMALY_05000320 (__SILICON_REVISION__ > 3)
-/* Erroneous GPIO Flag Pin Operations Under Specific Sequences */
+/* Erroneous GPIO Flag Pin Operations under Specific Sequences */
 #define ANOMALY_05000323 (1)
-/* SPORT Secondary Receive Channel Not Functional When Word Length Exceeds 16 Bits */
+/* SPORT Secondary Receive Channel Not Functional when Word Length >16 Bits */
 #define ANOMALY_05000326 (__SILICON_REVISION__ > 3)
-/* New Feature: 24-Bit SPI Boot Mode Support (Not Available On Older Silicon) */
+/* 24-Bit SPI Boot Mode Is Not Functional */
 #define ANOMALY_05000331 (__SILICON_REVISION__ < 5)
-/* New Feature: Slave SPI Boot Mode Supported (Not Available On Older Silicon) */
+/* Slave SPI Boot Mode Is Not Functional */
 #define ANOMALY_05000332 (__SILICON_REVISION__ < 5)
-/* Flag Data Register Writes One SCLK Cycle After Edge Is Detected May Clear Interrupt Status */
+/* Flag Data Register Writes One SCLK Cycle after Edge Is Detected May Clear Interrupt Status */
 #define ANOMALY_05000333 (__SILICON_REVISION__ < 5)
-/* New Feature: Additional PPI Frame Sync Sampling Options (Not Available on Older Silicon) */
+/* ALT_TIMING Bit in PLL_CTL Register Is Not Functional */
 #define ANOMALY_05000339 (__SILICON_REVISION__ < 5)
 /* Memory DMA FIFO Causes Throughput Degradation on Writes to External Memory */
 #define ANOMALY_05000343 (__SILICON_REVISION__ < 5)
 #define ANOMALY_05000366 (1)
 /* Possible RETS Register Corruption when Subroutine Is under 5 Cycles in Duration */
 #define ANOMALY_05000371 (1)
+/* SSYNC Stalls Processor when Executed from Non-Cacheable Memory */
+#define ANOMALY_05000402 (__SILICON_REVISION__ == 4)
 /* Level-Sensitive External GPIO Wakeups May Cause Indefinite Stall */
 #define ANOMALY_05000403 (1)
 /* TESTSET Instruction Causes Data Corruption with Writeback Data Cache Enabled */
 #define ANOMALY_05000428 (__SILICON_REVISION__ > 3)
 /* IFLUSH Instruction at End of Hardware Loop Causes Infinite Stall */
 #define ANOMALY_05000443 (1)
+/* False Hardware Error when RETI Points to Invalid Memory */
+#define ANOMALY_05000461 (1)
+/* Interrupted 32-Bit SPORT Data Register Access Results In Underflow */
+#define ANOMALY_05000473 (1)
+/* Possible Lockup Condition whem Modifying PLL from External Memory */
+#define ANOMALY_05000475 (__SILICON_REVISION__ < 4)
+/* TESTSET Instruction Cannot Be Interrupted */
+#define ANOMALY_05000477 (1)
+/* Reads of ITEST_COMMAND and ITEST_DATA Registers Cause Cache Corruption */
+#define ANOMALY_05000481 (1)
+/* IFLUSH sucks at life */
+#define ANOMALY_05000491 (1)
 
 /* Anomalies that don't exist on this proc */
+#define ANOMALY_05000119 (0)
 #define ANOMALY_05000158 (0)
 #define ANOMALY_05000183 (0)
+#define ANOMALY_05000233 (0)
+#define ANOMALY_05000234 (0)
 #define ANOMALY_05000273 (0)
 #define ANOMALY_05000311 (0)
 #define ANOMALY_05000353 (1)
+#define ANOMALY_05000364 (0)
 #define ANOMALY_05000380 (0)
 #define ANOMALY_05000386 (1)
+#define ANOMALY_05000389 (0)
+#define ANOMALY_05000400 (0)
 #define ANOMALY_05000430 (0)
 #define ANOMALY_05000432 (0)
 #define ANOMALY_05000435 (0)
 #define ANOMALY_05000447 (0)
 #define ANOMALY_05000448 (0)
+#define ANOMALY_05000456 (0)
+#define ANOMALY_05000450 (0)
+#define ANOMALY_05000465 (0)
+#define ANOMALY_05000467 (0)
+#define ANOMALY_05000474 (0)
+#define ANOMALY_05000485 (0)
 
 #endif
index 597dcecd8f0b0aad63c0a99ffd30ead82f6d928d..08e37e5e16dede5bb67fb7530768dc761da632d5 100644 (file)
@@ -9,4 +9,8 @@
 #define bfin_write_WDOG_CTL(val) bfin_write_WDOGA_CTL(val)
 #define bfin_write_WDOG_STAT(val) bfin_write_WDOGA_STAT(val)
 
+#include "gpio.h"
+#include "portmux.h"
 #include "ports.h"
+
+#define BF561_FAMILY 1 /* Linux glue */
diff --git a/arch/blackfin/include/asm/mach-bf561/gpio.h b/arch/blackfin/include/asm/mach-bf561/gpio.h
new file mode 100644 (file)
index 0000000..4f8aa5d
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2008 Analog Devices Inc.
+ * Licensed under the GPL-2 or later.
+ */
+
+
+#ifndef _MACH_GPIO_H_
+#define _MACH_GPIO_H_
+
+#define MAX_BLACKFIN_GPIOS 48
+
+#define GPIO_PF0       0
+#define GPIO_PF1       1
+#define GPIO_PF2       2
+#define GPIO_PF3       3
+#define GPIO_PF4       4
+#define GPIO_PF5       5
+#define GPIO_PF6       6
+#define GPIO_PF7       7
+#define GPIO_PF8       8
+#define GPIO_PF9       9
+#define GPIO_PF10      10
+#define GPIO_PF11      11
+#define GPIO_PF12      12
+#define GPIO_PF13      13
+#define GPIO_PF14      14
+#define GPIO_PF15      15
+#define GPIO_PF16      16
+#define GPIO_PF17      17
+#define GPIO_PF18      18
+#define GPIO_PF19      19
+#define GPIO_PF20      20
+#define GPIO_PF21      21
+#define GPIO_PF22      22
+#define GPIO_PF23      23
+#define GPIO_PF24      24
+#define GPIO_PF25      25
+#define GPIO_PF26      26
+#define GPIO_PF27      27
+#define GPIO_PF28      28
+#define GPIO_PF29      29
+#define GPIO_PF30      30
+#define GPIO_PF31      31
+#define GPIO_PF32      32
+#define GPIO_PF33      33
+#define GPIO_PF34      34
+#define GPIO_PF35      35
+#define GPIO_PF36      36
+#define GPIO_PF37      37
+#define GPIO_PF38      38
+#define GPIO_PF39      39
+#define GPIO_PF40      40
+#define GPIO_PF41      41
+#define GPIO_PF42      42
+#define GPIO_PF43      43
+#define GPIO_PF44      44
+#define GPIO_PF45      45
+#define GPIO_PF46      46
+#define GPIO_PF47      47
+
+#define PORT_FIO0 GPIO_0
+#define PORT_FIO1 GPIO_16
+#define PORT_FIO2 GPIO_32
+
+#endif /* _MACH_GPIO_H_ */
diff --git a/arch/blackfin/include/asm/mach-bf561/portmux.h b/arch/blackfin/include/asm/mach-bf561/portmux.h
new file mode 100644 (file)
index 0000000..2339ffd
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2007-2009 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#ifndef _MACH_PORTMUX_H_
+#define _MACH_PORTMUX_H_
+
+#define MAX_RESOURCES  MAX_BLACKFIN_GPIOS
+
+#define P_PPI0_CLK     (P_DONTCARE)
+#define P_PPI0_FS1     (P_DONTCARE)
+#define P_PPI0_FS2     (P_DONTCARE)
+#define P_PPI0_FS3     (P_DONTCARE)
+#define P_PPI0_D15     (P_DEFINED | P_IDENT(GPIO_PF47))
+#define P_PPI0_D14     (P_DEFINED | P_IDENT(GPIO_PF46))
+#define P_PPI0_D13     (P_DEFINED | P_IDENT(GPIO_PF45))
+#define P_PPI0_D12     (P_DEFINED | P_IDENT(GPIO_PF44))
+#define P_PPI0_D11     (P_DEFINED | P_IDENT(GPIO_PF43))
+#define P_PPI0_D10     (P_DEFINED | P_IDENT(GPIO_PF42))
+#define P_PPI0_D9      (P_DEFINED | P_IDENT(GPIO_PF41))
+#define P_PPI0_D8      (P_DEFINED | P_IDENT(GPIO_PF40))
+#define P_PPI0_D0      (P_DONTCARE)
+#define P_PPI0_D1      (P_DONTCARE)
+#define P_PPI0_D2      (P_DONTCARE)
+#define P_PPI0_D3      (P_DONTCARE)
+#define P_PPI0_D4      (P_DONTCARE)
+#define P_PPI0_D5      (P_DONTCARE)
+#define P_PPI0_D6      (P_DONTCARE)
+#define P_PPI0_D7      (P_DONTCARE)
+#define P_PPI1_CLK     (P_DONTCARE)
+#define P_PPI1_FS1     (P_DONTCARE)
+#define P_PPI1_FS2     (P_DONTCARE)
+#define P_PPI1_FS3     (P_DONTCARE)
+#define P_PPI1_D15     (P_DEFINED | P_IDENT(GPIO_PF39))
+#define P_PPI1_D14     (P_DEFINED | P_IDENT(GPIO_PF38))
+#define P_PPI1_D13     (P_DEFINED | P_IDENT(GPIO_PF37))
+#define P_PPI1_D12     (P_DEFINED | P_IDENT(GPIO_PF36))
+#define P_PPI1_D11     (P_DEFINED | P_IDENT(GPIO_PF35))
+#define P_PPI1_D10     (P_DEFINED | P_IDENT(GPIO_PF34))
+#define P_PPI1_D9      (P_DEFINED | P_IDENT(GPIO_PF33))
+#define P_PPI1_D8      (P_DEFINED | P_IDENT(GPIO_PF32))
+#define P_PPI1_D0      (P_DONTCARE)
+#define P_PPI1_D1      (P_DONTCARE)
+#define P_PPI1_D2      (P_DONTCARE)
+#define P_PPI1_D3      (P_DONTCARE)
+#define P_PPI1_D4      (P_DONTCARE)
+#define P_PPI1_D5      (P_DONTCARE)
+#define P_PPI1_D6      (P_DONTCARE)
+#define P_PPI1_D7      (P_DONTCARE)
+#define P_SPORT1_TSCLK (P_DEFINED | P_IDENT(GPIO_PF31))
+#define P_SPORT1_RSCLK (P_DEFINED | P_IDENT(GPIO_PF30))
+#define P_SPORT0_TSCLK (P_DEFINED | P_IDENT(GPIO_PF29))
+#define P_SPORT0_RSCLK (P_DEFINED | P_IDENT(GPIO_PF28))
+#define P_UART0_RX     (P_DEFINED | P_IDENT(GPIO_PF27))
+#define P_UART0_TX     (P_DEFINED | P_IDENT(GPIO_PF26))
+#define P_SPORT1_DRSEC (P_DEFINED | P_IDENT(GPIO_PF25))
+#define P_SPORT1_RFS   (P_DEFINED | P_IDENT(GPIO_PF24))
+#define P_SPORT1_DTPRI (P_DEFINED | P_IDENT(GPIO_PF23))
+#define P_SPORT1_DTSEC (P_DEFINED | P_IDENT(GPIO_PF22))
+#define P_SPORT1_TFS   (P_DEFINED | P_IDENT(GPIO_PF21))
+#define P_SPORT1_DRPRI (P_DONTCARE)
+#define P_SPORT0_DRSEC (P_DEFINED | P_IDENT(GPIO_PF20))
+#define P_SPORT0_RFS   (P_DEFINED | P_IDENT(GPIO_PF19))
+#define P_SPORT0_DTPRI (P_DEFINED | P_IDENT(GPIO_PF18))
+#define P_SPORT0_DTSEC (P_DEFINED | P_IDENT(GPIO_PF17))
+#define P_SPORT0_TFS   (P_DEFINED | P_IDENT(GPIO_PF16))
+#define P_SPORT0_DRPRI (P_DONTCARE)
+#define P_TMRCLK       (P_DEFINED | P_IDENT(GPIO_PF15))
+#define P_SPI0_SSEL7   (P_DEFINED | P_IDENT(GPIO_PF7))
+#define P_SPI0_SSEL6   (P_DEFINED | P_IDENT(GPIO_PF6))
+#define P_SPI0_SSEL5   (P_DEFINED | P_IDENT(GPIO_PF5))
+#define P_SPI0_SSEL4   (P_DEFINED | P_IDENT(GPIO_PF4))
+#define P_SPI0_SSEL3   (P_DEFINED | P_IDENT(GPIO_PF3))
+#define P_SPI0_SSEL2   (P_DEFINED | P_IDENT(GPIO_PF2))
+#define P_SPI0_SSEL1   (P_DEFINED | P_IDENT(GPIO_PF1))
+#define P_SPI0_SS      (P_DEFINED | P_IDENT(GPIO_PF0))
+#define P_TMR11                (P_DONTCARE)
+#define P_TMR10                (P_DONTCARE)
+#define P_TMR9         (P_DONTCARE)
+#define P_TMR8         (P_DONTCARE)
+#define P_TMR7         (P_DEFINED | P_IDENT(GPIO_PF7))
+#define P_TMR6         (P_DEFINED | P_IDENT(GPIO_PF6))
+#define P_TMR5         (P_DEFINED | P_IDENT(GPIO_PF5))
+#define P_TMR4         (P_DEFINED | P_IDENT(GPIO_PF4))
+#define P_TMR3         (P_DEFINED | P_IDENT(GPIO_PF3))
+#define P_TMR2         (P_DEFINED | P_IDENT(GPIO_PF2))
+#define P_TMR1         (P_DEFINED | P_IDENT(GPIO_PF1))
+#define P_TMR0         (P_DEFINED | P_IDENT(GPIO_PF0))
+#define P_SPI0_MOSI    (P_DONTCARE)
+#define P_SPI0_MISO    (P_DONTCARE)
+#define P_SPI0_SCK     (P_DONTCARE)
+#define GPIO_DEFAULT_BOOT_SPI_CS GPIO_PF2
+#define P_DEFAULT_BOOT_SPI_CS P_SPI0_SSEL2
+
+#endif /* _MACH_PORTMUX_H_ */
diff --git a/arch/blackfin/include/asm/portmux.h b/arch/blackfin/include/asm/portmux.h
new file mode 100644 (file)
index 0000000..b17207f
--- /dev/null
@@ -0,0 +1,1194 @@
+/*
+ * Common header file for Blackfin family of processors
+ *
+ * Copyright 2007-2008 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#ifndef _PORTMUX_H_
+#define _PORTMUX_H_
+
+#define P_IDENT(x)     ((x) & 0x1FF)
+#define P_FUNCT(x)     (((x) & 0x3) << 9)
+#define P_FUNCT2MUX(x) (((x) >> 9) & 0x3)
+#define P_DEFINED      0x8000
+#define P_UNDEF                0x4000
+#define P_MAYSHARE     0x2000
+#define P_DONTCARE     0x1000
+
+#ifndef CONFIG_BFIN_GPIO_TRACK
+#define peripheral_request(per, label) peripheral_request(per)
+#define peripheral_request_list(per, label) peripheral_request_list(per)
+#endif
+
+int peripheral_request(unsigned short per, const char *label);
+void peripheral_free(unsigned short per);
+int peripheral_request_list(const unsigned short per[], const char *label);
+void peripheral_free_list(const unsigned short per[]);
+
+#include <asm/blackfin.h>
+
+#ifndef P_SPORT2_TFS
+#define P_SPORT2_TFS P_UNDEF
+#endif
+
+#ifndef P_SPORT2_DTSEC
+#define P_SPORT2_DTSEC P_UNDEF
+#endif
+
+#ifndef P_SPORT2_DTPRI
+#define P_SPORT2_DTPRI P_UNDEF
+#endif
+
+#ifndef P_SPORT2_TSCLK
+#define P_SPORT2_TSCLK P_UNDEF
+#endif
+
+#ifndef P_SPORT2_RFS
+#define P_SPORT2_RFS P_UNDEF
+#endif
+
+#ifndef P_SPORT2_DRSEC
+#define P_SPORT2_DRSEC P_UNDEF
+#endif
+
+#ifndef P_SPORT2_DRPRI
+#define P_SPORT2_DRPRI P_UNDEF
+#endif
+
+#ifndef P_SPORT2_RSCLK
+#define P_SPORT2_RSCLK P_UNDEF
+#endif
+
+#ifndef P_SPORT3_TFS
+#define P_SPORT3_TFS P_UNDEF
+#endif
+
+#ifndef P_SPORT3_DTSEC
+#define P_SPORT3_DTSEC P_UNDEF
+#endif
+
+#ifndef P_SPORT3_DTPRI
+#define P_SPORT3_DTPRI P_UNDEF
+#endif
+
+#ifndef P_SPORT3_TSCLK
+#define P_SPORT3_TSCLK P_UNDEF
+#endif
+
+#ifndef P_SPORT3_RFS
+#define P_SPORT3_RFS P_UNDEF
+#endif
+
+#ifndef P_SPORT3_DRSEC
+#define P_SPORT3_DRSEC P_UNDEF
+#endif
+
+#ifndef P_SPORT3_DRPRI
+#define P_SPORT3_DRPRI P_UNDEF
+#endif
+
+#ifndef P_SPORT3_RSCLK
+#define P_SPORT3_RSCLK P_UNDEF
+#endif
+
+#ifndef P_TMR4
+#define P_TMR4 P_UNDEF
+#endif
+
+#ifndef P_TMR5
+#define P_TMR5 P_UNDEF
+#endif
+
+#ifndef P_TMR6
+#define P_TMR6 P_UNDEF
+#endif
+
+#ifndef P_TMR7
+#define P_TMR7 P_UNDEF
+#endif
+
+#ifndef P_TWI1_SCL
+#define P_TWI1_SCL P_UNDEF
+#endif
+
+#ifndef P_TWI1_SDA
+#define P_TWI1_SDA P_UNDEF
+#endif
+
+#ifndef P_UART3_RTS
+#define P_UART3_RTS P_UNDEF
+#endif
+
+#ifndef P_UART3_CTS
+#define P_UART3_CTS P_UNDEF
+#endif
+
+#ifndef P_UART2_TX
+#define P_UART2_TX P_UNDEF
+#endif
+
+#ifndef P_UART2_RX
+#define P_UART2_RX P_UNDEF
+#endif
+
+#ifndef P_UART3_TX
+#define P_UART3_TX P_UNDEF
+#endif
+
+#ifndef P_UART3_RX
+#define P_UART3_RX P_UNDEF
+#endif
+
+#ifndef P_SPI2_SS
+#define P_SPI2_SS P_UNDEF
+#endif
+
+#ifndef P_SPI2_SSEL1
+#define P_SPI2_SSEL1 P_UNDEF
+#endif
+
+#ifndef P_SPI2_SSEL2
+#define P_SPI2_SSEL2 P_UNDEF
+#endif
+
+#ifndef P_SPI2_SSEL3
+#define P_SPI2_SSEL3 P_UNDEF
+#endif
+
+#ifndef P_SPI2_SSEL4
+#define P_SPI2_SSEL4 P_UNDEF
+#endif
+
+#ifndef P_SPI2_SSEL5
+#define P_SPI2_SSEL5 P_UNDEF
+#endif
+
+#ifndef P_SPI2_SSEL6
+#define P_SPI2_SSEL6 P_UNDEF
+#endif
+
+#ifndef P_SPI2_SSEL7
+#define P_SPI2_SSEL7 P_UNDEF
+#endif
+
+#ifndef P_SPI2_SCK
+#define P_SPI2_SCK P_UNDEF
+#endif
+
+#ifndef P_SPI2_MOSI
+#define P_SPI2_MOSI P_UNDEF
+#endif
+
+#ifndef P_SPI2_MISO
+#define P_SPI2_MISO P_UNDEF
+#endif
+
+#ifndef P_TMR0
+#define P_TMR0 P_UNDEF
+#endif
+
+#ifndef P_TMR1
+#define P_TMR1 P_UNDEF
+#endif
+
+#ifndef P_TMR2
+#define P_TMR2 P_UNDEF
+#endif
+
+#ifndef P_TMR3
+#define P_TMR3 P_UNDEF
+#endif
+
+#ifndef P_SPORT0_TFS
+#define P_SPORT0_TFS P_UNDEF
+#endif
+
+#ifndef P_SPORT0_DTSEC
+#define P_SPORT0_DTSEC P_UNDEF
+#endif
+
+#ifndef P_SPORT0_DTPRI
+#define P_SPORT0_DTPRI P_UNDEF
+#endif
+
+#ifndef P_SPORT0_TSCLK
+#define P_SPORT0_TSCLK P_UNDEF
+#endif
+
+#ifndef P_SPORT0_RFS
+#define P_SPORT0_RFS P_UNDEF
+#endif
+
+#ifndef P_SPORT0_DRSEC
+#define P_SPORT0_DRSEC P_UNDEF
+#endif
+
+#ifndef P_SPORT0_DRPRI
+#define P_SPORT0_DRPRI P_UNDEF
+#endif
+
+#ifndef P_SPORT0_RSCLK
+#define P_SPORT0_RSCLK P_UNDEF
+#endif
+
+#ifndef P_SD_D0
+#define P_SD_D0 P_UNDEF
+#endif
+
+#ifndef P_SD_D1
+#define P_SD_D1 P_UNDEF
+#endif
+
+#ifndef P_SD_D2
+#define P_SD_D2 P_UNDEF
+#endif
+
+#ifndef P_SD_D3
+#define P_SD_D3 P_UNDEF
+#endif
+
+#ifndef P_SD_CLK
+#define P_SD_CLK P_UNDEF
+#endif
+
+#ifndef P_SD_CMD
+#define P_SD_CMD P_UNDEF
+#endif
+
+#ifndef P_MMCLK
+#define P_MMCLK P_UNDEF
+#endif
+
+#ifndef P_MBCLK
+#define P_MBCLK P_UNDEF
+#endif
+
+#ifndef P_PPI1_D0
+#define P_PPI1_D0 P_UNDEF
+#endif
+
+#ifndef P_PPI1_D1
+#define P_PPI1_D1 P_UNDEF
+#endif
+
+#ifndef P_PPI1_D2
+#define P_PPI1_D2 P_UNDEF
+#endif
+
+#ifndef P_PPI1_D3
+#define P_PPI1_D3 P_UNDEF
+#endif
+
+#ifndef P_PPI1_D4
+#define P_PPI1_D4 P_UNDEF
+#endif
+
+#ifndef P_PPI1_D5
+#define P_PPI1_D5 P_UNDEF
+#endif
+
+#ifndef P_PPI1_D6
+#define P_PPI1_D6 P_UNDEF
+#endif
+
+#ifndef P_PPI1_D7
+#define P_PPI1_D7 P_UNDEF
+#endif
+
+#ifndef P_PPI1_D8
+#define P_PPI1_D8 P_UNDEF
+#endif
+
+#ifndef P_PPI1_D9
+#define P_PPI1_D9 P_UNDEF
+#endif
+
+#ifndef P_PPI1_D10
+#define P_PPI1_D10 P_UNDEF
+#endif
+
+#ifndef P_PPI1_D11
+#define P_PPI1_D11 P_UNDEF
+#endif
+
+#ifndef P_PPI1_D12
+#define P_PPI1_D12 P_UNDEF
+#endif
+
+#ifndef P_PPI1_D13
+#define P_PPI1_D13 P_UNDEF
+#endif
+
+#ifndef P_PPI1_D14
+#define P_PPI1_D14 P_UNDEF
+#endif
+
+#ifndef P_PPI1_D15
+#define P_PPI1_D15 P_UNDEF
+#endif
+
+#ifndef P_HOST_D8
+#define P_HOST_D8 P_UNDEF
+#endif
+
+#ifndef P_HOST_D9
+#define P_HOST_D9 P_UNDEF
+#endif
+
+#ifndef P_HOST_D10
+#define P_HOST_D10 P_UNDEF
+#endif
+
+#ifndef P_HOST_D11
+#define P_HOST_D11 P_UNDEF
+#endif
+
+#ifndef P_HOST_D12
+#define P_HOST_D12 P_UNDEF
+#endif
+
+#ifndef P_HOST_D13
+#define P_HOST_D13 P_UNDEF
+#endif
+
+#ifndef P_HOST_D14
+#define P_HOST_D14 P_UNDEF
+#endif
+
+#ifndef P_HOST_D15
+#define P_HOST_D15 P_UNDEF
+#endif
+
+#ifndef P_HOST_D0
+#define P_HOST_D0 P_UNDEF
+#endif
+
+#ifndef P_HOST_D1
+#define P_HOST_D1 P_UNDEF
+#endif
+
+#ifndef P_HOST_D2
+#define P_HOST_D2 P_UNDEF
+#endif
+
+#ifndef P_HOST_D3
+#define P_HOST_D3 P_UNDEF
+#endif
+
+#ifndef P_HOST_D4
+#define P_HOST_D4 P_UNDEF
+#endif
+
+#ifndef P_HOST_D5
+#define P_HOST_D5 P_UNDEF
+#endif
+
+#ifndef P_HOST_D6
+#define P_HOST_D6 P_UNDEF
+#endif
+
+#ifndef P_HOST_D7
+#define P_HOST_D7 P_UNDEF
+#endif
+
+#ifndef P_SPORT1_TFS
+#define P_SPORT1_TFS P_UNDEF
+#endif
+
+#ifndef P_SPORT1_DTSEC
+#define P_SPORT1_DTSEC P_UNDEF
+#endif
+
+#ifndef P_SPORT1_DTPRI
+#define P_SPORT1_DTPRI P_UNDEF
+#endif
+
+#ifndef P_SPORT1_TSCLK
+#define P_SPORT1_TSCLK P_UNDEF
+#endif
+
+#ifndef P_SPORT1_RFS
+#define P_SPORT1_RFS P_UNDEF
+#endif
+
+#ifndef P_SPORT1_DRSEC
+#define P_SPORT1_DRSEC P_UNDEF
+#endif
+
+#ifndef P_SPORT1_DRPRI
+#define P_SPORT1_DRPRI P_UNDEF
+#endif
+
+#ifndef P_SPORT1_RSCLK
+#define P_SPORT1_RSCLK P_UNDEF
+#endif
+
+#ifndef P_PPI2_D0
+#define P_PPI2_D0 P_UNDEF
+#endif
+
+#ifndef P_PPI2_D1
+#define P_PPI2_D1 P_UNDEF
+#endif
+
+#ifndef P_PPI2_D2
+#define P_PPI2_D2 P_UNDEF
+#endif
+
+#ifndef P_PPI2_D3
+#define P_PPI2_D3 P_UNDEF
+#endif
+
+#ifndef P_PPI2_D4
+#define P_PPI2_D4 P_UNDEF
+#endif
+
+#ifndef P_PPI2_D5
+#define P_PPI2_D5 P_UNDEF
+#endif
+
+#ifndef P_PPI2_D6
+#define P_PPI2_D6 P_UNDEF
+#endif
+
+#ifndef P_PPI2_D7
+#define P_PPI2_D7 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D18
+#define P_PPI0_D18 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D19
+#define P_PPI0_D19 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D20
+#define P_PPI0_D20 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D21
+#define P_PPI0_D21 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D22
+#define P_PPI0_D22 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D23
+#define P_PPI0_D23 P_UNDEF
+#endif
+
+#ifndef P_KEY_ROW0
+#define P_KEY_ROW0 P_UNDEF
+#endif
+
+#ifndef P_KEY_ROW1
+#define P_KEY_ROW1 P_UNDEF
+#endif
+
+#ifndef P_KEY_ROW2
+#define P_KEY_ROW2 P_UNDEF
+#endif
+
+#ifndef P_KEY_ROW3
+#define P_KEY_ROW3 P_UNDEF
+#endif
+
+#ifndef P_KEY_COL0
+#define P_KEY_COL0 P_UNDEF
+#endif
+
+#ifndef P_KEY_COL1
+#define P_KEY_COL1 P_UNDEF
+#endif
+
+#ifndef P_KEY_COL2
+#define P_KEY_COL2 P_UNDEF
+#endif
+
+#ifndef P_KEY_COL3
+#define P_KEY_COL3 P_UNDEF
+#endif
+
+#ifndef P_SPI0_SCK
+#define P_SPI0_SCK P_UNDEF
+#endif
+
+#ifndef P_SPI0_MISO
+#define P_SPI0_MISO P_UNDEF
+#endif
+
+#ifndef P_SPI0_MOSI
+#define P_SPI0_MOSI P_UNDEF
+#endif
+
+#ifndef P_SPI0_SS
+#define P_SPI0_SS P_UNDEF
+#endif
+
+#ifndef P_SPI0_SSEL1
+#define P_SPI0_SSEL1 P_UNDEF
+#endif
+
+#ifndef P_SPI0_SSEL2
+#define P_SPI0_SSEL2 P_UNDEF
+#endif
+
+#ifndef P_SPI0_SSEL3
+#define P_SPI0_SSEL3 P_UNDEF
+#endif
+
+#ifndef P_SPI0_SSEL4
+#define P_SPI0_SSEL4 P_UNDEF
+#endif
+
+#ifndef P_SPI0_SSEL5
+#define P_SPI0_SSEL5 P_UNDEF
+#endif
+
+#ifndef P_SPI0_SSEL6
+#define P_SPI0_SSEL6 P_UNDEF
+#endif
+
+#ifndef P_SPI0_SSEL7
+#define P_SPI0_SSEL7 P_UNDEF
+#endif
+
+#ifndef P_UART0_TX
+#define P_UART0_TX P_UNDEF
+#endif
+
+#ifndef P_UART0_RX
+#define P_UART0_RX P_UNDEF
+#endif
+
+#ifndef P_UART1_RTS
+#define P_UART1_RTS P_UNDEF
+#endif
+
+#ifndef P_UART1_CTS
+#define P_UART1_CTS P_UNDEF
+#endif
+
+#ifndef P_PPI1_CLK
+#define P_PPI1_CLK P_UNDEF
+#endif
+
+#ifndef P_PPI1_FS1
+#define P_PPI1_FS1 P_UNDEF
+#endif
+
+#ifndef P_PPI1_FS2
+#define P_PPI1_FS2 P_UNDEF
+#endif
+
+#ifndef P_TWI0_SCL
+#define P_TWI0_SCL P_UNDEF
+#endif
+
+#ifndef P_TWI0_SDA
+#define P_TWI0_SDA P_UNDEF
+#endif
+
+#ifndef P_KEY_COL7
+#define P_KEY_COL7 P_UNDEF
+#endif
+
+#ifndef P_KEY_ROW6
+#define P_KEY_ROW6 P_UNDEF
+#endif
+
+#ifndef P_KEY_COL6
+#define P_KEY_COL6 P_UNDEF
+#endif
+
+#ifndef P_KEY_ROW5
+#define P_KEY_ROW5 P_UNDEF
+#endif
+
+#ifndef P_KEY_COL5
+#define P_KEY_COL5 P_UNDEF
+#endif
+
+#ifndef P_KEY_ROW4
+#define P_KEY_ROW4 P_UNDEF
+#endif
+
+#ifndef P_KEY_COL4
+#define P_KEY_COL4 P_UNDEF
+#endif
+
+#ifndef P_KEY_ROW7
+#define P_KEY_ROW7 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D0
+#define P_PPI0_D0 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D1
+#define P_PPI0_D1 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D2
+#define P_PPI0_D2 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D3
+#define P_PPI0_D3 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D4
+#define P_PPI0_D4 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D5
+#define P_PPI0_D5 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D6
+#define P_PPI0_D6 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D7
+#define P_PPI0_D7 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D8
+#define P_PPI0_D8 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D9
+#define P_PPI0_D9 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D10
+#define P_PPI0_D10 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D11
+#define P_PPI0_D11 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D12
+#define P_PPI0_D12 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D13
+#define P_PPI0_D13 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D14
+#define P_PPI0_D14 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D15
+#define P_PPI0_D15 P_UNDEF
+#endif
+
+#ifndef P_ATAPI_D0A
+#define P_ATAPI_D0A P_UNDEF
+#endif
+
+#ifndef P_ATAPI_D1A
+#define P_ATAPI_D1A P_UNDEF
+#endif
+
+#ifndef P_ATAPI_D2A
+#define P_ATAPI_D2A P_UNDEF
+#endif
+
+#ifndef P_ATAPI_D3A
+#define P_ATAPI_D3A P_UNDEF
+#endif
+
+#ifndef P_ATAPI_D4A
+#define P_ATAPI_D4A P_UNDEF
+#endif
+
+#ifndef P_ATAPI_D5A
+#define P_ATAPI_D5A P_UNDEF
+#endif
+
+#ifndef P_ATAPI_D6A
+#define P_ATAPI_D6A P_UNDEF
+#endif
+
+#ifndef P_ATAPI_D7A
+#define P_ATAPI_D7A P_UNDEF
+#endif
+
+#ifndef P_ATAPI_D8A
+#define P_ATAPI_D8A P_UNDEF
+#endif
+
+#ifndef P_ATAPI_D9A
+#define P_ATAPI_D9A P_UNDEF
+#endif
+
+#ifndef P_ATAPI_D10A
+#define P_ATAPI_D10A P_UNDEF
+#endif
+
+#ifndef P_ATAPI_D11A
+#define P_ATAPI_D11A P_UNDEF
+#endif
+
+#ifndef P_ATAPI_D12A
+#define P_ATAPI_D12A P_UNDEF
+#endif
+
+#ifndef P_ATAPI_D13A
+#define P_ATAPI_D13A P_UNDEF
+#endif
+
+#ifndef P_ATAPI_D14A
+#define P_ATAPI_D14A P_UNDEF
+#endif
+
+#ifndef P_ATAPI_D15A
+#define P_ATAPI_D15A P_UNDEF
+#endif
+
+#ifndef P_PPI0_CLK
+#define P_PPI0_CLK P_UNDEF
+#endif
+
+#ifndef P_PPI0_FS1
+#define P_PPI0_FS1 P_UNDEF
+#endif
+
+#ifndef P_PPI0_FS2
+#define P_PPI0_FS2 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D16
+#define P_PPI0_D16 P_UNDEF
+#endif
+
+#ifndef P_PPI0_D17
+#define P_PPI0_D17 P_UNDEF
+#endif
+
+#ifndef P_SPI1_SSEL1
+#define P_SPI1_SSEL1 P_UNDEF
+#endif
+
+#ifndef P_SPI1_SSEL2
+#define P_SPI1_SSEL2 P_UNDEF
+#endif
+
+#ifndef P_SPI1_SSEL3
+#define P_SPI1_SSEL3 P_UNDEF
+#endif
+
+
+#ifndef P_SPI1_SSEL4
+#define P_SPI1_SSEL4 P_UNDEF
+#endif
+
+#ifndef P_SPI1_SSEL5
+#define P_SPI1_SSEL5 P_UNDEF
+#endif
+
+#ifndef P_SPI1_SSEL6
+#define P_SPI1_SSEL6 P_UNDEF
+#endif
+
+#ifndef P_SPI1_SSEL7
+#define P_SPI1_SSEL7 P_UNDEF
+#endif
+
+#ifndef P_SPI1_SCK
+#define P_SPI1_SCK P_UNDEF
+#endif
+
+#ifndef P_SPI1_MISO
+#define P_SPI1_MISO P_UNDEF
+#endif
+
+#ifndef P_SPI1_MOSI
+#define P_SPI1_MOSI P_UNDEF
+#endif
+
+#ifndef P_SPI1_SS
+#define P_SPI1_SS P_UNDEF
+#endif
+
+#ifndef P_CAN0_TX
+#define P_CAN0_TX P_UNDEF
+#endif
+
+#ifndef P_CAN0_RX
+#define P_CAN0_RX P_UNDEF
+#endif
+
+#ifndef P_CAN1_TX
+#define P_CAN1_TX P_UNDEF
+#endif
+
+#ifndef P_CAN1_RX
+#define P_CAN1_RX P_UNDEF
+#endif
+
+#ifndef P_ATAPI_A0A
+#define P_ATAPI_A0A P_UNDEF
+#endif
+
+#ifndef P_ATAPI_A1A
+#define P_ATAPI_A1A P_UNDEF
+#endif
+
+#ifndef P_ATAPI_A2A
+#define P_ATAPI_A2A P_UNDEF
+#endif
+
+#ifndef P_HOST_CE
+#define P_HOST_CE P_UNDEF
+#endif
+
+#ifndef P_HOST_RD
+#define P_HOST_RD P_UNDEF
+#endif
+
+#ifndef P_HOST_WR
+#define P_HOST_WR P_UNDEF
+#endif
+
+#ifndef P_MTXONB
+#define P_MTXONB P_UNDEF
+#endif
+
+#ifndef P_PPI2_FS2
+#define P_PPI2_FS2 P_UNDEF
+#endif
+
+#ifndef P_PPI2_FS1
+#define P_PPI2_FS1 P_UNDEF
+#endif
+
+#ifndef P_PPI2_CLK
+#define P_PPI2_CLK P_UNDEF
+#endif
+
+#ifndef P_CNT_CZM
+#define P_CNT_CZM P_UNDEF
+#endif
+
+#ifndef P_UART1_TX
+#define P_UART1_TX P_UNDEF
+#endif
+
+#ifndef P_UART1_RX
+#define P_UART1_RX P_UNDEF
+#endif
+
+#ifndef P_ATAPI_RESET
+#define P_ATAPI_RESET P_UNDEF
+#endif
+
+#ifndef P_HOST_ADDR
+#define P_HOST_ADDR P_UNDEF
+#endif
+
+#ifndef P_HOST_ACK
+#define P_HOST_ACK P_UNDEF
+#endif
+
+#ifndef P_MTX
+#define P_MTX P_UNDEF
+#endif
+
+#ifndef P_MRX
+#define P_MRX P_UNDEF
+#endif
+
+#ifndef P_MRXONB
+#define P_MRXONB P_UNDEF
+#endif
+
+#ifndef P_A4
+#define P_A4 P_UNDEF
+#endif
+
+#ifndef P_A5
+#define P_A5 P_UNDEF
+#endif
+
+#ifndef P_A6
+#define P_A6 P_UNDEF
+#endif
+
+#ifndef P_A7
+#define P_A7 P_UNDEF
+#endif
+
+#ifndef P_A8
+#define P_A8 P_UNDEF
+#endif
+
+#ifndef P_A9
+#define P_A9 P_UNDEF
+#endif
+
+#ifndef P_PPI1_FS3
+#define P_PPI1_FS3 P_UNDEF
+#endif
+
+#ifndef P_PPI2_FS3
+#define P_PPI2_FS3 P_UNDEF
+#endif
+
+#ifndef P_TMR8
+#define P_TMR8 P_UNDEF
+#endif
+
+#ifndef P_TMR9
+#define P_TMR9 P_UNDEF
+#endif
+
+#ifndef P_TMR10
+#define P_TMR10 P_UNDEF
+#endif
+#ifndef P_TMR11
+#define P_TMR11 P_UNDEF
+#endif
+
+#ifndef P_DMAR0
+#define P_DMAR0 P_UNDEF
+#endif
+
+#ifndef P_DMAR1
+#define P_DMAR1 P_UNDEF
+#endif
+
+#ifndef P_PPI0_FS3
+#define P_PPI0_FS3 P_UNDEF
+#endif
+
+#ifndef P_CNT_CDG
+#define P_CNT_CDG P_UNDEF
+#endif
+
+#ifndef P_CNT_CUD
+#define P_CNT_CUD P_UNDEF
+#endif
+
+#ifndef P_A10
+#define P_A10 P_UNDEF
+#endif
+
+#ifndef P_A11
+#define P_A11 P_UNDEF
+#endif
+
+#ifndef P_A12
+#define P_A12 P_UNDEF
+#endif
+
+#ifndef P_A13
+#define P_A13 P_UNDEF
+#endif
+
+#ifndef P_A14
+#define P_A14 P_UNDEF
+#endif
+
+#ifndef P_A15
+#define P_A15 P_UNDEF
+#endif
+
+#ifndef P_A16
+#define P_A16 P_UNDEF
+#endif
+
+#ifndef P_A17
+#define P_A17 P_UNDEF
+#endif
+
+#ifndef P_A18
+#define P_A18 P_UNDEF
+#endif
+
+#ifndef P_A19
+#define P_A19 P_UNDEF
+#endif
+
+#ifndef P_A20
+#define P_A20 P_UNDEF
+#endif
+
+#ifndef P_A21
+#define P_A21 P_UNDEF
+#endif
+
+#ifndef P_A22
+#define P_A22 P_UNDEF
+#endif
+
+#ifndef P_A23
+#define P_A23 P_UNDEF
+#endif
+
+#ifndef P_A24
+#define P_A24 P_UNDEF
+#endif
+
+#ifndef P_A25
+#define P_A25 P_UNDEF
+#endif
+
+#ifndef P_NOR_CLK
+#define P_NOR_CLK P_UNDEF
+#endif
+
+#ifndef P_TMRCLK
+#define P_TMRCLK P_UNDEF
+#endif
+
+#ifndef P_AMC_ARDY_NOR_WAIT
+#define P_AMC_ARDY_NOR_WAIT P_UNDEF
+#endif
+
+#ifndef P_NAND_CE
+#define P_NAND_CE P_UNDEF
+#endif
+
+#ifndef P_NAND_RB
+#define P_NAND_RB P_UNDEF
+#endif
+
+#ifndef P_ATAPI_DIOR
+#define P_ATAPI_DIOR P_UNDEF
+#endif
+
+#ifndef P_ATAPI_DIOW
+#define P_ATAPI_DIOW P_UNDEF
+#endif
+
+#ifndef P_ATAPI_CS0
+#define P_ATAPI_CS0 P_UNDEF
+#endif
+
+#ifndef P_ATAPI_CS1
+#define P_ATAPI_CS1 P_UNDEF
+#endif
+
+#ifndef P_ATAPI_DMACK
+#define P_ATAPI_DMACK P_UNDEF
+#endif
+
+#ifndef P_ATAPI_DMARQ
+#define P_ATAPI_DMARQ P_UNDEF
+#endif
+
+#ifndef P_ATAPI_INTRQ
+#define P_ATAPI_INTRQ P_UNDEF
+#endif
+
+#ifndef P_ATAPI_IORDY
+#define P_ATAPI_IORDY P_UNDEF
+#endif
+
+#ifndef P_AMC_BR
+#define P_AMC_BR P_UNDEF
+#endif
+
+#ifndef P_AMC_BG
+#define P_AMC_BG P_UNDEF
+#endif
+
+#ifndef P_AMC_BGH
+#define P_AMC_BGH P_UNDEF
+#endif
+
+/* EMAC */
+
+#ifndef P_MII0_ETxD0
+#define P_MII0_ETxD0 P_UNDEF
+#endif
+
+#ifndef P_MII0_ETxD1
+#define P_MII0_ETxD1 P_UNDEF
+#endif
+
+#ifndef P_MII0_ETxD2
+#define P_MII0_ETxD2 P_UNDEF
+#endif
+
+#ifndef P_MII0_ETxD3
+#define P_MII0_ETxD3 P_UNDEF
+#endif
+
+#ifndef P_MII0_ETxEN
+#define P_MII0_ETxEN P_UNDEF
+#endif
+
+#ifndef P_MII0_TxCLK
+#define P_MII0_TxCLK P_UNDEF
+#endif
+
+#ifndef P_MII0_PHYINT
+#define P_MII0_PHYINT P_UNDEF
+#endif
+
+#ifndef P_MII0_COL
+#define P_MII0_COL P_UNDEF
+#endif
+
+#ifndef P_MII0_ERxD0
+#define P_MII0_ERxD0 P_UNDEF
+#endif
+
+#ifndef P_MII0_ERxD1
+#define P_MII0_ERxD1 P_UNDEF
+#endif
+
+#ifndef P_MII0_ERxD2
+#define P_MII0_ERxD2 P_UNDEF
+#endif
+
+#ifndef P_MII0_ERxD3
+#define P_MII0_ERxD3 P_UNDEF
+#endif
+
+#ifndef P_MII0_ERxDV
+#define P_MII0_ERxDV P_UNDEF
+#endif
+
+#ifndef P_MII0_ERxCLK
+#define P_MII0_ERxCLK P_UNDEF
+#endif
+
+#ifndef P_MII0_ERxER
+#define P_MII0_ERxER P_UNDEF
+#endif
+
+#ifndef P_MII0_CRS
+#define P_MII0_CRS P_UNDEF
+#endif
+
+#ifndef P_RMII0_REF_CLK
+#define P_RMII0_REF_CLK P_UNDEF
+#endif
+
+#ifndef P_RMII0_MDINT
+#define P_RMII0_MDINT P_UNDEF
+#endif
+
+#ifndef P_RMII0_CRS_DV
+#define P_RMII0_CRS_DV P_UNDEF
+#endif
+
+#ifndef P_MDC
+#define P_MDC P_UNDEF
+#endif
+
+#ifndef P_MDIO
+#define P_MDIO P_UNDEF
+#endif
+
+#endif                         /* _PORTMUX_H_ */
index 6bc7208cad0ecbeaa5838ad40ebe34bb80011248..952438e81cb215697ee2bf22a668b210d4164ccc 100644 (file)
@@ -118,4 +118,6 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr,
        return tmp;
 }
 
+void bfin_reset_boot_spi_cs(unsigned short pin);
+
 #endif /* _BLACKFIN_SYSTEM_H */
index 54c0ffe98a291b16c56008f2478ea1b20f08708d..bb388edd13a97e7e2d7b18293170bcddb7eb49ce 100644 (file)
@@ -27,6 +27,7 @@
 #include <common.h>
 #include <miiphy.h>
 #include <asm/arch/orion5x.h>
+#include "edminiv2.h"
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -90,3 +91,38 @@ int board_init(void)
 
        return 0;
 }
+
+#if defined(CONFIG_CMD_NET) && defined(CONFIG_RESET_PHY_R)
+/* Configure and enable MV88E1116 PHY */
+void reset_phy(void)
+{
+       u16 reg;
+       u16 devadr;
+       char *name = "egiga0";
+
+       if (miiphy_set_current_dev(name))
+               return;
+
+       /* command to read PHY dev address */
+       if (miiphy_read(name, 0xEE, 0xEE, (u16 *) &devadr)) {
+               printf("Err..%s could not read PHY dev address\n",
+                       __func__);
+               return;
+       }
+
+       /*
+        * Enable RGMII delay on Tx and Rx for CPU port
+        * Ref: sec 4.7.2 of chip datasheet
+        */
+       miiphy_write(name, devadr, MV88E1116_PGADR_REG, 2);
+       miiphy_read(name, devadr, MV88E1116_MAC_CTRL_REG, &reg);
+       reg |= (MV88E1116_RGMII_RXTM_CTRL | MV88E1116_RGMII_TXTM_CTRL);
+       miiphy_write(name, devadr, MV88E1116_MAC_CTRL_REG, reg);
+       miiphy_write(name, devadr, MV88E1116_PGADR_REG, 0);
+
+       /* reset the phy */
+       miiphy_reset(name, devadr);
+
+       printf("88E1116 Initialized on %s\n", name);
+}
+#endif /* CONFIG_RESET_PHY_R */
diff --git a/board/LaCie/edminiv2/edminiv2.h b/board/LaCie/edminiv2/edminiv2.h
new file mode 100644 (file)
index 0000000..88e62b2
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * (C) Copyright 2009
+ * Net Insight <www.netinsight.net>
+ * Written-by: Simon Kagstrom <simon.kagstrom@netinsight.net>
+ *
+ * Based on sheevaplug.h:
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Written-by: Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+#ifndef __EDMINIV2_BASE_H
+#define __EDMINIV2_BASE_H
+
+/* PHY related */
+#define MV88E1116_LED_FCTRL_REG                10
+#define MV88E1116_CPRSP_CR3_REG                21
+#define MV88E1116_MAC_CTRL_REG         21
+#define MV88E1116_PGADR_REG            22
+#define MV88E1116_RGMII_TXTM_CTRL      (1 << 4)
+#define MV88E1116_RGMII_RXTM_CTRL      (1 << 5)
+
+#endif /* __EDMINIV2_BASE_H */
index 4652672aba88564bc02c062587ad1f81d1aad8cf..3c37557d6294efeff1d68353293295a75d77380e 100644 (file)
@@ -167,13 +167,6 @@ int dram_init(void)
 #ifdef CONFIG_RESET_PHY_R
 void reset_phy(void)
 {
-#ifdef CONFIG_MACB
-       /*
-        * Initialize ethernet HW addr prior to starting Linux,
-        * needed for nfsroot
-        */
-       eth_init(gd->bd);
-#endif
 }
 #endif
 
index 258d1eac29252a12035ffff17b096a4693d4d6cf..2ab8bc2c430ff1fc3b1e43dc6433b3add69cea9a 100644 (file)
@@ -339,13 +339,6 @@ int dram_init(void)
 #ifdef CONFIG_RESET_PHY_R
 void reset_phy(void)
 {
-#ifdef CONFIG_MACB
-       /*
-        * Initialize ethernet HW addr prior to starting Linux,
-        * needed for nfsroot
-        */
-       eth_init(gd->bd);
-#endif
 }
 #endif
 
index ed4736027cc3f21a2a7c809b4c07c26628e228d6..64c6d17829f5ac2e92838d8f2b07e952bff17534 100644 (file)
@@ -179,13 +179,6 @@ int dram_init(void)
 #ifdef CONFIG_RESET_PHY_R
 void reset_phy(void)
 {
-#ifdef CONFIG_MACB
-       /*
-        * Initialize ethernet HW addr prior to starting Linux,
-        * needed for nfsroot
-        */
-       eth_init(gd->bd);
-#endif
 }
 #endif
 
index 5cd7aa75f8fd6c6b37da9bd01a639e61cf416ee3..91efc07ffd142c5693aa42a3b5cf09768c485c6e 100644 (file)
@@ -284,13 +284,6 @@ int dram_init(void)
 #ifdef CONFIG_RESET_PHY_R
 void reset_phy(void)
 {
-#ifdef CONFIG_MACB
-       /*
-        * Initialize ethernet HW addr prior to starting Linux,
-        * needed for nfsroot
-        */
-       eth_init(gd->bd);
-#endif
 }
 #endif
 
index 8fa044907024d8a719493696898094e7f2607eed..f92b20f4a8e43e5925f82912f0d9b853e6e97165 100644 (file)
@@ -291,13 +291,6 @@ int dram_init(void)
 #ifdef CONFIG_RESET_PHY_R
 void reset_phy(void)
 {
-#ifdef CONFIG_MACB
-       /*
-        * Initialize ethernet HW addr prior to starting Linux,
-        * needed for nfsroot
-        */
-       eth_init(gd->bd);
-#endif
 }
 #endif
 
index 85b350f3ec78a21900b09f496233706f03ba53cf..ff1ac4cda80a5e172eb229a42c78063e49baf506 100644 (file)
@@ -14,6 +14,7 @@
 #include <spi.h>
 #include <asm/blackfin.h>
 #include <asm/net.h>
+#include <asm/portmux.h>
 #include <asm/mach-common/bits/otp.h>
 #include <asm/sdh.h>
 
@@ -61,6 +62,7 @@ static void board_init_enetaddr(uchar *mac_addr)
 #define KSZ_WRITE     0x02
 #define KSZ_READ      0x03
 
+#define KSZ_REG_CHID  0x00     /* Register 0: Chip ID0 */
 #define KSZ_REG_STPID 0x01     /* Register 1: Chip ID1 / Start Switch */
 #define KSZ_REG_GC9   0x0b     /* Register 11: Global Control 9 */
 #define KSZ_REG_P3C0  0x30     /* Register 48: Port 3 Control 0 */
@@ -78,15 +80,17 @@ static int ksz8893m_reg_set(struct spi_slave *slave, uchar reg, uchar data)
        return ksz8893m_transfer(slave, KSZ_WRITE, reg, data, din);
 }
 
-static int ksz8893m_reg_clear(struct spi_slave *slave, uchar reg, uchar mask)
+static int ksz8893m_reg_read(struct spi_slave *slave, uchar reg)
 {
-       int ret = 0;
+       int ret;
        unsigned char din[3];
+       ret = ksz8893m_transfer(slave, KSZ_READ, reg, 0, din);
+       return ret ? ret : din[2];
+}
 
-       ret |= ksz8893m_transfer(slave, KSZ_READ, reg, 0, din);
-       ret |= ksz8893m_reg_set(slave, reg, din[2] & mask);
-
-       return ret;
+static int ksz8893m_reg_clear(struct spi_slave *slave, uchar reg, uchar mask)
+{
+       return ksz8893m_reg_set(slave, reg, ksz8893m_reg_read(slave, reg) & mask);
 }
 
 static int ksz8893m_reset(struct spi_slave *slave)
@@ -107,16 +111,16 @@ static int ksz8893m_reset(struct spi_slave *slave)
 
 int board_eth_init(bd_t *bis)
 {
-       static bool switch_is_alive = false;
+       static bool switch_is_alive = false, phy_is_ksz = true;
        int ret;
 
        if (!switch_is_alive) {
                struct spi_slave *slave = spi_setup_slave(0, 1, KSZ_MAX_HZ, SPI_MODE_3);
                if (slave) {
                        if (!spi_claim_bus(slave)) {
-                               ret = ksz8893m_reset(slave);
-                               if (!ret)
-                                       switch_is_alive = true;
+                               phy_is_ksz = (ksz8893m_reg_read(slave, KSZ_REG_CHID) == 0x88);
+                               ret = phy_is_ksz ? ksz8893m_reset(slave) : 0;
+                               switch_is_alive = (ret == 0);
                                spi_release_bus(slave);
                        }
                        spi_free_slave(slave);
@@ -143,18 +147,11 @@ int misc_init_r(void)
 
 int board_early_init_f(void)
 {
-#if !defined(CONFIG_SYS_NO_FLASH)
-       /* setup BF518-EZBRD GPIO pin PG11 to AMS2. */
-       bfin_write_PORTG_MUX((bfin_read_PORTG_MUX() & ~PORT_x_MUX_6_MASK) | PORT_x_MUX_6_FUNC_2);
-       bfin_write_PORTG_FER(bfin_read_PORTG_FER() | PG11);
-
-# if !defined(CONFIG_BFIN_SPI)
-       /* setup BF518-EZBRD GPIO pin PG15 to AMS3. */
-       bfin_write_PORTG_MUX((bfin_read_PORTG_MUX() & ~PORT_x_MUX_7_MASK) | PORT_x_MUX_7_FUNC_3);
-       bfin_write_PORTG_FER(bfin_read_PORTG_FER() | PG15);
-# endif
-#endif
-       return 0;
+       /* connect async banks by default */
+       const unsigned short pins[] = {
+               P_AMS2, P_AMS3, 0,
+       };
+       return peripheral_request_list(pins, "async");
 }
 
 #ifdef CONFIG_BFIN_SDH
index a9ff760073b46c1a1ca8ab7dc4f4570b0b1884a1..f2bd2c247d4ab5ca14d7101a238c5d17fee8988b 100644 (file)
@@ -30,7 +30,6 @@ include $(TOPDIR)/config.mk
 LIB    = $(obj)lib$(BOARD).a
 
 COBJS-y        := $(BOARD).o
-COBJS-$(CONFIG_STATUS_LED) += status-led.o
 
 SRCS   := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS-y))
diff --git a/board/bf526-ezbrd/status-led.c b/board/bf526-ezbrd/status-led.c
deleted file mode 100644 (file)
index 6327022..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * U-boot - status leds
- *
- * Copyright (c) 2005-2009 Analog Devices Inc.
- *
- * Licensed under the GPL-2 or later.
- */
-
-#include <common.h>
-#include <config.h>
-#include <command.h>
-#include <status_led.h>
-
-static void set_led_f(int pf, int state)
-{
-       switch (state) {
-               case STATUS_LED_OFF:      bfin_write_PORTFIO_CLEAR(pf);  break;
-               case STATUS_LED_BLINKING: bfin_write_PORTFIO_TOGGLE(pf); break;
-               case STATUS_LED_ON:       bfin_write_PORTFIO_SET(pf);    break;
-       }
-}
-static void set_led_g(int pf, int state)
-{
-       switch (state) {
-               case STATUS_LED_OFF:      bfin_write_PORTGIO_CLEAR(pf);  break;
-               case STATUS_LED_BLINKING: bfin_write_PORTGIO_TOGGLE(pf); break;
-               case STATUS_LED_ON:       bfin_write_PORTGIO_SET(pf);    break;
-       }
-}
-
-static void set_leds(led_id_t mask, int state)
-{
-       if (mask & 0x1) set_led_f(PF8, state);
-       if (mask & 0x2) set_led_g(PG11, state);
-       if (mask & 0x4) set_led_g(PG12, state);
-}
-
-void __led_init(led_id_t mask, int state)
-{
-       bfin_write_PORTF_FER(bfin_read_PORTF_FER() & ~(PF8));
-       bfin_write_PORTG_FER(bfin_read_PORTG_FER() & ~(PG11 | PG12));
-       bfin_write_PORTFIO_INEN(bfin_read_PORTFIO_INEN() & ~(PF8));
-       bfin_write_PORTGIO_INEN(bfin_read_PORTGIO_INEN() & ~(PG11 | PG12));
-       bfin_write_PORTFIO_DIR(bfin_read_PORTFIO_DIR() | (PF8));
-       bfin_write_PORTGIO_DIR(bfin_read_PORTGIO_DIR() | (PG11 | PG12));
-}
-
-void __led_set(led_id_t mask, int state)
-{
-       set_leds(mask, state);
-}
-
-void __led_toggle(led_id_t mask)
-{
-       set_leds(mask, STATUS_LED_BLINKING);
-}
diff --git a/board/bf527-ad7160-eval/Makefile b/board/bf527-ad7160-eval/Makefile
new file mode 100644 (file)
index 0000000..f2bd2c2
--- /dev/null
@@ -0,0 +1,54 @@
+#
+# U-boot - Makefile
+#
+# Copyright (c) 2005-2008 Analog Device Inc.
+#
+# (C) Copyright 2000-2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).a
+
+COBJS-y        := $(BOARD).o
+
+SRCS   := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS-y))
+SOBJS  := $(addprefix $(obj),$(SOBJS-y))
+
+$(LIB):        $(obj).depend $(OBJS) $(SOBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak $(obj).depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/bf527-ad7160-eval/bf527-ad7160-eval.c b/board/bf527-ad7160-eval/bf527-ad7160-eval.c
new file mode 100644 (file)
index 0000000..b06d5ab
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * U-boot - main board file
+ *
+ * Copyright (c) 2010 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#include <common.h>
+#include <asm/blackfin.h>
+#include <asm/mach-common/bits/pll.h>
+
+int checkboard(void)
+{
+       printf("Board: ADI BF527 AD7160-EVAL board\n");
+       printf("       Support: http://blackfin.uclinux.org/\n");
+       return 0;
+}
+
+int misc_init_r(void)
+{
+       /* CLKIN Buffer Output Enable */
+       *pVR_CTL |= CLKBUFOE;
+       return 0;
+}
diff --git a/board/bf527-ad7160-eval/config.mk b/board/bf527-ad7160-eval/config.mk
new file mode 100644 (file)
index 0000000..f85bef5
--- /dev/null
@@ -0,0 +1,33 @@
+#
+# Copyright (c) 2005-2008 Analog Device Inc.
+#
+# (C) Copyright 2001
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+# This is not actually used for Blackfin boards so do not change it
+#TEXT_BASE = do-not-use-me
+
+CFLAGS_lib_generic += -O2
+CFLAGS_lzma += -O2
+
+# Set some default LDR flags based on boot mode.
+LDR_FLAGS += $(LDR_FLAGS-$(CONFIG_BFIN_BOOT_MODE))
index a911880ee3d9507feab190ae44a3ff735785de6e..211cf24ac303fc889b760ca02a91a897cc2304ae 100644 (file)
@@ -12,6 +12,7 @@
 #include <net.h>
 #include <netdev.h>
 #include <asm/blackfin.h>
+#include <asm/gpio.h>
 #include <asm/net.h>
 #include <asm/mach-common/bits/otp.h>
 
@@ -75,9 +76,7 @@ void board_musb_init(void)
        /*
         * BF527 EZ-KITs require PG13 to be high for HOST mode
         */
-       bfin_write_PORTG_FER(bfin_read_PORTG_FER() & ~PG13);
-       bfin_write_PORTGIO_DIR(bfin_read_PORTGIO_DIR() | PG13);
-       bfin_write_PORTGIO_SET(PG13);
-       SSYNC();
+       gpio_request(GPIO_PG13, "musb-vbus");
+       gpio_direction_output(GPIO_PG13, 1);
 }
 #endif
index 8f6ea2308f6bb49fb4cdbf0e5199367b2253a1b8..891070b575bc51ca5f29304a349f23811127439f 100644 (file)
@@ -11,6 +11,7 @@
 #include <config.h>
 #include <malloc.h>
 #include <asm/blackfin.h>
+#include <asm/portmux.h>
 #include <asm/mach-common/bits/dma.h>
 #include <spi.h>
 #include <linux/types.h>
@@ -171,13 +172,11 @@ void DisablePPI(void)
 
 void Init_Ports(void)
 {
-       *pPORTF_MUX &= ~PORT_x_MUX_0_MASK;
-       *pPORTF_MUX |= PORT_x_MUX_0_FUNC_1;
-       *pPORTF_FER |= PF0 | PF1 | PF2 | PF3 | PF4 | PF5 | PF6 | PF7;
-
-       *pPORTG_MUX &= ~PORT_x_MUX_1_MASK;
-       *pPORTG_MUX |= PORT_x_MUX_1_FUNC_1;
-       *pPORTG_FER |= PG5;
+       const unsigned short pins[] = {
+               P_PPI0_D0, P_PPI0_D1, P_PPI0_D2, P_PPI0_D3, P_PPI0_D4,
+               P_PPI0_D5, P_PPI0_D6, P_PPI0_D7, P_PPI0_FS2, 0,
+       };
+       peripheral_request_list(pins, "lcd");
 }
 
 void Init_PPI(void)
index 4abad08cd9d9db8751859c742ec1740e40606332..935aad240b9e2f0c8a335dd802209d840589a403 100644 (file)
@@ -27,8 +27,7 @@
 
 #include <common.h>
 #include <netdev.h>
-#include <asm/io.h>
-#include "bf533-stamp.h"
+#include <asm/gpio.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -46,15 +45,10 @@ int checkboard(void)
  */
 void swap_to(int device_id)
 {
-       bfin_write_FIO_DIR(bfin_read_FIO_DIR() | PF1 | PF0);
-       SSYNC();
-       bfin_write_FIO_FLAG_C(PF1);
-       if (device_id == ETHERNET)
-               bfin_write_FIO_FLAG_S(PF0);
-       else if (device_id == FLASH)
-               bfin_write_FIO_FLAG_C(PF0);
-       else
-               printf("Unknown device to switch\n");
+       gpio_request(GPIO_PF0, "eth_flash_swap");
+       gpio_request(GPIO_PF1, "eth_flash_swap");
+       gpio_direction_output(GPIO_PF0, device_id == ETHERNET);
+       gpio_direction_output(GPIO_PF1, 0);
        SSYNC();
 }
 
@@ -75,24 +69,23 @@ int misc_init_r(void)
 #define STATUS_LED_OFF 0
 #define STATUS_LED_ON  1
 
+static int gpio_setup;
+
 static void stamp_led_set(int LED1, int LED2, int LED3)
 {
-       bfin_write_FIO_INEN(bfin_read_FIO_INEN() & ~(PF2 | PF3 | PF4));
-       bfin_write_FIO_DIR(bfin_read_FIO_DIR() | (PF2 | PF3 | PF4));
-
-       if (LED1 == STATUS_LED_OFF)
-               *pFIO_FLAG_S = PF2;
-       else
-               *pFIO_FLAG_C = PF2;
-       if (LED2 == STATUS_LED_OFF)
-               *pFIO_FLAG_S = PF3;
-       else
-               *pFIO_FLAG_C = PF3;
-       if (LED3 == STATUS_LED_OFF)
-               *pFIO_FLAG_S = PF4;
-       else
-               *pFIO_FLAG_C = PF4;
-       SSYNC();
+       if (!gpio_setup) {
+               gpio_request(GPIO_PF2, "boot_progress");
+               gpio_request(GPIO_PF3, "boot_progress");
+               gpio_request(GPIO_PF4, "boot_progress");
+               gpio_direction_output(GPIO_PF2, LED1);
+               gpio_direction_output(GPIO_PF3, LED2);
+               gpio_direction_output(GPIO_PF4, LED3);
+               gpio_setup = 1;
+       } else {
+               gpio_set_value(GPIO_PF2, LED1);
+               gpio_set_value(GPIO_PF3, LED2);
+               gpio_set_value(GPIO_PF4, LED3);
+       }
 }
 
 void show_boot_progress(int status)
@@ -134,43 +127,6 @@ void show_boot_progress(int status)
 }
 #endif
 
-#ifdef CONFIG_STATUS_LED
-#include <status_led.h>
-
-static void set_led(int pf, int state)
-{
-       switch (state) {
-               case STATUS_LED_OFF:      bfin_write_FIO_FLAG_S(pf); break;
-               case STATUS_LED_BLINKING: bfin_write_FIO_FLAG_T(pf); break;
-               case STATUS_LED_ON:       bfin_write_FIO_FLAG_C(pf); break;
-       }
-}
-
-static void set_leds(led_id_t mask, int state)
-{
-       if (mask & 0x1) set_led(PF2, state);
-       if (mask & 0x2) set_led(PF3, state);
-       if (mask & 0x4) set_led(PF4, state);
-}
-
-void __led_init(led_id_t mask, int state)
-{
-       bfin_write_FIO_INEN(bfin_read_FIO_INEN() & ~(PF2 | PF3 | PF4));
-       bfin_write_FIO_DIR(bfin_read_FIO_DIR() | (PF2 | PF3 | PF4));
-}
-
-void __led_set(led_id_t mask, int state)
-{
-       set_leds(mask, state);
-}
-
-void __led_toggle(led_id_t mask)
-{
-       set_leds(mask, STATUS_LED_BLINKING);
-}
-
-#endif
-
 #ifdef CONFIG_SMC91111
 int board_eth_init(bd_t *bis)
 {
diff --git a/board/bf533-stamp/bf533-stamp.h b/board/bf533-stamp/bf533-stamp.h
deleted file mode 100644 (file)
index ebd39c7..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * U-boot - stamp.h
- *
- * Copyright (c) 2005-2007 Analog Devices Inc.
- *
- * (C) Copyright 2000-2004
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#ifndef __STAMP_H__
-#define __STAMP_H__
-
-extern void init_Flags(void);
-
-extern volatile unsigned long *ambctl0;
-extern volatile unsigned long *ambctl1;
-extern volatile unsigned long *amgctl;
-
-/* Definitions used in  Compact Flash Boot support */
-#define FIO_EDGE_CF_BITS       0x0000
-#define FIO_POLAR_CF_BITS      0x0000
-#define        FIO_EDGE_BITS           0x1E0
-#define        FIO_POLAR_BITS          0x160
-
-/* Compact flash status bits in status register */
-#define CF_STAT_BITS           0x00000060
-
-/* CF Flags used to switch between expansion and external
- * memory banks
- */
-#define CF_PF0                 0x0001
-#define CF_PF1                 0x0002
-#define CF_PF1_PF0             0x0003
-
-#endif
index 23e786b5b88c9bb4eaf8aec7aa9166ec059b65b2..3e4080e28fb267b70a4e6634d3e55b20d55fa9c9 100644 (file)
@@ -11,7 +11,6 @@
 #include <common.h>
 #include <config.h>
 #include <asm/blackfin.h>
-#include "bf533-stamp.h"
 
 void cf_outb(unsigned char val, volatile unsigned char *addr)
 {
@@ -66,6 +65,15 @@ void cf_outsw(unsigned short *addr, unsigned short *sect_buf, int words)
        swap_to(FLASH);
 }
 
+/* Definitions used in  Compact Flash Boot support */
+#define FIO_EDGE_CF_BITS       0x0000
+#define FIO_POLAR_CF_BITS      0x0000
+#define FIO_EDGE_BITS          0x1E0
+#define FIO_POLAR_BITS         0x160
+
+/* Compact flash status bits in status register */
+#define CF_STAT_BITS   0x00000060
+
 void cf_ide_init(void)
 {
        int i, cf_stat;
index f728e2c0da391929718f0e44a3b123ba4f490429..4f8985b2acd98aa4a2c9d55dd3d78e0ef10ea73c 100644 (file)
@@ -29,9 +29,8 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS-y        := $(BOARD).o cmd_bf537led.o
+COBJS-y        := $(BOARD).o
 COBJS-$(CONFIG_BFIN_IDE)   += ide-cf.o
-COBJS-$(CONFIG_CMD_EEPROM) += spi_flash.o
 COBJS-$(CONFIG_POST)       += post.o post-memory.o
 
 SRCS   := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
index 3911be671bbec61df51b4569f0c80dd55cddfd8d..ec888d44d9a4a80994fbaa0d843abb8d1c582b72 100644 (file)
@@ -46,11 +46,8 @@ int checkboard(void)
 void board_reset(void)
 {
        /* workaround for weak pull ups on ssel */
-       if (CONFIG_BFIN_BOOT_MODE == BFIN_BOOT_SPI_MASTER) {
-               bfin_write_PORTF_FER(bfin_read_PORTF_FER() & ~PF10);
-               bfin_write_PORTFIO_SET(PF10);
-               udelay(1);
-       }
+       if (CONFIG_BFIN_BOOT_MODE == BFIN_BOOT_SPI_MASTER)
+               bfin_reset_boot_spi_cs(GPIO_PF10);
 }
 
 #ifdef CONFIG_BFIN_MAC
diff --git a/board/bf537-stamp/cmd_bf537led.c b/board/bf537-stamp/cmd_bf537led.c
deleted file mode 100644 (file)
index 7d8f3ea..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * U-boot - cmd_bf537led.c
- *
- * Copyright (C) 2006 Aaron Gage, Ocean Optics Inc.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-#include <common.h>
-#include <config.h>
-#include <command.h>
-#include <asm/blackfin.h>
-#include <asm/string.h>
-#ifdef CONFIG_BF537_STAMP_LEDCMD
-
-/* Define the command usage in a reusable way */
-#define USAGE_LONG \
-       "led <number> <action>\n" \
-       "    <number>  - Index (0-5) of LED to change, or \"all\"\n" \
-       "    <action>  - Must be one of:\n" \
-       "               on off toggle"
-
-/* Number of LEDs supported by the board */
-#define NUMBER_LEDS     6
-/* The BF537 stamp has 6 LEDs.  This mask indicates that all should be lit. */
-#define LED_ALL_MASK    0x003F
-
-void show_cmd_usage(void);
-void set_led_state(int index, int state);
-void configure_GPIO_to_output(int index);
-
-/* Map of LEDs according to their GPIO ports.  This can be rearranged or
- * otherwise changed to account for different GPIO configurations.
- */
-int led_ports[] = { PF6, PF7, PF8, PF9, PF10, PF11 };
-
-#define ACTION_TOGGLE   -1
-#define ACTION_OFF      0
-#define ACTION_ON       1
-
-#define LED_STATE_OFF   0
-#define LED_STATE_ON    1
-
-/* This is a trivial atoi implementation since we don't have one available */
-int atoi(char *string)
-{
-       int length;
-       int retval = 0;
-       int i;
-       int sign = 1;
-
-       length = strlen(string);
-       for (i = 0; i < length; i++) {
-               if (0 == i && string[0] == '-') {
-                       sign = -1;
-                       continue;
-               }
-               if (string[i] > '9' || string[i] < '0') {
-                       break;
-               }
-               retval *= 10;
-               retval += string[i] - '0';
-       }
-       retval *= sign;
-       return retval;
-}
-
-int do_bf537led(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
-{
-       int led_mask = 0;
-       int led_current_state = 0;
-       int action = ACTION_OFF;
-       int temp;
-
-       if (3 != argc) {
-               /* Not enough arguments, so just show usage information */
-               show_cmd_usage();
-               return 1;
-       }
-
-       if (strcmp(argv[1], "all") == 0) {
-               led_mask = LED_ALL_MASK;
-       } else {
-               temp = atoi(argv[1]);
-               if (temp < 0 || temp >= NUMBER_LEDS) {
-                       printf("Invalid LED number [%s]\n", argv[1]);
-                       show_cmd_usage();
-                       return 2;
-               }
-               led_mask |= (1 << temp);
-       }
-
-       if (strcmp(argv[2], "off") == 0) {
-               action = ACTION_OFF;
-       } else if (strcmp(argv[2], "on") == 0) {
-               action = ACTION_ON;
-       } else if (strcmp(argv[2], "toggle") == 0) {
-               action = ACTION_TOGGLE;
-       } else {
-               printf("Invalid action [%s]\n", argv[2]);
-               show_cmd_usage();
-               return 3;
-       }
-
-       for (temp = 0; temp < NUMBER_LEDS; temp++) {
-               if ((led_mask & (1 << temp)) > 0) {
-                       /*
-                        * It is possible that the user has wired one of PF6-PF11 to
-                        * something other than an LED, so this will only change a pin
-                        * to output if the user has indicated a state change.  This may
-                        * happen a lot, but this way is safer than just setting all pins
-                        * to output.
-                        */
-                       configure_GPIO_to_output(temp);
-
-                       led_current_state =
-                           ((*pPORTFIO & led_ports[temp]) >
-                            0) ? LED_STATE_ON : LED_STATE_OFF;
-       /*
-               printf("LED state for index %d (%x) is %d\n", temp, led_ports[temp],
-                       led_current_state);
-               printf("*pPORTFIO is %x\n", *pPORTFIO);
-       */
-                       if (ACTION_ON == action
-                           || (ACTION_TOGGLE == action
-                               && 0 == led_current_state)) {
-                               printf("Turning LED %d on\n", temp);
-                               set_led_state(temp, LED_STATE_ON);
-                       } else {
-                               printf("Turning LED %d off\n", temp);
-                               set_led_state(temp, LED_STATE_OFF);
-                       }
-               }
-       }
-
-       return 0;
-}
-
-/*
- * The GPIO pins that go to the LEDs on the BF537 stamp must be configured
- * as output.  This function simply configures them that way.  This could
- * be done to all of the GPIO lines at once, but if a user is using a
- * custom board, this will try to be nice and only change the GPIO lines
- * that the user specifically names.
- */
-void configure_GPIO_to_output(int index)
-{
-       int port;
-
-       port = led_ports[index];
-
-       /* Clear the Port F Function Enable Register */
-       *pPORTF_FER &= ~port;
-       /* Set the Port F I/O direction register */
-       *pPORTFIO_DIR |= port;
-       /* Clear the Port F I/O Input Enable Register */
-       *pPORTFIO_INEN &= ~port;
-}
-
-/* Enforce the given state on the GPIO line for the indicated LED */
-void set_led_state(int index, int state)
-{
-       int port;
-
-       port = led_ports[index];
-
-       if (LED_STATE_OFF == state) {
-               /* Clear the bit to turn off the LED */
-               *pPORTFIO &= ~port;
-       } else {
-               /* Set the bit to turn on the LED */
-               *pPORTFIO |= port;
-       }
-}
-
-/* Display usage information */
-void show_cmd_usage()
-{
-       printf("Usage:\n%s\n", USAGE_LONG);
-}
-
-/* Register information for u-boot to find this command */
-U_BOOT_CMD(led, 3, 1, do_bf537led,
-          "Control BF537 stamp LEDs", USAGE_LONG);
-
-#endif
diff --git a/board/bf537-stamp/spi_flash.c b/board/bf537-stamp/spi_flash.c
deleted file mode 100644 (file)
index 7b753ad..0000000
+++ /dev/null
@@ -1,996 +0,0 @@
-/*
- * SPI flash driver
- *
- * Enter bugs at http://blackfin.uclinux.org/
- *
- * Copyright (c) 2005-2008 Analog Devices Inc.
- *
- * Licensed under the GPL-2 or later.
- */
-
-/* Configuration options:
- * CONFIG_SPI_BAUD - value to load into SPI_BAUD (divisor of SCLK to get SPI CLK)
- * CONFIG_SPI_FLASH_SLOW_READ - force usage of the slower read
- *             WARNING: make sure your SCLK + SPI_BAUD is slow enough
- */
-
-#include <common.h>
-#include <malloc.h>
-#include <asm/io.h>
-#include <asm/mach-common/bits/spi.h>
-#include <asm/mach-common/bits/dma.h>
-
-/* Forcibly phase out these */
-#ifdef CONFIG_SPI_FLASH_NUM_SECTORS
-# error do not set CONFIG_SPI_FLASH_NUM_SECTORS
-#endif
-#ifdef CONFIG_SPI_FLASH_SECTOR_SIZE
-# error do not set CONFIG_SPI_FLASH_SECTOR_SIZE
-#endif
-
-#if defined(CONFIG_SPI)
-
-struct flash_info {
-       char     *name;
-       uint16_t id;
-       uint16_t ext_id;
-       unsigned sector_size;
-       unsigned num_sectors;
-};
-
-/* SPI Speeds: 50 MHz / 33 MHz */
-static struct flash_info flash_spansion_serial_flash[] = {
-       { "S25FL016", 0x0215, 0, 64 * 1024, 32 },
-       { "S25FL032", 0x0216, 0, 64 * 1024, 64 },
-       { "S25FL064", 0x0217, 0, 64 * 1024, 128 },
-       { "S25FL128-00", 0x2018, 0x0301, 64 * 1024, 256 },    /* Package marking FL128PIF */
-       { "S25FL128-01", 0x2018, 0x0300, 128 * 1024, 64 },    /* Package marking FL128PIFL */
-       { NULL, 0, 0, 0, 0 }
-};
-
-/* SPI Speeds: 50 MHz / 20 MHz */
-static struct flash_info flash_st_serial_flash[] = {
-       { "m25p05", 0x2010, 0, 32 * 1024, 2 },
-       { "m25p10", 0x2011, 0, 32 * 1024, 4 },
-       { "m25p20", 0x2012, 0, 64 * 1024, 4 },
-       { "m25p40", 0x2013, 0, 64 * 1024, 8 },
-       { "m25p80", 0x20FF, 0, 64 * 1024, 16 },
-       { "m25p16", 0x2015, 0, 64 * 1024, 32 },
-       { "m25p32", 0x2016, 0, 64 * 1024, 64 },
-       { "m25p64", 0x2017, 0, 64 * 1024, 128 },
-       { "m25p128", 0x2018, 0, 256 * 1024, 64 },
-       { NULL, 0, 0, 0, 0 }
-};
-
-/* SPI Speeds: 20 MHz / 40 MHz */
-static struct flash_info flash_sst_serial_flash[] = {
-       { "SST25WF512", 0x2501, 0, 4 * 1024, 128 },
-       { "SST25WF010", 0x2502, 0, 4 * 1024, 256 },
-       { "SST25WF020", 0x2503, 0, 4 * 1024, 512 },
-       { "SST25WF040", 0x2504, 0, 4 * 1024, 1024 },
-       { NULL, 0, 0, 0, 0 }
-};
-
-/* SPI Speeds: 66 MHz / 33 MHz */
-static struct flash_info flash_atmel_dataflash[] = {
-       { "AT45DB011x", 0x0c, 0, 264, 512 },
-       { "AT45DB021x", 0x14, 0, 264, 1025 },
-       { "AT45DB041x", 0x1c, 0, 264, 2048 },
-       { "AT45DB081x", 0x24, 0, 264, 4096 },
-       { "AT45DB161x", 0x2c, 0, 528, 4096 },
-       { "AT45DB321x", 0x34, 0, 528, 8192 },
-       { "AT45DB642x", 0x3c, 0, 1056, 8192 },
-       { NULL, 0, 0, 0, 0 }
-};
-
-/* SPI Speed: 50 MHz / 25 MHz or 40 MHz / 20 MHz */
-static struct flash_info flash_winbond_serial_flash[] = {
-       { "W25X10", 0x3011, 0, 16 * 256, 32 },
-       { "W25X20", 0x3012, 0, 16 * 256, 64 },
-       { "W25X40", 0x3013, 0, 16 * 256, 128 },
-       { "W25X80", 0x3014, 0, 16 * 256, 256 },
-       { "W25P80", 0x2014, 0, 256 * 256, 16 },
-       { "W25P16", 0x2015, 0, 256 * 256, 32 },
-       { NULL, 0, 0, 0, 0 }
-};
-
-struct flash_ops {
-       uint8_t read, write, erase, status;
-};
-
-#ifdef CONFIG_SPI_FLASH_SLOW_READ
-# define OP_READ 0x03
-#else
-# define OP_READ 0x0B
-#endif
-static struct flash_ops flash_st_ops = {
-       .read = OP_READ,
-       .write = 0x02,
-       .erase = 0xD8,
-       .status = 0x05,
-};
-
-static struct flash_ops flash_sst_ops = {
-       .read = OP_READ,
-       .write = 0x02,
-       .erase = 0x20,
-       .status = 0x05,
-};
-
-static struct flash_ops flash_atmel_ops = {
-       .read = OP_READ,
-       .write = 0x82,
-       .erase = 0x81,
-       .status = 0xD7,
-};
-
-static struct flash_ops flash_winbond_ops = {
-       .read = OP_READ,
-       .write = 0x02,
-       .erase = 0x20,
-       .status = 0x05,
-};
-
-struct manufacturer_info {
-       const char *name;
-       uint8_t id;
-       struct flash_info *flashes;
-       struct flash_ops *ops;
-};
-
-static struct {
-       struct manufacturer_info *manufacturer;
-       struct flash_info *flash;
-       struct flash_ops *ops;
-       uint8_t manufacturer_id, device_id1, device_id2, device_extid1, device_extid2;
-       unsigned int write_length;
-       unsigned long sector_size, num_sectors;
-} flash;
-
-enum {
-       JED_MANU_SPANSION = 0x01,
-       JED_MANU_ST       = 0x20,
-       JED_MANU_SST      = 0xBF,
-       JED_MANU_ATMEL    = 0x1F,
-       JED_MANU_WINBOND  = 0xEF,
-};
-
-static struct manufacturer_info flash_manufacturers[] = {
-       {
-               .name = "Spansion",
-               .id = JED_MANU_SPANSION,
-               .flashes = flash_spansion_serial_flash,
-               .ops = &flash_st_ops,
-       },
-       {
-               .name = "ST",
-               .id = JED_MANU_ST,
-               .flashes = flash_st_serial_flash,
-               .ops = &flash_st_ops,
-       },
-       {
-               .name = "SST",
-               .id = JED_MANU_SST,
-               .flashes = flash_sst_serial_flash,
-               .ops = &flash_sst_ops,
-       },
-       {
-               .name = "Atmel",
-               .id = JED_MANU_ATMEL,
-               .flashes = flash_atmel_dataflash,
-               .ops = &flash_atmel_ops,
-       },
-       {
-               .name = "Winbond",
-               .id = JED_MANU_WINBOND,
-               .flashes = flash_winbond_serial_flash,
-               .ops = &flash_winbond_ops,
-       },
-};
-
-#define TIMEOUT        5000    /* timeout of 5 seconds */
-
-/* If part has multiple SPI flashes, assume SPI0 as that is
- * the one we can boot off of ...
- */
-#ifndef pSPI_CTL
-# define pSPI_CTL  pSPI0_CTL
-# define pSPI_BAUD pSPI0_BAUD
-# define pSPI_FLG  pSPI0_FLG
-# define pSPI_RDBR pSPI0_RDBR
-# define pSPI_STAT pSPI0_STAT
-# define pSPI_TDBR pSPI0_TDBR
-#endif
-
-/* Default to the SPI SSEL that we boot off of:
- *     BF54x, BF537, (everything new?): SSEL1
- *     BF51x, BF533, BF561: SSEL2
- */
-#ifndef CONFIG_SPI_FLASH_SSEL
-# define CONFIG_SPI_FLASH_SSEL BFIN_BOOT_SPI_SSEL
-#endif
-#define SSEL_MASK (1 << CONFIG_SPI_FLASH_SSEL)
-
-static void SPI_INIT(void)
-{
-       /* [#3541] This delay appears to be necessary, but not sure
-        * exactly why as the history behind it is non-existant.
-        */
-       *pSPI_CTL = 0;
-       udelay(CONFIG_CCLK_HZ / 25000000);
-
-       /* enable SPI pins: SSEL, MOSI, MISO, SCK */
-#ifdef __ADSPBF54x__
-       *pPORTE_FER |= (PE0 | PE1 | PE2 | PE4);
-#elif defined(__ADSPBF534__) || defined(__ADSPBF536__) || defined(__ADSPBF537__)
-       *pPORTF_FER |= (PF10 | PF11 | PF12 | PF13);
-#elif defined(__ADSPBF52x__)
-       bfin_write_PORTG_MUX((bfin_read_PORTG_MUX() & ~PORT_x_MUX_0_MASK) | PORT_x_MUX_0_FUNC_3);
-       bfin_write_PORTG_FER(bfin_read_PORTG_FER() | PG1 | PG2 | PG3 | PG4);
-#elif defined(__ADSPBF51x__)
-       bfin_write_PORTG_MUX((bfin_read_PORTG_MUX() & ~PORT_x_MUX_7_MASK) | PORT_x_MUX_7_FUNC_1);
-       bfin_write_PORTG_FER(bfin_read_PORTG_FER() | PG12 | PG13 | PG14 | PG15);
-#endif
-
-       /* initate communication upon write of TDBR */
-       *pSPI_CTL = (SPE | MSTR | CPHA | CPOL | TDBR_CORE);
-       *pSPI_BAUD = CONFIG_SPI_BAUD;
-}
-
-static void SPI_DEINIT(void)
-{
-       *pSPI_CTL = 0;
-       *pSPI_BAUD = 0;
-       SSYNC();
-}
-
-static void SPI_ON(void)
-{
-       /* toggle SSEL to reset the device so it'll take a new command */
-       *pSPI_FLG = 0xFF00 | SSEL_MASK;
-       SSYNC();
-
-       *pSPI_FLG = ((0xFF & ~SSEL_MASK) << 8) | SSEL_MASK;
-       SSYNC();
-}
-
-static void SPI_OFF(void)
-{
-       /* put SPI settings back to reset state */
-       *pSPI_FLG = 0xFF00;
-       SSYNC();
-}
-
-static uint8_t spi_write_read_byte(uint8_t transmit)
-{
-       *pSPI_TDBR = transmit;
-       SSYNC();
-
-       while ((*pSPI_STAT & TXS))
-               if (ctrlc())
-                       break;
-       while (!(*pSPI_STAT & SPIF))
-               if (ctrlc())
-                       break;
-       while (!(*pSPI_STAT & RXS))
-               if (ctrlc())
-                       break;
-
-       /* Read dummy to empty the receive register */
-       return *pSPI_RDBR;
-}
-
-static uint8_t read_status_register(void)
-{
-       uint8_t status_register;
-
-       /* send instruction to read status register */
-       SPI_ON();
-       spi_write_read_byte(flash.ops->status);
-       /* send dummy to receive the status register */
-       status_register = spi_write_read_byte(0);
-       SPI_OFF();
-
-       return status_register;
-}
-
-static int wait_for_ready_status(void)
-{
-       ulong start = get_timer(0);
-
-       while (get_timer(0) - start < TIMEOUT) {
-               switch (flash.manufacturer_id) {
-               case JED_MANU_SPANSION:
-               case JED_MANU_ST:
-               case JED_MANU_SST:
-               case JED_MANU_WINBOND:
-                       if (!(read_status_register() & 0x01))
-                               return 0;
-                       break;
-
-               case JED_MANU_ATMEL:
-                       if (read_status_register() & 0x80)
-                               return 0;
-                       break;
-               }
-
-               if (ctrlc()) {
-                       puts("\nAbort\n");
-                       return -1;
-               }
-       }
-
-       puts("Timeout\n");
-       return -1;
-}
-
-static int enable_writing(void)
-{
-       ulong start;
-
-       if (flash.manufacturer_id == JED_MANU_ATMEL)
-               return 0;
-
-       /* A write enable instruction must previously have been executed */
-       SPI_ON();
-       spi_write_read_byte(0x06);
-       SPI_OFF();
-
-       /* The status register will be polled to check the write enable latch "WREN" */
-       start = get_timer(0);
-       while (get_timer(0) - start < TIMEOUT) {
-               if (read_status_register() & 0x02)
-                       return 0;
-
-               if (ctrlc()) {
-                       puts("\nAbort\n");
-                       return -1;
-               }
-       }
-
-       puts("Timeout\n");
-       return -1;
-}
-
-static void write_status_register(uint8_t val)
-{
-       if (flash.manufacturer_id != JED_MANU_SST)
-               hang();
-
-       if (enable_writing())
-               return;
-
-       /* send instruction to write status register */
-       SPI_ON();
-       spi_write_read_byte(0x01);
-       /* and clear it! */
-       spi_write_read_byte(val);
-       SPI_OFF();
-}
-
-/* Request and read the manufacturer and device id of parts which
- * are compatible with the JEDEC standard (JEP106) and use that to
- * setup other operating conditions.
- */
-static int spi_detect_part(void)
-{
-       uint16_t dev_id, dev_extid;
-       size_t i;
-
-       static char called_init;
-       if (called_init)
-               return 0;
-
-#ifdef CONFIG_SPI_FLASH_M25P80
-       flash.manufacturer_id = JED_MANU_ST;
-       flash.device_id1 = 0x20;
-       flash.device_id2 = 0xFF;
-#else
-       SPI_ON();
-
-       /* Send the request for the part identification */
-       spi_write_read_byte(0x9F);
-
-       /* Now read in the manufacturer id bytes */
-       do {
-               flash.manufacturer_id = spi_write_read_byte(0);
-               if (flash.manufacturer_id == 0x7F)
-                       puts("Warning: unhandled manufacturer continuation byte!\n");
-       } while (flash.manufacturer_id == 0x7F);
-
-       /* Now read in the first device id byte */
-       flash.device_id1 = spi_write_read_byte(0);
-
-       /* Now read in the second device id byte */
-       flash.device_id2 = spi_write_read_byte(0);
-
-       /* Read extended device ids */
-       flash.device_extid1 = spi_write_read_byte(0);
-       flash.device_extid2 = spi_write_read_byte(0);
-
-       SPI_OFF();
-#endif
-
-       dev_id = (flash.device_id1 << 8) | flash.device_id2;
-       dev_extid = (flash.device_extid1 << 8) | flash.device_extid2;
-
-       for (i = 0; i < ARRAY_SIZE(flash_manufacturers); ++i) {
-               if (flash.manufacturer_id == flash_manufacturers[i].id)
-                       break;
-       }
-       if (i == ARRAY_SIZE(flash_manufacturers))
-               goto unknown;
-
-       flash.manufacturer = &flash_manufacturers[i];
-       flash.ops = flash_manufacturers[i].ops;
-
-       switch (flash.manufacturer_id) {
-       case JED_MANU_SPANSION:
-       case JED_MANU_ST:
-       case JED_MANU_SST:
-       case JED_MANU_WINBOND:
-               for (i = 0; flash.manufacturer->flashes[i].name; ++i) {
-                       if (dev_id == flash.manufacturer->flashes[i].id &&
-                           (flash.manufacturer->flashes[i].ext_id == 0 ||
-                            flash.manufacturer->flashes[i].ext_id == dev_extid))
-                               break;
-               }
-               if (!flash.manufacturer->flashes[i].name)
-                       goto unknown;
-
-               flash.flash = &flash.manufacturer->flashes[i];
-               flash.sector_size = flash.flash->sector_size;
-               flash.num_sectors = flash.flash->num_sectors;
-
-               if (flash.manufacturer_id == JED_MANU_SST)
-                       flash.write_length = 1; /* pwnt :( */
-               else
-                       flash.write_length = 256;
-               break;
-
-       case JED_MANU_ATMEL: {
-               uint8_t status = read_status_register();
-
-               for (i = 0; flash.manufacturer->flashes[i].name; ++i) {
-                       if ((status & 0x3c) == flash.manufacturer->flashes[i].id)
-                               break;
-               }
-               if (!flash.manufacturer->flashes[i].name)
-                       goto unknown;
-
-               flash.flash = &flash.manufacturer->flashes[i];
-               flash.sector_size = flash.flash->sector_size;
-               flash.num_sectors = flash.flash->num_sectors;
-
-               /* see if flash is in "power of 2" mode */
-               if (status & 0x1)
-                       flash.sector_size &= ~(1 << (ffs(flash.sector_size) - 1));
-
-               flash.write_length = flash.sector_size;
-               break;
-       }
-       }
-
-       /* the SST parts power up with software protection enabled by default */
-       if (flash.manufacturer_id == JED_MANU_SST)
-               write_status_register(0);
-
-       called_init = 1;
-       return 0;
-
- unknown:
-       printf("Unknown SPI device: 0x%02X 0x%02X 0x%02X\n",
-               flash.manufacturer_id, flash.device_id1, flash.device_id2);
-       return 1;
-}
-
-/*
- * Function:    spi_init_f
- * Description: Init SPI-Controller (ROM part)
- * return:      ---
- */
-void spi_init_f(void)
-{
-}
-
-/*
- * Function:    spi_init_r
- * Description: Init SPI-Controller (RAM part) -
- *              The malloc engine is ready and we can move our buffers to
- *              normal RAM
- *  return:      ---
- */
-void spi_init_r(void)
-{
-#if defined(CONFIG_POST) && (CONFIG_POST & CONFIG_SYS_POST_SPI)
-       /* Our testing strategy here is pretty basic:
-        *  - fill src memory with an 8-bit pattern
-        *  - write the src memory to the SPI flash
-        *  - read the SPI flash into the dst memory
-        *  - compare src and dst memory regions
-        *  - repeat a few times
-        * The variations we test for:
-        *  - change the 8-bit pattern a bit
-        *  - change the read/write block size so we know:
-        *    - writes smaller/equal/larger than the buffer work
-        *    - writes smaller/equal/larger than the sector work
-        *  - change the SPI offsets so we know:
-        *    - writing partial sectors works
-        */
-       uint8_t *mem_src, *mem_dst;
-       size_t i, c, l, o;
-       size_t test_count, errors;
-       uint8_t pattern;
-
-       SPI_INIT();
-
-       if (spi_detect_part())
-               goto out;
-       eeprom_info();
-
-       ulong lengths[] = {
-               flash.write_length,
-               flash.write_length * 2,
-               flash.write_length / 2,
-               flash.sector_size,
-               flash.sector_size * 2,
-               flash.sector_size / 2
-       };
-       ulong offsets[] = {
-               0,
-               flash.write_length,
-               flash.write_length * 2,
-               flash.write_length / 2,
-               flash.write_length / 4,
-               flash.sector_size,
-               flash.sector_size * 2,
-               flash.sector_size / 2,
-               flash.sector_size / 4,
-       };
-
-       /* the exact addresses are arbitrary ... they just need to not overlap */
-       mem_src = (void *)(0);
-       mem_dst = (void *)(max(flash.write_length, flash.sector_size) * 2);
-
-       test_count = 0;
-       errors = 0;
-       pattern = 0x00;
-
-       for (i = 0; i < 16; ++i) {      /* 16 = 8 bits * 2 iterations */
-               for (l = 0; l < ARRAY_SIZE(lengths); ++l) {
-                       for (o = 0; o < ARRAY_SIZE(offsets); ++o) {
-                               ulong len = lengths[l];
-                               ulong off = offsets[o];
-
-                               printf("Testing pattern 0x%02X of length %5lu and offset %5lu: ", pattern, len, off);
-
-                               /* setup the source memory region */
-                               memset(mem_src, pattern, len);
-
-                               test_count += 4;
-                               for (c = 0; c < 4; ++c) {       /* 4 is just a random repeat count */
-                                       if (ctrlc()) {
-                                               puts("\nAbort\n");
-                                               goto out;
-                                       }
-
-                                       /* make sure background fill pattern != pattern */
-                                       memset(mem_dst, pattern ^ 0xFF, len);
-
-                                       /* write out the source memory and then read it back and compare */
-                                       eeprom_write(0, off, mem_src, len);
-                                       eeprom_read(0, off, mem_dst, len);
-
-                                       if (memcmp(mem_src, mem_dst, len)) {
-                                               for (c = 0; c < len; ++c)
-                                                       if (mem_src[c] != mem_dst[c])
-                                                               break;
-                                               printf(" FAIL @ offset %u, skipping repeats ", c);
-                                               ++errors;
-                                               break;
-                                       }
-
-                                       /* XXX: should shrink write region here to test with
-                                        * leading/trailing canaries so we know surrounding
-                                        * bytes don't get screwed.
-                                        */
-                               }
-                               puts("\n");
-                       }
-               }
-
-               /* invert the pattern every other run and shift out bits slowly */
-               pattern ^= 0xFF;
-               if (i % 2)
-                       pattern = (pattern | 0x01) << 1;
-       }
-
-       if (errors)
-               printf("SPI FAIL: Out of %i tests, there were %i errors ;(\n", test_count, errors);
-       else
-               printf("SPI PASS: %i tests worked!\n", test_count);
-
- out:
-       SPI_DEINIT();
-
-#endif
-}
-
-static void transmit_address(uint32_t addr)
-{
-       /* Send the highest byte of the 24 bit address at first */
-       spi_write_read_byte(addr >> 16);
-       /* Send the middle byte of the 24 bit address  at second */
-       spi_write_read_byte(addr >> 8);
-       /* Send the lowest byte of the 24 bit address finally */
-       spi_write_read_byte(addr);
-}
-
-/*
- * Read a value from flash for verify purpose
- * Inputs:     unsigned long ulStart - holds the SPI start address
- *                     int pnData - pointer to store value read from flash
- *                     long lCount - number of elements to read
- */
-#ifdef CONFIG_SPI_READFLASH_NODMA
-static int read_flash(unsigned long address, long count, uchar *buffer)
-{
-       size_t i, j;
-
-       /* Send the read command to SPI device */
-       SPI_ON();
-       spi_write_read_byte(flash.ops->read);
-       transmit_address(address);
-
-#ifndef CONFIG_SPI_FLASH_SLOW_READ
-       /* Send dummy byte when doing SPI fast reads */
-       spi_write_read_byte(0);
-#endif
-
-       /* After the SPI device address has been placed on the MOSI pin the data can be */
-       /* received on the MISO pin. */
-       j = flash.sector_size << 1;
-       for (i = 1; i <= count; ++i) {
-               *buffer++ = spi_write_read_byte(0);
-               if (!j--) {
-                       puts(".");
-                       j = flash.sector_size;
-               }
-       }
-
-       SPI_OFF();
-
-       return 0;
-}
-#else
-
-#ifdef __ADSPBF54x__
-#define bfin_write_DMA_SPI_IRQ_STATUS     bfin_write_DMA4_IRQ_STATUS
-#define bfin_read_DMA_SPI_IRQ_STATUS      bfin_read_DMA4_IRQ_STATUS
-#define bfin_write_DMA_SPI_CURR_DESC_PTR  bfin_write_DMA4_CURR_DESC_PTR
-#define bfin_write_DMA_SPI_CONFIG         bfin_write_DMA4_CONFIG
-#elif defined(__ADSPBF533__) || defined(__ADSPBF532__) || defined(__ADSPBF531__) || \
-      defined(__ADSPBF538__) || defined(__ADSPBF539__)
-#define bfin_write_DMA_SPI_IRQ_STATUS     bfin_write_DMA5_IRQ_STATUS
-#define bfin_read_DMA_SPI_IRQ_STATUS      bfin_read_DMA5_IRQ_STATUS
-#define bfin_write_DMA_SPI_CURR_DESC_PTR  bfin_write_DMA5_CURR_DESC_PTR
-#define bfin_write_DMA_SPI_CONFIG         bfin_write_DMA5_CONFIG
-#elif defined(__ADSPBF561__)
-#define bfin_write_DMA_SPI_IRQ_STATUS     bfin_write_DMA16_IRQ_STATUS
-#define bfin_read_DMA_SPI_IRQ_STATUS      bfin_read_DMA16_IRQ_STATUS
-#define bfin_write_DMA_SPI_CURR_DESC_PTR  bfin_write_DMA16_CURR_DESC_PTR
-#define bfin_write_DMA_SPI_CONFIG         bfin_write_DMA16_CONFIG
-#elif defined(__ADSPBF537__) || defined(__ADSPBF536__) || defined(__ADSPBF534__) || \
-      defined(__ADSPBF52x__) || defined(__ADSPBF51x__)
-#define bfin_write_DMA_SPI_IRQ_STATUS     bfin_write_DMA7_IRQ_STATUS
-#define bfin_read_DMA_SPI_IRQ_STATUS      bfin_read_DMA7_IRQ_STATUS
-#define bfin_write_DMA_SPI_CURR_DESC_PTR  bfin_write_DMA7_CURR_DESC_PTR
-#define bfin_write_DMA_SPI_CONFIG         bfin_write_DMA7_CONFIG
-#else
-#error "Please provide SPI DMA channel defines"
-#endif
-
-struct dmadesc_array {
-       unsigned long start_addr;
-       unsigned short cfg;
-       unsigned short x_count;
-       short x_modify;
-       unsigned short y_count;
-       short y_modify;
-} __attribute__((packed));
-
-/*
- * Read a value from flash for verify purpose
- * Inputs:     unsigned long ulStart - holds the SPI start address
- *                     int pnData - pointer to store value read from flash
- *                     long lCount - number of elements to read
- */
-
-static int read_flash(unsigned long address, long count, uchar *buffer)
-{
-       unsigned int ndsize;
-       struct dmadesc_array dma[2];
-       /* Send the read command to SPI device */
-
-       if (!count)
-               return 0;
-
-       dma[0].start_addr = (unsigned long)buffer;
-       dma[0].x_modify = 1;
-       if (count <= 65536) {
-               blackfin_dcache_flush_invalidate_range(buffer, buffer + count);
-               ndsize = NDSIZE_5;
-               dma[0].cfg = NDSIZE_0 | WNR | WDSIZE_8 | FLOW_STOP | DMAEN | DI_EN;
-               dma[0].x_count = count;
-       } else {
-               blackfin_dcache_flush_invalidate_range(buffer, buffer + 65536 - 1);
-               ndsize = NDSIZE_7;
-               dma[0].cfg = NDSIZE_5 | WNR | WDSIZE_8 | FLOW_ARRAY | DMAEN | DMA2D;
-               dma[0].x_count = 0;     /* 2^16 */
-               dma[0].y_count = count >> 16;   /* count / 2^16 */
-               dma[0].y_modify = 1;
-               dma[1].start_addr = (unsigned long)(buffer + (count & ~0xFFFF));
-               dma[1].cfg = NDSIZE_0 | WNR | WDSIZE_8 | FLOW_STOP | DMAEN | DI_EN;
-               dma[1].x_count = count & 0xFFFF; /* count % 2^16 */
-               dma[1].x_modify = 1;
-       }
-
-       bfin_write_DMA_SPI_CONFIG(0);
-       bfin_write_DMA_SPI_IRQ_STATUS(DMA_DONE | DMA_ERR);
-       bfin_write_DMA_SPI_CURR_DESC_PTR(dma);
-
-       SPI_ON();
-
-       spi_write_read_byte(flash.ops->read);
-       transmit_address(address);
-
-#ifndef CONFIG_SPI_FLASH_SLOW_READ
-       /* Send dummy byte when doing SPI fast reads */
-       spi_write_read_byte(0);
-#endif
-
-       bfin_write_DMA_SPI_CONFIG(ndsize | FLOW_ARRAY | DMAEN);
-       *pSPI_CTL = (MSTR | CPHA | CPOL | RDBR_DMA | SPE | SZ);
-       SSYNC();
-
-       /*
-        * We already invalidated the first 64k,
-        * now while we just wait invalidate the remaining part.
-        * Its not likely that the DMA is going to overtake
-        */
-       if (count > 65536)
-               blackfin_dcache_flush_invalidate_range(buffer + 65536,
-                                                        buffer + count);
-
-       while (!(bfin_read_DMA_SPI_IRQ_STATUS() & DMA_DONE))
-               if (ctrlc())
-                       break;
-
-       SPI_OFF();
-
-       *pSPI_CTL = 0;
-
-       bfin_write_DMA_SPI_CONFIG(0);
-
-       *pSPI_CTL = (SPE | MSTR | CPHA | CPOL | TDBR_CORE);
-
-       return 0;
-}
-#endif
-
-static long address_to_sector(unsigned long address)
-{
-       if (address > (flash.num_sectors * flash.sector_size) - 1)
-               return -1;
-       return address / flash.sector_size;
-}
-
-static int erase_sector(int address)
-{
-       /* sector gets checked in higher function, so assume it's valid
-        * here and figure out the offset of the sector in flash
-        */
-       if (enable_writing())
-               return -1;
-
-       /*
-        * Send the erase block command to the flash followed by the 24 address
-        * to point to the start of a sector
-        */
-       SPI_ON();
-       spi_write_read_byte(flash.ops->erase);
-       transmit_address(address);
-       SPI_OFF();
-
-       return wait_for_ready_status();
-}
-
-/* Write [count] bytes out of [buffer] into the given SPI [address] */
-static long write_flash(unsigned long address, long count, uchar *buffer)
-{
-       long i, write_buffer_size;
-
-       if (enable_writing())
-               return -1;
-
-       /* Send write command followed by the 24 bit address */
-       SPI_ON();
-       spi_write_read_byte(flash.ops->write);
-       transmit_address(address);
-
-       /* Shoot out a single write buffer */
-       write_buffer_size = min(count, flash.write_length);
-       for (i = 0; i < write_buffer_size; ++i)
-               spi_write_read_byte(buffer[i]);
-
-       SPI_OFF();
-
-       /* Wait for the flash to do its thing */
-       if (wait_for_ready_status()) {
-               puts("SPI Program Time out! ");
-               return -1;
-       }
-
-       return i;
-}
-
-/* Write [count] bytes out of [buffer] into the given SPI [address] */
-static int write_sector(unsigned long address, long count, uchar *buffer)
-{
-       long write_cnt;
-
-       while (count != 0) {
-               write_cnt = write_flash(address, count, buffer);
-               if (write_cnt == -1)
-                       return -1;
-
-               /* Now that we've sent some bytes out to the flash, update
-                * our counters a bit
-                */
-               count -= write_cnt;
-               address += write_cnt;
-               buffer += write_cnt;
-       }
-
-       /* return the appropriate error code */
-       return 0;
-}
-
-/*
- * Function:    spi_write
- */
-ssize_t spi_write(uchar *addr, int alen, uchar *buffer, int len)
-{
-       unsigned long offset;
-       int start_sector, end_sector;
-       int start_byte, end_byte;
-       uchar *temp = NULL;
-       int num, ret = 0;
-
-       SPI_INIT();
-
-       if (spi_detect_part())
-               goto out;
-
-       offset = addr[0] << 16 | addr[1] << 8 | addr[2];
-
-       /* Get the start block number */
-       start_sector = address_to_sector(offset);
-       if (start_sector == -1) {
-               puts("Invalid sector! ");
-               goto out;
-       }
-       end_sector = address_to_sector(offset + len - 1);
-       if (end_sector == -1) {
-               puts("Invalid sector! ");
-               goto out;
-       }
-
-       /* Since flashes operate in sector units but the eeprom command
-        * operates as a continuous stream of bytes, we need to emulate
-        * the eeprom behavior.  So here we read in the sector, overlay
-        * any bytes we're actually modifying, erase the sector, and
-        * then write back out the new sector.
-        */
-       temp = malloc(flash.sector_size);
-       if (!temp) {
-               puts("Malloc for sector failed! ");
-               goto out;
-       }
-
-       for (num = start_sector; num <= end_sector; num++) {
-               unsigned long address = num * flash.sector_size;
-
-               /* XXX: should add an optimization when spanning sectors:
-                * No point in reading in a sector if we're going to be
-                * clobbering the whole thing.  Need to also add a test
-                * case to make sure the optimization is correct.
-                */
-               if (read_flash(address, flash.sector_size, temp)) {
-                       puts("Read sector failed! ");
-                       len = 0;
-                       break;
-               }
-
-               start_byte = max(address, offset);
-               end_byte = address + flash.sector_size - 1;
-               if (end_byte > (offset + len))
-                       end_byte = (offset + len - 1);
-
-               memcpy(temp + start_byte - address,
-                       buffer + start_byte - offset,
-                       end_byte - start_byte + 1);
-
-               if (erase_sector(address)) {
-                       puts("Erase sector failed! ");
-                       goto out;
-               }
-
-               if (write_sector(address, flash.sector_size, temp)) {
-                       puts("Write sector failed! ");
-                       goto out;
-               }
-
-               puts(".");
-       }
-
-       ret = len;
-
- out:
-       free(temp);
-
-       SPI_DEINIT();
-
-       return ret;
-}
-
-/*
- * Function: spi_read
- */
-ssize_t spi_read(uchar *addr, int alen, uchar *buffer, int len)
-{
-       unsigned long offset;
-
-       SPI_INIT();
-
-       if (spi_detect_part())
-               len = 0;
-       else {
-               offset = addr[0] << 16 | addr[1] << 8 | addr[2];
-               read_flash(offset, len, buffer);
-       }
-
-       SPI_DEINIT();
-
-       return len;
-}
-
-/*
- *     Spit out some useful information about the SPI eeprom
- */
-int eeprom_info(void)
-{
-       int ret = 0;
-
-       SPI_INIT();
-
-       if (spi_detect_part())
-               ret = 1;
-       else
-               printf("SPI Device: %s 0x%02X (%s) 0x%02X 0x%02X\n"
-                       "Parameters: num sectors = %lu, sector size = %lu, write size = %i\n"
-                       "Flash Size: %lu mbit (%lu mbyte)\n"
-                       "Status: 0x%02X\n",
-                       flash.flash->name, flash.manufacturer_id, flash.manufacturer->name,
-                       flash.device_id1, flash.device_id2, flash.num_sectors,
-                       flash.sector_size, flash.write_length,
-                       (flash.num_sectors * flash.sector_size) >> 17,
-                       (flash.num_sectors * flash.sector_size) >> 20,
-                       read_status_register());
-
-       SPI_DEINIT();
-
-       return ret;
-}
-
-#endif
index 65fb81a9c5906ac00cae5eff90cc8f9910804692..cb9ee863a4530880f69ba1d3afd2816b6151d2c7 100644 (file)
@@ -7,10 +7,12 @@
  */
 
 #include <common.h>
-#include <netdev.h>
 #include <config.h>
 #include <command.h>
+#include <netdev.h>
 #include <asm/blackfin.h>
+#include <asm/gpio.h>
+#include <asm/portmux.h>
 #include <asm/sdh.h>
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -24,53 +26,13 @@ int checkboard(void)
 
 int board_early_init_f(void)
 {
-       /* Port H: PH8 - PH13 == A4 - A9
-        * address lines of the parallel asynchronous memory interface
-        */
-
-       /************************************************
-       * configure GPIO                                *
-       * set port H function enable register           *
-       *  configure PH8-PH13 as peripheral (not GPIO)  *
-       *************************************************/
-       bfin_write_PORTH_FER(0x3F03);
-
-       /************************************************
-       * set port H MUX to configure PH8-PH13          *
-       *  1st Function (MUX = 00) (bits 16-27 == 0)    *
-       *  Set to address signals A4-A9                 *
-       *************************************************/
-       bfin_write_PORTH_MUX(0);
-
-       /************************************************
-       * set port H direction register                 *
-       *  enable PH8-PH13 as outputs                   *
-       *************************************************/
-       bfin_write_PORTH_DIR_SET(0x3F00);
-
-       /* Port I: PI0 - PH14 == A10 - A24
-        * address lines of the parallel asynchronous memory interface
-        */
-
-       /************************************************
-       * set port I function enable register           *
-       *  configure PI0-PI14 as peripheral (not GPIO)  *
-       *************************************************/
-       bfin_write_PORTI_FER(0x7fff);
-
-       /**************************************************
-       * set PORT I MUX to configure PI14-PI0 as         *
-       * 1st Function (MUX=00) - address signals A10-A24 *
-       ***************************************************/
-       bfin_write_PORTI_MUX(0);
-
-       /****************************************
-       * set PORT I direction register         *
-       *  enable PI0 - PI14 as outputs         *
-       *****************************************/
-       bfin_write_PORTI_DIR_SET(0x7fff);
-
-       return 0;
+       /* Set async addr lines as peripheral */
+       const unsigned short pins[] = {
+               P_A4, P_A5, P_A6, P_A7, P_A8, P_A9, P_A10, P_A11, P_A12,
+               P_A13, P_A14, P_A15, P_A16, P_A17, P_A18, P_A19, P_A20,
+               P_A21, P_A22, P_A23, P_A24, 0
+       };
+       return peripheral_request_list(pins, "async");
 }
 
 #ifdef CONFIG_SMC911X
@@ -96,9 +58,7 @@ void board_musb_init(void)
         * be low for device mode and high for host mode.  We set it high
         * here because we are in host mode.
         */
-       bfin_write_PORTE_FER(bfin_read_PORTE_FER() & ~PE7);
-       bfin_write_PORTE_DIR_SET(PE7);
-       bfin_write_PORTE_SET(PE7);
-       SSYNC();
+       gpio_request(GPIO_PE7, "musb-vbus");
+       gpio_direction_output(GPIO_PE7, 1);
 }
 #endif
index 10b08e2bf06f724558d09859e0d9991a19fef009..af3d58bdd3cbcec545d7d09020e454177c0e4753 100644 (file)
@@ -11,6 +11,8 @@
 #include <config.h>
 #include <malloc.h>
 #include <asm/blackfin.h>
+#include <asm/gpio.h>
+#include <asm/portmux.h>
 #include <asm/mach-common/bits/dma.h>
 #include <i2c.h>
 #include <linux/types.h>
@@ -173,22 +175,21 @@ void Init_DMA(void *dst)
 
 void Init_Ports(void)
 {
-       *pPORTF_MUX = 0x00000000;
-       *pPORTF_FER |= 0xFFFF; /* PPI0..15 */
-
-       *pPORTG_MUX &= ~(PORT_x_MUX_0_MASK | PORT_x_MUX_1_MASK | PORT_x_MUX_2_MASK | PORT_x_MUX_3_MASK | PORT_x_MUX_4_MASK);
-       *pPORTG_FER |= PG0 | PG1 | PG2 | PG3 | PG4; /* CLK, FS1, FS2, PPI16..17  */
-
+       const unsigned short pins[] = {
+               P_PPI0_D0, P_PPI0_D1, P_PPI0_D2, P_PPI0_D3, P_PPI0_D4,
+               P_PPI0_D5, P_PPI0_D6, P_PPI0_D7, P_PPI0_D8, P_PPI0_D9,
+               P_PPI0_D10, P_PPI0_D11, P_PPI0_D12, P_PPI0_D13, P_PPI0_D14,
+               P_PPI0_D15, P_PPI0_D16, P_PPI0_D17,
 #if !defined(CONFIG_VIDEO_RGB666)
-       *pPORTD_MUX &= ~(PORT_x_MUX_0_MASK | PORT_x_MUX_1_MASK | PORT_x_MUX_2_MASK | PORT_x_MUX_3_MASK | PORT_x_MUX_4_MASK | PORT_x_MUX_5_MASK);
-       *pPORTD_MUX |= (PORT_x_MUX_0_FUNC_4 | PORT_x_MUX_1_FUNC_4 | PORT_x_MUX_2_FUNC_4 | PORT_x_MUX_3_FUNC_4 | PORT_x_MUX_4_FUNC_4 | PORT_x_MUX_5_FUNC_4);
-       *pPORTD_FER |= PD0 | PD1 | PD2 | PD3 | PD4 | PD5; /* PPI18..23  */
+               P_PPI0_D18, P_PPI0_D19, P_PPI0_D20, P_PPI0_D21, P_PPI0_D22,
+               P_PPI0_D23,
 #endif
+               P_PPI0_CLK, P_PPI0_FS1, P_PPI0_FS2, 0,
+       };
+       peripheral_request_list(pins, "lcd");
 
-       *pPORTE_FER &= ~PE3; /* DISP */
-       *pPORTE_DIR_SET = PE3;
-       *pPORTE_SET  = PE3;
-
+       gpio_request(GPIO_PE3, "lcd-disp");
+       gpio_direction_output(GPIO_PE3, 1);
 }
 
 void EnableDMA(void)
index 6355c10959d804c06087ce3fc75e7adcfbd0c56e..06d004a39eb72841728b4fc14acf9417dd514ac4 100644 (file)
@@ -13,7 +13,7 @@
 
 #include <common.h>
 #include <netdev.h>
-#include <asm/io.h>
+#include <asm/gpio.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -27,14 +27,8 @@ int checkboard(void)
 #ifdef SHARED_RESOURCES
 void swap_to(int device_id)
 {
-       bfin_write_FIO_DIR(bfin_read_FIO_DIR() | PF0);
-       SSYNC();
-       if (device_id == ETHERNET)
-               bfin_write_FIO_FLAG_S(PF0);
-       else if (device_id == FLASH)
-               bfin_write_FIO_FLAG_C(PF0);
-       else
-               printf("Unknown device to switch\n");
+       gpio_request(GPIO_PF0, "eth_flash_swap");
+       gpio_direction_output(GPIO_PF0, device_id == ETHERNET);
        SSYNC();
 }
 #endif
index da34b40e50bc0bcb08777a895e43d140c11300cd..9df45c0ea337e62412c90bad2cd11f3bfebb9451 100644 (file)
@@ -177,13 +177,6 @@ int dram_init(void)
 #ifdef CONFIG_RESET_PHY_R
 void reset_phy(void)
 {
-#ifdef CONFIG_MACB
-       /*
-        * Initialize ethernet HW addr prior to starting Linux,
-        * needed for nfsroot
-        */
-       eth_init(gd->bd);
-#endif
 }
 #endif
 
index c2cd244cf2966a50181f91b1d5df072413ecc170..bad018aa34d6a4a17abbf33cb5a0ecc6b70591bc 100644 (file)
@@ -29,7 +29,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS-y        := $(BOARD).o gpio.o gpio_cfi_flash.o
+COBJS-y        := $(BOARD).o gpio_cfi_flash.o
 
 SRCS   := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS-y))
diff --git a/board/cm-bf527/gpio.c b/board/cm-bf527/gpio.c
deleted file mode 100644 (file)
index 7e0babe..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Control GPIO pins on the fly
- *
- * Copyright (c) 2008 Analog Devices Inc.
- *
- * Licensed under the GPL-2 or later.
- */
-
-#include <common.h>
-#include <command.h>
-
-#include <asm/blackfin.h>
-
-int do_gpio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
-       if (argc != 3) {
- show_usage:
-               printf("Usage:\n%s\n", cmdtp->usage);
-               return 1;
-       }
-
-       /* parse the behavior */
-       ulong port_cmd = 0;
-       switch (argv[1][0]) {
-               case 'i': break;
-               case 's': port_cmd = (PORTFIO_SET - PORTFIO); break;
-               case 'c': port_cmd = (PORTFIO_CLEAR - PORTFIO); break;
-               case 't': port_cmd = (PORTFIO_TOGGLE - PORTFIO); break;
-               default:  goto show_usage;
-       }
-
-       /* parse the pin with format: [p]<fgh><#> */
-       const char *str_pin = argv[2];
-
-       /* grab the [p]<fgh> portion */
-       ulong port_base;
-       if (*str_pin == 'p') ++str_pin;
-       switch (*str_pin) {
-               case 'f': port_base = PORTFIO; break;
-               case 'g': port_base = PORTGIO; break;
-               case 'h': port_base = PORTHIO; break;
-               default:  goto show_usage;
-       }
-
-       /* grab the <#> portion */
-       ulong pin = simple_strtoul(str_pin+1, NULL, 10);
-       ulong pin_mask = (1 << pin);
-       if (pin > 15)
-               goto show_usage;
-
-       /* finally, let's do it: set direction and exec command */
-       switch (*str_pin) {
-               case 'f': bfin_write_PORTF_FER(bfin_read_PORTF_FER() & ~pin_mask); break;
-               case 'g': bfin_write_PORTG_FER(bfin_read_PORTG_FER() & ~pin_mask); break;
-               case 'h': bfin_write_PORTH_FER(bfin_read_PORTH_FER() & ~pin_mask); break;
-       }
-
-       ulong port_dir = port_base + (PORTFIO_DIR - PORTFIO);
-       if (argv[1][0] == 'i')
-               bfin_write16(port_dir, bfin_read16(port_dir) & ~pin_mask);
-       else {
-               bfin_write16(port_dir, bfin_read16(port_dir) | pin_mask);
-               bfin_write16(port_base + port_cmd, pin_mask);
-       }
-
-       printf("gpio: pin %li on port %c has been %c\n", pin, *str_pin, argv[1][0]);
-
-       return 0;
-}
-
-U_BOOT_CMD(gpio, 3, 0, do_gpio,
-       "gpio    - set/clear/toggle gpio output pins\n",
-       "<s|c|t> <port><pin>\n"
-       "    - set/clear/toggle the specified pin\n");
index 71676803f5c4c7a943a4f6b9f0ad51453010e410..f8ccc078ec1e213fb20bdd13ef19859e7ba7d16f 100644 (file)
@@ -8,12 +8,13 @@
 
 #include <common.h>
 #include <asm/blackfin.h>
+#include <asm/gpio.h>
 #include <asm/io.h>
 #include "gpio_cfi_flash.h"
 
-#define GPIO_PIN_1  PH9
+#define GPIO_PIN_1  GPIO_PH9
 #define GPIO_MASK_1 (1 << 21)
-#define GPIO_PIN_2  PG11
+#define GPIO_PIN_2  GPIO_PG11
 #define GPIO_MASK_2 (1 << 22)
 #define GPIO_MASK   (GPIO_MASK_1 | GPIO_MASK_2)
 
@@ -21,16 +22,10 @@ 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);
+       gpio_set_value(GPIO_PIN_1, addr & GPIO_MASK_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);
+       gpio_set_value(GPIO_PIN_2, addr & GPIO_MASK_2);
 #endif
 
        SSYNC();
@@ -57,7 +52,9 @@ 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);
-       bfin_write_PORTGIO_DIR(bfin_read_PORTGIO_DIR() | GPIO_PIN_2);
+       gpio_request(GPIO_PIN_1, "gpio_cfi_flash");
+#ifdef GPIO_MASK_2
+       gpio_request(GPIO_PIN_2, "gpio_cfi_flash");
+#endif
        gpio_cfi_flash_swizzle((void *)CONFIG_SYS_FLASH_BASE);
 }
index 3812ba1e721d327cd3608d52ac0ec4e4caf9a1c4..bad018aa34d6a4a17abbf33cb5a0ecc6b70591bc 100644 (file)
@@ -29,7 +29,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS-y        := $(BOARD).o flash.o gpio_cfi_flash.o
+COBJS-y        := $(BOARD).o gpio_cfi_flash.o
 
 SRCS   := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS-y))
diff --git a/board/cm-bf537e/flash.c b/board/cm-bf537e/flash.c
deleted file mode 100644 (file)
index a4c1ec0..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * flash.c - helper commands for working with GPIO-assisted flash
- *
- * Copyright (c) 2005-2009 Analog Devices Inc.
- *
- * Licensed under the GPL-2 or later.
- */
-
-#include <common.h>
-#include <command.h>
-#include <asm/blackfin.h>
-#include "gpio_cfi_flash.h"
-
-int do_pf(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
-       ulong faddr = CONFIG_SYS_FLASH_BASE;
-       ushort data;
-       ulong dflg;
-
-       if (argc > 1) {
-               dflg = simple_strtoul(argv[1], NULL, 16);
-               faddr |= (dflg << 21);
-               gpio_cfi_flash_swizzle((void *)faddr);
-       } else {
-               data = bfin_read_PORTFIO();
-               printf("Port F data %04x (PF4:%i)\n", data, !!(data & PF4));
-       }
-
-       return 0;
-}
-
-U_BOOT_CMD(pf, 3, 0, do_pf,
-       "set/clear PF4 GPIO flash bank switch\n",
-       "<pf4> - set PF4 GPIO pin state\n");
index a9e69cfe418e75c1ef6ce5f7f7597a14fe121110..79ee844135fff9c4102eb4957f26b4cbc5ee0c23 100644 (file)
@@ -8,10 +8,11 @@
 
 #include <common.h>
 #include <asm/blackfin.h>
+#include <asm/gpio.h>
 #include <asm/io.h>
 #include "gpio_cfi_flash.h"
 
-#define GPIO_PIN_1  PF4
+#define GPIO_PIN_1  GPIO_PF4
 #define GPIO_MASK_1 (1 << 21)
 #define GPIO_MASK   (GPIO_MASK_1)
 
@@ -19,16 +20,10 @@ void *gpio_cfi_flash_swizzle(void *vaddr)
 {
        unsigned long addr = (unsigned long)vaddr;
 
-       if (addr & GPIO_MASK_1)
-               bfin_write_PORTFIO_SET(GPIO_PIN_1);
-       else
-               bfin_write_PORTFIO_CLEAR(GPIO_PIN_1);
+       gpio_set_value(GPIO_PIN_1, addr & GPIO_MASK_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);
+       gpio_set_value(GPIO_PIN_2, addr & GPIO_MASK_2);
 #endif
 
        SSYNC();
@@ -55,6 +50,9 @@ MAKE_FLASH(64, q) /* flash_write64() flash_read64() */
 
 void gpio_cfi_flash_init(void)
 {
-       bfin_write_PORTFIO_DIR(bfin_read_PORTFIO_DIR() | GPIO_PIN_1);
+       gpio_request(GPIO_PIN_1, "gpio_cfi_flash");
+#ifdef GPIO_MASK_2
+       gpio_request(GPIO_PIN_2, "gpio_cfi_flash");
+#endif
        gpio_cfi_flash_swizzle((void *)CONFIG_SYS_FLASH_BASE);
 }
index 3812ba1e721d327cd3608d52ac0ec4e4caf9a1c4..bad018aa34d6a4a17abbf33cb5a0ecc6b70591bc 100644 (file)
@@ -29,7 +29,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS-y        := $(BOARD).o flash.o gpio_cfi_flash.o
+COBJS-y        := $(BOARD).o gpio_cfi_flash.o
 
 SRCS   := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS-y))
diff --git a/board/cm-bf537u/flash.c b/board/cm-bf537u/flash.c
deleted file mode 100644 (file)
index 52abe79..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * flash.c - helper commands for working with GPIO-assisted flash
- *
- * Copyright (c) 2005-2009 Analog Devices Inc.
- *
- * Licensed under the GPL-2 or later.
- */
-
-#include <common.h>
-#include <command.h>
-#include <asm/blackfin.h>
-#include "gpio_cfi_flash.h"
-
-int do_ph(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
-       ulong faddr = CONFIG_SYS_FLASH_BASE;
-       ushort data;
-       ulong dflg;
-
-       if (argc > 1) {
-               dflg = simple_strtoul(argv[1], NULL, 16);
-               faddr |= (dflg << 21);
-               gpio_cfi_flash_swizzle((void *)faddr);
-       } else {
-               data = bfin_read_PORTHIO();
-               printf("Port H data %04x (PH0:%i)\n", data, !!(data & PH0));
-       }
-
-       return 0;
-}
-
-U_BOOT_CMD(ph, 3, 0, do_ph,
-       "set/clear PH0 GPIO flash bank switch\n",
-       "<ph0> - set PH0 GPIO pin state\n");
index 68633ec78d985302c8d70efdfb50147e2fc8025f..416c6895003dfad5382915a4f9d84576c839d0c4 100644 (file)
@@ -8,10 +8,11 @@
 
 #include <common.h>
 #include <asm/blackfin.h>
+#include <asm/gpio.h>
 #include <asm/io.h>
 #include "gpio_cfi_flash.h"
 
-#define GPIO_PIN_1  PH0
+#define GPIO_PIN_1  GPIO_PH0
 #define GPIO_MASK_1 (1 << 21)
 #define GPIO_MASK   (GPIO_MASK_1)
 
@@ -19,16 +20,10 @@ 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);
+       gpio_set_value(GPIO_PIN_1, addr & GPIO_MASK_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);
+       gpio_set_value(GPIO_PIN_2, addr & GPIO_MASK_2);
 #endif
 
        SSYNC();
@@ -55,6 +50,9 @@ 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_request(GPIO_PIN_1, "gpio_cfi_flash");
+#ifdef GPIO_MASK_2
+       gpio_request(GPIO_PIN_2, "gpio_cfi_flash");
+#endif
        gpio_cfi_flash_swizzle((void *)CONFIG_SYS_FLASH_BASE);
 }
index 3627586b69359fcec3feb1fca646b5d25c379323..90ce4c3eb766f7b128fecb24b171ee6382490639 100644 (file)
@@ -11,6 +11,7 @@
 #include <command.h>
 #include <netdev.h>
 #include <asm/blackfin.h>
+#include <asm/portmux.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -23,53 +24,13 @@ int checkboard(void)
 
 int board_early_init_f(void)
 {
-       /* Port H: PH8 - PH13 == A4 - A9
-        * address lines of the parallel asynchronous memory interface
-        */
-
-       /************************************************
-       * configure GPIO                                *
-       * set port H function enable register           *
-       *  configure PH8-PH13 as peripheral (not GPIO)  *
-       *************************************************/
-       bfin_write_PORTH_FER(0x3F03);
-
-       /************************************************
-       * set port H MUX to configure PH8-PH13          *
-       *  1st Function (MUX = 00) (bits 16-27 == 0)    *
-       *  Set to address signals A4-A9                 *
-       *************************************************/
-       bfin_write_PORTH_MUX(0);
-
-       /************************************************
-       * set port H direction register                 *
-       *  enable PH8-PH13 as outputs                   *
-       *************************************************/
-       bfin_write_PORTH_DIR_SET(0x3F00);
-
-       /* Port I: PI0 - PH14 == A10 - A24
-        * address lines of the parallel asynchronous memory interface
-        */
-
-       /************************************************
-       * set port I function enable register           *
-       *  configure PI0-PI14 as peripheral (not GPIO)  *
-       *************************************************/
-       bfin_write_PORTI_FER(0x7fff);
-
-       /**************************************************
-       * set PORT I MUX to configure PI14-PI0 as         *
-       * 1st Function (MUX=00) - address signals A10-A24 *
-       ***************************************************/
-       bfin_write_PORTI_MUX(0);
-
-       /****************************************
-       * set PORT I direction register         *
-       *  enable PI0 - PI14 as outputs         *
-       *****************************************/
-       bfin_write_PORTI_DIR_SET(0x7fff);
-
-       return 0;
+       /* Set async addr lines as peripheral */
+       const unsigned short pins[] = {
+               P_A4, P_A5, P_A6, P_A7, P_A8, P_A9, P_A10, P_A11, P_A12,
+               P_A13, P_A14, P_A15, P_A16, P_A17, P_A18, P_A19, P_A20,
+               P_A21, P_A22, P_A23, P_A24, 0
+       };
+       return peripheral_request_list(pins, "async");
 }
 
 int board_eth_init(bd_t *bis)
index 4097f09e11a7073dca54fd711a6ea517abbca102..d43f5a1dfc0c03e7f353bb7def1c0e94938fd1d2 100644 (file)
@@ -11,6 +11,8 @@
 #include <config.h>
 #include <malloc.h>
 #include <asm/blackfin.h>
+#include <asm/gpio.h>
+#include <asm/portmux.h>
 #include <asm/mach-common/bits/dma.h>
 #include <i2c.h>
 #include <linux/types.h>
@@ -174,28 +176,21 @@ void Init_DMA(void *dst)
 
 void Init_Ports(void)
 {
-       *pPORTF_MUX = 0x00000000;
-       *pPORTF_FER |= 0xFFFF;  /* PPI0..15 */
-
-       *pPORTG_MUX &=
-           ~(PORT_x_MUX_0_MASK | PORT_x_MUX_1_MASK | PORT_x_MUX_2_MASK |
-             PORT_x_MUX_3_MASK | PORT_x_MUX_4_MASK);
-       *pPORTG_FER |= PG0 | PG1 | PG2 | PG3 | PG4;     /* CLK, FS1, FS2, PPI16..17  */
-
+       const unsigned short pins[] = {
+               P_PPI0_D0, P_PPI0_D1, P_PPI0_D2, P_PPI0_D3, P_PPI0_D4,
+               P_PPI0_D5, P_PPI0_D6, P_PPI0_D7, P_PPI0_D8, P_PPI0_D9,
+               P_PPI0_D10, P_PPI0_D11, P_PPI0_D12, P_PPI0_D13, P_PPI0_D14,
+               P_PPI0_D15, P_PPI0_D16, P_PPI0_D17,
 #if !defined(CONFIG_VIDEO_RGB666)
-       *pPORTD_MUX &=
-           ~(PORT_x_MUX_0_MASK | PORT_x_MUX_1_MASK | PORT_x_MUX_2_MASK |
-             PORT_x_MUX_3_MASK | PORT_x_MUX_4_MASK | PORT_x_MUX_5_MASK);
-       *pPORTD_MUX |=
-           (PORT_x_MUX_0_FUNC_4 | PORT_x_MUX_1_FUNC_4 | PORT_x_MUX_2_FUNC_4 |
-            PORT_x_MUX_3_FUNC_4 | PORT_x_MUX_4_FUNC_4 | PORT_x_MUX_5_FUNC_4);
-       *pPORTD_FER |= PD0 | PD1 | PD2 | PD3 | PD4 | PD5;       /* PPI18..23  */
+               P_PPI0_D18, P_PPI0_D19, P_PPI0_D20, P_PPI0_D21, P_PPI0_D22,
+               P_PPI0_D23,
 #endif
+               P_PPI0_CLK, P_PPI0_FS1, P_PPI0_FS2, 0,
+       };
+       peripheral_request_list(pins, "lcd");
 
-       *pPORTE_FER &= ~PE3;    /* DISP */
-       *pPORTE_DIR_SET = PE3;
-       *pPORTE_SET = PE3;
-
+       gpio_request(GPIO_PE3, "lcd-disp");
+       gpio_direction_output(GPIO_PE3, 1);
 }
 
 void EnableDMA(void)
index af8a4a2f89aeab563e7728aabcd1339a32126bf9..61b6c3323dd37a74adfe07bb9891f833be74c7ec 100644 (file)
@@ -200,13 +200,6 @@ int dram_init(void)
 #ifdef CONFIG_RESET_PHY_R
 void reset_phy(void)
 {
-#ifdef CONFIG_MACB
-       /*
-        * Initialize ethernet HW addr prior to starting Linux,
-        * needed for nfsroot
-        */
-       eth_init(gd->bd);
-#endif
 }
 #endif
 
index b5bebd4a90f0a19ad9610c4e69ec0c44dad2ab0f..d2ac7a502b9422b9881fe0e7b65145583b2ea1ec 100644 (file)
@@ -7,6 +7,7 @@
  */
 
 #include <common.h>
+#include <netdev.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -16,3 +17,10 @@ int checkboard(void)
        printf("       Support: http://www.i-syst.com/\n");
        return 0;
 }
+
+#ifdef CONFIG_DRIVER_AX88180
+int board_eth_init(bd_t *bis)
+{
+       return ax88180_initialize(bis);
+}
+#endif
index c7835de3d052ef41f61f1ebe88831b510a25b135..e41c84c7634cc5ae887898e886cb503a4073332a 100644 (file)
@@ -387,13 +387,6 @@ int dram_init(void)
 #ifdef CONFIG_RESET_PHY_R
 void reset_phy(void)
 {
-#ifdef CONFIG_MACB
-       /*
-        * Initialize ethernet HW addr prior to starting Linux,
-        * needed for nfsroot
-        */
-       eth_init(gd->bd);
-#endif
 }
 #endif
 
index 3812ba1e721d327cd3608d52ac0ec4e4caf9a1c4..bad018aa34d6a4a17abbf33cb5a0ecc6b70591bc 100644 (file)
@@ -29,7 +29,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS-y        := $(BOARD).o flash.o gpio_cfi_flash.o
+COBJS-y        := $(BOARD).o gpio_cfi_flash.o
 
 SRCS   := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS-y))
diff --git a/board/tcm-bf537/flash.c b/board/tcm-bf537/flash.c
deleted file mode 100644 (file)
index 14055c6..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * flash.c - helper commands for working with GPIO-assisted flash
- *
- * Copyright (c) 2005-2009 Analog Devices Inc.
- *
- * Licensed under the GPL-2 or later.
- */
-
-#include <common.h>
-#include <command.h>
-#include <asm/blackfin.h>
-#include "gpio_cfi_flash.h"
-
-int do_pf(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
-       ulong faddr = CONFIG_SYS_FLASH_BASE;
-       ushort data;
-       ulong dflg;
-
-       if (argc == 3) {
-               dflg = simple_strtoul(argv[1], NULL, 16);
-               faddr |= (dflg << 21);
-               dflg = simple_strtoul(argv[2], NULL, 16);
-               faddr |= (dflg << 22);
-               gpio_cfi_flash_swizzle((void *)faddr);
-       } else {
-               data = bfin_read_PORTFIO();
-               printf("Port F data %04x (PF4:%i PF5:%i)\n", data,
-                       !!(data & PF4), !!(data & PF5));
-       }
-
-       return 0;
-}
-
-U_BOOT_CMD(pf, 3, 0, do_pf,
-       "set/clear PF4/PF5 GPIO flash bank switch\n",
-       "<pf4> <pf5> - set PF4/PF5 GPIO pin state\n");
index ac8587c9cf8c7d039b23c34e2df7b141a1dbc7a0..08ea7af1fe361e7766f94f1af0a80f11d167d52e 100644 (file)
@@ -8,12 +8,13 @@
 
 #include <common.h>
 #include <asm/blackfin.h>
+#include <asm/gpio.h>
 #include <asm/io.h>
 #include "gpio_cfi_flash.h"
 
-#define GPIO_PIN_1  PF4
+#define GPIO_PIN_1  GPIO_PF4
 #define GPIO_MASK_1 (1 << 21)
-#define GPIO_PIN_2  PF5
+#define GPIO_PIN_2  GPIO_PF5
 #define GPIO_MASK_2 (1 << 22)
 #define GPIO_MASK   (GPIO_MASK_1 | GPIO_MASK_2)
 
@@ -21,16 +22,10 @@ void *gpio_cfi_flash_swizzle(void *vaddr)
 {
        unsigned long addr = (unsigned long)vaddr;
 
-       if (addr & GPIO_MASK_1)
-               bfin_write_PORTFIO_SET(GPIO_PIN_1);
-       else
-               bfin_write_PORTFIO_CLEAR(GPIO_PIN_1);
+       gpio_set_value(GPIO_PIN_1, addr & GPIO_MASK_1);
 
 #ifdef GPIO_MASK_2
-       if (addr & GPIO_MASK_2)
-               bfin_write_PORTFIO_SET(GPIO_PIN_2);
-       else
-               bfin_write_PORTFIO_CLEAR(GPIO_PIN_2);
+       gpio_set_value(GPIO_PIN_2, addr & GPIO_MASK_2);
 #endif
 
        SSYNC();
@@ -57,6 +52,9 @@ MAKE_FLASH(64, q) /* flash_write64() flash_read64() */
 
 void gpio_cfi_flash_init(void)
 {
-       bfin_write_PORTFIO_DIR(bfin_read_PORTFIO_DIR() | GPIO_PIN_1 | GPIO_PIN_2);
+       gpio_request(GPIO_PIN_1, "gpio_cfi_flash");
+#ifdef GPIO_MASK_2
+       gpio_request(GPIO_PIN_2, "gpio_cfi_flash");
+#endif
        gpio_cfi_flash_swizzle((void *)CONFIG_SYS_FLASH_BASE);
 }
index db8ed2d990eeccbc094ee900ebd1e5e3827e30c6..fce1aac01fa29a6335b84cd991ca38eade906aec 100644 (file)
@@ -283,6 +283,7 @@ favr-32-ezkit       avr32   at32ap          -               earthlcd        at32ap700x
 hammerhead     avr32   at32ap          -               miromico        at32ap700x
 bf518f-ezbrd   blackfin        blackfin
 bf526-ezbrd    blackfin        blackfin
+bf527-ad7160-eval blackfin     blackfin
 bf527-ezkit    blackfin        blackfin
 bf533-ezkit    blackfin        blackfin
 bf533-stamp    blackfin        blackfin
index ea80555ef89c778424ef707cc7c2a9c4c96e0797..84b6272950d91cf4baa2d451a75cf12d7d84b6dc 100644 (file)
@@ -4,6 +4,10 @@
  * (c) 1999 Machine Vision Holdings, Inc.
  * (c) 1999, 2000 David Woodhouse <dwmw2@infradead.org>
  *
+ * Ported 'dynenv' to 'nand env.oob' command
+ * (C) 2010 Nanometrics, Inc.
+ * 'dynenv' -- Dynamic environment offset in NAND OOB
+ * (C) Copyright 2006-2007 OpenMoko, Inc.
  * Added 16-bit nand support
  * (C) 2004 Texas Instruments
  */
@@ -193,6 +197,90 @@ static void do_nand_status(nand_info_t *nand)
 }
 #endif
 
+#ifdef CONFIG_ENV_OFFSET_OOB
+unsigned long nand_env_oob_offset;
+
+int do_nand_env_oob(cmd_tbl_t *cmdtp, nand_info_t *nand,
+                   int argc, char * const argv[])
+{
+       int ret;
+       uint32_t oob_buf[ENV_OFFSET_SIZE/sizeof(uint32_t)];
+
+       char *cmd = argv[1];
+
+       if (!strcmp(cmd, "get")) {
+               ret = get_nand_env_oob(nand, &nand_env_oob_offset);
+               if (ret)
+                       return 1;
+
+               printf("0x%08lx\n", nand_env_oob_offset);
+       } else if (!strcmp(cmd, "set")) {
+               ulong addr;
+               size_t dummy_size;
+               struct mtd_oob_ops ops;
+
+               if (argc < 3)
+                       goto usage;
+
+               if (arg_off_size(argc - 2, argv + 2, nand, &addr,
+                                &dummy_size) < 0) {
+                       printf("Offset or partition name expected\n");
+                       return 1;
+               }
+
+               if (nand->oobavail < ENV_OFFSET_SIZE) {
+                       printf("Insufficient available OOB bytes:\n"
+                              "%d OOB bytes available but %d required for "
+                              "env.oob support\n",
+                              nand->oobavail, ENV_OFFSET_SIZE);
+                       return 1;
+               }
+
+               if ((addr & (nand->erasesize - 1)) != 0) {
+                       printf("Environment offset must be block-aligned\n");
+                       return 1;
+               }
+
+               ops.datbuf = NULL;
+               ops.mode = MTD_OOB_AUTO;
+               ops.ooboffs = 0;
+               ops.ooblen = ENV_OFFSET_SIZE;
+               ops.oobbuf = (void *) oob_buf;
+
+               oob_buf[0] = ENV_OOB_MARKER;
+               oob_buf[1] = addr / nand->erasesize;
+
+               ret = nand->write_oob(nand, ENV_OFFSET_SIZE, &ops);
+               if (ret) {
+                       printf("Error writing OOB block 0\n");
+                       return ret;
+               }
+
+               ret = get_nand_env_oob(nand, &nand_env_oob_offset);
+               if (ret) {
+                       printf("Error reading env offset in OOB\n");
+                       return ret;
+               }
+
+               if (addr != nand_env_oob_offset) {
+                       printf("Verification of env offset in OOB failed: "
+                              "0x%08lx expected but got 0x%08lx\n",
+                              addr, nand_env_oob_offset);
+                       return 1;
+               }
+       } else {
+               goto usage;
+       }
+
+       return ret;
+
+usage:
+       cmd_usage(cmdtp);
+       return 1;
+}
+
+#endif
+
 static void nand_print_info(int idx)
 {
        nand_info_t *nand = &nand_info[idx];
@@ -272,9 +360,21 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
            strncmp(cmd, "read", 4) != 0 && strncmp(cmd, "write", 5) != 0 &&
            strcmp(cmd, "scrub") != 0 && strcmp(cmd, "markbad") != 0 &&
            strcmp(cmd, "biterr") != 0 &&
-           strcmp(cmd, "lock") != 0 && strcmp(cmd, "unlock") != 0 )
+           strcmp(cmd, "lock") != 0 && strcmp(cmd, "unlock") != 0
+#ifdef CONFIG_ENV_OFFSET_OOB
+           && strcmp(cmd, "env.oob") != 0
+#endif
+           )
                goto usage;
 
+#ifdef CONFIG_ENV_OFFSET_OOB
+       /* this command operates only on the first nand device */
+       if (strcmp(cmd, "env.oob") == 0) {
+               return do_nand_env_oob(cmdtp, &nand_info[0],
+                                      argc - 1, argv + 1);
+       }
+#endif
+
        /* the following commands operate on the current device */
        if (nand_curr_device < 0 || nand_curr_device >= CONFIG_SYS_MAX_NAND_DEVICE ||
            !nand_info[nand_curr_device].name) {
@@ -502,6 +602,13 @@ U_BOOT_CMD(nand, CONFIG_SYS_MAXARGS, 1, do_nand,
        "    bring nand to lock state or display locked pages\n"
        "nand unlock [offset] [size] - unlock section"
 #endif
+#ifdef CONFIG_ENV_OFFSET_OOB
+       "\n"
+       "nand env.oob - environment offset in OOB of block 0 of"
+       "    first device.\n"
+       "nand env.oob set off|partition - set enviromnent offset\n"
+       "nand env.oob get - get environment offset"
+#endif
 );
 
 static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,
index 50bc111a3bf30901849c54ea0ff1b58e5abd0694..a5e1038315bd01c520c25809e29fad01359d88d1 100644 (file)
@@ -38,6 +38,7 @@
 #include <linux/stddef.h>
 #include <malloc.h>
 #include <nand.h>
+#include <asm/errno.h>
 
 #if defined(CONFIG_CMD_SAVEENV) && defined(CONFIG_CMD_NAND)
 #define CMD_SAVEENV
@@ -284,6 +285,38 @@ int readenv (size_t offset, u_char * buf)
        return 0;
 }
 
+#ifdef CONFIG_ENV_OFFSET_OOB
+int get_nand_env_oob(nand_info_t *nand, unsigned long *result)
+{
+       struct mtd_oob_ops ops;
+       uint32_t oob_buf[ENV_OFFSET_SIZE/sizeof(uint32_t)];
+       int ret;
+
+       ops.datbuf = NULL;
+       ops.mode = MTD_OOB_AUTO;
+       ops.ooboffs = 0;
+       ops.ooblen = ENV_OFFSET_SIZE;
+       ops.oobbuf = (void *) oob_buf;
+
+       ret = nand->read_oob(nand, ENV_OFFSET_SIZE, &ops);
+       if (ret) {
+               printf("error reading OOB block 0\n");
+               return ret;
+       }
+
+       if (oob_buf[0] == ENV_OOB_MARKER) {
+               *result = oob_buf[1] * nand->erasesize;
+       } else if (oob_buf[0] == ENV_OOB_MARKER_OLD) {
+               *result = oob_buf[1];
+       } else {
+               printf("No dynamic environment marker in OOB block 0\n");
+               return -ENOENT;
+       }
+
+       return 0;
+}
+#endif
+
 #ifdef CONFIG_ENV_OFFSET_REDUND
 void env_relocate_spec (void)
 {
@@ -353,6 +386,17 @@ void env_relocate_spec (void)
 #if !defined(ENV_IS_EMBEDDED)
        int ret;
 
+#if defined(CONFIG_ENV_OFFSET_OOB)
+       ret = get_nand_env_oob(&nand_info[0], &nand_env_oob_offset);
+       /* If unable to read environment offset from NAND OOB then fall through
+        * to the normal environment reading code below
+        */
+       if (!ret)
+               printf("Found Environment offset in OOB..\n");
+       else
+               return use_default();
+#endif
+
        ret = readenv(CONFIG_ENV_OFFSET, (u_char *) env_ptr);
        if (ret)
                return use_default();
diff --git a/doc/README.designware_eth b/doc/README.designware_eth
new file mode 100644 (file)
index 0000000..25ec6bd
--- /dev/null
@@ -0,0 +1,25 @@
+This driver supports Designware Ethernet Controller provided by Synopsis.
+
+The driver is enabled by CONFIG_DESIGNWARE_ETH.
+
+The driver has been developed and tested on SPEAr platforms. By default, the
+MDIO interface works at 100/Full. #defining the below options in board
+configuration file changes this behavior.
+
+Call an subroutine from respective board/.../board.c
+designware_initialize(u32 id, ulong base_addr, u32 phy_addr);
+
+The various options suported by the driver are
+1. CONFIG_DW_ALTDESCRIPTOR
+       Define this to use the Alternate/Enhanced Descriptor configurations.
+1. CONFIG_DW_AUTONEG
+       Define this to autonegotiate with the host before proceeding with mac
+       level configuration. This obviates the definitions of CONFIG_DW_SPEED10M
+       and CONFIG_DW_DUPLEXHALF.
+2. CONFIG_DW_SPEED10M
+       Define this to change the default behavior from 100Mbps to 10Mbps.
+3. CONFIG_DW_DUPLEXHALF
+       Define this to change the default behavior from Full Duplex to Half.
+4. CONFIG_DW_SEARCH_PHY
+       Define this to search the phy address. This would overwrite the value
+       passed as 3rd arg from designware_initialize routine.
index f16dabeba792bf4761a2e87b213e5d210cf64cf5..847c03226a6d161556084c2de9fff9397da6e6bf 100644 (file)
@@ -14,6 +14,7 @@
 #include <asm/byteorder.h>
 #include <asm/io.h>
 #include <asm/errno.h>
+#include <asm/portmux.h>
 #include <asm/mach-common/bits/pata.h>
 #include <ata.h>
 #include <libata.h>
@@ -769,19 +770,17 @@ static int bfin_ata_reset_port(struct ata_port *ap)
  */
 static int bfin_config_atapi_gpio(struct ata_port *ap)
 {
-       bfin_write_PORTH_FER(bfin_read_PORTH_FER() | 0x4);
-       bfin_write_PORTH_MUX(bfin_read_PORTH_MUX() & ~0x30);
-       bfin_write_PORTH_DIR_SET(0x4);
-
-       bfin_write_PORTJ_FER(0x7f8);
-       bfin_write_PORTJ_MUX(bfin_read_PORTI_MUX() & ~0x3fffc0);
-       bfin_write_PORTJ_DIR_SET(0x5f8);
-       bfin_write_PORTJ_DIR_CLEAR(0x200);
-       bfin_write_PORTJ_INEN(0x200);
-
-       bfin_write_PINT2_ASSIGN(0x0707);
-       bfin_write_PINT2_MASK_SET(0x200);
-       SSYNC();
+       const unsigned short pins[] = {
+               P_ATAPI_RESET, P_ATAPI_DIOR, P_ATAPI_DIOW, P_ATAPI_CS0,
+               P_ATAPI_CS1, P_ATAPI_DMACK, P_ATAPI_DMARQ, P_ATAPI_INTRQ,
+               P_ATAPI_IORDY, P_ATAPI_D0A, P_ATAPI_D1A, P_ATAPI_D2A,
+               P_ATAPI_D3A, P_ATAPI_D4A, P_ATAPI_D5A, P_ATAPI_D6A,
+               P_ATAPI_D7A, P_ATAPI_D8A, P_ATAPI_D9A, P_ATAPI_D10A,
+               P_ATAPI_D11A, P_ATAPI_D12A, P_ATAPI_D13A, P_ATAPI_D14A,
+               P_ATAPI_D15A, P_ATAPI_A0A, P_ATAPI_A1A, P_ATAPI_A2A, 0,
+       };
+
+       peripheral_request_list(pins, "pata_bfin");
 
        return 0;
 }
index f9d560a71b58efcfdbb2701af4fc0c1065bffd89..4a77779f5b6bfb5bdf20ad92ab52b9fbe53198bd 100644 (file)
@@ -15,6 +15,7 @@
 #include <asm/errno.h>
 #include <asm/byteorder.h>
 #include <asm/blackfin.h>
+#include <asm/portmux.h>
 #include <asm/mach-common/bits/sdh.h>
 #include <asm/mach-common/bits/dma.h>
 
 # define bfin_write_DMA_X_COUNT                bfin_write_DMA4_X_COUNT
 # define bfin_write_DMA_X_MODIFY       bfin_write_DMA4_X_MODIFY
 # define bfin_write_DMA_CONFIG         bfin_write_DMA4_CONFIG
+# define PORTMUX_PINS \
+       { P_RSI_DATA0, P_RSI_DATA1, P_RSI_DATA2, P_RSI_DATA3, P_RSI_CMD, P_RSI_CLK, 0 }
 #elif defined(__ADSPBF54x__)
 # define bfin_write_DMA_START_ADDR     bfin_write_DMA22_START_ADDR
 # define bfin_write_DMA_X_COUNT                bfin_write_DMA22_X_COUNT
 # define bfin_write_DMA_X_MODIFY       bfin_write_DMA22_X_MODIFY
 # define bfin_write_DMA_CONFIG         bfin_write_DMA22_CONFIG
+# define PORTMUX_PINS \
+       { P_SD_D0, P_SD_D1, P_SD_D2, P_SD_D3, P_SD_CLK, P_SD_CMD, 0 }
 #else
 # error no support for this proc yet
 #endif
@@ -208,18 +213,13 @@ static void bfin_sdh_set_ios(struct mmc *mmc)
 
 static int bfin_sdh_init(struct mmc *mmc)
 {
-
+       const unsigned short pins[] = PORTMUX_PINS;
        u16 pwr_ctl = 0;
-/* Initialize sdh controller */
+
+       /* Initialize sdh controller */
+       peripheral_request_list(pins, "bfin_sdh");
 #if defined(__ADSPBF54x__)
        bfin_write_DMAC1_PERIMUX(bfin_read_DMAC1_PERIMUX() | 0x1);
-       bfin_write_PORTC_FER(bfin_read_PORTC_FER() | 0x3F00);
-       bfin_write_PORTC_MUX(bfin_read_PORTC_MUX() & ~0xFFF0000);
-#elif defined(__ADSPBF51x__)
-       bfin_write_PORTG_FER(bfin_read_PORTG_FER() | 0x01F8);
-       bfin_write_PORTG_MUX((bfin_read_PORTG_MUX() & ~0x3FC) | 0x154);
-#else
-# error no portmux for this proc yet
 #endif
        bfin_write_SDH_CFG(bfin_read_SDH_CFG() | CLKS_EN);
        /* Disable card detect pin */
index 6d3d45019cab85586d103c4c6f654f1afaade925..3ee060f859fc9646d27a61e271a2bc08253a8541 100644 (file)
@@ -26,6 +26,7 @@
 #include <nand.h>
 
 #include <asm/blackfin.h>
+#include <asm/portmux.h>
 
 /* Bit masks for NFC_CTL */
 
@@ -337,6 +338,12 @@ static struct nand_ecclayout bootrom_ecclayout = {
  */
 int board_nand_init(struct nand_chip *chip)
 {
+       const unsigned short pins[] = {
+               P_NAND_CE, P_NAND_RB, P_NAND_D0, P_NAND_D1, P_NAND_D2,
+               P_NAND_D3, P_NAND_D4, P_NAND_D5, P_NAND_D6, P_NAND_D7,
+               P_NAND_WE, P_NAND_RE, P_NAND_CLE, P_NAND_ALE, 0,
+       };
+
        pr_stamp();
 
        /* set width/ecc/timings/etc... */
@@ -347,14 +354,7 @@ int board_nand_init(struct nand_chip *chip)
        bfin_write_NFC_IRQSTAT(0xffff);
 
        /* enable GPIO function enable register */
-#ifdef __ADSPBF54x__
-       bfin_write_PORTJ_FER(bfin_read_PORTJ_FER() | 6);
-#elif defined(__ADSPBF52x__)
-       bfin_write_PORTH_FER(bfin_read_PORTH_FER() | 0xFCFF);
-       bfin_write_PORTH_MUX(0);
-#else
-# error no support for this variant
-#endif
+       peripheral_request_list(pins, "bfin_nand");
 
        chip->cmd_ctrl = bfin_nfc_cmd_ctrl;
        chip->read_buf = bfin_nfc_read_buf;
index 7171bdd51b421441f401df6b70cb1b56bfdea3f1..ed1c9c9a88aa906b70dbd83698f7406e010dd774 100644 (file)
@@ -2652,8 +2652,12 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
                }
        }
 
-       if (!type)
+       if (!type) {
+               printk(KERN_INFO "%s: unknown NAND device: Manufacturer ID:"
+                      " 0x%02x, Chip ID: 0x%02x\n", __func__,
+                      *maf_id, dev_id);
                return ERR_PTR(-ENODEV);
+       }
 
        if (!mtd->name)
                mtd->name = type->name;
index 077c3051bcc4ecfdaa77e78b490f55ee81776e4d..25b22ecc926cfe869bb1809e9f61803529238cb0 100644 (file)
@@ -83,6 +83,7 @@ struct nand_flash_dev nand_flash_ids[] = {
        /* 1 Gigabit */
        {"NAND 128MiB 1,8V 8-bit",      0xA1, 0, 128, 0, LP_OPTIONS},
        {"NAND 128MiB 3,3V 8-bit",      0xF1, 0, 128, 0, LP_OPTIONS},
+       {"NAND 128MiB 3,3V 8-bit",      0xD1, 0, 128, 0, LP_OPTIONS},
        {"NAND 128MiB 1,8V 16-bit",     0xB1, 0, 128, 0, LP_OPTIONS16},
        {"NAND 128MiB 3,3V 16-bit",     0xC1, 0, 128, 0, LP_OPTIONS16},
 
index b35492b9fc425e096c0ff04384fc8ec029db1a89..37a0206ad6531d1169668d93b1195183e1bfed58 100644 (file)
 
 #include <common.h>
 #include <asm/io.h>
+#ifdef NAND_PLAT_GPIO_DEV_READY
+# include <asm/gpio.h>
+# define NAND_PLAT_DEV_READY(chip) gpio_get_value(NAND_PLAT_GPIO_DEV_READY)
+#endif
 
 #include <nand.h>
 
@@ -43,7 +47,14 @@ static int plat_dev_ready(struct mtd_info *mtd)
 
 int board_nand_init(struct nand_chip *nand)
 {
+#ifdef NAND_PLAT_GPIO_DEV_READY
+       gpio_request(NAND_PLAT_GPIO_DEV_READY, "nand-plat");
+       gpio_direction_input(NAND_PLAT_GPIO_DEV_READY);
+#endif
+
+#ifdef NAND_PLAT_INIT
        NAND_PLAT_INIT();
+#endif
 
        nand->cmd_ctrl = plat_cmd_ctrl;
        nand->dev_ready = plat_dev_ready;
index 2fac64167b9fd418f9a649f137ae0c11cfcc55b1..144b8513578cb97000d780797c1a34f3c2ac6df9 100644 (file)
@@ -1095,6 +1095,11 @@ static int ppc_4xx_eth_init (struct eth_device *dev, bd_t * bis)
                miiphy_write (dev->name, reg, 0x18, 0x4101);
                miiphy_write (dev->name, reg, 0x09, 0x0e00);
                miiphy_write (dev->name, reg, 0x04, 0x01e1);
+#if defined(CONFIG_M88E1111_DISABLE_FIBER)
+               miiphy_read(dev->name, reg, 0x1b, &reg_short);
+               reg_short |= 0x8000;
+               miiphy_write(dev->name, reg, 0x1b, reg_short);
+#endif
 #endif
 #if defined(CONFIG_M88E1112_PHY)
                if (bis->bi_phymode[devnum] == BI_PHYMODE_SGMII) {
index b75c02f8c230d0247d713c5a842fbb2c121d0eb7..218eeff86e6ece0d10fc7dff8078cc51f3f9d505 100644 (file)
@@ -34,6 +34,7 @@ COBJS-$(CONFIG_BCM570x) += bcm570x.o bcm570x_autoneg.o 5701rls.o
 COBJS-$(CONFIG_BFIN_MAC) += bfin_mac.o
 COBJS-$(CONFIG_CS8900) += cs8900.o
 COBJS-$(CONFIG_TULIP) += dc2114x.o
+COBJS-$(CONFIG_DESIGNWARE_ETH) += designware.o
 COBJS-$(CONFIG_DRIVER_DM9000) += dm9000x.o
 COBJS-$(CONFIG_DNET) += dnet.o
 COBJS-$(CONFIG_E1000) += e1000.o
@@ -46,13 +47,13 @@ COBJS-$(CONFIG_FSLDMAFEC) += fsl_mcdmafec.o mcfmii.o
 COBJS-$(CONFIG_FTMAC100) += ftmac100.o
 COBJS-$(CONFIG_GRETH) += greth.o
 COBJS-$(CONFIG_INCA_IP_SWITCH) += inca-ip_sw.o
-COBJS-$(CONFIG_KIRKWOOD_EGIGA) += kirkwood_egiga.o
 COBJS-$(CONFIG_DRIVER_KS8695ETH) += ks8695eth.o
 COBJS-$(CONFIG_LAN91C96) += lan91c96.o
 COBJS-$(CONFIG_MACB) += macb.o
 COBJS-$(CONFIG_MCFFEC) += mcffec.o mcfmii.o
 COBJS-$(CONFIG_MPC5xxx_FEC) += mpc5xxx_fec.o
 COBJS-$(CONFIG_MPC512x_FEC) += mpc512x_fec.o
+COBJS-$(CONFIG_MVGBE) += mvgbe.o
 COBJS-$(CONFIG_NATSEMI) += natsemi.o
 COBJS-$(CONFIG_DRIVER_NE2000) += ne2000.o ne2000_base.o
 COBJS-$(CONFIG_DRIVER_AX88796L) += ax88796.o ne2000_base.o
index 239956998dab1f59d5c44bca5c1596110860dea6..245da121b94d520e12eb562641c12945ae6aaa8c 100644 (file)
        Please decrease the CONFIG_SYS_RX_ETH_BUFFER value
 #endif
 
+#ifndef CONFIG_DRIVER_AT91EMAC_PHYADDR
+#define CONFIG_DRIVER_AT91EMAC_PHYADDR 0
+#endif
+
 /* MDIO clock must not exceed 2.5 MHz, so enable MCK divider */
 #if (AT91C_MASTER_CLOCK > 80000000)
        #define HCLK_DIV        AT91_EMAC_CFG_MCLK_64
@@ -198,12 +202,15 @@ static int at91emac_phy_reset(struct eth_device *netdev)
        emac = (at91_emac_t *) netdev->iobase;
 
        adv = ADVERTISE_CSMA | ADVERTISE_ALL;
-       at91emac_write(emac, 0, MII_ADVERTISE, adv);
+       at91emac_write(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR,
+               MII_ADVERTISE, adv);
        VERBOSEP("%s: Starting autonegotiation...\n", netdev->name);
-       at91emac_write(emac, 0, MII_BMCR, (BMCR_ANENABLE | BMCR_ANRESTART));
+       at91emac_write(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR, MII_BMCR,
+               (BMCR_ANENABLE | BMCR_ANRESTART));
 
        for (i = 0; i < 100000 / 100; i++) {
-               at91emac_read(emac, 0, MII_BMSR, &status);
+               at91emac_read(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR,
+                       MII_BMSR, &status);
                if (status & BMSR_ANEGCOMPLETE)
                        break;
                udelay(100);
@@ -229,13 +236,15 @@ static int at91emac_phy_init(struct eth_device *netdev)
        emac = (at91_emac_t *) netdev->iobase;
 
        /* Check if the PHY is up to snuff... */
-       at91emac_read(emac, 0, MII_PHYSID1, &phy_id);
+       at91emac_read(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR,
+               MII_PHYSID1, &phy_id);
        if (phy_id == 0xffff) {
                printf("%s: No PHY present\n", netdev->name);
                return 1;
        }
 
-       at91emac_read(emac, 0, MII_BMSR, &status);
+       at91emac_read(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR,
+               MII_BMSR, &status);
 
        if (!(status & BMSR_LSTATUS)) {
                /* Try to re-negotiate if we don't have link already. */
@@ -243,7 +252,8 @@ static int at91emac_phy_init(struct eth_device *netdev)
                        return 2;
 
                for (i = 0; i < 100000 / 100; i++) {
-                       at91emac_read(emac, 0, MII_BMSR, &status);
+                       at91emac_read(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR,
+                               MII_BMSR, &status);
                        if (status & BMSR_LSTATUS)
                                break;
                        udelay(100);
@@ -253,8 +263,10 @@ static int at91emac_phy_init(struct eth_device *netdev)
                VERBOSEP("%s: link down\n", netdev->name);
                return 3;
        } else {
-               at91emac_read(emac, 0, MII_ADVERTISE, &adv);
-               at91emac_read(emac, 0, MII_LPA, &lpa);
+               at91emac_read(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR,
+                       MII_ADVERTISE, &adv);
+               at91emac_read(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR,
+                       MII_LPA, &lpa);
                media = mii_nway_result(lpa & adv);
                speed = (media & (ADVERTISE_100FULL | ADVERTISE_100HALF)
                         ? 1 : 0);
@@ -271,7 +283,7 @@ int at91emac_UpdateLinkSpeed(at91_emac_t *emac)
 {
        unsigned short stat1;
 
-       at91emac_read(emac, 0, MII_BMSR, &stat1);
+       at91emac_read(emac, CONFIG_DRIVER_AT91EMAC_PHYADDR, MII_BMSR, &stat1);
 
        if (!(stat1 & BMSR_LSTATUS))    /* link status up? */
                return 1;
@@ -348,14 +360,6 @@ static int at91emac_init(struct eth_device *netdev, bd_t *bd)
        writel(1 << AT91_ID_EMAC, &pmc->pcer);
        writel(readl(&emac->ctl) | AT91_EMAC_CTL_CSR, &emac->ctl);
 
-       DEBUG_AT91EMAC("init MAC-ADDR %x%x \n",
-               cpu_to_le16(*((u16 *)(netdev->enetaddr + 4))),
-               cpu_to_le32(*((u32 *)netdev->enetaddr)));
-       writel(cpu_to_le32(*((u32 *)netdev->enetaddr)), &emac->sa2l);
-       writel(cpu_to_le16(*((u16 *)(netdev->enetaddr + 4))), &emac->sa2h);
-       DEBUG_AT91EMAC("init MAC-ADDR %x%x \n",
-               readl(&emac->sa2h), readl(&emac->sa2l));
-
        /* Init Ethernet buffers */
        for (i = 0; i < RBF_FRAMEMAX; i++) {
                dev->rbfdt[i].addr = (unsigned long) NetRxPackets[i];
@@ -372,7 +376,7 @@ static int at91emac_init(struct eth_device *netdev, bd_t *bd)
        value = AT91_EMAC_CFG_CAF |     AT91_EMAC_CFG_NBC |
                HCLK_DIV;
 #ifdef CONFIG_RMII
-       value |= AT91C_EMAC_RMII;
+       value |= AT91_EMAC_CFG_RMII;
 #endif
        writel(value, &emac->cfg);
 
@@ -456,6 +460,25 @@ static int at91emac_recv(struct eth_device *netdev)
        return 0;
 }
 
+static int at91emac_write_hwaddr(struct eth_device *netdev)
+{
+       emac_device *dev;
+       at91_emac_t *emac;
+       at91_pmc_t *pmc = (at91_pmc_t *) AT91_PMC_BASE;
+       emac = (at91_emac_t *) netdev->iobase;
+       dev = (emac_device *) netdev->priv;
+
+       writel(1 << AT91_ID_EMAC, &pmc->pcer);
+       DEBUG_AT91EMAC("init MAC-ADDR %x%x \n",
+               cpu_to_le16(*((u16 *)(netdev->enetaddr + 4))),
+               cpu_to_le32(*((u32 *)netdev->enetaddr)));
+       writel(cpu_to_le32(*((u32 *)netdev->enetaddr)), &emac->sa2l);
+       writel(cpu_to_le16(*((u16 *)(netdev->enetaddr + 4))), &emac->sa2h);
+       DEBUG_AT91EMAC("init MAC-ADDR %x%x \n",
+               readl(&emac->sa2h), readl(&emac->sa2l));
+       return 0;
+}
+
 int at91emac_register(bd_t *bis, unsigned long iobase)
 {
        emac_device *emac;
@@ -488,6 +511,7 @@ int at91emac_register(bd_t *bis, unsigned long iobase)
        dev->halt = at91emac_halt;
        dev->send = at91emac_send;
        dev->recv = at91emac_recv;
+       dev->write_hwaddr = at91emac_write_hwaddr;
 
        eth_register(dev);
 
index d843397f343b91b3f27aa6c18fdd77f942766cda..bc3e6ad58a0ff0e58080ff675b839353bbdc5f65 100644 (file)
@@ -41,6 +41,7 @@
 #include <command.h>
 #include <net.h>
 #include <malloc.h>
+#include <linux/mii.h>
 #include "ax88180.h"
 
 /*
@@ -50,9 +51,9 @@
  */
 static void ax88180_rx_handler (struct eth_device *dev);
 static int ax88180_phy_initial (struct eth_device *dev);
-static void ax88180_meidia_config (struct eth_device *dev);
-static unsigned long get_CicadaPHY_meida_mode (struct eth_device *dev);
-static unsigned long get_MarvellPHY_meida_mode (struct eth_device *dev);
+static void ax88180_media_config (struct eth_device *dev);
+static unsigned long get_CicadaPHY_media_mode (struct eth_device *dev);
+static unsigned long get_MarvellPHY_media_mode (struct eth_device *dev);
 static unsigned short ax88180_mdio_read (struct eth_device *dev,
                                         unsigned long regaddr);
 static void ax88180_mdio_write (struct eth_device *dev,
@@ -112,10 +113,10 @@ static int ax88180_phy_reset (struct eth_device *dev)
 {
        unsigned short delay_cnt = 500;
 
-       ax88180_mdio_write (dev, BMCR, (PHY_RESET | AUTONEG_EN));
+       ax88180_mdio_write (dev, MII_BMCR, (BMCR_RESET | BMCR_ANENABLE));
 
        /* Wait for the reset to complete, or time out (500 ms) */
-       while (ax88180_mdio_read (dev, BMCR) & PHY_RESET) {
+       while (ax88180_mdio_read (dev, MII_BMCR) & BMCR_RESET) {
                udelay (1000);
                if (--delay_cnt == 0) {
                        printf ("Failed to reset PHY!\n");
@@ -255,52 +256,78 @@ static int ax88180_phy_initial (struct eth_device *dev)
 {
        struct ax88180_private *priv = (struct ax88180_private *)dev->priv;
        unsigned long tmp_regval;
+       unsigned short phyaddr;
 
-       /* Check avaliable PHY chipset  */
-       priv->PhyAddr = MARVELL_88E1111_PHYADDR;
-       priv->PhyID0 = ax88180_mdio_read (dev, PHYIDR0);
-
-       if (priv->PhyID0 == MARVELL_88E1111_PHYIDR0) {
-
-               debug ("ax88180: Found Marvell 88E1111 PHY."
-                      " (PHY Addr=0x%x)\n", priv->PhyAddr);
-
-               tmp_regval = ax88180_mdio_read (dev, M88_EXT_SSR);
-               if ((tmp_regval & HWCFG_MODE_MASK) == RGMII_COPPER_MODE) {
+       /* Search for first avaliable PHY chipset */
+#ifdef CONFIG_PHY_ADDR
+       phyaddr = CONFIG_PHY_ADDR;
+#else
+       for (phyaddr = 0; phyaddr < 32; ++phyaddr)
+#endif
+       {
+               priv->PhyAddr = phyaddr;
+               priv->PhyID0 = ax88180_mdio_read(dev, MII_PHYSID1);
+               priv->PhyID1 = ax88180_mdio_read(dev, MII_PHYSID2);
+
+               switch (priv->PhyID0) {
+               case MARVELL_ALASKA_PHYSID0:
+                       debug("ax88180: Found Marvell Alaska PHY family."
+                             " (PHY Addr=0x%x)\n", priv->PhyAddr);
+
+                       switch (priv->PhyID1) {
+                       case MARVELL_88E1118_PHYSID1:
+                               ax88180_mdio_write(dev, M88E1118_PAGE_SEL, 2);
+                               ax88180_mdio_write(dev, M88E1118_CR,
+                                       M88E1118_CR_DEFAULT);
+                               ax88180_mdio_write(dev, M88E1118_PAGE_SEL, 3);
+                               ax88180_mdio_write(dev, M88E1118_LEDCTL,
+                                       M88E1118_LEDCTL_DEFAULT);
+                               ax88180_mdio_write(dev, M88E1118_LEDMIX,
+                                       M88E1118_LEDMIX_LED050 | M88E1118_LEDMIX_LED150 | 0x15);
+                               ax88180_mdio_write(dev, M88E1118_PAGE_SEL, 0);
+                       default: /* Default to 88E1111 Phy */
+                               tmp_regval = ax88180_mdio_read(dev, M88E1111_EXT_SSR);
+                               if ((tmp_regval & HWCFG_MODE_MASK) != RGMII_COPPER_MODE)
+                                       ax88180_mdio_write(dev, M88E1111_EXT_SCR,
+                                               DEFAULT_EXT_SCR);
+                       }
 
-                       ax88180_mdio_write (dev, M88_EXT_SCR, DEFAULT_EXT_SCR);
-                       if (ax88180_phy_reset (dev) < 0)
+                       if (ax88180_phy_reset(dev) < 0)
                                return 0;
-                       ax88180_mdio_write (dev, M88_IER, LINK_CHANGE_INT);
-               }
-       } else {
+                       ax88180_mdio_write(dev, M88_IER, LINK_CHANGE_INT);
 
-               priv->PhyAddr = CICADA_CIS8201_PHYADDR;
-               priv->PhyID0 = ax88180_mdio_read (dev, PHYIDR0);
+                       return 1;
 
-               if (priv->PhyID0 == CICADA_CIS8201_PHYIDR0) {
+               case CICADA_CIS8201_PHYSID0:
+                       debug("ax88180: Found CICADA CIS8201 PHY"
+                             " chipset. (PHY Addr=0x%x)\n", priv->PhyAddr);
 
-                       debug ("ax88180: Found CICADA CIS8201 PHY"
-                              " chipset. (PHY Addr=0x%x)\n", priv->PhyAddr);
-                       ax88180_mdio_write (dev, CIS_IMR,
+                       ax88180_mdio_write(dev, CIS_IMR,
                                            (CIS_INT_ENABLE | LINK_CHANGE_INT));
 
                        /* Set CIS_SMI_PRIORITY bit before force the media mode */
-                       tmp_regval =
-                           ax88180_mdio_read (dev, CIS_AUX_CTRL_STATUS);
+                       tmp_regval = ax88180_mdio_read(dev, CIS_AUX_CTRL_STATUS);
                        tmp_regval &= ~CIS_SMI_PRIORITY;
-                       ax88180_mdio_write (dev, CIS_AUX_CTRL_STATUS,
-                                           tmp_regval);
-               } else {
-                       printf ("ax88180: Unknown PHY chipset!!\n");
-                       return 0;
+                       ax88180_mdio_write(dev, CIS_AUX_CTRL_STATUS, tmp_regval);
+
+                       return 1;
+
+               case 0xffff:
+                       /* No PHY at this addr */
+                       break;
+
+               default:
+                       printf("ax88180: Unknown PHY chipset %#x at addr %#x\n",
+                              priv->PhyID0, priv->PhyAddr);
+                       break;
                }
        }
 
-       return 1;
+       printf("ax88180: Unknown PHY chipset!!\n");
+       return 0;
 }
 
-static void ax88180_meidia_config (struct eth_device *dev)
+static void ax88180_media_config (struct eth_device *dev)
 {
        struct ax88180_private *priv = (struct ax88180_private *)dev->priv;
        unsigned long bmcr_val, bmsr_val;
@@ -310,20 +337,20 @@ static void ax88180_meidia_config (struct eth_device *dev)
 
        /* Waiting 2 seconds for PHY link stable */
        for (i = 0; i < 20000; i++) {
-               bmsr_val = ax88180_mdio_read (dev, BMSR);
-               if (bmsr_val & LINKOK) {
+               bmsr_val = ax88180_mdio_read (dev, MII_BMSR);
+               if (bmsr_val & BMSR_LSTATUS) {
                        break;
                }
                udelay (100);
        }
 
-       bmsr_val = ax88180_mdio_read (dev, BMSR);
+       bmsr_val = ax88180_mdio_read (dev, MII_BMSR);
        debug ("ax88180: BMSR=0x%04x\n", (unsigned int)bmsr_val);
 
-       if (bmsr_val & LINKOK) {
-               bmcr_val = ax88180_mdio_read (dev, BMCR);
+       if (bmsr_val & BMSR_LSTATUS) {
+               bmcr_val = ax88180_mdio_read (dev, MII_BMCR);
 
-               if (bmcr_val & AUTONEG_EN) {
+               if (bmcr_val & BMCR_ANENABLE) {
 
                        /*
                         * Waiting for Auto-negotiation completion, this may
@@ -332,8 +359,8 @@ static void ax88180_meidia_config (struct eth_device *dev)
                        debug ("ax88180: Auto-negotiation is "
                               "enabled. Waiting for NWay completion..\n");
                        for (i = 0; i < 50000; i++) {
-                               bmsr_val = ax88180_mdio_read (dev, BMSR);
-                               if (bmsr_val & AUTONEG_COMPLETE) {
+                               bmsr_val = ax88180_mdio_read (dev, MII_BMSR);
+                               if (bmsr_val & BMSR_ANEGCOMPLETE) {
                                        break;
                                }
                                udelay (100);
@@ -345,12 +372,16 @@ static void ax88180_meidia_config (struct eth_device *dev)
                       (unsigned int)bmcr_val, (unsigned int)bmsr_val);
 
                /* Get real media mode here */
-               if (priv->PhyID0 == MARVELL_88E1111_PHYIDR0) {
-                       RealMediaMode = get_MarvellPHY_meida_mode (dev);
-               } else if (priv->PhyID0 == CICADA_CIS8201_PHYIDR0) {
-                       RealMediaMode = get_CicadaPHY_meida_mode (dev);
-               } else {
+               switch (priv->PhyID0) {
+               case MARVELL_ALASKA_PHYSID0:
+                       RealMediaMode = get_MarvellPHY_media_mode(dev);
+                       break;
+               case CICADA_CIS8201_PHYSID0:
+                       RealMediaMode = get_CicadaPHY_media_mode(dev);
+                       break;
+               default:
                        RealMediaMode = MEDIA_1000FULL;
+                       break;
                }
 
                priv->LinkState = INS_LINK_UP;
@@ -424,7 +455,7 @@ static void ax88180_meidia_config (struct eth_device *dev)
        return;
 }
 
-static unsigned long get_MarvellPHY_meida_mode (struct eth_device *dev)
+static unsigned long get_MarvellPHY_media_mode (struct eth_device *dev)
 {
        unsigned long m88_ssr;
        unsigned long MediaMode;
@@ -457,7 +488,7 @@ static unsigned long get_MarvellPHY_meida_mode (struct eth_device *dev)
        return MediaMode;
 }
 
-static unsigned long get_CicadaPHY_meida_mode (struct eth_device *dev)
+static unsigned long get_CicadaPHY_media_mode (struct eth_device *dev)
 {
        unsigned long tmp_regval;
        unsigned long MediaMode;
@@ -522,7 +553,7 @@ static int ax88180_init (struct eth_device *dev, bd_t * bd)
            dev->enetaddr[4] | (((unsigned short)dev->enetaddr[5]) << 8);
        OUTW (dev, tmp_regval, MACID2);
 
-       ax88180_meidia_config (dev);
+       ax88180_media_config (dev);
 
        OUTW (dev, DEFAULT_RXFILTER, RXFILTER);
 
@@ -558,7 +589,7 @@ static int ax88180_recv (struct eth_device *dev)
                if (ISR_Status & ISR_PHY) {
                        /* Read ISR register once to clear PHY interrupt bit */
                        tmp_regval = ax88180_mdio_read (dev, M88_ISR);
-                       ax88180_meidia_config (dev);
+                       ax88180_media_config (dev);
                }
 
                if ((ISR_Status & ISR_RX) || (ISR_Status & ISR_RXBUFFOVR)) {
index d2113df4bd152ca9a3d45de77070264cd15e4965..daf18e015709829d486a4e45354920d082e8366c 100644 (file)
@@ -19,6 +19,7 @@
 #ifndef _AX88180_H_
 #define _AX88180_H_
 
+#include <asm/io.h>
 #include <asm/types.h>
 #include <config.h>
 
@@ -33,6 +34,7 @@ struct ax88180_private {
        unsigned char PadSize;
        unsigned short PhyAddr;
        unsigned short PhyID0;
+       unsigned short PhyID1;
        unsigned short FirstTxDesc;
        unsigned short NextTxDesc;
        ax88180_link_state LinkState;
@@ -63,11 +65,10 @@ struct ax88180_private {
 /* Max Rx Jumbo size is 15K Bytes */
 #define MAX_RX_SIZE                    0x3C00
 
-#define MARVELL_88E1111_PHYADDR        0x18
-#define MARVELL_88E1111_PHYIDR0        0x0141
+#define MARVELL_ALASKA_PHYSID0 0x141
+#define MARVELL_88E1118_PHYSID1        0xE40
 
-#define CICADA_CIS8201_PHYADDR 0x01
-#define CICADA_CIS8201_PHYIDR0         0x000F
+#define CICADA_CIS8201_PHYSID0         0x000F
 
 #define MEDIA_AUTO                     0
 #define MEDIA_1000FULL                 1
@@ -278,50 +279,6 @@ struct ax88180_private {
   #define SOFTRST_NORMAL       0x00000003
   #define SOFTRST_RESET_MAC    0x00000002
 
-/* External PHY Register Definition */
-#define BMCR           0x0000
-  #define LINE_SPEED_MSB       0x0040
-  #define DUPLEX_MODE          0x0100
-  #define RESTART_AUTONEG      0x0200
-  #define POWER_DOWN           0x0800
-  #define AUTONEG_EN           0x1000
-  #define LINE_SPEED_LSB       0x2000
-  #define PHY_RESET            0x8000
-
-  #define MEDIAMODE_MASK       (LINE_SPEED_MSB | LINE_SPEED_LSB |\
-                                DUPLEX_MODE)
-  #define BMCR_SPEED_1000      LINE_SPEED_MSB
-  #define BMCR_SPEED_100       LINE_SPEED_LSB
-  #define BMCR_SPEED_10        0x0000
-
-  #define BMCR_1000FULL        (BMCR_SPEED_1000 | DUPLEX_MODE)
-  #define BMCR_100FULL         (BMCR_SPEED_100 | DUPLEX_MODE)
-  #define BMCR_100HALF         BMCR_SPEED_100
-  #define BMCR_10FULL          DUPLEX_MODE
-  #define BMCR_10HALF          0x0000
-#define BMSR           0x0001
-  #define LINKOK               0x0004
-  #define AUTONEG_ENABLE_STS   0x0008
-  #define AUTONEG_COMPLETE     0x0020
-#define PHYIDR0                0x0002
-#define PHYIDR1                0x0003
-#define ANAR           0x0004
-  #define ANAR_PAUSE           0x0400
-  #define ANAR_100FULL         0x0100
-  #define ANAR_100HALF         0x0080
-  #define ANAR_10FULL          0x0040
-  #define ANAR_10HALF          0x0020
-  #define ANAR_8023BIT         0x0001
-#define ANLPAR         0x0005
-#define ANER           0x0006
-#define AUX_1000_CTRL  0x0009
-  #define ENABLE_1000HALF      0x0100
-  #define ENABLE_1000FULL      0x0200
-  #define DEFAULT_AUX_1000_CTRL        (ENABLE_1000HALF | ENABLE_1000FULL)
-#define AUX_1000_STATUS        0x000A
-  #define LP_1000HALF          0x0400
-  #define LP_1000FULL          0x0800
-
 /* Marvell 88E1111 Gigabit PHY Register Definition */
 #define M88_SSR                0x0011
   #define SSR_SPEED_MASK       0xC000
@@ -342,14 +299,36 @@ struct ax88180_private {
   #define LINK_CHANGE_INT      0x0400
 #define M88_ISR                0x0013
   #define LINK_CHANGE_STATUS   0x0400
-#define M88_EXT_SCR    0x0014
+#define M88E1111_EXT_SCR       0x0014
   #define RGMII_RXCLK_DELAY    0x0080
   #define RGMII_TXCLK_DELAY    0x0002
   #define DEFAULT_EXT_SCR      (RGMII_TXCLK_DELAY | RGMII_RXCLK_DELAY)
-#define M88_EXT_SSR    0x001B
+#define M88E1111_EXT_SSR       0x001B
   #define HWCFG_MODE_MASK      0x000F
   #define RGMII_COPPER_MODE    0x000B
 
+/* Marvell 88E1118 Gigabit PHY Register Definition */
+#define M88E1118_CR                    0x14
+  #define M88E1118_CR_RGMII_RXCLK_DELAY        0x0020
+  #define M88E1118_CR_RGMII_TXCLK_DELAY        0x0010
+  #define M88E1118_CR_DEFAULT          (M88E1118_CR_RGMII_TXCLK_DELAY | \
+                                        M88E1118_CR_RGMII_RXCLK_DELAY)
+#define M88E1118_LEDCTL                0x10            /* Reg 16 on page 3 */
+  #define M88E1118_LEDCTL_LED2INT                      0x200
+  #define M88E1118_LEDCTL_LED2BLNK                     0x400
+  #define M88E1118_LEDCTL_LED0DUALMODE1        0xc
+  #define M88E1118_LEDCTL_LED0DUALMODE2        0xd
+  #define M88E1118_LEDCTL_LED0DUALMODE3        0xe
+  #define M88E1118_LEDCTL_LED0DUALMODE4        0xf
+  #define M88E1118_LEDCTL_DEFAULT      (M88E1118_LEDCTL_LED2BLNK | \
+                                        M88E1118_LEDCTL_LED0DUALMODE4)
+
+#define M88E1118_LEDMIX                0x11            /* Reg 17 on page 3 */
+  #define M88E1118_LEDMIX_LED050                               0x4
+  #define M88E1118_LEDMIX_LED150                               0x8
+
+#define M88E1118_PAGE_SEL      0x16            /* Reg page select */
+
 /* CICADA CIS8201 Gigabit PHY Register Definition */
 #define CIS_IMR                0x0019
   #define CIS_INT_ENABLE       0x8000
@@ -376,36 +355,41 @@ struct ax88180_private {
 
 static inline unsigned short INW (struct eth_device *dev, unsigned long addr)
 {
-       return le16_to_cpu (*(volatile unsigned short *) (addr + dev->iobase));
-}
-
-static inline void OUTW (struct eth_device *dev, unsigned short command, unsigned long addr)
-{
-       *(volatile unsigned short *) ((addr + dev->iobase)) = cpu_to_le16 (command);
+       return le16_to_cpu(readw(addr + (void *)dev->iobase));
 }
 
 /*
  Access RXBUFFER_START/TXBUFFER_START to read RX buffer/write TX buffer
 */
 #if defined (CONFIG_DRIVER_AX88180_16BIT)
+static inline void OUTW (struct eth_device *dev, unsigned short command, unsigned long addr)
+{
+       writew(cpu_to_le16(command), addr + (void *)dev->iobase);
+}
+
 static inline unsigned short READ_RXBUF (struct eth_device *dev)
 {
-       return le16_to_cpu (*(volatile unsigned short *) (RXBUFFER_START + dev->iobase));
+       return le16_to_cpu(readw(RXBUFFER_START + (void *)dev->iobase));
 }
 
 static inline void WRITE_TXBUF (struct eth_device *dev, unsigned short data)
 {
-       *(volatile unsigned short *) ((TXBUFFER_START + dev->iobase)) = cpu_to_le16 (data);
+       writew(cpu_to_le16(data), TXBUFFER_START + (void *)dev->iobase);
 }
 #else
+static inline void OUTW (struct eth_device *dev, unsigned short command, unsigned long addr)
+{
+       writel(cpu_to_le32(command), addr + (void *)dev->iobase);
+}
+
 static inline unsigned long READ_RXBUF (struct eth_device *dev)
 {
-       return le32_to_cpu (*(volatile unsigned long *) (RXBUFFER_START + dev->iobase));
+       return le32_to_cpu(readl(RXBUFFER_START + (void *)dev->iobase));
 }
 
 static inline void WRITE_TXBUF (struct eth_device *dev, unsigned long data)
 {
-       *(volatile unsigned long *) ((TXBUFFER_START + dev->iobase)) = cpu_to_le32 (data);
+       writel(cpu_to_le32(data), TXBUFFER_START + (void *)dev->iobase);
 }
 #endif
 
index 720e12605ecb6e4545e7656fc7481356dce10705..e691bdf2111f4e6f009e7194bb10af99f0c08618 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/mii.h>
 
 #include <asm/blackfin.h>
+#include <asm/portmux.h>
 #include <asm/mach-common/bits/dma.h>
 #include <asm/mach-common/bits/emac.h>
 #include <asm/mach-common/bits/pll.h>
@@ -98,7 +99,7 @@ int bfin_EMAC_initialize(bd_t *bis)
                hang();
 
        memset(dev, 0, sizeof(*dev));
-       sprintf(dev->name, "Blackfin EMAC");
+       strcpy(dev->name, "bfin_mac");
 
        dev->iobase = 0;
        dev->priv = 0;
@@ -213,8 +214,17 @@ static int bfin_EMAC_recv(struct eth_device *dev)
 /* MDC = SCLK / MDC_freq / 2 - 1 */
 #define MDC_FREQ_TO_DIV(mdc_freq) (get_sclk() / (mdc_freq) / 2 - 1)
 
+#ifndef CONFIG_BFIN_MAC_PINS
+# ifdef CONFIG_RMII
+#  define CONFIG_BFIN_MAC_PINS P_RMII0
+# else
+#  define CONFIG_BFIN_MAC_PINS P_MII0
+# endif
+#endif
+
 static int bfin_miiphy_init(struct eth_device *dev, int *opmode)
 {
+       const unsigned short pins[] = CONFIG_BFIN_MAC_PINS;
        u16 phydat;
        size_t count;
 
@@ -222,42 +232,7 @@ static int bfin_miiphy_init(struct eth_device *dev, int *opmode)
        *pVR_CTL |= CLKBUFOE;
 
        /* Set all the pins to peripheral mode */
-#ifdef CONFIG_RMII
-       /* grab RMII pins */
-# if defined(__ADSPBF51x__)
-       *pPORTF_MUX = (*pPORTF_MUX & \
-               ~(PORT_x_MUX_3_MASK | PORT_x_MUX_4_MASK | PORT_x_MUX_5_MASK)) | \
-               PORT_x_MUX_3_FUNC_1 | PORT_x_MUX_4_FUNC_1 | PORT_x_MUX_5_FUNC_1;
-       *pPORTF_FER |= PF8 | PF9 | PF10 | PF11 | PF12 | PF13 | PF14 | PF15;
-       *pPORTG_MUX = (*pPORTG_MUX & ~PORT_x_MUX_0_MASK) | PORT_x_MUX_0_FUNC_1;
-       *pPORTG_FER |= PG0 | PG1 | PG2;
-# elif defined(__ADSPBF52x__)
-       *pPORTG_MUX = (*pPORTG_MUX & ~PORT_x_MUX_6_MASK) | PORT_x_MUX_6_FUNC_2;
-       *pPORTG_FER |= PG14 | PG15;
-       *pPORTH_MUX = (*pPORTH_MUX & ~(PORT_x_MUX_0_MASK | PORT_x_MUX_1_MASK)) | \
-               PORT_x_MUX_0_FUNC_2 | PORT_x_MUX_1_FUNC_2;
-       *pPORTH_FER |= PH0 | PH1 | PH2 | PH3 | PH4 | PH5 | PH6 | PH7 | PH8;
-# else
-       *pPORTH_FER |= PH0 | PH1 | PH4 | PH5 | PH6 | PH8 | PH9 | PH14 | PH15;
-# endif
-#else
-       /* grab MII & RMII pins */
-# if defined(__ADSPBF51x__)
-       *pPORTF_MUX = (*pPORTF_MUX & \
-               ~(PORT_x_MUX_0_MASK | PORT_x_MUX_1_MASK | PORT_x_MUX_3_MASK | PORT_x_MUX_4_MASK | PORT_x_MUX_5_MASK)) | \
-               PORT_x_MUX_0_FUNC_1 | PORT_x_MUX_1_FUNC_1 | PORT_x_MUX_3_FUNC_1 | PORT_x_MUX_4_FUNC_1 | PORT_x_MUX_5_FUNC_1;
-       *pPORTF_FER |= PF0 | PF1 | PF2 | PF3 | PF4 | PF5 | PF6 | PF8 | PF9 | PF10 | PF11 | PF12 | PF13 | PF14 | PF15;
-       *pPORTG_MUX = (*pPORTG_MUX & ~PORT_x_MUX_0_MASK) | PORT_x_MUX_0_FUNC_1;
-       *pPORTG_FER |= PG0 | PG1 | PG2;
-# elif defined(__ADSPBF52x__)
-       *pPORTG_MUX = (*pPORTG_MUX & ~PORT_x_MUX_6_MASK) | PORT_x_MUX_6_FUNC_2;
-       *pPORTG_FER |= PG14 | PG15;
-       *pPORTH_MUX = PORT_x_MUX_0_FUNC_2 | PORT_x_MUX_1_FUNC_2 | PORT_x_MUX_2_FUNC_2;
-       *pPORTH_FER = -1; /* all pins */
-# else
-       *pPORTH_FER = -1; /* all pins */
-# endif
-#endif
+       peripheral_request_list(pins, "bfin_mac");
 
        /* Odd word alignment for Receive Frame DMA word */
        /* Configure checksum support and rcve frame word alignment */
diff --git a/drivers/net/designware.c b/drivers/net/designware.c
new file mode 100644 (file)
index 0000000..d0d9827
--- /dev/null
@@ -0,0 +1,531 @@
+/*
+ * (C) Copyright 2010
+ * Vipin Kumar, ST Micoelectronics, vipin.kumar@st.com.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * Designware ethernet IP driver for u-boot
+ */
+
+#include <common.h>
+#include <miiphy.h>
+#include <malloc.h>
+#include <linux/err.h>
+#include <asm/io.h>
+#include "designware.h"
+
+static void tx_descs_init(struct eth_device *dev)
+{
+       struct dw_eth_dev *priv = dev->priv;
+       struct eth_dma_regs *dma_p = priv->dma_regs_p;
+       struct dmamacdescr *desc_table_p = &priv->tx_mac_descrtable[0];
+       char *txbuffs = &priv->txbuffs[0];
+       struct dmamacdescr *desc_p;
+       u32 idx;
+
+       for (idx = 0; idx < CONFIG_TX_DESCR_NUM; idx++) {
+               desc_p = &desc_table_p[idx];
+               desc_p->dmamac_addr = &txbuffs[idx * CONFIG_ETH_BUFSIZE];
+               desc_p->dmamac_next = &desc_table_p[idx + 1];
+
+#if defined(CONFIG_DW_ALTDESCRIPTOR)
+               desc_p->txrx_status &= ~(DESC_TXSTS_TXINT | DESC_TXSTS_TXLAST |
+                               DESC_TXSTS_TXFIRST | DESC_TXSTS_TXCRCDIS | \
+                               DESC_TXSTS_TXCHECKINSCTRL | \
+                               DESC_TXSTS_TXRINGEND | DESC_TXSTS_TXPADDIS);
+
+               desc_p->txrx_status |= DESC_TXSTS_TXCHAIN;
+               desc_p->dmamac_cntl = 0;
+               desc_p->txrx_status &= ~(DESC_TXSTS_MSK | DESC_TXSTS_OWNBYDMA);
+#else
+               desc_p->dmamac_cntl = DESC_TXCTRL_TXCHAIN;
+               desc_p->txrx_status = 0;
+#endif
+       }
+
+       /* Correcting the last pointer of the chain */
+       desc_p->dmamac_next = &desc_table_p[0];
+
+       writel((ulong)&desc_table_p[0], &dma_p->txdesclistaddr);
+}
+
+static void rx_descs_init(struct eth_device *dev)
+{
+       struct dw_eth_dev *priv = dev->priv;
+       struct eth_dma_regs *dma_p = priv->dma_regs_p;
+       struct dmamacdescr *desc_table_p = &priv->rx_mac_descrtable[0];
+       char *rxbuffs = &priv->rxbuffs[0];
+       struct dmamacdescr *desc_p;
+       u32 idx;
+
+       for (idx = 0; idx < CONFIG_RX_DESCR_NUM; idx++) {
+               desc_p = &desc_table_p[idx];
+               desc_p->dmamac_addr = &rxbuffs[idx * CONFIG_ETH_BUFSIZE];
+               desc_p->dmamac_next = &desc_table_p[idx + 1];
+
+               desc_p->dmamac_cntl =
+                       (MAC_MAX_FRAME_SZ & DESC_RXCTRL_SIZE1MASK) | \
+                                     DESC_RXCTRL_RXCHAIN;
+
+               desc_p->txrx_status = DESC_RXSTS_OWNBYDMA;
+       }
+
+       /* Correcting the last pointer of the chain */
+       desc_p->dmamac_next = &desc_table_p[0];
+
+       writel((ulong)&desc_table_p[0], &dma_p->rxdesclistaddr);
+}
+
+static void descs_init(struct eth_device *dev)
+{
+       tx_descs_init(dev);
+       rx_descs_init(dev);
+}
+
+static int mac_reset(struct eth_device *dev)
+{
+       struct dw_eth_dev *priv = dev->priv;
+       struct eth_mac_regs *mac_p = priv->mac_regs_p;
+       struct eth_dma_regs *dma_p = priv->dma_regs_p;
+
+       int timeout = CONFIG_MACRESET_TIMEOUT;
+
+       writel(DMAMAC_SRST, &dma_p->busmode);
+       writel(MII_PORTSELECT, &mac_p->conf);
+
+       do {
+               if (!(readl(&dma_p->busmode) & DMAMAC_SRST))
+                       return 0;
+               udelay(1000);
+       } while (timeout--);
+
+       return -1;
+}
+
+static int dw_write_hwaddr(struct eth_device *dev)
+{
+       struct dw_eth_dev *priv = dev->priv;
+       struct eth_mac_regs *mac_p = priv->mac_regs_p;
+       u32 macid_lo, macid_hi;
+       u8 *mac_id = &dev->enetaddr[0];
+
+       macid_lo = mac_id[0] + (mac_id[1] << 8) + \
+                  (mac_id[2] << 16) + (mac_id[3] << 24);
+       macid_hi = mac_id[4] + (mac_id[5] << 8);
+
+       writel(macid_hi, &mac_p->macaddr0hi);
+       writel(macid_lo, &mac_p->macaddr0lo);
+
+       return 0;
+}
+
+static int dw_eth_init(struct eth_device *dev, bd_t *bis)
+{
+       struct dw_eth_dev *priv = dev->priv;
+       struct eth_mac_regs *mac_p = priv->mac_regs_p;
+       struct eth_dma_regs *dma_p = priv->dma_regs_p;
+       u32 conf;
+
+       /* Reset ethernet hardware */
+       if (mac_reset(dev) < 0)
+               return -1;
+
+       writel(FIXEDBURST | PRIORXTX_41 | BURST_16,
+                       &dma_p->busmode);
+
+       writel(FLUSHTXFIFO | readl(&dma_p->opmode), &dma_p->opmode);
+       writel(STOREFORWARD | TXSECONDFRAME, &dma_p->opmode);
+
+       conf = FRAMEBURSTENABLE | DISABLERXOWN;
+
+       if (priv->speed != SPEED_1000M)
+               conf |= MII_PORTSELECT;
+
+       if (priv->duplex == FULL_DUPLEX)
+               conf |= FULLDPLXMODE;
+
+       writel(conf, &mac_p->conf);
+
+       descs_init(dev);
+
+       /*
+        * Start/Enable xfer at dma as well as mac level
+        */
+       writel(readl(&dma_p->opmode) | RXSTART, &dma_p->opmode);
+       writel(readl(&dma_p->opmode) | TXSTART, &dma_p->opmode);
+
+       writel(readl(&mac_p->conf) | RXENABLE, &mac_p->conf);
+       writel(readl(&mac_p->conf) | TXENABLE, &mac_p->conf);
+
+       return 0;
+}
+
+static int dw_eth_send(struct eth_device *dev, volatile void *packet,
+               int length)
+{
+       struct dw_eth_dev *priv = dev->priv;
+       struct eth_dma_regs *dma_p = priv->dma_regs_p;
+       u32 desc_num = priv->tx_currdescnum;
+       struct dmamacdescr *desc_p = &priv->tx_mac_descrtable[desc_num];
+
+       /* Check if the descriptor is owned by CPU */
+       if (desc_p->txrx_status & DESC_TXSTS_OWNBYDMA) {
+               printf("CPU not owner of tx frame\n");
+               return -1;
+       }
+
+       memcpy((void *)desc_p->dmamac_addr, (void *)packet, length);
+
+#if defined(CONFIG_DW_ALTDESCRIPTOR)
+       desc_p->txrx_status |= DESC_TXSTS_TXFIRST | DESC_TXSTS_TXLAST;
+       desc_p->dmamac_cntl |= (length << DESC_TXCTRL_SIZE1SHFT) & \
+                              DESC_TXCTRL_SIZE1MASK;
+
+       desc_p->txrx_status &= ~(DESC_TXSTS_MSK);
+       desc_p->txrx_status |= DESC_TXSTS_OWNBYDMA;
+#else
+       desc_p->dmamac_cntl |= ((length << DESC_TXCTRL_SIZE1SHFT) & \
+                              DESC_TXCTRL_SIZE1MASK) | DESC_TXCTRL_TXLAST | \
+                              DESC_TXCTRL_TXFIRST;
+
+       desc_p->txrx_status = DESC_TXSTS_OWNBYDMA;
+#endif
+
+       /* Test the wrap-around condition. */
+       if (++desc_num >= CONFIG_TX_DESCR_NUM)
+               desc_num = 0;
+
+       priv->tx_currdescnum = desc_num;
+
+       /* Start the transmission */
+       writel(POLL_DATA, &dma_p->txpolldemand);
+
+       return 0;
+}
+
+static int dw_eth_recv(struct eth_device *dev)
+{
+       struct dw_eth_dev *priv = dev->priv;
+       u32 desc_num = priv->rx_currdescnum;
+       struct dmamacdescr *desc_p = &priv->rx_mac_descrtable[desc_num];
+
+       u32 status = desc_p->txrx_status;
+       int length = 0;
+
+       /* Check  if the owner is the CPU */
+       if (!(status & DESC_RXSTS_OWNBYDMA)) {
+
+               length = (status & DESC_RXSTS_FRMLENMSK) >> \
+                        DESC_RXSTS_FRMLENSHFT;
+
+               NetReceive(desc_p->dmamac_addr, length);
+
+               /*
+                * Make the current descriptor valid again and go to
+                * the next one
+                */
+               desc_p->txrx_status |= DESC_RXSTS_OWNBYDMA;
+
+               /* Test the wrap-around condition. */
+               if (++desc_num >= CONFIG_RX_DESCR_NUM)
+                       desc_num = 0;
+       }
+
+       priv->rx_currdescnum = desc_num;
+
+       return length;
+}
+
+static void dw_eth_halt(struct eth_device *dev)
+{
+       struct dw_eth_dev *priv = dev->priv;
+
+       mac_reset(dev);
+       priv->tx_currdescnum = priv->rx_currdescnum = 0;
+}
+
+static int eth_mdio_read(struct eth_device *dev, u8 addr, u8 reg, u16 *val)
+{
+       struct dw_eth_dev *priv = dev->priv;
+       struct eth_mac_regs *mac_p = priv->mac_regs_p;
+       u32 miiaddr;
+       int timeout = CONFIG_MDIO_TIMEOUT;
+
+       miiaddr = ((addr << MIIADDRSHIFT) & MII_ADDRMSK) | \
+                 ((reg << MIIREGSHIFT) & MII_REGMSK);
+
+       writel(miiaddr | MII_CLKRANGE_150_250M | MII_BUSY, &mac_p->miiaddr);
+
+       do {
+               if (!(readl(&mac_p->miiaddr) & MII_BUSY)) {
+                       *val = readl(&mac_p->miidata);
+                       return 0;
+               }
+               udelay(1000);
+       } while (timeout--);
+
+       return -1;
+}
+
+static int eth_mdio_write(struct eth_device *dev, u8 addr, u8 reg, u16 val)
+{
+       struct dw_eth_dev *priv = dev->priv;
+       struct eth_mac_regs *mac_p = priv->mac_regs_p;
+       u32 miiaddr;
+       int ret = -1, timeout = CONFIG_MDIO_TIMEOUT;
+       u16 value;
+
+       writel(val, &mac_p->miidata);
+       miiaddr = ((addr << MIIADDRSHIFT) & MII_ADDRMSK) | \
+                 ((reg << MIIREGSHIFT) & MII_REGMSK) | MII_WRITE;
+
+       writel(miiaddr | MII_CLKRANGE_150_250M | MII_BUSY, &mac_p->miiaddr);
+
+       do {
+               if (!(readl(&mac_p->miiaddr) & MII_BUSY))
+                       ret = 0;
+               udelay(1000);
+       } while (timeout--);
+
+       /* Needed as a fix for ST-Phy */
+       eth_mdio_read(dev, addr, reg, &value);
+
+       return ret;
+}
+
+#if defined(CONFIG_DW_SEARCH_PHY)
+static int find_phy(struct eth_device *dev)
+{
+       int phy_addr = 0;
+       u16 ctrl, oldctrl;
+
+       do {
+               eth_mdio_read(dev, phy_addr, PHY_BMCR, &ctrl);
+               oldctrl = ctrl & PHY_BMCR_AUTON;
+
+               ctrl ^= PHY_BMCR_AUTON;
+               eth_mdio_write(dev, phy_addr, PHY_BMCR, ctrl);
+               eth_mdio_read(dev, phy_addr, PHY_BMCR, &ctrl);
+               ctrl &= PHY_BMCR_AUTON;
+
+               if (ctrl == oldctrl) {
+                       phy_addr++;
+               } else {
+                       ctrl ^= PHY_BMCR_AUTON;
+                       eth_mdio_write(dev, phy_addr, PHY_BMCR, ctrl);
+
+                       return phy_addr;
+               }
+       } while (phy_addr < 32);
+
+       return -1;
+}
+#endif
+
+static int dw_reset_phy(struct eth_device *dev)
+{
+       struct dw_eth_dev *priv = dev->priv;
+       u16 ctrl;
+       int timeout = CONFIG_PHYRESET_TIMEOUT;
+       u32 phy_addr = priv->address;
+
+       eth_mdio_write(dev, phy_addr, PHY_BMCR, PHY_BMCR_RESET);
+       do {
+               eth_mdio_read(dev, phy_addr, PHY_BMCR, &ctrl);
+               if (!(ctrl & PHY_BMCR_RESET))
+                       break;
+               udelay(1000);
+       } while (timeout--);
+
+       if (timeout < 0)
+               return -1;
+
+#ifdef CONFIG_PHY_RESET_DELAY
+       udelay(CONFIG_PHY_RESET_DELAY);
+#endif
+       return 0;
+}
+
+static int configure_phy(struct eth_device *dev)
+{
+       struct dw_eth_dev *priv = dev->priv;
+       int phy_addr;
+       u16 bmcr, ctrl;
+#if defined(CONFIG_DW_AUTONEG)
+       u16 bmsr;
+       u32 timeout;
+       u16 anlpar, btsr;
+#endif
+
+#if defined(CONFIG_DW_SEARCH_PHY)
+       phy_addr = find_phy(dev);
+       if (phy_addr > 0)
+               priv->address = phy_addr;
+       else
+               return -1;
+#endif
+       if (dw_reset_phy(dev) < 0)
+               return -1;
+
+#if defined(CONFIG_DW_AUTONEG)
+       bmcr = PHY_BMCR_AUTON | PHY_BMCR_RST_NEG | PHY_BMCR_100MB | \
+              PHY_BMCR_DPLX | PHY_BMCR_1000_MBPS;
+#else
+       bmcr = PHY_BMCR_100MB | PHY_BMCR_DPLX;
+
+#if defined(CONFIG_DW_SPEED10M)
+       bmcr &= ~PHY_BMCR_100MB;
+#endif
+#if defined(CONFIG_DW_DUPLEXHALF)
+       bmcr &= ~PHY_BMCR_DPLX;
+#endif
+#endif
+       if (eth_mdio_write(dev, phy_addr, PHY_BMCR, bmcr) < 0)
+               return -1;
+
+       /* Read the phy status register and populate priv structure */
+#if defined(CONFIG_DW_AUTONEG)
+       timeout = CONFIG_AUTONEG_TIMEOUT;
+       do {
+               eth_mdio_read(dev, phy_addr, PHY_BMSR, &bmsr);
+               if (bmsr & PHY_BMSR_AUTN_COMP)
+                       break;
+               udelay(1000);
+       } while (timeout--);
+
+       eth_mdio_read(dev, phy_addr, PHY_ANLPAR, &anlpar);
+       eth_mdio_read(dev, phy_addr, PHY_1000BTSR, &btsr);
+
+       if (btsr & (PHY_1000BTSR_1000FD | PHY_1000BTSR_1000HD)) {
+               priv->speed = SPEED_1000M;
+               if (btsr & PHY_1000BTSR_1000FD)
+                       priv->duplex = FULL_DUPLEX;
+               else
+                       priv->duplex = HALF_DUPLEX;
+       } else {
+               if (anlpar & PHY_ANLPAR_100)
+                       priv->speed = SPEED_100M;
+               else
+                       priv->speed = SPEED_10M;
+
+               if (anlpar & (PHY_ANLPAR_10FD | PHY_ANLPAR_TXFD))
+                       priv->duplex = FULL_DUPLEX;
+               else
+                       priv->duplex = HALF_DUPLEX;
+       }
+#else
+       if (eth_mdio_read(dev, phy_addr, PHY_BMCR, &ctrl) < 0)
+               return -1;
+
+       if (ctrl & PHY_BMCR_DPLX)
+               priv->duplex = FULL_DUPLEX;
+       else
+               priv->duplex = HALF_DUPLEX;
+
+       if (ctrl & PHY_BMCR_1000_MBPS)
+               priv->speed = SPEED_1000M;
+       else if (ctrl & PHY_BMCR_100_MBPS)
+               priv->speed = SPEED_100M;
+       else
+               priv->speed = SPEED_10M;
+#endif
+       return 0;
+}
+
+#if defined(CONFIG_MII)
+static int dw_mii_read(char *devname, u8 addr, u8 reg, u16 *val)
+{
+       struct eth_device *dev;
+
+       dev = eth_get_dev_by_name(devname);
+       if (dev)
+               eth_mdio_read(dev, addr, reg, val);
+
+       return 0;
+}
+
+static int dw_mii_write(char *devname, u8 addr, u8 reg, u16 val)
+{
+       struct eth_device *dev;
+
+       dev = eth_get_dev_by_name(devname);
+       if (dev)
+               eth_mdio_write(dev, addr, reg, val);
+
+       return 0;
+}
+#endif
+
+int designware_initialize(u32 id, ulong base_addr, u32 phy_addr)
+{
+       struct eth_device *dev;
+       struct dw_eth_dev *priv;
+
+       dev = (struct eth_device *) malloc(sizeof(struct eth_device));
+       if (!dev)
+               return -ENOMEM;
+
+       /*
+        * Since the priv structure contains the descriptors which need a strict
+        * buswidth alignment, memalign is used to allocate memory
+        */
+       priv = (struct dw_eth_dev *) memalign(16, sizeof(struct dw_eth_dev));
+       if (!priv) {
+               free(dev);
+               return -ENOMEM;
+       }
+
+       memset(dev, 0, sizeof(struct eth_device));
+       memset(priv, 0, sizeof(struct dw_eth_dev));
+
+       sprintf(dev->name, "mii%d", id);
+       dev->iobase = (int)base_addr;
+       dev->priv = priv;
+
+       eth_getenv_enetaddr_by_index(id, &dev->enetaddr[0]);
+
+       priv->dev = dev;
+       priv->mac_regs_p = (struct eth_mac_regs *)base_addr;
+       priv->dma_regs_p = (struct eth_dma_regs *)(base_addr +
+                       DW_DMA_BASE_OFFSET);
+       priv->address = phy_addr;
+
+       if (mac_reset(dev) < 0)
+               return -1;
+
+       if (configure_phy(dev) < 0) {
+               printf("Phy could not be configured\n");
+               return -1;
+       }
+
+       dev->init = dw_eth_init;
+       dev->send = dw_eth_send;
+       dev->recv = dw_eth_recv;
+       dev->halt = dw_eth_halt;
+       dev->write_hwaddr = dw_write_hwaddr;
+
+       eth_register(dev);
+
+#if defined(CONFIG_MII)
+       miiphy_register(dev->name, dw_mii_read, dw_mii_write);
+#endif
+       return 1;
+}
diff --git a/drivers/net/designware.h b/drivers/net/designware.h
new file mode 100644 (file)
index 0000000..e5828a6
--- /dev/null
@@ -0,0 +1,264 @@
+/*
+ * (C) Copyright 2010
+ * Vipin Kumar, ST Micoelectronics, vipin.kumar@st.com.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _DW_ETH_H
+#define _DW_ETH_H
+
+#define CONFIG_TX_DESCR_NUM    16
+#define CONFIG_RX_DESCR_NUM    16
+#define CONFIG_ETH_BUFSIZE     2048
+#define TX_TOTAL_BUFSIZE       (CONFIG_ETH_BUFSIZE * CONFIG_TX_DESCR_NUM)
+#define RX_TOTAL_BUFSIZE       (CONFIG_ETH_BUFSIZE * CONFIG_RX_DESCR_NUM)
+
+#define CONFIG_MACRESET_TIMEOUT        (3 * CONFIG_SYS_HZ)
+#define CONFIG_MDIO_TIMEOUT    (3 * CONFIG_SYS_HZ)
+#define CONFIG_PHYRESET_TIMEOUT        (3 * CONFIG_SYS_HZ)
+#define CONFIG_AUTONEG_TIMEOUT (5 * CONFIG_SYS_HZ)
+
+struct eth_mac_regs {
+       u32 conf;               /* 0x00 */
+       u32 framefilt;          /* 0x04 */
+       u32 hashtablehigh;      /* 0x08 */
+       u32 hashtablelow;       /* 0x0c */
+       u32 miiaddr;            /* 0x10 */
+       u32 miidata;            /* 0x14 */
+       u32 flowcontrol;        /* 0x18 */
+       u32 vlantag;            /* 0x1c */
+       u32 version;            /* 0x20 */
+       u8 reserved_1[20];
+       u32 intreg;             /* 0x38 */
+       u32 intmask;            /* 0x3c */
+       u32 macaddr0hi;         /* 0x40 */
+       u32 macaddr0lo;         /* 0x44 */
+};
+
+/* MAC configuration register definitions */
+#define FRAMEBURSTENABLE       (1 << 21)
+#define MII_PORTSELECT         (1 << 15)
+#define FES_100                        (1 << 14)
+#define DISABLERXOWN           (1 << 13)
+#define FULLDPLXMODE           (1 << 11)
+#define RXENABLE               (1 << 2)
+#define TXENABLE               (1 << 3)
+
+/* MII address register definitions */
+#define MII_BUSY               (1 << 0)
+#define MII_WRITE              (1 << 1)
+#define MII_CLKRANGE_60_100M   (0)
+#define MII_CLKRANGE_100_150M  (0x4)
+#define MII_CLKRANGE_20_35M    (0x8)
+#define MII_CLKRANGE_35_60M    (0xC)
+#define MII_CLKRANGE_150_250M  (0x10)
+#define MII_CLKRANGE_250_300M  (0x14)
+
+#define MIIADDRSHIFT           (11)
+#define MIIREGSHIFT            (6)
+#define MII_REGMSK             (0x1F << 6)
+#define MII_ADDRMSK            (0x1F << 11)
+
+
+struct eth_dma_regs {
+       u32 busmode;            /* 0x00 */
+       u32 txpolldemand;       /* 0x04 */
+       u32 rxpolldemand;       /* 0x08 */
+       u32 rxdesclistaddr;     /* 0x0c */
+       u32 txdesclistaddr;     /* 0x10 */
+       u32 status;             /* 0x14 */
+       u32 opmode;             /* 0x18 */
+       u32 intenable;          /* 0x1c */
+       u8 reserved[40];
+       u32 currhosttxdesc;     /* 0x48 */
+       u32 currhostrxdesc;     /* 0x4c */
+       u32 currhosttxbuffaddr; /* 0x50 */
+       u32 currhostrxbuffaddr; /* 0x54 */
+};
+
+#define DW_DMA_BASE_OFFSET     (0x1000)
+
+/* Bus mode register definitions */
+#define FIXEDBURST             (1 << 16)
+#define PRIORXTX_41            (3 << 14)
+#define PRIORXTX_31            (2 << 14)
+#define PRIORXTX_21            (1 << 14)
+#define PRIORXTX_11            (0 << 14)
+#define BURST_1                        (1 << 8)
+#define BURST_2                        (2 << 8)
+#define BURST_4                        (4 << 8)
+#define BURST_8                        (8 << 8)
+#define BURST_16               (16 << 8)
+#define BURST_32               (32 << 8)
+#define RXHIGHPRIO             (1 << 1)
+#define DMAMAC_SRST            (1 << 0)
+
+/* Poll demand definitions */
+#define POLL_DATA              (0xFFFFFFFF)
+
+/* Operation mode definitions */
+#define STOREFORWARD           (1 << 21)
+#define FLUSHTXFIFO            (1 << 20)
+#define TXSTART                        (1 << 13)
+#define TXSECONDFRAME          (1 << 2)
+#define RXSTART                        (1 << 1)
+
+/* Descriptior related definitions */
+#define MAC_MAX_FRAME_SZ       (2048)
+
+struct dmamacdescr {
+       u32 txrx_status;
+       u32 dmamac_cntl;
+       void *dmamac_addr;
+       struct dmamacdescr *dmamac_next;
+};
+
+/*
+ * txrx_status definitions
+ */
+
+/* tx status bits definitions */
+#if defined(CONFIG_DW_ALTDESCRIPTOR)
+
+#define DESC_TXSTS_OWNBYDMA            (1 << 31)
+#define DESC_TXSTS_TXINT               (1 << 30)
+#define DESC_TXSTS_TXLAST              (1 << 29)
+#define DESC_TXSTS_TXFIRST             (1 << 28)
+#define DESC_TXSTS_TXCRCDIS            (1 << 27)
+
+#define DESC_TXSTS_TXPADDIS            (1 << 26)
+#define DESC_TXSTS_TXCHECKINSCTRL      (3 << 22)
+#define DESC_TXSTS_TXRINGEND           (1 << 21)
+#define DESC_TXSTS_TXCHAIN             (1 << 20)
+#define DESC_TXSTS_MSK                 (0x1FFFF << 0)
+
+#else
+
+#define DESC_TXSTS_OWNBYDMA            (1 << 31)
+#define DESC_TXSTS_MSK                 (0x1FFFF << 0)
+
+#endif
+
+/* rx status bits definitions */
+#define DESC_RXSTS_OWNBYDMA            (1 << 31)
+#define DESC_RXSTS_DAFILTERFAIL                (1 << 30)
+#define DESC_RXSTS_FRMLENMSK           (0x3FFF << 16)
+#define DESC_RXSTS_FRMLENSHFT          (16)
+
+#define DESC_RXSTS_ERROR               (1 << 15)
+#define DESC_RXSTS_RXTRUNCATED         (1 << 14)
+#define DESC_RXSTS_SAFILTERFAIL                (1 << 13)
+#define DESC_RXSTS_RXIPC_GIANTFRAME    (1 << 12)
+#define DESC_RXSTS_RXDAMAGED           (1 << 11)
+#define DESC_RXSTS_RXVLANTAG           (1 << 10)
+#define DESC_RXSTS_RXFIRST             (1 << 9)
+#define DESC_RXSTS_RXLAST              (1 << 8)
+#define DESC_RXSTS_RXIPC_GIANT         (1 << 7)
+#define DESC_RXSTS_RXCOLLISION         (1 << 6)
+#define DESC_RXSTS_RXFRAMEETHER                (1 << 5)
+#define DESC_RXSTS_RXWATCHDOG          (1 << 4)
+#define DESC_RXSTS_RXMIIERROR          (1 << 3)
+#define DESC_RXSTS_RXDRIBBLING         (1 << 2)
+#define DESC_RXSTS_RXCRC               (1 << 1)
+
+/*
+ * dmamac_cntl definitions
+ */
+
+/* tx control bits definitions */
+#if defined(CONFIG_DW_ALTDESCRIPTOR)
+
+#define DESC_TXCTRL_SIZE1MASK          (0x1FFF << 0)
+#define DESC_TXCTRL_SIZE1SHFT          (0)
+#define DESC_TXCTRL_SIZE2MASK          (0x1FFF << 16)
+#define DESC_TXCTRL_SIZE2SHFT          (16)
+
+#else
+
+#define DESC_TXCTRL_TXINT              (1 << 31)
+#define DESC_TXCTRL_TXLAST             (1 << 30)
+#define DESC_TXCTRL_TXFIRST            (1 << 29)
+#define DESC_TXCTRL_TXCHECKINSCTRL     (3 << 27)
+#define DESC_TXCTRL_TXCRCDIS           (1 << 26)
+#define DESC_TXCTRL_TXRINGEND          (1 << 25)
+#define DESC_TXCTRL_TXCHAIN            (1 << 24)
+
+#define DESC_TXCTRL_SIZE1MASK          (0x7FF << 0)
+#define DESC_TXCTRL_SIZE1SHFT          (0)
+#define DESC_TXCTRL_SIZE2MASK          (0x7FF << 11)
+#define DESC_TXCTRL_SIZE2SHFT          (11)
+
+#endif
+
+/* rx control bits definitions */
+#if defined(CONFIG_DW_ALTDESCRIPTOR)
+
+#define DESC_RXCTRL_RXINTDIS           (1 << 31)
+#define DESC_RXCTRL_RXRINGEND          (1 << 15)
+#define DESC_RXCTRL_RXCHAIN            (1 << 14)
+
+#define DESC_RXCTRL_SIZE1MASK          (0x1FFF << 0)
+#define DESC_RXCTRL_SIZE1SHFT          (0)
+#define DESC_RXCTRL_SIZE2MASK          (0x1FFF << 16)
+#define DESC_RXCTRL_SIZE2SHFT          (16)
+
+#else
+
+#define DESC_RXCTRL_RXINTDIS           (1 << 31)
+#define DESC_RXCTRL_RXRINGEND          (1 << 25)
+#define DESC_RXCTRL_RXCHAIN            (1 << 24)
+
+#define DESC_RXCTRL_SIZE1MASK          (0x7FF << 0)
+#define DESC_RXCTRL_SIZE1SHFT          (0)
+#define DESC_RXCTRL_SIZE2MASK          (0x7FF << 11)
+#define DESC_RXCTRL_SIZE2SHFT          (11)
+
+#endif
+
+struct dw_eth_dev {
+       u32 address;
+       u32 speed;
+       u32 duplex;
+       u32 tx_currdescnum;
+       u32 rx_currdescnum;
+       u32 padding;
+
+       struct dmamacdescr tx_mac_descrtable[CONFIG_TX_DESCR_NUM];
+       struct dmamacdescr rx_mac_descrtable[CONFIG_RX_DESCR_NUM];
+
+       char txbuffs[TX_TOTAL_BUFSIZE];
+       char rxbuffs[RX_TOTAL_BUFSIZE];
+
+       struct eth_mac_regs *mac_regs_p;
+       struct eth_dma_regs *dma_regs_p;
+
+       struct eth_device *dev;
+} __attribute__ ((aligned(8)));
+
+/* Speed specific definitions */
+#define SPEED_10M              1
+#define SPEED_100M             2
+#define SPEED_1000M            3
+
+/* Duplex mode specific definitions */
+#define HALF_DUPLEX            1
+#define FULL_DUPLEX            2
+
+#endif
index 137e41fef50201009eda4af952d542697f401691..709f67aac2c0fa51a01473b958864a33ad3a5984 100644 (file)
@@ -117,12 +117,12 @@ static void DM9000_iow(int reg, u8 value);
 
 /* DM9000 network board routine ---------------------------- */
 
-#define DM9000_outb(d,r) writeb(d, r)
-#define DM9000_outw(d,r) writew(d, r)
-#define DM9000_outl(d,r) writel(d, r)
-#define DM9000_inb(r) readb(r)
-#define DM9000_inw(r) readw(r)
-#define DM9000_inl(r) readl(r)
+#define DM9000_outb(d,r) writeb(d, (volatile u8 *)(r))
+#define DM9000_outw(d,r) writew(d, (volatile u16 *)(r))
+#define DM9000_outl(d,r) writel(d, (volatile u32 *)(r))
+#define DM9000_inb(r) readb((volatile u8 *)(r))
+#define DM9000_inw(r) readw((volatile u16 *)(r))
+#define DM9000_inl(r) readl((volatile u32 *)(r))
 
 #ifdef CONFIG_DM9000_DEBUG
 static void
diff --git a/drivers/net/kirkwood_egiga.c b/drivers/net/kirkwood_egiga.c
deleted file mode 100644 (file)
index 932792e..0000000
+++ /dev/null
@@ -1,719 +0,0 @@
-/*
- * (C) Copyright 2009
- * Marvell Semiconductor <www.marvell.com>
- * Written-by: Prafulla Wadaskar <prafulla@marvell.com>
- *
- * (C) Copyright 2003
- * Ingo Assmus <ingo.assmus@keymile.com>
- *
- * based on - Driver for MV64360X ethernet ports
- * Copyright (C) 2002 rabeeh@galileo.co.il
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#include <common.h>
-#include <net.h>
-#include <malloc.h>
-#include <miiphy.h>
-#include <asm/errno.h>
-#include <asm/types.h>
-#include <asm/byteorder.h>
-#include <asm/arch/kirkwood.h>
-#include "kirkwood_egiga.h"
-
-#define KIRKWOOD_PHY_ADR_REQUEST 0xee
-#define KWGBE_SMI_REG (((struct kwgbe_registers *)KW_EGIGA0_BASE)->smi)
-
-/*
- * smi_reg_read - miiphy_read callback function.
- *
- * Returns 16bit phy register value, or 0xffff on error
- */
-static int smi_reg_read(char *devname, u8 phy_adr, u8 reg_ofs, u16 * data)
-{
-       struct eth_device *dev = eth_get_dev_by_name(devname);
-       struct kwgbe_device *dkwgbe = to_dkwgbe(dev);
-       struct kwgbe_registers *regs = dkwgbe->regs;
-       u32 smi_reg;
-       u32 timeout;
-
-       /* Phyadr read request */
-       if (phy_adr == KIRKWOOD_PHY_ADR_REQUEST &&
-                       reg_ofs == KIRKWOOD_PHY_ADR_REQUEST) {
-               /* */
-               *data = (u16) (KWGBEREG_RD(regs->phyadr) & PHYADR_MASK);
-               return 0;
-       }
-       /* check parameters */
-       if (phy_adr > PHYADR_MASK) {
-               printf("Err..(%s) Invalid PHY address %d\n",
-                       __FUNCTION__, phy_adr);
-               return -EFAULT;
-       }
-       if (reg_ofs > PHYREG_MASK) {
-               printf("Err..(%s) Invalid register offset %d\n",
-                       __FUNCTION__, reg_ofs);
-               return -EFAULT;
-       }
-
-       timeout = KWGBE_PHY_SMI_TIMEOUT;
-       /* wait till the SMI is not busy */
-       do {
-               /* read smi register */
-               smi_reg = KWGBEREG_RD(KWGBE_SMI_REG);
-               if (timeout-- == 0) {
-                       printf("Err..(%s) SMI busy timeout\n", __FUNCTION__);
-                       return -EFAULT;
-               }
-       } while (smi_reg & KWGBE_PHY_SMI_BUSY_MASK);
-
-       /* fill the phy address and regiser offset and read opcode */
-       smi_reg = (phy_adr << KWGBE_PHY_SMI_DEV_ADDR_OFFS)
-               | (reg_ofs << KWGBE_SMI_REG_ADDR_OFFS)
-               | KWGBE_PHY_SMI_OPCODE_READ;
-
-       /* write the smi register */
-       KWGBEREG_WR(KWGBE_SMI_REG, smi_reg);
-
-       /*wait till read value is ready */
-       timeout = KWGBE_PHY_SMI_TIMEOUT;
-
-       do {
-               /* read smi register */
-               smi_reg = KWGBEREG_RD(KWGBE_SMI_REG);
-               if (timeout-- == 0) {
-                       printf("Err..(%s) SMI read ready timeout\n",
-                               __FUNCTION__);
-                       return -EFAULT;
-               }
-       } while (!(smi_reg & KWGBE_PHY_SMI_READ_VALID_MASK));
-
-       /* Wait for the data to update in the SMI register */
-       for (timeout = 0; timeout < KWGBE_PHY_SMI_TIMEOUT; timeout++) ;
-
-       *data = (u16) (KWGBEREG_RD(KWGBE_SMI_REG) & KWGBE_PHY_SMI_DATA_MASK);
-
-       debug("%s:(adr %d, off %d) value= %04x\n", __FUNCTION__, phy_adr,
-               reg_ofs, *data);
-
-       return 0;
-}
-
-/*
- * smi_reg_write - imiiphy_write callback function.
- *
- * Returns 0 if write succeed, -EINVAL on bad parameters
- * -ETIME on timeout
- */
-static int smi_reg_write(char *devname, u8 phy_adr, u8 reg_ofs, u16 data)
-{
-       struct eth_device *dev = eth_get_dev_by_name(devname);
-       struct kwgbe_device *dkwgbe = to_dkwgbe(dev);
-       struct kwgbe_registers *regs = dkwgbe->regs;
-       u32 smi_reg;
-       u32 timeout;
-
-       /* Phyadr write request*/
-       if (phy_adr == KIRKWOOD_PHY_ADR_REQUEST &&
-                       reg_ofs == KIRKWOOD_PHY_ADR_REQUEST) {
-               KWGBEREG_WR(regs->phyadr, data);
-               return 0;
-       }
-
-       /* check parameters */
-       if (phy_adr > PHYADR_MASK) {
-               printf("Err..(%s) Invalid phy address\n", __FUNCTION__);
-               return -EINVAL;
-       }
-       if (reg_ofs > PHYREG_MASK) {
-               printf("Err..(%s) Invalid register offset\n", __FUNCTION__);
-               return -EINVAL;
-       }
-
-       /* wait till the SMI is not busy */
-       timeout = KWGBE_PHY_SMI_TIMEOUT;
-       do {
-               /* read smi register */
-               smi_reg = KWGBEREG_RD(KWGBE_SMI_REG);
-               if (timeout-- == 0) {
-                       printf("Err..(%s) SMI busy timeout\n", __FUNCTION__);
-                       return -ETIME;
-               }
-       } while (smi_reg & KWGBE_PHY_SMI_BUSY_MASK);
-
-       /* fill the phy addr and reg offset and write opcode and data */
-       smi_reg = (data << KWGBE_PHY_SMI_DATA_OFFS);
-       smi_reg |= (phy_adr << KWGBE_PHY_SMI_DEV_ADDR_OFFS)
-               | (reg_ofs << KWGBE_SMI_REG_ADDR_OFFS);
-       smi_reg &= ~KWGBE_PHY_SMI_OPCODE_READ;
-
-       /* write the smi register */
-       KWGBEREG_WR(KWGBE_SMI_REG, smi_reg);
-
-       return 0;
-}
-
-/* Stop and checks all queues */
-static void stop_queue(u32 * qreg)
-{
-       u32 reg_data;
-
-       reg_data = readl(qreg);
-
-       if (reg_data & 0xFF) {
-               /* Issue stop command for active channels only */
-               writel((reg_data << 8), qreg);
-
-               /* Wait for all queue activity to terminate. */
-               do {
-                       /*
-                        * Check port cause register that all queues
-                        * are stopped
-                        */
-                       reg_data = readl(qreg);
-               }
-               while (reg_data & 0xFF);
-       }
-}
-
-/*
- * set_access_control - Config address decode parameters for Ethernet unit
- *
- * This function configures the address decode parameters for the Gigabit
- * Ethernet Controller according the given parameters struct.
- *
- * @regs       Register struct pointer.
- * @param      Address decode parameter struct.
- */
-static void set_access_control(struct kwgbe_registers *regs,
-                               struct kwgbe_winparam *param)
-{
-       u32 access_prot_reg;
-
-       /* Set access control register */
-       access_prot_reg = KWGBEREG_RD(regs->epap);
-       /* clear window permission */
-       access_prot_reg &= (~(3 << (param->win * 2)));
-       access_prot_reg |= (param->access_ctrl << (param->win * 2));
-       KWGBEREG_WR(regs->epap, access_prot_reg);
-
-       /* Set window Size reg (SR) */
-       KWGBEREG_WR(regs->barsz[param->win].size,
-                       (((param->size / 0x10000) - 1) << 16));
-
-       /* Set window Base address reg (BA) */
-       KWGBEREG_WR(regs->barsz[param->win].bar,
-                       (param->target | param->attrib | param->base_addr));
-       /* High address remap reg (HARR) */
-       if (param->win < 4)
-               KWGBEREG_WR(regs->ha_remap[param->win], param->high_addr);
-
-       /* Base address enable reg (BARER) */
-       if (param->enable == 1)
-               KWGBEREG_BITS_RESET(regs->bare, (1 << param->win));
-       else
-               KWGBEREG_BITS_SET(regs->bare, (1 << param->win));
-}
-
-static void set_dram_access(struct kwgbe_registers *regs)
-{
-       struct kwgbe_winparam win_param;
-       int i;
-
-       for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
-               /* Set access parameters for DRAM bank i */
-               win_param.win = i;      /* Use Ethernet window i */
-               /* Window target - DDR */
-               win_param.target = KWGBE_TARGET_DRAM;
-               /* Enable full access */
-               win_param.access_ctrl = EWIN_ACCESS_FULL;
-               win_param.high_addr = 0;
-               /* Get bank base */
-               win_param.base_addr = kw_sdram_bar(i);
-               win_param.size = kw_sdram_bs(i);        /* Get bank size */
-               if (win_param.size == 0)
-                       win_param.enable = 0;
-               else
-                       win_param.enable = 1;   /* Enable the access */
-
-               /* Enable DRAM bank */
-               switch (i) {
-               case 0:
-                       win_param.attrib = EBAR_DRAM_CS0;
-                       break;
-               case 1:
-                       win_param.attrib = EBAR_DRAM_CS1;
-                       break;
-               case 2:
-                       win_param.attrib = EBAR_DRAM_CS2;
-                       break;
-               case 3:
-                       win_param.attrib = EBAR_DRAM_CS3;
-                       break;
-               default:
-                       /* invalide bank, disable access */
-                       win_param.enable = 0;
-                       win_param.attrib = 0;
-                       break;
-               }
-               /* Set the access control for address window(EPAPR) RD/WR */
-               set_access_control(regs, &win_param);
-       }
-}
-
-/*
- * port_init_mac_tables - Clear all entrance in the UC, SMC and OMC tables
- *
- * Go through all the DA filter tables (Unicast, Special Multicast & Other
- * Multicast) and set each entry to 0.
- */
-static void port_init_mac_tables(struct kwgbe_registers *regs)
-{
-       int table_index;
-
-       /* Clear DA filter unicast table (Ex_dFUT) */
-       for (table_index = 0; table_index < 4; ++table_index)
-               KWGBEREG_WR(regs->dfut[table_index], 0);
-
-       for (table_index = 0; table_index < 64; ++table_index) {
-               /* Clear DA filter special multicast table (Ex_dFSMT) */
-               KWGBEREG_WR(regs->dfsmt[table_index], 0);
-               /* Clear DA filter other multicast table (Ex_dFOMT) */
-               KWGBEREG_WR(regs->dfomt[table_index], 0);
-       }
-}
-
-/*
- * port_uc_addr - This function Set the port unicast address table
- *
- * This function locates the proper entry in the Unicast table for the
- * specified MAC nibble and sets its properties according to function
- * parameters.
- * This function add/removes MAC addresses from the port unicast address
- * table.
- *
- * @uc_nibble  Unicast MAC Address last nibble.
- * @option      0 = Add, 1 = remove address.
- *
- * RETURN: 1 if output succeeded. 0 if option parameter is invalid.
- */
-static int port_uc_addr(struct kwgbe_registers *regs, u8 uc_nibble,
-                       int option)
-{
-       u32 unicast_reg;
-       u32 tbl_offset;
-       u32 reg_offset;
-
-       /* Locate the Unicast table entry */
-       uc_nibble = (0xf & uc_nibble);
-       /* Register offset from unicast table base */
-       tbl_offset = (uc_nibble / 4);
-       /* Entry offset within the above register */
-       reg_offset = uc_nibble % 4;
-
-       switch (option) {
-       case REJECT_MAC_ADDR:
-               /*
-                * Clear accepts frame bit at specified unicast
-                * DA table entry
-                */
-               unicast_reg = KWGBEREG_RD(regs->dfut[tbl_offset]);
-               unicast_reg &= (0xFF << (8 * reg_offset));
-               KWGBEREG_WR(regs->dfut[tbl_offset], unicast_reg);
-               break;
-       case ACCEPT_MAC_ADDR:
-               /* Set accepts frame bit at unicast DA filter table entry */
-               unicast_reg = KWGBEREG_RD(regs->dfut[tbl_offset]);
-               unicast_reg &= (0xFF << (8 * reg_offset));
-               unicast_reg |= ((0x01 | (RXUQ << 1)) << (8 * reg_offset));
-               KWGBEREG_WR(regs->dfut[tbl_offset], unicast_reg);
-               break;
-       default:
-               return 0;
-       }
-       return 1;
-}
-
-/*
- * port_uc_addr_set - This function Set the port Unicast address.
- */
-static void port_uc_addr_set(struct kwgbe_registers *regs, u8 * p_addr)
-{
-       u32 mac_h;
-       u32 mac_l;
-
-       mac_l = (p_addr[4] << 8) | (p_addr[5]);
-       mac_h = (p_addr[0] << 24) | (p_addr[1] << 16) | (p_addr[2] << 8) |
-               (p_addr[3] << 0);
-
-       KWGBEREG_WR(regs->macal, mac_l);
-       KWGBEREG_WR(regs->macah, mac_h);
-
-       /* Accept frames of this address */
-       port_uc_addr(regs, p_addr[5], ACCEPT_MAC_ADDR);
-}
-
-/*
- * kwgbe_init_rx_desc_ring - Curve a Rx chain desc list and buffer in memory.
- */
-static void kwgbe_init_rx_desc_ring(struct kwgbe_device *dkwgbe)
-{
-       struct kwgbe_rxdesc *p_rx_desc;
-       int i;
-
-       /* initialize the Rx descriptors ring */
-       p_rx_desc = dkwgbe->p_rxdesc;
-       for (i = 0; i < RINGSZ; i++) {
-               p_rx_desc->cmd_sts =
-                       KWGBE_BUFFER_OWNED_BY_DMA | KWGBE_RX_EN_INTERRUPT;
-               p_rx_desc->buf_size = PKTSIZE_ALIGN;
-               p_rx_desc->byte_cnt = 0;
-               p_rx_desc->buf_ptr = dkwgbe->p_rxbuf + i * PKTSIZE_ALIGN;
-               if (i == (RINGSZ - 1))
-                       p_rx_desc->nxtdesc_p = dkwgbe->p_rxdesc;
-               else {
-                       p_rx_desc->nxtdesc_p = (struct kwgbe_rxdesc *)
-                               ((u32) p_rx_desc + KW_RXQ_DESC_ALIGNED_SIZE);
-                       p_rx_desc = p_rx_desc->nxtdesc_p;
-               }
-       }
-       dkwgbe->p_rxdesc_curr = dkwgbe->p_rxdesc;
-}
-
-static int kwgbe_init(struct eth_device *dev)
-{
-       struct kwgbe_device *dkwgbe = to_dkwgbe(dev);
-       struct kwgbe_registers *regs = dkwgbe->regs;
-#if (defined (CONFIG_MII) || defined (CONFIG_CMD_MII)) \
-        && defined (CONFIG_SYS_FAULT_ECHO_LINK_DOWN)
-       int i;
-#endif
-       /* setup RX rings */
-       kwgbe_init_rx_desc_ring(dkwgbe);
-
-       /* Clear the ethernet port interrupts */
-       KWGBEREG_WR(regs->ic, 0);
-       KWGBEREG_WR(regs->ice, 0);
-       /* Unmask RX buffer and TX end interrupt */
-       KWGBEREG_WR(regs->pim, INT_CAUSE_UNMASK_ALL);
-       /* Unmask phy and link status changes interrupts */
-       KWGBEREG_WR(regs->peim, INT_CAUSE_UNMASK_ALL_EXT);
-
-       set_dram_access(regs);
-       port_init_mac_tables(regs);
-       port_uc_addr_set(regs, dkwgbe->dev.enetaddr);
-
-       /* Assign port configuration and command. */
-       KWGBEREG_WR(regs->pxc, PRT_CFG_VAL);
-       KWGBEREG_WR(regs->pxcx, PORT_CFG_EXTEND_VALUE);
-       KWGBEREG_WR(regs->psc0, PORT_SERIAL_CONTROL_VALUE);
-
-       /* Assign port SDMA configuration */
-       KWGBEREG_WR(regs->sdc, PORT_SDMA_CFG_VALUE);
-       KWGBEREG_WR(regs->tqx[0].qxttbc, QTKNBKT_DEF_VAL);
-       KWGBEREG_WR(regs->tqx[0].tqxtbc, (QMTBS_DEF_VAL << 16) | QTKNRT_DEF_VAL);
-       /* Turn off the port/RXUQ bandwidth limitation */
-       KWGBEREG_WR(regs->pmtu, 0);
-
-       /* Set maximum receive buffer to 9700 bytes */
-       KWGBEREG_WR(regs->psc0, KWGBE_MAX_RX_PACKET_9700BYTE
-                       | (KWGBEREG_RD(regs->psc0) & MRU_MASK));
-
-       /* Enable port initially */
-       KWGBEREG_BITS_SET(regs->psc0, KWGBE_SERIAL_PORT_EN);
-
-       /*
-        * Set ethernet MTU for leaky bucket mechanism to 0 - this will
-        * disable the leaky bucket mechanism .
-        */
-       KWGBEREG_WR(regs->pmtu, 0);
-
-       /* Assignment of Rx CRDB of given RXUQ */
-       KWGBEREG_WR(regs->rxcdp[RXUQ], (u32) dkwgbe->p_rxdesc_curr);
-       /* Enable port Rx. */
-       KWGBEREG_WR(regs->rqc, (1 << RXUQ));
-
-#if (defined (CONFIG_MII) || defined (CONFIG_CMD_MII)) \
-        && defined (CONFIG_SYS_FAULT_ECHO_LINK_DOWN)
-       /* Wait up to 5s for the link status */
-       for (i = 0; i < 5; i++) {
-               u16 phyadr;
-
-               miiphy_read(dev->name, KIRKWOOD_PHY_ADR_REQUEST,
-                               KIRKWOOD_PHY_ADR_REQUEST, &phyadr);
-               /* Return if we get link up */
-               if (miiphy_link(dev->name, phyadr))
-                       return 0;
-               udelay(1000000);
-       }
-
-       printf("No link on %s\n", dev->name);
-       return -1;
-#endif
-       return 0;
-}
-
-static int kwgbe_halt(struct eth_device *dev)
-{
-       struct kwgbe_device *dkwgbe = to_dkwgbe(dev);
-       struct kwgbe_registers *regs = dkwgbe->regs;
-
-       /* Disable all gigE address decoder */
-       KWGBEREG_WR(regs->bare, 0x3f);
-
-       stop_queue(&regs->tqc);
-       stop_queue(&regs->rqc);
-
-       /* Disable port */
-       KWGBEREG_BITS_RESET(regs->psc0, KWGBE_SERIAL_PORT_EN);
-       /* Set port is not reset */
-       KWGBEREG_BITS_RESET(regs->psc1, 1 << 4);
-#ifdef CONFIG_SYS_MII_MODE
-       /* Set MMI interface up */
-       KWGBEREG_BITS_RESET(regs->psc1, 1 << 3);
-#endif
-       /* Disable & mask ethernet port interrupts */
-       KWGBEREG_WR(regs->ic, 0);
-       KWGBEREG_WR(regs->ice, 0);
-       KWGBEREG_WR(regs->pim, 0);
-       KWGBEREG_WR(regs->peim, 0);
-
-       return 0;
-}
-
-static int kwgbe_write_hwaddr(struct eth_device *dev)
-{
-       struct kwgbe_device *dkwgbe = to_dkwgbe(dev);
-       struct kwgbe_registers *regs = dkwgbe->regs;
-
-       /* Programs net device MAC address after initialization */
-       port_uc_addr_set(regs, dkwgbe->dev.enetaddr);
-       return 0;
-}
-
-static int kwgbe_send(struct eth_device *dev, volatile void *dataptr,
-                     int datasize)
-{
-       struct kwgbe_device *dkwgbe = to_dkwgbe(dev);
-       struct kwgbe_registers *regs = dkwgbe->regs;
-       struct kwgbe_txdesc *p_txdesc = dkwgbe->p_txdesc;
-       void *p = (void *)dataptr;
-       u32 cmd_sts;
-
-       /* Copy buffer if it's misaligned */
-       if ((u32) dataptr & 0x07) {
-               if (datasize > PKTSIZE_ALIGN) {
-                       printf("Non-aligned data too large (%d)\n",
-                                       datasize);
-                       return -1;
-               }
-
-               memcpy(dkwgbe->p_aligned_txbuf, p, datasize);
-               p = dkwgbe->p_aligned_txbuf;
-       }
-
-       p_txdesc->cmd_sts = KWGBE_ZERO_PADDING | KWGBE_GEN_CRC;
-       p_txdesc->cmd_sts |= KWGBE_TX_FIRST_DESC | KWGBE_TX_LAST_DESC;
-       p_txdesc->cmd_sts |= KWGBE_BUFFER_OWNED_BY_DMA;
-       p_txdesc->cmd_sts |= KWGBE_TX_EN_INTERRUPT;
-       p_txdesc->buf_ptr = (u8 *) p;
-       p_txdesc->byte_cnt = datasize;
-
-       /* Apply send command using zeroth TXUQ */
-       KWGBEREG_WR(regs->tcqdp[TXUQ], (u32) p_txdesc);
-       KWGBEREG_WR(regs->tqc, (1 << TXUQ));
-
-       /*
-        * wait for packet xmit completion
-        */
-       cmd_sts = readl(&p_txdesc->cmd_sts);
-       while (cmd_sts & KWGBE_BUFFER_OWNED_BY_DMA) {
-               /* return fail if error is detected */
-               if ((cmd_sts & (KWGBE_ERROR_SUMMARY | KWGBE_TX_LAST_FRAME)) ==
-                               (KWGBE_ERROR_SUMMARY | KWGBE_TX_LAST_FRAME) &&
-                               cmd_sts & (KWGBE_UR_ERROR | KWGBE_RL_ERROR)) {
-                       printf("Err..(%s) in xmit packet\n", __FUNCTION__);
-                       return -1;
-               }
-               cmd_sts = readl(&p_txdesc->cmd_sts);
-       };
-       return 0;
-}
-
-static int kwgbe_recv(struct eth_device *dev)
-{
-       struct kwgbe_device *dkwgbe = to_dkwgbe(dev);
-       struct kwgbe_rxdesc *p_rxdesc_curr = dkwgbe->p_rxdesc_curr;
-       u32 cmd_sts;
-       u32 timeout = 0;
-
-       /* wait untill rx packet available or timeout */
-       do {
-               if (timeout < KWGBE_PHY_SMI_TIMEOUT)
-                       timeout++;
-               else {
-                       debug("%s time out...\n", __FUNCTION__);
-                       return -1;
-               }
-       } while (readl(&p_rxdesc_curr->cmd_sts) & KWGBE_BUFFER_OWNED_BY_DMA);
-
-       if (p_rxdesc_curr->byte_cnt != 0) {
-               debug("%s: Received %d byte Packet @ 0x%x (cmd_sts= %08x)\n",
-                       __FUNCTION__, (u32) p_rxdesc_curr->byte_cnt,
-                       (u32) p_rxdesc_curr->buf_ptr,
-                       (u32) p_rxdesc_curr->cmd_sts);
-       }
-
-       /*
-        * In case received a packet without first/last bits on
-        * OR the error summary bit is on,
-        * the packets needs to be dropeed.
-        */
-       cmd_sts = readl(&p_rxdesc_curr->cmd_sts);
-
-       if ((cmd_sts &
-               (KWGBE_RX_FIRST_DESC | KWGBE_RX_LAST_DESC))
-               != (KWGBE_RX_FIRST_DESC | KWGBE_RX_LAST_DESC)) {
-
-               printf("Err..(%s) Dropping packet spread on"
-                       " multiple descriptors\n", __FUNCTION__);
-
-       } else if (cmd_sts & KWGBE_ERROR_SUMMARY) {
-
-               printf("Err..(%s) Dropping packet with errors\n",
-                       __FUNCTION__);
-
-       } else {
-               /* !!! call higher layer processing */
-               debug("%s: Sending Received packet to"
-                       " upper layer (NetReceive)\n", __FUNCTION__);
-
-               /* let the upper layer handle the packet */
-               NetReceive((p_rxdesc_curr->buf_ptr + RX_BUF_OFFSET),
-                       (int)(p_rxdesc_curr->byte_cnt - RX_BUF_OFFSET));
-       }
-       /*
-        * free these descriptors and point next in the ring
-        */
-       p_rxdesc_curr->cmd_sts =
-               KWGBE_BUFFER_OWNED_BY_DMA | KWGBE_RX_EN_INTERRUPT;
-       p_rxdesc_curr->buf_size = PKTSIZE_ALIGN;
-       p_rxdesc_curr->byte_cnt = 0;
-
-       writel((unsigned)p_rxdesc_curr->nxtdesc_p, (u32) &dkwgbe->p_rxdesc_curr);
-
-       return 0;
-}
-
-int kirkwood_egiga_initialize(bd_t * bis)
-{
-       struct kwgbe_device *dkwgbe;
-       struct eth_device *dev;
-       int devnum;
-       char *s;
-       u8 used_ports[MAX_KWGBE_DEVS] = CONFIG_KIRKWOOD_EGIGA_PORTS;
-
-       for (devnum = 0; devnum < MAX_KWGBE_DEVS; devnum++) {
-               /*skip if port is configured not to use */
-               if (used_ports[devnum] == 0)
-                       continue;
-
-               if (!(dkwgbe = malloc(sizeof(struct kwgbe_device))))
-                       goto error1;
-
-               memset(dkwgbe, 0, sizeof(struct kwgbe_device));
-
-               if (!(dkwgbe->p_rxdesc =
-                     (struct kwgbe_rxdesc *)memalign(PKTALIGN,
-                                               KW_RXQ_DESC_ALIGNED_SIZE
-                                               * RINGSZ + 1)))
-                       goto error2;
-
-               if (!(dkwgbe->p_rxbuf = (u8 *) memalign(PKTALIGN, RINGSZ
-                                                       * PKTSIZE_ALIGN + 1)))
-                       goto error3;
-
-               if (!(dkwgbe->p_aligned_txbuf = memalign(8, PKTSIZE_ALIGN)))
-                       goto error4;
-
-               if (!(dkwgbe->p_txdesc = (struct kwgbe_txdesc *)
-                     memalign(PKTALIGN, sizeof(struct kwgbe_txdesc) + 1))) {
-                       free(dkwgbe->p_aligned_txbuf);
-                     error4:
-                       free(dkwgbe->p_rxbuf);
-                     error3:
-                       free(dkwgbe->p_rxdesc);
-                     error2:
-                       free(dkwgbe);
-                     error1:
-                       printf("Err.. %s Failed to allocate memory\n",
-                               __FUNCTION__);
-                       return -1;
-               }
-
-               dev = &dkwgbe->dev;
-
-               /* must be less than NAMESIZE (16) */
-               sprintf(dev->name, "egiga%d", devnum);
-
-               /* Extract the MAC address from the environment */
-               switch (devnum) {
-               case 0:
-                       dkwgbe->regs = (void *)KW_EGIGA0_BASE;
-                       s = "ethaddr";
-                       break;
-               case 1:
-                       dkwgbe->regs = (void *)KW_EGIGA1_BASE;
-                       s = "eth1addr";
-                       break;
-               default:        /* this should never happen */
-                       printf("Err..(%s) Invalid device number %d\n",
-                               __FUNCTION__, devnum);
-                       return -1;
-               }
-
-               while (!eth_getenv_enetaddr(s, dev->enetaddr)) {
-                       /* Generate Random Private MAC addr if not set */
-                       dev->enetaddr[0] = 0x02;
-                       dev->enetaddr[1] = 0x50;
-                       dev->enetaddr[2] = 0x43;
-                       dev->enetaddr[3] = get_random_hex();
-                       dev->enetaddr[4] = get_random_hex();
-                       dev->enetaddr[5] = get_random_hex();
-                       eth_setenv_enetaddr(s, dev->enetaddr);
-               }
-
-               dev->init = (void *)kwgbe_init;
-               dev->halt = (void *)kwgbe_halt;
-               dev->send = (void *)kwgbe_send;
-               dev->recv = (void *)kwgbe_recv;
-               dev->write_hwaddr = (void *)kwgbe_write_hwaddr;
-
-               eth_register(dev);
-
-#if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)
-               miiphy_register(dev->name, smi_reg_read, smi_reg_write);
-               /* Set phy address of the port */
-               miiphy_write(dev->name, KIRKWOOD_PHY_ADR_REQUEST,
-                               KIRKWOOD_PHY_ADR_REQUEST, PHY_BASE_ADR + devnum);
-#endif
-       }
-       return 0;
-}
diff --git a/drivers/net/kirkwood_egiga.h b/drivers/net/kirkwood_egiga.h
deleted file mode 100644 (file)
index 30c773c..0000000
+++ /dev/null
@@ -1,505 +0,0 @@
-/*
- * (C) Copyright 2009
- * Marvell Semiconductor <www.marvell.com>
- * Written-by: Prafulla Wadaskar <prafulla@marvell.com>
- *
- * based on - Driver for MV64360X ethernet ports
- * Copyright (C) 2002 rabeeh@galileo.co.il
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301 USA
- */
-
-#ifndef __EGIGA_H__
-#define __EGIGA_H__
-
-#define MAX_KWGBE_DEVS 2       /*controller has two ports */
-
-/* PHY_BASE_ADR is board specific and can be configured */
-#if defined (CONFIG_PHY_BASE_ADR)
-#define PHY_BASE_ADR           CONFIG_PHY_BASE_ADR
-#else
-#define PHY_BASE_ADR           0x08    /* default phy base addr */
-#endif
-
-/* Constants */
-#define INT_CAUSE_UNMASK_ALL           0x0007ffff
-#define INT_CAUSE_UNMASK_ALL_EXT       0x0011ffff
-#define MRU_MASK                       0xfff1ffff
-#define PHYADR_MASK                    0x0000001f
-#define PHYREG_MASK                    0x0000001f
-#define QTKNBKT_DEF_VAL                        0x3fffffff
-#define QMTBS_DEF_VAL                  0x000003ff
-#define QTKNRT_DEF_VAL                 0x0000fcff
-#define RXUQ   0 /* Used Rx queue */
-#define TXUQ   0 /* Used Rx queue */
-
-#define to_dkwgbe(_kd) container_of(_kd, struct kwgbe_device, dev)
-#define KWGBEREG_WR(adr, val)          writel(val, &adr)
-#define KWGBEREG_RD(adr)               readl(&adr)
-#define KWGBEREG_BITS_RESET(adr, val)  writel(readl(&adr) & ~(val), &adr)
-#define KWGBEREG_BITS_SET(adr, val)    writel(readl(&adr) | val, &adr)
-
-/* Default port configuration value */
-#define PRT_CFG_VAL                    ( \
-       KWGBE_UCAST_MOD_NRML            | \
-       KWGBE_DFLT_RXQ(RXUQ)            | \
-       KWGBE_DFLT_RX_ARPQ(RXUQ)        | \
-       KWGBE_RX_BC_IF_NOT_IP_OR_ARP    | \
-       KWGBE_RX_BC_IF_IP               | \
-       KWGBE_RX_BC_IF_ARP              | \
-       KWGBE_CPTR_TCP_FRMS_DIS         | \
-       KWGBE_CPTR_UDP_FRMS_DIS         | \
-       KWGBE_DFLT_RX_TCPQ(RXUQ)        | \
-       KWGBE_DFLT_RX_UDPQ(RXUQ)        | \
-       KWGBE_DFLT_RX_BPDUQ(RXUQ))
-
-/* Default port extend configuration value */
-#define PORT_CFG_EXTEND_VALUE          \
-       KWGBE_SPAN_BPDU_PACKETS_AS_NORMAL       | \
-       KWGBE_PARTITION_DIS             | \
-       KWGBE_TX_CRC_GENERATION_EN
-
-#define GT_KWGBE_IPG_INT_RX(value)     ((value & 0x3fff) << 8)
-
-/* Default sdma control value */
-#define PORT_SDMA_CFG_VALUE            ( \
-       KWGBE_RX_BURST_SIZE_16_64BIT    | \
-       KWGBE_BLM_RX_NO_SWAP            | \
-       KWGBE_BLM_TX_NO_SWAP            | \
-       GT_KWGBE_IPG_INT_RX(RXUQ)       | \
-       KWGBE_TX_BURST_SIZE_16_64BIT)
-
-/* Default port serial control value */
-#define PORT_SERIAL_CONTROL_VALUE              ( \
-       KWGBE_FORCE_LINK_PASS                   | \
-       KWGBE_DIS_AUTO_NEG_FOR_DUPLX            | \
-       KWGBE_DIS_AUTO_NEG_FOR_FLOW_CTRL        | \
-       KWGBE_ADV_NO_FLOW_CTRL                  | \
-       KWGBE_FORCE_FC_MODE_NO_PAUSE_DIS_TX     | \
-       KWGBE_FORCE_BP_MODE_NO_JAM              | \
-       (1 << 9) /* Reserved bit has to be 1 */ | \
-       KWGBE_DO_NOT_FORCE_LINK_FAIL            | \
-       KWGBE_EN_AUTO_NEG_SPEED_GMII            | \
-       KWGBE_DTE_ADV_0                         | \
-       KWGBE_MIIPHY_MAC_MODE                   | \
-       KWGBE_AUTO_NEG_NO_CHANGE                | \
-       KWGBE_MAX_RX_PACKET_1552BYTE            | \
-       KWGBE_CLR_EXT_LOOPBACK                  | \
-       KWGBE_SET_FULL_DUPLEX_MODE              | \
-       KWGBE_DIS_FLOW_CTRL_TX_RX_IN_FULL_DUPLEX)
-
-/* Tx WRR confoguration macros */
-#define PORT_MAX_TRAN_UNIT     0x24    /* MTU register (default) 9KByte */
-#define PORT_MAX_TOKEN_BUCKET_SIZE     0x_FFFF /* PMTBS reg (default) */
-#define PORT_TOKEN_RATE                1023    /* PTTBRC reg (default) */
-/* MAC accepet/reject macros */
-#define ACCEPT_MAC_ADDR                0
-#define REJECT_MAC_ADDR                1
-/* Size of a Tx/Rx descriptor used in chain list data structure */
-#define KW_RXQ_DESC_ALIGNED_SIZE       \
-       (((sizeof(struct kwgbe_rxdesc) / PKTALIGN) + 1) * PKTALIGN)
-/* Buffer offset from buffer pointer */
-#define RX_BUF_OFFSET          0x2
-
-/* Port serial status reg (PSR) */
-#define KWGBE_INTERFACE_GMII_MII       0
-#define KWGBE_INTERFACE_PCM            1
-#define KWGBE_LINK_IS_DOWN             0
-#define KWGBE_LINK_IS_UP               (1 << 1)
-#define KWGBE_PORT_AT_HALF_DUPLEX      0
-#define KWGBE_PORT_AT_FULL_DUPLEX      (1 << 2)
-#define KWGBE_RX_FLOW_CTRL_DISD                0
-#define KWGBE_RX_FLOW_CTRL_ENBALED     (1 << 3)
-#define KWGBE_GMII_SPEED_100_10                0
-#define KWGBE_GMII_SPEED_1000          (1 << 4)
-#define KWGBE_MII_SPEED_10             0
-#define KWGBE_MII_SPEED_100            (1 << 5)
-#define KWGBE_NO_TX                    0
-#define KWGBE_TX_IN_PROGRESS           (1 << 7)
-#define KWGBE_BYPASS_NO_ACTIVE         0
-#define KWGBE_BYPASS_ACTIVE            (1 << 8)
-#define KWGBE_PORT_NOT_AT_PARTN_STT    0
-#define KWGBE_PORT_AT_PARTN_STT                (1 << 9)
-#define KWGBE_PORT_TX_FIFO_NOT_EMPTY   0
-#define KWGBE_PORT_TX_FIFO_EMPTY       (1 << 10)
-
-/* These macros describes the Port configuration reg (Px_cR) bits */
-#define KWGBE_UCAST_MOD_NRML           0
-#define KWGBE_UNICAST_PROMISCUOUS_MODE 1
-#define KWGBE_DFLT_RXQ(_x)             (_x << 1)
-#define KWGBE_DFLT_RX_ARPQ(_x)         (_x << 4)
-#define KWGBE_RX_BC_IF_NOT_IP_OR_ARP   0
-#define KWGBE_REJECT_BC_IF_NOT_IP_OR_ARP (1 << 7)
-#define KWGBE_RX_BC_IF_IP              0
-#define KWGBE_REJECT_BC_IF_IP          (1 << 8)
-#define KWGBE_RX_BC_IF_ARP             0
-#define KWGBE_REJECT_BC_IF_ARP         (1 << 9)
-#define KWGBE_TX_AM_NO_UPDATE_ERR_SMRY (1 << 12)
-#define KWGBE_CPTR_TCP_FRMS_DIS                0
-#define KWGBE_CPTR_TCP_FRMS_EN         (1 << 14)
-#define KWGBE_CPTR_UDP_FRMS_DIS                0
-#define KWGBE_CPTR_UDP_FRMS_EN         (1 << 15)
-#define KWGBE_DFLT_RX_TCPQ(_x)         (_x << 16)
-#define KWGBE_DFLT_RX_UDPQ(_x)         (_x << 19)
-#define KWGBE_DFLT_RX_BPDUQ(_x)                (_x << 22)
-#define KWGBE_DFLT_RX_TCP_CHKSUM_MODE  (1 << 25)
-
-/* These macros describes the Port configuration extend reg (Px_cXR) bits*/
-#define KWGBE_CLASSIFY_EN                      1
-#define KWGBE_SPAN_BPDU_PACKETS_AS_NORMAL      0
-#define KWGBE_SPAN_BPDU_PACKETS_TO_RX_Q7       (1 << 1)
-#define KWGBE_PARTITION_DIS                    0
-#define KWGBE_PARTITION_EN                     (1 << 2)
-#define KWGBE_TX_CRC_GENERATION_EN             0
-#define KWGBE_TX_CRC_GENERATION_DIS            (1 << 3)
-
-/* These macros describes the Port Sdma configuration reg (SDCR) bits */
-#define KWGBE_RIFB                             1
-#define KWGBE_RX_BURST_SIZE_1_64BIT            0
-#define KWGBE_RX_BURST_SIZE_2_64BIT            (1 << 1)
-#define KWGBE_RX_BURST_SIZE_4_64BIT            (1 << 2)
-#define KWGBE_RX_BURST_SIZE_8_64BIT            ((1 << 2) | (1 << 1))
-#define KWGBE_RX_BURST_SIZE_16_64BIT           (1 << 3)
-#define KWGBE_BLM_RX_NO_SWAP                   (1 << 4)
-#define KWGBE_BLM_RX_BYTE_SWAP                 0
-#define KWGBE_BLM_TX_NO_SWAP                   (1 << 5)
-#define KWGBE_BLM_TX_BYTE_SWAP                 0
-#define KWGBE_DESCRIPTORS_BYTE_SWAP            (1 << 6)
-#define KWGBE_DESCRIPTORS_NO_SWAP              0
-#define KWGBE_TX_BURST_SIZE_1_64BIT            0
-#define KWGBE_TX_BURST_SIZE_2_64BIT            (1 << 22)
-#define KWGBE_TX_BURST_SIZE_4_64BIT            (1 << 23)
-#define KWGBE_TX_BURST_SIZE_8_64BIT            ((1 << 23) | (1 << 22))
-#define KWGBE_TX_BURST_SIZE_16_64BIT           (1 << 24)
-
-/* These macros describes the Port serial control reg (PSCR) bits */
-#define KWGBE_SERIAL_PORT_DIS                  0
-#define KWGBE_SERIAL_PORT_EN                   1
-#define KWGBE_FORCE_LINK_PASS                  (1 << 1)
-#define KWGBE_DO_NOT_FORCE_LINK_PASS           0
-#define KWGBE_EN_AUTO_NEG_FOR_DUPLX            0
-#define KWGBE_DIS_AUTO_NEG_FOR_DUPLX           (1 << 2)
-#define KWGBE_EN_AUTO_NEG_FOR_FLOW_CTRL                0
-#define KWGBE_DIS_AUTO_NEG_FOR_FLOW_CTRL       (1 << 3)
-#define KWGBE_ADV_NO_FLOW_CTRL                 0
-#define KWGBE_ADV_SYMMETRIC_FLOW_CTRL          (1 << 4)
-#define KWGBE_FORCE_FC_MODE_NO_PAUSE_DIS_TX    0
-#define KWGBE_FORCE_FC_MODE_TX_PAUSE_DIS       (1 << 5)
-#define KWGBE_FORCE_BP_MODE_NO_JAM             0
-#define KWGBE_FORCE_BP_MODE_JAM_TX             (1 << 7)
-#define KWGBE_FORCE_BP_MODE_JAM_TX_ON_RX_ERR   (1 << 8)
-#define KWGBE_FORCE_LINK_FAIL                  0
-#define KWGBE_DO_NOT_FORCE_LINK_FAIL           (1 << 10)
-#define KWGBE_DIS_AUTO_NEG_SPEED_GMII          (1 << 13)
-#define KWGBE_EN_AUTO_NEG_SPEED_GMII           0
-#define KWGBE_DTE_ADV_0                                0
-#define KWGBE_DTE_ADV_1                                (1 << 14)
-#define KWGBE_MIIPHY_MAC_MODE                  0
-#define KWGBE_MIIPHY_PHY_MODE                  (1 << 15)
-#define KWGBE_AUTO_NEG_NO_CHANGE               0
-#define KWGBE_RESTART_AUTO_NEG                 (1 << 16)
-#define KWGBE_MAX_RX_PACKET_1518BYTE           0
-#define KWGBE_MAX_RX_PACKET_1522BYTE           (1 << 17)
-#define KWGBE_MAX_RX_PACKET_1552BYTE           (1 << 18)
-#define KWGBE_MAX_RX_PACKET_9022BYTE           ((1 << 18) | (1 << 17))
-#define KWGBE_MAX_RX_PACKET_9192BYTE           (1 << 19)
-#define KWGBE_MAX_RX_PACKET_9700BYTE           ((1 << 19) | (1 << 17))
-#define KWGBE_SET_EXT_LOOPBACK                 (1 << 20)
-#define KWGBE_CLR_EXT_LOOPBACK                 0
-#define KWGBE_SET_FULL_DUPLEX_MODE             (1 << 21)
-#define KWGBE_SET_HALF_DUPLEX_MODE             0
-#define KWGBE_EN_FLOW_CTRL_TX_RX_IN_FULL_DUPLEX        (1 << 22)
-#define KWGBE_DIS_FLOW_CTRL_TX_RX_IN_FULL_DUPLEX 0
-#define KWGBE_SET_GMII_SPEED_TO_10_100         0
-#define KWGBE_SET_GMII_SPEED_TO_1000           (1 << 23)
-#define KWGBE_SET_MII_SPEED_TO_10              0
-#define KWGBE_SET_MII_SPEED_TO_100             (1 << 24)
-
-/* SMI register fields */
-#define KWGBE_PHY_SMI_TIMEOUT          10000
-#define KWGBE_PHY_SMI_DATA_OFFS                0       /* Data */
-#define KWGBE_PHY_SMI_DATA_MASK                (0xffff << KWGBE_PHY_SMI_DATA_OFFS)
-#define KWGBE_PHY_SMI_DEV_ADDR_OFFS    16      /* PHY device address */
-#define KWGBE_PHY_SMI_DEV_ADDR_MASK    (PHYADR_MASK << KWGBE_PHY_SMI_DEV_ADDR_OFFS)
-#define KWGBE_SMI_REG_ADDR_OFFS                21      /* PHY device reg addr */
-#define KWGBE_SMI_REG_ADDR_MASK                (PHYADR_MASK << KWGBE_SMI_REG_ADDR_OFFS)
-#define KWGBE_PHY_SMI_OPCODE_OFFS      26      /* Write/Read opcode */
-#define KWGBE_PHY_SMI_OPCODE_MASK      (3 << KWGBE_PHY_SMI_OPCODE_OFFS)
-#define KWGBE_PHY_SMI_OPCODE_WRITE     (0 << KWGBE_PHY_SMI_OPCODE_OFFS)
-#define KWGBE_PHY_SMI_OPCODE_READ      (1 << KWGBE_PHY_SMI_OPCODE_OFFS)
-#define KWGBE_PHY_SMI_READ_VALID_MASK  (1 << 27)       /* Read Valid */
-#define KWGBE_PHY_SMI_BUSY_MASK                (1 << 28)       /* Busy */
-
-/* SDMA command status fields macros */
-/* Tx & Rx descriptors status */
-#define KWGBE_ERROR_SUMMARY            1
-/* Tx & Rx descriptors command */
-#define KWGBE_BUFFER_OWNED_BY_DMA      (1 << 31)
-/* Tx descriptors status */
-#define KWGBE_LC_ERROR                 0
-#define KWGBE_UR_ERROR                 (1 << 1)
-#define KWGBE_RL_ERROR                 (1 << 2)
-#define KWGBE_LLC_SNAP_FORMAT          (1 << 9)
-#define KWGBE_TX_LAST_FRAME            (1 << 20)
-
-/* Rx descriptors status */
-#define KWGBE_CRC_ERROR                        0
-#define KWGBE_OVERRUN_ERROR            (1 << 1)
-#define KWGBE_MAX_FRAME_LENGTH_ERROR   (1 << 2)
-#define KWGBE_RESOURCE_ERROR           ((1 << 2) | (1 << 1))
-#define KWGBE_VLAN_TAGGED              (1 << 19)
-#define KWGBE_BPDU_FRAME               (1 << 20)
-#define KWGBE_TCP_FRAME_OVER_IP_V_4    0
-#define KWGBE_UDP_FRAME_OVER_IP_V_4    (1 << 21)
-#define KWGBE_OTHER_FRAME_TYPE         (1 << 22)
-#define KWGBE_LAYER_2_IS_KWGBE_V_2     (1 << 23)
-#define KWGBE_FRAME_TYPE_IP_V_4                (1 << 24)
-#define KWGBE_FRAME_HEADER_OK          (1 << 25)
-#define KWGBE_RX_LAST_DESC             (1 << 26)
-#define KWGBE_RX_FIRST_DESC            (1 << 27)
-#define KWGBE_UNKNOWN_DESTINATION_ADDR (1 << 28)
-#define KWGBE_RX_EN_INTERRUPT          (1 << 29)
-#define KWGBE_LAYER_4_CHECKSUM_OK      (1 << 30)
-
-/* Rx descriptors byte count */
-#define KWGBE_FRAME_FRAGMENTED         (1 << 2)
-
-/* Tx descriptors command */
-#define KWGBE_LAYER_4_CHECKSUM_FIRST_DESC      (1 << 10)
-#define KWGBE_FRAME_SET_TO_VLAN                        (1 << 15)
-#define KWGBE_TCP_FRAME                                0
-#define KWGBE_UDP_FRAME                                (1 << 16)
-#define KWGBE_GEN_TCP_UDP_CHECKSUM             (1 << 17)
-#define KWGBE_GEN_IP_V_4_CHECKSUM              (1 << 18)
-#define KWGBE_ZERO_PADDING                     (1 << 19)
-#define KWGBE_TX_LAST_DESC                     (1 << 20)
-#define KWGBE_TX_FIRST_DESC                    (1 << 21)
-#define KWGBE_GEN_CRC                          (1 << 22)
-#define KWGBE_TX_EN_INTERRUPT                  (1 << 23)
-#define KWGBE_AUTO_MODE                                (1 << 30)
-
-/* Address decode parameters */
-/* Ethernet Base Address Register bits */
-#define EBAR_TARGET_DRAM                       0x00000000
-#define EBAR_TARGET_DEVICE                     0x00000001
-#define EBAR_TARGET_CBS                                0x00000002
-#define EBAR_TARGET_PCI0                       0x00000003
-#define EBAR_TARGET_PCI1                       0x00000004
-#define EBAR_TARGET_CUNIT                      0x00000005
-#define EBAR_TARGET_AUNIT                      0x00000006
-#define EBAR_TARGET_GUNIT                      0x00000007
-
-/* Window attrib */
-#define EBAR_DRAM_CS0                          0x00000E00
-#define EBAR_DRAM_CS1                          0x00000D00
-#define EBAR_DRAM_CS2                          0x00000B00
-#define EBAR_DRAM_CS3                          0x00000700
-
-/* DRAM Target interface */
-#define EBAR_DRAM_NO_CACHE_COHERENCY           0x00000000
-#define EBAR_DRAM_CACHE_COHERENCY_WT           0x00001000
-#define EBAR_DRAM_CACHE_COHERENCY_WB           0x00002000
-
-/* Device Bus Target interface */
-#define EBAR_DEVICE_DEVCS0                     0x00001E00
-#define EBAR_DEVICE_DEVCS1                     0x00001D00
-#define EBAR_DEVICE_DEVCS2                     0x00001B00
-#define EBAR_DEVICE_DEVCS3                     0x00001700
-#define EBAR_DEVICE_BOOTCS3                    0x00000F00
-
-/* PCI Target interface */
-#define EBAR_PCI_BYTE_SWAP                     0x00000000
-#define EBAR_PCI_NO_SWAP                       0x00000100
-#define EBAR_PCI_BYTE_WORD_SWAP                        0x00000200
-#define EBAR_PCI_WORD_SWAP                     0x00000300
-#define EBAR_PCI_NO_SNOOP_NOT_ASSERT           0x00000000
-#define EBAR_PCI_NO_SNOOP_ASSERT               0x00000400
-#define EBAR_PCI_IO_SPACE                      0x00000000
-#define EBAR_PCI_MEMORY_SPACE                  0x00000800
-#define EBAR_PCI_REQ64_FORCE                   0x00000000
-#define EBAR_PCI_REQ64_SIZE                    0x00001000
-
-/* Window access control */
-#define EWIN_ACCESS_NOT_ALLOWED 0
-#define EWIN_ACCESS_READ_ONLY  1
-#define EWIN_ACCESS_FULL       ((1 << 1) | 1)
-
-/* structures represents Controller registers */
-struct kwgbe_barsz {
-       u32 bar;
-       u32 size;
-};
-
-struct kwgbe_rxcdp {
-       struct kwgbe_rxdesc *rxcdp;
-       u32 rxcdp_pad[3];
-};
-
-struct kwgbe_tqx {
-       u32 qxttbc;
-       u32 tqxtbc;
-       u32 tqxac;
-       u32 tqxpad;
-};
-
-struct kwgbe_registers {
-       u32 phyadr;
-       u32 smi;
-       u32 euda;
-       u32 eudid;
-       u8 pad1[0x080 - 0x00c - 4];
-       u32 euic;
-       u32 euim;
-       u8 pad2[0x094 - 0x084 - 4];
-       u32 euea;
-       u32 euiae;
-       u8 pad3[0x0b0 - 0x098 - 4];
-       u32 euc;
-       u8 pad3a[0x200 - 0x0b0 - 4];
-       struct kwgbe_barsz barsz[6];
-       u8 pad4[0x280 - 0x22c - 4];
-       u32 ha_remap[4];
-       u32 bare;
-       u32 epap;
-       u8 pad5[0x400 - 0x294 - 4];
-       u32 pxc;
-       u32 pxcx;
-       u32 mii_ser_params;
-       u8 pad6[0x410 - 0x408 - 4];
-       u32 evlane;
-       u32 macal;
-       u32 macah;
-       u32 sdc;
-       u32 dscp[7];
-       u32 psc0;
-       u32 vpt2p;
-       u32 ps0;
-       u32 tqc;
-       u32 psc1;
-       u32 ps1;
-       u32 mrvl_header;
-       u8 pad7[0x460 - 0x454 - 4];
-       u32 ic;
-       u32 ice;
-       u32 pim;
-       u32 peim;
-       u8 pad8[0x474 - 0x46c - 4];
-       u32 pxtfut;
-       u32 pad9;
-       u32 pxmfs;
-       u32 pad10;
-       u32 pxdfc;
-       u32 pxofc;
-       u8 pad11[0x494 - 0x488 - 4];
-       u32 peuiae;
-       u8 pad12[0x4bc - 0x494 - 4];
-       u32 eth_type_prio;
-       u8 pad13[0x4dc - 0x4bc - 4];
-       u32 tqfpc;
-       u32 pttbrc;
-       u32 tqc1;
-       u32 pmtu;
-       u32 pmtbs;
-       u8 pad14[0x60c - 0x4ec - 4];
-       struct kwgbe_rxcdp rxcdp[7];
-       struct kwgbe_rxdesc *rxcdp7;
-       u32 rqc;
-       struct kwgbe_txdesc *tcsdp;
-       u8 pad15[0x6c0 - 0x684 - 4];
-       struct kwgbe_txdesc *tcqdp[8];
-       u8 pad16[0x700 - 0x6dc - 4];
-       struct kwgbe_tqx tqx[8];
-       u32 pttbc;
-       u8 pad17[0x7a8 - 0x780 - 4];
-       u32 tqxipg0;
-       u32 pad18[3];
-       u32 tqxipg1;
-       u8 pad19[0x7c0 - 0x7b8 - 4];
-       u32 hitkninlopkt;
-       u32 hitkninasyncpkt;
-       u32 lotkninasyncpkt;
-       u32 pad20;
-       u32 ts;
-       u8 pad21[0x3000 - 0x27d0 - 4];
-       u32 pad20_1[32];        /* mib counter registes */
-       u8 pad22[0x3400 - 0x3000 - sizeof(u32) * 32];
-       u32 dfsmt[64];
-       u32 dfomt[64];
-       u32 dfut[4];
-       u8 pad23[0xe20c0 - 0x7360c - 4];
-       u32 pmbus_top_arbiter;
-};
-
-/* structures/enums needed by driver */
-enum kwgbe_adrwin {
-       KWGBE_WIN0,
-       KWGBE_WIN1,
-       KWGBE_WIN2,
-       KWGBE_WIN3,
-       KWGBE_WIN4,
-       KWGBE_WIN5
-};
-
-enum kwgbe_target {
-       KWGBE_TARGET_DRAM,
-       KWGBE_TARGET_DEV,
-       KWGBE_TARGET_CBS,
-       KWGBE_TARGET_PCI0,
-       KWGBE_TARGET_PCI1
-};
-
-struct kwgbe_winparam {
-       enum kwgbe_adrwin win;  /* Window number */
-       enum kwgbe_target target;       /* System targets */
-       u16 attrib;             /* BAR attrib. See above macros */
-       u32 base_addr;          /* Window base address in u32 form */
-       u32 high_addr;          /* Window high address in u32 form */
-       u32 size;               /* Size in MBytes. Must be % 64Kbyte. */
-       int enable;             /* Enable/disable access to the window. */
-       u16 access_ctrl;        /*Access ctrl register. see above macros */
-};
-
-struct kwgbe_rxdesc {
-       u32 cmd_sts;            /* Descriptor command status */
-       u16 buf_size;           /* Buffer size */
-       u16 byte_cnt;           /* Descriptor buffer byte count */
-       u8 *buf_ptr;            /* Descriptor buffer pointer */
-       struct kwgbe_rxdesc *nxtdesc_p; /* Next descriptor pointer */
-};
-
-struct kwgbe_txdesc {
-       u32 cmd_sts;            /* Descriptor command status */
-       u16 l4i_chk;            /* CPU provided TCP Checksum */
-       u16 byte_cnt;           /* Descriptor buffer byte count */
-       u8 *buf_ptr;            /* Descriptor buffer ptr */
-       struct kwgbe_txdesc *nxtdesc_p; /* Next descriptor ptr */
-};
-
-/* port device data struct */
-struct kwgbe_device {
-       struct eth_device dev;
-       struct kwgbe_registers *regs;
-       struct kwgbe_txdesc *p_txdesc;
-       struct kwgbe_rxdesc *p_rxdesc;
-       struct kwgbe_rxdesc *p_rxdesc_curr;
-       u8 *p_rxbuf;
-       u8 *p_aligned_txbuf;
-};
-
-#endif /* __EGIGA_H__ */
index dcb8850239c6620de083f5b26bfb7540ab240e89..6a58a374b2e97c08f77f94de8967c45506d111aa 100644 (file)
@@ -439,8 +439,6 @@ static int macb_init(struct eth_device *netdev, bd_t *bd)
 {
        struct macb_device *macb = to_macb(netdev);
        unsigned long paddr;
-       u32 hwaddr_bottom;
-       u16 hwaddr_top;
        int i;
 
        /*
@@ -469,12 +467,6 @@ static int macb_init(struct eth_device *netdev, bd_t *bd)
        macb_writel(macb, RBQP, macb->rx_ring_dma);
        macb_writel(macb, TBQP, macb->tx_ring_dma);
 
-       /* set hardware address */
-       hwaddr_bottom = cpu_to_le32(*((u32 *)netdev->enetaddr));
-       macb_writel(macb, SA1B, hwaddr_bottom);
-       hwaddr_top = cpu_to_le16(*((u16 *)(netdev->enetaddr + 4)));
-       macb_writel(macb, SA1T, hwaddr_top);
-
        /* choose RMII or MII mode. This depends on the board */
 #ifdef CONFIG_RMII
 #if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \
@@ -521,6 +513,20 @@ static void macb_halt(struct eth_device *netdev)
        macb_writel(macb, NCR, MACB_BIT(CLRSTAT));
 }
 
+static int macb_write_hwaddr(struct eth_device *dev)
+{
+       struct macb_device *macb = to_macb(dev);
+       u32 hwaddr_bottom;
+       u16 hwaddr_top;
+
+       /* set hardware address */
+       hwaddr_bottom = cpu_to_le32(*((u32 *)dev->enetaddr));
+       macb_writel(macb, SA1B, hwaddr_bottom);
+       hwaddr_top = cpu_to_le16(*((u16 *)(dev->enetaddr + 4)));
+       macb_writel(macb, SA1T, hwaddr_top);
+       return 0;
+}
+
 int macb_eth_initialize(int id, void *regs, unsigned int phy_addr)
 {
        struct macb_device *macb;
@@ -554,6 +560,7 @@ int macb_eth_initialize(int id, void *regs, unsigned int phy_addr)
        netdev->halt = macb_halt;
        netdev->send = macb_send;
        netdev->recv = macb_recv;
+       netdev->write_hwaddr = macb_write_hwaddr;
 
        /*
         * Do some basic initialization so that we at least can talk
diff --git a/drivers/net/mvgbe.c b/drivers/net/mvgbe.c
new file mode 100644 (file)
index 0000000..cad4023
--- /dev/null
@@ -0,0 +1,756 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Written-by: Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * (C) Copyright 2003
+ * Ingo Assmus <ingo.assmus@keymile.com>
+ *
+ * based on - Driver for MV64360X ethernet ports
+ * Copyright (C) 2002 rabeeh@galileo.co.il
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+#include <common.h>
+#include <net.h>
+#include <malloc.h>
+#include <miiphy.h>
+#include <asm/errno.h>
+#include <asm/types.h>
+#include <asm/byteorder.h>
+
+#if defined(CONFIG_KIRKWOOD)
+#include <asm/arch/kirkwood.h>
+#elif defined(CONFIG_ORION5X)
+#include <asm/arch/orion5x.h>
+#endif
+
+#include "mvgbe.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define MV_PHY_ADR_REQUEST 0xee
+#define MVGBE_SMI_REG (((struct mvgbe_registers *)MVGBE0_BASE)->smi)
+
+/*
+ * smi_reg_read - miiphy_read callback function.
+ *
+ * Returns 16bit phy register value, or 0xffff on error
+ */
+static int smi_reg_read(char *devname, u8 phy_adr, u8 reg_ofs, u16 * data)
+{
+       struct eth_device *dev = eth_get_dev_by_name(devname);
+       struct mvgbe_device *dmvgbe = to_mvgbe(dev);
+       struct mvgbe_registers *regs = dmvgbe->regs;
+       u32 smi_reg;
+       u32 timeout;
+
+       /* Phyadr read request */
+       if (phy_adr == MV_PHY_ADR_REQUEST &&
+                       reg_ofs == MV_PHY_ADR_REQUEST) {
+               /* */
+               *data = (u16) (MVGBE_REG_RD(regs->phyadr) & PHYADR_MASK);
+               return 0;
+       }
+       /* check parameters */
+       if (phy_adr > PHYADR_MASK) {
+               printf("Err..(%s) Invalid PHY address %d\n",
+                       __FUNCTION__, phy_adr);
+               return -EFAULT;
+       }
+       if (reg_ofs > PHYREG_MASK) {
+               printf("Err..(%s) Invalid register offset %d\n",
+                       __FUNCTION__, reg_ofs);
+               return -EFAULT;
+       }
+
+       timeout = MVGBE_PHY_SMI_TIMEOUT;
+       /* wait till the SMI is not busy */
+       do {
+               /* read smi register */
+               smi_reg = MVGBE_REG_RD(MVGBE_SMI_REG);
+               if (timeout-- == 0) {
+                       printf("Err..(%s) SMI busy timeout\n", __FUNCTION__);
+                       return -EFAULT;
+               }
+       } while (smi_reg & MVGBE_PHY_SMI_BUSY_MASK);
+
+       /* fill the phy address and regiser offset and read opcode */
+       smi_reg = (phy_adr << MVGBE_PHY_SMI_DEV_ADDR_OFFS)
+               | (reg_ofs << MVGBE_SMI_REG_ADDR_OFFS)
+               | MVGBE_PHY_SMI_OPCODE_READ;
+
+       /* write the smi register */
+       MVGBE_REG_WR(MVGBE_SMI_REG, smi_reg);
+
+       /*wait till read value is ready */
+       timeout = MVGBE_PHY_SMI_TIMEOUT;
+
+       do {
+               /* read smi register */
+               smi_reg = MVGBE_REG_RD(MVGBE_SMI_REG);
+               if (timeout-- == 0) {
+                       printf("Err..(%s) SMI read ready timeout\n",
+                               __FUNCTION__);
+                       return -EFAULT;
+               }
+       } while (!(smi_reg & MVGBE_PHY_SMI_READ_VALID_MASK));
+
+       /* Wait for the data to update in the SMI register */
+       for (timeout = 0; timeout < MVGBE_PHY_SMI_TIMEOUT; timeout++)
+               ;
+
+       *data = (u16) (MVGBE_REG_RD(MVGBE_SMI_REG) & MVGBE_PHY_SMI_DATA_MASK);
+
+       debug("%s:(adr %d, off %d) value= %04x\n", __FUNCTION__, phy_adr,
+               reg_ofs, *data);
+
+       return 0;
+}
+
+/*
+ * smi_reg_write - imiiphy_write callback function.
+ *
+ * Returns 0 if write succeed, -EINVAL on bad parameters
+ * -ETIME on timeout
+ */
+static int smi_reg_write(char *devname, u8 phy_adr, u8 reg_ofs, u16 data)
+{
+       struct eth_device *dev = eth_get_dev_by_name(devname);
+       struct mvgbe_device *dmvgbe = to_mvgbe(dev);
+       struct mvgbe_registers *regs = dmvgbe->regs;
+       u32 smi_reg;
+       u32 timeout;
+
+       /* Phyadr write request*/
+       if (phy_adr == MV_PHY_ADR_REQUEST &&
+                       reg_ofs == MV_PHY_ADR_REQUEST) {
+               MVGBE_REG_WR(regs->phyadr, data);
+               return 0;
+       }
+
+       /* check parameters */
+       if (phy_adr > PHYADR_MASK) {
+               printf("Err..(%s) Invalid phy address\n", __FUNCTION__);
+               return -EINVAL;
+       }
+       if (reg_ofs > PHYREG_MASK) {
+               printf("Err..(%s) Invalid register offset\n", __FUNCTION__);
+               return -EINVAL;
+       }
+
+       /* wait till the SMI is not busy */
+       timeout = MVGBE_PHY_SMI_TIMEOUT;
+       do {
+               /* read smi register */
+               smi_reg = MVGBE_REG_RD(MVGBE_SMI_REG);
+               if (timeout-- == 0) {
+                       printf("Err..(%s) SMI busy timeout\n", __FUNCTION__);
+                       return -ETIME;
+               }
+       } while (smi_reg & MVGBE_PHY_SMI_BUSY_MASK);
+
+       /* fill the phy addr and reg offset and write opcode and data */
+       smi_reg = (data << MVGBE_PHY_SMI_DATA_OFFS);
+       smi_reg |= (phy_adr << MVGBE_PHY_SMI_DEV_ADDR_OFFS)
+               | (reg_ofs << MVGBE_SMI_REG_ADDR_OFFS);
+       smi_reg &= ~MVGBE_PHY_SMI_OPCODE_READ;
+
+       /* write the smi register */
+       MVGBE_REG_WR(MVGBE_SMI_REG, smi_reg);
+
+       return 0;
+}
+
+/* Stop and checks all queues */
+static void stop_queue(u32 * qreg)
+{
+       u32 reg_data;
+
+       reg_data = readl(qreg);
+
+       if (reg_data & 0xFF) {
+               /* Issue stop command for active channels only */
+               writel((reg_data << 8), qreg);
+
+               /* Wait for all queue activity to terminate. */
+               do {
+                       /*
+                        * Check port cause register that all queues
+                        * are stopped
+                        */
+                       reg_data = readl(qreg);
+               }
+               while (reg_data & 0xFF);
+       }
+}
+
+/*
+ * set_access_control - Config address decode parameters for Ethernet unit
+ *
+ * This function configures the address decode parameters for the Gigabit
+ * Ethernet Controller according the given parameters struct.
+ *
+ * @regs       Register struct pointer.
+ * @param      Address decode parameter struct.
+ */
+static void set_access_control(struct mvgbe_registers *regs,
+                               struct mvgbe_winparam *param)
+{
+       u32 access_prot_reg;
+
+       /* Set access control register */
+       access_prot_reg = MVGBE_REG_RD(regs->epap);
+       /* clear window permission */
+       access_prot_reg &= (~(3 << (param->win * 2)));
+       access_prot_reg |= (param->access_ctrl << (param->win * 2));
+       MVGBE_REG_WR(regs->epap, access_prot_reg);
+
+       /* Set window Size reg (SR) */
+       MVGBE_REG_WR(regs->barsz[param->win].size,
+                       (((param->size / 0x10000) - 1) << 16));
+
+       /* Set window Base address reg (BA) */
+       MVGBE_REG_WR(regs->barsz[param->win].bar,
+                       (param->target | param->attrib | param->base_addr));
+       /* High address remap reg (HARR) */
+       if (param->win < 4)
+               MVGBE_REG_WR(regs->ha_remap[param->win], param->high_addr);
+
+       /* Base address enable reg (BARER) */
+       if (param->enable == 1)
+               MVGBE_REG_BITS_RESET(regs->bare, (1 << param->win));
+       else
+               MVGBE_REG_BITS_SET(regs->bare, (1 << param->win));
+}
+
+static void set_dram_access(struct mvgbe_registers *regs)
+{
+       struct mvgbe_winparam win_param;
+       int i;
+
+       for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
+               /* Set access parameters for DRAM bank i */
+               win_param.win = i;      /* Use Ethernet window i */
+               /* Window target - DDR */
+               win_param.target = MVGBE_TARGET_DRAM;
+               /* Enable full access */
+               win_param.access_ctrl = EWIN_ACCESS_FULL;
+               win_param.high_addr = 0;
+               /* Get bank base and size */
+               win_param.base_addr = gd->bd->bi_dram[i].start;
+               win_param.size = gd->bd->bi_dram[i].size;
+               if (win_param.size == 0)
+                       win_param.enable = 0;
+               else
+                       win_param.enable = 1;   /* Enable the access */
+
+               /* Enable DRAM bank */
+               switch (i) {
+               case 0:
+                       win_param.attrib = EBAR_DRAM_CS0;
+                       break;
+               case 1:
+                       win_param.attrib = EBAR_DRAM_CS1;
+                       break;
+               case 2:
+                       win_param.attrib = EBAR_DRAM_CS2;
+                       break;
+               case 3:
+                       win_param.attrib = EBAR_DRAM_CS3;
+                       break;
+               default:
+                       /* invalid bank, disable access */
+                       win_param.enable = 0;
+                       win_param.attrib = 0;
+                       break;
+               }
+               /* Set the access control for address window(EPAPR) RD/WR */
+               set_access_control(regs, &win_param);
+       }
+}
+
+/*
+ * port_init_mac_tables - Clear all entrance in the UC, SMC and OMC tables
+ *
+ * Go through all the DA filter tables (Unicast, Special Multicast & Other
+ * Multicast) and set each entry to 0.
+ */
+static void port_init_mac_tables(struct mvgbe_registers *regs)
+{
+       int table_index;
+
+       /* Clear DA filter unicast table (Ex_dFUT) */
+       for (table_index = 0; table_index < 4; ++table_index)
+               MVGBE_REG_WR(regs->dfut[table_index], 0);
+
+       for (table_index = 0; table_index < 64; ++table_index) {
+               /* Clear DA filter special multicast table (Ex_dFSMT) */
+               MVGBE_REG_WR(regs->dfsmt[table_index], 0);
+               /* Clear DA filter other multicast table (Ex_dFOMT) */
+               MVGBE_REG_WR(regs->dfomt[table_index], 0);
+       }
+}
+
+/*
+ * port_uc_addr - This function Set the port unicast address table
+ *
+ * This function locates the proper entry in the Unicast table for the
+ * specified MAC nibble and sets its properties according to function
+ * parameters.
+ * This function add/removes MAC addresses from the port unicast address
+ * table.
+ *
+ * @uc_nibble  Unicast MAC Address last nibble.
+ * @option      0 = Add, 1 = remove address.
+ *
+ * RETURN: 1 if output succeeded. 0 if option parameter is invalid.
+ */
+static int port_uc_addr(struct mvgbe_registers *regs, u8 uc_nibble,
+                       int option)
+{
+       u32 unicast_reg;
+       u32 tbl_offset;
+       u32 reg_offset;
+
+       /* Locate the Unicast table entry */
+       uc_nibble = (0xf & uc_nibble);
+       /* Register offset from unicast table base */
+       tbl_offset = (uc_nibble / 4);
+       /* Entry offset within the above register */
+       reg_offset = uc_nibble % 4;
+
+       switch (option) {
+       case REJECT_MAC_ADDR:
+               /*
+                * Clear accepts frame bit at specified unicast
+                * DA table entry
+                */
+               unicast_reg = MVGBE_REG_RD(regs->dfut[tbl_offset]);
+               unicast_reg &= (0xFF << (8 * reg_offset));
+               MVGBE_REG_WR(regs->dfut[tbl_offset], unicast_reg);
+               break;
+       case ACCEPT_MAC_ADDR:
+               /* Set accepts frame bit at unicast DA filter table entry */
+               unicast_reg = MVGBE_REG_RD(regs->dfut[tbl_offset]);
+               unicast_reg &= (0xFF << (8 * reg_offset));
+               unicast_reg |= ((0x01 | (RXUQ << 1)) << (8 * reg_offset));
+               MVGBE_REG_WR(regs->dfut[tbl_offset], unicast_reg);
+               break;
+       default:
+               return 0;
+       }
+       return 1;
+}
+
+/*
+ * port_uc_addr_set - This function Set the port Unicast address.
+ */
+static void port_uc_addr_set(struct mvgbe_registers *regs, u8 * p_addr)
+{
+       u32 mac_h;
+       u32 mac_l;
+
+       mac_l = (p_addr[4] << 8) | (p_addr[5]);
+       mac_h = (p_addr[0] << 24) | (p_addr[1] << 16) | (p_addr[2] << 8) |
+               (p_addr[3] << 0);
+
+       MVGBE_REG_WR(regs->macal, mac_l);
+       MVGBE_REG_WR(regs->macah, mac_h);
+
+       /* Accept frames of this address */
+       port_uc_addr(regs, p_addr[5], ACCEPT_MAC_ADDR);
+}
+
+/*
+ * mvgbe_init_rx_desc_ring - Curve a Rx chain desc list and buffer in memory.
+ */
+static void mvgbe_init_rx_desc_ring(struct mvgbe_device *dmvgbe)
+{
+       struct mvgbe_rxdesc *p_rx_desc;
+       int i;
+
+       /* initialize the Rx descriptors ring */
+       p_rx_desc = dmvgbe->p_rxdesc;
+       for (i = 0; i < RINGSZ; i++) {
+               p_rx_desc->cmd_sts =
+                       MVGBE_BUFFER_OWNED_BY_DMA | MVGBE_RX_EN_INTERRUPT;
+               p_rx_desc->buf_size = PKTSIZE_ALIGN;
+               p_rx_desc->byte_cnt = 0;
+               p_rx_desc->buf_ptr = dmvgbe->p_rxbuf + i * PKTSIZE_ALIGN;
+               if (i == (RINGSZ - 1))
+                       p_rx_desc->nxtdesc_p = dmvgbe->p_rxdesc;
+               else {
+                       p_rx_desc->nxtdesc_p = (struct mvgbe_rxdesc *)
+                               ((u32) p_rx_desc + MV_RXQ_DESC_ALIGNED_SIZE);
+                       p_rx_desc = p_rx_desc->nxtdesc_p;
+               }
+       }
+       dmvgbe->p_rxdesc_curr = dmvgbe->p_rxdesc;
+}
+
+static int mvgbe_init(struct eth_device *dev)
+{
+       struct mvgbe_device *dmvgbe = to_mvgbe(dev);
+       struct mvgbe_registers *regs = dmvgbe->regs;
+#if (defined (CONFIG_MII) || defined (CONFIG_CMD_MII)) \
+        && defined (CONFIG_SYS_FAULT_ECHO_LINK_DOWN)
+       int i;
+#endif
+       /* setup RX rings */
+       mvgbe_init_rx_desc_ring(dmvgbe);
+
+       /* Clear the ethernet port interrupts */
+       MVGBE_REG_WR(regs->ic, 0);
+       MVGBE_REG_WR(regs->ice, 0);
+       /* Unmask RX buffer and TX end interrupt */
+       MVGBE_REG_WR(regs->pim, INT_CAUSE_UNMASK_ALL);
+       /* Unmask phy and link status changes interrupts */
+       MVGBE_REG_WR(regs->peim, INT_CAUSE_UNMASK_ALL_EXT);
+
+       set_dram_access(regs);
+       port_init_mac_tables(regs);
+       port_uc_addr_set(regs, dmvgbe->dev.enetaddr);
+
+       /* Assign port configuration and command. */
+       MVGBE_REG_WR(regs->pxc, PRT_CFG_VAL);
+       MVGBE_REG_WR(regs->pxcx, PORT_CFG_EXTEND_VALUE);
+       MVGBE_REG_WR(regs->psc0, PORT_SERIAL_CONTROL_VALUE);
+
+       /* Assign port SDMA configuration */
+       MVGBE_REG_WR(regs->sdc, PORT_SDMA_CFG_VALUE);
+       MVGBE_REG_WR(regs->tqx[0].qxttbc, QTKNBKT_DEF_VAL);
+       MVGBE_REG_WR(regs->tqx[0].tqxtbc,
+               (QMTBS_DEF_VAL << 16) | QTKNRT_DEF_VAL);
+       /* Turn off the port/RXUQ bandwidth limitation */
+       MVGBE_REG_WR(regs->pmtu, 0);
+
+       /* Set maximum receive buffer to 9700 bytes */
+       MVGBE_REG_WR(regs->psc0, MVGBE_MAX_RX_PACKET_9700BYTE
+                       | (MVGBE_REG_RD(regs->psc0) & MRU_MASK));
+
+       /* Enable port initially */
+       MVGBE_REG_BITS_SET(regs->psc0, MVGBE_SERIAL_PORT_EN);
+
+       /*
+        * Set ethernet MTU for leaky bucket mechanism to 0 - this will
+        * disable the leaky bucket mechanism .
+        */
+       MVGBE_REG_WR(regs->pmtu, 0);
+
+       /* Assignment of Rx CRDB of given RXUQ */
+       MVGBE_REG_WR(regs->rxcdp[RXUQ], (u32) dmvgbe->p_rxdesc_curr);
+       /* ensure previous write is done before enabling Rx DMA */
+       isb();
+       /* Enable port Rx. */
+       MVGBE_REG_WR(regs->rqc, (1 << RXUQ));
+
+#if (defined (CONFIG_MII) || defined (CONFIG_CMD_MII)) \
+        && defined (CONFIG_SYS_FAULT_ECHO_LINK_DOWN)
+       /* Wait up to 5s for the link status */
+       for (i = 0; i < 5; i++) {
+               u16 phyadr;
+
+               miiphy_read(dev->name, MV_PHY_ADR_REQUEST,
+                               MV_PHY_ADR_REQUEST, &phyadr);
+               /* Return if we get link up */
+               if (miiphy_link(dev->name, phyadr))
+                       return 0;
+               udelay(1000000);
+       }
+
+       printf("No link on %s\n", dev->name);
+       return -1;
+#endif
+       return 0;
+}
+
+static int mvgbe_halt(struct eth_device *dev)
+{
+       struct mvgbe_device *dmvgbe = to_mvgbe(dev);
+       struct mvgbe_registers *regs = dmvgbe->regs;
+
+       /* Disable all gigE address decoder */
+       MVGBE_REG_WR(regs->bare, 0x3f);
+
+       stop_queue(&regs->tqc);
+       stop_queue(&regs->rqc);
+
+       /* Disable port */
+       MVGBE_REG_BITS_RESET(regs->psc0, MVGBE_SERIAL_PORT_EN);
+       /* Set port is not reset */
+       MVGBE_REG_BITS_RESET(regs->psc1, 1 << 4);
+#ifdef CONFIG_SYS_MII_MODE
+       /* Set MMI interface up */
+       MVGBE_REG_BITS_RESET(regs->psc1, 1 << 3);
+#endif
+       /* Disable & mask ethernet port interrupts */
+       MVGBE_REG_WR(regs->ic, 0);
+       MVGBE_REG_WR(regs->ice, 0);
+       MVGBE_REG_WR(regs->pim, 0);
+       MVGBE_REG_WR(regs->peim, 0);
+
+       return 0;
+}
+
+static int mvgbe_write_hwaddr(struct eth_device *dev)
+{
+       struct mvgbe_device *dmvgbe = to_mvgbe(dev);
+       struct mvgbe_registers *regs = dmvgbe->regs;
+
+       /* Programs net device MAC address after initialization */
+       port_uc_addr_set(regs, dmvgbe->dev.enetaddr);
+       return 0;
+}
+
+static int mvgbe_send(struct eth_device *dev, void *dataptr,
+                     int datasize)
+{
+       struct mvgbe_device *dmvgbe = to_mvgbe(dev);
+       struct mvgbe_registers *regs = dmvgbe->regs;
+       struct mvgbe_txdesc *p_txdesc = dmvgbe->p_txdesc;
+       void *p = (void *)dataptr;
+       u32 cmd_sts;
+
+       /* Copy buffer if it's misaligned */
+       if ((u32) dataptr & 0x07) {
+               if (datasize > PKTSIZE_ALIGN) {
+                       printf("Non-aligned data too large (%d)\n",
+                                       datasize);
+                       return -1;
+               }
+
+               memcpy(dmvgbe->p_aligned_txbuf, p, datasize);
+               p = dmvgbe->p_aligned_txbuf;
+       }
+
+       p_txdesc->cmd_sts = MVGBE_ZERO_PADDING | MVGBE_GEN_CRC;
+       p_txdesc->cmd_sts |= MVGBE_TX_FIRST_DESC | MVGBE_TX_LAST_DESC;
+       p_txdesc->cmd_sts |= MVGBE_BUFFER_OWNED_BY_DMA;
+       p_txdesc->cmd_sts |= MVGBE_TX_EN_INTERRUPT;
+       p_txdesc->buf_ptr = (u8 *) p;
+       p_txdesc->byte_cnt = datasize;
+
+       /* Set this tc desc as zeroth TXUQ */
+       MVGBE_REG_WR(regs->tcqdp[TXUQ], (u32) p_txdesc);
+
+       /* ensure tx desc writes above are performed before we start Tx DMA */
+       isb();
+
+       /* Apply send command using zeroth TXUQ */
+       MVGBE_REG_WR(regs->tqc, (1 << TXUQ));
+
+       /*
+        * wait for packet xmit completion
+        */
+       cmd_sts = readl(&p_txdesc->cmd_sts);
+       while (cmd_sts & MVGBE_BUFFER_OWNED_BY_DMA) {
+               /* return fail if error is detected */
+               if ((cmd_sts & (MVGBE_ERROR_SUMMARY | MVGBE_TX_LAST_FRAME)) ==
+                               (MVGBE_ERROR_SUMMARY | MVGBE_TX_LAST_FRAME) &&
+                               cmd_sts & (MVGBE_UR_ERROR | MVGBE_RL_ERROR)) {
+                       printf("Err..(%s) in xmit packet\n", __FUNCTION__);
+                       return -1;
+               }
+               cmd_sts = readl(&p_txdesc->cmd_sts);
+       };
+       return 0;
+}
+
+static int mvgbe_recv(struct eth_device *dev)
+{
+       struct mvgbe_device *dmvgbe = to_mvgbe(dev);
+       struct mvgbe_rxdesc *p_rxdesc_curr = dmvgbe->p_rxdesc_curr;
+       u32 cmd_sts;
+       u32 timeout = 0;
+
+       /* wait untill rx packet available or timeout */
+       do {
+               if (timeout < MVGBE_PHY_SMI_TIMEOUT)
+                       timeout++;
+               else {
+                       debug("%s time out...\n", __FUNCTION__);
+                       return -1;
+               }
+       } while (readl(&p_rxdesc_curr->cmd_sts) & MVGBE_BUFFER_OWNED_BY_DMA);
+
+       if (p_rxdesc_curr->byte_cnt != 0) {
+               debug("%s: Received %d byte Packet @ 0x%x (cmd_sts= %08x)\n",
+                       __FUNCTION__, (u32) p_rxdesc_curr->byte_cnt,
+                       (u32) p_rxdesc_curr->buf_ptr,
+                       (u32) p_rxdesc_curr->cmd_sts);
+       }
+
+       /*
+        * In case received a packet without first/last bits on
+        * OR the error summary bit is on,
+        * the packets needs to be dropeed.
+        */
+       cmd_sts = readl(&p_rxdesc_curr->cmd_sts);
+
+       if ((cmd_sts &
+               (MVGBE_RX_FIRST_DESC | MVGBE_RX_LAST_DESC))
+               != (MVGBE_RX_FIRST_DESC | MVGBE_RX_LAST_DESC)) {
+
+               printf("Err..(%s) Dropping packet spread on"
+                       " multiple descriptors\n", __FUNCTION__);
+
+       } else if (cmd_sts & MVGBE_ERROR_SUMMARY) {
+
+               printf("Err..(%s) Dropping packet with errors\n",
+                       __FUNCTION__);
+
+       } else {
+               /* !!! call higher layer processing */
+               debug("%s: Sending Received packet to"
+                       " upper layer (NetReceive)\n", __FUNCTION__);
+
+               /* let the upper layer handle the packet */
+               NetReceive((p_rxdesc_curr->buf_ptr + RX_BUF_OFFSET),
+                       (int)(p_rxdesc_curr->byte_cnt - RX_BUF_OFFSET));
+       }
+       /*
+        * free these descriptors and point next in the ring
+        */
+       p_rxdesc_curr->cmd_sts =
+               MVGBE_BUFFER_OWNED_BY_DMA | MVGBE_RX_EN_INTERRUPT;
+       p_rxdesc_curr->buf_size = PKTSIZE_ALIGN;
+       p_rxdesc_curr->byte_cnt = 0;
+
+       writel((unsigned)p_rxdesc_curr->nxtdesc_p,
+               (u32) &dmvgbe->p_rxdesc_curr);
+
+       return 0;
+}
+
+int mvgbe_initialize(bd_t *bis)
+{
+       struct mvgbe_device *dmvgbe;
+       struct eth_device *dev;
+       int devnum;
+       char *s;
+       u8 used_ports[MAX_MVGBE_DEVS] = CONFIG_MVGBE_PORTS;
+
+       for (devnum = 0; devnum < MAX_MVGBE_DEVS; devnum++) {
+               /*skip if port is configured not to use */
+               if (used_ports[devnum] == 0)
+                       continue;
+
+               dmvgbe = malloc(sizeof(struct mvgbe_device));
+
+               if (!dmvgbe)
+                       goto error1;
+
+               memset(dmvgbe, 0, sizeof(struct mvgbe_device));
+
+               dmvgbe->p_rxdesc =
+                       (struct mvgbe_rxdesc *)memalign(PKTALIGN,
+                       MV_RXQ_DESC_ALIGNED_SIZE*RINGSZ + 1);
+
+               if (!dmvgbe->p_rxdesc)
+                       goto error2;
+
+               dmvgbe->p_rxbuf = (u8 *) memalign(PKTALIGN,
+                       RINGSZ*PKTSIZE_ALIGN + 1);
+
+               if (!dmvgbe->p_rxbuf)
+                       goto error3;
+
+               dmvgbe->p_aligned_txbuf = memalign(8, PKTSIZE_ALIGN);
+
+               if (!dmvgbe->p_aligned_txbuf)
+                       goto error4;
+
+               dmvgbe->p_txdesc = (struct mvgbe_txdesc *) memalign(
+                       PKTALIGN, sizeof(struct mvgbe_txdesc) + 1);
+
+               if (!dmvgbe->p_txdesc) {
+                       free(dmvgbe->p_aligned_txbuf);
+error4:
+                       free(dmvgbe->p_rxbuf);
+error3:
+                       free(dmvgbe->p_rxdesc);
+error2:
+                       free(dmvgbe);
+error1:
+                       printf("Err.. %s Failed to allocate memory\n",
+                               __FUNCTION__);
+                       return -1;
+               }
+
+               dev = &dmvgbe->dev;
+
+               /* must be less than NAMESIZE (16) */
+               sprintf(dev->name, "egiga%d", devnum);
+
+               /* Extract the MAC address from the environment */
+               switch (devnum) {
+               case 0:
+                       dmvgbe->regs = (void *)MVGBE0_BASE;
+                       s = "ethaddr";
+                       break;
+#if defined(MVGBE1_BASE)
+               case 1:
+                       dmvgbe->regs = (void *)MVGBE1_BASE;
+                       s = "eth1addr";
+                       break;
+#endif
+               default:        /* this should never happen */
+                       printf("Err..(%s) Invalid device number %d\n",
+                               __FUNCTION__, devnum);
+                       return -1;
+               }
+
+               while (!eth_getenv_enetaddr(s, dev->enetaddr)) {
+                       /* Generate Private MAC addr if not set */
+                       dev->enetaddr[0] = 0x02;
+                       dev->enetaddr[1] = 0x50;
+                       dev->enetaddr[2] = 0x43;
+#if defined (CONFIG_SKIP_LOCAL_MAC_RANDOMIZATION)
+                       /* Generate fixed lower MAC half using devnum */
+                       dev->enetaddr[3] = 0;
+                       dev->enetaddr[4] = 0;
+                       dev->enetaddr[5] = devnum;
+#else
+                       /* Generate random lower MAC half */
+                       dev->enetaddr[3] = get_random_hex();
+                       dev->enetaddr[4] = get_random_hex();
+                       dev->enetaddr[5] = get_random_hex();
+#endif
+                       eth_setenv_enetaddr(s, dev->enetaddr);
+               }
+
+               dev->init = (void *)mvgbe_init;
+               dev->halt = (void *)mvgbe_halt;
+               dev->send = (void *)mvgbe_send;
+               dev->recv = (void *)mvgbe_recv;
+               dev->write_hwaddr = (void *)mvgbe_write_hwaddr;
+
+               eth_register(dev);
+
+#if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)
+               miiphy_register(dev->name, smi_reg_read, smi_reg_write);
+               /* Set phy address of the port */
+               miiphy_write(dev->name, MV_PHY_ADR_REQUEST,
+                               MV_PHY_ADR_REQUEST, PHY_BASE_ADR + devnum);
+#endif
+       }
+       return 0;
+}
diff --git a/drivers/net/mvgbe.h b/drivers/net/mvgbe.h
new file mode 100644 (file)
index 0000000..3de98d0
--- /dev/null
@@ -0,0 +1,505 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Written-by: Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * based on - Driver for MV64360X ethernet ports
+ * Copyright (C) 2002 rabeeh@galileo.co.il
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+#ifndef __MVGBE_H__
+#define __MVGBE_H__
+
+/* PHY_BASE_ADR is board specific and can be configured */
+#if defined (CONFIG_PHY_BASE_ADR)
+#define PHY_BASE_ADR           CONFIG_PHY_BASE_ADR
+#else
+#define PHY_BASE_ADR           0x08    /* default phy base addr */
+#endif
+
+/* Constants */
+#define INT_CAUSE_UNMASK_ALL           0x0007ffff
+#define INT_CAUSE_UNMASK_ALL_EXT       0x0011ffff
+#define MRU_MASK                       0xfff1ffff
+#define PHYADR_MASK                    0x0000001f
+#define PHYREG_MASK                    0x0000001f
+#define QTKNBKT_DEF_VAL                        0x3fffffff
+#define QMTBS_DEF_VAL                  0x000003ff
+#define QTKNRT_DEF_VAL                 0x0000fcff
+#define RXUQ   0 /* Used Rx queue */
+#define TXUQ   0 /* Used Rx queue */
+
+#define to_mvgbe(_d) container_of(_d, struct mvgbe_device, dev)
+#define MVGBE_REG_WR(adr, val)         writel(val, &adr)
+#define MVGBE_REG_RD(adr)              readl(&adr)
+#define MVGBE_REG_BITS_RESET(adr, val) writel(readl(&adr) & ~(val), &adr)
+#define MVGBE_REG_BITS_SET(adr, val)   writel(readl(&adr) | val, &adr)
+
+/* Default port configuration value */
+#define PRT_CFG_VAL                    ( \
+       MVGBE_UCAST_MOD_NRML            | \
+       MVGBE_DFLT_RXQ(RXUQ)            | \
+       MVGBE_DFLT_RX_ARPQ(RXUQ)        | \
+       MVGBE_RX_BC_IF_NOT_IP_OR_ARP    | \
+       MVGBE_RX_BC_IF_IP               | \
+       MVGBE_RX_BC_IF_ARP              | \
+       MVGBE_CPTR_TCP_FRMS_DIS         | \
+       MVGBE_CPTR_UDP_FRMS_DIS         | \
+       MVGBE_DFLT_RX_TCPQ(RXUQ)        | \
+       MVGBE_DFLT_RX_UDPQ(RXUQ)        | \
+       MVGBE_DFLT_RX_BPDUQ(RXUQ))
+
+/* Default port extend configuration value */
+#define PORT_CFG_EXTEND_VALUE          \
+       MVGBE_SPAN_BPDU_PACKETS_AS_NORMAL       | \
+       MVGBE_PARTITION_DIS             | \
+       MVGBE_TX_CRC_GENERATION_EN
+
+#define GT_MVGBE_IPG_INT_RX(value)     ((value & 0x3fff) << 8)
+
+/* Default sdma control value */
+#define PORT_SDMA_CFG_VALUE            ( \
+       MVGBE_RX_BURST_SIZE_16_64BIT    | \
+       MVGBE_BLM_RX_NO_SWAP            | \
+       MVGBE_BLM_TX_NO_SWAP            | \
+       GT_MVGBE_IPG_INT_RX(RXUQ)       | \
+       MVGBE_TX_BURST_SIZE_16_64BIT)
+
+/* Default port serial control value */
+#define PORT_SERIAL_CONTROL_VALUE              ( \
+       MVGBE_FORCE_LINK_PASS                   | \
+       MVGBE_DIS_AUTO_NEG_FOR_DUPLX            | \
+       MVGBE_DIS_AUTO_NEG_FOR_FLOW_CTRL        | \
+       MVGBE_ADV_NO_FLOW_CTRL                  | \
+       MVGBE_FORCE_FC_MODE_NO_PAUSE_DIS_TX     | \
+       MVGBE_FORCE_BP_MODE_NO_JAM              | \
+       (1 << 9) /* Reserved bit has to be 1 */ | \
+       MVGBE_DO_NOT_FORCE_LINK_FAIL            | \
+       MVGBE_EN_AUTO_NEG_SPEED_GMII            | \
+       MVGBE_DTE_ADV_0                         | \
+       MVGBE_MIIPHY_MAC_MODE                   | \
+       MVGBE_AUTO_NEG_NO_CHANGE                | \
+       MVGBE_MAX_RX_PACKET_1552BYTE            | \
+       MVGBE_CLR_EXT_LOOPBACK                  | \
+       MVGBE_SET_FULL_DUPLEX_MODE              | \
+       MVGBE_DIS_FLOW_CTRL_TX_RX_IN_FULL_DUPLEX)
+
+/* Tx WRR confoguration macros */
+#define PORT_MAX_TRAN_UNIT     0x24    /* MTU register (default) 9KByte */
+#define PORT_MAX_TOKEN_BUCKET_SIZE     0x_FFFF /* PMTBS reg (default) */
+#define PORT_TOKEN_RATE                1023    /* PTTBRC reg (default) */
+/* MAC accepet/reject macros */
+#define ACCEPT_MAC_ADDR                0
+#define REJECT_MAC_ADDR                1
+/* Size of a Tx/Rx descriptor used in chain list data structure */
+#define MV_RXQ_DESC_ALIGNED_SIZE       \
+       (((sizeof(struct mvgbe_rxdesc) / PKTALIGN) + 1) * PKTALIGN)
+/* Buffer offset from buffer pointer */
+#define RX_BUF_OFFSET          0x2
+
+/* Port serial status reg (PSR) */
+#define MVGBE_INTERFACE_GMII_MII       0
+#define MVGBE_INTERFACE_PCM            1
+#define MVGBE_LINK_IS_DOWN             0
+#define MVGBE_LINK_IS_UP               (1 << 1)
+#define MVGBE_PORT_AT_HALF_DUPLEX      0
+#define MVGBE_PORT_AT_FULL_DUPLEX      (1 << 2)
+#define MVGBE_RX_FLOW_CTRL_DISD                0
+#define MVGBE_RX_FLOW_CTRL_ENBALED     (1 << 3)
+#define MVGBE_GMII_SPEED_100_10                0
+#define MVGBE_GMII_SPEED_1000          (1 << 4)
+#define MVGBE_MII_SPEED_10             0
+#define MVGBE_MII_SPEED_100            (1 << 5)
+#define MVGBE_NO_TX                    0
+#define MVGBE_TX_IN_PROGRESS           (1 << 7)
+#define MVGBE_BYPASS_NO_ACTIVE         0
+#define MVGBE_BYPASS_ACTIVE            (1 << 8)
+#define MVGBE_PORT_NOT_AT_PARTN_STT    0
+#define MVGBE_PORT_AT_PARTN_STT                (1 << 9)
+#define MVGBE_PORT_TX_FIFO_NOT_EMPTY   0
+#define MVGBE_PORT_TX_FIFO_EMPTY       (1 << 10)
+
+/* These macros describes the Port configuration reg (Px_cR) bits */
+#define MVGBE_UCAST_MOD_NRML           0
+#define MVGBE_UNICAST_PROMISCUOUS_MODE 1
+#define MVGBE_DFLT_RXQ(_x)             (_x << 1)
+#define MVGBE_DFLT_RX_ARPQ(_x)         (_x << 4)
+#define MVGBE_RX_BC_IF_NOT_IP_OR_ARP   0
+#define MVGBE_REJECT_BC_IF_NOT_IP_OR_ARP (1 << 7)
+#define MVGBE_RX_BC_IF_IP              0
+#define MVGBE_REJECT_BC_IF_IP          (1 << 8)
+#define MVGBE_RX_BC_IF_ARP             0
+#define MVGBE_REJECT_BC_IF_ARP         (1 << 9)
+#define MVGBE_TX_AM_NO_UPDATE_ERR_SMRY (1 << 12)
+#define MVGBE_CPTR_TCP_FRMS_DIS                0
+#define MVGBE_CPTR_TCP_FRMS_EN         (1 << 14)
+#define MVGBE_CPTR_UDP_FRMS_DIS                0
+#define MVGBE_CPTR_UDP_FRMS_EN         (1 << 15)
+#define MVGBE_DFLT_RX_TCPQ(_x)         (_x << 16)
+#define MVGBE_DFLT_RX_UDPQ(_x)         (_x << 19)
+#define MVGBE_DFLT_RX_BPDUQ(_x)                (_x << 22)
+#define MVGBE_DFLT_RX_TCP_CHKSUM_MODE  (1 << 25)
+
+/* These macros describes the Port configuration extend reg (Px_cXR) bits*/
+#define MVGBE_CLASSIFY_EN                      1
+#define MVGBE_SPAN_BPDU_PACKETS_AS_NORMAL      0
+#define MVGBE_SPAN_BPDU_PACKETS_TO_RX_Q7       (1 << 1)
+#define MVGBE_PARTITION_DIS                    0
+#define MVGBE_PARTITION_EN                     (1 << 2)
+#define MVGBE_TX_CRC_GENERATION_EN             0
+#define MVGBE_TX_CRC_GENERATION_DIS            (1 << 3)
+
+/* These macros describes the Port Sdma configuration reg (SDCR) bits */
+#define MVGBE_RIFB                             1
+#define MVGBE_RX_BURST_SIZE_1_64BIT            0
+#define MVGBE_RX_BURST_SIZE_2_64BIT            (1 << 1)
+#define MVGBE_RX_BURST_SIZE_4_64BIT            (1 << 2)
+#define MVGBE_RX_BURST_SIZE_8_64BIT            ((1 << 2) | (1 << 1))
+#define MVGBE_RX_BURST_SIZE_16_64BIT           (1 << 3)
+#define MVGBE_BLM_RX_NO_SWAP                   (1 << 4)
+#define MVGBE_BLM_RX_BYTE_SWAP                 0
+#define MVGBE_BLM_TX_NO_SWAP                   (1 << 5)
+#define MVGBE_BLM_TX_BYTE_SWAP                 0
+#define MVGBE_DESCRIPTORS_BYTE_SWAP            (1 << 6)
+#define MVGBE_DESCRIPTORS_NO_SWAP              0
+#define MVGBE_TX_BURST_SIZE_1_64BIT            0
+#define MVGBE_TX_BURST_SIZE_2_64BIT            (1 << 22)
+#define MVGBE_TX_BURST_SIZE_4_64BIT            (1 << 23)
+#define MVGBE_TX_BURST_SIZE_8_64BIT            ((1 << 23) | (1 << 22))
+#define MVGBE_TX_BURST_SIZE_16_64BIT           (1 << 24)
+
+/* These macros describes the Port serial control reg (PSCR) bits */
+#define MVGBE_SERIAL_PORT_DIS                  0
+#define MVGBE_SERIAL_PORT_EN                   1
+#define MVGBE_FORCE_LINK_PASS                  (1 << 1)
+#define MVGBE_DO_NOT_FORCE_LINK_PASS           0
+#define MVGBE_EN_AUTO_NEG_FOR_DUPLX            0
+#define MVGBE_DIS_AUTO_NEG_FOR_DUPLX           (1 << 2)
+#define MVGBE_EN_AUTO_NEG_FOR_FLOW_CTRL                0
+#define MVGBE_DIS_AUTO_NEG_FOR_FLOW_CTRL       (1 << 3)
+#define MVGBE_ADV_NO_FLOW_CTRL                 0
+#define MVGBE_ADV_SYMMETRIC_FLOW_CTRL          (1 << 4)
+#define MVGBE_FORCE_FC_MODE_NO_PAUSE_DIS_TX    0
+#define MVGBE_FORCE_FC_MODE_TX_PAUSE_DIS       (1 << 5)
+#define MVGBE_FORCE_BP_MODE_NO_JAM             0
+#define MVGBE_FORCE_BP_MODE_JAM_TX             (1 << 7)
+#define MVGBE_FORCE_BP_MODE_JAM_TX_ON_RX_ERR   (1 << 8)
+#define MVGBE_FORCE_LINK_FAIL                  0
+#define MVGBE_DO_NOT_FORCE_LINK_FAIL           (1 << 10)
+#define MVGBE_DIS_AUTO_NEG_SPEED_GMII          (1 << 13)
+#define MVGBE_EN_AUTO_NEG_SPEED_GMII           0
+#define MVGBE_DTE_ADV_0                                0
+#define MVGBE_DTE_ADV_1                                (1 << 14)
+#define MVGBE_MIIPHY_MAC_MODE                  0
+#define MVGBE_MIIPHY_PHY_MODE                  (1 << 15)
+#define MVGBE_AUTO_NEG_NO_CHANGE               0
+#define MVGBE_RESTART_AUTO_NEG                 (1 << 16)
+#define MVGBE_MAX_RX_PACKET_1518BYTE           0
+#define MVGBE_MAX_RX_PACKET_1522BYTE           (1 << 17)
+#define MVGBE_MAX_RX_PACKET_1552BYTE           (1 << 18)
+#define MVGBE_MAX_RX_PACKET_9022BYTE           ((1 << 18) | (1 << 17))
+#define MVGBE_MAX_RX_PACKET_9192BYTE           (1 << 19)
+#define MVGBE_MAX_RX_PACKET_9700BYTE           ((1 << 19) | (1 << 17))
+#define MVGBE_SET_EXT_LOOPBACK                 (1 << 20)
+#define MVGBE_CLR_EXT_LOOPBACK                 0
+#define MVGBE_SET_FULL_DUPLEX_MODE             (1 << 21)
+#define MVGBE_SET_HALF_DUPLEX_MODE             0
+#define MVGBE_EN_FLOW_CTRL_TX_RX_IN_FULL_DUPLEX        (1 << 22)
+#define MVGBE_DIS_FLOW_CTRL_TX_RX_IN_FULL_DUPLEX 0
+#define MVGBE_SET_GMII_SPEED_TO_10_100         0
+#define MVGBE_SET_GMII_SPEED_TO_1000           (1 << 23)
+#define MVGBE_SET_MII_SPEED_TO_10              0
+#define MVGBE_SET_MII_SPEED_TO_100             (1 << 24)
+
+/* SMI register fields */
+#define MVGBE_PHY_SMI_TIMEOUT          10000
+#define MVGBE_PHY_SMI_DATA_OFFS                0       /* Data */
+#define MVGBE_PHY_SMI_DATA_MASK                (0xffff << MVGBE_PHY_SMI_DATA_OFFS)
+#define MVGBE_PHY_SMI_DEV_ADDR_OFFS    16      /* PHY device address */
+#define MVGBE_PHY_SMI_DEV_ADDR_MASK \
+       (PHYADR_MASK << MVGBE_PHY_SMI_DEV_ADDR_OFFS)
+#define MVGBE_SMI_REG_ADDR_OFFS                21      /* PHY device reg addr */
+#define MVGBE_SMI_REG_ADDR_MASK \
+       (PHYADR_MASK << MVGBE_SMI_REG_ADDR_OFFS)
+#define MVGBE_PHY_SMI_OPCODE_OFFS      26      /* Write/Read opcode */
+#define MVGBE_PHY_SMI_OPCODE_MASK      (3 << MVGBE_PHY_SMI_OPCODE_OFFS)
+#define MVGBE_PHY_SMI_OPCODE_WRITE     (0 << MVGBE_PHY_SMI_OPCODE_OFFS)
+#define MVGBE_PHY_SMI_OPCODE_READ      (1 << MVGBE_PHY_SMI_OPCODE_OFFS)
+#define MVGBE_PHY_SMI_READ_VALID_MASK  (1 << 27)       /* Read Valid */
+#define MVGBE_PHY_SMI_BUSY_MASK                (1 << 28)       /* Busy */
+
+/* SDMA command status fields macros */
+/* Tx & Rx descriptors status */
+#define MVGBE_ERROR_SUMMARY            1
+/* Tx & Rx descriptors command */
+#define MVGBE_BUFFER_OWNED_BY_DMA      (1 << 31)
+/* Tx descriptors status */
+#define MVGBE_LC_ERROR                 0
+#define MVGBE_UR_ERROR                 (1 << 1)
+#define MVGBE_RL_ERROR                 (1 << 2)
+#define MVGBE_LLC_SNAP_FORMAT          (1 << 9)
+#define MVGBE_TX_LAST_FRAME            (1 << 20)
+
+/* Rx descriptors status */
+#define MVGBE_CRC_ERROR                        0
+#define MVGBE_OVERRUN_ERROR            (1 << 1)
+#define MVGBE_MAX_FRAME_LENGTH_ERROR   (1 << 2)
+#define MVGBE_RESOURCE_ERROR           ((1 << 2) | (1 << 1))
+#define MVGBE_VLAN_TAGGED              (1 << 19)
+#define MVGBE_BPDU_FRAME               (1 << 20)
+#define MVGBE_TCP_FRAME_OVER_IP_V_4    0
+#define MVGBE_UDP_FRAME_OVER_IP_V_4    (1 << 21)
+#define MVGBE_OTHER_FRAME_TYPE         (1 << 22)
+#define MVGBE_LAYER_2_IS_MVGBE_V_2     (1 << 23)
+#define MVGBE_FRAME_TYPE_IP_V_4                (1 << 24)
+#define MVGBE_FRAME_HEADER_OK          (1 << 25)
+#define MVGBE_RX_LAST_DESC             (1 << 26)
+#define MVGBE_RX_FIRST_DESC            (1 << 27)
+#define MVGBE_UNKNOWN_DESTINATION_ADDR (1 << 28)
+#define MVGBE_RX_EN_INTERRUPT          (1 << 29)
+#define MVGBE_LAYER_4_CHECKSUM_OK      (1 << 30)
+
+/* Rx descriptors byte count */
+#define MVGBE_FRAME_FRAGMENTED         (1 << 2)
+
+/* Tx descriptors command */
+#define MVGBE_LAYER_4_CHECKSUM_FIRST_DESC      (1 << 10)
+#define MVGBE_FRAME_SET_TO_VLAN                        (1 << 15)
+#define MVGBE_TCP_FRAME                                0
+#define MVGBE_UDP_FRAME                                (1 << 16)
+#define MVGBE_GEN_TCP_UDP_CHECKSUM             (1 << 17)
+#define MVGBE_GEN_IP_V_4_CHECKSUM              (1 << 18)
+#define MVGBE_ZERO_PADDING                     (1 << 19)
+#define MVGBE_TX_LAST_DESC                     (1 << 20)
+#define MVGBE_TX_FIRST_DESC                    (1 << 21)
+#define MVGBE_GEN_CRC                          (1 << 22)
+#define MVGBE_TX_EN_INTERRUPT                  (1 << 23)
+#define MVGBE_AUTO_MODE                                (1 << 30)
+
+/* Address decode parameters */
+/* Ethernet Base Address Register bits */
+#define EBAR_TARGET_DRAM                       0x00000000
+#define EBAR_TARGET_DEVICE                     0x00000001
+#define EBAR_TARGET_CBS                                0x00000002
+#define EBAR_TARGET_PCI0                       0x00000003
+#define EBAR_TARGET_PCI1                       0x00000004
+#define EBAR_TARGET_CUNIT                      0x00000005
+#define EBAR_TARGET_AUNIT                      0x00000006
+#define EBAR_TARGET_GUNIT                      0x00000007
+
+/* Window attrib */
+#define EBAR_DRAM_CS0                          0x00000E00
+#define EBAR_DRAM_CS1                          0x00000D00
+#define EBAR_DRAM_CS2                          0x00000B00
+#define EBAR_DRAM_CS3                          0x00000700
+
+/* DRAM Target interface */
+#define EBAR_DRAM_NO_CACHE_COHERENCY           0x00000000
+#define EBAR_DRAM_CACHE_COHERENCY_WT           0x00001000
+#define EBAR_DRAM_CACHE_COHERENCY_WB           0x00002000
+
+/* Device Bus Target interface */
+#define EBAR_DEVICE_DEVCS0                     0x00001E00
+#define EBAR_DEVICE_DEVCS1                     0x00001D00
+#define EBAR_DEVICE_DEVCS2                     0x00001B00
+#define EBAR_DEVICE_DEVCS3                     0x00001700
+#define EBAR_DEVICE_BOOTCS3                    0x00000F00
+
+/* PCI Target interface */
+#define EBAR_PCI_BYTE_SWAP                     0x00000000
+#define EBAR_PCI_NO_SWAP                       0x00000100
+#define EBAR_PCI_BYTE_WORD_SWAP                        0x00000200
+#define EBAR_PCI_WORD_SWAP                     0x00000300
+#define EBAR_PCI_NO_SNOOP_NOT_ASSERT           0x00000000
+#define EBAR_PCI_NO_SNOOP_ASSERT               0x00000400
+#define EBAR_PCI_IO_SPACE                      0x00000000
+#define EBAR_PCI_MEMORY_SPACE                  0x00000800
+#define EBAR_PCI_REQ64_FORCE                   0x00000000
+#define EBAR_PCI_REQ64_SIZE                    0x00001000
+
+/* Window access control */
+#define EWIN_ACCESS_NOT_ALLOWED 0
+#define EWIN_ACCESS_READ_ONLY  1
+#define EWIN_ACCESS_FULL       ((1 << 1) | 1)
+
+/* structures represents Controller registers */
+struct mvgbe_barsz {
+       u32 bar;
+       u32 size;
+};
+
+struct mvgbe_rxcdp {
+       struct mvgbe_rxdesc *rxcdp;
+       u32 rxcdp_pad[3];
+};
+
+struct mvgbe_tqx {
+       u32 qxttbc;
+       u32 tqxtbc;
+       u32 tqxac;
+       u32 tqxpad;
+};
+
+struct mvgbe_registers {
+       u32 phyadr;
+       u32 smi;
+       u32 euda;
+       u32 eudid;
+       u8 pad1[0x080 - 0x00c - 4];
+       u32 euic;
+       u32 euim;
+       u8 pad2[0x094 - 0x084 - 4];
+       u32 euea;
+       u32 euiae;
+       u8 pad3[0x0b0 - 0x098 - 4];
+       u32 euc;
+       u8 pad3a[0x200 - 0x0b0 - 4];
+       struct mvgbe_barsz barsz[6];
+       u8 pad4[0x280 - 0x22c - 4];
+       u32 ha_remap[4];
+       u32 bare;
+       u32 epap;
+       u8 pad5[0x400 - 0x294 - 4];
+       u32 pxc;
+       u32 pxcx;
+       u32 mii_ser_params;
+       u8 pad6[0x410 - 0x408 - 4];
+       u32 evlane;
+       u32 macal;
+       u32 macah;
+       u32 sdc;
+       u32 dscp[7];
+       u32 psc0;
+       u32 vpt2p;
+       u32 ps0;
+       u32 tqc;
+       u32 psc1;
+       u32 ps1;
+       u32 mrvl_header;
+       u8 pad7[0x460 - 0x454 - 4];
+       u32 ic;
+       u32 ice;
+       u32 pim;
+       u32 peim;
+       u8 pad8[0x474 - 0x46c - 4];
+       u32 pxtfut;
+       u32 pad9;
+       u32 pxmfs;
+       u32 pad10;
+       u32 pxdfc;
+       u32 pxofc;
+       u8 pad11[0x494 - 0x488 - 4];
+       u32 peuiae;
+       u8 pad12[0x4bc - 0x494 - 4];
+       u32 eth_type_prio;
+       u8 pad13[0x4dc - 0x4bc - 4];
+       u32 tqfpc;
+       u32 pttbrc;
+       u32 tqc1;
+       u32 pmtu;
+       u32 pmtbs;
+       u8 pad14[0x60c - 0x4ec - 4];
+       struct mvgbe_rxcdp rxcdp[7];
+       struct mvgbe_rxdesc *rxcdp7;
+       u32 rqc;
+       struct mvgbe_txdesc *tcsdp;
+       u8 pad15[0x6c0 - 0x684 - 4];
+       struct mvgbe_txdesc *tcqdp[8];
+       u8 pad16[0x700 - 0x6dc - 4];
+       struct mvgbe_tqx tqx[8];
+       u32 pttbc;
+       u8 pad17[0x7a8 - 0x780 - 4];
+       u32 tqxipg0;
+       u32 pad18[3];
+       u32 tqxipg1;
+       u8 pad19[0x7c0 - 0x7b8 - 4];
+       u32 hitkninlopkt;
+       u32 hitkninasyncpkt;
+       u32 lotkninasyncpkt;
+       u32 pad20;
+       u32 ts;
+       u8 pad21[0x3000 - 0x27d0 - 4];
+       u32 pad20_1[32];        /* mib counter registes */
+       u8 pad22[0x3400 - 0x3000 - sizeof(u32) * 32];
+       u32 dfsmt[64];
+       u32 dfomt[64];
+       u32 dfut[4];
+       u8 pad23[0xe20c0 - 0x7360c - 4];
+       u32 pmbus_top_arbiter;
+};
+
+/* structures/enums needed by driver */
+enum mvgbe_adrwin {
+       MVGBE_WIN0,
+       MVGBE_WIN1,
+       MVGBE_WIN2,
+       MVGBE_WIN3,
+       MVGBE_WIN4,
+       MVGBE_WIN5
+};
+
+enum mvgbe_target {
+       MVGBE_TARGET_DRAM,
+       MVGBE_TARGET_DEV,
+       MVGBE_TARGET_CBS,
+       MVGBE_TARGET_PCI0,
+       MVGBE_TARGET_PCI1
+};
+
+struct mvgbe_winparam {
+       enum mvgbe_adrwin win;  /* Window number */
+       enum mvgbe_target target;       /* System targets */
+       u16 attrib;             /* BAR attrib. See above macros */
+       u32 base_addr;          /* Window base address in u32 form */
+       u32 high_addr;          /* Window high address in u32 form */
+       u32 size;               /* Size in MBytes. Must be % 64Kbyte. */
+       int enable;             /* Enable/disable access to the window. */
+       u16 access_ctrl;        /*Access ctrl register. see above macros */
+};
+
+struct mvgbe_rxdesc {
+       u32 cmd_sts;            /* Descriptor command status */
+       u16 buf_size;           /* Buffer size */
+       u16 byte_cnt;           /* Descriptor buffer byte count */
+       u8 *buf_ptr;            /* Descriptor buffer pointer */
+       struct mvgbe_rxdesc *nxtdesc_p; /* Next descriptor pointer */
+};
+
+struct mvgbe_txdesc {
+       u32 cmd_sts;            /* Descriptor command status */
+       u16 l4i_chk;            /* CPU provided TCP Checksum */
+       u16 byte_cnt;           /* Descriptor buffer byte count */
+       u8 *buf_ptr;            /* Descriptor buffer ptr */
+       struct mvgbe_txdesc *nxtdesc_p; /* Next descriptor ptr */
+};
+
+/* port device data struct */
+struct mvgbe_device {
+       struct eth_device dev;
+       struct mvgbe_registers *regs;
+       struct mvgbe_txdesc *p_txdesc;
+       struct mvgbe_rxdesc *p_rxdesc;
+       struct mvgbe_rxdesc *p_rxdesc_curr;
+       u8 *p_rxbuf;
+       u8 *p_aligned_txbuf;
+};
+
+#endif /* __MVGBE_H__ */
index 5fa6f6100836b1bc5b3c9cb9ffeaa046c5d4ec4e..54c4a704a502bbc4a7756e4a020a696e6d8f7ce1 100644 (file)
@@ -95,14 +95,23 @@ static struct tsec_info_struct tsec_info[] = {
 #endif
 };
 
+/*
+ * Initialize all the TSEC devices
+ *
+ * Returns the number of TSEC devices that were initialized
+ */
 int tsec_eth_init(bd_t *bis, struct tsec_info_struct *tsecs, int num)
 {
        int i;
+       int ret, count = 0;
 
-       for (i = 0; i < num; i++)
-               tsec_initialize(bis, &tsecs[i]);
+       for (i = 0; i < num; i++) {
+               ret = tsec_initialize(bis, &tsecs[i]);
+               if (ret > 0)
+                       count += ret;
+       }
 
-       return 0;
+       return count;
 }
 
 int tsec_standard_init(bd_t *bis)
@@ -1631,6 +1640,27 @@ static struct phy_info phy_info_dm9161 = {
        },
 };
 
+/* micrel KSZ804  */
+static struct phy_info phy_info_ksz804 =  {
+       0x0022151,
+       "Micrel KSZ804 PHY",
+       4,
+       (struct phy_cmd[]) { /* config */
+               {PHY_BMCR, PHY_BMCR_RESET, NULL},
+               {PHY_BMCR, PHY_BMCR_AUTON|PHY_BMCR_RST_NEG, NULL},
+               {miim_end,}
+       },
+       (struct phy_cmd[]) { /* startup */
+               {PHY_BMSR, miim_read, NULL},
+               {PHY_BMSR, miim_read, &mii_parse_sr},
+               {PHY_BMSR, miim_read, &mii_parse_link},
+               {miim_end,}
+       },
+       (struct phy_cmd[]) { /* shutdown */
+               {miim_end,}
+       }
+};
+
 /* a generic flavor.  */
 static struct phy_info phy_info_generic =  {
        0,
@@ -1794,6 +1824,7 @@ static struct phy_info *phy_info[] = {
        &phy_info_M88E1145,
        &phy_info_M88E1149S,
        &phy_info_dm9161,
+       &phy_info_ksz804,
        &phy_info_lxt971,
        &phy_info_VSC8211,
        &phy_info_VSC8244,
index 9477851a75e0d3253055654ac26af36bca117504..56eee7bee60551e4147f0f4a0c3557e0eeb6ef3b 100644 (file)
@@ -225,7 +225,7 @@ int uli526x_initialize(bd_t *bis)
                iobase &= ~0xf;
 
                dev = (struct eth_device *)malloc(sizeof *dev);
-               sprintf(dev->name, "uli526x#%d\n", card_number);
+               sprintf(dev->name, "uli526x#%d", card_number);
                db = (struct uli526x_board_info *)
                        malloc(sizeof(struct uli526x_board_info));
 
index f28d42b4893d5a30499af9e3ffc821eee03e3877..e0ad0298d8abd1b6574e9b5f59ed18bff895ea22 100644 (file)
@@ -13,6 +13,8 @@
 #include <spi.h>
 
 #include <asm/blackfin.h>
+#include <asm/gpio.h>
+#include <asm/portmux.h>
 #include <asm/mach-common/bits/spi.h>
 
 struct bfin_spi_slave {
@@ -33,54 +35,110 @@ MAKE_SPI_FUNC(SPI_BAUD, 0x14)
 
 #define to_bfin_spi_slave(s) container_of(s, struct bfin_spi_slave, slave)
 
-__attribute__((weak))
+#define MAX_CTRL_CS 7
+
+#define gpio_cs(cs) ((cs) - MAX_CTRL_CS)
+#ifdef CONFIG_BFIN_SPI_GPIO_CS
+# define is_gpio_cs(cs) ((cs) > MAX_CTRL_CS)
+#else
+# define is_gpio_cs(cs) 0
+#endif
+
 int spi_cs_is_valid(unsigned int bus, unsigned int cs)
 {
-#if defined(__ADSPBF538__) || defined(__ADSPBF539__)
-       /* The SPI1/SPI2 buses are weird ... only 1 CS */
-       if (bus > 0 && cs != 1)
-               return 0;
-#endif
-       return (cs >= 1 && cs <= 7);
+       if (is_gpio_cs(cs))
+               return gpio_is_valid(gpio_cs(cs));
+       else
+               return (cs >= 1 && cs <= MAX_CTRL_CS);
 }
 
-__attribute__((weak))
 void spi_cs_activate(struct spi_slave *slave)
 {
        struct bfin_spi_slave *bss = to_bfin_spi_slave(slave);
-       write_SPI_FLG(bss,
-               (read_SPI_FLG(bss) &
-               ~((!bss->flg << 8) << slave->cs)) |
-               (1 << slave->cs));
+
+       if (is_gpio_cs(slave->cs)) {
+               unsigned int cs = gpio_cs(slave->cs);
+               gpio_set_value(cs, bss->flg);
+               debug("%s: SPI_CS_GPIO:%x\n", __func__, gpio_get_value(cs));
+       } else {
+               write_SPI_FLG(bss,
+                       (read_SPI_FLG(bss) &
+                       ~((!bss->flg << 8) << slave->cs)) |
+                       (1 << slave->cs));
+               debug("%s: SPI_FLG:%x\n", __func__, read_SPI_FLG(bss));
+       }
+
        SSYNC();
-       debug("%s: SPI_FLG:%x\n", __func__, read_SPI_FLG(bss));
 }
 
-__attribute__((weak))
 void spi_cs_deactivate(struct spi_slave *slave)
 {
        struct bfin_spi_slave *bss = to_bfin_spi_slave(slave);
-       u16 flg;
-
-       /* make sure we force the cs to deassert rather than let the
-        * pin float back up.  otherwise, exact timings may not be
-        * met some of the time leading to random behavior (ugh).
-        */
-       flg = read_SPI_FLG(bss) | ((!bss->flg << 8) << slave->cs);
-       write_SPI_FLG(bss, flg);
-       SSYNC();
-       debug("%s: SPI_FLG:%x\n", __func__, read_SPI_FLG(bss));
 
-       flg &= ~(1 << slave->cs);
-       write_SPI_FLG(bss, flg);
+       if (is_gpio_cs(slave->cs)) {
+               unsigned int cs = gpio_cs(slave->cs);
+               gpio_set_value(cs, !bss->flg);
+               debug("%s: SPI_CS_GPIO:%x\n", __func__, gpio_get_value(cs));
+       } else {
+               u16 flg;
+
+               /* make sure we force the cs to deassert rather than let the
+                * pin float back up.  otherwise, exact timings may not be
+                * met some of the time leading to random behavior (ugh).
+                */
+               flg = read_SPI_FLG(bss) | ((!bss->flg << 8) << slave->cs);
+               write_SPI_FLG(bss, flg);
+               SSYNC();
+               debug("%s: SPI_FLG:%x\n", __func__, read_SPI_FLG(bss));
+
+               flg &= ~(1 << slave->cs);
+               write_SPI_FLG(bss, flg);
+               debug("%s: SPI_FLG:%x\n", __func__, read_SPI_FLG(bss));
+       }
+
        SSYNC();
-       debug("%s: SPI_FLG:%x\n", __func__, read_SPI_FLG(bss));
 }
 
 void spi_init()
 {
 }
 
+#ifdef SPI_CTL
+# define SPI0_CTL SPI_CTL
+#endif
+
+#define SPI_PINS(n) \
+       [n] = { 0, P_SPI##n##_SCK, P_SPI##n##_MISO, P_SPI##n##_MOSI, 0 }
+static unsigned short pins[][5] = {
+#ifdef SPI0_CTL
+       SPI_PINS(0),
+#endif
+#ifdef SPI1_CTL
+       SPI_PINS(1),
+#endif
+#ifdef SPI2_CTL
+       SPI_PINS(2),
+#endif
+};
+
+#define SPI_CS_PINS(n) \
+       [n] = { \
+               P_SPI##n##_SSEL1, P_SPI##n##_SSEL2, P_SPI##n##_SSEL3, \
+               P_SPI##n##_SSEL4, P_SPI##n##_SSEL5, P_SPI##n##_SSEL6, \
+               P_SPI##n##_SSEL7, \
+       }
+static const unsigned short cs_pins[][7] = {
+#ifdef SPI0_CTL
+       SPI_CS_PINS(0),
+#endif
+#ifdef SPI1_CTL
+       SPI_CS_PINS(1),
+#endif
+#ifdef SPI2_CTL
+       SPI_CS_PINS(2),
+#endif
+};
+
 struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
                unsigned int max_hz, unsigned int mode)
 {
@@ -92,11 +150,14 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
        if (!spi_cs_is_valid(bus, cs))
                return NULL;
 
+       if (bus >= ARRAY_SIZE(pins) || pins[bus] == NULL) {
+               debug("%s: invalid bus %u\n", __func__, bus);
+               return NULL;
+       }
        switch (bus) {
-#ifdef SPI_CTL
-# define SPI0_CTL SPI_CTL
-#endif
+#ifdef SPI0_CTL
                case 0: mmr_base = SPI0_CTL; break;
+#endif
 #ifdef SPI1_CTL
                case 1: mmr_base = SPI1_CTL; break;
 #endif
@@ -142,168 +203,21 @@ void spi_free_slave(struct spi_slave *slave)
        free(bss);
 }
 
-static void spi_portmux(struct spi_slave *slave)
-{
-#if defined(__ADSPBF51x__)
-#define SET_MUX(port, mux, func) port##_mux = ((port##_mux & ~PORT_x_MUX_##mux##_MASK) | PORT_x_MUX_##mux##_FUNC_##func)
-       u16 f_mux = bfin_read_PORTF_MUX();
-       u16 f_fer = bfin_read_PORTF_FER();
-       u16 g_mux = bfin_read_PORTG_MUX();
-       u16 g_fer = bfin_read_PORTG_FER();
-       u16 h_mux = bfin_read_PORTH_MUX();
-       u16 h_fer = bfin_read_PORTH_FER();
-       switch (slave->bus) {
-       case 0:
-               /* set SCK/MISO/MOSI */
-               SET_MUX(g, 7, 1);
-               g_fer |= PG12 | PG13 | PG14;
-               switch (slave->cs) {
-                       case 1: SET_MUX(f, 2, 1); f_fer |= PF7;  break;
-                       case 2: /* see G above */ g_fer |= PG15; break;
-                       case 3: SET_MUX(h, 1, 3); f_fer |= PH4;  break;
-                       case 4: /* no muxing */   h_fer |= PH8;  break;
-                       case 5: SET_MUX(g, 1, 3); h_fer |= PG3;  break;
-                       case 6: /* no muxing */                  break;
-                       case 7: /* no muxing */                  break;
-               }
-       case 1:
-               /* set SCK/MISO/MOSI */
-               SET_MUX(h, 0, 2);
-               h_fer |= PH1 | PH2 | PH3;
-               switch (slave->cs) {
-                       case 1: SET_MUX(h, 2, 3); h_fer |= PH6;  break;
-                       case 2: SET_MUX(f, 0, 3); f_fer |= PF0;  break;
-                       case 3: SET_MUX(g, 0, 3); g_fer |= PG0;  break;
-                       case 4: SET_MUX(f, 3, 3); f_fer |= PF8;  break;
-                       case 5: SET_MUX(g, 6, 3); h_fer |= PG11; break;
-                       case 6: /* no muxing */                  break;
-                       case 7: /* no muxing */                  break;
-               }
-       }
-       bfin_write_PORTF_MUX(f_mux);
-       bfin_write_PORTF_FER(f_fer);
-       bfin_write_PORTG_MUX(g_mux);
-       bfin_write_PORTG_FER(g_fer);
-       bfin_write_PORTH_MUX(h_mux);
-       bfin_write_PORTH_FER(h_fer);
-#elif defined(__ADSPBF52x__)
-#define SET_MUX(port, mux, func) port##_mux = ((port##_mux & ~PORT_x_MUX_##mux##_MASK) | PORT_x_MUX_##mux##_FUNC_##func)
-       u16 f_mux = bfin_read_PORTF_MUX();
-       u16 f_fer = bfin_read_PORTF_FER();
-       u16 g_mux = bfin_read_PORTG_MUX();
-       u16 g_fer = bfin_read_PORTG_FER();
-       u16 h_mux = bfin_read_PORTH_MUX();
-       u16 h_fer = bfin_read_PORTH_FER();
-       /* set SCK/MISO/MOSI */
-       SET_MUX(g, 0, 3);
-       g_fer |= PG2 | PG3 | PG4;
-       switch (slave->cs) {
-               case 1: /* see G above */ g_fer |= PG1;  break;
-               case 2: SET_MUX(f, 4, 3); f_fer |= PF12; break;
-               case 3: SET_MUX(f, 4, 3); f_fer |= PF13; break;
-               case 4: SET_MUX(h, 1, 1); h_fer |= PH8;  break;
-               case 5: SET_MUX(h, 2, 1); h_fer |= PH9;  break;
-               case 6: SET_MUX(f, 1, 3); f_fer |= PF9;  break;
-               case 7: SET_MUX(f, 2, 3); f_fer |= PF10; break;
-       }
-       bfin_write_PORTF_MUX(f_mux);
-       bfin_write_PORTF_FER(f_fer);
-       bfin_write_PORTG_MUX(g_mux);
-       bfin_write_PORTG_FER(g_fer);
-       bfin_write_PORTH_MUX(h_mux);
-       bfin_write_PORTH_FER(h_fer);
-#elif defined(__ADSPBF534__) || defined(__ADSPBF536__) || defined(__ADSPBF537__)
-       u16 mux = bfin_read_PORT_MUX();
-       u16 f_fer = bfin_read_PORTF_FER();
-       /* set SCK/MISO/MOSI */
-       f_fer |= PF11 | PF12 | PF13;
-       switch (slave->cs) {
-               case 1: f_fer |= PF10; break;
-               case 2: mux |= PJSE; break;
-               case 3: mux |= PJSE; break;
-               case 4: mux |= PFS4E; f_fer |= PF6; break;
-               case 5: mux |= PFS5E; f_fer |= PF5; break;
-               case 6: mux |= PFS6E; f_fer |= PF4; break;
-               case 7: mux |= PJCE_SPI; break;
-       }
-       bfin_write_PORT_MUX(mux);
-       bfin_write_PORTF_FER(f_fer);
-#elif defined(__ADSPBF538__) || defined(__ADSPBF539__)
-       u16 fer, pins;
-       if (slave->bus == 1)
-               pins = PD0 | PD1 | PD2 | (slave->cs == 1 ? PD4 : 0);
-       else if (slave->bus == 2)
-               pins = PD5 | PD6 | PD7 | (slave->cs == 1 ? PD9 : 0);
-       else
-               pins = 0;
-       if (pins) {
-               fer = bfin_read_PORTDIO_FER();
-               fer &= ~pins;
-               bfin_write_PORTDIO_FER(fer);
-       }
-#elif defined(__ADSPBF54x__)
-#define DO_MUX(port, pin) \
-       mux = ((mux & ~PORT_x_MUX_##pin##_MASK) | PORT_x_MUX_##pin##_FUNC_1); \
-       fer |= P##port##pin;
-       u32 mux;
-       u16 fer;
-       switch (slave->bus) {
-       case 0:
-               mux = bfin_read_PORTE_MUX();
-               fer = bfin_read_PORTE_FER();
-               /* set SCK/MISO/MOSI */
-               DO_MUX(E, 0);
-               DO_MUX(E, 1);
-               DO_MUX(E, 2);
-               switch (slave->cs) {
-                       case 1: DO_MUX(E, 4); break;
-                       case 2: DO_MUX(E, 5); break;
-                       case 3: DO_MUX(E, 6); break;
-               }
-               bfin_write_PORTE_MUX(mux);
-               bfin_write_PORTE_FER(fer);
-               break;
-       case 1:
-               mux = bfin_read_PORTG_MUX();
-               fer = bfin_read_PORTG_FER();
-               /* set SCK/MISO/MOSI */
-               DO_MUX(G, 8);
-               DO_MUX(G, 9);
-               DO_MUX(G, 10);
-               switch (slave->cs) {
-                       case 1: DO_MUX(G, 5); break;
-                       case 2: DO_MUX(G, 6); break;
-                       case 3: DO_MUX(G, 7); break;
-               }
-               bfin_write_PORTG_MUX(mux);
-               bfin_write_PORTG_FER(fer);
-               break;
-       case 2:
-               mux = bfin_read_PORTB_MUX();
-               fer = bfin_read_PORTB_FER();
-               /* set SCK/MISO/MOSI */
-               DO_MUX(B, 12);
-               DO_MUX(B, 13);
-               DO_MUX(B, 14);
-               switch (slave->cs) {
-                       case 1: DO_MUX(B, 9);  break;
-                       case 2: DO_MUX(B, 10); break;
-                       case 3: DO_MUX(B, 11); break;
-               }
-               bfin_write_PORTB_MUX(mux);
-               bfin_write_PORTB_FER(fer);
-               break;
-       }
-#endif
-}
-
 int spi_claim_bus(struct spi_slave *slave)
 {
        struct bfin_spi_slave *bss = to_bfin_spi_slave(slave);
 
        debug("%s: bus:%i cs:%i\n", __func__, slave->bus, slave->cs);
 
-       spi_portmux(slave);
+       if (is_gpio_cs(slave->cs)) {
+               unsigned int cs = gpio_cs(slave->cs);
+               gpio_request(cs, "bfin-spi");
+               gpio_direction_output(cs, !bss->flg);
+               pins[slave->bus][0] = P_DONTCARE;
+       } else
+               pins[slave->bus][0] = cs_pins[slave->bus][slave->cs - 1];
+       peripheral_request_list(pins[slave->bus], "bfin-spi");
+
        write_SPI_CTL(bss, bss->ctl);
        write_SPI_BAUD(bss, bss->baud);
        SSYNC();
@@ -314,7 +228,13 @@ int spi_claim_bus(struct spi_slave *slave)
 void spi_release_bus(struct spi_slave *slave)
 {
        struct bfin_spi_slave *bss = to_bfin_spi_slave(slave);
+
        debug("%s: bus:%i cs:%i\n", __func__, slave->bus, slave->cs);
+
+       peripheral_free_list(pins[slave->bus]);
+       if (is_gpio_cs(slave->cs))
+               gpio_free(gpio_cs(slave->cs));
+
        write_SPI_CTL(bss, 0);
        SSYNC();
 }
index c51a05028a5e09ed03657fae9696000d55991c16..00e826689f31b5001d3a3846c74088fab29254a4 100644 (file)
@@ -240,7 +240,7 @@ static void dump_eeprom(struct eth_device *dev)
 static int smc911x_init(struct eth_device *dev)
 {
        /* See if there is anything there */
-       if (!smc911x_detect_chip(dev))
+       if (smc911x_detect_chip(dev))
                return 1;
 
        smc911x_reset(dev);
index 1e821d9084c06914e8da585513982d372a80c53e..6eec1c91a7e870c9a731ee497e1d13ef44d51e95 100644 (file)
 #if !defined(__ADSPBF512__) && !defined(__ADSPBF514__)
 #define ADI_CMDS_NETWORK       1
 #define CONFIG_BFIN_MAC
+#define CONFIG_BFIN_MAC_PINS \
+       { \
+       P_MII0_ETxD0, \
+       P_MII0_ETxD1, \
+       P_MII0_ETxD2, \
+       P_MII0_ETxD3, \
+       P_MII0_ETxEN, \
+       P_MII0_TxCLK, \
+       P_MII0_PHYINT, \
+       P_MII0_COL, \
+       P_MII0_ERxD0, \
+       P_MII0_ERxD1, \
+       P_MII0_ERxD2, \
+       P_MII0_ERxD3, \
+       P_MII0_ERxDV, \
+       P_MII0_ERxCLK, \
+       P_MII0_CRS, \
+       P_MII0_MDC, \
+       P_MII0_MDIO, \
+       0 }
 #define CONFIG_NETCONSOLE      1
 #define CONFIG_NET_MULTI       1
 #endif
  */
 #define CONFIG_BFIN_TWI_I2C    1
 #define CONFIG_HARD_I2C                1
-#define CONFIG_SYS_I2C_SPEED   50000
-#define CONFIG_SYS_I2C_SLAVE   0
 
 
 /*
index 711fa27b4464dee4a5eeee8357ffd304e4e5fe53..82396d0ed2582f685f3aee687c0ccdf20519355e 100644 (file)
  */
 #define CONFIG_BFIN_TWI_I2C    1
 #define CONFIG_HARD_I2C                1
-#define CONFIG_SYS_I2C_SPEED   50000
-#define CONFIG_SYS_I2C_SLAVE   0
 
 
 /*
 /* define to enable run status via led */
 /* #define CONFIG_STATUS_LED */
 #ifdef CONFIG_STATUS_LED
+#define CONFIG_GPIO_LED
 #define CONFIG_BOARD_SPECIFIC_LED
-#ifndef __ASSEMBLY__
-typedef unsigned int led_id_t;
-void __led_init(led_id_t mask, int state);
-void __led_set(led_id_t mask, int state);
-void __led_toggle(led_id_t mask);
-#endif
 /* use LED0 to indicate booting/alive */
 #define STATUS_LED_BOOT 0
-#define STATUS_LED_BIT 1
+#define STATUS_LED_BIT GPIO_PF8
 #define STATUS_LED_STATE STATUS_LED_ON
 #define STATUS_LED_PERIOD (CONFIG_SYS_HZ / 4)
 /* use LED1 to indicate crash */
 #define STATUS_LED_CRASH 1
-#define STATUS_LED_BIT1 2
+#define STATUS_LED_BIT1 GPIO_PG11
 #define STATUS_LED_STATE1 STATUS_LED_ON
 #define STATUS_LED_PERIOD1 (CONFIG_SYS_HZ / 2)
+/* #define STATUS_LED_BIT2 GPIO_PG12 */
 #endif
 
 
diff --git a/include/configs/bf527-ad7160-eval.h b/include/configs/bf527-ad7160-eval.h
new file mode 100644 (file)
index 0000000..eb3a2b7
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+ * U-boot - Configuration file for BF527 AD7160-EVAL board
+ */
+
+#ifndef __CONFIG_BF527_AD7160_EVAL_H__
+#define __CONFIG_BF527_AD7160_EVAL_H__
+
+#include <asm/config-pre.h>
+
+
+/*
+ * Processor Settings
+ */
+#define CONFIG_BFIN_CPU             bf527-0.2
+#define CONFIG_BFIN_BOOT_MODE       BFIN_BOOT_SPI_MASTER
+
+
+/*
+ * Clock Settings
+ *     CCLK = (CLKIN * VCO_MULT) / CCLK_DIV
+ *     SCLK = (CLKIN * VCO_MULT) / SCLK_DIV
+ */
+/* CONFIG_CLKIN_HZ is any value in Hz                                  */
+#define CONFIG_CLKIN_HZ                        24000000
+/* CLKIN_HALF controls the DF bit in PLL_CTL      0 = CLKIN            */
+/*                                                1 = CLKIN / 2                */
+#define CONFIG_CLKIN_HALF              0
+/* PLL_BYPASS controls the BYPASS bit in PLL_CTL  0 = do not bypass    */
+/*                                                1 = bypass PLL       */
+#define CONFIG_PLL_BYPASS              0
+/* VCO_MULT controls the MSEL (multiplier) bits in PLL_CTL             */
+/* Values can range from 0-63 (where 0 means 64)                       */
+#define CONFIG_VCO_MULT                        25
+/* CCLK_DIV controls the core clock divider                            */
+/* Values can be 1, 2, 4, or 8 ONLY                                    */
+#define CONFIG_CCLK_DIV                        1
+/* SCLK_DIV controls the system clock divider                          */
+/* Values can range from 1-15                                          */
+#define CONFIG_SCLK_DIV                        5
+
+
+/*
+ * Memory Settings
+ */
+#define CONFIG_MEM_ADD_WDTH    10
+#define CONFIG_MEM_SIZE                64
+
+#define CONFIG_EBIU_SDRRC_VAL  0x03F6
+#define CONFIG_EBIU_SDGCTL_VAL (SCTLE | CL_3 | PASR_ALL | TRAS_6 | TRP_3 | TRCD_3 | TWR_2 | PSS)
+
+#define CONFIG_EBIU_AMGCTL_VAL (AMCKEN | AMBEN_ALL)
+#define CONFIG_EBIU_AMBCTL0_VAL        (B1WAT_15 | B1RAT_15 | B1HT_3 | B1RDYPOL | B0WAT_15 | B0RAT_15 | B0HT_3 | B0RDYPOL)
+#define CONFIG_EBIU_AMBCTL1_VAL        (B3WAT_15 | B3RAT_15 | B3HT_3 | B3RDYPOL | B2WAT_15 | B2RAT_15 | B2HT_3 | B2RDYPOL)
+
+#define CONFIG_SYS_MONITOR_LEN (768 * 1024)
+#define CONFIG_SYS_MALLOC_LEN  (640 * 1024)
+
+
+/*
+ * NAND Settings
+ * (can't be used same time as ethernet)
+ */
+#if (CONFIG_BFIN_BOOT_MODE == BFIN_BOOT_NAND)
+# define CONFIG_BFIN_NFC
+# define CONFIG_BFIN_NFC_BOOTROM_ECC
+#endif
+#ifdef CONFIG_BFIN_NFC
+#define CONFIG_BFIN_NFC_CTL_VAL        0x0033
+#define CONFIG_DRIVER_NAND_BFIN
+#define CONFIG_SYS_NAND_BASE           0 /* not actually used */
+#define CONFIG_SYS_MAX_NAND_DEVICE     1
+#define NAND_MAX_CHIPS         1
+#endif
+
+
+/*
+ * Flash Settings
+ */
+#define CONFIG_FLASH_CFI_DRIVER
+#define CONFIG_SYS_FLASH_BASE          0x20000000
+#define CONFIG_SYS_FLASH_CFI
+#define CONFIG_SYS_FLASH_PROTECTION
+#define CONFIG_SYS_MAX_FLASH_BANKS     1
+#define CONFIG_SYS_MAX_FLASH_SECT      259
+
+
+/*
+ * SPI Settings
+ */
+#define CONFIG_BFIN_SPI
+#define CONFIG_ENV_SPI_MAX_HZ  30000000
+#define CONFIG_SF_DEFAULT_SPEED        30000000
+#define CONFIG_SPI_FLASH
+#define CONFIG_SPI_FLASH_STMICRO
+
+
+/*
+ * Env Storage Settings
+ */
+#if (CONFIG_BFIN_BOOT_MODE == BFIN_BOOT_SPI_MASTER)
+#define CONFIG_ENV_IS_IN_SPI_FLASH
+#define CONFIG_ENV_OFFSET      0x10000
+#define CONFIG_ENV_SIZE                0x2000
+#define CONFIG_ENV_SECT_SIZE   0x10000
+#define CONFIG_ENV_IS_EMBEDDED_IN_LDR
+#elif (CONFIG_BFIN_BOOT_MODE == BFIN_BOOT_NAND)
+#define CONFIG_ENV_IS_IN_NAND
+#define CONFIG_ENV_OFFSET      0x40000
+#define CONFIG_ENV_SIZE                0x20000
+#else
+#define CONFIG_ENV_IS_IN_FLASH
+#define CONFIG_ENV_OFFSET      0x4000
+#define CONFIG_ENV_ADDR                (CONFIG_SYS_FLASH_BASE + CONFIG_ENV_OFFSET)
+#define CONFIG_ENV_SIZE                0x2000
+#define CONFIG_ENV_SECT_SIZE   0x2000
+#define CONFIG_ENV_IS_EMBEDDED_IN_LDR
+#endif
+
+
+/*
+ * I2C Settings
+ */
+#define CONFIG_BFIN_TWI_I2C    1
+#define CONFIG_HARD_I2C                1
+
+
+/*
+ * SPI_MMC Settings
+ */
+#define CONFIG_MMC
+#define CONFIG_CMD_EXT2
+#define CONFIG_SPI_MMC
+#define CONFIG_SPI_MMC_DEFAULT_CS (7 + GPIO_PH3)
+
+
+/*
+ * Misc Settings
+ */
+#define CONFIG_MISC_INIT_R
+#define CONFIG_UART_CONSOLE    0
+
+
+/*
+ * Pull in common ADI header for remaining command/environment setup
+ */
+#include <configs/bfin_adi_common.h>
+
+#endif
index 7800c3276aedf8b19d43287c7e833fe226d4a241..07e4ce86e1287c1e28c6516e2b6285c9acbdb4d9 100644 (file)
  */
 #define CONFIG_BFIN_TWI_I2C    1
 #define CONFIG_HARD_I2C                1
-#define CONFIG_SYS_I2C_SPEED   50000
-#define CONFIG_SYS_I2C_SLAVE   0
 
 
 /*
index c80ddcabdf2c8cc3c1db03d961ce35987c229894..37a70592f8b42f896fe7155d6c018d45d593bb7b 100644 (file)
        } while (0)
 #define I2C_DELAY              udelay(5)       /* 1/4 I2C clock duration */
 
-#define CONFIG_SYS_I2C_SPEED           50000
-#define CONFIG_SYS_I2C_SLAVE           0
 #endif
 
 
index 80c48847e42cf34a602b056a4fd1a96fe2132b4b..02c8bc3c36e8ef2d546cdfdab10772f4d7f7d760 100644 (file)
        } while (0)
 #define I2C_DELAY              udelay(5)       /* 1/4 I2C clock duration */
 
-#define CONFIG_SYS_I2C_SPEED           50000
-#define CONFIG_SYS_I2C_SLAVE           0
 #endif
 
 
 /* define to enable run status via led */
 /* #define CONFIG_STATUS_LED */
 #ifdef CONFIG_STATUS_LED
+#define CONFIG_GPIO_LED
 #define CONFIG_BOARD_SPECIFIC_LED
-#ifndef __ASSEMBLY__
-typedef unsigned int led_id_t;
-void __led_init(led_id_t mask, int state);
-void __led_set(led_id_t mask, int state);
-void __led_toggle(led_id_t mask);
-#endif
-/* use LED1 to indicate booting/alive */
+/* use LED0 to indicate booting/alive */
 #define STATUS_LED_BOOT 0
-#define STATUS_LED_BIT 1
+#define STATUS_LED_BIT GPIO_PF2
 #define STATUS_LED_STATE STATUS_LED_ON
 #define STATUS_LED_PERIOD (CONFIG_SYS_HZ / 4)
-/* use LED2 to indicate crash */
+/* use LED1 to indicate crash */
 #define STATUS_LED_CRASH 1
-#define STATUS_LED_BIT1 2
+#define STATUS_LED_BIT1 GPIO_PF3
 #define STATUS_LED_STATE1 STATUS_LED_ON
 #define STATUS_LED_PERIOD1 (CONFIG_SYS_HZ / 2)
+/* #define STATUS_LED_BIT2 GPIO_PF4 */
 #endif
 
 /* define to enable splash screen support */
index cf40d06b8868e47040c48ff5aa45fd911ae0c403..39bbb41fb3e0ee2719fafbbb57599efe6f34bbfe 100644 (file)
 
 #define BFIN_NAND_CLE(chip) ((unsigned long)(chip)->IO_ADDR_W | (1 << 2))
 #define BFIN_NAND_ALE(chip) ((unsigned long)(chip)->IO_ADDR_W | (1 << 1))
-#define BFIN_NAND_READY     PF12
 #define BFIN_NAND_WRITE(addr, cmd) \
        do { \
                bfin_write8(addr, cmd); \
 
 #define NAND_PLAT_WRITE_CMD(chip, cmd) BFIN_NAND_WRITE(BFIN_NAND_CLE(chip), cmd)
 #define NAND_PLAT_WRITE_ADR(chip, cmd) BFIN_NAND_WRITE(BFIN_NAND_ALE(chip), cmd)
-#define NAND_PLAT_DEV_READY(chip)      (bfin_read_PORTHIO() & BFIN_NAND_READY)
-#define NAND_PLAT_INIT() \
-       do { \
-               bfin_write_PORTH_FER(bfin_read_PORTH_FER() & ~BFIN_NAND_READY); \
-               bfin_write_PORTHIO_DIR(bfin_read_PORTHIO_DIR() & ~BFIN_NAND_READY); \
-               bfin_write_PORTHIO_INEN(bfin_read_PORTHIO_INEN() | BFIN_NAND_READY); \
-       } while (0)
+#define NAND_PLAT_GPIO_DEV_READY       GPIO_PF12
 
 
 /*
  */
 #define CONFIG_BFIN_TWI_I2C    1
 #define CONFIG_HARD_I2C                1
-#define CONFIG_SYS_I2C_SPEED           50000
-#define CONFIG_SYS_I2C_SLAVE           0
 
 
 /*
index 92ceb3815b67e0209228d7900f06fd9eb3ffc062..96704d77b060a538df3943ca0a431babec484514 100644 (file)
  */
 #define CONFIG_BFIN_TWI_I2C    1
 #define CONFIG_HARD_I2C                1
-#define CONFIG_SYS_I2C_SPEED   50000
-#define CONFIG_SYS_I2C_SLAVE   0
 
 
 /*
 
 #define BFIN_NAND_CLE(chip) ((unsigned long)(chip)->IO_ADDR_W | (1 << 2))
 #define BFIN_NAND_ALE(chip) ((unsigned long)(chip)->IO_ADDR_W | (1 << 1))
-#define BFIN_NAND_READY     PF3
 #define BFIN_NAND_WRITE(addr, cmd) \
        do { \
                bfin_write8(addr, cmd); \
 
 #define NAND_PLAT_WRITE_CMD(chip, cmd) BFIN_NAND_WRITE(BFIN_NAND_CLE(chip), cmd)
 #define NAND_PLAT_WRITE_ADR(chip, cmd) BFIN_NAND_WRITE(BFIN_NAND_ALE(chip), cmd)
-#define NAND_PLAT_DEV_READY(chip)      (bfin_read_PORTFIO() & BFIN_NAND_READY)
-#define NAND_PLAT_INIT() \
-       do { \
-               bfin_write_PORTF_FER(bfin_read_PORTF_FER() & ~BFIN_NAND_READY); \
-               bfin_write_PORTFIO_DIR(bfin_read_PORTFIO_DIR() & ~BFIN_NAND_READY); \
-               bfin_write_PORTFIO_INEN(bfin_read_PORTFIO_INEN() | BFIN_NAND_READY); \
-       } while (0)
+#define NAND_PLAT_GPIO_DEV_READY       GPIO_PF3
 
 
 /*
 #define CONFIG_RTC_BFIN
 #define CONFIG_UART_CONSOLE    0
 
-/* #define CONFIG_BF537_STAMP_LEDCMD   1 */
-
 /* Define if want to do post memory test */
 #undef CONFIG_POST
 #ifdef CONFIG_POST
index 59e05650ec1233c09e0efb89f90e32cdb95e6af4..1c14b6bdd37a69b55a0b8c327938a38be3e6d30b 100644 (file)
  */
 #define CONFIG_BFIN_TWI_I2C    1
 #define CONFIG_HARD_I2C                1
-#define CONFIG_SYS_I2C_SPEED   50000
-#define CONFIG_SYS_I2C_SLAVE   0
 
 
 /*
index f9c97114ad060792ba68d165296d5b1f8bd87233..60cca0c07a37ea69aad2b611ba2194d0e88836e6 100644 (file)
  */
 #define CONFIG_BFIN_TWI_I2C    1
 #define CONFIG_HARD_I2C                1
-#define CONFIG_SYS_I2C_SPEED   50000
-#define CONFIG_SYS_I2C_SLAVE   0
 
 
 /*
index 0be170c3ee8ed41e7e6e2ba8883aa7d684195c48..0c0204fbd79c76ce51c2e751c71b1c520befae8e 100644 (file)
 #define CONFIG_ENV_SECT_SIZE           (1056 * 8)
 #define CONFIG_ENV_OFFSET                      ((16 + 256) * 1056)
 #define CONFIG_ENV_SIZE                                (8 * 1056)
-#define CONFIG_ENV_OFFSET_REDUND       (CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE)
 
 
 /*
 
 #define BFIN_NAND_CLE(chip) ((unsigned long)(chip)->IO_ADDR_W | (1 << 2))
 #define BFIN_NAND_ALE(chip) ((unsigned long)(chip)->IO_ADDR_W | (1 << 3))
-#define BFIN_NAND_READY     PF10
 #define BFIN_NAND_WRITE(addr, cmd) \
        do { \
                bfin_write8(addr, cmd); \
 
 #define NAND_PLAT_WRITE_CMD(chip, cmd) BFIN_NAND_WRITE(BFIN_NAND_CLE(chip), cmd)
 #define NAND_PLAT_WRITE_ADR(chip, cmd) BFIN_NAND_WRITE(BFIN_NAND_ALE(chip), cmd)
-#define NAND_PLAT_DEV_READY(chip)      (bfin_read_FIO0_FLAG_D() & BFIN_NAND_READY)
-#define NAND_PLAT_INIT() \
-       do { \
-               bfin_write_FIO0_DIR(bfin_read_FIO0_DIR() & ~BFIN_NAND_READY); \
-               bfin_write_FIO0_INEN(bfin_read_FIO0_INEN() | BFIN_NAND_READY); \
-       } while (0)
+#define NAND_PLAT_GPIO_DEV_READY       GPIO_PF10
 
 
 /*
index 1e3fdef64a36234ab9a92f16839e2ed79ae05312..036bfe412faa7ffea9b777202e38071a6800c75e 100644 (file)
        } while (0)
 #define I2C_DELAY              udelay(5)       /* 1/4 I2C clock duration */
 
-#define CONFIG_SYS_I2C_SPEED           50000
-#define CONFIG_SYS_I2C_SLAVE           0
 #endif
 
 
index 1896cf53d57d81fe3eb513f35a7afa61c094e0a2..901a32fb725d561cfed482d3ddc674c6e0c9c470 100644 (file)
@@ -83,6 +83,7 @@
 # define CONFIG_CMD_CPLBINFO
 # define CONFIG_CMD_ELF
 # define CONFIG_ELF_SIMPLE_LOAD
+# define CONFIG_CMD_GPIO
 # define CONFIG_CMD_KGDB
 # define CONFIG_CMD_REGINFO
 # define CONFIG_CMD_STRINGS
 #   define CONFIG_SYS_AUTOLOAD "no"
 #  endif
 # endif
+# define CONFIG_IP_DEFRAG
 # define CONFIG_NET_RETRY_COUNT 20
 #endif
 
+/*
+ * I2C Settings
+ */
+#if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)
+# ifndef CONFIG_SYS_I2C_SPEED
+#  define CONFIG_SYS_I2C_SPEED 50000
+# endif
+# ifndef CONFIG_SYS_I2C_SLAVE
+#  define CONFIG_SYS_I2C_SLAVE 0
+# endif
+#endif
+
 /*
  * Misc Settings
  */
+#define CONFIG_BFIN_SPI_GPIO_CS /* Only matters if BFIN_SPI is enabled */
 #define CONFIG_LZMA
 
 #endif
index ad1dd1296409418d13b96fc26123654f005b7fa1..e0c6d53b2c7abf7273b5e303c68eba718dc203c9 100644 (file)
  */
 #define CONFIG_BFIN_TWI_I2C    1
 #define CONFIG_HARD_I2C                1
-#define CONFIG_SYS_I2C_SPEED   50000
-#define CONFIG_SYS_I2C_SLAVE   0
 
 
 /*
index 8d0bc1232f001ce1f3d964aec51293b3b002e86c..742df9c0199159fe6b4b9399d7d27ac3323935ac 100644 (file)
  */
 #define CONFIG_BFIN_TWI_I2C    1
 #define CONFIG_HARD_I2C                1
-#define CONFIG_SYS_I2C_SPEED   50000
-#define CONFIG_SYS_I2C_SLAVE   0
 
 
 /*
index bbea3ab00991acfeb88b46df865d8ceece5f331a..9def99f728302bd865b6fedc700c4b26169a1b54 100644 (file)
  */
 #define CONFIG_BFIN_TWI_I2C    1
 #define CONFIG_HARD_I2C                1
-#define CONFIG_SYS_I2C_SPEED   50000
-#define CONFIG_SYS_I2C_SLAVE   0
 
 
 /*
index 93c4c8ddc1ac71ff3954b1cd7f28f58d608fb3f6..63b9399e142dd4437664b3f93bd5f2bfc290373f 100644 (file)
  */
 #define CONFIG_BFIN_TWI_I2C    1
 #define CONFIG_HARD_I2C                1
-#define CONFIG_SYS_I2C_SPEED   50000
-#define CONFIG_SYS_I2C_SLAVE   0
 
 
 /*
index b4fda767310e88c0e18c68cf2a234dd8d8583e1e..049298cfa3635bb5072cfde93d4bc290362c8f65 100644 (file)
        (CONFIG_SYS_MEMTEST_START + PHYS_SDRAM_SIZE - 512 * 1024)
 
 #define CONFIG_NET_MULTI               1
-#ifdef CONFIG_NET_MULTI
 #define CONFIG_DRIVER_AT91EMAC         1
 #define CONFIG_SYS_RX_ETH_BUFFER       8
-#else
-#define CONFIG_DRIVER_ETHER            1
-#endif
+#define CONFIG_RMII                    1
+#define CONFIG_MII                     1
+#define CONFIG_DRIVER_AT91EMAC_PHYADDR 1
 #define CONFIG_NET_RETRY_COUNT                 20
-#define CONFIG_AT91C_USE_RMII                  1
-#define CONFIG_PHY_ADDRESS                     (1 << 5)
 #define CONFIG_KS8721_PHY                      1
 
 #define CONFIG_SYS_FLASH_CFI                   1
index c3d95a04c43549c65c949c8fea7c41756e529a6a..055931cda63ed8f2370b319a45f26230acaf5832 100644 (file)
  * Commands configuration - using default command set for now
  */
 #include <config_cmd_default.h>
+
 /*
- * Disabling some default commands for staggered bring-up
+ * Network
  */
-#undef CONFIG_CMD_BOOTD        /* no bootd since no net */
-#undef CONFIG_CMD_NET  /* no net since no eth */
-#undef CONFIG_CMD_NFS  /* no NFS since no net */
+
+#ifdef CONFIG_CMD_NET
+#define CONFIG_MVGBE                           /* Enable Marvell GbE Driver */
+#define CONFIG_MVGBE_PORTS     {1}             /* enable port 0 only */
+#define CONFIG_SKIP_LOCAL_MAC_RANDOMIZATION    /* don't randomize MAC */
+#define CONFIG_PHY_BASE_ADR    0x8
+#define CONFIG_RESET_PHY_R     /* use reset_phy() to init mv8831116 PHY */
+#define CONFIG_NETCONSOLE      /* include NetConsole support   */
+#define CONFIG_NET_MULTI       /* specify more that one ports available */
+#define        CONFIG_MII              /* expose smi ove miiphy interface */
+#define CONFIG_SYS_FAULT_ECHO_LINK_DOWN        /* detect link using phy */
+#define CONFIG_ENV_OVERWRITE   /* ethaddr can be reprogrammed */
+#endif
 
 /*
  *  Environment variables configurations
index 2fbc6ad7f8c39cda574ede7b142a8499ece67e8f..eb3fa57d67e89e7a7c2388fdced20022ec63e51a 100644 (file)
 #define CONFIG_NET_MULTI       /* specify more that one ports available */
 #define CONFIG_MII             /* expose smi ove miiphy interface */
 #define CONFIG_CMD_MII
-#define CONFIG_KIRKWOOD_EGIGA  /* Enable kirkwood Gbe Controller Driver */
+#define CONFIG_MVGBE           /* Enable Marvell Gbe Controller Driver */
 #define CONFIG_SYS_FAULT_ECHO_LINK_DOWN        /* detect link using phy */
-#define CONFIG_KIRKWOOD_EGIGA_PORTS    {1,1}   /* enable both ports */
+#define CONFIG_MVGBE_PORTS     {1, 1}  /* enable both ports */
 #define CONFIG_PHY_BASE_ADR    0
 #define CONFIG_ENV_OVERWRITE   /* ethaddr can be reprogrammed */
 #define CONFIG_RESET_PHY_R     /* use reset_phy() to init mv88e1121 PHY */
index 2eef5efa78fe8f46efaeed3967e5ec741ffdad49..2c0a263da293c6e6b36cde1a1304336d0910628f 100644 (file)
 #define CONFIG_SYS_MALLOC_LEN  (128 * 1024)
 
 
+/*
+ * Network Settings
+ */
+#define ADI_CMDS_NETWORK       1
+#define CONFIG_NET_MULTI
+#define CONFIG_DRIVER_AX88180  1
+#define AX88180_BASE           0x2c000000
+#define CONFIG_HOSTNAME                ibf-dsp561
+/* Uncomment next line to use fixed MAC address */
+/* #define CONFIG_ETHADDR      02:80:ad:20:31:e8 */
+
+
 /*
  * Flash Settings
  */
        } while (0)
 #define I2C_DELAY              udelay(5)       /* 1/4 I2C clock duration */
 
-#define CONFIG_SYS_I2C_SPEED   50000
-#define CONFIG_SYS_I2C_SLAVE   0
 #endif
 
 
index 425a745408e47100f78fe86436b5baa2372a0654..c024d78c18ac8a2bc972019a5e8f364be6774da2 100644 (file)
 
 #define BFIN_NAND_CLE(chip) ((unsigned long)(chip)->IO_ADDR_W | (1 << 2))
 #define BFIN_NAND_ALE(chip) ((unsigned long)(chip)->IO_ADDR_W | (1 << 1))
-#define BFIN_NAND_READY     PF10
 #define BFIN_NAND_WRITE(addr, cmd) \
        do { \
                bfin_write8(addr, cmd); \
 
 #define NAND_PLAT_WRITE_CMD(chip, cmd) BFIN_NAND_WRITE(BFIN_NAND_CLE(chip), cmd)
 #define NAND_PLAT_WRITE_ADR(chip, cmd) BFIN_NAND_WRITE(BFIN_NAND_ALE(chip), cmd)
-#define NAND_PLAT_DEV_READY(chip)      (bfin_read_FIO_FLAG_D() & BFIN_NAND_READY)
-#define NAND_PLAT_INIT() \
-       do { \
-               bfin_write_FIO_DIR(bfin_read_FIO_DIR() & ~BFIN_NAND_READY); \
-               bfin_write_FIO_INEN(bfin_read_FIO_INEN() | BFIN_NAND_READY); \
-               bfin_write_FIO_EDGE(bfin_read_FIO_EDGE() & ~BFIN_NAND_READY); \
-               bfin_write_FIO_POLAR(bfin_read_FIO_POLAR() & ~BFIN_NAND_READY); \
-       } while (0)
+#define NAND_PLAT_GPIO_DEV_READY       GPIO_PF10
 
 
 /*
index a928c2cfbb09330a57ba5572ad03b1484fb011cf..6519c9042c08f7b480db1faf043702be2d6c2c5b 100644 (file)
 #define CONFIG_NETCONSOLE      /* include NetConsole support   */
 #define CONFIG_NET_MULTI       /* specify more that one ports available */
 #define CONFIG_MII             /* expose smi ove miiphy interface */
-#define CONFIG_KIRKWOOD_EGIGA  /* Enable kirkwood Gbe Controller Driver */
+#define CONFIG_MVGBE           /* Enable Marvell Gbe Controller Driver */
 #define CONFIG_SYS_FAULT_ECHO_LINK_DOWN        /* detect link using phy */
-#define CONFIG_KIRKWOOD_EGIGA_PORTS    {1,0}   /* enable port 0 only */
+#define CONFIG_MVGBE_PORTS     {1, 0}  /* enable port 0 only */
 #define CONFIG_PHY_BASE_ADR    0
 #define CONFIG_ENV_OVERWRITE   /* ethaddr can be reprogrammed */
 #define CONFIG_RESET_PHY_R     /* use reset_phy() to init 88E1118 PHY */
index 96b4d1c6a1228b82a7b7a6c4e27415b78a8b6318..9ef03a68b78a879f5db4695e059d37759b5a48e7 100644 (file)
 #define CONFIG_NETCONSOLE      /* include NetConsole support   */
 #define CONFIG_NET_MULTI       /* specify more that one ports available */
 #define        CONFIG_MII              /* expose smi ove miiphy interface */
-#define CONFIG_KIRKWOOD_EGIGA  /* Enable kirkwood Gbe Controller Driver */
+#define CONFIG_MVGBE           /* Enable Marvell Gbe Controller Driver */
 #define CONFIG_SYS_FAULT_ECHO_LINK_DOWN        /* detect link using phy */
-#define CONFIG_KIRKWOOD_EGIGA_PORTS    {1,0}   /* enable port 0 only */
+#define CONFIG_MVGBE_PORTS     {1, 0}  /* enable port 0 only */
 #define CONFIG_ENV_OVERWRITE   /* ethaddr can be reprogrammed */
 #endif /* CONFIG_CMD_NET */
 
index d2f45028aec9ddd6c5496ebe986110084f6deb0c..52fa73def92c7e558c2b2673b2311918bfbca3e8 100644 (file)
 #define CONFIG_NETCONSOLE      /* include NetConsole support   */
 #define CONFIG_NET_MULTI       /* specify more that one ports available */
 #define        CONFIG_MII              /* expose smi ove miiphy interface */
-#define CONFIG_KIRKWOOD_EGIGA  /* Enable kirkwood Gbe Controller Driver */
+#define CONFIG_MVGBE           /* Enable Marvell Gbe Controller Driver */
 #define CONFIG_SYS_FAULT_ECHO_LINK_DOWN        /* detect link using phy */
-#define CONFIG_KIRKWOOD_EGIGA_PORTS    {1,0}   /* enable port 0 only */
+#define CONFIG_MVGBE_PORTS     {1, 0}  /* enable port 0 only */
 #define CONFIG_PHY_BASE_ADR    0x8
 #define CONFIG_ENV_OVERWRITE   /* ethaddr can be reprogrammed */
 #define CONFIG_RESET_PHY_R     /* use reset_phy() to init mv8831116 PHY */
index 3d8e25cc84d20cacc4dc6ffeea3b56232edc4e47..585730111f1269f15e573c3ef688b5498a8191c7 100644 (file)
 #define CONFIG_NETCONSOLE      /* include NetConsole support */
 #define CONFIG_NET_MULTI       /* specify more that one ports available */
 #define CONFIG_MII             /* expose smi ove miiphy interface */
-#define CONFIG_KIRKWOOD_EGIGA  /* Enable kirkwood Gbe Controller Driver */
-#define CONFIG_KIRKWOOD_EGIGA_PORTS    {1,1}   /* enable both ports */
+#define CONFIG_MVGBE           /* Enable Marvell Gbe Controller Driver */
+#define CONFIG_MVGBE_PORTS     {1, 1}  /* enable both ports */
 #define CONFIG_MV88E61XX_MULTICHIP_ADRMODE
 #define CONFIG_DIS_AUTO_NEG_SPEED_GMII /*Disable Auto speed negociation */
 #define CONFIG_PHY_SPEED       _1000BASET      /*Force PHYspeed to 1GBPs */
index e9edc449503b371290642b9993c8975563ef5020..c5de86eb034fbaad4a42cf1d0f03d2312625be57 100644 (file)
 #define CONFIG_NETCONSOLE      /* include NetConsole support   */
 #define CONFIG_NET_MULTI       /* specify more that one ports available */
 #define        CONFIG_MII              /* expose smi ove miiphy interface */
-#define CONFIG_KIRKWOOD_EGIGA  /* Enable kirkwood Gbe Controller Driver */
+#define CONFIG_MVGBE           /* Enable Marvell Gbe Controller Driver */
 #define CONFIG_SYS_FAULT_ECHO_LINK_DOWN        /* detect link using phy */
-#define CONFIG_KIRKWOOD_EGIGA_PORTS    {1,0}   /* enable port 0 only */
+#define CONFIG_MVGBE_PORTS     {1, 0}  /* enable port 0 only */
 #define CONFIG_PHY_BASE_ADR    0
 #define CONFIG_ENV_OVERWRITE   /* ethaddr can be reprogrammed */
 #define CONFIG_RESET_PHY_R     /* use reset_phy() to init mv8831116 PHY */
index 9c04d8a28e7d27e1e9e95b074738f0c729abc675..52055e80dcbd03fb6b34800aedcf2228c54fbdc8 100644 (file)
  */
 #define CONFIG_BFIN_TWI_I2C    1
 #define CONFIG_HARD_I2C                1
-#define CONFIG_SYS_I2C_SPEED   50000
-#define CONFIG_SYS_I2C_SLAVE   0
 
 
 /*
index 409a042d05183adfce96304d976b70387aab6bfb..24ce8f854a1876be4320697d4d1724391084cf61 100644 (file)
  */
 #define CONFIG_BFIN_TWI_I2C    1
 #define CONFIG_HARD_I2C                1
-#define CONFIG_SYS_I2C_SPEED   50000
-#define CONFIG_SYS_I2C_SLAVE   0
 
 
 /*
index 203f731967ef7439e401c12dfedebdedffe35aa6..fbccf6ab0c442745ed194a18d62bcbeb70693ad7 100644 (file)
 #endif /* CONFIG_ENV_IS_IN_FLASH */
 
 #if defined(CONFIG_ENV_IS_IN_NAND)
-# ifndef CONFIG_ENV_OFFSET
-#  error "Need to define CONFIG_ENV_OFFSET when using CONFIG_ENV_IS_IN_NAND"
-# endif
+# if defined(CONFIG_ENV_OFFSET_OOB)
+#  ifdef CONFIG_ENV_OFFSET_REDUND
+#   error "CONFIG_ENV_OFFSET_REDUND is not supported when CONFIG_ENV_OFFSET_OOB"
+#   error "is set"
+#  endif
+extern unsigned long nand_env_oob_offset;
+#  define CONFIG_ENV_OFFSET nand_env_oob_offset
+# else
+#  ifndef CONFIG_ENV_OFFSET
+#   error "Need to define CONFIG_ENV_OFFSET when using CONFIG_ENV_IS_IN_NAND"
+#  endif
+#  ifdef CONFIG_ENV_OFFSET_REDUND
+#   define CONFIG_SYS_REDUNDAND_ENVIRONMENT
+#  endif
+# endif /* CONFIG_ENV_OFFSET_OOB */
 # ifndef CONFIG_ENV_SIZE
 #  error "Need to define CONFIG_ENV_SIZE when using CONFIG_ENV_IS_IN_NAND"
 # endif
-# ifdef CONFIG_ENV_OFFSET_REDUND
-#  define CONFIG_SYS_REDUNDAND_ENVIRONMENT
-# endif
 #endif /* CONFIG_ENV_IS_IN_NAND */
 
 #if defined(CONFIG_ENV_IS_IN_MG_DISK)
index 2a81597a65d9bd4366b8dcbfe44929d85ad17dc5..8bdf4191a6db159222e83e38ad433fc07f428122 100644 (file)
@@ -130,3 +130,12 @@ void board_nand_select_device(struct nand_chip *nand, int chip);
 __attribute__((noreturn)) void nand_boot(void);
 
 #endif
+
+#ifdef CONFIG_ENV_OFFSET_OOB
+#define ENV_OOB_MARKER 0x30425645 /*"EVB0" in little-endian -- offset is stored
+                                   as block number*/
+#define ENV_OOB_MARKER_OLD 0x30564e45 /*"ENV0" in little-endian -- offset is
+                                       stored as byte number */
+#define ENV_OFFSET_SIZE 8
+int get_nand_env_oob(nand_info_t *nand, unsigned long *result);
+#endif
index 882642a2c442bf3fab8c97426790d177d3f9539a..94eedfe29dedf79688732cf6fb6a296fcc22d016 100644 (file)
@@ -43,12 +43,14 @@ int cpu_eth_init(bd_t *bis);
 /* Driver initialization prototypes */
 int altera_tse_initialize(u8 dev_num, int mac_base,
                          int sgdma_rx_base, int sgdma_tx_base);
+int ax88180_initialize(bd_t *bis);
 int au1x00_enet_initialize(bd_t*);
 int at91emac_register(bd_t *bis, unsigned long iobase);
 int bfin_EMAC_initialize(bd_t *bis);
 int cs8900_initialize(u8 dev_num, int base_addr);
 int dc21x4x_initialize(bd_t *bis);
 int davinci_emac_initialize(void);
+int designware_initialize(u32 id, ulong base_addr, u32 phy_addr);
 int dnet_eth_initialize(int id, void *regs, unsigned int phy_addr);
 int e1000_initialize(bd_t *bis);
 int eepro100_initialize(bd_t *bis);
@@ -61,7 +63,6 @@ int ftmac100_initialize(bd_t *bits);
 int greth_initialize(bd_t *bis);
 void gt6426x_eth_initialize(bd_t *bis);
 int inca_switch_initialize(bd_t *bis);
-int kirkwood_egiga_initialize(bd_t *bis);
 int lan91c96_initialize(u8 dev_num, int base_addr);
 int macb_eth_initialize(int id, void *regs, unsigned int phy_addr);
 int mcdmafec_initialize(bd_t *bis);
@@ -70,6 +71,7 @@ int mpc512x_fec_initialize(bd_t *bis);
 int mpc5xxx_fec_initialize(bd_t *bis);
 int mpc8220_fec_initialize(bd_t *bis);
 int mpc82xx_scc_enet_initialize(bd_t *bis);
+int mvgbe_initialize(bd_t *bis);
 int natsemi_initialize(bd_t *bis);
 int npe_initialize(bd_t *bis);
 int ns8382x_initialize(bd_t *bis);
index 9dbf01fca8ec480afee794bb110892f7951879a0..f2135954aabbadd4e9db0e59578ba7195880a167 100644 (file)
@@ -346,9 +346,6 @@ void status_led_set  (int led, int state);
 #elif defined(CONFIG_NIOS2)
 /* XXX empty just to avoid the error */
 /************************************************************************/
-#elif defined(CONFIG_BLACKFIN)
-/* XXX empty just to avoid the error */
-/************************************************************************/
 #elif defined(CONFIG_V38B)
 
 # define STATUS_LED_BIT                0x0010                  /* Timer7 GPIO */
index 83d559c120406ab58213bf6ea46202b5a6870913..de6d5c6040ddeb2fc126779fed944e54834e84c6 100644 (file)
--- a/net/eth.c
+++ b/net/eth.c
@@ -234,6 +234,9 @@ int eth_initialize(bd_t *bis)
                                puts (" [PRIME]");
                        }
 
+                       if (strchr(dev->name, ' '))
+                               puts("\nWarning: eth device name has a space!\n");
+
                        eth_getenv_enetaddr_by_index(eth_number, env_enetaddr);
 
                        if (memcmp(env_enetaddr, "\0\0\0\0\0\0", 6)) {