Hi Felipe > > > > @@ -213,6 +213,8 @@ struct musb_platform_ops { > > > > int (*adjust_channel_params)(struct dma_channel *channel, > > > > u16 packet_sz, u8 *mode, > > > > dma_addr_t *dma_addr, u32 *len); > > > > + > > > > + void (*babble_recovery)(struct musb *musb); > > > > > > I don't get why can't 'babble_recovery' be generic. Why do we need > > > each glue layer to implement it ? > > > > > > > Babble is generic, but recovery mechanism is nothing but "reset of > > usbss" which is SoC dependent and followed by generic restart of the > > musb controller. > > and that's what I don't get. Why do you need to reset usbss ? On babble condition, the session bit is removed by mentor, hence to make musb work 1) setting the session alone will not help. 2) restart the usbss and setting session also not helped. 3) musb works only after usbss reset followed by epfifo table init and re-enable all interrupts, then set the session. The mentor IP guys (synopsis) confirmed that during babble condition, controller is stopped. Only recover is to restart completely, usbss reset, reinit epfifo table, & set the session. > > -- > balbi -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html