[U-Boot] [PATCH v2 3/4] armv8/fsl-layerscape: add dwc3 gadget driver support
Rajesh Bhagat
rajesh.bhagat at nxp.com
Mon Jul 4 06:37:15 CEST 2016
> -----Original Message-----
> From: Lukasz Majewski [mailto:l.majewski at samsung.com]
> Sent: Thursday, June 23, 2016 8:27 PM
> To: Rajat Srivastava <rajat.srivastava at nxp.com>
> Cc: u-boot at lists.denx.de; sjg at chromium.org; marex at denx.de;
> albert.u.boot at aribaud.net; prabhakar at freescale.com; york sun
> <york.sun at nxp.com>; Mingkai Hu <mingkai.hu at nxp.com>; Rajesh Bhagat
> <rajesh.bhagat at nxp.com>; michal.simek at xilinx.com; felipe.balbi at linux.intel.com
> Subject: Re: [PATCH v2 3/4] armv8/fsl-layerscape: add dwc3 gadget driver support
>
> Hi Rajat,
>
> > Implements the dwc3 gadget driver support for LS1043 platform, and
> > performs below operations:
> > 1. Enables snooping support for DWC3 controller.
> > 2. Enables cache coherency in LS1043 platform.
> >
> > Signed-off-by: Rajat Srivastava <rajat.srivastava at nxp.com>
> > Signed-off-by: Rajesh Bhagat <rajesh.bhagat at nxp.com>
> > Reviewed-by: Lukasz Majewski <l.majewski at samsung.com>
> > ---
> > Changes in v2:
> > - Moves DWC3 driver specific code to helper functions
> > - Calls helper functions in SoC specific implementation
> >
> > arch/arm/cpu/armv8/fsl-layerscape/soc.c | 93
> > ++++++++++++++++++++++ .../include/asm/arch-fsl-
> layerscape/immap_lsch2
> > ++++++++++++++++++++++ .h
> > | 6 ++ 2 files changed, 99 insertions(+)
> >
> > diff --git a/arch/arm/cpu/armv8/fsl-layerscape/soc.c
> > b/arch/arm/cpu/armv8/fsl-layerscape/soc.c index 0fb5c7f..cc07524
> > 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/soc.c
> > +++ b/arch/arm/cpu/armv8/fsl-layerscape/soc.c
> > @@ -17,6 +17,10 @@
> > #ifdef CONFIG_CHAIN_OF_TRUST
> > #include <fsl_validate.h>
> > #endif
> > +#include <usb.h>
> > +#include <dwc3-uboot.h>
> > +#include <linux/usb/xhci-fsl.h>
> > +
> >
> > DECLARE_GLOBAL_DATA_PTR;
> >
> > @@ -318,9 +322,18 @@ void fsl_lsch2_early_init_f(void) #if
> > defined(CONFIG_FSL_QSPI) && !defined(CONFIG_QSPI_BOOT)
> > out_be32(&scfg->qspi_cfg, SCFG_QSPI_CLKSEL); #endif
> > + /* Make SEC and USB reads and writes snoopable */ #if
> > +defined(CONFIG_LS1043A)
> > + setbits_be32(&scfg->snpcnfgcr, SCFG_SNPCNFGCR_SECRDSNP |
> > + SCFG_SNPCNFGCR_SECWRSNP |
> > SCFG_SNPCNFGCR_USB1RDSNP |
> > + SCFG_SNPCNFGCR_USB1WRSNP |
> > SCFG_SNPCNFGCR_USB2RDSNP |
> > + SCFG_SNPCNFGCR_USB2WRSNP |
> > SCFG_SNPCNFGCR_USB3RDSNP |
> > + SCFG_SNPCNFGCR_USB3WRSNP);
> > +#else
> > /* Make SEC reads and writes snoopable */
> > setbits_be32(&scfg->snpcnfgcr, SCFG_SNPCNFGCR_SECRDSNP |
> > SCFG_SNPCNFGCR_SECWRSNP);
> > +#endif
> >
> > /*
> > * Enable snoop requests and DVM message requests for @@ -336,6
> > +349,86 @@ void fsl_lsch2_early_init_f(void) } #endif
> >
> > +#ifdef CONFIG_USB_DWC3
> > +
> > +#if defined(CONFIG_LS1043A)
> > +static struct dwc3_device dwc3_device_data0 = {
> > + .maximum_speed = USB_SPEED_HIGH,
> > + .base = CONFIG_SYS_FSL_XHCI_USB1_ADDR,
> > + .dr_mode = USB_DR_MODE_PERIPHERAL,
> > + .index = 0,
> > +};
> > +
> > +static struct dwc3_device dwc3_device_data1 = {
> > + .maximum_speed = USB_SPEED_HIGH,
> > + .base = CONFIG_SYS_FSL_XHCI_USB2_ADDR,
> > + .dr_mode = USB_DR_MODE_PERIPHERAL,
> > + .index = 1,
> > +};
> > +
> > +static struct dwc3_device dwc3_device_data2 = {
> > + .maximum_speed = USB_SPEED_HIGH,
> > + .base = CONFIG_SYS_FSL_XHCI_USB3_ADDR,
> > + .dr_mode = USB_DR_MODE_PERIPHERAL,
> > + .index = 2,
> > +};
> > +
> > +int usb_gadget_handle_interrupts(int index) {
> > + dwc3_uboot_handle_interrupt(index);
> > + return 0;
> > +}
> > +#endif
> > +
> > +int board_usb_init(int index, enum usb_init_type init)
>
Hello Lukasz,
> Are those usb related functions generic? To ask in another way, would it be possible to
> reuse those functions for other armv8 boards?
>
We are planning to use the above code for all the armv8 boards, e.g. LS1043A and LS1012A
as they use the same chasis. Hence kept the code in armv8 specific file instead of board files.
Best Regards,
Rajesh Bhagat
> Please correct me if I'm wrong, but it seems that LS1043 is a single board. Maybe it
> would be better to place this code in a separate ./board/nxp/ls1043 directory?
>
> > +{
> > + switch (init) {
> > + case USB_INIT_DEVICE:
> > + switch (index) {
> > +#if defined(CONFIG_LS1043A)
> > + case 0:
> > + dwc3_uboot_init(&dwc3_device_data0);
> > + break;
> > + case 1:
> > + dwc3_uboot_init(&dwc3_device_data1);
> > + break;
> > + case 2:
> > + dwc3_uboot_init(&dwc3_device_data2);
> > + break;
> > +#endif
> > + default:
> > + printf("Invalid Controller Index\n");
> > + return -1;
> > + }
> > +#if defined(CONFIG_LS1043A)
> > + dwc3_core_incr_burst_enable(index, 0xf, 0xf);
> > + dwc3_core_set_snooping(index, true); #endif
> > + break;
> > + default:
> > + break;
> > + }
> > +
> > + return 0;
> > +}
> > +
> > +int board_usb_cleanup(int index, enum usb_init_type init) {
> > + switch (init) {
> > + case USB_INIT_DEVICE:
> > +#if defined(CONFIG_LS1043A)
> > + dwc3_uboot_exit(index);
> > +#endif
> > + break;
> > + default:
> > + break;
> > + }
> > + return 0;
> > +}
> > +#endif
> > +
> > +
> > +
> > #ifdef CONFIG_BOARD_LATE_INIT
> > int board_late_init(void)
> > {
> > diff --git a/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch2.h
> > b/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch2.h index
> > 57b99d4..13ba1a6 100644 ---
> > a/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch2.h +++
> > b/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch2.h @@ -328,6
> > +328,12 @@ struct ccsr_gur {
> > #define SCFG_SNPCNFGCR_SECRDSNP 0x80000000
> > #define SCFG_SNPCNFGCR_SECWRSNP 0x40000000
> > +#define SCFG_SNPCNFGCR_USB1RDSNP 0x00200000
> > +#define SCFG_SNPCNFGCR_USB1WRSNP 0x00100000
> > +#define SCFG_SNPCNFGCR_USB2RDSNP 0x00008000
> > +#define SCFG_SNPCNFGCR_USB2WRSNP 0x00010000
> > +#define SCFG_SNPCNFGCR_USB3RDSNP 0x00002000
> > +#define SCFG_SNPCNFGCR_USB3WRSNP 0x00004000
> >
> > /* Supplemental Configuration Unit */ struct ccsr_scfg {
>
>
>
> --
> Best regards,
>
> Lukasz Majewski
>
> Samsung R&D Institute Poland (SRPOL) | Linux Platform Group
More information about the U-Boot
mailing list