From: Hongliang Yang <hongliang.yang@cixtech.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Peter Chen <peter.chen@kernel.org>,
Pawel Laszczak <pawell@cadence.com>,
Roger Quadros <rogerq@kernel.org>, Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Philipp Zabel <p.zabel@pengutronix.de>,
Gary Yang <Gary.Yang@cixtech.com>,
Fugang Duan <fugang.duan@cixtech.com>
Cc: linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
cix-kernel-upstream@cixtech.com, hongliang.yang@cixtech.com
Subject: [PATCH v8 0/2] Add CIX Sky1 USBSSP controller support
Date: Thu, 12 Nov 2026 10:21:39 +0800 [thread overview]
Message-ID: <20261112022141.4136099-1-hongliang.yang@cixtech.com> (raw)
This series adds support for the Cadence USBSSP DRD controller
integrated in the CIX Sky1 SoC: the device tree binding and the glue
driver. It is a USB series only. The arm64 device tree nodes belong to
the SoC subsystem, so they are not part of this series and will be sent
separately once the binding is accepted.
Tested on Radxa Orion O6 (Sky1) in host mode, together with the CIX
USB3 PHY series posted separately. The series applies on top of
v7.4-rc1.
Each controller is described as one address range in the USB30 Type-A
DRD RCSU block at 0x091c0000, starting at its AXI cache attribute strap
register and ending after its AXI clock status register. The two Type-A
controllers interleave their strap and status registers in that block:
0x300 STRAP_PIN0 stream ID USB4
0x304 STRAP_PIN1 stream ID USB5
0x30c STRAP_PIN3 clock enables USB4, USB5
0x314 STRAP_PIN5 awcache/arcache USB4
0x324 STRAP_PIN9 awcache/arcache USB5
0x328 STRAP_PIN10 USB2 PLL USB4
0x400 STRAP_STATUS0 AXI clock state USB4
0x410 STRAP_STATUS4 AXI clock state USB5
Only STRAP_PIN3 is common to both controllers; every other register is
read or written by one of them. There is no contiguous window that
covers the registers of one controller only, so the two ranges overlap.
The range is mapped with devm_ioremap() instead of
devm_platform_ioremap_resource(): requesting the region would make the
second controller fail with -EBUSY.
Thanks to Krzysztof Kozlowski for the review of the earlier versions.
Changes in v8:
- Fix the example: the USB3 PHY is a single provider shared by both
controllers, so the core node references one phandle. The example
still carried the per-lane two-PHY form that v5 of the PHY series
used. Keep the USB2 PHY reference and describe it as usb-nop-xceiv,
since it needs no configuration.
- Add the vendor prefix to the two board properties: cix,ssp-disable
and cix,u3-port-disable.
- Driver: do not assert the resets in system suspend/resume, and do not
cache the wakeup state; the child device that owns the wakeup
interrupt is asked instead.
- Driver: rewrite shutdown() to use the same teardown as remove(), and
allocate the child platform data with kzalloc() so that
platform_device_release() can free it.
- Driver: only set PS_PME_En when wakeup is requested, and return
-ETIMEDOUT when the controller does not reach D3 or does not leave
it.
Changes in v7:
- Describe the RCSU registers of each controller as one address range
starting at its AXI cache attribute register, instead of two 16-byte
register slots, and drop the reg-names property.
- Map that range with devm_ioremap(); request_mem_region() cannot be
used because the two Type-A controllers share the block and their
ranges overlap.
- Take the offset of the AXI clock status register from per-compatible
driver data (0xec on Type-A, 0xf0 on Type-C), instead of two
reg-names.
- Dropped #syscon-cells from the S5 system controller binding: the
property does not exist in the kernel, and the series no longer
touches bindings/soc/cix.
- Removed the arm64 dts from the series: it is a separate SoC patchset.
Changes in v6:
- Dropped the simple-bus RCSU container; each node is placed at the
address of its glue registers and the core is a child at its own
address.
- Replaced the usbN aliases and the undocumented id property with the
register offset and bit position arguments of cix,usb-syscon.
- Converted probe error paths to dev_err_probe().
- Removed the unused over-current GPIO handling and the unused dr_base
and cdnsp_pdev fields.
- Fixed the 125us prescaler value: time * frequency - 1.
- Made the AXI halt writes read-modify-write so the preserved and RW1C
bits of XEC_AXI_CAP keep their state.
Changes in v5:
- Dropped the cix,sky1-usbss-rcsu syscon binding and the cix,usb-rcsu
phandle; the glue registers are described in the controller node.
- Added the MAINTAINERS entry for the glue driver.
Changes in v4:
- Split the combined PHY/USBSSP series into two independent series.
- Restructured the RCSU registers as a shared syscon region with offsets
(reverted in v5).
- Fixed the indentation reported by checkpatch.
Changes in v3:
- Fixed the interrupt specifiers of the core nodes: the Sky1 GICv3 uses
four cells, so every entry needs the fourth (empty) cell.
- PHY driver: assert the resets before registering the PHY provider,
disable clocks in LIFO order, and fix the error unroll path so clocks
that were never enabled are not disabled.
Changes in v2:
- Split the single binding into a PHY binding and a USBSSP binding.
- clock-names: apb/ref for the PHY, sof/axi/lpm/apb for the controller.
- reset-names: core/apb instead of reset/preset.
- Dropped axi_bmax_value from DT; it is a driver constant.
- Added the MAINTAINERS entries.
Changes in v1: initial version.
Hongliang Yang (2):
dt-bindings: usb: Add CIX Sky1 USBSSP controller
usb: cdns3: Add CIX Sky1 glue driver
.../bindings/usb/cix,sky1-usbssp.yaml | 163 +++++
MAINTAINERS | 2 +
drivers/usb/cdns3/Kconfig | 13 +
drivers/usb/cdns3/Makefile | 1 +
drivers/usb/cdns3/cdnsp-sky1.c | 663 ++++++++++++++++++
drivers/usb/cdns3/cdnsp-sky1.h | 99 +++
6 files changed, 941 insertions(+)
create mode 100644 Documentation/devicetree/bindings/usb/cix,sky1-usbssp.yaml
create mode 100644 drivers/usb/cdns3/cdnsp-sky1.c
create mode 100644 drivers/usb/cdns3/cdnsp-sky1.h
--
2.54.0
next reply other threads:[~2026-11-12 2:21 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-12 2:21 Hongliang Yang [this message]
2026-11-12 2:21 ` [PATCH v8 1/2] dt-bindings: usb: Add CIX Sky1 USBSSP controller Hongliang Yang
2026-11-12 2:21 ` [PATCH v8 2/2] usb: cdns3: Add CIX Sky1 glue driver Hongliang Yang
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=20261112022141.4136099-1-hongliang.yang@cixtech.com \
--to=hongliang.yang@cixtech.com \
--cc=Gary.Yang@cixtech.com \
--cc=cix-kernel-upstream@cixtech.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=fugang.duan@cixtech.com \
--cc=gregkh@linuxfoundation.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=p.zabel@pengutronix.de \
--cc=pawell@cadence.com \
--cc=peter.chen@kernel.org \
--cc=robh@kernel.org \
--cc=rogerq@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®