linux-usb.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/7] usb: gadget: udc: atmel: add usb device support for SAM9x60 SoC
@ 2020-05-15 11:16 cristian.birsan
  2020-05-15 11:16 ` [PATCH v2 1/7] usb: gadget: udc: atmel: use of_find_matching_node_and_match cristian.birsan
                   ` (7 more replies)
  0 siblings, 8 replies; 12+ messages in thread
From: cristian.birsan @ 2020-05-15 11:16 UTC (permalink / raw)
  To: balbi, gregkh, nicolas.ferre, alexandre.belloni,
	ludovic.desroches, robh+dt, mark.rutland, linux-arm-kernel,
	linux-usb, devicetree, linux-kernel
  Cc: Cristian Birsan

From: Cristian Birsan <cristian.birsan@microchip.com>

This patch set adds usb device support for SAM9x60 SoC.
The DPRAM memory for the USB High Speed Device Port (UDPHS) hardware
block was increased and the allocation method is changed. This patch
series simplifies the endpoint allocation scheme to acomodate this SoC
and the old ones.

Changes in v2:
- drop the patch that adds reference to pmc for sam9x60
- use dt-bindings: usb prefix
- enable usb device in device tree

Claudiu Beznea (1):
  usb: gadget: udc: atmel: use of_find_matching_node_and_match

Cristian Birsan (6):
  dt-bindings: usb: atmel: Update DT bindings documentation for sam9x60
  usb: gadget: udc: atmel: simplify endpoint allocation
  usb: gadget: udc: atmel: use 1 bank endpoints for control transfers
  usb: gadget: udc: atmel: rename errata into caps
  usb: gadget: udc: atmel: update endpoint allocation for sam9x60
  ARM: dts: at91: sam9x60ek: enable usb device

 .../devicetree/bindings/usb/atmel-usb.txt     |  1 +
 arch/arm/boot/dts/at91-sam9x60ek.dts          | 13 +++
 arch/arm/boot/dts/sam9x60.dtsi                | 74 ++++++++++++++++
 drivers/usb/gadget/udc/atmel_usba_udc.c       | 87 ++++++++++++-------
 drivers/usb/gadget/udc/atmel_usba_udc.h       |  6 +-
 5 files changed, 145 insertions(+), 36 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v2 1/7] usb: gadget: udc: atmel: use of_find_matching_node_and_match
  2020-05-15 11:16 [PATCH v2 0/7] usb: gadget: udc: atmel: add usb device support for SAM9x60 SoC cristian.birsan
@ 2020-05-15 11:16 ` cristian.birsan
  2020-05-15 15:47   ` Felipe Balbi
  2020-05-15 11:16 ` [PATCH v2 2/7] dt-bindings: usb: atmel: Update DT bindings documentation for sam9x60 cristian.birsan
                   ` (6 subsequent siblings)
  7 siblings, 1 reply; 12+ messages in thread
From: cristian.birsan @ 2020-05-15 11:16 UTC (permalink / raw)
  To: balbi, gregkh, nicolas.ferre, alexandre.belloni,
	ludovic.desroches, robh+dt, mark.rutland, linux-arm-kernel,
	linux-usb, devicetree, linux-kernel
  Cc: Claudiu Beznea

From: Claudiu Beznea <claudiu.beznea@microchip.com>

Instead of trying to match every possible compatible use
of_find_matching_node_and_match() and pass the compatible array.

Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
 drivers/usb/gadget/udc/atmel_usba_udc.c | 25 ++++++++++++++++++-------
 1 file changed, 18 insertions(+), 7 deletions(-)

diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.c b/drivers/usb/gadget/udc/atmel_usba_udc.c
index 22200341c8ec..2b154085dc6a 100644
--- a/drivers/usb/gadget/udc/atmel_usba_udc.c
+++ b/drivers/usb/gadget/udc/atmel_usba_udc.c
@@ -2052,6 +2052,13 @@ static const struct of_device_id atmel_udc_dt_ids[] = {
 
 MODULE_DEVICE_TABLE(of, atmel_udc_dt_ids);
 
+static const struct of_device_id atmel_pmc_dt_ids[] = {
+	{ .compatible = "atmel,at91sam9g45-pmc" },
+	{ .compatible = "atmel,at91sam9rl-pmc" },
+	{ .compatible = "atmel,at91sam9x5-pmc" },
+	{ /* sentinel */ }
+};
+
 static struct usba_ep * atmel_udc_of_init(struct platform_device *pdev,
 						    struct usba_udc *udc)
 {
@@ -2067,13 +2074,17 @@ static struct usba_ep * atmel_udc_of_init(struct platform_device *pdev,
 		return ERR_PTR(-EINVAL);
 
 	udc->errata = match->data;
-	udc->pmc = syscon_regmap_lookup_by_compatible("atmel,at91sam9g45-pmc");
-	if (IS_ERR(udc->pmc))
-		udc->pmc = syscon_regmap_lookup_by_compatible("atmel,at91sam9rl-pmc");
-	if (IS_ERR(udc->pmc))
-		udc->pmc = syscon_regmap_lookup_by_compatible("atmel,at91sam9x5-pmc");
-	if (udc->errata && IS_ERR(udc->pmc))
-		return ERR_CAST(udc->pmc);
+	if (udc->errata) {
+		pp = of_find_matching_node_and_match(NULL, atmel_pmc_dt_ids,
+						     NULL);
+		if (!pp)
+			return ERR_PTR(-ENODEV);
+
+		udc->pmc = syscon_node_to_regmap(pp);
+		of_node_put(pp);
+		if (IS_ERR(udc->pmc))
+			return ERR_CAST(udc->pmc);
+	}
 
 	udc->num_ep = 0;
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 2/7] dt-bindings: usb: atmel: Update DT bindings documentation for sam9x60
  2020-05-15 11:16 [PATCH v2 0/7] usb: gadget: udc: atmel: add usb device support for SAM9x60 SoC cristian.birsan
  2020-05-15 11:16 ` [PATCH v2 1/7] usb: gadget: udc: atmel: use of_find_matching_node_and_match cristian.birsan
@ 2020-05-15 11:16 ` cristian.birsan
  2020-05-28 19:26   ` Rob Herring
  2020-05-15 11:16 ` [PATCH v2 3/7] usb: gadget: udc: atmel: simplify endpoint allocation cristian.birsan
                   ` (5 subsequent siblings)
  7 siblings, 1 reply; 12+ messages in thread
From: cristian.birsan @ 2020-05-15 11:16 UTC (permalink / raw)
  To: balbi, gregkh, nicolas.ferre, alexandre.belloni,
	ludovic.desroches, robh+dt, mark.rutland, linux-arm-kernel,
	linux-usb, devicetree, linux-kernel
  Cc: Cristian Birsan

From: Cristian Birsan <cristian.birsan@microchip.com>

Add sam9x60 binding.

Signed-off-by: Cristian Birsan <cristian.birsan@microchip.com>
---
 Documentation/devicetree/bindings/usb/atmel-usb.txt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/usb/atmel-usb.txt b/Documentation/devicetree/bindings/usb/atmel-usb.txt
index 44e80153b148..bae2b928a014 100644
--- a/Documentation/devicetree/bindings/usb/atmel-usb.txt
+++ b/Documentation/devicetree/bindings/usb/atmel-usb.txt
@@ -82,6 +82,7 @@ Required properties:
 	       "atmel,at91sam9rl-udc"
 	       "atmel,at91sam9g45-udc"
 	       "atmel,sama5d3-udc"
+	       "microchip,sam9x60-udc"
  - reg: Address and length of the register set for the device
  - interrupts: Should contain usba interrupt
  - clocks: Should reference the peripheral and host clocks
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 3/7] usb: gadget: udc: atmel: simplify endpoint allocation
  2020-05-15 11:16 [PATCH v2 0/7] usb: gadget: udc: atmel: add usb device support for SAM9x60 SoC cristian.birsan
  2020-05-15 11:16 ` [PATCH v2 1/7] usb: gadget: udc: atmel: use of_find_matching_node_and_match cristian.birsan
  2020-05-15 11:16 ` [PATCH v2 2/7] dt-bindings: usb: atmel: Update DT bindings documentation for sam9x60 cristian.birsan
@ 2020-05-15 11:16 ` cristian.birsan
  2020-05-15 11:16 ` [PATCH v2 4/7] usb: gadget: udc: atmel: use 1 bank endpoints for control transfers cristian.birsan
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 12+ messages in thread
From: cristian.birsan @ 2020-05-15 11:16 UTC (permalink / raw)
  To: balbi, gregkh, nicolas.ferre, alexandre.belloni,
	ludovic.desroches, robh+dt, mark.rutland, linux-arm-kernel,
	linux-usb, devicetree, linux-kernel
  Cc: Cristian Birsan

From: Cristian Birsan <cristian.birsan@microchip.com>

Simplify the endpoint allocation and cleanup the code.

Signed-off-by: Cristian Birsan <cristian.birsan@microchip.com>
---
 drivers/usb/gadget/udc/atmel_usba_udc.c | 21 ++++++++-------------
 drivers/usb/gadget/udc/atmel_usba_udc.h |  1 -
 2 files changed, 8 insertions(+), 14 deletions(-)

diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.c b/drivers/usb/gadget/udc/atmel_usba_udc.c
index 2b154085dc6a..beb7246935a8 100644
--- a/drivers/usb/gadget/udc/atmel_usba_udc.c
+++ b/drivers/usb/gadget/udc/atmel_usba_udc.c
@@ -1097,7 +1097,6 @@ static struct usb_ep *atmel_usba_match_ep(struct usb_gadget *gadget,
 
 		ep->ept_cfg |= USBA_BF(BK_NUMBER, ep->nr_banks);
 
-		ep->udc->configured_ep++;
 	}
 
 	return _ep;
@@ -1790,7 +1789,7 @@ static irqreturn_t usba_udc_irq(int irq, void *devid)
 
 	if (status & USBA_END_OF_RESET) {
 		struct usba_ep *ep0, *ep;
-		int i, n;
+		int i;
 
 		usba_writel(udc, INT_CLR,
 			USBA_END_OF_RESET|USBA_END_OF_RESUME
@@ -1838,13 +1837,14 @@ static irqreturn_t usba_udc_irq(int irq, void *devid)
 				"ODD: EP0 configuration is invalid!\n");
 
 		/* Preallocate other endpoints */
-		n = fifo_mode ? udc->num_ep : udc->configured_ep;
-		for (i = 1; i < n; i++) {
+		for (i = 1; i < udc->num_ep; i++) {
 			ep = &udc->usba_ep[i];
-			usba_ep_writel(ep, CFG, ep->ept_cfg);
-			if (!(usba_ep_readl(ep, CFG) & USBA_EPT_MAPPED))
-				dev_err(&udc->pdev->dev,
-					"ODD: EP%d configuration is invalid!\n", i);
+			if (ep->ep.claimed) {
+				usba_ep_writel(ep, CFG, ep->ept_cfg);
+				if (!(usba_ep_readl(ep, CFG) & USBA_EPT_MAPPED))
+					dev_err(&udc->pdev->dev,
+						"ODD: EP%d configuration is invalid!\n", i);
+			}
 		}
 	}
 
@@ -2011,10 +2011,6 @@ static int atmel_usba_stop(struct usb_gadget *gadget)
 	if (udc->vbus_pin)
 		disable_irq(gpiod_to_irq(udc->vbus_pin));
 
-	if (fifo_mode == 0)
-		udc->configured_ep = 1;
-
-	udc->suspended = false;
 	usba_stop(udc);
 
 	udc->driver = NULL;
@@ -2095,7 +2091,6 @@ static struct usba_ep * atmel_udc_of_init(struct platform_device *pdev,
 		pp = NULL;
 		while ((pp = of_get_next_child(np, pp)))
 			udc->num_ep++;
-		udc->configured_ep = 1;
 	} else {
 		udc->num_ep = usba_config_fifo_table(udc);
 	}
diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.h b/drivers/usb/gadget/udc/atmel_usba_udc.h
index a0225e4543d4..8de79356d31d 100644
--- a/drivers/usb/gadget/udc/atmel_usba_udc.h
+++ b/drivers/usb/gadget/udc/atmel_usba_udc.h
@@ -324,7 +324,6 @@ struct usba_udc {
 	int irq;
 	struct gpio_desc *vbus_pin;
 	int num_ep;
-	int configured_ep;
 	struct usba_fifo_cfg *fifo_cfg;
 	struct clk *pclk;
 	struct clk *hclk;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 4/7] usb: gadget: udc: atmel: use 1 bank endpoints for control transfers
  2020-05-15 11:16 [PATCH v2 0/7] usb: gadget: udc: atmel: add usb device support for SAM9x60 SoC cristian.birsan
                   ` (2 preceding siblings ...)
  2020-05-15 11:16 ` [PATCH v2 3/7] usb: gadget: udc: atmel: simplify endpoint allocation cristian.birsan
@ 2020-05-15 11:16 ` cristian.birsan
  2020-05-15 11:16 ` [PATCH v2 5/7] usb: gadget: udc: atmel: rename errata into caps cristian.birsan
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 12+ messages in thread
From: cristian.birsan @ 2020-05-15 11:16 UTC (permalink / raw)
  To: balbi, gregkh, nicolas.ferre, alexandre.belloni,
	ludovic.desroches, robh+dt, mark.rutland, linux-arm-kernel,
	linux-usb, devicetree, linux-kernel
  Cc: Cristian Birsan

From: Cristian Birsan <cristian.birsan@microchip.com>

Use 1 bank endpoints for control transfers

Signed-off-by: Cristian Birsan <cristian.birsan@microchip.com>
---
 drivers/usb/gadget/udc/atmel_usba_udc.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.c b/drivers/usb/gadget/udc/atmel_usba_udc.c
index beb7246935a8..a73b0e78a357 100644
--- a/drivers/usb/gadget/udc/atmel_usba_udc.c
+++ b/drivers/usb/gadget/udc/atmel_usba_udc.c
@@ -1061,6 +1061,7 @@ static struct usb_ep *atmel_usba_match_ep(struct usb_gadget *gadget,
 
 		switch (usb_endpoint_type(desc)) {
 		case USB_ENDPOINT_XFER_CONTROL:
+			ep->nr_banks = 1;
 			break;
 
 		case USB_ENDPOINT_XFER_ISOC:
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 5/7] usb: gadget: udc: atmel: rename errata into caps
  2020-05-15 11:16 [PATCH v2 0/7] usb: gadget: udc: atmel: add usb device support for SAM9x60 SoC cristian.birsan
                   ` (3 preceding siblings ...)
  2020-05-15 11:16 ` [PATCH v2 4/7] usb: gadget: udc: atmel: use 1 bank endpoints for control transfers cristian.birsan
@ 2020-05-15 11:16 ` cristian.birsan
  2020-05-15 11:16 ` [PATCH v2 6/7] usb: gadget: udc: atmel: update endpoint allocation for sam9x60 cristian.birsan
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 12+ messages in thread
From: cristian.birsan @ 2020-05-15 11:16 UTC (permalink / raw)
  To: balbi, gregkh, nicolas.ferre, alexandre.belloni,
	ludovic.desroches, robh+dt, mark.rutland, linux-arm-kernel,
	linux-usb, devicetree, linux-kernel
  Cc: Cristian Birsan

From: Cristian Birsan <cristian.birsan@microchip.com>

Rename errata structure into capabilities (caps). It will be used to add
capabilities for new SoCs. Get the pointer to PMC only for the SoCs that
need it to perform toggle_bias or pulse_bias.

Signed-off-by: Cristian Birsan <cristian.birsan@microchip.com>
---
 drivers/usb/gadget/udc/atmel_usba_udc.c | 20 ++++++++++----------
 drivers/usb/gadget/udc/atmel_usba_udc.h |  4 ++--
 2 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.c b/drivers/usb/gadget/udc/atmel_usba_udc.c
index a73b0e78a357..2b1a0b6df0fe 100644
--- a/drivers/usb/gadget/udc/atmel_usba_udc.c
+++ b/drivers/usb/gadget/udc/atmel_usba_udc.c
@@ -389,8 +389,8 @@ static int vbus_is_present(struct usba_udc *udc)
 
 static void toggle_bias(struct usba_udc *udc, int is_on)
 {
-	if (udc->errata && udc->errata->toggle_bias)
-		udc->errata->toggle_bias(udc, is_on);
+	if (udc->caps && udc->caps->toggle_bias)
+		udc->caps->toggle_bias(udc, is_on);
 }
 
 static void generate_bias_pulse(struct usba_udc *udc)
@@ -398,8 +398,8 @@ static void generate_bias_pulse(struct usba_udc *udc)
 	if (!udc->bias_pulse_needed)
 		return;
 
-	if (udc->errata && udc->errata->pulse_bias)
-		udc->errata->pulse_bias(udc);
+	if (udc->caps && udc->caps->pulse_bias)
+		udc->caps->pulse_bias(udc);
 
 	udc->bias_pulse_needed = false;
 }
@@ -2032,17 +2032,17 @@ static void at91sam9g45_pulse_bias(struct usba_udc *udc)
 			   AT91_PMC_BIASEN);
 }
 
-static const struct usba_udc_errata at91sam9rl_errata = {
+static const struct usba_udc_caps at91sam9rl_caps = {
 	.toggle_bias = at91sam9rl_toggle_bias,
 };
 
-static const struct usba_udc_errata at91sam9g45_errata = {
+static const struct usba_udc_caps at91sam9g45_caps = {
 	.pulse_bias = at91sam9g45_pulse_bias,
 };
 
 static const struct of_device_id atmel_udc_dt_ids[] = {
-	{ .compatible = "atmel,at91sam9rl-udc", .data = &at91sam9rl_errata },
-	{ .compatible = "atmel,at91sam9g45-udc", .data = &at91sam9g45_errata },
+	{ .compatible = "atmel,at91sam9rl-udc", .data = &at91sam9rl_caps },
+	{ .compatible = "atmel,at91sam9g45-udc", .data = &at91sam9g45_caps },
 	{ .compatible = "atmel,sama5d3-udc" },
 	{ /* sentinel */ }
 };
@@ -2070,8 +2070,8 @@ static struct usba_ep * atmel_udc_of_init(struct platform_device *pdev,
 	if (!match)
 		return ERR_PTR(-EINVAL);
 
-	udc->errata = match->data;
-	if (udc->errata) {
+	udc->caps = match->data;
+	if (udc->caps && (udc->caps->pulse_bias || udc->caps->toggle_bias)) {
 		pp = of_find_matching_node_and_match(NULL, atmel_pmc_dt_ids,
 						     NULL);
 		if (!pp)
diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.h b/drivers/usb/gadget/udc/atmel_usba_udc.h
index 8de79356d31d..1a0f77bf8d4f 100644
--- a/drivers/usb/gadget/udc/atmel_usba_udc.h
+++ b/drivers/usb/gadget/udc/atmel_usba_udc.h
@@ -302,7 +302,7 @@ struct usba_request {
 	unsigned int				mapped:1;
 };
 
-struct usba_udc_errata {
+struct usba_udc_caps {
 	void (*toggle_bias)(struct usba_udc *udc, int is_on);
 	void (*pulse_bias)(struct usba_udc *udc);
 };
@@ -320,7 +320,7 @@ struct usba_udc {
 	struct usb_gadget gadget;
 	struct usb_gadget_driver *driver;
 	struct platform_device *pdev;
-	const struct usba_udc_errata *errata;
+	const struct usba_udc_caps *caps;
 	int irq;
 	struct gpio_desc *vbus_pin;
 	int num_ep;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 6/7] usb: gadget: udc: atmel: update endpoint allocation for sam9x60
  2020-05-15 11:16 [PATCH v2 0/7] usb: gadget: udc: atmel: add usb device support for SAM9x60 SoC cristian.birsan
                   ` (4 preceding siblings ...)
  2020-05-15 11:16 ` [PATCH v2 5/7] usb: gadget: udc: atmel: rename errata into caps cristian.birsan
@ 2020-05-15 11:16 ` cristian.birsan
  2020-05-15 11:16 ` [PATCH v2 7/7] ARM: dts: at91: sam9x60ek: enable usb device cristian.birsan
  2020-05-15 15:02 ` [PATCH v2 0/7] usb: gadget: udc: atmel: add usb device support for SAM9x60 SoC Alexandre Belloni
  7 siblings, 0 replies; 12+ messages in thread
From: cristian.birsan @ 2020-05-15 11:16 UTC (permalink / raw)
  To: balbi, gregkh, nicolas.ferre, alexandre.belloni,
	ludovic.desroches, robh+dt, mark.rutland, linux-arm-kernel,
	linux-usb, devicetree, linux-kernel
  Cc: Cristian Birsan

From: Cristian Birsan <cristian.birsan@microchip.com>

The DPRAM memory from the USB High Speed Device Port (UDPHS) hardware
block was increased. This patch updates the endpoint allocation for sam9x60
to take advantage of this larger memory. At the same time the
constraint to allocate the endpoints in order was lifted. To handle old
and new hardware in the same driver the capabilities (caps) structure
was extended.

Signed-off-by: Cristian Birsan <cristian.birsan@microchip.com>
---
 drivers/usb/gadget/udc/atmel_usba_udc.c | 22 ++++++++++++++++++----
 drivers/usb/gadget/udc/atmel_usba_udc.h |  1 +
 2 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.c b/drivers/usb/gadget/udc/atmel_usba_udc.c
index 2b1a0b6df0fe..ecd0fa9823bb 100644
--- a/drivers/usb/gadget/udc/atmel_usba_udc.c
+++ b/drivers/usb/gadget/udc/atmel_usba_udc.c
@@ -1066,12 +1066,14 @@ static struct usb_ep *atmel_usba_match_ep(struct usb_gadget *gadget,
 
 		case USB_ENDPOINT_XFER_ISOC:
 			ep->fifo_size = 1024;
-			ep->nr_banks = 2;
+			if (ep->udc->caps->ep_prealloc)
+				ep->nr_banks = 2;
 			break;
 
 		case USB_ENDPOINT_XFER_BULK:
 			ep->fifo_size = 512;
-			ep->nr_banks = 1;
+			if (ep->udc->caps->ep_prealloc)
+				ep->nr_banks = 1;
 			break;
 
 		case USB_ENDPOINT_XFER_INT:
@@ -1081,7 +1083,8 @@ static struct usb_ep *atmel_usba_match_ep(struct usb_gadget *gadget,
 			else
 				ep->fifo_size =
 				    roundup_pow_of_two(le16_to_cpu(desc->wMaxPacketSize));
-			ep->nr_banks = 1;
+			if (ep->udc->caps->ep_prealloc)
+				ep->nr_banks = 1;
 			break;
 		}
 
@@ -2034,16 +2037,27 @@ static void at91sam9g45_pulse_bias(struct usba_udc *udc)
 
 static const struct usba_udc_caps at91sam9rl_caps = {
 	.toggle_bias = at91sam9rl_toggle_bias,
+	.ep_prealloc = true,
 };
 
 static const struct usba_udc_caps at91sam9g45_caps = {
 	.pulse_bias = at91sam9g45_pulse_bias,
+	.ep_prealloc = true,
+};
+
+static const struct usba_udc_caps sama5d3_caps = {
+	.ep_prealloc = true,
+};
+
+static const struct usba_udc_caps at91sam9x60_caps = {
+	.ep_prealloc = false,
 };
 
 static const struct of_device_id atmel_udc_dt_ids[] = {
 	{ .compatible = "atmel,at91sam9rl-udc", .data = &at91sam9rl_caps },
 	{ .compatible = "atmel,at91sam9g45-udc", .data = &at91sam9g45_caps },
-	{ .compatible = "atmel,sama5d3-udc" },
+	{ .compatible = "atmel,sama5d3-udc", .data = &sama5d3_caps },
+	{ .compatible = "microchip,sam9x60-udc", .data = &at91sam9x60_caps },
 	{ /* sentinel */ }
 };
 
diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.h b/drivers/usb/gadget/udc/atmel_usba_udc.h
index 1a0f77bf8d4f..f9239e200e7a 100644
--- a/drivers/usb/gadget/udc/atmel_usba_udc.h
+++ b/drivers/usb/gadget/udc/atmel_usba_udc.h
@@ -305,6 +305,7 @@ struct usba_request {
 struct usba_udc_caps {
 	void (*toggle_bias)(struct usba_udc *udc, int is_on);
 	void (*pulse_bias)(struct usba_udc *udc);
+	bool ep_prealloc;
 };
 
 struct usba_udc {
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v2 7/7] ARM: dts: at91: sam9x60ek: enable usb device
  2020-05-15 11:16 [PATCH v2 0/7] usb: gadget: udc: atmel: add usb device support for SAM9x60 SoC cristian.birsan
                   ` (5 preceding siblings ...)
  2020-05-15 11:16 ` [PATCH v2 6/7] usb: gadget: udc: atmel: update endpoint allocation for sam9x60 cristian.birsan
@ 2020-05-15 11:16 ` cristian.birsan
  2020-05-15 15:02 ` [PATCH v2 0/7] usb: gadget: udc: atmel: add usb device support for SAM9x60 SoC Alexandre Belloni
  7 siblings, 0 replies; 12+ messages in thread
From: cristian.birsan @ 2020-05-15 11:16 UTC (permalink / raw)
  To: balbi, gregkh, nicolas.ferre, alexandre.belloni,
	ludovic.desroches, robh+dt, mark.rutland, linux-arm-kernel,
	linux-usb, devicetree, linux-kernel
  Cc: Cristian Birsan

From: Cristian Birsan <cristian.birsan@microchip.com>

Enable usb device for sam9x60ek board.

Signed-off-by: Cristian Birsan <cristian.birsan@microchip.com>
---
 arch/arm/boot/dts/at91-sam9x60ek.dts | 13 +++++
 arch/arm/boot/dts/sam9x60.dtsi       | 74 ++++++++++++++++++++++++++++
 2 files changed, 87 insertions(+)

diff --git a/arch/arm/boot/dts/at91-sam9x60ek.dts b/arch/arm/boot/dts/at91-sam9x60ek.dts
index b484745bf2d4..325d0fc8674f 100644
--- a/arch/arm/boot/dts/at91-sam9x60ek.dts
+++ b/arch/arm/boot/dts/at91-sam9x60ek.dts
@@ -547,6 +547,12 @@
 			atmel,pins = <AT91_PIOD 18 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>;
 		};
 	};
+
+	usb0 {
+		pinctrl_usba_vbus: usba_vbus {
+			atmel,pins = <AT91_PIOB 16 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>;
+		};
+	};
 }; /* pinctrl */
 
 &pmc {
@@ -634,6 +640,13 @@
 	};
 };
 
