summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorRajat Srivastava <rajat.srivastava@nxp.com>2016-08-04 09:26:54 (GMT)
committerPrabhakar Kushwaha <prabhakar.kushwaha@nxp.com>2017-07-19 05:46:35 (GMT)
commita836ef446fe14fc61526e7300994f978e21cec43 (patch)
treef9572b1968a4c7e283e528935576e9aabc8e0668 /drivers
parent036773a9647e87071a19e5270eb9c4671dedce13 (diff)
downloadu-boot-a836ef446fe14fc61526e7300994f978e21cec43.tar.xz
usb: dwc3: Add helper functions to enable snooping and burst settings
Adds helper functions to enable snooping and outstanding burst beat settings. Signed-off-by: Rajat Srivastava <rajat.srivastava@nxp.com> Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/usb/dwc3/core.c45
-rw-r--r--drivers/usb/dwc3/core.h7
2 files changed, 52 insertions, 0 deletions
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 87b9c87..0b56a81 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -601,6 +601,51 @@ static void dwc3_core_exit_mode(struct dwc3 *dwc)
#define DWC3_ALIGN_MASK (16 - 1)
+void dwc3_core_incr_burst_enable(int index, int btype_incr_val,
+ int breq_limit)
+{
+ struct dwc3 *dwc;
+ u32 reg;
+
+ list_for_each_entry(dwc, &dwc3_list, list) {
+ if (dwc->index != index)
+ continue;
+
+ /*
+ * Change burst beat and outstanding pipelined
+ * transfers requests
+ */
+ reg = dwc3_readl(dwc->regs, DWC3_GSBUSCFG0);
+ reg = (reg & ~DWC3_INCR_BTYPE_MASK) | btype_incr_val;
+ dwc3_writel(dwc->regs, DWC3_GSBUSCFG0, reg);
+
+ reg = dwc3_readl(dwc->regs, DWC3_GSBUSCFG1);
+ reg = (reg & ~DWC3_BREQ_LIMIT_MASK) | (breq_limit << 8);
+ dwc3_writel(dwc->regs, DWC3_GSBUSCFG1, reg);
+ break;
+ }
+}
+
+void dwc3_core_set_snooping(int index, bool snoop)
+{
+ struct dwc3 *dwc;
+ u32 reg;
+
+ list_for_each_entry(dwc, &dwc3_list, list) {
+ if (dwc->index != index)
+ continue;
+
+ /* Enable/Disable snooping */
+ reg = dwc3_readl(dwc->regs, DWC3_GSBUSCFG0);
+ if (snoop)
+ reg |= DWC3_SNOOP_ENABLE;
+ else
+ reg &= ~DWC3_SNOOP_ENABLE;
+ dwc3_writel(dwc->regs, DWC3_GSBUSCFG0, reg);
+ break;
+ }
+}
+
/**
* dwc3_uboot_init - dwc3 core uboot initialization code
* @dwc3_dev: struct dwc3_device containing initialization data
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 72d2fcd..455e7fa 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -593,6 +593,13 @@ struct dwc3_hwparams {
/* HWPARAMS7 */
#define DWC3_RAM1_DEPTH(n) ((n) & 0xffff)
+/* GSBUSCFG0 */
+#define DWC3_SNOOP_ENABLE (0x22220000)
+#define DWC3_INCR_BTYPE_MASK (0xff)
+
+/* GSBUSCFG1 */
+#define DWC3_BREQ_LIMIT_MASK (0xf00)
+
struct dwc3_request {
struct usb_request request;
struct list_head list;