Blackfin: bf533-stamp: rewrite resource swap logic
authorMike Frysinger <vapier@gentoo.org>
Sun, 12 Oct 2008 02:38:37 +0000 (22:38 -0400)
committerMike Frysinger <vapier@gentoo.org>
Wed, 28 Jan 2009 18:27:28 +0000 (13:27 -0500)
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>
board/bf533-stamp/bf533-stamp.c

index 1a073a659c3b9932d2a87c52cde8a537dee411ba..44ebc931946a041feabd64c59a47eac28c092b2e 100644 (file)
@@ -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++)