* [PATCH v3 0/8] phy-rockchip-inno-usb2: support rk356x usb2phy
@ 2021-12-15 21:02 Peter Geis
2021-12-15 21:02 ` [PATCH v3 2/8] dt-bindings: phy: phy-rockchip-inno-usb2: add rk3568 documentation Peter Geis
` (6 more replies)
0 siblings, 7 replies; 9+ messages in thread
From: Peter Geis @ 2021-12-15 21:02 UTC (permalink / raw)
Cc: Peter Geis, Heiko Stuebner, linux-phy, devicetree,
linux-arm-kernel, linux-rockchip, linux-kernel, Michael Riesch,
Johan Jonker, Rob Herring, Ondrej Jirman
Good Afternoon,
This is my series to support the usb2 phy devices on the rk356x.
The rk356x phy has a single muxed interrupt and has moved the usb2phy
nodes out of the grf and into their own nodes.
The phy needs to tie back into the grf for register control, similar to
the rv1108.
By moving the phys into their own nodes, they now have full
#address_cells = 2 register addresses, but they still reside below the 32bit
mmio range.
This driver series only supports the host configuration for the rk356x.
I have have tested it on the following:
rk3566 - Pine64 Quartz64 Model A
rk3399 - Pine64 Rockpro64
Please provide feedback and comments as you see fit.
Tested-by: Michael Riesch <michael.riesch@wolfvision.net>
Changelog:
v3:
- adjust usb2phy dt-bindings to filter correctly, thanks Rob and Johan
- adjust usb2phy dts names to fix alphetical ordering, thanks Michael
- squash "phy: rockchip-inno-usb2: Don't print useless error" thanks
Ondrej
v2:
- correct the order of the usb2phy-grf dt-bindings patch, thanks Johan
- correct the conditional requirements of phy-rockchip-inno-usb2, thanks
Johan
- drop increase generic-ohci clocks patch, thanks Heiko
- correct rk356x.dtsi ordering
- fix a dtbs-check callout
Peter Geis (8):
dt-bindings: soc: rockchip: add rk3568-usb2phy-grf
dt-bindings: phy: phy-rockchip-inno-usb2: add rk3568 documentation
phy: phy-rockchip-inno-usb2: support #address_cells = 2
phy: phy-rockchip-inno-usb2: support standalone phy nodes
phy: phy-rockchip-inno-usb2: support muxed interrupts
phy: phy-rockchip-inno-usb2: add rk3568 support
arm64: dts: rockchip: add usb2 nodes to rk3568 device tree
arm64: dts: rockchip: add Quartz64-A usb2 support
.../bindings/phy/phy-rockchip-inno-usb2.yaml | 44 ++-
.../devicetree/bindings/soc/rockchip/grf.yaml | 1 +
.../boot/dts/rockchip/rk3566-quartz64-a.dts | 52 ++++
arch/arm64/boot/dts/rockchip/rk356x.dtsi | 98 +++++++
drivers/phy/rockchip/phy-rockchip-inno-usb2.c | 259 ++++++++++++++----
5 files changed, 396 insertions(+), 58 deletions(-)
--
2.25.1
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v3 2/8] dt-bindings: phy: phy-rockchip-inno-usb2: add rk3568 documentation
2021-12-15 21:02 [PATCH v3 0/8] phy-rockchip-inno-usb2: support rk356x usb2phy Peter Geis
@ 2021-12-15 21:02 ` Peter Geis
2021-12-16 20:31 ` Rob Herring
2021-12-15 21:02 ` [PATCH v3 3/8] phy: phy-rockchip-inno-usb2: support #address_cells = 2 Peter Geis
` (5 subsequent siblings)
6 siblings, 1 reply; 9+ messages in thread
From: Peter Geis @ 2021-12-15 21:02 UTC (permalink / raw)
To: Kishon Vijay Abraham I, Vinod Koul, Rob Herring, Heiko Stuebner
Cc: Peter Geis, Johan Jonker, Rob Herring, linux-phy, devicetree,
linux-arm-kernel, linux-rockchip, linux-kernel
The rk3568 usb2phy node is a standalone node with a single muxed
interrupt.
Add documentation for it to phy-rockchip-inno-usb2.
Signed-off-by: Peter Geis <pgwipeout@gmail.com>
---
This was the best solution I've come up with for this.
I avoided creating another binding since this is such a simple change to
the actual driver and would likely require renaming the existing
binding.
I've tested that this correctly flags if the interrupts are missing or
incorrectly assigned on both rk356x and rk3399.
Thank you Johan and Rob for your constructive feedback.
.../bindings/phy/phy-rockchip-inno-usb2.yaml | 44 +++++++++++++++++--
1 file changed, 40 insertions(+), 4 deletions(-)
diff --git a/Documentation/devicetree/bindings/phy/phy-rockchip-inno-usb2.yaml b/Documentation/devicetree/bindings/phy/phy-rockchip-inno-usb2.yaml
index 5bebd86bf8b6..4b75289735eb 100644
--- a/Documentation/devicetree/bindings/phy/phy-rockchip-inno-usb2.yaml
+++ b/Documentation/devicetree/bindings/phy/phy-rockchip-inno-usb2.yaml
@@ -18,6 +18,7 @@ properties:
- rockchip,rk3328-usb2phy
- rockchip,rk3366-usb2phy
- rockchip,rk3399-usb2phy
+ - rockchip,rk3568-usb2phy
- rockchip,rv1108-usb2phy
reg:
@@ -50,6 +51,10 @@ properties:
description:
Phandle to the extcon device providing the cable state for the otg phy.
+ interrupts:
+ description: Muxed interrupt for both ports
+ maxItems: 1
+
rockchip,usbgrf:
$ref: /schemas/types.yaml#/definitions/phandle
description:
@@ -67,6 +72,7 @@ properties:
interrupts:
description: host linestate interrupt
+ maxItems: 1
interrupt-names:
const: linestate
@@ -78,8 +84,6 @@ properties:
required:
- "#phy-cells"
- - interrupts
- - interrupt-names
otg-port:
type: object
@@ -109,8 +113,6 @@ properties:
required:
- "#phy-cells"
- - interrupts
- - interrupt-names
required:
- compatible
@@ -120,6 +122,40 @@ required:
- host-port
- otg-port
+allOf:
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: rockchip,rk3568-usb2phy
+
+ then:
+ properties:
+ host-port:
+ properties:
+ interrupts: false
+
+ otg-port:
+ properties:
+ interrupts: false
+
+ required:
+ - interrupts
+
+ else:
+ properties:
+ interrupts: false
+
+ host-port:
+ required:
+ - interrupts
+ - interrupt-names
+
+ otg-port:
+ required:
+ - interrupts
+ - interrupt-names
+
additionalProperties: false
examples:
--
2.25.1
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v3 3/8] phy: phy-rockchip-inno-usb2: support #address_cells = 2
2021-12-15 21:02 [PATCH v3 0/8] phy-rockchip-inno-usb2: support rk356x usb2phy Peter Geis
2021-12-15 21:02 ` [PATCH v3 2/8] dt-bindings: phy: phy-rockchip-inno-usb2: add rk3568 documentation Peter Geis
@ 2021-12-15 21:02 ` Peter Geis
2021-12-15 21:02 ` [PATCH v3 4/8] phy: phy-rockchip-inno-usb2: support standalone phy nodes Peter Geis
` (4 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Peter Geis @ 2021-12-15 21:02 UTC (permalink / raw)
To: Kishon Vijay Abraham I, Vinod Koul, Heiko Stuebner
Cc: Peter Geis, Michael Riesch, linux-phy, linux-arm-kernel,
linux-rockchip, linux-kernel
New Rockchip devices have the usb phy nodes as standalone devices.
These nodes have register nodes with #address_cells = 2, but only use 32
bit addresses.
Adjust the driver to check if the returned address is "0", and adjust
the index in that case.
Signed-off-by: Peter Geis <pgwipeout@gmail.com>
Tested-by: Michael Riesch <michael.riesch@wolfvision.net>
---
drivers/phy/rockchip/phy-rockchip-inno-usb2.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
index 1938365abbb3..5cfa7169d879 100644
--- a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
+++ b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
@@ -1091,12 +1091,21 @@ static int rockchip_usb2phy_probe(struct platform_device *pdev)
rphy->usbgrf = NULL;
}
- if (of_property_read_u32(np, "reg", ®)) {
+ if (of_property_read_u32_index(np, "reg", 0, ®)) {
dev_err(dev, "the reg property is not assigned in %pOFn node\n",
np);
return -EINVAL;
}
+ /* support address_cells=2 */
+ if (reg == 0) {
+ if (of_property_read_u32_index(np, "reg", 1, ®)) {
+ dev_err(dev, "the reg property is not assigned in %pOFn node\n",
+ np);
+ return -EINVAL;
+ }
+ }
+
rphy->dev = dev;
phy_cfgs = match->data;
rphy->chg_state = USB_CHG_STATE_UNDEFINED;
--
2.25.1
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v3 4/8] phy: phy-rockchip-inno-usb2: support standalone phy nodes
2021-12-15 21:02 [PATCH v3 0/8] phy-rockchip-inno-usb2: support rk356x usb2phy Peter Geis
2021-12-15 21:02 ` [PATCH v3 2/8] dt-bindings: phy: phy-rockchip-inno-usb2: add rk3568 documentation Peter Geis
2021-12-15 21:02 ` [PATCH v3 3/8] phy: phy-rockchip-inno-usb2: support #address_cells = 2 Peter Geis
@ 2021-12-15 21:02 ` Peter Geis
2021-12-15 21:02 ` [PATCH v3 5/8] phy: phy-rockchip-inno-usb2: support muxed interrupts Peter Geis
` (3 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Peter Geis @ 2021-12-15 21:02 UTC (permalink / raw)
To: Kishon Vijay Abraham I, Vinod Koul, Heiko Stuebner
Cc: Peter Geis, Michael Riesch, linux-phy, linux-arm-kernel,
linux-rockchip, linux-kernel
New Rockchip devices have the usb2 phy devices as standalone nodes
instead of children of the grf node.
Allow the driver to find the grf node from a phandle.
Signed-off-by: Peter Geis <pgwipeout@gmail.com>
Tested-by: Michael Riesch <michael.riesch@wolfvision.net>
---
drivers/phy/rockchip/phy-rockchip-inno-usb2.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
index 5cfa7169d879..29e3a0da8c26 100644
--- a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
+++ b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
@@ -1074,12 +1074,19 @@ static int rockchip_usb2phy_probe(struct platform_device *pdev)
return -EINVAL;
}
- if (!dev->parent || !dev->parent->of_node)
- return -EINVAL;
+ if (!dev->parent || !dev->parent->of_node) {
+ rphy->grf = syscon_regmap_lookup_by_phandle(np, "rockchip,usbgrf");
+ if (IS_ERR(rphy->grf)) {
+ dev_err(dev, "failed to locate usbgrf\n");
+ return PTR_ERR(rphy->grf);
+ }
+ }
- rphy->grf = syscon_node_to_regmap(dev->parent->of_node);
- if (IS_ERR(rphy->grf))
- return PTR_ERR(rphy->grf);
+ else {
+ rphy->grf = syscon_node_to_regmap(dev->parent->of_node);
+ if (IS_ERR(rphy->grf))
+ return PTR_ERR(rphy->grf);
+ }
if (of_device_is_compatible(np, "rockchip,rv1108-usb2phy")) {
rphy->usbgrf =
--
2.25.1
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v3 5/8] phy: phy-rockchip-inno-usb2: support muxed interrupts
2021-12-15 21:02 [PATCH v3 0/8] phy-rockchip-inno-usb2: support rk356x usb2phy Peter Geis
` (2 preceding siblings ...)
2021-12-15 21:02 ` [PATCH v3 4/8] phy: phy-rockchip-inno-usb2: support standalone phy nodes Peter Geis
@ 2021-12-15 21:02 ` Peter Geis
2021-12-15 21:02 ` [PATCH v3 6/8] phy: phy-rockchip-inno-usb2: add rk3568 support Peter Geis
` (2 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Peter Geis @ 2021-12-15 21:02 UTC (permalink / raw)
To: Kishon Vijay Abraham I, Vinod Koul, Heiko Stuebner
Cc: Peter Geis, Michael Riesch, linux-phy, linux-arm-kernel,
linux-rockchip, linux-kernel
The rk3568 usb2phy has a single muxed interrupt that handles all
interrupts.
Allow the driver to plug in only a single interrupt as necessary.
Signed-off-by: Peter Geis <pgwipeout@gmail.com>
Tested-by: Michael Riesch <michael.riesch@wolfvision.net>
---
drivers/phy/rockchip/phy-rockchip-inno-usb2.c | 168 +++++++++++++-----
1 file changed, 119 insertions(+), 49 deletions(-)
diff --git a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
index 29e3a0da8c26..285958fdab38 100644
--- a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
+++ b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
@@ -204,6 +204,7 @@ struct rockchip_usb2phy_port {
* @dcd_retries: The retry count used to track Data contact
* detection process.
* @edev: extcon device for notification registration
+ * @irq: muxed interrupt for single irq configuration
* @phy_cfg: phy register configuration, assigned by driver data.
* @ports: phy port instance.
*/
@@ -218,6 +219,7 @@ struct rockchip_usb2phy {
enum power_supply_type chg_type;
u8 dcd_retries;
struct extcon_dev *edev;
+ int irq;
const struct rockchip_usb2phy_cfg *phy_cfg;
struct rockchip_usb2phy_port ports[USB2PHY_NUM_PORTS];
};
@@ -927,6 +929,102 @@ static irqreturn_t rockchip_usb2phy_otg_mux_irq(int irq, void *data)
return IRQ_NONE;
}
+static irqreturn_t rockchip_usb2phy_irq(int irq, void *data)
+{
+ struct rockchip_usb2phy *rphy = data;
+ struct rockchip_usb2phy_port *rport;
+ irqreturn_t ret = IRQ_NONE;
+ unsigned int index;
+
+ for (index = 0; index < rphy->phy_cfg->num_ports; index++) {
+ rport = &rphy->ports[index];
+ if (!rport->phy)
+ continue;
+
+ /* Handle linestate irq for both otg port and host port */
+ ret = rockchip_usb2phy_linestate_irq(irq, rport);
+ }
+
+ return ret;
+}
+
+static int rockchip_usb2phy_port_irq_init(struct rockchip_usb2phy *rphy,
+ struct rockchip_usb2phy_port *rport,
+ struct device_node *child_np)
+{
+ int ret;
+
+ /*
+ * If the usb2 phy used combined irq for otg and host port,
+ * don't need to init otg and host port irq separately.
+ */
+ if (rphy->irq > 0)
+ return 0;
+
+ switch (rport->port_id) {
+ case USB2PHY_PORT_HOST:
+ rport->ls_irq = of_irq_get_byname(child_np, "linestate");
+ if (rport->ls_irq < 0) {
+ dev_err(rphy->dev, "no linestate irq provided\n");
+ return rport->ls_irq;
+ }
+
+ ret = devm_request_threaded_irq(rphy->dev, rport->ls_irq, NULL,
+ rockchip_usb2phy_linestate_irq,
+ IRQF_ONESHOT,
+ "rockchip_usb2phy", rport);
+ if (ret) {
+ dev_err(rphy->dev, "failed to request linestate irq handle\n");
+ return ret;
+ }
+ break;
+ case USB2PHY_PORT_OTG:
+ /*
+ * Some SoCs use one interrupt with otg-id/otg-bvalid/linestate
+ * interrupts muxed together, so probe the otg-mux interrupt first,
+ * if not found, then look for the regular interrupts one by one.
+ */
+ rport->otg_mux_irq = of_irq_get_byname(child_np, "otg-mux");
+ if (rport->otg_mux_irq > 0) {
+ ret = devm_request_threaded_irq(rphy->dev, rport->otg_mux_irq,
+ NULL,
+ rockchip_usb2phy_otg_mux_irq,
+ IRQF_ONESHOT,
+ "rockchip_usb2phy_otg",
+ rport);
+ if (ret) {
+ dev_err(rphy->dev,
+ "failed to request otg-mux irq handle\n");
+ return ret;
+ }
+ } else {
+ rport->bvalid_irq = of_irq_get_byname(child_np, "otg-bvalid");
+ if (rport->bvalid_irq < 0) {
+ dev_err(rphy->dev, "no vbus valid irq provided\n");
+ ret = rport->bvalid_irq;
+ return ret;
+ }
+
+ ret = devm_request_threaded_irq(rphy->dev, rport->bvalid_irq,
+ NULL,
+ rockchip_usb2phy_bvalid_irq,
+ IRQF_ONESHOT,
+ "rockchip_usb2phy_bvalid",
+ rport);
+ if (ret) {
+ dev_err(rphy->dev,
+ "failed to request otg-bvalid irq handle\n");
+ return ret;
+ }
+ }
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
static int rockchip_usb2phy_host_port_init(struct rockchip_usb2phy *rphy,
struct rockchip_usb2phy_port *rport,
struct device_node *child_np)
@@ -940,18 +1038,9 @@ static int rockchip_usb2phy_host_port_init(struct rockchip_usb2phy *rphy,
mutex_init(&rport->mutex);
INIT_DELAYED_WORK(&rport->sm_work, rockchip_usb2phy_sm_work);
- rport->ls_irq = of_irq_get_byname(child_np, "linestate");
- if (rport->ls_irq < 0) {
- dev_err(rphy->dev, "no linestate irq provided\n");
- return rport->ls_irq;
- }
-
- ret = devm_request_threaded_irq(rphy->dev, rport->ls_irq, NULL,
- rockchip_usb2phy_linestate_irq,
- IRQF_ONESHOT,
- "rockchip_usb2phy", rport);
+ ret = rockchip_usb2phy_port_irq_init(rphy, rport, child_np);
if (ret) {
- dev_err(rphy->dev, "failed to request linestate irq handle\n");
+ dev_err(rphy->dev, "failed to setup host irq\n");
return ret;
}
@@ -1000,44 +1089,10 @@ static int rockchip_usb2phy_otg_port_init(struct rockchip_usb2phy *rphy,
INIT_DELAYED_WORK(&rport->chg_work, rockchip_chg_detect_work);
INIT_DELAYED_WORK(&rport->otg_sm_work, rockchip_usb2phy_otg_sm_work);
- /*
- * Some SoCs use one interrupt with otg-id/otg-bvalid/linestate
- * interrupts muxed together, so probe the otg-mux interrupt first,
- * if not found, then look for the regular interrupts one by one.
- */
- rport->otg_mux_irq = of_irq_get_byname(child_np, "otg-mux");
- if (rport->otg_mux_irq > 0) {
- ret = devm_request_threaded_irq(rphy->dev, rport->otg_mux_irq,
- NULL,
- rockchip_usb2phy_otg_mux_irq,
- IRQF_ONESHOT,
- "rockchip_usb2phy_otg",
- rport);
- if (ret) {
- dev_err(rphy->dev,
- "failed to request otg-mux irq handle\n");
- goto out;
- }
- } else {
- rport->bvalid_irq = of_irq_get_byname(child_np, "otg-bvalid");
- if (rport->bvalid_irq < 0) {
- dev_err(rphy->dev, "no vbus valid irq provided\n");
- ret = rport->bvalid_irq;
- goto out;
- }
-
- ret = devm_request_threaded_irq(rphy->dev, rport->bvalid_irq,
- NULL,
- rockchip_usb2phy_bvalid_irq,
- IRQF_ONESHOT,
- "rockchip_usb2phy_bvalid",
- rport);
- if (ret) {
- dev_err(rphy->dev,
- "failed to request otg-bvalid irq handle\n");
- goto out;
- }
- }
+ ret = rockchip_usb2phy_port_irq_init(rphy, rport, child_np);
+ if (ret) {
+ dev_err(rphy->dev, "failed to init irq for host port\n");
+ goto out;
if (!IS_ERR(rphy->edev)) {
rport->event_nb.notifier_call = rockchip_otg_event;
@@ -1117,6 +1172,7 @@ static int rockchip_usb2phy_probe(struct platform_device *pdev)
phy_cfgs = match->data;
rphy->chg_state = USB_CHG_STATE_UNDEFINED;
rphy->chg_type = POWER_SUPPLY_TYPE_UNKNOWN;
+ rphy->irq = platform_get_irq_optional(pdev, 0);
platform_set_drvdata(pdev, rphy);
ret = rockchip_usb2phy_extcon_register(rphy);
@@ -1196,6 +1252,20 @@ static int rockchip_usb2phy_probe(struct platform_device *pdev)
}
provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);
+
+ if (rphy->irq > 0) {
+ ret = devm_request_threaded_irq(rphy->dev, rphy->irq, NULL,
+ rockchip_usb2phy_irq,
+ IRQF_ONESHOT,
+ "rockchip_usb2phy",
+ rphy);
+ if (ret) {
+ dev_err(rphy->dev,
+ "failed to request usb2phy irq handle\n");
+ goto put_child;
+ }
+ }
+
return PTR_ERR_OR_ZERO(provider);
put_child:
--
2.25.1
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v3 6/8] phy: phy-rockchip-inno-usb2: add rk3568 support
2021-12-15 21:02 [PATCH v3 0/8] phy-rockchip-inno-usb2: support rk356x usb2phy Peter Geis
` (3 preceding siblings ...)
2021-12-15 21:02 ` [PATCH v3 5/8] phy: phy-rockchip-inno-usb2: support muxed interrupts Peter Geis
@ 2021-12-15 21:02 ` Peter Geis
2021-12-23 11:25 ` [PATCH v3 0/8] phy-rockchip-inno-usb2: support rk356x usb2phy Vinod Koul
2021-12-28 0:48 ` (subset) " Heiko Stuebner
6 siblings, 0 replies; 9+ messages in thread
From: Peter Geis @ 2021-12-15 21:02 UTC (permalink / raw)
To: Kishon Vijay Abraham I, Vinod Koul, Heiko Stuebner
Cc: Peter Geis, Michael Riesch, linux-phy, linux-arm-kernel,
linux-rockchip, linux-kernel
The rk3568 usb2phy is a standalone device with a single muxed interrupt.
Add support for the registers to the usb2phy driver.
Signed-off-by: Peter Geis <pgwipeout@gmail.com>
Tested-by: Michael Riesch <michael.riesch@wolfvision.net>
---
drivers/phy/rockchip/phy-rockchip-inno-usb2.c | 65 +++++++++++++++++++
1 file changed, 65 insertions(+)
diff --git a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
index 285958fdab38..bdc5a861891c 100644
--- a/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
+++ b/drivers/phy/rockchip/phy-rockchip-inno-usb2.c
@@ -1093,6 +1093,7 @@ static int rockchip_usb2phy_otg_port_init(struct rockchip_usb2phy *rphy,
if (ret) {
dev_err(rphy->dev, "failed to init irq for host port\n");
goto out;
+ }
if (!IS_ERR(rphy->edev)) {
rport->event_nb.notifier_call = rockchip_otg_event;
@@ -1504,6 +1505,69 @@ static const struct rockchip_usb2phy_cfg rk3399_phy_cfgs[] = {
{ /* sentinel */ }
};
+static const struct rockchip_usb2phy_cfg rk3568_phy_cfgs[] = {
+ {
+ .reg = 0xfe8a0000,
+ .num_ports = 2,
+ .clkout_ctl = { 0x0008, 4, 4, 1, 0 },
+ .port_cfgs = {
+ [USB2PHY_PORT_OTG] = {
+ .phy_sus = { 0x0000, 8, 0, 0, 0x1d1 },
+ .bvalid_det_en = { 0x0080, 2, 2, 0, 1 },
+ .bvalid_det_st = { 0x0084, 2, 2, 0, 1 },
+ .bvalid_det_clr = { 0x0088, 2, 2, 0, 1 },
+ .utmi_avalid = { 0x00c0, 10, 10, 0, 1 },
+ .utmi_bvalid = { 0x00c0, 9, 9, 0, 1 },
+ },
+ [USB2PHY_PORT_HOST] = {
+ /* Select suspend control from controller */
+ .phy_sus = { 0x0004, 8, 0, 0x1d2, 0x1d2 },
+ .ls_det_en = { 0x0080, 1, 1, 0, 1 },
+ .ls_det_st = { 0x0084, 1, 1, 0, 1 },
+ .ls_det_clr = { 0x0088, 1, 1, 0, 1 },
+ .utmi_ls = { 0x00c0, 17, 16, 0, 1 },
+ .utmi_hstdet = { 0x00c0, 19, 19, 0, 1 }
+ }
+ },
+ .chg_det = {
+ .opmode = { 0x0000, 3, 0, 5, 1 },
+ .cp_det = { 0x00c0, 24, 24, 0, 1 },
+ .dcp_det = { 0x00c0, 23, 23, 0, 1 },
+ .dp_det = { 0x00c0, 25, 25, 0, 1 },
+ .idm_sink_en = { 0x0008, 8, 8, 0, 1 },
+ .idp_sink_en = { 0x0008, 7, 7, 0, 1 },
+ .idp_src_en = { 0x0008, 9, 9, 0, 1 },
+ .rdm_pdwn_en = { 0x0008, 10, 10, 0, 1 },
+ .vdm_src_en = { 0x0008, 12, 12, 0, 1 },
+ .vdp_src_en = { 0x0008, 11, 11, 0, 1 },
+ },
+ },
+ {
+ .reg = 0xfe8b0000,
+ .num_ports = 2,
+ .clkout_ctl = { 0x0008, 4, 4, 1, 0 },
+ .port_cfgs = {
+ [USB2PHY_PORT_OTG] = {
+ .phy_sus = { 0x0000, 8, 0, 0x1d2, 0x1d1 },
+ .ls_det_en = { 0x0080, 0, 0, 0, 1 },
+ .ls_det_st = { 0x0084, 0, 0, 0, 1 },
+ .ls_det_clr = { 0x0088, 0, 0, 0, 1 },
+ .utmi_ls = { 0x00c0, 5, 4, 0, 1 },
+ .utmi_hstdet = { 0x00c0, 7, 7, 0, 1 }
+ },
+ [USB2PHY_PORT_HOST] = {
+ .phy_sus = { 0x0004, 8, 0, 0x1d2, 0x1d1 },
+ .ls_det_en = { 0x0080, 1, 1, 0, 1 },
+ .ls_det_st = { 0x0084, 1, 1, 0, 1 },
+ .ls_det_clr = { 0x0088, 1, 1, 0, 1 },
+ .utmi_ls = { 0x00c0, 17, 16, 0, 1 },
+ .utmi_hstdet = { 0x00c0, 19, 19, 0, 1 }
+ }
+ },
+ },
+ { /* sentinel */ }
+};
+
static const struct rockchip_usb2phy_cfg rv1108_phy_cfgs[] = {
{
.reg = 0x100,
@@ -1553,6 +1617,7 @@ static const struct of_device_id rockchip_usb2phy_dt_match[] = {
{ .compatible = "rockchip,rk3328-usb2phy", .data = &rk3328_phy_cfgs },
{ .compatible = "rockchip,rk3366-usb2phy", .data = &rk3366_phy_cfgs },
{ .compatible = "rockchip,rk3399-usb2phy", .data = &rk3399_phy_cfgs },
+ { .compatible = "rockchip,rk3568-usb2phy", .data = &rk3568_phy_cfgs },
{ .compatible = "rockchip,rv1108-usb2phy", .data = &rv1108_phy_cfgs },
{}
};
--
2.25.1
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v3 2/8] dt-bindings: phy: phy-rockchip-inno-usb2: add rk3568 documentation
2021-12-15 21:02 ` [PATCH v3 2/8] dt-bindings: phy: phy-rockchip-inno-usb2: add rk3568 documentation Peter Geis
@ 2021-12-16 20:31 ` Rob Herring
0 siblings, 0 replies; 9+ messages in thread
From: Rob Herring @ 2021-12-16 20:31 UTC (permalink / raw)
To: Peter Geis
Cc: Kishon Vijay Abraham I, Johan Jonker, linux-arm-kernel, linux-phy,
Heiko Stuebner, Vinod Koul, Rob Herring, devicetree, linux-kernel,
linux-rockchip
On Wed, 15 Dec 2021 16:02:46 -0500, Peter Geis wrote:
> The rk3568 usb2phy node is a standalone node with a single muxed
> interrupt.
> Add documentation for it to phy-rockchip-inno-usb2.
>
> Signed-off-by: Peter Geis <pgwipeout@gmail.com>
> ---
>
> This was the best solution I've come up with for this.
> I avoided creating another binding since this is such a simple change to
> the actual driver and would likely require renaming the existing
> binding.
> I've tested that this correctly flags if the interrupts are missing or
> incorrectly assigned on both rk356x and rk3399.
>
> Thank you Johan and Rob for your constructive feedback.
>
> .../bindings/phy/phy-rockchip-inno-usb2.yaml | 44 +++++++++++++++++--
> 1 file changed, 40 insertions(+), 4 deletions(-)
>
Reviewed-by: Rob Herring <robh@kernel.org>
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v3 0/8] phy-rockchip-inno-usb2: support rk356x usb2phy
2021-12-15 21:02 [PATCH v3 0/8] phy-rockchip-inno-usb2: support rk356x usb2phy Peter Geis
` (4 preceding siblings ...)
2021-12-15 21:02 ` [PATCH v3 6/8] phy: phy-rockchip-inno-usb2: add rk3568 support Peter Geis
@ 2021-12-23 11:25 ` Vinod Koul
2021-12-28 0:48 ` (subset) " Heiko Stuebner
6 siblings, 0 replies; 9+ messages in thread
From: Vinod Koul @ 2021-12-23 11:25 UTC (permalink / raw)
To: Peter Geis
Cc: Heiko Stuebner, linux-phy, devicetree, linux-arm-kernel,
linux-rockchip, linux-kernel, Michael Riesch, Johan Jonker,
Rob Herring, Ondrej Jirman
On 15-12-21, 16:02, Peter Geis wrote:
> Good Afternoon,
>
> This is my series to support the usb2 phy devices on the rk356x.
> The rk356x phy has a single muxed interrupt and has moved the usb2phy
> nodes out of the grf and into their own nodes.
> The phy needs to tie back into the grf for register control, similar to
> the rv1108.
> By moving the phys into their own nodes, they now have full
> #address_cells = 2 register addresses, but they still reside below the 32bit
> mmio range.
>
> This driver series only supports the host configuration for the rk356x.
> I have have tested it on the following:
> rk3566 - Pine64 Quartz64 Model A
> rk3399 - Pine64 Rockpro64
>
> Please provide feedback and comments as you see fit.
Applied patches 2-6 to phy-next
Thanks
--
~Vinod
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: (subset) [PATCH v3 0/8] phy-rockchip-inno-usb2: support rk356x usb2phy
2021-12-15 21:02 [PATCH v3 0/8] phy-rockchip-inno-usb2: support rk356x usb2phy Peter Geis
` (5 preceding siblings ...)
2021-12-23 11:25 ` [PATCH v3 0/8] phy-rockchip-inno-usb2: support rk356x usb2phy Vinod Koul
@ 2021-12-28 0:48 ` Heiko Stuebner
6 siblings, 0 replies; 9+ messages in thread
From: Heiko Stuebner @ 2021-12-28 0:48 UTC (permalink / raw)
To: Peter Geis
Cc: Heiko Stuebner, devicetree, linux-phy, linux-arm-kernel,
Johan Jonker, Ondrej Jirman, Michael Riesch, linux-rockchip,
Rob Herring, linux-kernel
On Wed, 15 Dec 2021 16:02:44 -0500, Peter Geis wrote:
> Good Afternoon,
>
> This is my series to support the usb2 phy devices on the rk356x.
> The rk356x phy has a single muxed interrupt and has moved the usb2phy
> nodes out of the grf and into their own nodes.
> The phy needs to tie back into the grf for register control, similar to
> the rv1108.
> By moving the phys into their own nodes, they now have full
> #address_cells = 2 register addresses, but they still reside below the 32bit
> mmio range.
>
> [...]
Applied, thanks!
[1/8] dt-bindings: soc: rockchip: add rk3568-usb2phy-grf
commit: 0c8662341dfdda1e0a59692e4d78ecb087f09da1
[7/8] arm64: dts: rockchip: add usb2 nodes to rk3568 device tree
commit: cca4da59db28cdd284d34835be9f109f37bf0803
[8/8] arm64: dts: rockchip: add Quartz64-A usb2 support
commit: 80d44c01e56943fcf9d0b5267ccfaa9487ac8067
Best regards,
--
Heiko Stuebner <heiko@sntech.de>
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2021-12-28 0:48 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-12-15 21:02 [PATCH v3 0/8] phy-rockchip-inno-usb2: support rk356x usb2phy Peter Geis
2021-12-15 21:02 ` [PATCH v3 2/8] dt-bindings: phy: phy-rockchip-inno-usb2: add rk3568 documentation Peter Geis
2021-12-16 20:31 ` Rob Herring
2021-12-15 21:02 ` [PATCH v3 3/8] phy: phy-rockchip-inno-usb2: support #address_cells = 2 Peter Geis
2021-12-15 21:02 ` [PATCH v3 4/8] phy: phy-rockchip-inno-usb2: support standalone phy nodes Peter Geis
2021-12-15 21:02 ` [PATCH v3 5/8] phy: phy-rockchip-inno-usb2: support muxed interrupts Peter Geis
2021-12-15 21:02 ` [PATCH v3 6/8] phy: phy-rockchip-inno-usb2: add rk3568 support Peter Geis
2021-12-23 11:25 ` [PATCH v3 0/8] phy-rockchip-inno-usb2: support rk356x usb2phy Vinod Koul
2021-12-28 0:48 ` (subset) " Heiko Stuebner
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).