All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chen-Yu Tsai <wens@csie.org>
To: Kishon Vijay Abraham I <kishon@ti.com>
Cc: Icenowy Zheng <icenowy@aosc.io>, Rob Herring <robh+dt@kernel.org>,
	Maxime Ripard <maxime.ripard@bootlin.com>,
	devicetree <devicetree@vger.kernel.org>,
	linux-arm-kernel <linux-arm-kernel@lists.infradead.org>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	linux-sunxi <linux-sunxi@googlegroups.com>
Subject: Re: [PATCH v2 7/9] phy: allwinner: add phy driver for USB3 PHY on Allwinner H6 SoC
Date: Mon, 9 Jul 2018 12:36:01 +0800	[thread overview]
Message-ID: <CAGb2v66=VBaLz+6dqu9T2YUqStutMNu50pCkQ4JGoyaEshUKyw@mail.gmail.com> (raw)
In-Reply-To: <438f1123-a619-61d0-36cd-d65c1430435a@ti.com>

On Mon, Jul 9, 2018 at 12:31 PM, Kishon Vijay Abraham I <kishon@ti.com> wrote:
> Hi,
>
> On Friday 06 July 2018 09:08 PM, Icenowy Zheng wrote:
>> Allwinner H6 SoC contains a USB3 PHY (with USB2 DP/DM lines also
>> controlled).
>>
>> Add a driver for it.
>>
>> The register operations in this driver is mainly extracted from the BSP
>> USB3 driver.
>>
>> Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
>> ---
>> Changes in v2:
>> - Splitted out the DT binding.
>>
>>  drivers/phy/allwinner/Kconfig           |  13 ++
>>  drivers/phy/allwinner/Makefile          |   1 +
>>  drivers/phy/allwinner/phy-sun50i-usb3.c | 194 ++++++++++++++++++++++++
>>  3 files changed, 208 insertions(+)
>>  create mode 100644 drivers/phy/allwinner/phy-sun50i-usb3.c
>>
>> diff --git a/drivers/phy/allwinner/Kconfig b/drivers/phy/allwinner/Kconfig
>> index cdc1e745ba47..cf373bcee034 100644
>> --- a/drivers/phy/allwinner/Kconfig
>> +++ b/drivers/phy/allwinner/Kconfig
>> @@ -29,3 +29,16 @@ config PHY_SUN9I_USB
>>         sun9i SoCs.
>>
>>         This driver controls each individual USB 2 host PHY.
>> +
>> +config PHY_SUN50I_USB3
>> +     tristate "Allwinner sun50i SoC USB3 PHY driver"
>> +     depends on ARCH_SUNXI && HAS_IOMEM && OF
>> +     depends on RESET_CONTROLLER
>> +     depends on USB_SUPPORT
>> +     select USB_COMMON
>
> Doesn't look like this driver depends on USB_SUPPORT.
>> +     select GENERIC_PHY
>> +     help
>> +       Enable this to support the USB3.0-capable transceiver that is
>> +       part of some Allwinner sun50i SoCs.
>> +
>> +       This driver controls each individual USB 2+3 host PHY combo.
>> diff --git a/drivers/phy/allwinner/Makefile b/drivers/phy/allwinner/Makefile
>> index 8605529c01a1..a8d01e9073c2 100644
>> --- a/drivers/phy/allwinner/Makefile
>> +++ b/drivers/phy/allwinner/Makefile
>> @@ -1,2 +1,3 @@
>>  obj-$(CONFIG_PHY_SUN4I_USB)          += phy-sun4i-usb.o
>>  obj-$(CONFIG_PHY_SUN9I_USB)          += phy-sun9i-usb.o
>> +obj-$(CONFIG_PHY_SUN50I_USB3)                += phy-sun50i-usb3.o
>> diff --git a/drivers/phy/allwinner/phy-sun50i-usb3.c b/drivers/phy/allwinner/phy-sun50i-usb3.c
>> new file mode 100644
>> index 000000000000..226c99c2d664
>> --- /dev/null
>> +++ b/drivers/phy/allwinner/phy-sun50i-usb3.c
>> @@ -0,0 +1,194 @@
>> +// SPDX-License-Identifier: GPL-2.0+
>> +/*
>> + * Allwinner sun50i(H6) USB 3.0 phy driver
>> + *
>> + * Copyright (C) 2017 Icenowy Zheng <icenowy@aosc.io>
>> + *
>> + * Based on phy-sun9i-usb.c, which is:
>> + *
>> + * Copyright (C) 2014-2015 Chen-Yu Tsai <wens@csie.org>
>> + *
>> + * Based on code from Allwinner BSP, which is:
>> + *
>> + * Copyright (c) 2010-2015 Allwinner Technology Co., Ltd.
>
> Does the BSP also use GPL license?

Yes they released it under the GPL license. It's still available here:

    https://github.com/allwinner-zh/linux-3.4-sunxi

But is now unmaintained.

ChenYu


>> + */
>> +
>> +#include <linux/clk.h>
>> +#include <linux/err.h>
>> +#include <linux/io.h>
>> +#include <linux/module.h>
>> +#include <linux/phy/phy.h>
>> +#include <linux/usb/of.h>
>> +#include <linux/platform_device.h>
>> +#include <linux/reset.h>
>> +
>> +/* Interface Status and Control Registers */
>> +#define SUNXI_ISCR                   0x00
>> +#define SUNXI_PIPE_CLOCK_CONTROL     0x14
>> +#define SUNXI_PHY_TUNE_LOW           0x18
>> +#define SUNXI_PHY_TUNE_HIGH          0x1c
>> +#define SUNXI_PHY_EXTERNAL_CONTROL   0x20
>> +
>> +/* USB2.0 Interface Status and Control Register */
>> +#define SUNXI_ISCR_FORCE_VBUS                (3 << 12)
>> +
>> +/* PIPE Clock Control Register */
>> +#define SUNXI_PCC_PIPE_CLK_OPEN              (1 << 6)
>> +
>> +/* PHY External Control Register */
>> +#define SUNXI_PEC_EXTERN_VBUS                (3 << 1)
>> +#define SUNXI_PEC_SSC_EN             (1 << 24)
>> +#define SUNXI_PEC_REF_SSP_EN         (1 << 26)
>> +
>> +/* PHY Tune High Register */
>> +#define SUNXI_TX_DEEMPH_3P5DB(n)     ((n) << 19)
>> +#define SUNXI_TX_DEEMPH_3P5DB_MASK   GENMASK(24, 19)
>> +#define SUNXI_TX_DEEMPH_6DB(n)               ((n) << 13)
>> +#define SUNXI_TX_DEEMPH_6GB_MASK     GENMASK(18, 13)
>> +#define SUNXI_TX_SWING_FULL(n)               ((n) << 6)
>> +#define SUNXI_TX_SWING_FULL_MASK     GENMASK(12, 6)
>> +#define SUNXI_LOS_BIAS(n)            ((n) << 3)
>> +#define SUNXI_LOS_BIAS_MASK          GENMASK(5, 3)
>> +#define SUNXI_TXVBOOSTLVL(n)         ((n) << 0)
>> +#define SUNXI_TXVBOOSTLVL_MASK               GENMASK(0, 2)
>> +
>> +struct sun50i_usb3_phy {
>> +     struct phy *phy;
>> +     void __iomem *regs;
>> +     struct reset_control *reset;
>> +     struct clk *clk;
>> +};
>> +
>> +static void sun50i_usb3_phy_open(struct sun50i_usb3_phy *phy)
>> +{
>> +     u32 val;
>> +
>> +     val = readl(phy->regs + SUNXI_PHY_EXTERNAL_CONTROL);
>> +     val |= SUNXI_PEC_EXTERN_VBUS;
>> +     val |= SUNXI_PEC_SSC_EN | SUNXI_PEC_REF_SSP_EN;
>> +     writel(val, phy->regs + SUNXI_PHY_EXTERNAL_CONTROL);
>> +
>> +     val = readl(phy->regs + SUNXI_PIPE_CLOCK_CONTROL);
>> +     val |= SUNXI_PCC_PIPE_CLK_OPEN;
>> +     writel(val, phy->regs + SUNXI_PIPE_CLOCK_CONTROL);
>> +
>> +     val = readl(phy->regs + SUNXI_ISCR);
>> +     val |= SUNXI_ISCR_FORCE_VBUS;
>> +     writel(val, phy->regs + SUNXI_ISCR);
>> +
>> +     /*
>> +      * All the magic numbers written to the PHY_TUNE_{LOW_HIGH}
>> +      * registers are directly taken from the BSP USB3 driver from
>> +      * Allwiner.
>
> %s/Allwiner/Allwinner/
>> +      */
>> +     writel(0x0047fc87, phy->regs + SUNXI_PHY_TUNE_LOW);
>
> PHY_TUNE_LOW should also configure individual parameters like how you've done
> below for PHY_TUNE_HIGH.
>
> Thanks
> Kishon

WARNING: multiple messages have this Message-ID (diff)
From: Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>
To: Kishon Vijay Abraham I <kishon-l0cyMroinI0@public.gmane.org>
Cc: Icenowy Zheng <icenowy-h8G6r0blFSE@public.gmane.org>,
	Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Maxime Ripard
	<maxime.ripard-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>,
	devicetree <devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	linux-arm-kernel
	<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
	linux-kernel
	<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	linux-sunxi <linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
Subject: Re: [PATCH v2 7/9] phy: allwinner: add phy driver for USB3 PHY on Allwinner H6 SoC
Date: Mon, 9 Jul 2018 12:36:01 +0800	[thread overview]
Message-ID: <CAGb2v66=VBaLz+6dqu9T2YUqStutMNu50pCkQ4JGoyaEshUKyw@mail.gmail.com> (raw)
In-Reply-To: <438f1123-a619-61d0-36cd-d65c1430435a-l0cyMroinI0@public.gmane.org>

On Mon, Jul 9, 2018 at 12:31 PM, Kishon Vijay Abraham I <kishon-l0cyMroinI0@public.gmane.org> wrote:
> Hi,
>
> On Friday 06 July 2018 09:08 PM, Icenowy Zheng wrote:
>> Allwinner H6 SoC contains a USB3 PHY (with USB2 DP/DM lines also
>> controlled).
>>
>> Add a driver for it.
>>
>> The register operations in this driver is mainly extracted from the BSP
>> USB3 driver.
>>
>> Signed-off-by: Icenowy Zheng <icenowy-h8G6r0blFSE@public.gmane.org>
>> ---
>> Changes in v2:
>> - Splitted out the DT binding.
>>
>>  drivers/phy/allwinner/Kconfig           |  13 ++
>>  drivers/phy/allwinner/Makefile          |   1 +
>>  drivers/phy/allwinner/phy-sun50i-usb3.c | 194 ++++++++++++++++++++++++
>>  3 files changed, 208 insertions(+)
>>  create mode 100644 drivers/phy/allwinner/phy-sun50i-usb3.c
>>
>> diff --git a/drivers/phy/allwinner/Kconfig b/drivers/phy/allwinner/Kconfig
>> index cdc1e745ba47..cf373bcee034 100644
>> --- a/drivers/phy/allwinner/Kconfig
>> +++ b/drivers/phy/allwinner/Kconfig
>> @@ -29,3 +29,16 @@ config PHY_SUN9I_USB
>>         sun9i SoCs.
>>
>>         This driver controls each individual USB 2 host PHY.
>> +
>> +config PHY_SUN50I_USB3
>> +     tristate "Allwinner sun50i SoC USB3 PHY driver"
>> +     depends on ARCH_SUNXI && HAS_IOMEM && OF
>> +     depends on RESET_CONTROLLER
>> +     depends on USB_SUPPORT
>> +     select USB_COMMON
>
> Doesn't look like this driver depends on USB_SUPPORT.
>> +     select GENERIC_PHY
>> +     help
>> +       Enable this to support the USB3.0-capable transceiver that is
>> +       part of some Allwinner sun50i SoCs.
>> +
>> +       This driver controls each individual USB 2+3 host PHY combo.
>> diff --git a/drivers/phy/allwinner/Makefile b/drivers/phy/allwinner/Makefile
>> index 8605529c01a1..a8d01e9073c2 100644
>> --- a/drivers/phy/allwinner/Makefile
>> +++ b/drivers/phy/allwinner/Makefile
>> @@ -1,2 +1,3 @@
>>  obj-$(CONFIG_PHY_SUN4I_USB)          += phy-sun4i-usb.o
>>  obj-$(CONFIG_PHY_SUN9I_USB)          += phy-sun9i-usb.o
>> +obj-$(CONFIG_PHY_SUN50I_USB3)                += phy-sun50i-usb3.o
>> diff --git a/drivers/phy/allwinner/phy-sun50i-usb3.c b/drivers/phy/allwinner/phy-sun50i-usb3.c
>> new file mode 100644
>> index 000000000000..226c99c2d664
>> --- /dev/null
>> +++ b/drivers/phy/allwinner/phy-sun50i-usb3.c
>> @@ -0,0 +1,194 @@
>> +// SPDX-License-Identifier: GPL-2.0+
>> +/*
>> + * Allwinner sun50i(H6) USB 3.0 phy driver
>> + *
>> + * Copyright (C) 2017 Icenowy Zheng <icenowy-h8G6r0blFSE@public.gmane.org>
>> + *
>> + * Based on phy-sun9i-usb.c, which is:
>> + *
>> + * Copyright (C) 2014-2015 Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>
>> + *
>> + * Based on code from Allwinner BSP, which is:
>> + *
>> + * Copyright (c) 2010-2015 Allwinner Technology Co., Ltd.
>
> Does the BSP also use GPL license?

Yes they released it under the GPL license. It's still available here:

    https://github.com/allwinner-zh/linux-3.4-sunxi

But is now unmaintained.

ChenYu


>> + */
>> +
>> +#include <linux/clk.h>
>> +#include <linux/err.h>
>> +#include <linux/io.h>
>> +#include <linux/module.h>
>> +#include <linux/phy/phy.h>
>> +#include <linux/usb/of.h>
>> +#include <linux/platform_device.h>
>> +#include <linux/reset.h>
>> +
>> +/* Interface Status and Control Registers */
>> +#define SUNXI_ISCR                   0x00
>> +#define SUNXI_PIPE_CLOCK_CONTROL     0x14
>> +#define SUNXI_PHY_TUNE_LOW           0x18
>> +#define SUNXI_PHY_TUNE_HIGH          0x1c
>> +#define SUNXI_PHY_EXTERNAL_CONTROL   0x20
>> +
>> +/* USB2.0 Interface Status and Control Register */
>> +#define SUNXI_ISCR_FORCE_VBUS                (3 << 12)
>> +
>> +/* PIPE Clock Control Register */
>> +#define SUNXI_PCC_PIPE_CLK_OPEN              (1 << 6)
>> +
>> +/* PHY External Control Register */
>> +#define SUNXI_PEC_EXTERN_VBUS                (3 << 1)
>> +#define SUNXI_PEC_SSC_EN             (1 << 24)
>> +#define SUNXI_PEC_REF_SSP_EN         (1 << 26)
>> +
>> +/* PHY Tune High Register */
>> +#define SUNXI_TX_DEEMPH_3P5DB(n)     ((n) << 19)
>> +#define SUNXI_TX_DEEMPH_3P5DB_MASK   GENMASK(24, 19)
>> +#define SUNXI_TX_DEEMPH_6DB(n)               ((n) << 13)
>> +#define SUNXI_TX_DEEMPH_6GB_MASK     GENMASK(18, 13)
>> +#define SUNXI_TX_SWING_FULL(n)               ((n) << 6)
>> +#define SUNXI_TX_SWING_FULL_MASK     GENMASK(12, 6)
>> +#define SUNXI_LOS_BIAS(n)            ((n) << 3)
>> +#define SUNXI_LOS_BIAS_MASK          GENMASK(5, 3)
>> +#define SUNXI_TXVBOOSTLVL(n)         ((n) << 0)
>> +#define SUNXI_TXVBOOSTLVL_MASK               GENMASK(0, 2)
>> +
>> +struct sun50i_usb3_phy {
>> +     struct phy *phy;
>> +     void __iomem *regs;
>> +     struct reset_control *reset;
>> +     struct clk *clk;
>> +};
>> +
>> +static void sun50i_usb3_phy_open(struct sun50i_usb3_phy *phy)
>> +{
>> +     u32 val;
>> +
>> +     val = readl(phy->regs + SUNXI_PHY_EXTERNAL_CONTROL);
>> +     val |= SUNXI_PEC_EXTERN_VBUS;
>> +     val |= SUNXI_PEC_SSC_EN | SUNXI_PEC_REF_SSP_EN;
>> +     writel(val, phy->regs + SUNXI_PHY_EXTERNAL_CONTROL);
>> +
>> +     val = readl(phy->regs + SUNXI_PIPE_CLOCK_CONTROL);
>> +     val |= SUNXI_PCC_PIPE_CLK_OPEN;
>> +     writel(val, phy->regs + SUNXI_PIPE_CLOCK_CONTROL);
>> +
>> +     val = readl(phy->regs + SUNXI_ISCR);
>> +     val |= SUNXI_ISCR_FORCE_VBUS;
>> +     writel(val, phy->regs + SUNXI_ISCR);
>> +
>> +     /*
>> +      * All the magic numbers written to the PHY_TUNE_{LOW_HIGH}
>> +      * registers are directly taken from the BSP USB3 driver from
>> +      * Allwiner.
>
> %s/Allwiner/Allwinner/
>> +      */
>> +     writel(0x0047fc87, phy->regs + SUNXI_PHY_TUNE_LOW);
>
> PHY_TUNE_LOW should also configure individual parameters like how you've done
> below for PHY_TUNE_HIGH.
>
> Thanks
> Kishon

WARNING: multiple messages have this Message-ID (diff)
From: wens@csie.org (Chen-Yu Tsai)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 7/9] phy: allwinner: add phy driver for USB3 PHY on Allwinner H6 SoC
Date: Mon, 9 Jul 2018 12:36:01 +0800	[thread overview]
Message-ID: <CAGb2v66=VBaLz+6dqu9T2YUqStutMNu50pCkQ4JGoyaEshUKyw@mail.gmail.com> (raw)
In-Reply-To: <438f1123-a619-61d0-36cd-d65c1430435a@ti.com>

On Mon, Jul 9, 2018 at 12:31 PM, Kishon Vijay Abraham I <kishon@ti.com> wrote:
> Hi,
>
> On Friday 06 July 2018 09:08 PM, Icenowy Zheng wrote:
>> Allwinner H6 SoC contains a USB3 PHY (with USB2 DP/DM lines also
>> controlled).
>>
>> Add a driver for it.
>>
>> The register operations in this driver is mainly extracted from the BSP
>> USB3 driver.
>>
>> Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
>> ---
>> Changes in v2:
>> - Splitted out the DT binding.
>>
>>  drivers/phy/allwinner/Kconfig           |  13 ++
>>  drivers/phy/allwinner/Makefile          |   1 +
>>  drivers/phy/allwinner/phy-sun50i-usb3.c | 194 ++++++++++++++++++++++++
>>  3 files changed, 208 insertions(+)
>>  create mode 100644 drivers/phy/allwinner/phy-sun50i-usb3.c
>>
>> diff --git a/drivers/phy/allwinner/Kconfig b/drivers/phy/allwinner/Kconfig
>> index cdc1e745ba47..cf373bcee034 100644
>> --- a/drivers/phy/allwinner/Kconfig
>> +++ b/drivers/phy/allwinner/Kconfig
>> @@ -29,3 +29,16 @@ config PHY_SUN9I_USB
>>         sun9i SoCs.
>>
>>         This driver controls each individual USB 2 host PHY.
>> +
>> +config PHY_SUN50I_USB3
>> +     tristate "Allwinner sun50i SoC USB3 PHY driver"
>> +     depends on ARCH_SUNXI && HAS_IOMEM && OF
>> +     depends on RESET_CONTROLLER
>> +     depends on USB_SUPPORT
>> +     select USB_COMMON
>
> Doesn't look like this driver depends on USB_SUPPORT.
>> +     select GENERIC_PHY
>> +     help
>> +       Enable this to support the USB3.0-capable transceiver that is
>> +       part of some Allwinner sun50i SoCs.
>> +
>> +       This driver controls each individual USB 2+3 host PHY combo.
>> diff --git a/drivers/phy/allwinner/Makefile b/drivers/phy/allwinner/Makefile
>> index 8605529c01a1..a8d01e9073c2 100644
>> --- a/drivers/phy/allwinner/Makefile
>> +++ b/drivers/phy/allwinner/Makefile
>> @@ -1,2 +1,3 @@
>>  obj-$(CONFIG_PHY_SUN4I_USB)          += phy-sun4i-usb.o
>>  obj-$(CONFIG_PHY_SUN9I_USB)          += phy-sun9i-usb.o
>> +obj-$(CONFIG_PHY_SUN50I_USB3)                += phy-sun50i-usb3.o
>> diff --git a/drivers/phy/allwinner/phy-sun50i-usb3.c b/drivers/phy/allwinner/phy-sun50i-usb3.c
>> new file mode 100644
>> index 000000000000..226c99c2d664
>> --- /dev/null
>> +++ b/drivers/phy/allwinner/phy-sun50i-usb3.c
>> @@ -0,0 +1,194 @@
>> +// SPDX-License-Identifier: GPL-2.0+
>> +/*
>> + * Allwinner sun50i(H6) USB 3.0 phy driver
>> + *
>> + * Copyright (C) 2017 Icenowy Zheng <icenowy@aosc.io>
>> + *
>> + * Based on phy-sun9i-usb.c, which is:
>> + *
>> + * Copyright (C) 2014-2015 Chen-Yu Tsai <wens@csie.org>
>> + *
>> + * Based on code from Allwinner BSP, which is:
>> + *
>> + * Copyright (c) 2010-2015 Allwinner Technology Co., Ltd.
>
> Does the BSP also use GPL license?

Yes they released it under the GPL license. It's still available here:

    https://github.com/allwinner-zh/linux-3.4-sunxi

But is now unmaintained.

ChenYu


>> + */
>> +
>> +#include <linux/clk.h>
>> +#include <linux/err.h>
>> +#include <linux/io.h>
>> +#include <linux/module.h>
>> +#include <linux/phy/phy.h>
>> +#include <linux/usb/of.h>
>> +#include <linux/platform_device.h>
>> +#include <linux/reset.h>
>> +
>> +/* Interface Status and Control Registers */
>> +#define SUNXI_ISCR                   0x00
>> +#define SUNXI_PIPE_CLOCK_CONTROL     0x14
>> +#define SUNXI_PHY_TUNE_LOW           0x18
>> +#define SUNXI_PHY_TUNE_HIGH          0x1c
>> +#define SUNXI_PHY_EXTERNAL_CONTROL   0x20
>> +
>> +/* USB2.0 Interface Status and Control Register */
>> +#define SUNXI_ISCR_FORCE_VBUS                (3 << 12)
>> +
>> +/* PIPE Clock Control Register */
>> +#define SUNXI_PCC_PIPE_CLK_OPEN              (1 << 6)
>> +
>> +/* PHY External Control Register */
>> +#define SUNXI_PEC_EXTERN_VBUS                (3 << 1)
>> +#define SUNXI_PEC_SSC_EN             (1 << 24)
>> +#define SUNXI_PEC_REF_SSP_EN         (1 << 26)
>> +
>> +/* PHY Tune High Register */
>> +#define SUNXI_TX_DEEMPH_3P5DB(n)     ((n) << 19)
>> +#define SUNXI_TX_DEEMPH_3P5DB_MASK   GENMASK(24, 19)
>> +#define SUNXI_TX_DEEMPH_6DB(n)               ((n) << 13)
>> +#define SUNXI_TX_DEEMPH_6GB_MASK     GENMASK(18, 13)
>> +#define SUNXI_TX_SWING_FULL(n)               ((n) << 6)
>> +#define SUNXI_TX_SWING_FULL_MASK     GENMASK(12, 6)
>> +#define SUNXI_LOS_BIAS(n)            ((n) << 3)
>> +#define SUNXI_LOS_BIAS_MASK          GENMASK(5, 3)
>> +#define SUNXI_TXVBOOSTLVL(n)         ((n) << 0)
>> +#define SUNXI_TXVBOOSTLVL_MASK               GENMASK(0, 2)
>> +
>> +struct sun50i_usb3_phy {
>> +     struct phy *phy;
>> +     void __iomem *regs;
>> +     struct reset_control *reset;
>> +     struct clk *clk;
>> +};
>> +
>> +static void sun50i_usb3_phy_open(struct sun50i_usb3_phy *phy)
>> +{
>> +     u32 val;
>> +
>> +     val = readl(phy->regs + SUNXI_PHY_EXTERNAL_CONTROL);
>> +     val |= SUNXI_PEC_EXTERN_VBUS;
>> +     val |= SUNXI_PEC_SSC_EN | SUNXI_PEC_REF_SSP_EN;
>> +     writel(val, phy->regs + SUNXI_PHY_EXTERNAL_CONTROL);
>> +
>> +     val = readl(phy->regs + SUNXI_PIPE_CLOCK_CONTROL);
>> +     val |= SUNXI_PCC_PIPE_CLK_OPEN;
>> +     writel(val, phy->regs + SUNXI_PIPE_CLOCK_CONTROL);
>> +
>> +     val = readl(phy->regs + SUNXI_ISCR);
>> +     val |= SUNXI_ISCR_FORCE_VBUS;
>> +     writel(val, phy->regs + SUNXI_ISCR);
>> +
>> +     /*
>> +      * All the magic numbers written to the PHY_TUNE_{LOW_HIGH}
>> +      * registers are directly taken from the BSP USB3 driver from
>> +      * Allwiner.
>
> %s/Allwiner/Allwinner/
>> +      */
>> +     writel(0x0047fc87, phy->regs + SUNXI_PHY_TUNE_LOW);
>
> PHY_TUNE_LOW should also configure individual parameters like how you've done
> below for PHY_TUNE_HIGH.
>
> Thanks
> Kishon

  reply	other threads:[~2018-07-09  4:36 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-06 15:37 [PATCH v2 0/9] Allwinner H6 USB support Icenowy Zheng
2018-07-06 15:37 ` Icenowy Zheng
2018-07-06 15:37 ` Icenowy Zheng
2018-07-06 15:37 ` [PATCH v2 1/9] phy: sun4i-usb: add support for missing USB PHY index Icenowy Zheng
2018-07-06 15:37   ` Icenowy Zheng
2018-07-06 15:37   ` Icenowy Zheng
2018-07-06 15:37 ` [PATCH v2 2/9] phy: sun4i-usb: add support for H6 USB2 PHY Icenowy Zheng
2018-07-06 15:37   ` Icenowy Zheng
2018-07-06 15:37   ` Icenowy Zheng
2018-07-06 15:37 ` [PATCH v2 3/9] arm64: allwinner: dts: h6: add USB2-related device nodes Icenowy Zheng
2018-07-06 15:37   ` Icenowy Zheng
2018-07-06 15:37   ` Icenowy Zheng
2018-07-07  3:31   ` [linux-sunxi] " Chen-Yu Tsai
2018-07-07  3:31     ` Chen-Yu Tsai
2018-07-07  3:31     ` Chen-Yu Tsai
2018-07-07  3:33     ` [linux-sunxi] " Icenowy Zheng
2018-07-07  3:33       ` Icenowy Zheng
2018-07-07  3:33       ` Icenowy Zheng
2018-07-06 15:38 ` [PATCH v2 4/9] arm64: allwinner: dts: h6: add USB Vbus regulator Icenowy Zheng
2018-07-06 15:38   ` Icenowy Zheng
2018-07-06 15:38   ` Icenowy Zheng
2018-07-06 15:38 ` [PATCH v2 5/9] arm64: allwinner: dts: h6: enable USB2 on Pine H64 Icenowy Zheng
2018-07-06 15:38   ` Icenowy Zheng
2018-07-06 15:38   ` Icenowy Zheng
2018-07-07  3:38   ` [linux-sunxi] " Chen-Yu Tsai
2018-07-07  3:38     ` Chen-Yu Tsai
2018-07-07  3:38     ` Chen-Yu Tsai
2018-07-06 15:38 ` [PATCH v2 6/9] dt-bindings: phy: add binding for Allwinner USB3 PHY Icenowy Zheng
2018-07-06 15:38   ` Icenowy Zheng
2018-07-06 15:38   ` Icenowy Zheng
2018-07-11 16:13   ` Rob Herring
2018-07-11 16:13     ` Rob Herring
2018-07-11 16:13     ` Rob Herring
2018-07-11 16:19     ` Icenowy Zheng
2018-07-11 16:19       ` Icenowy Zheng
2018-07-11 16:19       ` Icenowy Zheng
2018-07-11 17:39       ` Rob Herring
2018-07-11 17:39         ` Rob Herring
2018-07-11 17:39         ` Rob Herring
2018-07-06 15:38 ` [PATCH v2 7/9] phy: allwinner: add phy driver for USB3 PHY on Allwinner H6 SoC Icenowy Zheng
2018-07-06 15:38   ` Icenowy Zheng
2018-07-06 15:38   ` Icenowy Zheng
2018-07-09  4:31   ` Kishon Vijay Abraham I
2018-07-09  4:31     ` Kishon Vijay Abraham I
2018-07-09  4:31     ` 'Kishon Vijay Abraham I' via linux-sunxi
2018-07-09  4:36     ` Chen-Yu Tsai [this message]
2018-07-09  4:36       ` Chen-Yu Tsai
2018-07-09  4:36       ` Chen-Yu Tsai
2018-07-09  4:40     ` [linux-sunxi] " Icenowy Zheng
2018-07-09  4:40       ` Icenowy Zheng
2018-07-09  4:40       ` Icenowy Zheng
2018-07-06 15:38 ` [PATCH v2 8/9] arm64: allwinner: dts: h6: add USB3 device nodes Icenowy Zheng
2018-07-06 15:38   ` Icenowy Zheng
2018-07-06 15:38   ` Icenowy Zheng
2018-07-07  3:35   ` [linux-sunxi] " Chen-Yu Tsai
2018-07-07  3:35     ` Chen-Yu Tsai
2018-07-07  3:35     ` Chen-Yu Tsai
2018-07-07  3:37     ` [linux-sunxi] " Icenowy Zheng
2018-07-07  3:37       ` Icenowy Zheng
2018-07-07  3:37       ` Icenowy Zheng
2018-07-06 15:38 ` [PATCH v2 9/9] arm64: allwinner: dts: h6: enable USB3 port on Pine H64 Icenowy Zheng
2018-07-06 15:38   ` Icenowy Zheng
2018-07-06 15:38   ` Icenowy Zheng
2018-07-09  2:52 ` [linux-sunxi] [PATCH v2 0/9] Allwinner H6 USB support Chen-Yu Tsai
2018-07-09  2:52   ` Chen-Yu Tsai
2018-07-09  2:52   ` Chen-Yu Tsai

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAGb2v66=VBaLz+6dqu9T2YUqStutMNu50pCkQ4JGoyaEshUKyw@mail.gmail.com' \
    --to=wens@csie.org \
    --cc=devicetree@vger.kernel.org \
    --cc=icenowy@aosc.io \
    --cc=kishon@ti.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sunxi@googlegroups.com \
    --cc=maxime.ripard@bootlin.com \
    --cc=robh+dt@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.