83xx: mpc8315erdb: add support for switching between ULPI/UTMI USB PHYs
authorAnton Vorontsov <avorontsov@ru.mvista.com>
Tue, 8 Jul 2008 17:00:04 +0000 (21:00 +0400)
committerKim Phillips <kim.phillips@freescale.com>
Wed, 16 Jul 2008 19:16:44 +0000 (14:16 -0500)
Freescale ships MPC8315E-RDB boards either with TSEC1 and USB UTMI
support, or without TSEC1 but with USB ULPI PHY support in addition.
With this patch user can specify desired USB PHY.

Also, it seems that we can't distinguish the two boards in software, so
user have to set `mpc8315erdb' environment variable to either 'tsec1'
(TSEC1 enabled) or `ulpi' (board with ULPI PHY, TSEC1 disabled), so that
Linux will not probe for TSEC1.

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
board/freescale/mpc8315erdb/mpc8315erdb.c
include/configs/MPC8315ERDB.h

index 7af36ddb9b70e8977263d145581b50d2639985a1..7555ffbdd6d62c9e82c6ce04f64d06f4b7b6dfb3 100644 (file)
@@ -25,9 +25,8 @@
 
 #include <common.h>
 #include <i2c.h>
-#if defined(CONFIG_OF_LIBFDT)
 #include <libfdt.h>
-#endif
+#include <fdt_support.h>
 #include <pci.h>
 #include <mpc83xx.h>
 
@@ -122,11 +121,46 @@ void pci_init_board(void)
 }
 
 #if defined(CONFIG_OF_BOARD_SETUP)
+void fdt_tsec1_fixup(void *fdt, bd_t *bd)
+{
+       char *mpc8315erdb = getenv("mpc8315erdb");
+       const char disabled[] = "disabled";
+       const char *path;
+       int ret;
+
+       if (!mpc8315erdb) {
+               if (!strcmp(mpc8315erdb, "tsec1")) {
+                       return;
+               } else if (strcmp(mpc8315erdb, "ulpi")) {
+                       printf("WARNING: wrong `mpc8315erdb' environment "
+                              "variable specified: `%s'. Should be `ulpi' "
+                              "or `tsec1'.\n", mpc8315erdb);
+                       return;
+               }
+       }
+
+       ret = fdt_path_offset(fdt, "/aliases");
+       if (ret < 0) {
+               printf("WARNING: can't find /aliases node\n");
+               return;
+       }
+
+       path = fdt_getprop(fdt, ret, "ethernet0", NULL);
+       if (!path) {
+               printf("WARNING: can't find ethernet0 alias\n");
+               return;
+       }
+
+       do_fixup_by_path(fdt, path, "status", disabled, sizeof(disabled), 1);
+}
+
 void ft_board_setup(void *blob, bd_t *bd)
 {
        ft_cpu_setup(blob, bd);
 #ifdef CONFIG_PCI
        ft_pci_setup(blob, bd);
 #endif
+       fdt_fixup_dr_usb(blob, bd);
+       fdt_tsec1_fixup(blob, bd);
 }
 #endif
index 095f6658c1f06018ffd66f05350cd70605c6b6ca..6b019f85adf86528234ac228a512385fe05e719b 100644 (file)
 #define CONFIG_NET_MULTI       1
 #endif
 
+#define CONFIG_HAS_FSL_DR_USB
+
 /*
  * TSEC
  */