mirror of https://gitee.com/openkylin/linux.git
MUSB: Fix index register corruption seen with g_ether and Windows host
If Indexed Mode register accesses are enabled, the ep0_rxstate() function calls musb_g_ep0_giveback() before writing to the CSR register. When control returns to this ep0_rxstate, the index register contents are over-written. This causes the CSR register write to fail. Fixed by writing the correct value into the index register before writing to the CSR. This was observed only in ep0_rxstate() with g_ether loaded and the device connected to a MS Windows host PC. Anticipatively fixed ep0_txstate() as well. Signed-off-by: Anand Gadiyar <gadiyar@ti.com> Acked-by: Felipe Balbi <felipe.balbi@nokia.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
e8164f64ca
commit
fb85d99161
|
@ -476,6 +476,7 @@ static void ep0_rxstate(struct musb *musb)
|
|||
return;
|
||||
musb->ackpend = 0;
|
||||
}
|
||||
musb_ep_select(musb->mregs, 0);
|
||||
musb_writew(regs, MUSB_CSR0, tmp);
|
||||
}
|
||||
|
||||
|
@ -528,6 +529,7 @@ static void ep0_txstate(struct musb *musb)
|
|||
}
|
||||
|
||||
/* send it out, triggering a "txpktrdy cleared" irq */
|
||||
musb_ep_select(musb->mregs, 0);
|
||||
musb_writew(regs, MUSB_CSR0, csr);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue