@ -211,10 +211,57 @@ static int fdt_fixup_usb_mode_phy_type(void *blob, const char *mode,
return node_offset ;
}
static const char * fdt_usb_get_node_type ( void * blob , int start_offset ,
int * node_offset )
{
const char * compat_dr = " fsl-usb2-dr " ;
const char * compat_mph = " fsl-usb2-mph " ;
const char * node_type = NULL ;
* node_offset = fdt_node_offset_by_compatible ( blob , start_offset ,
compat_mph ) ;
if ( * node_offset < 0 ) {
* node_offset = fdt_node_offset_by_compatible ( blob ,
start_offset ,
compat_dr ) ;
if ( * node_offset < 0 ) {
printf ( " ERROR: could not find compatible node: %s \n " ,
fdt_strerror ( * node_offset ) ) ;
} else {
node_type = compat_dr ;
}
} else {
node_type = compat_mph ;
}
return node_type ;
}
static int fdt_fixup_usb_erratum ( void * blob , const char * prop_erratum ,
int start_offset )
{
int node_offset , err ;
const char * node_type = NULL ;
node_type = fdt_usb_get_node_type ( blob , start_offset , & node_offset ) ;
if ( ! node_type )
return - 1 ;
err = fdt_setprop ( blob , node_offset , prop_erratum , NULL , 0 ) ;
if ( err < 0 ) {
printf ( " ERROR: could not set %s for %s: %s. \n " ,
prop_erratum , node_type , fdt_strerror ( err ) ) ;
}
return node_offset ;
}
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 " } ;
int usb_erratum_a006261_off = - 1 ;
int usb_erratum_a007075_off = - 1 ;
int usb_mode_off = - 1 ;
int usb_phy_off = - 1 ;
char str [ 5 ] ;
@ -268,6 +315,23 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)
if ( usb_phy_off < 0 )
return ;
if ( has_erratum_a006261 ( ) ) {
usb_erratum_a006261_off = fdt_fixup_usb_erratum
( blob ,
" fsl,usb-erratum-a006261 " ,
usb_erratum_a006261_off ) ;
if ( usb_erratum_a006261_off < 0 )
return ;
}
if ( has_erratum_a007075 ( ) ) {
usb_erratum_a007075_off = fdt_fixup_usb_erratum
( blob ,
" fsl,usb-erratum-a007075 " ,
usb_erratum_a007075_off ) ;
if ( usb_erratum_a007075_off < 0 )
return ;
}
}
}
# endif