|
@@ -37,6 +37,7 @@
|
|
#include <netdev.h>
|
|
#include <netdev.h>
|
|
#include <rtc.h>
|
|
#include <rtc.h>
|
|
#include <i2c.h>
|
|
#include <i2c.h>
|
|
|
|
+#include <hwconfig.h>
|
|
|
|
|
|
DECLARE_GLOBAL_DATA_PTR;
|
|
DECLARE_GLOBAL_DATA_PTR;
|
|
|
|
|
|
@@ -247,6 +248,8 @@ extern void ft_pci_board_setup(void *blob);
|
|
|
|
|
|
void ft_board_setup(void *blob, bd_t *bd)
|
|
void ft_board_setup(void *blob, bd_t *bd)
|
|
{
|
|
{
|
|
|
|
+ const char *soc_usb_compat = "fsl-usb2-dr";
|
|
|
|
+ int err, usb1_off, usb2_off;
|
|
phys_addr_t base;
|
|
phys_addr_t base;
|
|
phys_size_t size;
|
|
phys_size_t size;
|
|
|
|
|
|
@@ -260,5 +263,49 @@ void ft_board_setup(void *blob, bd_t *bd)
|
|
#endif /* #if defined(CONFIG_PCI) */
|
|
#endif /* #if defined(CONFIG_PCI) */
|
|
|
|
|
|
fdt_fixup_memory(blob, (u64)base, (u64)size);
|
|
fdt_fixup_memory(blob, (u64)base, (u64)size);
|
|
|
|
+
|
|
|
|
+ fdt_fixup_dr_usb(blob, bd);
|
|
|
|
+
|
|
|
|
+#if defined(CONFIG_SDCARD) || defined(CONFIG_SPIFLASH)
|
|
|
|
+ /* Delete eLBC node as it is muxed with USB2 controller */
|
|
|
|
+ if (hwconfig("usb2")) {
|
|
|
|
+ const char *soc_elbc_compat = "fsl,p1020-elbc";
|
|
|
|
+ int off = fdt_node_offset_by_compatible(blob, -1,
|
|
|
|
+ soc_elbc_compat);
|
|
|
|
+ if (off < 0) {
|
|
|
|
+ printf("WARNING: could not find compatible node"
|
|
|
|
+ " %s: %s.\n", soc_elbc_compat,
|
|
|
|
+ fdt_strerror(off));
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ err = fdt_del_node(blob, off);
|
|
|
|
+ if (err < 0) {
|
|
|
|
+ printf("WARNING: could not remove %s: %s.\n",
|
|
|
|
+ soc_elbc_compat, fdt_strerror(err));
|
|
|
|
+ }
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+#endif
|
|
|
|
+ /* Delete USB2 node as it is muxed with eLBC */
|
|
|
|
+ usb1_off = fdt_node_offset_by_compatible(blob, -1,
|
|
|
|
+ soc_usb_compat);
|
|
|
|
+ if (usb1_off < 0) {
|
|
|
|
+ printf("WARNING: could not find compatible node"
|
|
|
|
+ " %s: %s.\n", soc_usb_compat,
|
|
|
|
+ fdt_strerror(usb1_off));
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ usb2_off = fdt_node_offset_by_compatible(blob, usb1_off,
|
|
|
|
+ soc_usb_compat);
|
|
|
|
+ if (usb2_off < 0) {
|
|
|
|
+ printf("WARNING: could not find compatible node"
|
|
|
|
+ " %s: %s.\n", soc_usb_compat,
|
|
|
|
+ fdt_strerror(usb2_off));
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ err = fdt_del_node(blob, usb2_off);
|
|
|
|
+ if (err < 0)
|
|
|
|
+ printf("WARNING: could not remove %s: %s.\n",
|
|
|
|
+ soc_usb_compat, fdt_strerror(err));
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|