usb: gadget: cdns3: Fix missing cache operations for non-zero Endpoints
Transfer initiation and completion for the non-zero Endpoints are
handled by cdns3_ep_run_transfer() and cdns3_transfer_completed()
respectively.
Failing to flush the cache associated with the TRB Pool within
cdns3_ep_run_transfer() results in the transfers never being initiated.
Similarly, failing to invalidate the cache associated with the TRB pool
within cdns3_transfer_completed() results in the transfers never being
completed.
Fix this.
Fixes: 7e91f6ccdc ("usb: Add Cadence USB3 host and gadget driver")
Signed-off-by: Siddharth Vadapalli <s-vadapalli@ti.com>
Reviewed-by: Roger Quadros <rogerq@kernel.org>
Reviewed-by: Marek Vasut <marex@denx.de>
This commit is contained in:
committed by
Tom Rini
parent
37c1cb8c88
commit
17da9795c1
@@ -965,6 +965,12 @@ int cdns3_ep_run_transfer(struct cdns3_endpoint *priv_ep,
|
||||
if (priv_dev->dev_ver <= DEV_VER_V2)
|
||||
cdns3_wa1_tray_restore_cycle_bit(priv_dev, priv_ep);
|
||||
|
||||
/* Flush TRBs */
|
||||
flush_dcache_range((unsigned long)priv_ep->trb_pool,
|
||||
(unsigned long)priv_ep->trb_pool +
|
||||
ROUND(sizeof(struct cdns3_trb) * priv_ep->num_trbs,
|
||||
CONFIG_SYS_CACHELINE_SIZE));
|
||||
|
||||
trace_cdns3_prepare_trb(priv_ep, priv_req->trb);
|
||||
|
||||
/*
|
||||
@@ -1153,6 +1159,13 @@ static void cdns3_transfer_completed(struct cdns3_device *priv_dev,
|
||||
priv_ep->endpoint.desc->bEndpointAddress);
|
||||
#endif
|
||||
|
||||
/* Invalidate TRBs */
|
||||
invalidate_dcache_range((unsigned long)priv_ep->trb_pool,
|
||||
(unsigned long)priv_ep->trb_pool +
|
||||
ROUND(sizeof(struct cdns3_trb) *
|
||||
priv_ep->num_trbs,
|
||||
CONFIG_SYS_CACHELINE_SIZE));
|
||||
|
||||
if (!cdns3_request_handled(priv_ep, priv_req))
|
||||
goto prepare_next_td;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user