* [PATCH 0/2] phy: usb: add support for bcm74110
@ 2025-03-27 18:56 justin.chen
2025-03-27 18:56 ` [PATCH 1/2] " justin.chen
2025-03-27 18:56 ` [PATCH 2/2] dt-bindings: phy: brcmstb-usb-phy: Add " justin.chen
0 siblings, 2 replies; 6+ messages in thread
From: justin.chen @ 2025-03-27 18:56 UTC (permalink / raw)
To: linux-arm-kernel, devicetree, linux-phy
Cc: rafal, alcooperx, bcm-kernel-feedback-list, florian.fainelli,
conor+dt, krzk+dt, robh, kishon, vkoul, Justin Chen
From: Justin Chen <justin.chen@broadcom.com>
bcm74110 adds a freerun utmi/ref clock that saves furether power during
suspend states. A tune is also necessary to pass USB compliance test.
Justin Chen (2):
phy: usb: add support for bcm74110
dt-bindings: phy: brcmstb-usb-phy: Add support for bcm74110
.../bindings/phy/brcm,brcmstb-usb-phy.yaml | 1 +
.../phy/broadcom/phy-brcm-usb-init-synopsys.c | 61 +++++++++++++++++++
drivers/phy/broadcom/phy-brcm-usb-init.h | 1 +
drivers/phy/broadcom/phy-brcm-usb.c | 14 +++++
4 files changed, 77 insertions(+)
--
2.34.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] phy: usb: add support for bcm74110
2025-03-27 18:56 [PATCH 0/2] phy: usb: add support for bcm74110 justin.chen
@ 2025-03-27 18:56 ` justin.chen
2025-03-31 16:56 ` Florian Fainelli
2025-03-27 18:56 ` [PATCH 2/2] dt-bindings: phy: brcmstb-usb-phy: Add " justin.chen
1 sibling, 1 reply; 6+ messages in thread
From: justin.chen @ 2025-03-27 18:56 UTC (permalink / raw)
To: linux-arm-kernel, devicetree, linux-phy
Cc: rafal, alcooperx, bcm-kernel-feedback-list, florian.fainelli,
conor+dt, krzk+dt, robh, kishon, vkoul, Justin Chen
From: Justin Chen <justin.chen@broadcom.com>
bcm74110 adds a freerun utmi/ref clock that saves further power during
suspend states. A tune is also necessary to pass USB compliance test.
Signed-off-by: Justin Chen <justin.chen@broadcom.com>
---
.../phy/broadcom/phy-brcm-usb-init-synopsys.c | 61 +++++++++++++++++++
drivers/phy/broadcom/phy-brcm-usb-init.h | 1 +
drivers/phy/broadcom/phy-brcm-usb.c | 14 +++++
3 files changed, 76 insertions(+)
diff --git a/drivers/phy/broadcom/phy-brcm-usb-init-synopsys.c b/drivers/phy/broadcom/phy-brcm-usb-init-synopsys.c
index dc452610934a..8a5ed50f2da0 100644
--- a/drivers/phy/broadcom/phy-brcm-usb-init-synopsys.c
+++ b/drivers/phy/broadcom/phy-brcm-usb-init-synopsys.c
@@ -43,6 +43,8 @@
#define USB_CTRL_SETUP_tca_drv_sel_MASK BIT(24)
#define USB_CTRL_SETUP_STRAP_IPP_SEL_MASK BIT(25)
#define USB_CTRL_USB_PM 0x04
+#define USB_CTRL_USB_PM_REF_S2_CLK_SWITCH_EN_MASK BIT(1)
+#define USB_CTRL_USB_PM_UTMI_S2_CLK_SWITCH_EN_MASK BIT(2)
#define USB_CTRL_USB_PM_XHC_S2_CLK_SWITCH_EN_MASK BIT(3)
#define USB_CTRL_USB_PM_XHC_PME_EN_MASK BIT(4)
#define USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK BIT(22)
@@ -61,6 +63,13 @@
#define USB_CTRL_CTLR_CSHCR_ctl_pme_en_MASK BIT(18)
#define USB_CTRL_P0_U2PHY_CFG1 0x68
#define USB_CTRL_P0_U2PHY_CFG1_COMMONONN_MASK BIT(10)
+#define USB_CTRL_P0_U2PHY_CFG2 0x6c
+#define USB_CTRL_P0_U2PHY_CFG2_TXVREFTUNE0_MASK GENMASK(20, 17)
+#define USB_CTRL_P0_U2PHY_CFG2_TXVREFTUNE0_SHIFT 17
+#define USB_CTRL_P0_U2PHY_CFG2_TXRESTUNE0_MASK GENMASK(24, 23)
+#define USB_CTRL_P0_U2PHY_CFG2_TXRESTUNE0_SHIFT 23
+#define USB_CTRL_P0_U2PHY_CFG2_TXPREEMPAMPTUNE0_MASK GENMASK(26, 25)
+#define USB_CTRL_P0_U2PHY_CFG2_TXPREEMPAMPTUNE0_SHIFT 25
/* Register definitions for the USB_PHY block in 7211b0 */
#define USB_PHY_PLL_CTL 0x00
@@ -369,6 +378,42 @@ static void usb_uninit_common_7216(struct brcm_usb_init_params *params)
}
}
+static void usb_init_common_74110(struct brcm_usb_init_params *params)
+{
+ void __iomem *ctrl = params->regs[BRCM_REGS_CTRL];
+ u32 reg;
+
+ reg = brcm_usb_readl(USB_CTRL_REG(ctrl, USB_PM));
+ reg &= ~(USB_CTRL_MASK(USB_PM, REF_S2_CLK_SWITCH_EN) |
+ USB_CTRL_MASK(USB_PM, UTMI_S2_CLK_SWITCH_EN));
+ brcm_usb_writel(reg, USB_CTRL_REG(ctrl, USB_PM));
+
+ usb_init_common_7216(params);
+
+ reg = brcm_usb_readl(USB_CTRL_REG(ctrl, P0_U2PHY_CFG2));
+ reg &= ~(USB_CTRL_P0_U2PHY_CFG2_TXVREFTUNE0_MASK |
+ USB_CTRL_P0_U2PHY_CFG2_TXRESTUNE0_MASK |
+ USB_CTRL_P0_U2PHY_CFG2_TXPREEMPAMPTUNE0_MASK);
+ reg |= (0x6 << USB_CTRL_P0_U2PHY_CFG2_TXVREFTUNE0_SHIFT) |
+ (0x3 << USB_CTRL_P0_U2PHY_CFG2_TXRESTUNE0_SHIFT) |
+ (0x2 << USB_CTRL_P0_U2PHY_CFG2_TXPREEMPAMPTUNE0_SHIFT);
+ brcm_usb_writel(reg, USB_CTRL_REG(ctrl, P0_U2PHY_CFG2));
+}
+
+static void usb_uninit_common_74110(struct brcm_usb_init_params *params)
+{
+ void __iomem *ctrl = params->regs[BRCM_REGS_CTRL];
+ u32 reg;
+
+ if (params->wake_enabled) {
+ reg = brcm_usb_readl(USB_CTRL_REG(ctrl, USB_PM));
+ reg |= (USB_CTRL_MASK(USB_PM, REF_S2_CLK_SWITCH_EN) |
+ USB_CTRL_MASK(USB_PM, UTMI_S2_CLK_SWITCH_EN));
+ brcm_usb_writel(reg, USB_CTRL_REG(ctrl, USB_PM));
+ }
+ usb_uninit_common_7216(params);
+}
+
static void usb_uninit_common_7211b0(struct brcm_usb_init_params *params)
{
void __iomem *ctrl = params->regs[BRCM_REGS_CTRL];
@@ -426,6 +471,16 @@ static void usb_set_dual_select(struct brcm_usb_init_params *params)
brcm_usb_writel(reg, USB_CTRL_REG(ctrl, USB_DEVICE_CTL1));
}
+static const struct brcm_usb_init_ops bcm74110_ops = {
+ .init_ipp = usb_init_ipp,
+ .init_common = usb_init_common_74110,
+ .init_xhci = usb_init_xhci,
+ .uninit_common = usb_uninit_common_74110,
+ .uninit_xhci = usb_uninit_xhci,
+ .get_dual_select = usb_get_dual_select,
+ .set_dual_select = usb_set_dual_select,
+};
+
static const struct brcm_usb_init_ops bcm7216_ops = {
.init_ipp = usb_init_ipp,
.init_common = usb_init_common_7216,
@@ -446,6 +501,12 @@ static const struct brcm_usb_init_ops bcm7211b0_ops = {
.set_dual_select = usb_set_dual_select,
};
+void brcm_usb_dvr_init_74110(struct brcm_usb_init_params *params)
+{
+ params->family_name = "74110";
+ params->ops = &bcm74110_ops;
+}
+
void brcm_usb_dvr_init_7216(struct brcm_usb_init_params *params)
{
diff --git a/drivers/phy/broadcom/phy-brcm-usb-init.h b/drivers/phy/broadcom/phy-brcm-usb-init.h
index c1a88f5cd4cd..4c7be78d0b14 100644
--- a/drivers/phy/broadcom/phy-brcm-usb-init.h
+++ b/drivers/phy/broadcom/phy-brcm-usb-init.h
@@ -72,6 +72,7 @@ struct brcm_usb_init_params {
bool wake_enabled;
};
+void brcm_usb_dvr_init_74110(struct brcm_usb_init_params *params);
void brcm_usb_dvr_init_4908(struct brcm_usb_init_params *params);
void brcm_usb_dvr_init_7445(struct brcm_usb_init_params *params);
void brcm_usb_dvr_init_7216(struct brcm_usb_init_params *params);
diff --git a/drivers/phy/broadcom/phy-brcm-usb.c b/drivers/phy/broadcom/phy-brcm-usb.c
index 6362ca5b7fb6..0666864c2f77 100644
--- a/drivers/phy/broadcom/phy-brcm-usb.c
+++ b/drivers/phy/broadcom/phy-brcm-usb.c
@@ -283,6 +283,16 @@ static const struct attribute_group brcm_usb_phy_group = {
.attrs = brcm_usb_phy_attrs,
};
+static const struct match_chip_info chip_info_74110 = {
+ .init_func = &brcm_usb_dvr_init_74110,
+ .required_regs = {
+ BRCM_REGS_CTRL,
+ BRCM_REGS_XHCI_EC,
+ BRCM_REGS_XHCI_GBL,
+ -1,
+ },
+};
+
static const struct match_chip_info chip_info_4908 = {
.init_func = &brcm_usb_dvr_init_4908,
.required_regs = {
@@ -325,6 +335,10 @@ static const struct match_chip_info chip_info_7445 = {
};
static const struct of_device_id brcm_usb_dt_ids[] = {
+ {
+ .compatible = "brcm,bcm74110-usb-phy",
+ .data = &chip_info_74110,
+ },
{
.compatible = "brcm,bcm4908-usb-phy",
.data = &chip_info_4908,
--
2.34.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] dt-bindings: phy: brcmstb-usb-phy: Add support for bcm74110
2025-03-27 18:56 [PATCH 0/2] phy: usb: add support for bcm74110 justin.chen
2025-03-27 18:56 ` [PATCH 1/2] " justin.chen
@ 2025-03-27 18:56 ` justin.chen
2025-03-28 8:23 ` Krzysztof Kozlowski
2025-03-31 20:14 ` Rafał Miłecki
1 sibling, 2 replies; 6+ messages in thread
From: justin.chen @ 2025-03-27 18:56 UTC (permalink / raw)
To: linux-arm-kernel, devicetree, linux-phy
Cc: rafal, alcooperx, bcm-kernel-feedback-list, florian.fainelli,
conor+dt, krzk+dt, robh, kishon, vkoul, Justin Chen
From: Justin Chen <justin.chen@broadcom.com>
bcm74110 brcmstb usb phy adds further power savings during suspend
states.
Signed-off-by: Justin Chen <justin.chen@broadcom.com>
---
Documentation/devicetree/bindings/phy/brcm,brcmstb-usb-phy.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/phy/brcm,brcmstb-usb-phy.yaml b/Documentation/devicetree/bindings/phy/brcm,brcmstb-usb-phy.yaml
index 580fbe37b37f..2e668935b454 100644
--- a/Documentation/devicetree/bindings/phy/brcm,brcmstb-usb-phy.yaml
+++ b/Documentation/devicetree/bindings/phy/brcm,brcmstb-usb-phy.yaml
@@ -15,6 +15,7 @@ maintainers:
properties:
compatible:
enum:
+ - brcm,bcm74110-usb-phy
- brcm,bcm4908-usb-phy
- brcm,bcm7211-usb-phy
- brcm,bcm7216-usb-phy
--
2.34.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] dt-bindings: phy: brcmstb-usb-phy: Add support for bcm74110
2025-03-27 18:56 ` [PATCH 2/2] dt-bindings: phy: brcmstb-usb-phy: Add " justin.chen
@ 2025-03-28 8:23 ` Krzysztof Kozlowski
2025-03-31 20:14 ` Rafał Miłecki
1 sibling, 0 replies; 6+ messages in thread
From: Krzysztof Kozlowski @ 2025-03-28 8:23 UTC (permalink / raw)
To: justin.chen
Cc: linux-arm-kernel, devicetree, linux-phy, rafal, alcooperx,
bcm-kernel-feedback-list, florian.fainelli, conor+dt, krzk+dt,
robh, kishon, vkoul
On Thu, Mar 27, 2025 at 11:56:23AM -0700, justin.chen@broadcom.com wrote:
> From: Justin Chen <justin.chen@broadcom.com>
>
> bcm74110 brcmstb usb phy adds further power savings during suspend
> states.
>
> Signed-off-by: Justin Chen <justin.chen@broadcom.com>
Please order the patches as stated in DT submitting patches.
> ---
> Documentation/devicetree/bindings/phy/brcm,brcmstb-usb-phy.yaml | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/Documentation/devicetree/bindings/phy/brcm,brcmstb-usb-phy.yaml b/Documentation/devicetree/bindings/phy/brcm,brcmstb-usb-phy.yaml
> index 580fbe37b37f..2e668935b454 100644
> --- a/Documentation/devicetree/bindings/phy/brcm,brcmstb-usb-phy.yaml
> +++ b/Documentation/devicetree/bindings/phy/brcm,brcmstb-usb-phy.yaml
> @@ -15,6 +15,7 @@ maintainers:
> properties:
> compatible:
> enum:
> + - brcm,bcm74110-usb-phy
> - brcm,bcm4908-usb-phy
> - brcm,bcm7211-usb-phy
> - brcm,bcm7216-usb-phy
That's incomplete. Where are the updates for constraints? Look at entire
file, not just top 10 lines.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] phy: usb: add support for bcm74110
2025-03-27 18:56 ` [PATCH 1/2] " justin.chen
@ 2025-03-31 16:56 ` Florian Fainelli
0 siblings, 0 replies; 6+ messages in thread
From: Florian Fainelli @ 2025-03-31 16:56 UTC (permalink / raw)
To: justin.chen, linux-arm-kernel, devicetree, linux-phy
Cc: rafal, alcooperx, bcm-kernel-feedback-list, conor+dt, krzk+dt,
robh, kishon, vkoul
On 3/27/25 11:56, justin.chen@broadcom.com wrote:
> From: Justin Chen <justin.chen@broadcom.com>
>
> bcm74110 adds a freerun utmi/ref clock that saves further power during
> suspend states. A tune is also necessary to pass USB compliance test.
>
> Signed-off-by: Justin Chen <justin.chen@broadcom.com>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
--
Florian
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] dt-bindings: phy: brcmstb-usb-phy: Add support for bcm74110
2025-03-27 18:56 ` [PATCH 2/2] dt-bindings: phy: brcmstb-usb-phy: Add " justin.chen
2025-03-28 8:23 ` Krzysztof Kozlowski
@ 2025-03-31 20:14 ` Rafał Miłecki
1 sibling, 0 replies; 6+ messages in thread
From: Rafał Miłecki @ 2025-03-31 20:14 UTC (permalink / raw)
To: justin.chen
Cc: linux-arm-kernel, devicetree, linux-phy, alcooperx,
bcm-kernel-feedback-list, florian.fainelli, conor+dt, krzk+dt,
robh, kishon, vkoul
On 2025-03-27 19:56, justin.chen@broadcom.com wrote:
> From: Justin Chen <justin.chen@broadcom.com>
>
> bcm74110 brcmstb usb phy adds further power savings during suspend
> states.
>
> Signed-off-by: Justin Chen <justin.chen@broadcom.com>
> ---
> Documentation/devicetree/bindings/phy/brcm,brcmstb-usb-phy.yaml | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git
> a/Documentation/devicetree/bindings/phy/brcm,brcmstb-usb-phy.yaml
> b/Documentation/devicetree/bindings/phy/brcm,brcmstb-usb-phy.yaml
> index 580fbe37b37f..2e668935b454 100644
> --- a/Documentation/devicetree/bindings/phy/brcm,brcmstb-usb-phy.yaml
> +++ b/Documentation/devicetree/bindings/phy/brcm,brcmstb-usb-phy.yaml
> @@ -15,6 +15,7 @@ maintainers:
> properties:
> compatible:
> enum:
> + - brcm,bcm74110-usb-phy
> - brcm,bcm4908-usb-phy
> - brcm,bcm7211-usb-phy
> - brcm,bcm7216-usb-phy
Keeping those enum entires sorted would be nice for maintenance.
--
Rafał Miłecki
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-03-31 20:20 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-27 18:56 [PATCH 0/2] phy: usb: add support for bcm74110 justin.chen
2025-03-27 18:56 ` [PATCH 1/2] " justin.chen
2025-03-31 16:56 ` Florian Fainelli
2025-03-27 18:56 ` [PATCH 2/2] dt-bindings: phy: brcmstb-usb-phy: Add " justin.chen
2025-03-28 8:23 ` Krzysztof Kozlowski
2025-03-31 20:14 ` Rafał Miłecki
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).