mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-08 04:42:04 -04:00
usb: dwc3: Add support for nominal elastic buffer
This patch adds support for nominal elastic buffer where elastic buffer mode in GUSB3PIPE_CTRL(0) register will be cleared if nominal elastic buffer is not present. This is done to avoid high link error rates and superspeed mode transfer failures if VDDCX is at super turbo mode voltage 1.05V. Change-Id: Ifc21077c3009e025fb979132c7fd10b135bf69bb Signed-off-by: Rohith Kollalsi <rkollals@codeaurora.org>
This commit is contained in:
parent
31f07c0ce9
commit
3bb697514e
2 changed files with 14 additions and 0 deletions
|
|
@ -1121,6 +1121,16 @@ int dwc3_core_init(struct dwc3 *dwc)
|
|||
}
|
||||
|
||||
dwc3_notify_event(dwc, DWC3_CONTROLLER_POST_RESET_EVENT, 0);
|
||||
/*
|
||||
* clear Elastic buffer mode in GUSBPIPE_CTRL(0) register, otherwise
|
||||
* it results in high link errors and could cause SS mode transfer
|
||||
* failure.
|
||||
*/
|
||||
if (!dwc->nominal_elastic_buffer) {
|
||||
reg = dwc3_readl(dwc->regs, DWC3_GUSB3PIPECTL(0));
|
||||
reg &= ~DWC3_GUSB3PIPECTL_ELASTIC_BUF_MODE;
|
||||
dwc3_writel(dwc->regs, DWC3_GUSB3PIPECTL(0), reg);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
@ -1369,6 +1379,8 @@ static void dwc3_get_properties(struct dwc3 *dwc)
|
|||
&tx_thr_num_pkt_prd);
|
||||
device_property_read_u8(dev, "snps,tx-max-burst-prd",
|
||||
&tx_max_burst_prd);
|
||||
dwc->nominal_elastic_buffer = of_property_read_bool(dev->of_node,
|
||||
"nominal-elastic-buffer");
|
||||
|
||||
dwc->needs_fifo_resize = device_property_read_bool(dev,
|
||||
"tx-fifo-resize");
|
||||
|
|
|
|||
|
|
@ -337,6 +337,7 @@
|
|||
#define DWC3_GUSB3PIPECTL_TX_DEEPH_MASK DWC3_GUSB3PIPECTL_TX_DEEPH(3)
|
||||
#define DWC3_GUSB3PIPECTL_TX_DEEPH(n) ((n) << 1)
|
||||
#define DWC3_GUSB3PIPECTL_DELAYP1TRANS BIT(18)
|
||||
#define DWC3_GUSB3PIPECTL_ELASTIC_BUF_MODE (1 << 0)
|
||||
|
||||
/* Global TX Fifo Size Register */
|
||||
#define DWC31_GTXFIFOSIZ_TXFRAMNUM BIT(15) /* DWC_usb31 only */
|
||||
|
|
@ -1364,6 +1365,7 @@ struct dwc3 {
|
|||
struct dwc3_gadget_events dbg_gadget_events;
|
||||
int tx_fifo_size;
|
||||
int last_fifo_depth;
|
||||
bool nominal_elastic_buffer;
|
||||
|
||||
/* IRQ timing statistics */
|
||||
int irq;
|
||||
|
|
|
|||
Loading…
Reference in a new issue