mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 0/3] usb: mtu3: add mt6595 support
@ 2026-09-17  7:32 Roman Vivchar via B4 Relay
  2026-09-17  7:32 ` [PATCH 1/3] dt-bindings: usb: mtu3: add mt6595 Roman Vivchar via B4 Relay
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Roman Vivchar via B4 Relay @ 2026-09-17  7:32 UTC (permalink / raw)
  To: Chunfeng Yun, Greg Kroah-Hartman, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Matthias Brugger,
	AngeloGioacchino Del Regno
  Cc: linux-usb, linux-arm-kernel, linux-mediatek, devicetree,
	linux-kernel, Roman Vivchar

This patch series adds mt6595 SoC support to the mtu3 driver.

Unlike the mt8173 and newer controllers, the 6595 uses older IP revision
that can handle only one FIFO slot. Without this series, the current
driver implementation results in 2 to 4 lost bytes on USB transfers.

In mediatek sources, mt6595 is sometimes called 6795. Most of their
clocks/pins are also compatible. It's not clear if 6795 has the same
issue or simply lacks T-PHY patch. Other (rare) mobile SoCs with mtu3,
like mt6757 or 6771, don't need this series.

Another thing worth mentioning, this series is not enough for the USB on
6595. The other T-PHY patch is required to get the link up. This issue
has been observed on some 65xx and most 67xx SoCs. Though this is a
subject for the separate discussion.

Signed-off-by: Roman Vivchar <rva333@protonmail.com>
---
Roman Vivchar (3):
      dt-bindings: usb: mtu3: add mt6595
      usb: mtu3: introduce platform data
      usb: mtu3: add mt6595 support

 Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml |  1 +
 drivers/usb/mtu3/mtu3.h                                  |  9 +++++++++
 drivers/usb/mtu3/mtu3_core.c                             |  5 +++++
 drivers/usb/mtu3/mtu3_gadget.c                           |  8 ++++++--
 drivers/usb/mtu3/mtu3_plat.c                             | 13 +++++++++++--
 5 files changed, 32 insertions(+), 4 deletions(-)
---
base-commit: 8d3ae59288f1e7d58d76558a6ee96d533bc5019f
change-id: 20260914-6595-mtu3-82b3048e41ea

Best regards,
--  
Roman Vivchar <rva333@protonmail.com>



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

* [PATCH 1/3] dt-bindings: usb: mtu3: add mt6595
  2026-09-17  7:32 [PATCH 0/3] usb: mtu3: add mt6595 support Roman Vivchar via B4 Relay
@ 2026-09-17  7:32 ` Roman Vivchar via B4 Relay
  2026-09-17 13:41   ` AngeloGioacchino Del Regno
  2026-09-17  7:32 ` [PATCH 2/3] usb: mtu3: introduce platform data Roman Vivchar via B4 Relay
  2026-09-17  7:32 ` [PATCH 3/3] usb: mtu3: add mt6595 support Roman Vivchar via B4 Relay
  2 siblings, 1 reply; 7+ messages in thread
From: Roman Vivchar via B4 Relay @ 2026-09-17  7:32 UTC (permalink / raw)
  To: Chunfeng Yun, Greg Kroah-Hartman, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Matthias Brugger,
	AngeloGioacchino Del Regno
  Cc: linux-usb, linux-arm-kernel, linux-mediatek, devicetree,
	linux-kernel, Roman Vivchar

From: Roman Vivchar <rva333@protonmail.com>

Add a compatible string for the MTU3 IP found on the MediaTek mt6595 SoC.

Signed-off-by: Roman Vivchar <rva333@protonmail.com>
---
 Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml b/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml
index 21fc6bbe954f..4538df164a16 100644
--- a/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml
+++ b/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml
@@ -22,6 +22,7 @@ properties:
     items:
       - enum:
           - mediatek,mt2712-mtu3
+          - mediatek,mt6595-mtu3
           - mediatek,mt8173-mtu3
           - mediatek,mt8183-mtu3
           - mediatek,mt8186-mtu3

-- 
2.55.0



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

* [PATCH 2/3] usb: mtu3: introduce platform data
  2026-09-17  7:32 [PATCH 0/3] usb: mtu3: add mt6595 support Roman Vivchar via B4 Relay
  2026-09-17  7:32 ` [PATCH 1/3] dt-bindings: usb: mtu3: add mt6595 Roman Vivchar via B4 Relay