+&usb0 {
+	atmel,vbus-gpio = <&pioB 16 GPIO_ACTIVE_HIGH>;
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_usba_vbus>;
+	status = "okay";
+};
+
 &usb1 {
 	num-ports = <3>;
 	atmel,vbus-gpio = <0
diff --git a/arch/arm/boot/dts/sam9x60.dtsi b/arch/arm/boot/dts/sam9x60.dtsi
index 6763423d64b8..5cd2b9054762 100644
--- a/arch/arm/boot/dts/sam9x60.dtsi
+++ b/arch/arm/boot/dts/sam9x60.dtsi
@@ -69,6 +69,80 @@
 		#size-cells = <1>;
 		ranges;
 
+		usb0: gadget@500000 {
+			#address-cells = <1>;
+			#size-cells = <0>;
+			compatible = "microchip,sam9x60-udc";
+			reg = <0x00500000 0x100000
+				0xf803c000 0x400>;
+			interrupts = <23 IRQ_TYPE_LEVEL_HIGH 2>;
+			clocks = <&pmc PMC_TYPE_PERIPHERAL 23>, <&pmc PMC_TYPE_CORE PMC_UTMI>;
+			clock-names = "pclk", "hclk";
+			assigned-clocks = <&pmc PMC_TYPE_CORE PMC_UTMI>;
+			assigned-clock-rates = <480000000>;
+			status = "disabled";
+
+			ep@0 {
+				reg = <0>;
+				atmel,fifo-size = <64>;
+				atmel,nb-banks = <1>;
+			};
+
+			ep@1 {
+				reg = <1>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <2>;
+				atmel,can-dma;
+			};
+
+			ep@2 {
+				reg = <2>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <2>;
+				atmel,can-dma;
+			};
+
+			ep@3 {
+				reg = <3>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <3>;
+				atmel,can-dma;
+				atmel,can-isoc;
+			};
+
+			ep@4 {
+				reg = <4>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <3>;
+				atmel,can-dma;
+				atmel,can-isoc;
+			};
+
+			ep@5 {
+				reg = <5>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <3>;
+				atmel,can-dma;
+				atmel,can-isoc;
+			};
+
+			ep@6 {
+				reg = <6>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <3>;
+				atmel,can-dma;
+				atmel,can-isoc;
+			};
+
+			ep@7 {
+				reg = <7>;
+				atmel,fifo-size = <1024>;
+				atmel,nb-banks = <3>;
+				atmel,can-dma;
+				atmel,can-isoc;
+			};
+		};
+
 		usb1: ohci@600000 {
 			compatible = "atmel,at91rm9200-ohci", "usb-ohci";
 			reg = <0x00600000 0x100000>;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 0/7] usb: gadget: udc: atmel: add usb device support for SAM9x60 SoC
  2020-05-15 11:16 [PATCH v2 0/7] usb: gadget: udc: atmel: add usb device support for SAM9x60 SoC cristian.birsan
                   ` (6 preceding siblings ...)
  2020-05-15 11:16 ` [PATCH v2 7/7] ARM: dts: at91: sam9x60ek: enable usb device cristian.birsan
@ 2020-05-15 15:02 ` Alexandre Belloni
  2020-05-15 15:32   ` Cristian.Birsan
  7 siblings, 1 reply; 12+ messages in thread
From: Alexandre Belloni @ 2020-05-15 15:02 UTC (permalink / raw)
  To: cristian.birsan
  Cc: balbi, gregkh, nicolas.ferre, ludovic.desroches, robh+dt,
	mark.rutland, linux-arm-kernel, linux-usb, devicetree,
	linux-kernel

Hi,

On 15/05/2020 14:16:24+0300, cristian.birsan@microchip.com wrote:
> From: Cristian Birsan <cristian.birsan@microchip.com>
> 
> This patch set adds usb device support for SAM9x60 SoC.
> The DPRAM memory for the USB High Speed Device Port (UDPHS) hardware
> block was increased and the allocation method is changed. This patch
> series simplifies the endpoint allocation scheme to acomodate this SoC
> and the old ones.
> 
> Changes in v2:
> - drop the patch that adds reference to pmc for sam9x60
> - use dt-bindings: usb prefix
> - enable usb device in device tree
> 
> Claudiu Beznea (1):
>   usb: gadget: udc: atmel: use of_find_matching_node_and_match
> 
> Cristian Birsan (6):
>   dt-bindings: usb: atmel: Update DT bindings documentation for sam9x60
>   usb: gadget: udc: atmel: simplify endpoint allocation
>   usb: gadget: udc: atmel: use 1 bank endpoints for control transfers
>   usb: gadget: udc: atmel: rename errata into caps
>   usb: gadget: udc: atmel: update endpoint allocation for sam9x60
>   ARM: dts: at91: sam9x60ek: enable usb device

This should probably be rebased on top of
https://lore.kernel.org/linux-arm-kernel/20200507155651.1094142-1-gregory.clement@bootlin.com/
so we avoid having to define the endpoints in the device tree in the
first place.

-- 
Alexandre Belloni, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 0/7] usb: gadget: udc: atmel: add usb device support for SAM9x60 SoC
  2020-05-15 15:02 ` [PATCH v2 0/7] usb: gadget: udc: atmel: add usb device support for SAM9x60 SoC Alexandre Belloni
@ 2020-05-15 15:32   ` Cristian.Birsan
  0 siblings, 0 replies; 12+ messages in thread
