
On 10/11/24 20:34, Marek Vasut wrote:
On 10/12/24 5:13 AM, Minda Chen wrote:
Add cdns USB3 wrapper driver. And cdns core driver also get dr mode from wrapper devcie dts node to make it is same with Starfive cdns USB Linux kernel driver, preparing for enable OF_UPSTREAM.
Signed-off-by: Minda Chen minda.chen@starfivetech.com
drivers/usb/cdns3/Kconfig | 7 ++ drivers/usb/cdns3/Makefile | 2 + drivers/usb/cdns3/cdns3-starfive.c | 183 +++++++++++++++++++++++++++++ drivers/usb/cdns3/core.c | 3 + 4 files changed, 195 insertions(+) create mode 100644 drivers/usb/cdns3/cdns3-starfive.c
diff --git a/drivers/usb/cdns3/Kconfig b/drivers/usb/cdns3/Kconfig index 35b61497d9c..6c9595c3c49 100644 --- a/drivers/usb/cdns3/Kconfig +++ b/drivers/usb/cdns3/Kconfig @@ -55,4 +55,11 @@ config USB_CDNS3_TI help Say 'Y' here if you are building for Texas Instruments platforms that contain Cadence USB3 controller core. E.g.:
J721e.
+config USB_CDNS3_STARFIVE + tristate "Cadence USB3 support on Starfive platforms" + default y if STARFIVE_JH7110 + help + Say 'Y' here if you are building for Starfive platforms + that contain Cadence USB3 controller core. E.g.: JH7110. endif
Keep the list sorted.
diff --git a/drivers/usb/cdns3/Makefile b/drivers/usb/cdns3/Makefile index 18d7190755d..03d1eadb2ff 100644 --- a/drivers/usb/cdns3/Makefile +++ b/drivers/usb/cdns3/Makefile @@ -9,3 +9,5 @@ cdns3-$(CONFIG_$(SPL_)USB_CDNS3_GADGET) += gadget.o ep0.o cdns3-$(CONFIG_$(SPL_)USB_CDNS3_HOST) += host.o obj-$(CONFIG_USB_CDNS3_TI) += cdns3-ti.o
+obj-$(CONFIG_USB_CDNS3_STARFIVE) += cdns3-starfive.o
Keep the list sorted.
diff --git a/drivers/usb/cdns3/cdns3-starfive.c b/drivers/usb/cdns3/ cdns3-starfive.c new file mode 100644 index 00000000000..fad05451c80 --- /dev/null +++ b/drivers/usb/cdns3/cdns3-starfive.c @@ -0,0 +1,183 @@ +// SPDX-License-Identifier: GPL-2.0 +/*
- cdns3-starfive.c - StarFive specific Glue layer for Cadence USB
Controller
- Copyright (C) 2024 StarFive Technology Co., Ltd.
- Author: Minda Chen minda.chen@starfivetech.com */
+#include <asm/io.h> +#include <clk.h> +#include <dm.h> +#include <dm/device_compat.h> +#include <linux/bitops.h> +#include <linux/usb/otg.h> +#include <reset.h> +#include <regmap.h> +#include <syscon.h> +#include <malloc.h>
+#include "core.h"
+#define USB_STRAP_HOST BIT(17) #define
USB_STRAP_DEVICE
+BIT(18) #define USB_STRAP_MASK GENMASK(18, 16)
+#define USB_SUSPENDM_HOST BIT(19) #define
USB_SUSPENDM_MASK
+BIT(19)
+#define USB_MISC_CFG_MASK GENMASK(23, 20) #define +USB_SUSPENDM_BYPS BIT(20) #define
USB_PLL_EN
+BIT(22) #define USB_REFCLK_MODE BIT(23)
+struct cdns_starfive { + struct udevice *dev; + struct regmap *stg_syscon; + struct reset_ctl_bulk resets; + struct clk_bulk clks; + u32 stg_usb_mode; + enum usb_dr_mode mode; +};
+static void cdns_mode_init(struct cdns_starfive *data, enum usb_dr_mode mode) +{ + unsigned int strap, suspendm;
+ regmap_update_bits(data->stg_syscon, data->stg_usb_mode, + USB_MISC_CFG_MASK, + USB_SUSPENDM_BYPS | USB_PLL_EN |
USB_REFCLK_MODE);
+ switch (mode) { + case USB_DR_MODE_HOST: + strap = USB_STRAP_HOST; + suspendm = USB_SUSPENDM_HOST; + break;
Drop the newline please.
+ case USB_DR_MODE_PERIPHERAL: + strap = USB_STRAP_DEVICE; + suspendm = 0; + break; + default: + return; + }
+ regmap_update_bits(data->stg_syscon, data->stg_usb_mode, + USB_SUSPENDM_MASK | USB_STRAP_MASK, + strap | suspendm); +}
[...]
diff --git a/drivers/usb/cdns3/core.c b/drivers/usb/cdns3/core.c index cbe06a9e7b6..9d0a56fd0e7 100644 --- a/drivers/usb/cdns3/core.c +++ b/drivers/usb/cdns3/core.c @@ -410,6 +410,9 @@ int cdns3_bind(struct udevice *parent) name = ofnode_get_name(node); dr_mode = usb_get_dr_mode(node); + if (dr_mode == USB_DR_MODE_UNKNOWN) + dr_mode = usb_get_dr_mode(dev_ofnode(parent));
Separate patch for core changes please.
Hi, Minda, can you send v6 with requested changes by Marek and drop patch 7/8 ("dts: starfive: Add JH7110 Cadence USB dts node")? Thanks! -E
I am busy working with another IC. Next month I will send a new version.