void fdt_fixup_dr_usb(void *blob, bd_t *bd)
 {
        static const char * const modes[] = { "host", "peripheral", "otg" };
-       static const char * const phys[] = { "ulpi", "utmi" };
+       static const char * const phys[] = { "ulpi", "utmi", "utmi_dual" };
        int usb_erratum_a006261_off = -1;
        int usb_erratum_a007075_off = -1;
        int usb_erratum_a007792_off = -1;
                                dr_phy_type = phys[phy_idx];
                }
 
+               if (has_dual_phy())
+                       dr_phy_type = phys[2];
+
                usb_mode_off = fdt_fixup_usb_mode_phy_type(blob,
                                                           dr_mode_type, NULL,
                                                           usb_mode_off);
                        if (usb_erratum_a006261_off < 0)
                                return;
                }
+
                if (has_erratum_a007075()) {
                        usb_erratum_a007075_off =  fdt_fixup_usb_erratum
                                                   (blob,
                        if (usb_erratum_a007075_off < 0)
                                return;
                }
+
                if (has_erratum_a007792()) {
                        usb_erratum_a007792_off =  fdt_fixup_usb_erratum
                                                   (blob,
 
 
 /* USB Erratum Checking code */
 #ifdef CONFIG_PPC
+static inline bool has_dual_phy(void)
+{
+       u32 svr = get_svr();
+       u32 soc = SVR_SOC_VER(svr);
+
+       switch (soc) {
+       case SVR_T1023:
+       case SVR_T1024:
+       case SVR_T1013:
+       case SVR_T1014:
+               return IS_SVR_REV(svr, 1, 0);
+       case SVR_T1040:
+       case SVR_T1042:
+       case SVR_T1020:
+       case SVR_T1022:
+       case SVR_T2080:
+       case SVR_T2081:
+               return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
+       case SVR_T4240:
+       case SVR_T4160:
+       case SVR_T4080:
+               return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 2, 0);
+       }
+
+       return false;
+}
+
 static inline bool has_erratum_a006261(void)
 {
        u32 svr = get_svr();
 }
 
 #else
+static inline bool has_dual_phy(void)
+{
+       return false;
+}
+
 static inline bool has_erratum_a006261(void)
 {
        return false;