From: Cristian.Birsan @ 2020-05-15 15:32 UTC (permalink / raw)
  To: alexandre.belloni
  Cc: balbi, gregkh, Nicolas.Ferre, Ludovic.Desroches, robh+dt,
	mark.rutland, linux-arm-kernel, linux-usb, devicetree,
	linux-kernel



On 5/15/20 6:02 PM, Alexandre Belloni wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> Hi,
> 
> On 15/05/2020 14:16:24+0300, cristian.birsan@microchip.com wrote:
>> From: Cristian Birsan <cristian.birsan@microchip.com>
>>
>> This patch set adds usb device support for SAM9x60 SoC.
>> The DPRAM memory for the USB High Speed Device Port (UDPHS) hardware
>> block was increased and the allocation method is changed. This patch
>> series simplifies the endpoint allocation scheme to acomodate this SoC
>> and the old ones.
>>
>> Changes in v2:
>> - drop the patch that adds reference to pmc for sam9x60
>> - use dt-bindings: usb prefix
>> - enable usb device in device tree
>>
>> Claudiu Beznea (1):
>>   usb: gadget: udc: atmel: use of_find_matching_node_and_match
>>
>> Cristian Birsan (6):
>>   dt-bindings: usb: atmel: Update DT bindings documentation for sam9x60
>>   usb: gadget: udc: atmel: simplify endpoint allocation
>>   usb: gadget: udc: atmel: use 1 bank endpoints for control transfers
>>   usb: gadget: udc: atmel: rename errata into caps
>>   usb: gadget: udc: atmel: update endpoint allocation for sam9x60
>>   ARM: dts: at91: sam9x60ek: enable usb device
> 
> This should probably be rebased on top of
> https://lore.kernel.org/linux-arm-kernel/20200507155651.1094142-1-gregory.clement@bootlin.com/
> so we avoid having to define the endpoints in the device tree in the
> first place.

