Message ID | 1378807422-1583-4-git-send-email-voice.shen@atmel.com |
---|---|
State | Superseded |
Delegated to: | Marek Vasut |
Headers | show |
Dear Bo Shen, > Add RNDIS gadget support to test atmel usba udc driver > > Signed-off-by: Bo Shen <voice.shen@atmel.com> > > --- > Changes in v2: > - Add a common header to hold atmel usba udc information for different > SoCs > --- > arch/arm/cpu/armv7/at91/sama5d3_devices.c | 12 +++++ > arch/arm/include/asm/arch-at91/at91_common.h | 1 + > arch/arm/include/asm/arch-at91/atmel_usba_udc.h | 64 > +++++++++++++++++++++++ board/atmel/sama5d3xek/sama5d3xek.c | > 13 +++++ > include/configs/sama5d3xek.h | 8 +++ > 5 files changed, 98 insertions(+) > create mode 100644 arch/arm/include/asm/arch-at91/atmel_usba_udc.h > > diff --git a/arch/arm/cpu/armv7/at91/sama5d3_devices.c > b/arch/arm/cpu/armv7/at91/sama5d3_devices.c index e55e1c6..51f0a6d 100644 > --- a/arch/arm/cpu/armv7/at91/sama5d3_devices.c > +++ b/arch/arm/cpu/armv7/at91/sama5d3_devices.c > @@ -202,3 +202,15 @@ void at91_lcd_hw_init(void) > at91_periph_clk_enable(ATMEL_ID_LCDC); > } > #endif > + > +#ifdef CONFIG_USB_GADGET_ATMEL_USBA > +void at91_udp_hw_init(void) > +{ > + struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; > + > + /* Enable UPLL clock */ > + writel(AT91_PMC_UPLLEN | AT91_PMC_BIASEN, &pmc->uckr); > + /* Enable UDPHS clock */ > + at91_periph_clk_enable(ATMEL_ID_UDPHS); > +} > +#endif > diff --git a/arch/arm/include/asm/arch-at91/at91_common.h > b/arch/arm/include/asm/arch-at91/at91_common.h index 9f54fdd..abcb97d > 100644 > --- a/arch/arm/include/asm/arch-at91/at91_common.h > +++ b/arch/arm/include/asm/arch-at91/at91_common.h > @@ -19,6 +19,7 @@ void at91_serial2_hw_init(void); > void at91_seriald_hw_init(void); > void at91_spi0_hw_init(unsigned long cs_mask); > void at91_spi1_hw_init(unsigned long cs_mask); > +void at91_udp_hw_init(void); > void at91_uhp_hw_init(void); > void at91_lcd_hw_init(void); > > diff --git a/arch/arm/include/asm/arch-at91/atmel_usba_udc.h > b/arch/arm/include/asm/arch-at91/atmel_usba_udc.h new file mode 100644 > index 0000000..6f540d2 > --- /dev/null > +++ b/arch/arm/include/asm/arch-at91/atmel_usba_udc.h This new file should be added alongside the USB driver, not board stuff. [...] Best regards, Marek Vasut
Hi Marek Vasut, On 9/10/2013 22:29, Marek Vasut wrote: > Dear Bo Shen, > >> Add RNDIS gadget support to test atmel usba udc driver >> >> Signed-off-by: Bo Shen <voice.shen@atmel.com> >> >> --- >> Changes in v2: >> - Add a common header to hold atmel usba udc information for different >> SoCs >> --- >> arch/arm/cpu/armv7/at91/sama5d3_devices.c | 12 +++++ >> arch/arm/include/asm/arch-at91/at91_common.h | 1 + >> arch/arm/include/asm/arch-at91/atmel_usba_udc.h | 64 >> +++++++++++++++++++++++ board/atmel/sama5d3xek/sama5d3xek.c | >> 13 +++++ >> include/configs/sama5d3xek.h | 8 +++ >> 5 files changed, 98 insertions(+) >> create mode 100644 arch/arm/include/asm/arch-at91/atmel_usba_udc.h >> >> diff --git a/arch/arm/cpu/armv7/at91/sama5d3_devices.c >> b/arch/arm/cpu/armv7/at91/sama5d3_devices.c index e55e1c6..51f0a6d 100644 >> --- a/arch/arm/cpu/armv7/at91/sama5d3_devices.c >> +++ b/arch/arm/cpu/armv7/at91/sama5d3_devices.c >> @@ -202,3 +202,15 @@ void at91_lcd_hw_init(void) >> at91_periph_clk_enable(ATMEL_ID_LCDC); >> } >> #endif >> + >> +#ifdef CONFIG_USB_GADGET_ATMEL_USBA >> +void at91_udp_hw_init(void) >> +{ >> + struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; >> + >> + /* Enable UPLL clock */ >> + writel(AT91_PMC_UPLLEN | AT91_PMC_BIASEN, &pmc->uckr); >> + /* Enable UDPHS clock */ >> + at91_periph_clk_enable(ATMEL_ID_UDPHS); >> +} >> +#endif >> diff --git a/arch/arm/include/asm/arch-at91/at91_common.h >> b/arch/arm/include/asm/arch-at91/at91_common.h index 9f54fdd..abcb97d >> 100644 >> --- a/arch/arm/include/asm/arch-at91/at91_common.h >> +++ b/arch/arm/include/asm/arch-at91/at91_common.h >> @@ -19,6 +19,7 @@ void at91_serial2_hw_init(void); >> void at91_seriald_hw_init(void); >> void at91_spi0_hw_init(unsigned long cs_mask); >> void at91_spi1_hw_init(unsigned long cs_mask); >> +void at91_udp_hw_init(void); >> void at91_uhp_hw_init(void); >> void at91_lcd_hw_init(void); >> >> diff --git a/arch/arm/include/asm/arch-at91/atmel_usba_udc.h >> b/arch/arm/include/asm/arch-at91/atmel_usba_udc.h new file mode 100644 >> index 0000000..6f540d2 >> --- /dev/null >> +++ b/arch/arm/include/asm/arch-at91/atmel_usba_udc.h > > This new file should be added alongside the USB driver, not board stuff. OK, I will move this file into USB driver patch. > [...] > > Best regards, > Marek Vasut > Best Regards, Bo Shen
diff --git a/arch/arm/cpu/armv7/at91/sama5d3_devices.c b/arch/arm/cpu/armv7/at91/sama5d3_devices.c index e55e1c6..51f0a6d 100644 --- a/arch/arm/cpu/armv7/at91/sama5d3_devices.c +++ b/arch/arm/cpu/armv7/at91/sama5d3_devices.c @@ -202,3 +202,15 @@ void at91_lcd_hw_init(void) at91_periph_clk_enable(ATMEL_ID_LCDC); } #endif + +#ifdef CONFIG_USB_GADGET_ATMEL_USBA +void at91_udp_hw_init(void) +{ + struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; + + /* Enable UPLL clock */ + writel(AT91_PMC_UPLLEN | AT91_PMC_BIASEN, &pmc->uckr); + /* Enable UDPHS clock */ + at91_periph_clk_enable(ATMEL_ID_UDPHS); +} +#endif diff --git a/arch/arm/include/asm/arch-at91/at91_common.h b/arch/arm/include/asm/arch-at91/at91_common.h index 9f54fdd..abcb97d 100644 --- a/arch/arm/include/asm/arch-at91/at91_common.h +++ b/arch/arm/include/asm/arch-at91/at91_common.h @@ -19,6 +19,7 @@ void at91_serial2_hw_init(void); void at91_seriald_hw_init(void); void at91_spi0_hw_init(unsigned long cs_mask); void at91_spi1_hw_init(unsigned long cs_mask); +void at91_udp_hw_init(void); void at91_uhp_hw_init(void); void at91_lcd_hw_init(void); diff --git a/arch/arm/include/asm/arch-at91/atmel_usba_udc.h b/arch/arm/include/asm/arch-at91/atmel_usba_udc.h new file mode 100644 index 0000000..6f540d2 --- /dev/null +++ b/arch/arm/include/asm/arch-at91/atmel_usba_udc.h @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2005-2013 Atmel Corporation + * Bo Shen <voice.shen@atmel.com> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#ifndef __ATMEL_USBA_UDC_H__ +#define __ATMEL_USBA_UDC_H__ + +#include <linux/usb/atmel_usba_udc.h> + +#define EP(nam, idx, maxpkt, maxbk, dma, isoc) \ + [idx] = { \ + .name = nam, \ + .index = idx, \ + .fifo_size = maxpkt, \ + .nr_banks = maxbk, \ + .can_dma = dma, \ + .can_isoc = isoc, \ + } + +#if defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45) || \ + defined(CONFIG_AT91SAM9X5) +static struct usba_ep_data usba_udc_ep[] = { + EP("ep0", 0, 64, 1, 0, 0), + EP("ep1", 1, 1024, 2, 1, 1), + EP("ep2", 2, 1024, 2, 1, 1), + EP("ep3", 3, 1024, 3, 1, 0), + EP("ep4", 4, 1024, 3, 1, 0), + EP("ep5", 5, 1024, 3, 1, 1), + EP("ep6", 6, 1024, 3, 1, 1), +}; +#elif defined(CONFIG_SAMA5D3) +static struct usba_ep_data usba_udc_ep[] = { + EP("ep0", 0, 64, 1, 0, 0), + EP("ep1", 1, 1024, 3, 1, 0), + EP("ep2", 2, 1024, 3, 1, 0), + EP("ep3", 3, 1024, 2, 1, 0), + EP("ep4", 4, 1024, 2, 1, 0), + EP("ep5", 5, 1024, 2, 1, 0), + EP("ep6", 6, 1024, 2, 1, 0), + EP("ep7", 7, 1024, 2, 1, 0), + EP("ep8", 8, 1024, 2, 0, 0), + EP("ep9", 9, 1024, 2, 0, 0), + EP("ep10", 10, 1024, 2, 0, 0), + EP("ep11", 11, 1024, 2, 0, 0), + EP("ep12", 12, 1024, 2, 0, 0), + EP("ep13", 13, 1024, 2, 0, 0), + EP("ep14", 14, 1024, 2, 0, 0), + EP("ep15", 15, 1024, 2, 0, 0), +}; +#else +# error "NO usba_udc_ep defined" +#endif + +#undef EP + +struct usba_platform_data pdata = { + .num_ep = ARRAY_SIZE(usba_udc_ep), + .ep = usba_udc_ep, +}; + +#endif diff --git a/board/atmel/sama5d3xek/sama5d3xek.c b/board/atmel/sama5d3xek/sama5d3xek.c index 97caf64..b0965ef 100644 --- a/board/atmel/sama5d3xek/sama5d3xek.c +++ b/board/atmel/sama5d3xek/sama5d3xek.c @@ -21,6 +21,10 @@ #include <net.h> #include <netdev.h> +#ifdef CONFIG_USB_GADGET_ATMEL_USBA +#include <asm/arch/atmel_usba_udc.h> +#endif + DECLARE_GLOBAL_DATA_PTR; /* ------------------------------------------------------------------------- */ @@ -170,6 +174,9 @@ int board_init(void) #ifdef CONFIG_CMD_USB sama5d3xek_usb_hw_init(); #endif +#ifdef CONFIG_USB_GADGET_ATMEL_USBA + at91_udp_hw_init(); +#endif #ifdef CONFIG_GENERIC_ATMEL_MCI sama5d3xek_mci_hw_init(); #endif @@ -221,6 +228,12 @@ int board_eth_init(bd_t *bis) if (has_gmac()) rc = macb_eth_initialize(0, (void *)ATMEL_BASE_GMAC, 0x00); #endif +#ifdef CONFIG_USB_GADGET_ATMEL_USBA + usba_udc_probe(&pdata); +#ifdef CONFIG_USB_ETH_RNDIS + usb_eth_initialize(bis); +#endif +#endif return rc; } diff --git a/include/configs/sama5d3xek.h b/include/configs/sama5d3xek.h index 76fa500..79c0068 100644 --- a/include/configs/sama5d3xek.h +++ b/include/configs/sama5d3xek.h @@ -162,6 +162,14 @@ #define CONFIG_USB_STORAGE #endif +/* USB device */ +#define CONFIG_USB_GADGET +#define CONFIG_USB_GADGET_DUALSPEED +#define CONFIG_USB_GADGET_ATMEL_USBA +#define CONFIG_USB_ETHER +#define CONFIG_USB_ETH_RNDIS +#define CONFIG_USBNET_MANUFACTURER "Atmel SAMA5D3xEK" + #if defined(CONFIG_CMD_USB) || defined(CONFIG_CMD_MMC) #define CONFIG_CMD_FAT #endif
Add RNDIS gadget support to test atmel usba udc driver Signed-off-by: Bo Shen <voice.shen@atmel.com> --- Changes in v2: - Add a common header to hold atmel usba udc information for different SoCs --- arch/arm/cpu/armv7/at91/sama5d3_devices.c | 12 +++++ arch/arm/include/asm/arch-at91/at91_common.h | 1 + arch/arm/include/asm/arch-at91/atmel_usba_udc.h | 64 +++++++++++++++++++++++ board/atmel/sama5d3xek/sama5d3xek.c | 13 +++++ include/configs/sama5d3xek.h | 8 +++ 5 files changed, 98 insertions(+) create mode 100644 arch/arm/include/asm/arch-at91/atmel_usba_udc.h