summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2008-10-11 22:38:37 -0400
committerMike Frysinger <vapier@gentoo.org>2009-01-28 13:27:28 -0500
commit1f75d6f0ff005762d3e6ad92ae4ce2ab366b3bb5 (patch)
tree80c3670ab9e50d36669ef0370a10748ab12fd892
parent29d4ea0a9073c82469184331010136f52edf8db6 (diff)
downloadu-boot-imx-1f75d6f0ff005762d3e6ad92ae4ce2ab366b3bb5.zip
u-boot-imx-1f75d6f0ff005762d3e6ad92ae4ce2ab366b3bb5.tar.gz
u-boot-imx-1f75d6f0ff005762d3e6ad92ae4ce2ab366b3bb5.tar.bz2
Blackfin: bf533-stamp: rewrite resource swap logic
The old swap function tended to clobber unrelated pins and screw up masks. Rewrite the thing from scratch so it only uses the resources it needs. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
-rw-r--r--board/bf533-stamp/bf533-stamp.c39
1 files changed, 15 insertions, 24 deletions
diff --git a/board/bf533-stamp/bf533-stamp.c b/board/bf533-stamp/bf533-stamp.c
index 1a073a6..44ebc93 100644
--- a/board/bf533-stamp/bf533-stamp.c
+++ b/board/bf533-stamp/bf533-stamp.c
@@ -54,29 +54,23 @@ phys_size_t initdram(int board_type)
return gd->bd->bi_memsize;
}
+/* PF0 and PF1 are used to switch between the ethernet and flash:
+ * PF0 PF1
+ * flash: 0 0
+ * ether: 1 0
+ */
void swap_to(int device_id)
{
-
- if (device_id == ETHERNET) {
- *pFIO_DIR = PF0;
- SSYNC();
- *pFIO_FLAG_S = PF0;
- SSYNC();
- } else if (device_id == FLASH) {
- *pFIO_DIR = (PF4 | PF3 | PF2 | PF1 | PF0);
- *pFIO_FLAG_S = (PF4 | PF3 | PF2);
- *pFIO_MASKA_D = (PF8 | PF6 | PF5);
- *pFIO_MASKB_D = (PF7);
- *pFIO_POLAR = (PF8 | PF6 | PF5);
- *pFIO_EDGE = (PF8 | PF7 | PF6 | PF5);
- *pFIO_INEN = (PF8 | PF7 | PF6 | PF5);
- *pFIO_FLAG_D = (PF4 | PF3 | PF2);
- SSYNC();
- } else {
- printf("Unknown bank to switch\n");
- }
-
- return;
+ 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");
+ SSYNC();
}
#if defined(CONFIG_MISC_INIT_R)
@@ -104,9 +98,6 @@ int misc_init_r(void)
if (cf_stat) {
printf("Booting from COMPACT flash\n");
- /* Set cycle time for CF */
- *(volatile unsigned long *)ambctl1 = CF_AMBCTL1VAL;
-
for (i = 0; i < 0x1000; i++)
asm("nop;");
for (i = 0; i < 0x1000; i++)