Promote Hikey 970 USB phy out of staging
Subsystems (4)
v3 cover Promote Hikey 970 USB phy out of staging
Hi Vinod/Rob,
This series moves the Hikey 970 USB PHY driver out of staging.
The 3 initial patches address the issues pointed by Vinod:
patch 1 change the logic to use GENMASK and FIELD_GET/FIELD_PREP macros. It also places all hexadecimal values in lowercase;
patch 2 add a delay inside the retry logic;
patch 3 changes a function to return a boolean.
The 4th patch is actually identical to the patch I sent previously:
it just moves the driver to drivers/phy and add a blank line at the yaml driver:
rename drivers/staging/hikey9xx/phy-hi3670-usb3.yaml => Documentation/devicetree/bindings/phy/hisilicon,hi3670-usb3.yaml (99%)
rename drivers/{staging/hikey9xx => phy/hisilicon}/phy-hi3670-usb3.c (100%)In order to make this series easier to review, I'm submitting it with --no-merges. This way, you can check the driver and DT bindings as a hole while reviewing the last patch.
-
v3:
- no changes on patches 1-2 nor at phy-hi3670-usb3.c;
- yaml renamed to: hisilicon,hi3670-usb3.yaml
- Added a blank line after maintainers at hisilicon,hi3670-usb3.yaml
Mauro Carvalho Chehab (4):
staging: hikey9xx: phy-hi3670-usb3.c: use bitfield macros
staging: hikey9xx: phy-hi3670-usb3.c: adjust retry logic
staging: hikey9xx: phy-hi3670-usb3.c: hi3670_is_abbclk_seleted()
returns bool
phy: phy-hi3670-usb3: move driver from staging into phy
.../bindings/phy/phy-hi3670-usb3.yaml | 72 ++ MAINTAINERS | 9 +- drivers/phy/hisilicon/Kconfig | 10 + drivers/phy/hisilicon/Makefile | 1 + drivers/phy/hisilicon/phy-hi3670-usb3.c | 668 +++++++++++++++++ drivers/staging/hikey9xx/Kconfig | 11 - drivers/staging/hikey9xx/Makefile | 2 - drivers/staging/hikey9xx/phy-hi3670-usb3.c | 671 ------------------ drivers/staging/hikey9xx/phy-hi3670-usb3.yaml | 72 -- 9 files changed, 759 insertions(+), 757 deletions(-) create mode 100644 Documentation/devicetree/bindings/phy/phy-hi3670-usb3.yaml create mode 100644 drivers/phy/hisilicon/phy-hi3670-usb3.c delete mode 100644 drivers/staging/hikey9xx/phy-hi3670-usb3.c delete mode 100644 drivers/staging/hikey9xx/phy-hi3670-usb3.yaml
Signature · 1 line
2.29.2
PATCH v3 1/4 staging: hikey9xx: phy-hi3670-usb3.c: use bitfield macros
Cleanup the bitfield macros by using FIELD_PREP() and GENMASK().
While here, place all hexadecimal values in lowercase.
--- drivers/staging/hikey9xx/phy-hi3670-usb3.c | 61 ++++++++++------------ 1 file changed, 28 insertions(+), 33 deletions(-)
drivers/staging/hikey9xx/phy-hi3670-usb3.c +28 -33
@@ -8,6 +8,7 @@* Authors: Yu Chen <[email protected]> */ +#include <linux/bitfield.h> #include <linux/clk.h> #include <linux/kernel.h> #include <linux/mfd/syscon.h>
@@ -41,15 +42,15 @@#define SC_CLK_USB3PHY_3MUX1_SEL BIT(25)#define USB3OTG_CTRL0 (0x00) -#define USB3OTG_CTRL3 (0x0C) +#define USB3OTG_CTRL3 (0x0c)#define USB3OTG_CTRL4 (0x10)#define USB3OTG_CTRL5 (0x14) -#define USB3OTG_CTRL7 (0x1C) +#define USB3OTG_CTRL7 (0x1c)#define USB_MISC_CFG50 (0x50)#define USB_MISC_CFG54 (0x54)#define USB_MISC_CFG58 (0x58) -#define USB_MISC_CFG5C (0x5C) -#define USB_MISC_CFGA0 (0xA0) +#define USB_MISC_CFG5C (0x5c) +#define USB_MISC_CFGA0 (0xa0)#define TCA_CLK_RST (0x200)#define TCA_INTR_EN (0x204)#define TCA_INTR_STS (0x208)
@@ -66,14 +67,14 @@#define CTRL5_USB2_SIDDQ BIT(0) -#define CTRL7_USB2_REFCLKSEL_MASK (3 << 3) -#define CTRL7_USB2_REFCLKSEL_ABB (3 << 3) -#define CTRL7_USB2_REFCLKSEL_PAD (2 << 3) +#define CTRL7_USB2_REFCLKSEL_MASK GENMASK(4, 3) +#define CTRL7_USB2_REFCLKSEL_ABB (BIT(4) | BIT(3)) +#define CTRL7_USB2_REFCLKSEL_PAD BIT(4)#define CFG50_USB3_PHY_TEST_POWERDOWN BIT(23) -#define CFG54_USB31PHY_CR_ADDR_MASK (0xFFFF) -#define CFG54_USB31PHY_CR_ADDR_SHIFT (16) +#define CFG54_USB31PHY_CR_ADDR_MASK GENMASK(31, 16) +#define CFG54_USB3PHY_REF_USE_PAD BIT(12)#define CFG54_PHY0_PMA_PWR_STABLE BIT(11)#define CFG54_PHY0_PCS_PWR_STABLE BIT(9)
@@ -84,8 +85,7 @@#define CFG54_USB31PHY_CR_CLK BIT(2)#define CFG54_USB3_PHY0_ANA_PWR_EN BIT(1) -#define CFG58_USB31PHY_CR_DATA_MASK (0xFFFF) -#define CFG58_USB31PHY_CR_DATA_RD_START (16) +#define CFG58_USB31PHY_CR_DATA_MASK GENMASK(31, 16)#define CFG5C_USB3_PHY0_SS_MPLLA_SSC_EN BIT(1)
@@ -102,20 +102,20 @@#define CLK_RST_SUSPEND_CLK_EN BIT(0)#define GCFG_ROLE_HSTDEV BIT(4) -#define GCFG_OP_MODE (3 << 0) +#define GCFG_OP_MODE GENMASK(1, 0)#define GCFG_OP_MODE_CTRL_SYNC_MODE BIT(0)#define TCPC_VALID BIT(4)#define TCPC_LOW_POWER_EN BIT(3) -#define TCPC_MUX_CONTROL_MASK (3 << 0) +#define TCPC_MUX_CONTROL_MASK GENMASK(1, 0)#define TCPC_MUX_CONTROL_USB31 BIT(0)#define SYSMODE_CFG_TYPEC_DISABLE BIT(3) -#define VBUS_CTRL_POWERPRESENT_OVERRD (3 << 2) -#define VBUS_CTRL_VBUSVALID_OVERRD (3 << 0) +#define VBUS_CTRL_POWERPRESENT_OVERRD GENMASK(3, 2) +#define VBUS_CTRL_VBUSVALID_OVERRD GENMASK(1, 0) -#define KIRIN970_USB_DEFAULT_PHY_PARAM (0xFDFEE4) +#define KIRIN970_USB_DEFAULT_PHY_PARAM (0xfdfee4)#define KIRIN970_USB_DEFAULT_PHY_VBOOST (0x5)#define TX_VBOOST_LVL_REG (0xf)
@@ -162,16 +162,14 @@ static int hi3670_phy_cr_set_sel(struct regmap *usb31misc)static int hi3670_phy_cr_start (struct regmap *usb31misc,int direction) { -int ret; +int ret, reg;if (direction) - ret =regmap_update_bits (usb31misc,USB_MISC_CFG54 , -CFG54_USB31PHY_CR_WR_EN , -CFG54_USB31PHY_CR_WR_EN ); + reg =CFG54_USB31PHY_CR_WR_EN ;else - ret =regmap_update_bits (usb31misc,USB_MISC_CFG54 , -CFG54_USB31PHY_CR_RD_EN , -CFG54_USB31PHY_CR_RD_EN ); + reg =CFG54_USB31PHY_CR_RD_EN ; + + ret =regmap_update_bits (usb31misc,USB_MISC_CFG54 , reg, reg);if (ret)return ret;
@@ -180,10 +178,8 @@ static int hi3670_phy_cr_start(struct regmap *usb31misc, int direction)if (ret)return ret; - ret =regmap_update_bits (usb31misc,USB_MISC_CFG54 , -CFG54_USB31PHY_CR_RD_EN |CFG54_USB31PHY_CR_WR_EN ,0 ); - -return ret; +return regmap_update_bits (usb31misc,USB_MISC_CFG54 , +CFG54_USB31PHY_CR_RD_EN |CFG54_USB31PHY_CR_WR_EN ,0 ); }static int hi3670_phy_cr_wait_ack (struct regmap *usb31misc)
@@ -216,9 +212,9 @@ static int hi3670_phy_cr_set_addr(struct regmap *usb31misc, u32 addr)if (ret)return ret; - reg &= ~(CFG54_USB31PHY_CR_ADDR_MASK <<CFG54_USB31PHY_CR_ADDR_SHIFT ); - reg |= ((addr &CFG54_USB31PHY_CR_ADDR_MASK ) <<CFG54_USB31PHY_CR_ADDR_SHIFT ); - ret =regmap_write (usb31misc,USB_MISC_CFG54 , reg); + reg =FIELD_PREP (CFG54_USB31PHY_CR_ADDR_MASK , addr); + ret =regmap_update_bits (usb31misc,USB_MISC_CFG54 , +CFG54_USB31PHY_CR_ADDR_MASK , reg);return ret; }
@@ -255,8 +251,7 @@ static int hi3670_phy_cr_read(struct regmap *usb31misc, u32 addr, u32 *val)if (ret)return ret; - *val = (reg >>CFG58_USB31PHY_CR_DATA_RD_START ) & -CFG58_USB31PHY_CR_DATA_MASK ; + *val =FIELD_GET (CFG58_USB31PHY_CR_DATA_MASK , reg);return 0 ; }
@@ -281,7 +276,7 @@ static int hi3670_phy_cr_write(struct regmap *usb31misc, u32 addr, u32 val)return ret; ret =regmap_write (usb31misc,USB_MISC_CFG58 , - val &CFG58_USB31PHY_CR_DATA_MASK ); +FIELD_PREP (CFG58_USB31PHY_CR_DATA_MASK , val));if (ret)return ret;
Signature · 1 line
2.29.2
PATCH v3 2/4 staging: hikey9xx: phy-hi3670-usb3.c: adjust retry logic
In reply to Mauro Carvalho ChehabInstead of running a loop up to 100k times, add a small delay inside it, running it up to 10 times, waiting up to 100-200 us.
It should be noticed that I don't have the datasheet for this PHY. So, not sure if this time will cover all situations.
--- drivers/staging/hikey9xx/phy-hi3670-usb3.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/staging/hikey9xx/phy-hi3670-usb3.c +3 -1
@@ -185,7 +185,7 @@ static int hi3670_phy_cr_start(struct regmap *usb31misc, int direction)static int hi3670_phy_cr_wait_ack (struct regmap *usb31misc) {u32 reg; -int retry =100000 ; +int retry =10 ;int ret;while (retry-- >0 ) {
@@ -198,6 +198,8 @@ static int hi3670_phy_cr_wait_ack(struct regmap *usb31misc) ret =hi3670_phy_cr_clk (usb31misc);if (ret)return ret; + +usleep_range (10 ,20 ); }return -ETIMEDOUT ;
Signature · 1 line
2.29.2
PATCH v3 3/4 staging: hikey9xx: phy-hi3670-usb3.c: hi3670_is_abbclk_seleted() returns bool
In reply to Mauro Carvalho ChehabInstead of using 1/0 for true/false, change the type to boolean and change the returned value.
--- drivers/staging/hikey9xx/phy-hi3670-usb3.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/staging/hikey9xx/phy-hi3670-usb3.c +5 -5
@@ -326,24 +326,24 @@ static int hi3670_phy_set_params(struct hi3670_priv *priv)return ret; } -static int hi3670_is_abbclk_seleted (struct hi3670_priv *priv) +static bool hi3670_is_abbclk_seleted (struct hi3670_priv *priv) {u32 reg;if (!priv->sctrl) {dev_err (priv->dev,"priv->sctrl is null!\n" ); -return 1 ; +return true; }if (regmap_read (priv->sctrl,SCTRL_SCDEEPSLEEPED , ®)) {dev_err (priv->dev,"SCTRL_SCDEEPSLEEPED read failed!\n" ); -return 1 ; +return true; }if ((reg &USB_CLK_SELECTED ) ==0 ) -return 1 ; +return true; -return 0 ; +return false; }static int hi3670_config_phy_clock (struct hi3670_priv *priv)
Signature · 1 line
2.29.2
PATCH v3 4/4 phy: phy-hi3670-usb3: move driver from staging into phy
In reply to Mauro Carvalho ChehabThe phy USB3 driver for Hisilicon 970 (hi3670) is ready for mainstream. Mode it from staging into the main driver's phy/ directory.
--- .../bindings/phy/phy-hi3670-usb3.yaml | 72 ++ MAINTAINERS | 9 +- drivers/phy/hisilicon/Kconfig | 10 + drivers/phy/hisilicon/Makefile | 1 + drivers/phy/hisilicon/phy-hi3670-usb3.c | 668 ++++++++++++++++++ drivers/staging/hikey9xx/Kconfig | 11 - drivers/staging/hikey9xx/Makefile | 2 - drivers/staging/hikey9xx/phy-hi3670-usb3.c | 668 ------------------ drivers/staging/hikey9xx/phy-hi3670-usb3.yaml | 72 -- 9 files changed, 759 insertions(+), 754 deletions(-) create mode 100644 Documentation/devicetree/bindings/phy/phy-hi3670-usb3.yaml create mode 100644 drivers/phy/hisilicon/phy-hi3670-usb3.c delete mode 100644 drivers/staging/hikey9xx/phy-hi3670-usb3.c delete mode 100644 drivers/staging/hikey9xx/phy-hi3670-usb3.yaml
Documentation/devicetree/bindings/phy/phy-hi3670-usb3.yaml new file +72 -0
@@ -0,0 +1,72 @@ +# SPDX-License-Identifier: GPL-2.0 +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/phy/hisilicon,hi3670-usb3.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Hisilicon Kirin970 USB PHY + +maintainers: + - Mauro Carvalho Chehab <[email protected]> +description: |+ + Bindings for USB3 PHY on HiSilicon Kirin 970. + +properties: + compatible: + const: hisilicon,hi3670-usb-phy + + "#phy-cells": + const: 0 + + hisilicon,pericrg-syscon: + $ref: '/schemas/types.yaml#/definitions/phandle' + description: phandle of syscon used to control iso refclk. + + hisilicon,pctrl-syscon: + $ref: '/schemas/types.yaml#/definitions/phandle' + description: phandle of syscon used to control usb tcxo. + + hisilicon,sctrl-syscon: + $ref: '/schemas/types.yaml#/definitions/phandle' + description: phandle of syscon used to control phy deep sleep. + + hisilicon,eye-diagram-param: + $ref: /schemas/types.yaml#/definitions/uint32 + description: Eye diagram for phy. + + hisilicon,tx-vboost-lvl: + $ref: /schemas/types.yaml#/definitions/uint32 + description: TX level vboost for phy. + +required: + - compatible + - hisilicon,pericrg-syscon + - hisilicon,pctrl-syscon + - hisilicon,sctrl-syscon + - hisilicon,eye-diagram-param + - hisilicon,tx-vboost-lvl + - "#phy-cells" + +additionalProperties: false + +examples: + - | + bus { + #address-cells = <2>; + #size-cells = <2>; + + usb3_otg_bc: usb3_otg_bc@ff200000 { + compatible = "syscon", "simple-mfd"; + reg = <0x0 0xff200000 0x0 0x1000>; + + usb_phy { + compatible = "hisilicon,hi3670-usb-phy"; + #phy-cells = <0>; + hisilicon,pericrg-syscon = <&crg_ctrl>; + hisilicon,pctrl-syscon = <&pctrl>; + hisilicon,sctrl-syscon = <&sctrl>; + hisilicon,eye-diagram-param = <0xfdfee4>; + hisilicon,tx-vboost-lvl = <0x5>; + }; + }; + };
MAINTAINERS +8 -1
@@ -18088,7 +18088,7 @@ L: [email protected] S: Maintained F: drivers/usb/roles/intel-xhci-usb-role-switch.c -USB IP DRIVER FOR HISILICON KIRIN +USB IP DRIVER FOR HISILICON KIRIN 960 M: Yu Chen <[email protected]> M: Binghui Wang <[email protected]> L: [email protected]
@@ -18096,6 +18096,13 @@ S: Maintained F: Documentation/devicetree/bindings/phy/hisilicon,hi3660-usb3.yaml F: drivers/phy/hisilicon/phy-hi3660-usb3.c +USB IP DRIVER FOR HISILICON KIRIN 970 +M: Mauro Carvalho Chehab <[email protected]> +L: [email protected] +S: Maintained +F: Documentation/devicetree/bindings/phy/hisilicon,kirin970-usb3.yaml +F: drivers/phy/hisilicon/phy-kirin970-usb3.c + USB ISP116X DRIVER M: Olav Kongas <[email protected]> L: [email protected]
drivers/phy/hisilicon/Kconfig +10 -0
@@ -23,6 +23,16 @@ config PHY_HI3660_USB To compile this driver as a module, choose M here. +config PHY_HI3670_USB + tristate "hi3670 USB PHY support" + depends on (ARCH_HISI && ARM64) || COMPILE_TEST + select GENERIC_PHY + select MFD_SYSCON + help + Enable this to support the HISILICON HI3670 USB PHY. + + To compile this driver as a module, choose M here. + config PHY_HISTB_COMBPHY tristate "HiSilicon STB SoCs COMBPHY support" depends on (ARCH_HISI && ARM64) || COMPILE_TEST
drivers/phy/hisilicon/Makefile +1 -0
@@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only obj-$(CONFIG_PHY_HI6220_USB) += phy-hi6220-usb.o obj-$(CONFIG_PHY_HI3660_USB) += phy-hi3660-usb3.o +obj-$(CONFIG_PHY_HI3670_USB) += phy-hi3670-usb3.o obj-$(CONFIG_PHY_HISTB_COMBPHY) += phy-histb-combphy.o obj-$(CONFIG_PHY_HISI_INNO_USB2) += phy-hisi-inno-usb2.o obj-$(CONFIG_PHY_HIX5HD2_SATA) += phy-hix5hd2-sata.o
drivers/phy/hisilicon/phy-hi3670-usb3.c new file +668 -0
668 lines not on this page · raw message
drivers/staging/hikey9xx/Kconfig +0 -11
@@ -1,16 +1,5 @@ # SPDX-License-Identifier: GPL-2.0 -# to be placed at drivers/phy -config PHY_HI3670_USB - tristate "hi3670 USB PHY support" - depends on (ARCH_HISI && ARM64) || COMPILE_TEST - select GENERIC_PHY - select MFD_SYSCON - help - Enable this to support the HISILICON HI3670 USB PHY. - - To compile this driver as a module, choose M here. - # to be placed at drivers/spmi config SPMI_HISI3670 tristate "Hisilicon 3670 SPMI Controller"
drivers/staging/hikey9xx/Makefile +0 -2
@@ -1,7 +1,5 @@ # SPDX-License-Identifier: GPL-2.0 -obj-$(CONFIG_PHY_HI3670_USB) += phy-hi3670-usb3.o - obj-$(CONFIG_SPMI_HISI3670) += hisi-spmi-controller.o obj-$(CONFIG_MFD_HI6421_SPMI) += hi6421-spmi-pmic.o obj-$(CONFIG_REGULATOR_HI6421V600) += hi6421v600-regulator.o
drivers/staging/hikey9xx/phy-hi3670-usb3.c deleted +0 -668
668 lines not on this page · raw message
drivers/staging/hikey9xx/phy-hi3670-usb3.yaml deleted +0 -72
72 lines not on this page · raw message
Signature · 1 line
2.29.2
Re: [PATCH v3 4/4] phy: phy-hi3670-usb3: move driver from staging into phy
Quoted 3 lines · Mauro Carvalho Chehab
The phy USB3 driver for Hisilicon 970 (hi3670) is ready for mainstream. Mode it from staging into the main driver's phy/ directory.
[]
Documentation/devicetree/bindings/phy/phy-hi3670-usb3.yaml
Quoted 1 line
Documentation/devicetree/bindings/phy/phy-hi3670-usb3.yaml +0
-0
[]
Quoted 4 lines
+++
b/Documentation/devicetree/bindings/phy/phy-hi3670-usb3.yamlDocumentation/devicetree/bindings/phy/phy-hi3670-usb3.yaml +2
-0@@ -0,0 +1,72 @@ +# SPDX-License-Identifier: GPL-2.0 +%YAML 1.2
Documentation/devicetree/bindings/phy/phy-hi3670-usb3.yaml line 12
Quoted 10 lines
Documentation/devicetree/bindings/phy/phy-hi3670-usb3.yaml +10
-0+--- +$id: http://devicetree.org/schemas/phy/hisilicon,hi3670-usb3.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Hisilicon Kirin970 USB PHY + +maintainers: + - Mauro Carvalho Chehab <[email protected]> +description: |+ + Bindings for USB3 PHY on HiSilicon Kirin 970.
The cover letter for v3 says there's a blank link after maintainers:
here but not found...
Rob Herring
maintainerRe: [PATCH v3 4/4] phy: phy-hi3670-usb3: move driver from staging into phy
In reply to Mauro Carvalho ChehabQuoted 5 lines · Mauro Carvalho Chehab
The phy USB3 driver for Hisilicon 970 (hi3670) is ready for mainstream. Mode it from staging into the main driver's phy/ directory.
Signed-off-by Mauro Carvalho Chehab <[email protected]>
Quoted 16 lines
--- .../bindings/phy/phy-hi3670-usb3.yaml | 72 ++ MAINTAINERS | 9 +- drivers/phy/hisilicon/Kconfig | 10 + drivers/phy/hisilicon/Makefile | 1 + drivers/phy/hisilicon/phy-hi3670-usb3.c | 668 ++++++++++++++++++ drivers/staging/hikey9xx/Kconfig | 11 - drivers/staging/hikey9xx/Makefile | 2 - drivers/staging/hikey9xx/phy-hi3670-usb3.c | 668 ------------------ drivers/staging/hikey9xx/phy-hi3670-usb3.yaml | 72 -- 9 files changed, 759 insertions(+), 754 deletions(-) create mode 100644 Documentation/devicetree/bindings/phy/phy-hi3670-usb3.yaml create mode 100644 drivers/phy/hisilicon/phy-hi3670-usb3.c delete mode 100644 drivers/staging/hikey9xx/phy-hi3670-usb3.c delete mode 100644 drivers/staging/hikey9xx/phy-hi3670-usb3.yaml
My bot found errors running 'make dt_binding_check' on your patch:
yamllint warnings/errors:
dtschema/dtc warnings/errors:./Documentation/devicetree/bindings/phy/phy-hi3670-usb3.yaml: $id: relative path/filename doesn't match actual path or filename
expected: http://devicetree.org/schemas/phy/phy-hi3670-usb3.yaml#
See https://patchwork.ozlabs.org/patch/1426831
This check can fail if there are any dependencies. The base for a patch series is generally the most recent rc1.
If you already ran 'make dt_binding_check' and didn't see the above error(s), then make sure 'yamllint' is installed and dt-schema is up to date:
pip3 install dtschema --upgrade
Please check and re-submit.