I know the patch series and I Ack-ed it some time ago. On the other hand, it was not applied yet,
so to be consistent I created this series based on what is already available on usb-next.
Depending on which one gets applied first, the other will need to rebase. I have no problem with that.
The end goal is to have both of them.

Cristian

> 
> --
> Alexandre Belloni, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com
> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 1/7] usb: gadget: udc: atmel: use of_find_matching_node_and_match
  2020-05-15 11:16 ` [PATCH v2 1/7] usb: gadget: udc: atmel: use of_find_matching_node_and_match cristian.birsan
@ 2020-05-15 15:47   ` Felipe Balbi
  0 siblings, 0 replies; 12+ messages in thread
From: Felipe Balbi @ 2020-05-15 15:47 UTC (permalink / raw)
  To: cristian.birsan, gregkh, nicolas.ferre, alexandre.belloni,
	ludovic.desroches, robh+dt, mark.rutland, linux-arm-kernel,
	linux-usb, devicetree, linux-kernel
  Cc: Claudiu Beznea

[-- Attachment #1: Type: text/plain, Size: 506 bytes --]

<cristian.birsan@microchip.com> writes:

> From: Claudiu Beznea <claudiu.beznea@microchip.com>
>
> Instead of trying to match every possible compatible use
> of_find_matching_node_and_match() and pass the compatible array.
>
> Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
> ---

please rebase on my testing/next

checking file drivers/usb/gadget/udc/atmel_usba_udc.c
Hunk #1 succeeded at 2098 (offset 46 lines).
Hunk #2 FAILED at 2074.
1 out of 2 hunks FAILED

-- 
balbi

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v2 2/7] dt-bindings: usb: atmel: Update DT bindings documentation for sam9x60
  2020-05-15 11:16 ` [PATCH v2 2/7] dt-bindings: usb: atmel: Update DT bindings documentation for sam9x60 cristian.birsan
@ 2020-05-28 19:26   ` Rob Herring
  0 siblings, 0 replies; 12+ messages in thread
