On 06/08/2016 11:44 AM, Rajesh Bhagat wrote: > > >> -----Original Message----- >> From: Marek Vasut [mailto:ma...@denx.de] >> Sent: Monday, June 06, 2016 6:24 PM >> To: Rajat Srivastava <rajat.srivast...@nxp.com>; u-boot@lists.denx.de >> Cc: l.majew...@samsung.com; s...@chromium.org; albert.u.b...@aribaud.net; >> prabha...@freescale.com; york sun <york....@nxp.com>; Mingkai Hu >> <mingkai...@nxp.com>; Rajesh Bhagat <rajesh.bha...@nxp.com>; >> michal.si...@xilinx.com; felipe.ba...@linux.intel.com >> Subject: Re: [PATCH v2 2/4] usb: dwc3: Add helper functions to enable >> snooping and >> burst settings >> >> On 06/06/2016 11:16 AM, Rajat Srivastava wrote: >>> Adds helper functions to enable snooping and outstanding burst beat >>> settings. >>> >>> Signed-off-by: Rajat Srivastava <rajat.srivast...@nxp.com> >>> Signed-off-by: Rajesh Bhagat <rajesh.bha...@nxp.com> >>> --- >>> Changes in v2: >>> - Removes SoC specific flags and added helper functions >>> >>> drivers/usb/dwc3/core.c | 45 >>> +++++++++++++++++++++++++++++++++++++++++++++ >>> drivers/usb/dwc3/core.h | 7 +++++++ >>> 2 files changed, 52 insertions(+) >>> >>> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index >>> 85cc96a..0b3c596 100644 >>> --- a/drivers/usb/dwc3/core.c >>> +++ b/drivers/usb/dwc3/core.c >>> @@ -599,6 +599,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) { >> > > Hello Marek, > >> Why is this iterating over a list of all controllers ? > > This function has to be called from Soc specific code to pass some register > settings. And dwc pointer > would not be available there. Hence, index is passed to determine dwc > pointer. > >> Should this be enabled on per-controller basis by some DT prop ? >> > > We are using dwc3 driver with non DT support.
That's real unfortunate. > Best Regards, > Rajesh Bhagat > > >>> + 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 = reg | DWC3_SNOOP_ENABLE; >>> + else >>> + reg = 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; >>> >> >> >> -- >> Best regards, >> Marek Vasut -- Best regards, Marek Vasut _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot