Message ID | 20250105160346.418829-3-ivo.ivanov.ivanov1@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | soc: samsung: usi: implement support for USIv1 | expand |
On Sun, Jan 05, 2025 at 06:03:44PM +0200, Ivaylo Ivanov wrote: > samsung,mode: > $ref: /schemas/types.yaml#/definitions/uint32 > - enum: [0, 1, 2, 3] > + enum: [0, 1, 2, 3, 4, 5, 6] > description: > Selects USI function (which serial protocol to use). Refer to > <include/dt-bindings/soc/samsung,exynos-usi.h> for valid USI mode values. > @@ -101,37 +111,62 @@ required: > - samsung,sysreg > - samsung,mode > > -if: > - properties: > - compatible: > - contains: > - enum: > - - samsung,exynos850-usi > +allOf: > + - if: > + properties: > + compatible: > + contains: > + enum: > + - google,gs101-usi > + - samsung,exynos850-usi > + - samsung,exynosautov9-usi > + - samsung,exynosautov920-usi I made mistake during last review - the binding had a confusing "else" here, but that else was a no-op. All existing compatibles are fallbacked to samsung,exynos850-usi, so previous code "contains: enum: samsung,exynos850-usi" was covering everything. You can drop other variants and keep the original samsung,exynos850-usi only. > + > + then: > + properties: > + reg: > + maxItems: 1 > + > + clocks: > + items: > + - description: Bus (APB) clock > + - description: Operating clock for UART/SPI/I2C protocol > + > + clock-names: > + maxItems: 2 > + > + samsung,mode: > + enum: [0, 1, 2, 3] > + > + required: > + - reg > + - clocks > + - clock-names > + > + - if: > + properties: > + compatible: > + contains: > + enum: > + - samsung,exynos8895-usi I don't see where this compatible is documented. > + > + then: > + properties: > + reg: false > + > + clocks: > + items: > + - description: Bus (APB) clock > + - description: Operating clock for UART/SPI protocol Best regards, Krzysztof
On 1/6/25 08:31, Krzysztof Kozlowski wrote: > On Sun, Jan 05, 2025 at 06:03:44PM +0200, Ivaylo Ivanov wrote: >> samsung,mode: >> $ref: /schemas/types.yaml#/definitions/uint32 >> - enum: [0, 1, 2, 3] >> + enum: [0, 1, 2, 3, 4, 5, 6] >> description: >> Selects USI function (which serial protocol to use). Refer to >> <include/dt-bindings/soc/samsung,exynos-usi.h> for valid USI mode values. >> @@ -101,37 +111,62 @@ required: >> - samsung,sysreg >> - samsung,mode >> >> -if: >> - properties: >> - compatible: >> - contains: >> - enum: >> - - samsung,exynos850-usi >> +allOf: >> + - if: >> + properties: >> + compatible: >> + contains: >> + enum: >> + - google,gs101-usi >> + - samsung,exynos850-usi >> + - samsung,exynosautov9-usi >> + - samsung,exynosautov920-usi > I made mistake during last review - the binding had a confusing "else" > here, but that else was a no-op. All existing compatibles are fallbacked > to samsung,exynos850-usi, so previous code "contains: enum: > samsung,exynos850-usi" was covering everything. > > You can drop other variants and keep the original samsung,exynos850-usi > only. Yeah I thought so too. It's fine, will fix in the next revision. > >> + >> + then: >> + properties: >> + reg: >> + maxItems: 1 >> + >> + clocks: >> + items: >> + - description: Bus (APB) clock >> + - description: Operating clock for UART/SPI/I2C protocol >> + >> + clock-names: >> + maxItems: 2 >> + >> + samsung,mode: >> + enum: [0, 1, 2, 3] >> + >> + required: >> + - reg >> + - clocks >> + - clock-names >> + >> + - if: >> + properties: >> + compatible: >> + contains: >> + enum: >> + - samsung,exynos8895-usi > I don't see where this compatible is documented. Right, ommited that. Yet dtbs_check W=1 still didn't catch that. Thanks for the feedback! Best regards, Ivaylo > >> + >> + then: >> + properties: >> + reg: false >> + >> + clocks: >> + items: >> + - description: Bus (APB) clock >> + - description: Operating clock for UART/SPI protocol > Best regards, > Krzysztof >
diff --git a/Documentation/devicetree/bindings/soc/samsung/exynos-usi.yaml b/Documentation/devicetree/bindings/soc/samsung/exynos-usi.yaml index cc92a06a3..d6c39c3e3 100644 --- a/Documentation/devicetree/bindings/soc/samsung/exynos-usi.yaml +++ b/Documentation/devicetree/bindings/soc/samsung/exynos-usi.yaml @@ -11,11 +11,21 @@ maintainers: - Krzysztof Kozlowski <krzk@kernel.org> description: | - USI IP-core provides selectable serial protocol (UART, SPI or High-Speed I2C). - USI shares almost all internal circuits within each protocol, so only one - protocol can be chosen at a time. USI is modeled as a node with zero or more - child nodes, each representing a serial sub-node device. The mode setting - selects which particular function will be used. + The USI IP-core provides configurable support for serial protocols, enabling + different serial communication modes depending on the version. + + In USIv1, configurations are available to enable either one or two protocols + simultaneously in select combinations - High-Speed I2C0, High-Speed + I2C1, SPI, UART, High-Speed I2C0 and I2C1 or both High-Speed + I2C1 and UART. + + In USIv2, only one protocol can be active at a time, either UART, SPI, or + High-Speed I2C. + + The USI core shares internal circuits across protocols, meaning only the + selected configuration is active at any given time. USI is modeled as a node + with zero or more child nodes, each representing a serial sub-node device. The + mode setting selects which particular function will be used. properties: $nodename: @@ -64,7 +74,7 @@ properties: samsung,mode: $ref: /schemas/types.yaml#/definitions/uint32 - enum: [0, 1, 2, 3] + enum: [0, 1, 2, 3, 4, 5, 6] description: Selects USI function (which serial protocol to use). Refer to <include/dt-bindings/soc/samsung,exynos-usi.h> for valid USI mode values. @@ -101,37 +111,62 @@ required: - samsung,sysreg - samsung,mode -if: - properties: - compatible: - contains: - enum: - - samsung,exynos850-usi +allOf: + - if: + properties: + compatible: + contains: + enum: + - google,gs101-usi + - samsung,exynos850-usi + - samsung,exynosautov9-usi + - samsung,exynosautov920-usi + + then: + properties: + reg: + maxItems: 1 + + clocks: + items: + - description: Bus (APB) clock + - description: Operating clock for UART/SPI/I2C protocol + + clock-names: + maxItems: 2 + + samsung,mode: + enum: [0, 1, 2, 3] + + required: + - reg + - clocks + - clock-names + + - if: + properties: + compatible: + contains: + enum: + - samsung,exynos8895-usi + + then: + properties: + reg: false + + clocks: + items: + - description: Bus (APB) clock + - description: Operating clock for UART/SPI protocol + + clock-names: + maxItems: 2 + + samsung,clkreq-on: false -then: - properties: - reg: - maxItems: 1 - - clocks: - items: - - description: Bus (APB) clock - - description: Operating clock for UART/SPI/I2C protocol - - clock-names: - maxItems: 2 - - required: - - reg - - clocks - - clock-names - -else: - properties: - reg: false - clocks: false - clock-names: false - samsung,clkreq-on: false + required: + - clocks + - clock-names additionalProperties: false diff --git a/include/dt-bindings/soc/samsung,exynos-usi.h b/include/dt-bindings/soc/samsung,exynos-usi.h index b7c1406f3..aab28176c 100644 --- a/include/dt-bindings/soc/samsung,exynos-usi.h +++ b/include/dt-bindings/soc/samsung,exynos-usi.h @@ -13,5 +13,8 @@ #define USI_MODE_UART 1 #define USI_MODE_SPI 2 #define USI_MODE_I2C 3 +#define USI_MODE_I2C1 4 +#define USI_MODE_I2C0_1 5 +#define USI_MODE_UART_I2C1 6 #endif /* __DT_BINDINGS_SAMSUNG_EXYNOS_USI_H */
Add new constants for choosing the additional USIv1 configuration modes in device tree. Those are further used in the USI driver to figure out which value to write into SW_CONF register. Modify the current USI IP-core bindings to include information about USIv1 and a compatible for exynos8895. Signed-off-by: Ivaylo Ivanov <ivo.ivanov.ivanov1@gmail.com> --- .../bindings/soc/samsung/exynos-usi.yaml | 107 ++++++++++++------ include/dt-bindings/soc/samsung,exynos-usi.h | 3 + 2 files changed, 74 insertions(+), 36 deletions(-)