@ 2026-09-17  7:32 ` Roman Vivchar via B4 Relay
  2026-09-17 13:41   ` AngeloGioacchino Del Regno
  2026-09-17  7:32 ` [PATCH 3/3] usb: mtu3: add mt6595 support Roman Vivchar via B4 Relay
  2 siblings, 1 reply; 7+ messages in thread
From: Roman Vivchar via B4 Relay @ 2026-09-17  7:32 UTC (permalink / raw)
  To: Chunfeng Yun, Greg Kroah-Hartman, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Matthias Brugger,
	AngeloGioacchino Del Regno
  Cc: linux-usb, linux-arm-kernel, linux-mediatek, devicetree,
	linux-kernel, Roman Vivchar

From: Roman Vivchar <rva333@protonmail.com>

Some SoCs, such as mt6595, require specific quirks for the MTU3 to
function properly.

The mt6595 IP block doesn't support multiple slots for the FIFO,
resulting FIFO wrap.

Fix this by adding platform data with a field to handle FIFO limitation.

Assisted-by: LLM (debugging)
Signed-off-by: Roman Vivchar <rva333@protonmail.com>
---
 drivers/usb/mtu3/mtu3.h        | 9 +++++++++
 drivers/usb/mtu3/mtu3_core.c   | 5 +++++
 drivers/usb/mtu3/mtu3_gadget.c | 8 ++++++--
 drivers/usb/mtu3/mtu3_plat.c   | 8 ++++++--
 4 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/mtu3/mtu3.h b/drivers/usb/mtu3/mtu3.h
index ba5a63669e5f..1258aa7483aa 100644
--- a/drivers/usb/mtu3/mtu3.h
+++ b/drivers/usb/mtu3/mtu3.h
@@ -315,6 +315,14 @@ static inline struct ssusb_mtk *dev_to_ssusb(struct device *dev)
 	return dev_get_drvdata(dev);
 }
 
+/**
+ * struct mtu3_platform_data - platform data for the driver.
+ * @single_slot: the IP can handle only one buffer for bulk transfers
+ */
+struct mtu3_platform_data {
+	bool single_slot;
+};
+
 /**
  * struct mtu3 - device driver instance data.
  * @slot: MTU3_U2_IP_SLOT_DEFAULT for U2 IP only,
@@ -369,6 +377,7 @@ struct mtu3 {
 	unsigned connected:1;
 	unsigned async_callbacks:1;
 	unsigned separate_fifo:1;
+	unsigned single_slot:1;
 
 	u8 address;
 	u8 test_mode_nr;
diff --git a/drivers/usb/mtu3/mtu3_core.c b/drivers/usb/mtu3/mtu3_core.c
index 66dbfe1705d5..03e28c93bc51 100644
--- a/drivers/usb/mtu3/mtu3_core.c
+++ b/drivers/usb/mtu3/mtu3_core.c
@@ -923,6 +923,7 @@ int ssusb_gadget_init(struct ssusb_mtk *ssusb)
 {
 	struct device *dev = ssusb->dev;
 	struct platform_device *pdev = to_platform_device(dev);
+	const struct mtu3_platform_data *pdata = NULL;
 	struct mtu3 *mtu = NULL;
 	int ret = -ENOMEM;
 
@@ -930,6 +931,10 @@ int ssusb_gadget_init(struct ssusb_mtk *ssusb)
 	if (mtu == NULL)
 		return -ENOMEM;
 
+	pdata = device_get_match_data(dev);
+	if (pdata)
+		mtu->single_slot = pdata->single_slot;
+
 	mtu->irq = platform_get_irq_byname_optional(pdev, "device");
 	if (mtu->irq < 0) {
 		if (mtu->irq == -EPROBE_DEFER)
diff --git a/drivers/usb/mtu3/mtu3_gadget.c b/drivers/usb/mtu3/mtu3_gadget.c
index f224f2ee379a..bfacb1ba152e 100644
--- a/drivers/usb/mtu3/mtu3_gadget.c
+++ b/drivers/usb/mtu3/mtu3_gadget.c
@@ -112,8 +112,12 @@ static int mtu3_ep_enable(struct mtu3_ep *mep)
 	mep->ep.desc = desc;
 	mep->ep.comp_desc = comp_desc;
 
-	/* slot mainly affects bulk/isoc transfer, so ignore int */
-	mep->slot = usb_endpoint_xfer_int(desc) ? 0 : mtu->slot;
+	if (mtu->single_slot)
+		/* older IPs can handle only one slot reliably */
+		mep->slot = 0;
+	else
+		/* slot mainly affects bulk/isoc transfer, so ignore int */
+		mep->slot = usb_endpoint_xfer_int(desc) ? 0 : mtu->slot;
 
 	ret = mtu3_config_ep(mtu, mep, interval, burst, mult);
 	if (ret < 0)
diff --git a/drivers/usb/mtu3/mtu3_plat.c b/drivers/usb/mtu3/mtu3_plat.c
index cc8a864dbd63..bc65acdfb0de 100644
--- a/drivers/usb/mtu3/mtu3_plat.c
+++ b/drivers/usb/mtu3/mtu3_plat.c
@@ -611,9 +611,13 @@ static const struct dev_pm_ops mtu3_pm_ops = {
 
 #define DEV_PM_OPS (IS_ENABLED(CONFIG_PM) ? &mtu3_pm_ops : NULL)
 
+static const struct mtu3_platform_data mt8173_platform_data = {
+	.single_slot = false,
+};
+
 static const struct of_device_id mtu3_of_match[] = {
-	{.compatible = "mediatek,mt8173-mtu3",},
-	{.compatible = "mediatek,mtu3",},
+	{ .compatible = "mediatek,mt8173-mtu3", .data = &mt8173_platform_data },
+	{ .compatible = "mediatek,mtu3", .data = &mt8173_platform_data },
 	{},
 };
 MODULE_DEVICE_TABLE(of, mtu3_of_match);

-- 
2.55.0



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

* [PATCH 3/3] usb: mtu3: add mt6595 support
  2026-09-17  7:32 [PATCH 0/3] usb: mtu3: add mt6595 support Roman Vivchar via B4 Relay
  2026-09-17  7:32 ` [PATCH 1/3] dt-bindings: usb: mtu3: add mt6595 Roman Vivchar via B4 Relay
  2026-09-17  7:32 ` [PATCH 2/3] usb: mtu3: introduce platform data Roman Vivchar via B4 Relay
@ 2026-09-17  7:32 ` Roman Vivchar via B4 Relay
  2 siblings, 0 replies; 7+ messages in thread
