diff --git a/board/freescale/mpc8315erdb/mpc8315erdb.c b/board/freescale/mpc8315erdb/mpc8315erdb.c index 7af36ddb9b70e8977263d145581b50d2639985a1..3eecee2519a5eba17654f2c5f23f0a390bf5c1a8 100644 --- a/board/freescale/mpc8315erdb/mpc8315erdb.c +++ b/board/freescale/mpc8315erdb/mpc8315erdb.c @@ -25,9 +25,8 @@ #include #include -#if defined(CONFIG_OF_LIBFDT) #include -#endif +#include #include #include @@ -122,11 +121,47 @@ 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) + return; + + 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 diff --git a/common/fdt_support.c b/common/fdt_support.c index e57ac0a545322819cf7239703a5f46219eabdb4a..405b9dbda977f74d08a48bdf4e62919d8545bc7d 100644 --- a/common/fdt_support.c +++ b/common/fdt_support.c @@ -408,24 +408,40 @@ void fdt_fixup_ethernet(void *fdt) void fdt_fixup_dr_usb(void *blob, bd_t *bd) { char *mode; + char *type; const char *compat = "fsl-usb2-dr"; - const char *prop = "dr_mode"; + const char *prop_mode = "dr_mode"; + const char *prop_type = "phy_type"; int node_offset; int err; mode = getenv("usb_dr_mode"); - if (!mode) + type = getenv("usb_phy_type"); + if (!mode && !type) return; node_offset = fdt_node_offset_by_compatible(blob, 0, compat); - if (node_offset < 0) + if (node_offset < 0) { printf("WARNING: could not find compatible node %s: %s.\n", compat, fdt_strerror(node_offset)); + return; + } - err = fdt_setprop(blob, node_offset, prop, mode, strlen(mode) + 1); - if (err < 0) - printf("WARNING: could not set %s for %s: %s.\n", - prop, compat, fdt_strerror(err)); + if (mode) { + err = fdt_setprop(blob, node_offset, prop_mode, mode, + strlen(mode) + 1); + if (err < 0) + printf("WARNING: could not set %s for %s: %s.\n", + prop_mode, compat, fdt_strerror(err)); + } + + if (type) { + err = fdt_setprop(blob, node_offset, prop_type, type, + strlen(type) + 1); + if (err < 0) + printf("WARNING: could not set %s for %s: %s.\n", + prop_type, compat, fdt_strerror(err)); + } } #endif /* CONFIG_HAS_FSL_DR_USB */ diff --git a/include/configs/MPC8315ERDB.h b/include/configs/MPC8315ERDB.h index b0cc36dce3922250bf7527dfdd161e2e3a7d4475..006b93a0bf7e76b28f363ea72cca082b9d57a350 100644 --- a/include/configs/MPC8315ERDB.h +++ b/include/configs/MPC8315ERDB.h @@ -321,6 +321,8 @@ #define CONFIG_NET_MULTI 1 #endif +#define CONFIG_HAS_FSL_DR_USB + /* * TSEC */