1f6e759907
commit 09812134071b3941fb81def30b61ed36d3a5dfb5 upstream.
The 8250 binding before converting to json-schema states,
- clock-frequency : the input clock frequency for the UART
or
- clocks phandle to refer to the clk used as per Documentation/devicetree
for clock-related properties, where "or" indicates these properties
shouldn't exist at the same time.
Additionally, the behavior of Linux's driver is strange when both clocks
and clock-frequency are specified: it ignores clocks and obtains the
frequency from clock-frequency, left the specified clocks unclaimed. It
may even be disabled, which is undesired most of the time.
But "anyOf" doesn't prevent these two properties from coexisting, as it
considers the object valid as long as there's at LEAST one match.
Let's switch to "oneOf" and disallows the other property if one exists,
precisely matching the original binding and avoiding future confusion on
the driver's behavior.
Fixes: e69f5dc623 ("dt-bindings: serial: Convert 8250 to json-schema")
Cc: stable <stable@kernel.org>
Signed-off-by: Yao Zi <ziyao@disroot.org>
Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
Link: https://lore.kernel.org/r/20250623093445.62327-1-ziyao@disroot.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
265 lines
6.9 KiB
YAML
265 lines
6.9 KiB
YAML
# Copyright 2020 Lubomir Rintel <lkundrak@v3.sk>
|
|
%YAML 1.2
|
|
---
|
|
$id: http://devicetree.org/schemas/serial/8250.yaml#
|
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
|
|
|
title: UART (Universal Asynchronous Receiver/Transmitter)
|
|
|
|
maintainers:
|
|
- devicetree@vger.kernel.org
|
|
|
|
allOf:
|
|
- $ref: serial.yaml#
|
|
- $ref: /schemas/memory-controllers/mc-peripheral-props.yaml#
|
|
- if:
|
|
anyOf:
|
|
- required:
|
|
- aspeed,lpc-io-reg
|
|
- required:
|
|
- aspeed,lpc-interrupts
|
|
- required:
|
|
- aspeed,sirq-polarity-sense
|
|
then:
|
|
properties:
|
|
compatible:
|
|
const: aspeed,ast2500-vuart
|
|
- if:
|
|
properties:
|
|
compatible:
|
|
const: mrvl,mmp-uart
|
|
then:
|
|
properties:
|
|
reg-shift:
|
|
const: 2
|
|
required:
|
|
- reg-shift
|
|
- if:
|
|
not:
|
|
properties:
|
|
compatible:
|
|
items:
|
|
- enum:
|
|
- ns8250
|
|
- ns16450
|
|
- ns16550
|
|
- ns16550a
|
|
then:
|
|
oneOf:
|
|
- required: [ clock-frequency ]
|
|
- required: [ clocks ]
|
|
|
|
properties:
|
|
compatible:
|
|
oneOf:
|
|
- const: ns8250
|
|
- const: ns16450
|
|
- const: ns16550
|
|
- const: ns16550a
|
|
- const: ns16850
|
|
- const: aspeed,ast2400-vuart
|
|
- const: aspeed,ast2500-vuart
|
|
- const: intel,xscale-uart
|
|
- const: mrvl,pxa-uart
|
|
- const: nuvoton,wpcm450-uart
|
|
- const: nuvoton,npcm750-uart
|
|
- const: nvidia,tegra20-uart
|
|
- const: nxp,lpc3220-uart
|
|
- items:
|
|
- enum:
|
|
- exar,xr16l2552
|
|
- exar,xr16l2551
|
|
- exar,xr16l2550
|
|
- const: ns8250
|
|
- items:
|
|
- enum:
|
|
- altr,16550-FIFO32
|
|
- altr,16550-FIFO64
|
|
- altr,16550-FIFO128
|
|
- fsl,16550-FIFO64
|
|
- fsl,ns16550
|
|
- andestech,uart16550
|
|
- nxp,lpc1850-uart
|
|
- opencores,uart16550-rtlsvn105
|
|
- ti,da830-uart
|
|
- const: ns16550a
|
|
- items:
|
|
- enum:
|
|
- ns16750
|
|
- cavium,octeon-3860-uart
|
|
- xlnx,xps-uart16550-2.00.b
|
|
- ralink,rt2880-uart
|
|
- enum:
|
|
- ns16550 # Deprecated, unless the FIFO really is broken
|
|
- ns16550a
|
|
- items:
|
|
- enum:
|
|
- nuvoton,npcm845-uart
|
|
- const: nuvoton,npcm750-uart
|
|
- items:
|
|
- enum:
|
|
- ralink,mt7620a-uart
|
|
- ralink,rt3052-uart
|
|
- ralink,rt3883-uart
|
|
- const: ralink,rt2880-uart
|
|
- enum:
|
|
- ns16550 # Deprecated, unless the FIFO really is broken
|
|
- ns16550a
|
|
- items:
|
|
- enum:
|
|
- mediatek,mt7622-btif
|
|
- mediatek,mt7623-btif
|
|
- const: mediatek,mtk-btif
|
|
- items:
|
|
- const: mrvl,mmp-uart
|
|
- const: intel,xscale-uart
|
|
- items:
|
|
- enum:
|
|
- nvidia,tegra30-uart
|
|
- nvidia,tegra114-uart
|
|
- nvidia,tegra124-uart
|
|
- nvidia,tegra210-uart
|
|
- nvidia,tegra186-uart
|
|
- nvidia,tegra194-uart
|
|
- nvidia,tegra234-uart
|
|
- const: nvidia,tegra20-uart
|
|
|
|
reg:
|
|
maxItems: 1
|
|
|
|
interrupts:
|
|
maxItems: 1
|
|
|
|
clock-frequency: true
|
|
|
|
clocks:
|
|
maxItems: 1
|
|
|
|
resets:
|
|
maxItems: 1
|
|
|
|
current-speed:
|
|
$ref: /schemas/types.yaml#/definitions/uint32
|
|
description: The current active speed of the UART.
|
|
|
|
reg-offset:
|
|
$ref: /schemas/types.yaml#/definitions/uint32
|
|
description: |
|
|
Offset to apply to the mapbase from the start of the registers.
|
|
|
|
reg-shift:
|
|
description: Quantity to shift the register offsets by.
|
|
|
|
reg-io-width:
|
|
description: |
|
|
The size (in bytes) of the IO accesses that should be performed on the
|
|
device. There are some systems that require 32-bit accesses to the
|
|
UART (e.g. TI davinci).
|
|
|
|
used-by-rtas:
|
|
type: boolean
|
|
description: |
|
|
Set to indicate that the port is in use by the OpenFirmware RTAS and
|
|
should not be registered.
|
|
|
|
no-loopback-test:
|
|
type: boolean
|
|
description: |
|
|
Set to indicate that the port does not implement loopback test mode.
|
|
|
|
fifo-size:
|
|
$ref: /schemas/types.yaml#/definitions/uint32
|
|
description: The fifo size of the UART.
|
|
|
|
auto-flow-control:
|
|
type: boolean
|
|
description: |
|
|
One way to enable automatic flow control support. The driver is
|
|
allowed to detect support for the capability even without this
|
|
property.
|
|
|
|
tx-threshold:
|
|
description: |
|
|
Specify the TX FIFO low water indication for parts with programmable
|
|
TX FIFO thresholds.
|
|
|
|
overrun-throttle-ms:
|
|
description: |
|
|
How long to pause uart rx when input overrun is encountered.
|
|
|
|
rts-gpios: true
|
|
cts-gpios: true
|
|
dtr-gpios: true
|
|
dsr-gpios: true
|
|
rng-gpios: true
|
|
dcd-gpios: true
|
|
|
|
aspeed,sirq-polarity-sense:
|
|
$ref: /schemas/types.yaml#/definitions/phandle-array
|
|
description: |
|
|
Phandle to aspeed,ast2500-scu compatible syscon alongside register
|
|
offset and bit number to identify how the SIRQ polarity should be
|
|
configured. One possible data source is the LPC/eSPI mode bit. Only
|
|
applicable to aspeed,ast2500-vuart.
|
|
deprecated: true
|
|
|
|
aspeed,lpc-io-reg:
|
|
$ref: /schemas/types.yaml#/definitions/uint32-array
|
|
maxItems: 1
|
|
description: |
|
|
The VUART LPC address. Only applicable to aspeed,ast2500-vuart.
|
|
|
|
aspeed,lpc-interrupts:
|
|
$ref: /schemas/types.yaml#/definitions/uint32-array
|
|
minItems: 2
|
|
maxItems: 2
|
|
description: |
|
|
A 2-cell property describing the VUART SIRQ number and SIRQ
|
|
polarity (IRQ_TYPE_LEVEL_LOW or IRQ_TYPE_LEVEL_HIGH). Only
|
|
applicable to aspeed,ast2500-vuart.
|
|
|
|
required:
|
|
- reg
|
|
- interrupts
|
|
|
|
unevaluatedProperties: false
|
|
|
|
examples:
|
|
- |
|
|
serial@80230000 {
|
|
compatible = "ns8250";
|
|
reg = <0x80230000 0x100>;
|
|
interrupts = <10>;
|
|
reg-shift = <2>;
|
|
clock-frequency = <48000000>;
|
|
};
|
|
- |
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
serial@49042000 {
|
|
compatible = "andestech,uart16550", "ns16550a";
|
|
reg = <0x49042000 0x400>;
|
|
interrupts = <80>;
|
|
clock-frequency = <48000000>;
|
|
cts-gpios = <&gpio3 5 GPIO_ACTIVE_LOW>;
|
|
rts-gpios = <&gpio3 6 GPIO_ACTIVE_LOW>;
|
|
dtr-gpios = <&gpio1 12 GPIO_ACTIVE_LOW>;
|
|
dsr-gpios = <&gpio1 13 GPIO_ACTIVE_LOW>;
|
|
dcd-gpios = <&gpio1 14 GPIO_ACTIVE_LOW>;
|
|
rng-gpios = <&gpio1 15 GPIO_ACTIVE_LOW>;
|
|
};
|
|
- |
|
|
#include <dt-bindings/clock/aspeed-clock.h>
|
|
#include <dt-bindings/interrupt-controller/irq.h>
|
|
serial@1e787000 {
|
|
compatible = "aspeed,ast2500-vuart";
|
|
reg = <0x1e787000 0x40>;
|
|
reg-shift = <2>;
|
|
interrupts = <8>;
|
|
clocks = <&syscon ASPEED_CLK_APB>;
|
|
no-loopback-test;
|
|
aspeed,lpc-io-reg = <0x3f8>;
|
|
aspeed,lpc-interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
|
|
};
|
|
|
|
...
|