RE: [PATCH v3 0/5] soc: samsung: Add USI driver
From: Chanho Park <hidden>
Date: 2021-12-08 09:16:09
Also in:
linux-arm-kernel, linux-samsung-soc, linux-serial, lkml
Hi,
-----Original Message-----
From: Sam Protsenko <semen.protsenko@linaro.org>
Sent: Sunday, December 5, 2021 4:58 AM
To: Krzysztof Kozlowski <redacted>; Rob Herring
[off-list ref]; Greg Kroah-Hartman [off-list ref]
Cc: Jaewon Kim <redacted>; Chanho Park
[off-list ref]; David Virag [off-list ref];
Youngmin Nam [off-list ref]; devicetree@vger.kernel.org;
linux-serial@vger.kernel.org; linux-arm-kernel@lists.infradead.org; linux-
kernel@vger.kernel.org; linux-samsung-soc@vger.kernel.org
Subject: [PATCH v3 0/5] soc: samsung: Add USI driver
USIv2 IP-core provides selectable serial protocol (UART, SPI or High-Speed
I2C); only one can be chosen at a time. This series implements USIv2
driver, which allows one to select particular USI function in device tree,
and also performs USI block initialization.
With that driver implemented, it's not needed to do USI initialization in
protocol drivers anymore, so that code is removed from the serial driver.
Because USI driver is tristate (can be built as a module), serial driver
was reworked so it's possible to use its console part as a module too.
This way we can load serial driver module from user space and still have
serial console functional.
Design features:
- "reg" property contains USI registers start address (0xc0 offset);
it's used in the driver to access USI_CON and USI_OPTION registers.
This way all USI initialization (reset, HWACG, etc) can be done in
USIv2 driver separately, rather than duplicating that code over
UART/SPI/I2C drivers
- System Register (system controller node) and its SW_CONF register
offset are provided in "samsung,sysreg" property; it's used to
select USI function (protocol to be used)
- USI function is specified in "samsung,mode" property; integer value
is used to simplify parsing
- there is "samsung,clkreq-on" bool property, which makes driver
disable HWACG control (needed for UART to work properly)
- PCLK and IPCLK clocks are both provided to USI node; apparently both
need to be enabled to access USI registers
- protocol nodes are embedded (as a child nodes) in USI node; it
allows correct init order, and reflects HW properly
- USI driver is a tristate: can be also useful from Android GKI
requirements point of view
- driver functions are implemented with further development in mind:
- we might want to add some DebugFs interface later
- some functions might need to be revealed to serial drivers with
EXPORT_SYMBOL(), and provide somehow pointer to needed USI driver
instance
- another USI revisions could be added (like USIv1)
Changes in v3:
- Renamed compatible from samsung,exynos-usi-v2 to samsung,exynos850-usi
- Used clk_bulk API instead of handling each clock separately
- Spell check fixes and coding style fixes
- Improved dt-bindings doc
Changes in v2:
- Renamed all 'usi_v2' wording to just 'usi' everywhere
- Removed patches adding dependency on EXYNOS_USI for UART/I2C/SPI
drivers
- Added patch: "tty: serial: samsung: Fix console registration from
module"
- Combined dt-bindings doc and dt-bindings header patches
- Reworked USI driver to be ready for USIv1 addition
- Improved dt-bindings
- Added USI_V2_NONE mode value
Sam Protsenko (5):
dt-bindings: soc: samsung: Add Exynos USI bindings
soc: samsung: Add USI driver
tty: serial: samsung: Remove USI initialization
tty: serial: samsung: Enable console as module
tty: serial: samsung: Fix console registration from moduleTested-by: Chanho Park <redacted> with below patch. https://lore.kernel.org/linux-samsung-soc/20211208003946.139423-1-chanho61.p ark@samsung.com/T/#u Thanks. Best Regards, Chanho Park