From: Rob Herring @ 2020-05-28 19:26 UTC (permalink / raw)
  To: cristian.birsan
  Cc: linux-kernel, ludovic.desroches, alexandre.belloni,
	linux-arm-kernel, balbi, robh+dt, devicetree, mark.rutland,
	linux-usb, gregkh, nicolas.ferre

On Fri, 15 May 2020 14:16:26 +0300, cristian.birsan@microchip.com wrote:
> From: Cristian Birsan <cristian.birsan@microchip.com>
> 
> Add sam9x60 binding.
> 
> Signed-off-by: Cristian Birsan <cristian.birsan@microchip.com>
> ---
>  Documentation/devicetree/bindings/usb/atmel-usb.txt | 1 +
>  1 file changed, 1 insertion(+)
> 

Acked-by: Rob Herring <robh@kernel.org>

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2020-05-28 19:26 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-15 11:16 [PATCH v2 0/7] usb: gadget: udc: atmel: add usb device support for SAM9x60 SoC cristian.birsan
2020-05-15 11:16 ` [PATCH v2 1/7] usb: gadget: udc: atmel: use of_find_matching_node_and_match cristian.birsan
2020-05-15 15:47   ` Felipe Balbi
2020-05-15 11:16 ` [PATCH v2 2/7] dt-bindings: usb: atmel: Update DT bindings documentation for sam9x60 cristian.birsan
2020-05-28 19:26   ` Rob Herring
2020-05-15 11:16 ` [PATCH v2 3/7] usb: gadget: udc: atmel: simplify endpoint allocation cristian.birsan
2020-05-15 11:16 ` [PATCH v2 4/7] usb: gadget: udc: atmel: use 1 bank endpoints for control transfers cristian.birsan
2020-05-15 11:16 ` [PATCH v2 5/7] usb: gadget: udc: atmel: rename errata into caps cristian.birsan
2020-05-15 11:16 ` [PATCH v2 6/7] usb: gadget: udc: atmel: update endpoint allocation for sam9x60 cristian.birsan
2020-05-15 11:16 ` [PATCH v2 7/7] ARM: dts: at91: sam9x60ek: enable usb device cristian.birsan
2020-05-15 15:02 ` [PATCH v2 0/7] usb: gadget: udc: atmel: add usb device support for SAM9x60 SoC Alexandre Belloni
2020-05-15 15:32   ` Cristian.Birsan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).