On 20-04-22, 10:30, Bard Liao wrote:
From: Pierre-Louis Bossart pierre-louis.bossart@linux.intel.com
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
deviceA attaches as device0
the hardware detects a device0 status change and throws an
interrupt.
the interrupt handler schedules the work function
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.
- deviceB attaches as device0, the device0 status seen by the
hardware does not change.
- 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