From: Roman Vivchar via B4 Relay @ 2026-09-17  7:32 UTC (permalink / raw)
  To: Chunfeng Yun, Greg Kroah-Hartman, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Matthias Brugger,
	AngeloGioacchino Del Regno
  Cc: linux-usb, linux-arm-kernel, linux-mediatek, devicetree,
	linux-kernel, Roman Vivchar

From: Roman Vivchar <rva333@protonmail.com>

Add a platform data for the MediaTek mt6595 SoC MTU3 IP block with a
quirk for single FIFO slot.

Signed-off-by: Roman Vivchar <rva333@protonmail.com>
---
 drivers/usb/mtu3/mtu3_plat.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/usb/mtu3/mtu3_plat.c b/drivers/usb/mtu3/mtu3_plat.c
index bc65acdfb0de..c29778b3f009 100644
--- a/drivers/usb/mtu3/mtu3_plat.c
+++ b/drivers/usb/mtu3/mtu3_plat.c
@@ -611,11 +611,16 @@ static const struct dev_pm_ops mtu3_pm_ops = {
 
 #define DEV_PM_OPS (IS_ENABLED(CONFIG_PM) ? &mtu3_pm_ops : NULL)
 
+static const struct mtu3_platform_data mt6595_platform_data = {
+	.single_slot = true,
+};
+
 static const struct mtu3_platform_data mt8173_platform_data = {
 	.single_slot = false,
 };
 
 static const struct of_device_id mtu3_of_match[] = {
+	{ .compatible = "mediatek,mt6595-mtu3", .data = &mt6595_platform_data },
 	{ .compatible = "mediatek,mt8173-mtu3", .data = &mt8173_platform_data },
 	{ .compatible = "mediatek,mtu3", .data = &mt8173_platform_data },
 	{},

-- 
2.55.0



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

* Re: [PATCH 1/3] dt-bindings: usb: mtu3: add mt6595
  2026-09-17  7:32 ` [PATCH 1/3] dt-bindings: usb: mtu3: add mt6595 Roman Vivchar via B4 Relay
@ 2026-09-17 13:41   ` AngeloGioacchino Del Regno
  0 siblings, 0 replies; 7+ messages in thread
From: AngeloGioacchino Del Regno @ 2026-09-17 13:41 UTC (permalink / raw)
  To: rva333, Chunfeng Yun, Greg Kroah-Hartman, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Matthias Brugger
  Cc: linux-usb, linux-arm-kernel, linux-mediatek, devicetree, linux-kernel

On 9/17/26 09:32, Roman Vivchar via B4 Relay wrote:
> From: Roman Vivchar <rva333@protonmail.com>
> 
> Add a compatible string for the MTU3 IP found on the MediaTek mt6595 SoC.
> 
> Signed-off-by: Roman Vivchar <rva333@protonmail.com>

Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>


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

* Re: [PATCH 2/3] usb: mtu3: introduce platform data
  2026-09-17  7:32 ` [PATCH 2/3] usb: mtu3: introduce platform data Roman Vivchar via B4 Relay
@ 2026-09-17 13:41   ` AngeloGioacchino Del Regno
  2026-09-17 14:10     ` Roman Vivchar
  0 siblings, 1 reply; 7+ messages in thread
From: AngeloGioacchino Del Regno @ 2026-09-17 13:41 UTC (permalink / raw)
  To: rva333, Chunfeng Yun, Greg Kroah-Hartman, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Matthias Brugger
  Cc: linux-usb, linux-arm-kernel, linux-mediatek, devicetree, linux-kernel

On 9/17/26 09:32, Roman Vivchar via B4 Relay wrote:
> From: Roman Vivchar <rva333@protonmail.com>
> 

That's good, but the commit title doesn't explain anything.

usb: mtu3: Add SoC platform data for FIFO slots ?

...or anything else that actually explains what you're doing.

> Some SoCs, such as mt6595, require specific quirks for the MTU3 to
> function properly.
> 
> The mt6595 IP block doesn't support multiple slots for the FIFO,
> resulting FIFO wrap.
> 
> Fix this by adding platform data with a field to handle FIFO limitation.

Well, also say that this commit brings no functional differences for the
currently supported SoCs :-)

> 
> Assisted-by: LLM (debugging)
> Signed-off-by: Roman Vivchar <rva333@protonmail.com>
> ---
>   drivers/usb/mtu3/mtu3.h        | 9 +++++++++
>   drivers/usb/mtu3/mtu3_core.c   | 5 +++++
>   drivers/usb/mtu3/mtu3_gadget.c | 8 ++++++--
>   drivers/usb/mtu3/mtu3_plat.c   | 8 ++++++--
>   4 files changed, 26 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/usb/mtu3/mtu3.h b/drivers/usb/mtu3/mtu3.h
> index ba5a63669e5f..1258aa7483aa 100644
> --- a/drivers/usb/mtu3/mtu3.h
> +++ b/drivers/usb/mtu3/mtu3.h
> @@ -315,6 +315,14 @@ static inline struct ssusb_mtk *dev_to_ssusb(struct device *dev)
>   	return dev_get_drvdata(dev);
>   }
>   
> +/**
> + * struct mtu3_platform_data - platform data for the driver.
> + * @single_slot: the IP can handle only one buffer for bulk transfers
> + */
> +struct mtu3_platform_data {
> +	bool single_slot;

bool fifo_single_slot ?

> +};
> +
>   /**
>    * struct mtu3 - device driver instance data.
>    * @slot: MTU3_U2_IP_SLOT_DEFAULT for U2 IP only,
> @@ -369,6 +377,7 @@ struct mtu3 {
>   	unsigned connected:1;
>   	unsigned async_callbacks:1;
>   	unsigned separate_fifo:1;
> +	unsigned single_slot:1;

unsigned fifo_single_slot:1 ?

...or you can bring the entire pdata structure in there for easy future extension.
Your choice.

>   
>   	u8 address;
>   	u8 test_mode_nr;
> diff --git a/drivers/usb/mtu3/mtu3_core.c b/drivers/usb/mtu3/mtu3_core.c
> index 66dbfe1705d5..03e28c93bc51 100644
> --- a/drivers/usb/mtu3/mtu3_core.c
> +++ b/drivers/usb/mtu3/mtu3_core.c
> @@ -923,6 +923,7 @@ int ssusb_gadget_init(struct ssusb_mtk *ssusb)
>   {
>   	struct device *dev = ssusb->dev;
>   	struct platform_device *pdev = to_platform_device(dev);
> +	const struct mtu3_platform_data *pdata = NULL;
>   	struct mtu3 *mtu = NULL;
>   	int ret = -ENOMEM;
>   
> @@ -930,6 +931,10 @@ int ssusb_gadget_init(struct ssusb_mtk *ssusb)
>   	if (mtu == NULL)
>   		return -ENOMEM;
>   
> +	pdata = device_get_match_data(dev);
> +	if (pdata)

Checking if there's any pdata is redundant, since you have already correctly
assigned pdata to all of the of_match entries.

Cheers,
Angelo

> +		mtu->single_slot = pdata->single_slot;
> +
>   	mtu->irq = platform_get_irq_byname_optional(pdev, "device");
>   	if (mtu->irq < 0) {
>   		if (mtu->irq == -EPROBE_DEFER)
> diff --git a/drivers/usb/mtu3/mtu3_gadget.c b/drivers/usb/mtu3/mtu3_gadget.c
> index f224f2ee379a..bfacb1ba152e 100644
> --- a/drivers/usb/mtu3/mtu3_gadget.c
> +++ b/drivers/usb/mtu3/mtu3_gadget.c
> @@ -112,8 +112,12 @@ static int mtu3_ep_enable(struct mtu3_ep *mep)
>   	mep->ep.desc = desc;
>   	mep->ep.comp_desc = comp_desc;
>   
> -	/* slot mainly affects bulk/isoc transfer, so ignore int */
> -	mep->slot = usb_endpoint_xfer_int(desc) ? 0 : mtu->slot;
> +	if (mtu->single_slot)
> +		/* older IPs can handle only one slot reliably */
> +		mep->slot = 0;
> +	else
> +		/* slot mainly affects bulk/isoc transfer, so ignore int */
> +		mep->slot = usb_endpoint_xfer_int(desc) ? 0 : mtu->slot;
>   
>   	ret = mtu3_config_ep(mtu, mep, interval, burst, mult);
>   	if (ret < 0)
> diff --git a/drivers/usb/mtu3/mtu3_plat.c b/drivers/usb/mtu3/mtu3_plat.c
> index cc8a864dbd63..bc65acdfb0de 100644
> --- a/drivers/usb/mtu3/mtu3_plat.c
> +++ b/drivers/usb/mtu3/mtu3_plat.c
> @@ -611,9 +611,13 @@ static const struct dev_pm_ops mtu3_pm_ops = {
>   
>   #define DEV_PM_OPS (IS_ENABLED(CONFIG_PM) ? &mtu3_pm_ops : NULL)
>   
> +static const struct mtu3_platform_data mt8173_platform_data = {
> +	.single_slot = false,
> +};
> +
>   static const struct of_device_id mtu3_of_match[] = {
> -	{.compatible = "mediatek,mt8173-mtu3",},
> -	{.compatible = "mediatek,mtu3",},
> +	{ .compatible = "mediatek,mt8173-mtu3", .data = &mt8173_platform_data },
> +	{ .compatible = "mediatek,mtu3", .data = &mt8173_platform_data },
>   	{},
>   };
>   MODULE_DEVICE_TABLE(of, mtu3_of_match);
> 


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

* Re: [PATCH 2/3] usb: mtu3: introduce platform data
  2026-09-17 13:41   ` AngeloGioacchino Del Regno
@ 2026-09-17 14:10     ` Roman Vivchar
  0 siblings, 0 replies; 7+ messages in thread
From: Roman Vivchar @ 2026-09-17 14:10 UTC (permalink / raw)
  To: AngeloGioacchino Del Regno
  Cc: Chunfeng Yun, Greg Kroah-Hartman, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Matthias Brugger, linux-usb,
	linux-arm-kernel, linux-mediatek, devicetree, linux-kernel

Hi Angelo,

On Thursday, September 17th, 2026 at 4:41 PM, AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> wrote:

> On 9/17/26 09:32, Roman Vivchar via B4 Relay wrote:
> > From: Roman Vivchar <rva333@protonmail.com>
> >
> 
> That's good, but the commit title doesn't explain anything.
> 
> usb: mtu3: Add SoC platform data for FIFO slots ?
> 
> ...or anything else that actually explains what you're doing.

Ack.

> 
> > Some SoCs, such as mt6595, require specific quirks for the MTU3 to
> > function properly.
> >
> > The mt6595 IP block doesn't support multiple slots for the FIFO,
> > resulting FIFO wrap.
> >
> > Fix this by adding platform data with a field to handle FIFO limitation.
> 
> Well, also say that this commit brings no functional differences for the
> currently supported SoCs :-)

Indeed. Will do.

...

> > +	unsigned single_slot:1;
> 
> unsigned fifo_single_slot:1 ?
> 
> ...or you can bring the entire pdata structure in there for easy future extension.
> Your choice.

I don't think it's worth pulling 4 or 8 bytes just for one flag. Let it
be a bitfield for now.

Other comments will be fixed in v2.

Best regards,
Roman

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

end of thread, other threads:[~2026-09-17 14:10 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-17  7:32 [PATCH 0/3] usb: mtu3: add mt6595 support Roman Vivchar via B4 Relay
2026-09-17  7:32 ` [PATCH 1/3] dt-bindings: usb: mtu3: add mt6595 Roman Vivchar via B4 Relay
2026-09-17 13:41   ` AngeloGioacchino Del Regno
2026-09-17  7:32 ` [PATCH 2/3] usb: mtu3: introduce platform data Roman Vivchar via B4 Relay
2026-09-17 13:41   ` AngeloGioacchino Del Regno
2026-09-17 14:10     ` Roman Vivchar
2026-09-17  7:32 ` [PATCH 3/3] usb: mtu3: add mt6595 support Roman Vivchar via B4 Relay

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®