From nobody Sat Jun 13 04:18:14 2026 Received: from TYPPR03CU001.outbound.protection.outlook.com (mail-japaneastazon11022084.outbound.protection.outlook.com [52.101.126.84]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 827DC135A53; Mon, 11 May 2026 02:42:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.126.84 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778467372; cv=fail; b=jlAixu0zThTRzyRGV6GBUpWQGVEV3u4dtWf/YLnIXxgqpwWngLduyMTWFT9JNy4YKx4MrWI3/+Owp4vtupN6TunU5HyOM4Uu6Ns+CGMEfY2V1apEWTZ9v3j4ZPU4HPIO81PQfh/QVmdJrc6BXq8GWDzMbSXoeRm3rdoATbjWUjg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778467372; c=relaxed/simple; bh=GV4gXQx5jbxuCVjm8mUd/4KykdtSqek7FNlCVx+LzvA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=au/e90uQlCObQSDVRNYVLL4enUFKHxL1brsBXHPWOpVPx15JGWALDc3Nx6E/hlSMTbdcNXt6H3WvCwYNKGKPFDbHmHMEGzPjk9kPI6OVoPNdgM6zoA14IDo9qPeDmNamMy+/9uyrHVliYnkYe1b1YVB1hbYbtLbkloXMpM7vygE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com; spf=pass smtp.mailfrom=cixtech.com; arc=fail smtp.client-ip=52.101.126.84 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=cixtech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yAjupzD3TGBo93e4mhkHoajsXIKptP/e7H1L0IkXEK4WrxA07Hs3+mu+S+JF9vT87xIESdgtyauhCZIn4Rh2sD9GDvAOhUqo81Ri2SUfNb+t6bWQrNPe/jpHpI2HW/zUDfELEOuHXFgX5kdZ7VPEWZpmOgT+ftRdCg6JjDfRbuCJiUJoufvZtQ9po78NYtdEV11/ZK2QO5bs5JKmMd/rZyCMRpwVBxiVGn9admasGLxuoJXne/pHwCL+JNfZDzmzVkh8/YAn26goiAoD0WyEO0m/9vX40ItIF1WC6Wn4sx1FxPLjaj1WYq4UCbUh9tR+HjULF0GJN6hJCWBSIImqyg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=6rpRvIS476whQLIs8abcw5QkrNfW2cp6+S/j1nH8wJY=; b=vr9rArvwIIRSaVO5mJAdWswL/sVv3wXqKJWqKb1JQfOMSJ1tlbMK5PqhDUgGO6QrWcoS+R9jrw8DS2so/sOxEDzXGtXzzErSuFCozYgFKSXCoCgxZxW3kqSRXMMj7fSgxGGfRdmpXRzqu4MmbYYtD8/c1CA6jPqY6yTgNU1NfgMPAp50Wje6jR+lsbfuRPGwxdV59atzUK0QaX0S3g2mryTnlsFdHsB4Ar74hAh92FsfqlYxh1jCoiVbW/cZvHXdwPwRnvjDuAo7cXiB935To/TZKp3xQfjRbQBWmFif6zbJpwPE5HeTCBmzdRLKfTqIouC6pmFSEkX0jGIG8gYQlA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 222.71.101.198) smtp.rcpttodomain=arndb.de smtp.mailfrom=cixtech.com; dmarc=bestguesspass action=none header.from=cixtech.com; dkim=none (message not signed); arc=none (0) Received: from TY4PR01CA0023.jpnprd01.prod.outlook.com (2603:1096:405:2bf::16) by SEZPR06MB5000.apcprd06.prod.outlook.com (2603:1096:101:48::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9891.20; Mon, 11 May 2026 02:42:47 +0000 Received: from TY2PEPF0000AB85.apcprd03.prod.outlook.com (2603:1096:405:2bf:cafe::65) by TY4PR01CA0023.outlook.office365.com (2603:1096:405:2bf::16) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9891.22 via Frontend Transport; Mon, 11 May 2026 02:42:47 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 222.71.101.198) smtp.mailfrom=cixtech.com; dkim=none (message not signed) header.d=none;dmarc=bestguesspass action=none header.from=cixtech.com; Received-SPF: Pass (protection.outlook.com: domain of cixtech.com designates 222.71.101.198 as permitted sender) receiver=protection.outlook.com; client-ip=222.71.101.198; helo=smtprelay.cixcomputing.com; pr=C Received: from smtprelay.cixcomputing.com (222.71.101.198) by TY2PEPF0000AB85.mail.protection.outlook.com (10.167.253.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.13 via Frontend Transport; Mon, 11 May 2026 02:42:46 +0000 Received: from nchen-desktop (unknown [172.16.64.25]) by smtprelay.cixcomputing.com (Postfix) with ESMTPSA id 30D9B4126F92; Mon, 11 May 2026 10:42:45 +0800 (CST) From: Peter Chen To: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, gregkh@linuxfoundation.org, pawell@cadence.com, rogerq@kernel.org Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, cix-kernel-upstream@cixtech.com, linux-arm-kernel@lists.infradead.org, arnd@arndb.de, Peter Chen Subject: [PATCH 1/4] usb: cdns3: plat: Expose platform core driver as library Date: Mon, 11 May 2026 10:42:41 +0800 Message-ID: <20260511024244.981941-2-peter.chen@cixtech.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260511024244.981941-1-peter.chen@cixtech.com> References: <20260511024244.981941-1-peter.chen@cixtech.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY2PEPF0000AB85:EE_|SEZPR06MB5000:EE_ X-MS-Office365-Filtering-Correlation-Id: c29838a3-749c-4b73-7ed7-08deaf06fc17 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|82310400026|376014|7416014|36860700016|3023799003|56012099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: XdLR35iDm5ydSB/VruY+10R+cwvkXysdwmyTT1VCP4WkDcKvtEPA7ap2bBbtMyOsVF3pqdiKeR2nWpubFnVxbFyDpPrPTBlX58gZ34R9jDaaFXdqEqKv6NQDg2MfJkWRo3XWCaWb3351K1B1s9dBdEOLLxZekF+BCmC63dY8OtGZF5XLUXlGfKYJ0OZ/nNh/k3uNzMu+dvdEivFCSxbrOmjOtc2fbKw/in5MrXzXK4fBgDrwmVzXhFwCix6SA6YiZfebm+w9aHM4A90JaZZfqdDYcXUgrdcQo01Z9b6ONyNE6YK7H8DaSpPXXO40fJk13cU9Y/ytfBboPDoPOaYdDdaJ3YLR7+IVZ7zRSOt8658nKEqSpUpNOOhLgVN6+UUwMX+2f3Ly6ao2NOPO3bmxeZZRVBsOgk8nctjx1POj2B4ezXDjvEYnTPcbbJp28divJC3rD3g2qUn0lAFQ+kpzOKGFxlrhcgah/+SpfOvUKgvjWtkG6JIIOASdGk27CsrFmlEJTJRirD8UvCCCfUXP+iqmOIRlI13qDo/4IhuQXg0ndK0ebZQgs+TCff7374BWMG7ntbeZmwpqH0r4DnjqaIGAh6gw2jc8UbeCjFHg++6INmE8vw7zY5EntgCwI1+SL7DtbbOlsgEwDpJrQOquKhSgsOIEFk5cBS8o4pk1G1bruGliRSF/aDftetowDWZFdpNYYGb573VrRcgS2i0IFmY5PPdUQF0pqoOYugARg04= X-Forefront-Antispam-Report: CIP:222.71.101.198;CTRY:CN;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:smtprelay.cixcomputing.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(82310400026)(376014)(7416014)(36860700016)(3023799003)(56012099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: F9uWI+Q3OuFNpzoWZ1fwesAMmotw654tuCWI+KFP3FfTF9ASZMGHCdSMZBifa/9orbKRNnWQRQwTgdBt3xCzQdmckeziw24q2wwSqvCBUmIKTFzZczQjOhHGrKiEYe1YgXcz3bkHxnEYs2p8nhIEA31qpuU+DY0cBlDSUtS03PwgYwo/7f7K37TCPhGIcaqsyKwxiADDLv1LnGynXT6S3C5dk4/Ev8/vyNJxvnxQXg9BL6N3CoqC1LYiG+UulN23hWwzLl2UBBEhJQhY9lmpAnxjp7JKhg2fsohG6cfH8cxpWNhBk/v1VAHVzRHTumNHSIxBrlVH+Fs5ze4AbIfmMIm0SQ5vgosDlapNVUI5Oi7zO94O4b1+sfdwtyPK0Ik/x9HmUDkwPf/kgjfB0+QDq7kkAcfn4HXmEdtlpzgXPBQkTl/2jnWAR6hyT0OVMjCx X-OriginatorOrg: cixtech.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2026 02:42:46.3732 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c29838a3-749c-4b73-7ed7-08deaf06fc17 X-MS-Exchange-CrossTenant-Id: 0409f77a-e53d-4d23-943e-ccade7cb4811 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0409f77a-e53d-4d23-943e-ccade7cb4811;Ip=[222.71.101.198];Helo=[smtprelay.cixcomputing.com] X-MS-Exchange-CrossTenant-AuthSource: TY2PEPF0000AB85.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR06MB5000 Content-Type: text/plain; charset="utf-8" Split the Cadence USB3 platform probe/remove and PM paths into cdns3_core_probe(), cdns3_core_remove(), and exported runtime/system sleep helpers so SoC glue (e.g. Sky1) can instantiate the core on the same platform_device deterministically. Add glue.h documenting struct cdns3_probe_data and the public entry points. Signed-off-by: Peter Chen --- drivers/usb/cdns3/cdns3-plat.c | 138 ++++++++++++++++++++++----------- drivers/usb/cdns3/glue.h | 51 ++++++++++++ 2 files changed, 144 insertions(+), 45 deletions(-) create mode 100644 drivers/usb/cdns3/glue.h diff --git a/drivers/usb/cdns3/cdns3-plat.c b/drivers/usb/cdns3/cdns3-plat.c index 3fe3109a3688..2219cbff1c59 100644 --- a/drivers/usb/cdns3/cdns3-plat.c +++ b/drivers/usb/cdns3/cdns3-plat.c @@ -21,6 +21,7 @@ =20 #include "core.h" #include "gadget-export.h" +#include "glue.h" #include "host-export.h" #include "drd.h" =20 @@ -59,29 +60,21 @@ static int cdns3_plat_host_init(struct cdns *cdns) } =20 /** - * cdns3_plat_probe - probe for cdns3 core device - * @pdev: Pointer to cdns3 core platform device + * cdns3_core_probe - Initialize the Cadence USB3 platform core + * @data: Controller context and platform device supplied by the glue layer * * Returns 0 on success otherwise negative errno */ -static int cdns3_plat_probe(struct platform_device *pdev) +int cdns3_core_probe(const struct cdns3_probe_data *data) { + struct platform_device *pdev =3D data->pdev; struct device *dev =3D &pdev->dev; - struct resource *res; - struct cdns *cdns; + struct cdns *cdns =3D data->cdns; + struct resource *res; void __iomem *regs; int ret; =20 - cdns =3D devm_kzalloc(dev, sizeof(*cdns), GFP_KERNEL); - if (!cdns) - return -ENOMEM; - - cdns->dev =3D dev; - cdns->pdata =3D dev_get_platdata(dev); - if (cdns->pdata && cdns->pdata->override_apb_timeout) - cdns->override_apb_timeout =3D cdns->pdata->override_apb_timeout; - - platform_set_drvdata(pdev, cdns); + dev_set_drvdata(dev, cdns); =20 ret =3D platform_get_irq_byname(pdev, "host"); if (ret < 0) @@ -195,14 +188,41 @@ static int cdns3_plat_probe(struct platform_device *p= dev) =20 return ret; } +EXPORT_SYMBOL_GPL(cdns3_core_probe); =20 /** - * cdns3_plat_remove() - unbind drd driver and clean up - * @pdev: Pointer to Linux platform device + * cdns3_plat_probe - probe for cdns3 core device + * @pdev: Pointer to cdns3 core platform device + * + * Returns 0 on success otherwise negative errno */ -static void cdns3_plat_remove(struct platform_device *pdev) +static int cdns3_plat_probe(struct platform_device *pdev) +{ + struct device *dev =3D &pdev->dev; + struct cdns *cdns; + struct cdns3_probe_data probe_data; + + cdns =3D devm_kzalloc(dev, sizeof(*cdns), GFP_KERNEL); + if (!cdns) + return -ENOMEM; + + cdns->dev =3D dev; + cdns->pdata =3D dev_get_platdata(dev); + if (cdns->pdata && cdns->pdata->override_apb_timeout) + cdns->override_apb_timeout =3D cdns->pdata->override_apb_timeout; + + probe_data.cdns =3D cdns; + probe_data.pdev =3D pdev; + + return cdns3_core_probe(&probe_data); +} + +/** + * cdns3_core_remove - Tear down the Cadence USB3 platform core + * @cdns: Controller context previously initialized by cdns3_core_probe() + */ +void cdns3_core_remove(struct cdns *cdns) { - struct cdns *cdns =3D platform_get_drvdata(pdev); struct device *dev =3D cdns->dev; =20 pm_runtime_get_sync(dev); @@ -213,24 +233,30 @@ static void cdns3_plat_remove(struct platform_device = *pdev) phy_exit(cdns->usb2_phy); phy_exit(cdns->usb3_phy); } +EXPORT_SYMBOL_GPL(cdns3_core_remove); + +/** + * cdns3_plat_remove() - unbind drd driver and clean up + * @pdev: Pointer to Linux platform device + */ +static void cdns3_plat_remove(struct platform_device *pdev) +{ + cdns3_core_remove(platform_get_drvdata(pdev)); +} =20 #ifdef CONFIG_PM =20 -static int cdns3_set_platform_suspend(struct device *dev, - bool suspend, bool wakeup) +static int cdns3_set_platform_suspend(struct cdns *cdns, bool suspend, boo= l wakeup) { - struct cdns *cdns =3D dev_get_drvdata(dev); - int ret =3D 0; - if (cdns->pdata && cdns->pdata->platform_suspend) - ret =3D cdns->pdata->platform_suspend(dev, suspend, wakeup); + return cdns->pdata->platform_suspend(cdns->dev, suspend, wakeup); =20 - return ret; + return 0; } =20 -static int cdns3_controller_suspend(struct device *dev, pm_message_t msg) +static int cdns3_controller_suspend(struct cdns *cdns, pm_message_t msg) { - struct cdns *cdns =3D dev_get_drvdata(dev); + struct device *dev =3D cdns->dev; bool wakeup; unsigned long flags; =20 @@ -242,7 +268,7 @@ static int cdns3_controller_suspend(struct device *dev,= pm_message_t msg) else wakeup =3D device_may_wakeup(dev); =20 - cdns3_set_platform_suspend(cdns->dev, true, wakeup); + cdns3_set_platform_suspend(cdns, true, wakeup); set_phy_power_off(cdns); spin_lock_irqsave(&cdns->lock, flags); cdns->in_lpm =3D true; @@ -252,9 +278,8 @@ static int cdns3_controller_suspend(struct device *dev,= pm_message_t msg) return 0; } =20 -static int cdns3_controller_resume(struct device *dev, pm_message_t msg) +static int cdns3_controller_resume(struct cdns *cdns, pm_message_t msg) { - struct cdns *cdns =3D dev_get_drvdata(dev); int ret; unsigned long flags; =20 @@ -277,7 +302,7 @@ static int cdns3_controller_resume(struct device *dev, = pm_message_t msg) if (ret) return ret; =20 - cdns3_set_platform_suspend(cdns->dev, false, false); + cdns3_set_platform_suspend(cdns, false, false); =20 spin_lock_irqsave(&cdns->lock, flags); cdns_resume(cdns); @@ -293,26 +318,37 @@ static int cdns3_controller_resume(struct device *dev= , pm_message_t msg) return ret; } =20 -static int cdns3_plat_runtime_suspend(struct device *dev) +int cdns3_runtime_suspend(struct cdns *cdns) { - return cdns3_controller_suspend(dev, PMSG_AUTO_SUSPEND); + return cdns3_controller_suspend(cdns, PMSG_AUTO_SUSPEND); } +EXPORT_SYMBOL_GPL(cdns3_runtime_suspend); =20 -static int cdns3_plat_runtime_resume(struct device *dev) +int cdns3_runtime_resume(struct cdns *cdns) { - return cdns3_controller_resume(dev, PMSG_AUTO_RESUME); + return cdns3_controller_resume(cdns, PMSG_AUTO_RESUME); } +EXPORT_SYMBOL_GPL(cdns3_runtime_resume); =20 -#ifdef CONFIG_PM_SLEEP +static int cdns3_dev_runtime_suspend(struct device *dev) +{ + return cdns3_runtime_suspend(dev_get_drvdata(dev)); +} + +static int cdns3_dev_runtime_resume(struct device *dev) +{ + return cdns3_runtime_resume(dev_get_drvdata(dev)); +} =20 -static int cdns3_plat_suspend(struct device *dev) +#ifdef CONFIG_PM_SLEEP +int cdns3_pm_suspend(struct cdns *cdns) { - struct cdns *cdns =3D dev_get_drvdata(dev); + struct device *dev =3D cdns->dev; int ret; =20 cdns_suspend(cdns); =20 - ret =3D cdns3_controller_suspend(dev, PMSG_SUSPEND); + ret =3D cdns3_controller_suspend(cdns, PMSG_SUSPEND); if (ret) return ret; =20 @@ -321,18 +357,30 @@ static int cdns3_plat_suspend(struct device *dev) =20 return ret; } +EXPORT_SYMBOL_GPL(cdns3_pm_suspend); + +int cdns3_pm_resume(struct cdns *cdns) +{ + return cdns3_controller_resume(cdns, PMSG_RESUME); +} +EXPORT_SYMBOL_GPL(cdns3_pm_resume); + +static int cdns3_dev_pm_suspend(struct device *dev) +{ + return cdns3_pm_suspend(dev_get_drvdata(dev)); +} =20 -static int cdns3_plat_resume(struct device *dev) +static int cdns3_dev_pm_resume(struct device *dev) { - return cdns3_controller_resume(dev, PMSG_RESUME); + return cdns3_pm_resume(dev_get_drvdata(dev)); } #endif /* CONFIG_PM_SLEEP */ #endif /* CONFIG_PM */ =20 static const struct dev_pm_ops cdns3_pm_ops =3D { - SET_SYSTEM_SLEEP_PM_OPS(cdns3_plat_suspend, cdns3_plat_resume) - SET_RUNTIME_PM_OPS(cdns3_plat_runtime_suspend, - cdns3_plat_runtime_resume, NULL) + SET_SYSTEM_SLEEP_PM_OPS(cdns3_dev_pm_suspend, cdns3_dev_pm_resume) + SET_RUNTIME_PM_OPS(cdns3_dev_runtime_suspend, + cdns3_dev_runtime_resume, NULL) }; =20 #ifdef CONFIG_OF diff --git a/drivers/usb/cdns3/glue.h b/drivers/usb/cdns3/glue.h new file mode 100644 index 000000000000..67cd1073b555 --- /dev/null +++ b/drivers/usb/cdns3/glue.h @@ -0,0 +1,51 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * glue.h - Cadence USB3 DRD glue header + */ + +#ifndef __DRIVERS_USB_CDNS3_GLUE_H +#define __DRIVERS_USB_CDNS3_GLUE_H + +#include + +#include "core.h" + +struct platform_device; + +/** + * struct cdns3_probe_data - Parameters passed to cdns3_core_probe() + * @cdns: Cadence DRD controller context (allocated by the glue driver) + * @pdev: Platform device for resources and IRQs + */ +struct cdns3_probe_data { + struct cdns *cdns; + struct platform_device *pdev; +}; + +/** + * cdns3_core_probe - Initialize the Cadence USB3 platform core + * @data: Controller context and platform device supplied by the glue layer + * + * Performs resource mapping, PHY setup, cdns_init(), role setup, and runt= ime PM + * configuration for the standard platform binding of the Cadence USB3/USB= SSP DRD IP. + * + * Return: 0 on success, negative errno on failure + */ +int cdns3_core_probe(const struct cdns3_probe_data *data); + +/** + * cdns3_core_remove - Tear down the Cadence USB3 platform core + * @cdns: Controller context previously initialized by cdns3_core_probe() + */ +void cdns3_core_remove(struct cdns *cdns); + +/* + * The following callbacks are for glue drivers to invoke from their own + * &dev_pm_ops, so platform-specific work can wrap the shared controller l= ogic. + */ +int cdns3_runtime_suspend(struct cdns *cdns); +int cdns3_runtime_resume(struct cdns *cdns); +int cdns3_pm_suspend(struct cdns *cdns); +int cdns3_pm_resume(struct cdns *cdns); + +#endif /* __DRIVERS_USB_CDNS3_GLUE_H */ --=20 2.50.1 From nobody Sat Jun 13 04:18:14 2026 Received: from OS8PR02CU002.outbound.protection.outlook.com (mail-japanwestazon11022138.outbound.protection.outlook.com [40.107.75.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 121AC2FFDF8; Mon, 11 May 2026 02:42:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.75.138 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778467375; cv=fail; b=DePKSKlFpTOjWHaJf7stDxB+kFAyoG7NzXutD6HRpAO/vleKyay6PVhoGNyOjhxQ9nzjEE0JUpsIYzGe/mHyH781IWZwC9fClYvnVJ+mHbLAtTeMX31dYkCT2krDPKS7+qilLTFumJDMxGmKGD+BsmQHfDsy2a0roAuNEN0lTTs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778467375; c=relaxed/simple; bh=rPLo1gIK+HpJLgJxdr+ulLPxl+ByMNCSWWYDzGwft6U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=PTbe4uRxr5gfmQASHMxWmvOCzvmchO5mOOzLzxiONslcH1PbkbjBrCBnu1NK5YYHQAZXfeM2neCI0rI2CSOUzLdi5Kpe8wL3skQv/QgD01MUOALWeEyJeGiAERfDcR+8/Bu1miGHljKEoAu9cRxNOEpVM1/A5vmjkCgi0vCjdqg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com; spf=pass smtp.mailfrom=cixtech.com; arc=fail smtp.client-ip=40.107.75.138 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=cixtech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZomEZJab37TQKlxirplH5mkEmVz4WDeTwXJns+zdFNRhkhq6SYvjlLwJfcVjLPUAO5OlfLo3x5r6Wv0qUdUmz/1KacIM84ZTb07GY4AfVeT7g4eoSNng9UYyD/SNC6H1YICTmVmdH/bxAux+0QDhJB/vU8NedwbUQce6QjwtPKiJ6FLyM2cOkdo50iPG5hJjXne/czGYKP3/R1pzC0gw/prlR1a+wm8AJbLtf8ZTQPhP84Cl4P03VtWsmaZXVh/C94BYR8a3FKzhPLSwJbybikQ+gA/Q/rVwoF7iCfSYmkQeDkAx1KnzOdhzLjc8t5NBE1MdlQDkW65XWQ5s6218lg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=nEONwdvWSOZVDiRJQfYjimFlhGZB4X1lXbjgFUt0viA=; b=dMOW7qBx+/9UP3axuwPgd5qS942jpwagjCVD/A5M/HdqNF/iOKxp03ojL2bb1VGm/ZlYpQpcMa+IJgzu4DJ/mH/j3h2xhcbiPyl/8nEsvUYYo6ir9t3NWKAHpgF7q3jnODWAS4GMtg/XC9q1bmKPkPU6WQ2GxsGDyb7qnwakQjaOshGtKuhSZIGZ8EXVXbEYn9rwRC4C/to6LF1tHdSAytXUKECH2dTsTpFFblEr1zcgwjDq4BQwV2PsYLemNI0jFxAJ0dGdQjUSmksNvUTmMFHi0hxl/cmzo5OM7Hhxl75mlaHXSK6OkKQLbFJ9OrCvWcrBUUrCas6HyGPggZXN7Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 222.71.101.198) smtp.rcpttodomain=arndb.de smtp.mailfrom=cixtech.com; dmarc=bestguesspass action=none header.from=cixtech.com; dkim=none (message not signed); arc=none (0) Received: from SG2P153CA0037.APCP153.PROD.OUTLOOK.COM (2603:1096:4:c6::6) by KL1PR06MB5895.apcprd06.prod.outlook.com (2603:1096:820:c9::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9891.22; Mon, 11 May 2026 02:42:47 +0000 Received: from OSA0EPF000000CC.apcprd02.prod.outlook.com (2603:1096:4:c6:cafe::13) by SG2P153CA0037.outlook.office365.com (2603:1096:4:c6::6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.48.4 via Frontend Transport; Mon, 11 May 2026 02:42:47 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 222.71.101.198) smtp.mailfrom=cixtech.com; dkim=none (message not signed) header.d=none;dmarc=bestguesspass action=none header.from=cixtech.com; Received-SPF: Pass (protection.outlook.com: domain of cixtech.com designates 222.71.101.198 as permitted sender) receiver=protection.outlook.com; client-ip=222.71.101.198; helo=smtprelay.cixcomputing.com; pr=C Received: from smtprelay.cixcomputing.com (222.71.101.198) by OSA0EPF000000CC.mail.protection.outlook.com (10.167.240.58) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.13 via Frontend Transport; Mon, 11 May 2026 02:42:46 +0000 Received: from nchen-desktop (unknown [172.16.64.25]) by smtprelay.cixcomputing.com (Postfix) with ESMTPSA id 369754126F93; Mon, 11 May 2026 10:42:45 +0800 (CST) From: Peter Chen To: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, gregkh@linuxfoundation.org, pawell@cadence.com, rogerq@kernel.org Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, cix-kernel-upstream@cixtech.com, linux-arm-kernel@lists.infradead.org, arnd@arndb.de, Peter Chen Subject: [PATCH 2/4] usb: cdns3: sky1: Add cdnsp-sky1 glue driver Date: Mon, 11 May 2026 10:42:42 +0800 Message-ID: <20260511024244.981941-3-peter.chen@cixtech.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260511024244.981941-1-peter.chen@cixtech.com> References: <20260511024244.981941-1-peter.chen@cixtech.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: OSA0EPF000000CC:EE_|KL1PR06MB5895:EE_ X-MS-Office365-Filtering-Correlation-Id: 8e41cdc2-d62e-4a58-71f9-08deaf06fc03 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|36860700016|1800799024|82310400026|22082099003|56012099003|18002099003; X-Microsoft-Antispam-Message-Info: wsbJa23UKvMc5Hz3IzJfSv7MocZNm7MBMyGIyuusJnpnKYjKQflI0S5EtDfq9G9iYQ0+xMrEw6vxviRQj2zGNwQdf825fHZHm26fQT45OgX2TnCUh+ru85r85u+qN/dVRluW3vmp2xUCjqWZ0rCFU7ot9WxTSd1nbtMCokzkp4/EVvZ2V6SpYqywiktP1FcZd1zavN81KF5c0oICNijBaNL6YvlvnfNtxt1tLJbf7JLRHiyB4D2xKK/oD/DavjXd7VpsBgsnCtIekHGUCbDg5c+SyonzemPoEf1j6HLgDqCuA2TPXk84fmD8ihz9jrHjdeYAhcXCo5erLsscGnupfC0l/nNWzeZBLClK367KF6lxbttFmd9mxHBNzevL0D96W0S/cYQ8egNebYbJCFxF8PcAUb7rNHRKfpUrYJYXLRHB2iaXRuweUIxMRAaaCVpVVXqIFlDe8WNJ7IBOyL4s1YdCuB8mFbb5iLvp+dhWfWrV1IaNDTliKiDB0Nv/F73G9dFOVryCvjEQ/SxzHO+R/h1Oo7zrNdCmOXnDKf0lT8LpE7uLDNSPgMnM1RC30YdZAIURiy3ReX9TU2WDTU/KUkPIIKoCcqAIOOMf5FwMQV2eO2ENIVftY+HBznXltni30JkRniRCzDRq91xGDzHYkvQazgzrmXklHP3iDWteozHeNK1qxF1Mxi2sz7JTm+snunWDUTSb1KJIYkcT8iR4RYUrtJnGH/1pcu1K3Fxnlac= X-Forefront-Antispam-Report: CIP:222.71.101.198;CTRY:CN;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:smtprelay.cixcomputing.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(7416014)(36860700016)(1800799024)(82310400026)(22082099003)(56012099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: V1HNuG7OD43eGXvTytpH3S1vIrXiDau36xthE5W8k7jJC7C0h7/D6rHgJkka7Pg/kGpgqfwclK4YdQfNY7ZhT8erzxcfDx7vGFrI67zjgQyGdVW73R2NLW0wjo+rzTtzHa8YkXRJIPWqqGLSWbE6Fw4Cz04SSDTA/Jz3umpHB6uzKB+H21sfCYdKw7tJ+TBBOUzObH7Pims5jpGevv/0EZ0fiMYlHZCVIEEXEbgMLIHylhPRSySlHPLWLaevt2Fn+hKBOVJq+FOrI4gwGFlsuiHipIvJWyPWaJHOwZhr5j+8CfJvBFL/M7ZIiqGirpim2pRGY++yeeDBeFKd8XJwOuF16T/ICbj1SJzQqlGLf6nf3rewOMDNStNRDdR7vG8YTs/EUL6H8L6KuTydGRYfzb9iaKxTUC7n+aFObLURNX2us6QrL4PS4a37imC87Gcs X-OriginatorOrg: cixtech.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2026 02:42:46.3674 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8e41cdc2-d62e-4a58-71f9-08deaf06fc03 X-MS-Exchange-CrossTenant-Id: 0409f77a-e53d-4d23-943e-ccade7cb4811 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0409f77a-e53d-4d23-943e-ccade7cb4811;Ip=[222.71.101.198];Helo=[smtprelay.cixcomputing.com] X-MS-Exchange-CrossTenant-AuthSource: OSA0EPF000000CC.apcprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: KL1PR06MB5895 Content-Type: text/plain; charset="utf-8" Add a CIX sky1 platform glue driver with Kconfig and Makefile entry. It calls APIs exported from cdns3-plat.c for probe/remote/suspend/resume routines. Signed-off-by: Peter Chen --- drivers/usb/cdns3/Kconfig | 13 ++ drivers/usb/cdns3/Makefile | 1 + drivers/usb/cdns3/cdnsp-sky1.c | 252 +++++++++++++++++++++++++++++++++ 3 files changed, 266 insertions(+) create mode 100644 drivers/usb/cdns3/cdnsp-sky1.c diff --git a/drivers/usb/cdns3/Kconfig b/drivers/usb/cdns3/Kconfig index 39ad23d1ada8..7d7c322ea865 100644 --- a/drivers/usb/cdns3/Kconfig +++ b/drivers/usb/cdns3/Kconfig @@ -110,6 +110,19 @@ config USB_CDNS3_STARFIVE If you choose to build this driver as module it will be dynamically linked and module will be called cdns3-starfive.ko =20 +config USB_CDNSP_SKY1 + tristate "Cadence USB3 support on CIX Sky1 SoC platforms" + depends on USB_CDNS3 + depends on ARCH_CIX || COMPILE_TEST + default USB_CDNS3 + help + Glue driver for the Cadence USB dual-role controllers on CIX Sky1 + (device tree compatible cix,sky1-usb3). It enables clocks and resets + from the SoC, then uses the shared cdns3 platform core (cdns.ko). + + If built as a module, the module is named cdnsp-sky1.ko and must be + loaded after the cdns core module when both are loadable modules. + endif # USB_CDNS3 =20 endif # USB_CDNS_SUPPORT diff --git a/drivers/usb/cdns3/Makefile b/drivers/usb/cdns3/Makefile index b2e4ba6a49a3..ab813aaf9940 100644 --- a/drivers/usb/cdns3/Makefile +++ b/drivers/usb/cdns3/Makefile @@ -28,3 +28,4 @@ obj-$(CONFIG_USB_CDNSP_PCI) +=3D cdnsp-pci.o obj-$(CONFIG_USB_CDNS3_TI) +=3D cdns3-ti.o obj-$(CONFIG_USB_CDNS3_IMX) +=3D cdns3-imx.o obj-$(CONFIG_USB_CDNS3_STARFIVE) +=3D cdns3-starfive.o +obj-$(CONFIG_USB_CDNSP_SKY1) +=3D cdnsp-sky1.o diff --git a/drivers/usb/cdns3/cdnsp-sky1.c b/drivers/usb/cdns3/cdnsp-sky1.c new file mode 100644 index 000000000000..049044e3d09b --- /dev/null +++ b/drivers/usb/cdns3/cdnsp-sky1.c @@ -0,0 +1,252 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * cdnsp-sky1.c - CIX Sky1 glue for Cadence USBSSP DRD controller + * + * Copyright (C) 2026 CIX Technology Group Co., Ltd. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "glue.h" + +#define AXI_SETTING_OFFSET 0x0 +/* Normal Non-cacheable Bufferable */ +#define SKY1_USB_AXI_WR_CACHE_VALUE 0x33 + +/* USB mode strap in S5 syscon */ +#define USB_MODE_STRAP_S5_DOMAIN 0x424 +#define MODE_STRAP_OTG 0 + +#define U3_TYPEC_DRD_ID 0 +#define U3_TYPEC_HOST0_ID 1 +#define U3_TYPEC_HOST1_ID 2 +#define U3_TYPEC_HOST2_ID 3 +#define U3_TYPEA_CTRL0_ID 4 +#define U3_TYPEA_CTRL1_ID 5 +#define U2_HOST0_ID 6 +#define U2_HOST1_ID 7 +#define U2_HOST2_ID 8 +#define U2_HOST3_ID 9 +#define SKY1_USB_S5_NUM 10 + +#define U3_TYPEC_DRD_MODE_STRAP_BIT 12 +#define U3_TYPEC_HOST0_MODE_STRAP_BIT 14 +#define U3_TYPEC_HOST1_MODE_STRAP_BIT 16 +#define U3_TYPEC_HOST2_MODE_STRAP_BIT 18 +#define U3_TYPEA_CTRL0_MODE_STRAP_BIT 8 +#define U3_TYPEA_CTRL1_MODE_STRAP_BIT 10 +#define U2_HOST0_MODE_STRAP_BIT 0 +#define U2_HOST1_MODE_STRAP_BIT 2 +#define U2_HOST2_MODE_STRAP_BIT 4 +#define U2_HOST3_MODE_STRAP_BIT 6 + +struct cdnsp_sky1_strap_signal { + unsigned int offset, bit; +}; + +static const struct cdnsp_sky1_strap_signal strap_signals[SKY1_USB_S5_NUM]= =3D { + [U3_TYPEC_DRD_ID] =3D { USB_MODE_STRAP_S5_DOMAIN, U3_TYPEC_DRD_MODE_STRAP= _BIT }, + [U3_TYPEC_HOST0_ID] =3D { USB_MODE_STRAP_S5_DOMAIN, U3_TYPEC_HOST0_MODE_S= TRAP_BIT }, + [U3_TYPEC_HOST1_ID] =3D { USB_MODE_STRAP_S5_DOMAIN, U3_TYPEC_HOST1_MODE_S= TRAP_BIT }, + [U3_TYPEC_HOST2_ID] =3D { USB_MODE_STRAP_S5_DOMAIN, U3_TYPEC_HOST2_MODE_S= TRAP_BIT }, + [U3_TYPEA_CTRL0_ID] =3D { USB_MODE_STRAP_S5_DOMAIN, U3_TYPEA_CTRL0_MODE_S= TRAP_BIT }, + [U3_TYPEA_CTRL1_ID] =3D { USB_MODE_STRAP_S5_DOMAIN, U3_TYPEA_CTRL1_MODE_S= TRAP_BIT }, + [U2_HOST0_ID] =3D { USB_MODE_STRAP_S5_DOMAIN, U2_HOST0_MODE_STRAP_BIT }, + [U2_HOST1_ID] =3D { USB_MODE_STRAP_S5_DOMAIN, U2_HOST1_MODE_STRAP_BIT }, + [U2_HOST2_ID] =3D { USB_MODE_STRAP_S5_DOMAIN, U2_HOST2_MODE_STRAP_BIT }, + [U2_HOST3_ID] =3D { USB_MODE_STRAP_S5_DOMAIN, U2_HOST3_MODE_STRAP_BIT }, +}; + +struct cdnsp_sky1 { + struct device *dev; + struct cdns cdns; + struct regmap *usb_syscon; + void __iomem *glue_base; + struct clk_bulk_data *clks; + int num_clks; +}; + +/** + * sky1_set_mode_by_id - program one USB controller mode strap + * @syscon: regmap for S5 syscon (from DT property cix,syscon-usb) + * @id: controller slot ID (U3_TYPEC_DRD_ID .. U2_HOST3_ID) + * @mode: MODE_STRAP_OTG, MODE_STRAP_HOST, or MODE_STRAP_DEVICE + */ +static int cdnsp_sky1_set_mode_by_id(struct regmap *syscon, int id, int mo= de) +{ + if (id < 0 || id >=3D SKY1_USB_S5_NUM) + return -EINVAL; + + return regmap_update_bits(syscon, + strap_signals[id].offset, + GENMASK(strap_signals[id].bit + 1, + strap_signals[id].bit), + (unsigned int)mode << strap_signals[id].bit); +} + +static int cdnsp_sky1_set_all_controllers_otg(struct regmap *syscon) +{ + int id, ret; + + for (id =3D 0; id < SKY1_USB_S5_NUM; id++) { + ret =3D cdnsp_sky1_set_mode_by_id(syscon, id, MODE_STRAP_OTG); + if (ret) + return ret; + } + + return 0; +} + +static const struct clk_bulk_data cdnsp_sky1_cdns_core_clks[] =3D { + { .id =3D "sof" }, + { .id =3D "aclk" }, + { .id =3D "lpm" }, + { .id =3D "pclk" }, +}; + +static int cdnsp_sky1_probe(struct platform_device *pdev) +{ + struct device *dev =3D &pdev->dev; + struct cdnsp_sky1 *priv; + struct cdns *cdns; + struct cdns3_probe_data probe_data; + struct resource *res; + int ret; + + priv =3D devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + priv->dev =3D dev; + priv->num_clks =3D ARRAY_SIZE(cdnsp_sky1_cdns_core_clks); + priv->clks =3D devm_kmemdup(dev, cdnsp_sky1_cdns_core_clks, + sizeof(cdnsp_sky1_cdns_core_clks), GFP_KERNEL); + if (!priv->clks) + return -ENOMEM; + + ret =3D devm_clk_bulk_get(dev, priv->num_clks, priv->clks); + if (ret) + return dev_err_probe(dev, ret, "failed to get clocks\n"); + + ret =3D clk_bulk_prepare_enable(priv->num_clks, priv->clks); + if (ret) + return dev_err_probe(dev, ret, "failed to enable clocks\n"); + + priv->usb_syscon =3D syscon_regmap_lookup_by_phandle(dev->of_node, + "cix,syscon-usb"); + if (IS_ERR(priv->usb_syscon)) + return dev_err_probe(dev, PTR_ERR(priv->usb_syscon), + "failed to get cix,syscon-usb regmap\n"); + + ret =3D cdnsp_sky1_set_all_controllers_otg(priv->usb_syscon); + if (ret) + return dev_err_probe(dev, ret, + "failed to set USB controllers to OTG strap\n"); + + res =3D platform_get_resource_byname(pdev, IORESOURCE_MEM, "glue"); + if (!res) + goto err_clk; + + priv->glue_base =3D devm_ioremap_resource(dev, res); + if (IS_ERR(priv->glue_base)) { + ret =3D PTR_ERR(priv->glue_base); + goto err_clk; + } + + /* Set ARCACHE and AWCACHE */ + writel(SKY1_USB_AXI_WR_CACHE_VALUE, priv->glue_base + AXI_SETTING_OFFSET); + + cdns =3D &priv->cdns; + cdns->dev =3D dev; + + probe_data.cdns =3D cdns; + probe_data.pdev =3D pdev; + + ret =3D cdns3_core_probe(&probe_data); + if (ret) + goto err_clk; + + return 0; + +err_clk: + clk_bulk_disable_unprepare(priv->num_clks, priv->clks); + + return ret; +} + +static void cdnsp_sky1_remove(struct platform_device *pdev) +{ + struct cdns *cdns =3D platform_get_drvdata(pdev); + struct cdnsp_sky1 *priv; + + if (!cdns) + return; + + cdns3_core_remove(cdns); + priv =3D container_of(cdns, struct cdnsp_sky1, cdns); + clk_bulk_disable_unprepare(priv->num_clks, priv->clks); +} + +#ifdef CONFIG_PM +static int cdnsp_sky1_runtime_suspend(struct device *dev) +{ + return cdns3_runtime_suspend(dev_get_drvdata(dev)); +} + +static int cdnsp_sky1_runtime_resume(struct device *dev) +{ + return cdns3_runtime_resume(dev_get_drvdata(dev)); +} + +#ifdef CONFIG_PM_SLEEP +static int cdnsp_sky1_suspend(struct device *dev) +{ + return cdns3_pm_suspend(dev_get_drvdata(dev)); +} + +static int cdnsp_sky1_resume(struct device *dev) +{ + return cdns3_pm_resume(dev_get_drvdata(dev)); +} +#endif /* CONFIG_PM_SLEEP */ +#endif /* CONFIG_PM */ + +static const struct dev_pm_ops cdnsp_sky1_pm_ops =3D { + SET_SYSTEM_SLEEP_PM_OPS(cdnsp_sky1_suspend, cdnsp_sky1_resume) + SET_RUNTIME_PM_OPS(cdnsp_sky1_runtime_suspend, + cdnsp_sky1_runtime_resume, NULL) +}; + +static const struct of_device_id cdnsp_sky1_of_match[] =3D { + { .compatible =3D "cix,sky1-usb3" }, + { } +}; +MODULE_DEVICE_TABLE(of, cdnsp_sky1_of_match); + +static struct platform_driver cdnsp_sky1_driver =3D { + .probe =3D cdnsp_sky1_probe, + .remove =3D cdnsp_sky1_remove, + .driver =3D { + .name =3D "cdnsp-sky1", + .of_match_table =3D of_match_ptr(cdnsp_sky1_of_match), + .pm =3D &cdnsp_sky1_pm_ops, + }, +}; + +module_platform_driver(cdnsp_sky1_driver); + +MODULE_SOFTDEP("pre: cdns"); +MODULE_ALIAS("platform:cdnsp-sky1"); +MODULE_DESCRIPTION("CIX Sky1 Cadence USBSSP DRD glue driver"); +MODULE_AUTHOR("Peter Chen "); +MODULE_LICENSE("GPL"); --=20 2.50.1 From nobody Sat Jun 13 04:18:14 2026 Received: from SEYPR02CU001.outbound.protection.outlook.com (mail-koreacentralazon11023081.outbound.protection.outlook.com [40.107.44.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 91B362F0C45; Mon, 11 May 2026 02:42:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.44.81 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778467373; cv=fail; b=b9BTUwMuMxSYVVGXOdOIoe7GL1KfpS7wYrOXx/mdNb4pbLcDFP+jkGFhy/E3WBqSw/DzlVVML27BQvGTp8RKBIJIYiFt/emk4kDUA256f7CywlkcUyq/d6gE5UR/5FMW/s6Vy3mjiVSyOjbxAeZWbJdCWB1eTHoJwkRsEOQlXks= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778467373; c=relaxed/simple; bh=wCwwwcT7BysMz9l4wBeneJbpiBRSSkTg2lyUac3FQCI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=VMLRX59me5W0h03fSoXsdsys0EaiHMpjwQbNrYYViYEbveI2ClQ2oXUqI6X77USRTFBoDUHeq1MF5gI2Dw1ZdoqidUgAVPN94ubbaF9X7qfCCDHp0VV6FcZh8cibD7Xz7YMkrZfkTYIKGphCQo2aWWtCEndRlipWwlvRBGy2PqM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com; spf=pass smtp.mailfrom=cixtech.com; arc=fail smtp.client-ip=40.107.44.81 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=cixtech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hNmIS2DCDxVdGHeYFcMjAU34tCf8wtOG+yamTjiIxVfPX6EDPKz8sIXwhejr2jg6z++d0JS2tuVupYQf3LQPUPEiS4miAQvZPVN2aXJ6+iH6j6+6EHvq1mKSSTlY9T5UsnQDG9SwtLfprEJU1yYWypiSEJrW0NCVra/H3ouXq/8WX0VTrdEdVaaSk8hgO8KCPQlFwAfRuovKTDHoc41Kd9hmhv/7gL3zH4yzfxD9eoZ0Of1kBqL09j42HLsx3Ji3wSy2VGuy7xVG8yR1U7lnNhGcpwCEtB/9gt+//eJmH6VPLN9Otj8L1ilmMOr58rYXZcKbPIMQ9D27UudOld1t0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=4mpe51utLyLC9GkzUxq50oEldYz3B6Rovb1HJututls=; b=yTn8WWg7Ki3vnYCNjsZDXMb39dEVIiQAskCkq9PgB4W1wkRpcigWG9Kr0tR6g7WEFjE+jYCmrLS6NFEG0So1SWqW0gJo2GzoPjPP779CcUdce+koV8KJjbeX490BdFzsGY43c77Ilj307ItEoho4xO4tE7DWCzZWH/4eGrxP3D35AMLOvkX5EcU5fWa+2VFnnXKOwmmq7PuDYF5Aic5Ax6kHzJpfy+1ORJSowa6KOfu0OcvZfh+pjAzks/to6GIflnlfNZiP91VoNYIiwH1ZSRWdv1OkjA2YB8pkaKxOZ2mv/EmSIMVRX7Z48V3VIwDrtI9fVJFvdyLumF4byD3PSg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 222.71.101.198) smtp.rcpttodomain=arndb.de smtp.mailfrom=cixtech.com; dmarc=bestguesspass action=none header.from=cixtech.com; dkim=none (message not signed); arc=none (0) Received: from PSBPR02CA0003.apcprd02.prod.outlook.com (2603:1096:301::13) by SEYPR06MB6663.apcprd06.prod.outlook.com (2603:1096:101:175::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9891.22; Mon, 11 May 2026 02:42:46 +0000 Received: from TY2PEPF0000AB89.apcprd03.prod.outlook.com (2603:1096:301:0:cafe::2d) by PSBPR02CA0003.outlook.office365.com (2603:1096:301::13) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9891.22 via Frontend Transport; Mon, 11 May 2026 02:42:46 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 222.71.101.198) smtp.mailfrom=cixtech.com; dkim=none (message not signed) header.d=none;dmarc=bestguesspass action=none header.from=cixtech.com; Received-SPF: Pass (protection.outlook.com: domain of cixtech.com designates 222.71.101.198 as permitted sender) receiver=protection.outlook.com; client-ip=222.71.101.198; helo=smtprelay.cixcomputing.com; pr=C Received: from smtprelay.cixcomputing.com (222.71.101.198) by TY2PEPF0000AB89.mail.protection.outlook.com (10.167.253.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.13 via Frontend Transport; Mon, 11 May 2026 02:42:46 +0000 Received: from nchen-desktop (unknown [172.16.64.25]) by smtprelay.cixcomputing.com (Postfix) with ESMTPSA id 47C534126F94; Mon, 11 May 2026 10:42:45 +0800 (CST) From: Peter Chen To: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, gregkh@linuxfoundation.org, pawell@cadence.com, rogerq@kernel.org Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, cix-kernel-upstream@cixtech.com, linux-arm-kernel@lists.infradead.org, arnd@arndb.de, Peter Chen Subject: [PATCH 3/4] dt-bindings: usb: add CIX Sky1 Cadence USB3 controller Date: Mon, 11 May 2026 10:42:43 +0800 Message-ID: <20260511024244.981941-4-peter.chen@cixtech.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260511024244.981941-1-peter.chen@cixtech.com> References: <20260511024244.981941-1-peter.chen@cixtech.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY2PEPF0000AB89:EE_|SEYPR06MB6663:EE_ X-MS-Office365-Filtering-Correlation-Id: 05974e6c-895f-4f34-c3ec-08deaf06fbea X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|36860700016|7416014|82310400026|18002099003|56012099003|22082099003|3023799003; X-Microsoft-Antispam-Message-Info: L55i90/HhbveTOPZlfVnAB2odfNdN3j7bO+SR3EFxzmzI9SkYulPVHDDXd7Es+kPMsClwjMgQx6U5Q7c420f0fr+1dbLtTh1hsFsXyIwvbIpuC6xlpaQDBl7By6xgiR72EPiG4KlDe9/1kztYomPJt1/DMgw5HGbBSctX3pLVjgYxYB7jngkRR5BgyfSXrBESv2F8vWoNfodUw+sCF4BycIRfqkfxTAteU99AdWBEamzhTJk2Z8v6myfv6WPm7mCwdvl54p69nXjqrFBSiCjBJilb2ptYd69D9X75+9BYRsYcwqTBB+Rv8gEfY/BSe/1bd7m9cwnRiYKKdOLT6lMEyMA2Ppj3y8SSxUxKs7SA48ygaJ4scDTGL/KvARYqyq/qmye/CcEVDfBddW3vwXXzIXd7sX5aalFCy7o1UVOQpDohBwzDndBTzng/hO+3mmysKKib1NsFsGwcw4wRaVtAFOsTfnU5nisTwNGWJhh2FTaKEeUqiB9kfziVXDAgBHYCbN0aoIWuFg2UDhZmUomxxuyVPRcyZgobi8aHSeSIOnBmzIIuoA9kabyEjarpCSbVswvZJ5xr3Od/skGX00/Sl82mZqIqlE4kHv20cuq9lzrzhmEx+qCtJ2LWI1su0/oInBvDcq9+OhSwA4rrf9HabxNy6TmuMlp60LhRe/oCK3bKByj4WalTMWXWOiINHdO X-Forefront-Antispam-Report: CIP:222.71.101.198;CTRY:CN;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:smtprelay.cixcomputing.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(376014)(36860700016)(7416014)(82310400026)(18002099003)(56012099003)(22082099003)(3023799003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: dwlGoEmRcscSp02gi0G1Ezr5WomIrhYaPzan5MbC102tNhQnvcNwduoWC7svBEFfzYCyPzt5QPLGKSw3gEa1nSNtW4zFDgHsfdKCA33YrOtsAauc9azSllfou6fYAoAxnS/XQZBXUOcz1jaNCuOfNNWimEThShwsxIlEghdU7UYYVaTUP1U+L9aFhA/AEu84ANJtLUmWZryxa8R1TWkFuZW0vQ7uYGOIPXGuEiTF5ho40yCL0t9symM4WjN3WdNfxBbhGMA7VVDD18Cui64+3G55sEhrDN3a4+1l0hmCNVpWKXmd+t4bmMNkAi+OvltyGrlnla4BtuLiBjNs1POVm1t2ktDdeX9Rze+FqEwngRvR3Imc45V5kft6UkOsdzM7vlv5us6R92JIsDsXE1UlsunLymU8Wte3eFZm8306trApAUIuovcl15dDeyf4zV4r X-OriginatorOrg: cixtech.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2026 02:42:46.1196 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 05974e6c-895f-4f34-c3ec-08deaf06fbea X-MS-Exchange-CrossTenant-Id: 0409f77a-e53d-4d23-943e-ccade7cb4811 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0409f77a-e53d-4d23-943e-ccade7cb4811;Ip=[222.71.101.198];Helo=[smtprelay.cixcomputing.com] X-MS-Exchange-CrossTenant-AuthSource: TY2PEPF0000AB89.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEYPR06MB6663 Content-Type: text/plain; charset="utf-8" Add a binding for the CIX Sky1 integration of the Cadence USBSSP DRD controller. The schema documents the glue register window, clocks, resets, interrupts and S5 system controller phandle. Signed-off-by: Peter Chen --- .../bindings/usb/cix,sky1-cdns3.yaml | 151 ++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 Documentation/devicetree/bindings/usb/cix,sky1-cdns3.ya= ml diff --git a/Documentation/devicetree/bindings/usb/cix,sky1-cdns3.yaml b/Do= cumentation/devicetree/bindings/usb/cix,sky1-cdns3.yaml new file mode 100644 index 000000000000..23d82d8cc9bc --- /dev/null +++ b/Documentation/devicetree/bindings/usb/cix,sky1-cdns3.yaml @@ -0,0 +1,151 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/usb/cix,sky1-cdns3.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: CIX Sky1 Cadence USB3 Controller + +maintainers: + - Peter Chen + +description: + The CIX Sky1 USB3 controller is based on the Cadence USBSSP DRD + controller. The integration adds glue registers and mode strap controls + in the Sky1 S5 system controller. + +allOf: + - $ref: usb-drd.yaml# + - $ref: usb-xhci.yaml# + +properties: + compatible: + items: + - const: cix,sky1-usb3 + - const: cix,cdns-usb3 + + reg: + items: + - description: OTG controller registers + - description: Device controller registers + - description: XHCI host controller registers + - description: Sky1 USB glue registers + + reg-names: + items: + - const: otg + - const: dev + - const: xhci + - const: glue + + interrupts: + items: + - description: XHCI host controller interrupt + - description: Device controller interrupt + - description: OTG/DRD controller interrupt + - description: Wakeup interrupt + + interrupt-names: + items: + - const: host + - const: peripheral + - const: otg + - const: wakeup + + clocks: + items: + - description: Start-of-frame clock + - description: AXI bus clock + - description: Low-power mode clock + - description: APB register interface clock + + clock-names: + items: + - const: sof + - const: aclk + - const: lpm + - const: pclk + + resets: + items: + - description: APB register reset + - description: Controller reset + + reset-names: + items: + - const: prst + - const: rst + + cix,syscon-usb: + $ref: /schemas/types.yaml#/definitions/phandle + description: + Phandle to the Sky1 S5 system controller used to program USB mode + strap controls. + + dma-coherent: true + + maximum-speed: + enum: [super-speed-plus, super-speed, high-speed, full-speed] + + phys: + minItems: 1 + maxItems: 2 + + phy-names: + minItems: 1 + maxItems: 2 + items: + anyOf: + - const: cdns3,usb2-phy + - const: cdns3,usb3-phy + +required: + - compatible + - reg + - reg-names + - interrupts + - interrupt-names + - clocks + - clock-names + - resets + - reset-names + - cix,syscon-usb + +unevaluatedProperties: false + +examples: + - | + #include + #include + #include + + soc { + #address-cells =3D <2>; + #size-cells =3D <2>; + + usb@91d0000 { + compatible =3D "cix,sky1-usb3", "cix,cdns-usb3"; + reg =3D <0x00 0x91d0000 0x00 0x4000>, + <0x00 0x91d4000 0x00 0x4000>, + <0x00 0x91d8000 0x00 0x8000>, + <0x00 0x91c0314 0x00 0x4>; + reg-names =3D "otg", "dev", "xhci", "glue"; + interrupts =3D , + , + , + ; + interrupt-names =3D "host", "peripheral", "otg", "wakeup"; + clocks =3D <&scmi_clk CLK_TREE_USB3A_H0_CLK_SOF>, + <&scmi_clk CLK_TREE_USB3A_0_AXI_GATE>, + <&scmi_clk CLK_TREE_USB3A_H0_CLK_LPM>, + <&scmi_clk CLK_TREE_USB3A_0_APB_GATE>; + clock-names =3D "sof", "aclk", "lpm", "pclk"; + resets =3D <&s5_syscon SKY1_USBC_SS2_PRST_N>, + <&s5_syscon SKY1_USBC_SS2_RST_N>; + reset-names =3D "prst", "rst"; + cix,syscon-usb =3D <&s5_syscon>; + dma-coherent; + maximum-speed =3D "super-speed-plus"; + dr_mode =3D "otg"; + }; + }; --=20 2.50.1 From nobody Sat Jun 13 04:18:14 2026 Received: from OS8PR02CU002.outbound.protection.outlook.com (mail-japanwestazon11022137.outbound.protection.outlook.com [40.107.75.137]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 21E812F1FC7; Mon, 11 May 2026 02:42:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.75.137 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778467373; cv=fail; b=aF0e3e5y7FzOmHJuxowQftA03NOzYpsvFPYY7r2SLAzGDPTZdLAt19em08dK5EtZ1XYg2d8v/8tR2YjKha1KHiSOM43MTB3dkwZ1UWkuh9vUUDnmqPXTmUagDbi0t30AxBcfpTV0pvQtrxWywi7wr6cw/O3l5xCVQq2C5re9OD0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778467373; c=relaxed/simple; bh=ObGe+2iWOQor1HiS2eQ5wIwMbacz7sOWLhSTlNSifW8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=g9SYgyzez9VM/pYMas7fRjJj6n0WkZylxsOGPyBlBr0orbz90huh4omW493HX9dGEDcFA9epluedivlSIW9ES6CtaVqVfrnsN5OaUgT9i+NSrV4xlNLb2lRgQj3D85NhwSS8+9Xl1t+8O4pdLzOfEy/VlCVl9HC3LLSnbXURFpc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com; spf=pass smtp.mailfrom=cixtech.com; arc=fail smtp.client-ip=40.107.75.137 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=cixtech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=cixtech.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=F9UHlrm9/LjX912IvByR6UUjElgiIx1l1jJSnT7fDP4J/83LZbM417o/eSDRu8JHAMkM1NvvJBds/vEh4yD/TXPUqiTQcK37HdXLj0iCx4uyB3eWYtBKUNE9uxDZ2o1sjstWoHFd+h+IHZvD5hFQ0M/VkAdGDt60QVNA7G30PKUaaLqjPq4bLv6NZ0zSCcfymBmZnu/QdGBQKnPOk5jW6dooJQo8rG6YV2y7vj3zpTgIdLek/veky/sIhPxaW8/bYNtyZVdF8RzTA1M/eTjKzSI6TWsWZuCk8P8dTmZr22bl9isqXOA0YloDeGBI0eQLt4L9riVwKO5Uz9L0X8JWXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=hmUHPYJIwZDjfsYgFoVhdKgoC5ImH9Iy1EdH1fpFJrk=; b=XonwnC8FjIEsp3z/yXXQCvrOi/JF6hxzaX4+cBYAb6SHyTnk+/Xk+OAs2jlNBfuyqdjzHaWMMelH/fmaQYMad9Eim9QZ7AwsZthHI/F56xfnAx4rRqnErTjxqm0MGFSX88jReExw7eBP1+mk5S21x0jqWR+9D52VMBX+RNQNZR1Y1jYrbwW3bhl6S9O4HQkcFyyHk2uTSwPF2FOAL00p3s7lf9LlPCGybrsF2VO9Ym+q3HI48uaWE4d79AjBQ9mMEx9LcmdnTd40kBOnzZ+s4CQrPEa1oqHef+f/qx8aePpp2C0I/0rX1+v/w61aP5jRQy+Zu7YPMCxOb5wYQGzCOA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 222.71.101.198) smtp.rcpttodomain=arndb.de smtp.mailfrom=cixtech.com; dmarc=bestguesspass action=none header.from=cixtech.com; dkim=none (message not signed); arc=none (0) Received: from SI2PR02CA0005.apcprd02.prod.outlook.com (2603:1096:4:194::6) by SG2PR06MB5312.apcprd06.prod.outlook.com (2603:1096:4:1b9::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9891.22; Mon, 11 May 2026 02:42:46 +0000 Received: from SG2PEPF000B66CC.apcprd03.prod.outlook.com (2603:1096:4:194:cafe::de) by SI2PR02CA0005.outlook.office365.com (2603:1096:4:194::6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9891.22 via Frontend Transport; Mon, 11 May 2026 02:42:46 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 222.71.101.198) smtp.mailfrom=cixtech.com; dkim=none (message not signed) header.d=none;dmarc=bestguesspass action=none header.from=cixtech.com; Received-SPF: Pass (protection.outlook.com: domain of cixtech.com designates 222.71.101.198 as permitted sender) receiver=protection.outlook.com; client-ip=222.71.101.198; helo=smtprelay.cixcomputing.com; pr=C Received: from smtprelay.cixcomputing.com (222.71.101.198) by SG2PEPF000B66CC.mail.protection.outlook.com (10.167.240.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.13 via Frontend Transport; Mon, 11 May 2026 02:42:45 +0000 Received: from nchen-desktop (unknown [172.16.64.25]) by smtprelay.cixcomputing.com (Postfix) with ESMTPSA id 5853D4126F95; Mon, 11 May 2026 10:42:45 +0800 (CST) From: Peter Chen To: robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, gregkh@linuxfoundation.org, pawell@cadence.com, rogerq@kernel.org Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, cix-kernel-upstream@cixtech.com, linux-arm-kernel@lists.infradead.org, arnd@arndb.de, Peter Chen Subject: [PATCH 4/4] arm64: dts: cix: add Sky1 USB4 and USB5 controllers Date: Mon, 11 May 2026 10:42:44 +0800 Message-ID: <20260511024244.981941-5-peter.chen@cixtech.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260511024244.981941-1-peter.chen@cixtech.com> References: <20260511024244.981941-1-peter.chen@cixtech.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SG2PEPF000B66CC:EE_|SG2PR06MB5312:EE_ X-MS-Office365-Filtering-Correlation-Id: a0a59ca8-a684-4f64-162a-08deaf06fbae X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|36860700016|1800799024|82310400026|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: DEaK1zW2XNt1dZvSrLk5R1iHlcet4ZfFNEwcY4XIKUjBp4NPNoKEh1dB2Bc+AXTovj659dPsAmmIFExt89GhIqgxRJoF6ZyyaCK75F00laq2vwTyb0j4WyFThMuXxNw2vTen9GvWn1B7lcdVcluUsJR//7fiZ7k6DZ5UCRCitDtQN+GEaHAMGm8ACKzD1XJjAR0MFAc5Y5xwpz2EYL8qclqyc8NjgOBykTXNloQ7HribUzGUsczirpdJwgB/tS2hnTxYS4KOUUzbhKZevWdMpaZYs0MPsTpJv+YlF8PFHov94EkGu2WaWVHK0Ug0L2OZAqmGgV2Mlsp9yxgSo4dvVbDhQ81wiokqbO+Vs9MfB5JbpmZ4osaS/FjtrudUvvnm8fpteJxy43VeWUXEHahpmDJyAZTlvrnAx8WA4yzguWhDKZxEdh0wojAOzmPsna7SwYOQR86bHNUKcj8wJswnNzUXbGlaYMc8g9vviXEeRfrUSY3IdBpLMHhiypqPAk8PDLcxYYpceYaV7l1N2uXP9pHejb4m3+aIqUt1k1dpfbjQ0rf3tXhCSzD+R2WkPam7DI5Ycxs4mj+BF4C8TogeSOkS+yaia2lQ4V+O+6w387lEECOc5maUad8worpw0NavCnUbEC6jPciv/QfHYabFuP4yKjqUtd8GYuGNUF52yCP52fonbDMphYgq9vduj3RWXInfa7r9uzA+3XnwNwFmArSxAS928cISL/D5CEp4MjE= X-Forefront-Antispam-Report: CIP:222.71.101.198;CTRY:CN;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:smtprelay.cixcomputing.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(7416014)(376014)(36860700016)(1800799024)(82310400026)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: l34P4BTKUncrnc9rw9wsFP9bdu5WzhZwLXxPerfYfXGz9YTMn32nQhECxS6Mp0qFdgabEuNe1OY1qhwqAE8mHDeSGa3hLtp3BXEsO95fbsxaiQ7ldkGdwo1OcpNPHySuWZvhSh3ySPYHMVvOWxTX+K8g/IWdOUwoYWOvzIhS1pzB5HdUK17MtUKqvs5AqexSQRI4pi+ajkWyqCYgJUtgq3MCD3QRTcAKD7uv5C/ST+0B+GyBqSg8g61wowUxv6vdaVfyhy41y6HKYoH75ZnYOYFVzEwaqb1oWJr0Zfc6HxmD+A+HBens1KfHOZ14b8GPx4fRAC4tE8b+YktsGAgJWA5d8Vt3LpCHnx/FGS0wPWMcOovw/DVZxzmD/B5sNXS1VgajU32PRgYCN5phMxA5L7uAlVmRlj1zorllhd0GbaSiDLxRjvNYuGYoIBjW7ToW X-OriginatorOrg: cixtech.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2026 02:42:45.8730 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a0a59ca8-a684-4f64-162a-08deaf06fbae X-MS-Exchange-CrossTenant-Id: 0409f77a-e53d-4d23-943e-ccade7cb4811 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0409f77a-e53d-4d23-943e-ccade7cb4811;Ip=[222.71.101.198];Helo=[smtprelay.cixcomputing.com] X-MS-Exchange-CrossTenant-AuthSource: SG2PEPF000B66CC.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SG2PR06MB5312 Content-Type: text/plain; charset="utf-8" Add the Sky1 USB4 and USB5 Cadence USB3 controller nodes with their registers, interrupts, clocks, resets and S5 syscon control. Enable both ports on the Orion O6 board in host mode with the required VBUS pinctrl. Signed-off-by: Peter Chen --- arch/arm64/boot/dts/cix/sky1-orion-o6.dts | 30 ++++++++++ arch/arm64/boot/dts/cix/sky1.dtsi | 68 +++++++++++++++++++++++ 2 files changed, 98 insertions(+) diff --git a/arch/arm64/boot/dts/cix/sky1-orion-o6.dts b/arch/arm64/boot/dt= s/cix/sky1-orion-o6.dts index e39c87774c12..d1e2afceea15 100644 --- a/arch/arm64/boot/dts/cix/sky1-orion-o6.dts +++ b/arch/arm64/boot/dts/cix/sky1-orion-o6.dts @@ -80,6 +80,22 @@ pins { =20 }; }; + + pinctrl_usb4: usb4-power-on-cfg { + pins { + pinmux =3D ; + bias-pull-down; + drive-strength =3D <8>; + }; + }; + + pinctrl_usb5: usb5-power-on-cfg { + pins { + pinmux =3D ; + bias-pull-down; + drive-strength =3D <8>; + }; + }; }; =20 &pcie_x8_rc { @@ -117,3 +133,17 @@ &s5_gpio2 { &uart2 { status =3D "okay"; }; + +&usb4 { + pinctrl-names =3D "default"; + pinctrl-0 =3D <&pinctrl_usb4>; + dr_mode =3D "host"; + status =3D "okay"; +}; + +&usb5 { + pinctrl-names =3D "default"; + pinctrl-0 =3D <&pinctrl_usb5>; + dr_mode =3D "host"; + status =3D "okay"; +}; diff --git a/arch/arm64/boot/dts/cix/sky1.dtsi b/arch/arm64/boot/dts/cix/sk= y1.dtsi index bb5cfb1f2113..9f7d9ad6586c 100644 --- a/arch/arm64/boot/dts/cix/sky1.dtsi +++ b/arch/arm64/boot/dts/cix/sky1.dtsi @@ -6,6 +6,8 @@ =20 #include #include +#include +#include #include "sky1-power.h" =20 / { @@ -504,6 +506,72 @@ mbox_ap2sfh: mailbox@80a0000 { cix,mbox-dir =3D "tx"; }; =20 + usb4: usb@91d0000 { + compatible =3D "cix,sky1-usb3", "cix,cdns-usb3"; + reg =3D <0x00 0x91d0000 0x00 0x4000>, + <0x00 0x91d4000 0x00 0x4000>, + <0x00 0x91d8000 0x00 0x8000>, + <0x00 0x91c0314 0x00 0x4>; + reg-names =3D "otg", "dev", "xhci", "glue"; + + interrupts =3D , /* host irq */ + , /* peripheral irq */ + , /* otgirq */ + ; /* wakeup irq */ + interrupt-names =3D "host", + "peripheral", + "otg", + "wakeup"; + + resets =3D <&s5_syscon SKY1_USBC_SS2_PRST_N>, + <&s5_syscon SKY1_USBC_SS2_RST_N>; + reset-names =3D "prst", "rst"; + + clocks =3D <&scmi_clk CLK_TREE_USB3A_H0_CLK_SOF>, + <&scmi_clk CLK_TREE_USB3A_0_AXI_GATE>, + <&scmi_clk CLK_TREE_USB3A_H0_CLK_LPM>, + <&scmi_clk CLK_TREE_USB3A_0_APB_GATE>; + clock-names =3D "sof", "aclk", "lpm", "pclk"; + + cix,syscon-usb =3D <&s5_syscon>; + dma-coherent; + maximum-speed =3D "super-speed-plus"; + dr_mode =3D "otg"; + }; + + usb5: usb@91e0000 { + compatible =3D "cix,sky1-usb3", "cix,cdns-usb3"; + reg =3D <0x00 0x91e0000 0x00 0x4000>, + <0x00 0x91e4000 0x00 0x4000>, + <0x00 0x91e8000 0x00 0x8000>, + <0x00 0x91c0324 0x00 0x4>; + reg-names =3D "otg", "dev", "xhci", "glue"; + + interrupts =3D , /* host irq */ + , /* peripheral irq */ + , /* otgirq */ + ; /* wakeup irq */ + interrupt-names =3D "host", + "peripheral", + "otg", + "wakeup"; + + resets =3D <&s5_syscon SKY1_USBC_SS3_PRST_N>, + <&s5_syscon SKY1_USBC_SS3_RST_N>; + reset-names =3D "prst", "rst"; + + clocks =3D <&scmi_clk CLK_TREE_USB3A_H1_CLK_SOF>, + <&scmi_clk CLK_TREE_USB3A_1_AXI_GATE>, + <&scmi_clk CLK_TREE_USB3A_H1_CLK_LPM>, + <&scmi_clk CLK_TREE_USB3A_1_APB_GATE>; + clock-names =3D "sof", "aclk", "lpm", "pclk"; + + cix,syscon-usb =3D <&s5_syscon>; + dma-coherent; + maximum-speed =3D "super-speed-plus"; + dr_mode =3D "otg"; + }; + pcie_x8_rc: pcie@a010000 { compatible =3D "cix,sky1-pcie-host"; reg =3D <0x00 0x0a010000 0x00 0x10000>, --=20 2.50.1