* [PATCH v3 0/5] arm64: meson: support Amlogic A1 USB OTG controller
@ 2023-04-26 10:29 Dmitry Rokosov
2023-04-26 10:29 ` [PATCH v3 1/5] phy: amlogic: enable/disable clkin during Amlogic USB PHY init/exit Dmitry Rokosov
` (4 more replies)
0 siblings, 5 replies; 11+ messages in thread
From: Dmitry Rokosov @ 2023-04-26 10:29 UTC (permalink / raw)
To: gregkh, robh+dt, krzysztof.kozlowski+dt, neil.armstrong, khilman,
jbrunet, martin.blumenstingl, mturquette, vkoul, kishon, hminas,
Thinh.Nguyen
Cc: yue.wang, hanjie.lin, kernel, rockosov, linux-usb, devicetree,
linux-kernel, linux-arm-kernel, linux-amlogic, linux-phy,
Dmitry Rokosov
This patch series introduces full support for the Amlogic A1 USB controller
in OTG mode (peripheral and host modes switching).
Previously, Amlogic's patch series [1] was applied to the upstream tree,
but it only had USB host mode support.
Furthermore, the device tree patchset [2] wasn't merged due to a missing
clk driver.
Patchset [2] has been completely reworked:
- changed register base offsets to proper values
- introduced dwc2 in peripheral mode
- OTG mode support
- the SoB of Amlogic authors still remain
Testing:
- USB OTG role switching between gadget and host - OK
- Peripheral mode - OK (tested with adb shell/push/pop)
- Host mode - OK (tested only USB enumeration and detection)
Changes v3 since v2 at [4]:
- if reset_control_reset() fails during phy_exit() callback
execution, do not disable clkin, instead, return an error
immediately
- provide proper 'phy-names' for the dwc2 device tree node as
'usb2-phy' instead of 'usb2_phy' (replace underscore with dash)
Changes v2 since v1 at [3]:
- as Martin suggested in v1, this commit completely removes
the 'otg_switch_supported' parameter from dwc3_meson_g12a_drvdata;
this parameter is no longer necessary as all IP versions now
support OTG switching
- this commit moves the USB PHY clkin enable/disable calls to
the PHY init/exit routines
Links:
[1] https://lore.kernel.org/all/1581990859-135234-1-git-send-email-hanjie.lin@amlogic.com/
[2] https://lore.kernel.org/all/1581990859-135234-4-git-send-email-hanjie.lin@amlogic.com/
[3] https://lore.kernel.org/all/20230414152423.19842-1-ddrokosov@sberdevices.ru/
[4] https://lore.kernel.org/all/20230418111612.19479-1-ddrokosov@sberdevices.ru/
Dmitry Rokosov (5):
phy: amlogic: enable/disable clkin during Amlogic USB PHY init/exit
usb: dwc2: support dwc2 IP for Amlogic A1 SoC family
dt-bindings: usb: dwc2: add support for Amlogic A1 SoC USB peripheral
usb: dwc3-meson-g12a: support OTG switch for all IP versions
arm64: dts: meson: a1: support USB controller in OTG mode
.../devicetree/bindings/usb/dwc2.yaml | 1 +
arch/arm64/boot/dts/amlogic/meson-a1.dtsi | 59 +++++++++++++++++++
drivers/phy/amlogic/phy-meson-g12a-usb2.c | 15 ++++-
drivers/usb/dwc2/params.c | 21 +++++++
drivers/usb/dwc3/dwc3-meson-g12a.c | 16 +----
5 files changed, 97 insertions(+), 15 deletions(-)
--
2.36.0
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v3 1/5] phy: amlogic: enable/disable clkin during Amlogic USB PHY init/exit
2023-04-26 10:29 [PATCH v3 0/5] arm64: meson: support Amlogic A1 USB OTG controller Dmitry Rokosov
@ 2023-04-26 10:29 ` Dmitry Rokosov
2023-05-01 12:49 ` Martin Blumenstingl
2023-05-08 9:27 ` Vinod Koul
2023-04-26 10:29 ` [PATCH v3 2/5] usb: dwc2: support dwc2 IP for Amlogic A1 SoC family Dmitry Rokosov
` (3 subsequent siblings)
4 siblings, 2 replies; 11+ messages in thread
From: Dmitry Rokosov @ 2023-04-26 10:29 UTC (permalink / raw)
To: gregkh, robh+dt, krzysztof.kozlowski+dt, neil.armstrong, khilman,
jbrunet, martin.blumenstingl, mturquette, vkoul, kishon, hminas,
Thinh.Nguyen
Cc: yue.wang, hanjie.lin, kernel, rockosov, linux-usb, devicetree,
linux-kernel, linux-arm-kernel, linux-amlogic, linux-phy,
Dmitry Rokosov
Previously, all Amlogic boards used the XTAL clock as the default board
clock for the USB PHY input, so there was no need to enable it.
However, with the introduction of new Amlogic SoCs like the A1 family,
the USB PHY now uses a gated clock. Hence, it is necessary to enable
this gated clock during the PHY initialization sequence, or disable it
during the PHY exit, as appropriate.
Signed-off-by: Dmitry Rokosov <ddrokosov@sberdevices.ru>
---
drivers/phy/amlogic/phy-meson-g12a-usb2.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/drivers/phy/amlogic/phy-meson-g12a-usb2.c b/drivers/phy/amlogic/phy-meson-g12a-usb2.c
index 9d1efa0d9394..ec2555bb83d5 100644
--- a/drivers/phy/amlogic/phy-meson-g12a-usb2.c
+++ b/drivers/phy/amlogic/phy-meson-g12a-usb2.c
@@ -172,10 +172,16 @@ static int phy_meson_g12a_usb2_init(struct phy *phy)
int ret;
unsigned int value;
- ret = reset_control_reset(priv->reset);
+ ret = clk_prepare_enable(priv->clk);
if (ret)
return ret;
+ ret = reset_control_reset(priv->reset);
+ if (ret) {
+ clk_disable_unprepare(priv->clk);
+ return ret;
+ }
+
udelay(RESET_COMPLETE_TIME);
/* usb2_otg_aca_en == 0 */
@@ -277,8 +283,13 @@ static int phy_meson_g12a_usb2_init(struct phy *phy)
static int phy_meson_g12a_usb2_exit(struct phy *phy)
{
struct phy_meson_g12a_usb2_priv *priv = phy_get_drvdata(phy);
+ int ret;
+
+ ret = reset_control_reset(priv->reset);
+ if (!ret)
+ clk_disable_unprepare(priv->clk);
- return reset_control_reset(priv->reset);
+ return ret;
}
/* set_mode is not needed, mode setting is handled via the UTMI bus */
--
2.36.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v3 2/5] usb: dwc2: support dwc2 IP for Amlogic A1 SoC family
2023-04-26 10:29 [PATCH v3 0/5] arm64: meson: support Amlogic A1 USB OTG controller Dmitry Rokosov
2023-04-26 10:29 ` [PATCH v3 1/5] phy: amlogic: enable/disable clkin during Amlogic USB PHY init/exit Dmitry Rokosov
@ 2023-04-26 10:29 ` Dmitry Rokosov
2023-04-26 10:29 ` [PATCH v3 3/5] dt-bindings: usb: dwc2: add support for Amlogic A1 SoC USB peripheral Dmitry Rokosov
` (2 subsequent siblings)
4 siblings, 0 replies; 11+ messages in thread
From: Dmitry Rokosov @ 2023-04-26 10:29 UTC (permalink / raw)
To: gregkh, robh+dt, krzysztof.kozlowski+dt, neil.armstrong, khilman,
jbrunet, martin.blumenstingl, mturquette, vkoul, kishon, hminas,
Thinh.Nguyen
Cc: yue.wang, hanjie.lin, kernel, rockosov, linux-usb, devicetree,
linux-kernel, linux-arm-kernel, linux-amlogic, linux-phy,
Dmitry Rokosov, Minas Harutyunyan
The Amlogic A1 uses dwc2 Synopsys IP as its USB peripheral (gadget)
endpoint, with different DWC2 parameters when compared to previous
Amlogic SoCs.
Signed-off-by: Dmitry Rokosov <ddrokosov@sberdevices.ru>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Acked-by: Minas Harutyunyan <Minas.Harutyunyan@synopsys.com>
---
drivers/usb/dwc2/params.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/drivers/usb/dwc2/params.c b/drivers/usb/dwc2/params.c
index 9ed9fd956940..098fbfc774ab 100644
--- a/drivers/usb/dwc2/params.c
+++ b/drivers/usb/dwc2/params.c
@@ -161,6 +161,25 @@ static void dwc2_set_amlogic_g12a_params(struct dwc2_hsotg *hsotg)
p->hird_threshold_en = false;
}
+static void dwc2_set_amlogic_a1_params(struct dwc2_hsotg *hsotg)
+{
+ struct dwc2_core_params *p = &hsotg->params;
+
+ p->otg_caps.hnp_support = false;
+ p->otg_caps.srp_support = false;
+ p->speed = DWC2_SPEED_PARAM_HIGH;
+ p->host_rx_fifo_size = 192;
+ p->host_nperio_tx_fifo_size = 128;
+ p->host_perio_tx_fifo_size = 128;
+ p->phy_type = DWC2_PHY_TYPE_PARAM_UTMI;
+ p->phy_utmi_width = 8;
+ p->ahbcfg = GAHBCFG_HBSTLEN_INCR8 << GAHBCFG_HBSTLEN_SHIFT;
+ p->lpm = false;
+ p->lpm_clock_gating = false;
+ p->besl = false;
+ p->hird_threshold_en = false;
+}
+
static void dwc2_set_amcc_params(struct dwc2_hsotg *hsotg)
{
struct dwc2_core_params *p = &hsotg->params;
@@ -258,6 +277,8 @@ const struct of_device_id dwc2_of_match_table[] = {
.data = dwc2_set_amlogic_params },
{ .compatible = "amlogic,meson-g12a-usb",
.data = dwc2_set_amlogic_g12a_params },
+ { .compatible = "amlogic,meson-a1-usb",
+ .data = dwc2_set_amlogic_a1_params },
{ .compatible = "amcc,dwc-otg", .data = dwc2_set_amcc_params },
{ .compatible = "apm,apm82181-dwc-otg", .data = dwc2_set_amcc_params },
{ .compatible = "st,stm32f4x9-fsotg",
--
2.36.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v3 3/5] dt-bindings: usb: dwc2: add support for Amlogic A1 SoC USB peripheral
2023-04-26 10:29 [PATCH v3 0/5] arm64: meson: support Amlogic A1 USB OTG controller Dmitry Rokosov
2023-04-26 10:29 ` [PATCH v3 1/5] phy: amlogic: enable/disable clkin during Amlogic USB PHY init/exit Dmitry Rokosov
2023-04-26 10:29 ` [PATCH v3 2/5] usb: dwc2: support dwc2 IP for Amlogic A1 SoC family Dmitry Rokosov
@ 2023-04-26 10:29 ` Dmitry Rokosov
2023-04-26 10:29 ` [PATCH v3 4/5] usb: dwc3-meson-g12a: support OTG switch for all IP versions Dmitry Rokosov
2023-04-26 10:29 ` [PATCH v3 5/5] arm64: dts: meson: a1: support USB controller in OTG mode Dmitry Rokosov
4 siblings, 0 replies; 11+ messages in thread
From: Dmitry Rokosov @ 2023-04-26 10:29 UTC (permalink / raw)
To: gregkh, robh+dt, krzysztof.kozlowski+dt, neil.armstrong, khilman,
jbrunet, martin.blumenstingl, mturquette, vkoul, kishon, hminas,
Thinh.Nguyen
Cc: yue.wang, hanjie.lin, kernel, rockosov, linux-usb, devicetree,
linux-kernel, linux-arm-kernel, linux-amlogic, linux-phy,
Dmitry Rokosov, Rob Herring
Provide the appropriate compatible string for the DWC2 IP that is found
inside the Amlogic A1 SoC and used in peripheral mode.
Signed-off-by: Dmitry Rokosov <ddrokosov@sberdevices.ru>
Acked-by: Rob Herring <robh@kernel.org>
Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
---
Documentation/devicetree/bindings/usb/dwc2.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/usb/dwc2.yaml b/Documentation/devicetree/bindings/usb/dwc2.yaml
index 371ba93f3ce5..f70be397dac0 100644
--- a/Documentation/devicetree/bindings/usb/dwc2.yaml
+++ b/Documentation/devicetree/bindings/usb/dwc2.yaml
@@ -53,6 +53,7 @@ properties:
- amlogic,meson8b-usb
- amlogic,meson-gxbb-usb
- amlogic,meson-g12a-usb
+ - amlogic,meson-a1-usb
- intel,socfpga-agilex-hsotg
- const: snps,dwc2
- const: amcc,dwc-otg
--
2.36.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v3 4/5] usb: dwc3-meson-g12a: support OTG switch for all IP versions
2023-04-26 10:29 [PATCH v3 0/5] arm64: meson: support Amlogic A1 USB OTG controller Dmitry Rokosov
` (2 preceding siblings ...)
2023-04-26 10:29 ` [PATCH v3 3/5] dt-bindings: usb: dwc2: add support for Amlogic A1 SoC USB peripheral Dmitry Rokosov
@ 2023-04-26 10:29 ` Dmitry Rokosov
2023-04-26 10:29 ` [PATCH v3 5/5] arm64: dts: meson: a1: support USB controller in OTG mode Dmitry Rokosov
4 siblings, 0 replies; 11+ messages in thread
From: Dmitry Rokosov @ 2023-04-26 10:29 UTC (permalink / raw)
To: gregkh, robh+dt, krzysztof.kozlowski+dt, neil.armstrong, khilman,
jbrunet, martin.blumenstingl, mturquette, vkoul, kishon, hminas,
Thinh.Nguyen
Cc: yue.wang, hanjie.lin, kernel, rockosov, linux-usb, devicetree,
linux-kernel, linux-arm-kernel, linux-amlogic, linux-phy,
Dmitry Rokosov
From now, the Amlogic A1 USB controller is capable of switching between
host and gadget modes based on the status of the OTG_ID signal or via
manual USB role change.
Previously, only the Amlogic A1 IP version did not use OTG support for
host only mode, but this is no longer applicable.
Therefore, the 'otg_switch_supported' option can now be removed as
it is no longer required.
Signed-off-by: Dmitry Rokosov <ddrokosov@sberdevices.ru>
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
---
drivers/usb/dwc3/dwc3-meson-g12a.c | 16 +++-------------
1 file changed, 3 insertions(+), 13 deletions(-)
diff --git a/drivers/usb/dwc3/dwc3-meson-g12a.c b/drivers/usb/dwc3/dwc3-meson-g12a.c
index b282ad0e69c6..a13afdb219e8 100644
--- a/drivers/usb/dwc3/dwc3-meson-g12a.c
+++ b/drivers/usb/dwc3/dwc3-meson-g12a.c
@@ -140,7 +140,6 @@ static const char * const meson_a1_phy_names[] = {
struct dwc3_meson_g12a;
struct dwc3_meson_g12a_drvdata {
- bool otg_switch_supported;
bool otg_phy_host_port_disable;
struct clk_bulk_data *clks;
int num_clks;
@@ -189,7 +188,6 @@ static int dwc3_meson_gxl_usb_post_init(struct dwc3_meson_g12a *priv);
*/
static const struct dwc3_meson_g12a_drvdata gxl_drvdata = {
- .otg_switch_supported = true,
.otg_phy_host_port_disable = true,
.clks = meson_gxl_clocks,
.num_clks = ARRAY_SIZE(meson_g12a_clocks),
@@ -203,7 +201,6 @@ static const struct dwc3_meson_g12a_drvdata gxl_drvdata = {
};
static const struct dwc3_meson_g12a_drvdata gxm_drvdata = {
- .otg_switch_supported = true,
.otg_phy_host_port_disable = true,
.clks = meson_gxl_clocks,
.num_clks = ARRAY_SIZE(meson_g12a_clocks),
@@ -217,7 +214,6 @@ static const struct dwc3_meson_g12a_drvdata gxm_drvdata = {
};
static const struct dwc3_meson_g12a_drvdata axg_drvdata = {
- .otg_switch_supported = true,
.clks = meson_gxl_clocks,
.num_clks = ARRAY_SIZE(meson_gxl_clocks),
.phy_names = meson_a1_phy_names,
@@ -230,7 +226,6 @@ static const struct dwc3_meson_g12a_drvdata axg_drvdata = {
};
static const struct dwc3_meson_g12a_drvdata g12a_drvdata = {
- .otg_switch_supported = true,
.clks = meson_g12a_clocks,
.num_clks = ARRAY_SIZE(meson_g12a_clocks),
.phy_names = meson_g12a_phy_names,
@@ -242,7 +237,6 @@ static const struct dwc3_meson_g12a_drvdata g12a_drvdata = {
};
static const struct dwc3_meson_g12a_drvdata a1_drvdata = {
- .otg_switch_supported = false,
.clks = meson_a1_clocks,
.num_clks = ARRAY_SIZE(meson_a1_clocks),
.phy_names = meson_a1_phy_names,
@@ -307,7 +301,7 @@ static int dwc3_meson_g12a_usb2_init_phy(struct dwc3_meson_g12a *priv, int i,
U2P_R0_POWER_ON_RESET,
U2P_R0_POWER_ON_RESET);
- if (priv->drvdata->otg_switch_supported && i == USB2_OTG_PHY) {
+ if (i == USB2_OTG_PHY) {
regmap_update_bits(priv->u2p_regmap[i], U2P_R0,
U2P_R0_ID_PULLUP | U2P_R0_DRV_VBUS,
U2P_R0_ID_PULLUP | U2P_R0_DRV_VBUS);
@@ -490,7 +484,7 @@ static int dwc3_meson_g12a_otg_mode_set(struct dwc3_meson_g12a *priv,
{
int ret;
- if (!priv->drvdata->otg_switch_supported || !priv->phys[USB2_OTG_PHY])
+ if (!priv->phys[USB2_OTG_PHY])
return -EINVAL;
if (mode == PHY_MODE_USB_HOST)
@@ -589,9 +583,6 @@ static int dwc3_meson_g12a_otg_init(struct platform_device *pdev,
int ret, irq;
struct device *dev = &pdev->dev;
- if (!priv->drvdata->otg_switch_supported)
- return 0;
-
if (priv->otg_mode == USB_DR_MODE_OTG) {
/* Ack irq before registering */
regmap_update_bits(priv->usb_glue_regmap, USB_R5,
@@ -841,8 +832,7 @@ static int dwc3_meson_g12a_remove(struct platform_device *pdev)
struct device *dev = &pdev->dev;
int i;
- if (priv->drvdata->otg_switch_supported)
- usb_role_switch_unregister(priv->role_switch);
+ usb_role_switch_unregister(priv->role_switch);
of_platform_depopulate(dev);
--
2.36.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v3 5/5] arm64: dts: meson: a1: support USB controller in OTG mode
2023-04-26 10:29 [PATCH v3 0/5] arm64: meson: support Amlogic A1 USB OTG controller Dmitry Rokosov
` (3 preceding siblings ...)
2023-04-26 10:29 ` [PATCH v3 4/5] usb: dwc3-meson-g12a: support OTG switch for all IP versions Dmitry Rokosov
@ 2023-04-26 10:29 ` Dmitry Rokosov
2023-05-01 12:49 ` Martin Blumenstingl
2023-05-09 7:44 ` neil.armstrong
4 siblings, 2 replies; 11+ messages in thread
From: Dmitry Rokosov @ 2023-04-26 10:29 UTC (permalink / raw)
To: gregkh, robh+dt, krzysztof.kozlowski+dt, neil.armstrong, khilman,
jbrunet, martin.blumenstingl, mturquette, vkoul, kishon, hminas,
Thinh.Nguyen
Cc: yue.wang, hanjie.lin, kernel, rockosov, linux-usb, devicetree,
linux-kernel, linux-arm-kernel, linux-amlogic, linux-phy,
Dmitry Rokosov
Amlogic A1 SoC family has USB2.0 controller based on dwc2 and dwc3
heads. It supports otg/host/peripheral modes.
Signed-off-by: Yue Wang <yue.wang@amlogic.com>
Signed-off-by: Hanjie Lin <hanjie.lin@amlogic.com>
Signed-off-by: Dmitry Rokosov <ddrokosov@sberdevices.ru>
---
arch/arm64/boot/dts/amlogic/meson-a1.dtsi | 59 +++++++++++++++++++++++
1 file changed, 59 insertions(+)
diff --git a/arch/arm64/boot/dts/amlogic/meson-a1.dtsi b/arch/arm64/boot/dts/amlogic/meson-a1.dtsi
index ae7d39cff07a..5588ee602161 100644
--- a/arch/arm64/boot/dts/amlogic/meson-a1.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-a1.dtsi
@@ -8,6 +8,8 @@
#include <dt-bindings/gpio/meson-a1-gpio.h>
#include <dt-bindings/clock/amlogic,a1-pll-clkc.h>
#include <dt-bindings/clock/amlogic,a1-clkc.h>
+#include <dt-bindings/power/meson-a1-power.h>
+#include <dt-bindings/reset/amlogic,meson-a1-reset.h>
/ {
compatible = "amlogic,a1";
@@ -169,6 +171,17 @@ gpio_intc: interrupt-controller@0440 {
amlogic,channel-interrupts =
<49 50 51 52 53 54 55 56>;
};
+
+ usb2_phy1: phy@4000 {
+ compatible = "amlogic,a1-usb2-phy";
+ clocks = <&clkc CLKID_USB_PHY_IN>;
+ clock-names = "xtal";
+ reg = <0x0 0x4000 0x0 0x60>;
+ resets = <&reset RESET_USBPHY>;
+ reset-names = "phy";
+ #phy-cells = <0>;
+ power-domains = <&pwrc PWRC_USB_ID>;
+ };
};
gic: interrupt-controller@ff901000 {
@@ -192,6 +205,52 @@ spifc: spi@fd000400 {
#size-cells = <0>;
status = "disabled";
};
+
+ usb: usb@fe004400 {
+ status = "disabled";
+ compatible = "amlogic,meson-a1-usb-ctrl";
+ reg = <0x0 0xfe004400 0x0 0xa0>;
+ interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
+ #address-cells = <2>;
+ #size-cells = <2>;
+ ranges;
+
+ clocks = <&clkc CLKID_USB_CTRL>,
+ <&clkc CLKID_USB_BUS>,
+ <&clkc CLKID_USB_CTRL_IN>;
+ clock-names = "usb_ctrl", "usb_bus", "xtal_usb_ctrl";
+ resets = <&reset RESET_USBCTRL>;
+ reset-name = "usb_ctrl";
+
+ dr_mode = "otg";
+
+ phys = <&usb2_phy1>;
+ phy-names = "usb2-phy1";
+
+ dwc2: usb@ff500000 {
+ compatible = "amlogic,meson-a1-usb", "snps,dwc2";
+ reg = <0x0 0xff500000 0x0 0x40000>;
+ interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
+ phys = <&usb2_phy1>;
+ phy-names = "usb2-phy";
+ clocks = <&clkc CLKID_USB_PHY>;
+ clock-names = "otg";
+ dr_mode = "peripheral";
+ g-rx-fifo-size = <192>;
+ g-np-tx-fifo-size = <128>;
+ g-tx-fifo-size = <128 128 16 16 16>;
+ };
+
+ dwc3: usb@ff400000 {
+ compatible = "snps,dwc3";
+ reg = <0x0 0xff400000 0x0 0x100000>;
+ interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>;
+ dr_mode = "host";
+ snps,dis_u2_susphy_quirk;
+ snps,quirk-frame-length-adjustment = <0x20>;
+ snps,parkmode-disable-ss-quirk;
+ };
+ };
};
timer {
--
2.36.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v3 1/5] phy: amlogic: enable/disable clkin during Amlogic USB PHY init/exit
2023-04-26 10:29 ` [PATCH v3 1/5] phy: amlogic: enable/disable clkin during Amlogic USB PHY init/exit Dmitry Rokosov
@ 2023-05-01 12:49 ` Martin Blumenstingl
2023-05-08 9:27 ` Vinod Koul
1 sibling, 0 replies; 11+ messages in thread
From: Martin Blumenstingl @ 2023-05-01 12:49 UTC (permalink / raw)
To: Dmitry Rokosov
Cc: gregkh, robh+dt, krzysztof.kozlowski+dt, neil.armstrong, khilman,
jbrunet, mturquette, vkoul, kishon, hminas, Thinh.Nguyen,
yue.wang, hanjie.lin, kernel, rockosov, linux-usb, devicetree,
linux-kernel, linux-arm-kernel, linux-amlogic, linux-phy
On Wed, Apr 26, 2023 at 12:29 PM Dmitry Rokosov
<ddrokosov@sberdevices.ru> wrote:
>
> Previously, all Amlogic boards used the XTAL clock as the default board
> clock for the USB PHY input, so there was no need to enable it.
> However, with the introduction of new Amlogic SoCs like the A1 family,
> the USB PHY now uses a gated clock. Hence, it is necessary to enable
> this gated clock during the PHY initialization sequence, or disable it
> during the PHY exit, as appropriate.
>
> Signed-off-by: Dmitry Rokosov <ddrokosov@sberdevices.ru>
Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v3 5/5] arm64: dts: meson: a1: support USB controller in OTG mode
2023-04-26 10:29 ` [PATCH v3 5/5] arm64: dts: meson: a1: support USB controller in OTG mode Dmitry Rokosov
@ 2023-05-01 12:49 ` Martin Blumenstingl
2023-05-09 7:44 ` neil.armstrong
1 sibling, 0 replies; 11+ messages in thread
From: Martin Blumenstingl @ 2023-05-01 12:49 UTC (permalink / raw)
To: Dmitry Rokosov
Cc: gregkh, robh+dt, krzysztof.kozlowski+dt, neil.armstrong, khilman,
jbrunet, mturquette, vkoul, kishon, hminas, Thinh.Nguyen,
yue.wang, hanjie.lin, kernel, rockosov, linux-usb, devicetree,
linux-kernel, linux-arm-kernel, linux-amlogic, linux-phy
On Wed, Apr 26, 2023 at 12:29 PM Dmitry Rokosov
<ddrokosov@sberdevices.ru> wrote:
>
> Amlogic A1 SoC family has USB2.0 controller based on dwc2 and dwc3
> heads. It supports otg/host/peripheral modes.
>
> Signed-off-by: Yue Wang <yue.wang@amlogic.com>
> Signed-off-by: Hanjie Lin <hanjie.lin@amlogic.com>
> Signed-off-by: Dmitry Rokosov <ddrokosov@sberdevices.ru>
Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v3 1/5] phy: amlogic: enable/disable clkin during Amlogic USB PHY init/exit
2023-04-26 10:29 ` [PATCH v3 1/5] phy: amlogic: enable/disable clkin during Amlogic USB PHY init/exit Dmitry Rokosov
2023-05-01 12:49 ` Martin Blumenstingl
@ 2023-05-08 9:27 ` Vinod Koul
1 sibling, 0 replies; 11+ messages in thread
From: Vinod Koul @ 2023-05-08 9:27 UTC (permalink / raw)
To: Dmitry Rokosov
Cc: gregkh, robh+dt, krzysztof.kozlowski+dt, neil.armstrong, khilman,
jbrunet, martin.blumenstingl, mturquette, kishon, hminas,
Thinh.Nguyen, yue.wang, hanjie.lin, kernel, rockosov, linux-usb,
devicetree, linux-kernel, linux-arm-kernel, linux-amlogic,
linux-phy
On 26-04-23, 13:29, Dmitry Rokosov wrote:
> Previously, all Amlogic boards used the XTAL clock as the default board
> clock for the USB PHY input, so there was no need to enable it.
> However, with the introduction of new Amlogic SoCs like the A1 family,
> the USB PHY now uses a gated clock. Hence, it is necessary to enable
> this gated clock during the PHY initialization sequence, or disable it
> during the PHY exit, as appropriate.
Applied to phy/next, thanks
--
~Vinod
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v3 5/5] arm64: dts: meson: a1: support USB controller in OTG mode
2023-04-26 10:29 ` [PATCH v3 5/5] arm64: dts: meson: a1: support USB controller in OTG mode Dmitry Rokosov
2023-05-01 12:49 ` Martin Blumenstingl
@ 2023-05-09 7:44 ` neil.armstrong
2023-05-11 20:24 ` Dmitry Rokosov
1 sibling, 1 reply; 11+ messages in thread
From: neil.armstrong @ 2023-05-09 7:44 UTC (permalink / raw)
To: Dmitry Rokosov, gregkh, robh+dt, krzysztof.kozlowski+dt, khilman,
jbrunet, martin.blumenstingl, mturquette, vkoul, kishon, hminas,
Thinh.Nguyen
Cc: yue.wang, hanjie.lin, kernel, rockosov, linux-usb, devicetree,
linux-kernel, linux-arm-kernel, linux-amlogic, linux-phy
Hi,
On 26/04/2023 12:29, Dmitry Rokosov wrote:
> Amlogic A1 SoC family has USB2.0 controller based on dwc2 and dwc3
> heads. It supports otg/host/peripheral modes.
>
> Signed-off-by: Yue Wang <yue.wang@amlogic.com>
> Signed-off-by: Hanjie Lin <hanjie.lin@amlogic.com>
> Signed-off-by: Dmitry Rokosov <ddrokosov@sberdevices.ru>
> ---
> arch/arm64/boot/dts/amlogic/meson-a1.dtsi | 59 +++++++++++++++++++++++
> 1 file changed, 59 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/amlogic/meson-a1.dtsi b/arch/arm64/boot/dts/amlogic/meson-a1.dtsi
> index ae7d39cff07a..5588ee602161 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-a1.dtsi
> +++ b/arch/arm64/boot/dts/amlogic/meson-a1.dtsi
> @@ -8,6 +8,8 @@
> #include <dt-bindings/gpio/meson-a1-gpio.h>
> #include <dt-bindings/clock/amlogic,a1-pll-clkc.h>
> #include <dt-bindings/clock/amlogic,a1-clkc.h>
> +#include <dt-bindings/power/meson-a1-power.h>
> +#include <dt-bindings/reset/amlogic,meson-a1-reset.h>
>
> / {
> compatible = "amlogic,a1";
> @@ -169,6 +171,17 @@ gpio_intc: interrupt-controller@0440 {
> amlogic,channel-interrupts =
> <49 50 51 52 53 54 55 56>;
> };
> +
> + usb2_phy1: phy@4000 {
> + compatible = "amlogic,a1-usb2-phy";
> + clocks = <&clkc CLKID_USB_PHY_IN>;
> + clock-names = "xtal";
> + reg = <0x0 0x4000 0x0 0x60>;
> + resets = <&reset RESET_USBPHY>;
> + reset-names = "phy";
> + #phy-cells = <0>;
> + power-domains = <&pwrc PWRC_USB_ID>;
> + };
> };
>
> gic: interrupt-controller@ff901000 {
> @@ -192,6 +205,52 @@ spifc: spi@fd000400 {
> #size-cells = <0>;
> status = "disabled";
> };
> +
> + usb: usb@fe004400 {
> + status = "disabled";
> + compatible = "amlogic,meson-a1-usb-ctrl";
> + reg = <0x0 0xfe004400 0x0 0xa0>;
> + interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
> + #address-cells = <2>;
> + #size-cells = <2>;
> + ranges;
> +
> + clocks = <&clkc CLKID_USB_CTRL>,
> + <&clkc CLKID_USB_BUS>,
> + <&clkc CLKID_USB_CTRL_IN>;
> + clock-names = "usb_ctrl", "usb_bus", "xtal_usb_ctrl";
> + resets = <&reset RESET_USBCTRL>;
> + reset-name = "usb_ctrl";
> +
> + dr_mode = "otg";
> +
> + phys = <&usb2_phy1>;
> + phy-names = "usb2-phy1";
> +
> + dwc2: usb@ff500000 {
> + compatible = "amlogic,meson-a1-usb", "snps,dwc2";
> + reg = <0x0 0xff500000 0x0 0x40000>;
> + interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
> + phys = <&usb2_phy1>;
> + phy-names = "usb2-phy";
> + clocks = <&clkc CLKID_USB_PHY>;
> + clock-names = "otg";
> + dr_mode = "peripheral";
> + g-rx-fifo-size = <192>;
> + g-np-tx-fifo-size = <128>;
> + g-tx-fifo-size = <128 128 16 16 16>;
> + };
> +
> + dwc3: usb@ff400000 {
> + compatible = "snps,dwc3";
> + reg = <0x0 0xff400000 0x0 0x100000>;
> + interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>;
> + dr_mode = "host";
> + snps,dis_u2_susphy_quirk;
> + snps,quirk-frame-length-adjustment = <0x20>;
> + snps,parkmode-disable-ss-quirk;
> + };
> + };
> };
>
> timer {
This patcj is fine, but depends on clock bindings & dt, so now Vinod took the PHY
patch, please resend this wiyhout patches 1 & 5, then resend the DT patch later when
the clock bindings is merged.
Thanks,
Neil
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v3 5/5] arm64: dts: meson: a1: support USB controller in OTG mode
2023-05-09 7:44 ` neil.armstrong
@ 2023-05-11 20:24 ` Dmitry Rokosov
0 siblings, 0 replies; 11+ messages in thread
From: Dmitry Rokosov @ 2023-05-11 20:24 UTC (permalink / raw)
To: neil.armstrong
Cc: gregkh, robh+dt, krzysztof.kozlowski+dt, khilman, jbrunet,
martin.blumenstingl, mturquette, vkoul, kishon, hminas,
Thinh.Nguyen, yue.wang, hanjie.lin, kernel, rockosov, linux-usb,
devicetree, linux-kernel, linux-arm-kernel, linux-amlogic,
linux-phy
Hello Neil,
I apologize for the delayed response, as I did not have access to my laptop
for a few days.
On Tue, May 09, 2023 at 09:44:33AM +0200, neil.armstrong@linaro.org wrote:
> Hi,
>
> On 26/04/2023 12:29, Dmitry Rokosov wrote:
> > Amlogic A1 SoC family has USB2.0 controller based on dwc2 and dwc3
> > heads. It supports otg/host/peripheral modes.
> >
> > Signed-off-by: Yue Wang <yue.wang@amlogic.com>
> > Signed-off-by: Hanjie Lin <hanjie.lin@amlogic.com>
> > Signed-off-by: Dmitry Rokosov <ddrokosov@sberdevices.ru>
> > ---
> > arch/arm64/boot/dts/amlogic/meson-a1.dtsi | 59 +++++++++++++++++++++++
> > 1 file changed, 59 insertions(+)
> >
> > diff --git a/arch/arm64/boot/dts/amlogic/meson-a1.dtsi b/arch/arm64/boot/dts/amlogic/meson-a1.dtsi
> > index ae7d39cff07a..5588ee602161 100644
> > --- a/arch/arm64/boot/dts/amlogic/meson-a1.dtsi
> > +++ b/arch/arm64/boot/dts/amlogic/meson-a1.dtsi
> > @@ -8,6 +8,8 @@
> > #include <dt-bindings/gpio/meson-a1-gpio.h>
> > #include <dt-bindings/clock/amlogic,a1-pll-clkc.h>
> > #include <dt-bindings/clock/amlogic,a1-clkc.h>
> > +#include <dt-bindings/power/meson-a1-power.h>
> > +#include <dt-bindings/reset/amlogic,meson-a1-reset.h>
> > / {
> > compatible = "amlogic,a1";
> > @@ -169,6 +171,17 @@ gpio_intc: interrupt-controller@0440 {
> > amlogic,channel-interrupts =
> > <49 50 51 52 53 54 55 56>;
> > };
> > +
> > + usb2_phy1: phy@4000 {
> > + compatible = "amlogic,a1-usb2-phy";
> > + clocks = <&clkc CLKID_USB_PHY_IN>;
> > + clock-names = "xtal";
> > + reg = <0x0 0x4000 0x0 0x60>;
> > + resets = <&reset RESET_USBPHY>;
> > + reset-names = "phy";
> > + #phy-cells = <0>;
> > + power-domains = <&pwrc PWRC_USB_ID>;
> > + };
> > };
> > gic: interrupt-controller@ff901000 {
> > @@ -192,6 +205,52 @@ spifc: spi@fd000400 {
> > #size-cells = <0>;
> > status = "disabled";
> > };
> > +
> > + usb: usb@fe004400 {
> > + status = "disabled";
> > + compatible = "amlogic,meson-a1-usb-ctrl";
> > + reg = <0x0 0xfe004400 0x0 0xa0>;
> > + interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
> > + #address-cells = <2>;
> > + #size-cells = <2>;
> > + ranges;
> > +
> > + clocks = <&clkc CLKID_USB_CTRL>,
> > + <&clkc CLKID_USB_BUS>,
> > + <&clkc CLKID_USB_CTRL_IN>;
> > + clock-names = "usb_ctrl", "usb_bus", "xtal_usb_ctrl";
> > + resets = <&reset RESET_USBCTRL>;
> > + reset-name = "usb_ctrl";
> > +
> > + dr_mode = "otg";
> > +
> > + phys = <&usb2_phy1>;
> > + phy-names = "usb2-phy1";
> > +
> > + dwc2: usb@ff500000 {
> > + compatible = "amlogic,meson-a1-usb", "snps,dwc2";
> > + reg = <0x0 0xff500000 0x0 0x40000>;
> > + interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
> > + phys = <&usb2_phy1>;
> > + phy-names = "usb2-phy";
> > + clocks = <&clkc CLKID_USB_PHY>;
> > + clock-names = "otg";
> > + dr_mode = "peripheral";
> > + g-rx-fifo-size = <192>;
> > + g-np-tx-fifo-size = <128>;
> > + g-tx-fifo-size = <128 128 16 16 16>;
> > + };
> > +
> > + dwc3: usb@ff400000 {
> > + compatible = "snps,dwc3";
> > + reg = <0x0 0xff400000 0x0 0x100000>;
> > + interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>;
> > + dr_mode = "host";
> > + snps,dis_u2_susphy_quirk;
> > + snps,quirk-frame-length-adjustment = <0x20>;
> > + snps,parkmode-disable-ss-quirk;
> > + };
> > + };
> > };
> > timer {
>
> This patcj is fine, but depends on clock bindings & dt, so now Vinod took the PHY
> patch, please resend this wiyhout patches 1 & 5, then resend the DT patch later when
> the clock bindings is merged.
>
> Thanks,
> Neil
Sure, not a problem. I will resend the 3 patchsets in different series.
--
Thank you,
Dmitry
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2023-05-11 20:25 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-26 10:29 [PATCH v3 0/5] arm64: meson: support Amlogic A1 USB OTG controller Dmitry Rokosov
2023-04-26 10:29 ` [PATCH v3 1/5] phy: amlogic: enable/disable clkin during Amlogic USB PHY init/exit Dmitry Rokosov
2023-05-01 12:49 ` Martin Blumenstingl
2023-05-08 9:27 ` Vinod Koul
2023-04-26 10:29 ` [PATCH v3 2/5] usb: dwc2: support dwc2 IP for Amlogic A1 SoC family Dmitry Rokosov
2023-04-26 10:29 ` [PATCH v3 3/5] dt-bindings: usb: dwc2: add support for Amlogic A1 SoC USB peripheral Dmitry Rokosov
2023-04-26 10:29 ` [PATCH v3 4/5] usb: dwc3-meson-g12a: support OTG switch for all IP versions Dmitry Rokosov
2023-04-26 10:29 ` [PATCH v3 5/5] arm64: dts: meson: a1: support USB controller in OTG mode Dmitry Rokosov
2023-05-01 12:49 ` Martin Blumenstingl
2023-05-09 7:44 ` neil.armstrong
2023-05-11 20:24 ` Dmitry Rokosov
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).