From patchwork Sun Feb 21 16:26:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ye Li X-Patchwork-Id: 1444155 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.a=rsa-sha256 header.s=selector2 header.b=KsmfD0v4; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DmNNR4mkLz9rx6 for ; Thu, 25 Feb 2021 17:36:19 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id B222480200; Thu, 25 Feb 2021 07:36:06 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="KsmfD0v4"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 4254E801E9; Thu, 25 Feb 2021 07:36:04 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FORGED_SPF_HELO,MSGID_FROM_MTA_HEADER, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_PASS autolearn=no autolearn_force=no version=3.4.2 Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-am5eur02on061e.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe07::61e]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 57916801E9 for ; Thu, 25 Feb 2021 07:36:00 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=ye.li@nxp.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dYZPtzClQ9sopKLzPJjm5yzuZ3fUQXh4L37XS+TWDcIbWDFSMwRbDI/ZTtSdCDWOXloqXwCUD93Oh+r0pQJNy2ozP+L2U1GdAYkscChxc35eeW0riDPvCkY84c/UAT6IZ/eITdW2WAvRkjz7M97DQq8XsvxYPPJyb2j9F5zukDWDTXqvWm7QZ8qQ7pGCsQ0Gj4WGD+pZR4NajgOKwRBVMVQdOF+YcL3XBmhSPfP1G7YpolG0ODZ6YoO4NjUBhwzVOgLVX5ikwRosuoRIB4n9zt4o4WIkmtfEASs/HewCGvV0n9vgJmxBMD/cXXtpGbzMAJwW5QLbUspQtfqN80UIQA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UQLhAxn1QXKEduhCJkop5R6YAIaJKg4OJb7hOTthQaw=; b=GB2y+P06H1HbS0XC4mUSWewmHda8gHEatmZnhrfpluCdL6g3YKTP8aCo7NLIiYMaaLf6Efz1QJ7FaNYpc2p8XGySrg5HQAzVcprDMf6W4Va+ZKH664bzCus74xf1k5v62Ktnwlgy0v3nDiUW0zZqpph1yustZHO1AJivGhieC+aSWv2Y0ZFdd31I/Si47HQaf9evlu7B4lMuo1Jb4kHPbDBjyYfbZNHX/FogQ8mW+m6y1jZOD9+ANVPGUdc5n9p3YcnQ/E9uNgmxFNsqhyOPMT6xgRhdRuUALG4XUyYME3Mr5HDkVOdGMokJN97salcDCTKXaFZ+TPyZKNH7VPJqwA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UQLhAxn1QXKEduhCJkop5R6YAIaJKg4OJb7hOTthQaw=; b=KsmfD0v4PMCMjq1c1jcpvyxRzA2hd8JXGLPNzLYQbjxV6b52CP/j+t/701gII89IqBmmUBubav9DM7N2PNVRkNy1aq+Sdi66PythbhIOll7YBEH16DCQokZnAWPF17ECOErZsFigV5viwVQ5rqmP8Gdg1uX/65tWq3Z/bHs9dQw= Authentication-Results: denx.de; dkim=none (message not signed) header.d=none;denx.de; dmarc=none action=none header.from=nxp.com; Received: from VI1PR04MB4414.eurprd04.prod.outlook.com (2603:10a6:803:69::13) by VI1PR04MB6973.eurprd04.prod.outlook.com (2603:10a6:803:13d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3868.29; Thu, 25 Feb 2021 06:35:59 +0000 Received: from VI1PR04MB4414.eurprd04.prod.outlook.com ([fe80::181a:a4dd:a8f8:154e]) by VI1PR04MB4414.eurprd04.prod.outlook.com ([fe80::181a:a4dd:a8f8:154e%6]) with mapi id 15.20.3868.029; Thu, 25 Feb 2021 06:35:58 +0000 From: Ye Li To: sbabic@denx.de, u-boot@lists.denx.de, festevam@gmail.com, peng.fan@nxp.com Cc: uboot-imx@nxp.com Subject: [PATCH 1/4] phy: phy-imx8mq-usb: Add USB PHY driver for i.MX8MQ Date: Sun, 21 Feb 2021 08:26:21 -0800 Message-Id: <1613924784-63219-1-git-send-email-ye.li@nxp.com> X-Mailer: git-send-email 2.7.4 X-Originating-IP: [115.198.227.71] X-ClientProxiedBy: HK2PR0401CA0001.apcprd04.prod.outlook.com (2603:1096:202:2::11) To VI1PR04MB4414.eurprd04.prod.outlook.com (2603:10a6:803:69::13) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from ubuntu.localdomain (115.198.227.71) by HK2PR0401CA0001.apcprd04.prod.outlook.com (2603:1096:202:2::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.20.3868.27 via Frontend Transport; Thu, 25 Feb 2021 06:35:56 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 51bb5596-deef-4bf9-9502-08d8d9579c7a X-MS-TrafficTypeDiagnostic: VI1PR04MB6973: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2512; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: jDDFK6I+2Yy9qTMWOGJRDZ1lh6A+CWH8glu1BJ2QqhvnLmiaJE8+bAJOUM6rzrCcR8xWkFMwv881FekPkRBOnuvy/C/Jb4TRd9msfUavAoAWqSRIVS9yUEb3q2COV7W+ZHQ9SPOFfPNSktOrqW4uKhyuY2sEEJNwzqp0lIhfg+MF7iUiTQNvlYDveDxCcqeev/UqT5lIWdLlelmeVzQhxnsdNlk3I1da4FMkOCYgalgff3rVlFfCpcovESqUnbn5cUmLmZ1iJGRDg2qA3k4wKpJWkAJ/F65UlCLEKCe5UYzcsNIdBwXAAcVMo/DATizCAD5unBSoEUw9elR0UVxaum7EBnEsEoqqYQt9tCl9bau+2/uIC348V1yBur4F0p3ukLTBoac8ortqscehM8e7QkRvW4e5tOzW2b7O4Al6f8TlwomJXvSmFZHv3MIa5oIy0o6q3AbcsdUKkqSRBz+yX1DyCxQUkPHVfZIo+wEfWj9ak77TzjuUUxiGR1idcBCiTxjgKn2fQ+9GA68WbT2jFg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR04MB4414.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(136003)(376002)(396003)(39860400002)(346002)(366004)(86362001)(36756003)(6486002)(478600001)(83380400001)(8936002)(52116002)(4326008)(186003)(16526019)(2616005)(66556008)(6506007)(66946007)(2906002)(6666004)(8676002)(66476007)(44832011)(316002)(956004)(6512007)(26005)(6636002)(5660300002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: lWwPInDO5xpUg/Q8J/3oqapHu7IF1oozHSRzN179JVbVgCtVhbE9OE3OUFMpOxt/saRH1VKfsvot+roMFpEXVAolpY/DihoaCnj69ptDlJpYSIn/NLlXPGs0L7MMAjmHia03JTNP52Y3bGqymmQAE8w9sSVchYUM28gH6nHuaz0BkutC5VuytYaH8cJF7EDoaM4l0McCL1miEnIhbjLwh389j3+5Y0iFKtvx2eCVEWUq6WQXdLVH0ceuZLt+3xzy9mhINR/FbGYpqoLciiMu5k4GW7dnKfvFMG3fSxciCiSrsNB3t+haFxiMPCdeseP4F9cOmISPP1W8LxpQOXxIlQn5bZhWwTm4ItesZiE1ksdDAgM1EhVclXoFHzNCYSf3NkIxhVU4k6xYgdMdyhnon2FaZsThWg6Vtvd3QHTFILEPpglLPBQwRw33ohC0prsVY3iDPxP3gVFxiWjh40tAhmAe+lEQa+ed6kZS3fRRn99qKurIaEN2XJUOPwx6gdIt5LA7Fxyt4xXAzYxkX3zn7hfQpPWbQQqZsd1fRt6hztZHLKaSjbgWgtZa4J1nHZRuN8E5GchM4HIovCsFBK+FbW7q150x25OWZol986R5e+Ler9+hq+A83PKG5WPJXsKcGIdVxnpvHaeKjmHpWnLZeVDmKvQZpTPM5v6GPnsSJMixFVA2RbOIqYI1XeCCqYXzhzPUY0qxaSUKfZNa0chvMtMmqWeQPT3i6nwU+6BFjNW9rixsU1FNAEQJGNDSQVo4dmZ9kyYi/eh8mH0vyFkLw8keQ2N644wV75iyuTcJc+clGS5X3Wist8WaqivB5BoDIGXkVFCAYNbGW/fPvLI5ws9VcBo3+8POatOjIRBpCG3FIxWtrDRVXv55p8wyJZGIUa22olGYXmu9jyDI0aESBWibz5El2FGUE5JAMs4qWJVffTCuhU4CfmhX6yf3YbZOnjRGdkTh5sBW+VoPjyRAjOKo3Iy64wu+0EFAwTbe43mjhL8vPHiqDGuhJ5mHYhid3Kj/UF+gXJ4uw1uofIoppePokFRFQacOt4wLX977y8rcTWJz8xD49qAmI4TdlnwXrdoMloCPPkSs/QR6NkbqVxRK1Y1872Lj2aqDzeGkDGdnvvXFOz/ZTgJergygMwXfYblQd6oE3bJ6PhUjZhVoG8SS/c+XIZhS7PgMsIRftJrbSdfWDNYvvWFMi7q9Pp/IjAB4I96dgbwO3REFUt1hokQZ73ZjverWmO+khVXRTt0idGjF7VIpqxRXD6Tvew3IFtKmiWlEAhSo9ZUlrQrqcXlI7HN5//HY4VXhf9XWFl7Qzpi2f40XfmkkahLHK4jg X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 51bb5596-deef-4bf9-9502-08d8d9579c7a X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB4414.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2021 06:35:58.8014 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: CwGdMn036xuj3bVGAkMfVE6gqPS5L0z466q7VQseonqrLnCOgnhKQ7CntIzfx74k X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB6973 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.4 at phobos.denx.de X-Virus-Status: Clean Add the USB PHY driver for i.MX8MQ to work with DWC3 USB controller. Signed-off-by: Ye Li Reviewed-by: Patrick Wildt Tested-by: Patrick Wildt --- drivers/phy/Kconfig | 7 ++ drivers/phy/Makefile | 1 + drivers/phy/phy-imx8mq-usb.c | 197 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 205 insertions(+) create mode 100644 drivers/phy/phy-imx8mq-usb.c diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig index 008186a..09cb744 100644 --- a/drivers/phy/Kconfig +++ b/drivers/phy/Kconfig @@ -268,5 +268,12 @@ config PHY_MTK_TPHY multi-ports is first version, otherwise is second veriosn, so you can easily distinguish them by banks layout. +config PHY_IMX8MQ_USB + bool "NXP i.MX8MQ USB PHY Driver" + depends on PHY + depends on IMX8MQ + help + Support the USB3.0 PHY in NXP i.MX8MQ SoC + source "drivers/phy/rockchip/Kconfig" endmenu diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile index 3c4a673..c6ad3b1 100644 --- a/drivers/phy/Makefile +++ b/drivers/phy/Makefile @@ -31,3 +31,4 @@ obj-$(CONFIG_MT7620_USB_PHY) += mt7620-usb-phy.o obj-$(CONFIG_MT76X8_USB_PHY) += mt76x8-usb-phy.o obj-$(CONFIG_PHY_DA8XX_USB) += phy-da8xx-usb.o obj-$(CONFIG_PHY_MTK_TPHY) += phy-mtk-tphy.o +obj-$(CONFIG_PHY_IMX8MQ_USB) += phy-imx8mq-usb.o diff --git a/drivers/phy/phy-imx8mq-usb.c b/drivers/phy/phy-imx8mq-usb.c new file mode 100644 index 0000000..afbc7ad --- /dev/null +++ b/drivers/phy/phy-imx8mq-usb.c @@ -0,0 +1,197 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright 2021 NXP + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define PHY_CTRL0 0x0 +#define PHY_CTRL0_REF_SSP_EN BIT(2) +#define PHY_CTRL0_FSEL_MASK GENMASK(10, 5) +#define PHY_CTRL0_FSEL_24M 0x2a +#define PHY_CTRL0_FSEL_100M 0x27 +#define PHY_CTRL0_SSC_RANGE_MASK GENMASK(23, 21) +#define PHY_CTRL0_SSC_RANGE_4003PPM (0x2 << 21) + +#define PHY_CTRL1 0x4 +#define PHY_CTRL1_RESET BIT(0) +#define PHY_CTRL1_COMMONONN BIT(1) +#define PHY_CTRL1_ATERESET BIT(3) +#define PHY_CTRL1_DCDENB BIT(17) +#define PHY_CTRL1_CHRGSEL BIT(18) +#define PHY_CTRL1_VDATSRCENB0 BIT(19) +#define PHY_CTRL1_VDATDETENB0 BIT(20) + +#define PHY_CTRL2 0x8 +#define PHY_CTRL2_TXENABLEN0 BIT(8) +#define PHY_CTRL2_OTG_DISABLE BIT(9) + +#define PHY_CTRL3 0xc +#define PHY_CTRL3_COMPDISTUNE_MASK GENMASK(2, 0) +#define PHY_CTRL3_TXPREEMP_TUNE_MASK GENMASK(16, 15) +#define PHY_CTRL3_TXPREEMP_TUNE_SHIFT 15 +#define PHY_CTRL3_TXRISE_TUNE_MASK GENMASK(21, 20) +#define PHY_CTRL3_TXRISE_TUNE_SHIFT 20 +/* 1111: +24% ... 0000: -6% step: 2% */ +#define PHY_CTRL3_TXVREF_TUNE_MASK GENMASK(25, 22) +#define PHY_CTRL3_TXVREF_TUNE_SHIFT 22 +#define PHY_CTRL3_TX_VBOOST_LEVEL_MASK GENMASK(31, 29) +#define PHY_CTRL3_TX_VBOOST_LEVEL_SHIFT 29 + +#define PHY_CTRL4 0x10 +#define PHY_CTRL4_PCS_TX_DEEMPH_3P5DB_MASK GENMASK(20, 15) +#define PHY_CTRL4_PCS_TX_DEEMPH_3P5DB_SHIFT 15 + +#define PHY_CTRL5 0x14 +#define PHY_CTRL5_DMPWD_OVERRIDE_SEL BIT(23) +#define PHY_CTRL5_DMPWD_OVERRIDE BIT(22) +#define PHY_CTRL5_DPPWD_OVERRIDE_SEL BIT(21) +#define PHY_CTRL5_DPPWD_OVERRIDE BIT(20) +#define PHY_CTRL5_PCS_TX_SWING_FULL_MASK GENMASK(6, 0) + +#define PHY_CTRL6 0x18 +#define PHY_CTRL6_RXTERM_OVERRIDE_SEL BIT(29) +#define PHY_CTRL6_ALT_CLK_EN BIT(1) +#define PHY_CTRL6_ALT_CLK_SEL BIT(0) + +#define PHY_STS0 0x40 +#define PHY_STS0_OTGSESSVLD BIT(7) +#define PHY_STS0_CHGDET BIT(4) +#define PHY_STS0_FSVPLUS BIT(3) +#define PHY_STS0_FSVMINUS BIT(2) + +struct imx8mq_usb_phy { +#if CONFIG_IS_ENABLED(CLK) + struct clk phy_clk; +#endif + void __iomem *base; +}; + +static const struct udevice_id imx8mq_usb_phy_of_match[] = { + { + .compatible = "fsl,imx8mq-usb-phy", + }, + {}, +}; + +static int imx8mq_usb_phy_init(struct phy *usb_phy) +{ + struct udevice *dev = usb_phy->dev; + struct imx8mq_usb_phy *imx_phy = dev_get_priv(dev); + u32 value; + + value = readl(imx_phy->base + PHY_CTRL1); + value &= ~(PHY_CTRL1_VDATSRCENB0 | PHY_CTRL1_VDATDETENB0 | + PHY_CTRL1_COMMONONN); + value |= PHY_CTRL1_RESET | PHY_CTRL1_ATERESET; + writel(value, imx_phy->base + PHY_CTRL1); + + value = readl(imx_phy->base + PHY_CTRL0); + value |= PHY_CTRL0_REF_SSP_EN; + value &= ~PHY_CTRL0_SSC_RANGE_MASK; + value |= PHY_CTRL0_SSC_RANGE_4003PPM; + writel(value, imx_phy->base + PHY_CTRL0); + + value = readl(imx_phy->base + PHY_CTRL2); + value |= PHY_CTRL2_TXENABLEN0; + writel(value, imx_phy->base + PHY_CTRL2); + + value = readl(imx_phy->base + PHY_CTRL1); + value &= ~(PHY_CTRL1_RESET | PHY_CTRL1_ATERESET); + writel(value, imx_phy->base + PHY_CTRL1); + + return 0; +} + +static int imx8mq_usb_phy_power_on(struct phy *usb_phy) +{ + struct udevice *dev = usb_phy->dev; + struct imx8mq_usb_phy *imx_phy = dev_get_priv(dev); + u32 value; + +#if CONFIG_IS_ENABLED(CLK) + int ret; + ret = clk_enable(&imx_phy->phy_clk); + if (ret) { + printf("Failed to enable usb phy clock\n"); + return ret; + } +#endif + + /* Disable rx term override */ + value = readl(imx_phy->base + PHY_CTRL6); + value &= ~PHY_CTRL6_RXTERM_OVERRIDE_SEL; + writel(value, imx_phy->base + PHY_CTRL6); + + return 0; +} + +static int imx8mq_usb_phy_power_off(struct phy *usb_phy) +{ + struct udevice *dev = usb_phy->dev; + struct imx8mq_usb_phy *imx_phy = dev_get_priv(dev); + u32 value; + + /* Override rx term to be 0 */ + value = readl(imx_phy->base + PHY_CTRL6); + value |= PHY_CTRL6_RXTERM_OVERRIDE_SEL; + writel(value, imx_phy->base + PHY_CTRL6); + +#if CONFIG_IS_ENABLED(CLK) + clk_disable(&imx_phy->phy_clk); +#endif + + return 0; +} + +static int imx8mq_usb_phy_exit(struct phy *usb_phy) +{ + return imx8mq_usb_phy_power_off(usb_phy); +} + +struct phy_ops imx8mq_usb_phy_ops = { + .init = imx8mq_usb_phy_init, + .power_on = imx8mq_usb_phy_power_on, + .power_off = imx8mq_usb_phy_power_off, + .exit = imx8mq_usb_phy_exit, +}; + +int imx8mq_usb_phy_probe(struct udevice *dev) +{ + struct imx8mq_usb_phy *priv = dev_get_priv(dev); + + priv->base = dev_read_addr_ptr(dev); + + if (!priv->base) + return -EINVAL; + +#if CONFIG_IS_ENABLED(CLK) + int ret; + + /* Assigned clock already set clock */ + ret = clk_get_by_name(dev, "phy", &priv->phy_clk); + if (ret) { + printf("Failed to get usb phy clock\n"); + return ret; + } +#endif + + return 0; +} + +U_BOOT_DRIVER(nxp_imx8mq_usb_phy) = { + .name = "nxp_imx8mq_usb_phy", + .id = UCLASS_PHY, + .of_match = imx8mq_usb_phy_of_match, + .probe = imx8mq_usb_phy_probe, + .ops = &imx8mq_usb_phy_ops, + .priv_auto = sizeof(struct imx8mq_usb_phy), +};