On 20-04-22, 10:30, Bard Liao wrote: > From: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx> > > This patch adds a status check after device0 attachment to solve race > conditions observed during attachment with multiple devices per link > > The sequence is the following > > 1) deviceA attaches as device0 > > 2) the hardware detects a device0 status change and throws an > interrupt. > > 3) the interrupt handler schedules the work function > > 4) the workqueue starts, we read the status > slave0 = cdns_readl(cdns, CDNS_MCP_SLAVE_INTSTAT0); > slave1 = cdns_readl(cdns, CDNS_MCP_SLAVE_INTSTAT1); > > we deal with the status change and program deviceA device number to a > non-zero value. > > 5) deviceB attaches as device0, the device0 status seen by the > hardware does not change. > > 6) we clear the CDNS_MCP_SLAVE_INTSTAT0/1 registers -> we will never detect > deviceB! > > This patch suggest re-checking in a loop the device0 status with a > PING frame, i.e. using the real device0 status instead of information > on status changes. Applied, thanks -- ~Vinod