162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
262306a36Sopenharmony_ci# Copyright (C) 2022 Microchip Technology, Inc. and its subsidiaries
362306a36Sopenharmony_ci%YAML 1.2
462306a36Sopenharmony_ci---
562306a36Sopenharmony_ci$id: http://devicetree.org/schemas/serial/atmel,at91-usart.yaml#
662306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
762306a36Sopenharmony_ci
862306a36Sopenharmony_cititle: Atmel Universal Synchronous Asynchronous Receiver/Transmitter (USART)
962306a36Sopenharmony_ci
1062306a36Sopenharmony_cimaintainers:
1162306a36Sopenharmony_ci  - Richard Genoud <richard.genoud@gmail.com>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ciproperties:
1462306a36Sopenharmony_ci  compatible:
1562306a36Sopenharmony_ci    oneOf:
1662306a36Sopenharmony_ci      - enum:
1762306a36Sopenharmony_ci          - atmel,at91rm9200-usart
1862306a36Sopenharmony_ci          - atmel,at91sam9260-usart
1962306a36Sopenharmony_ci      - items:
2062306a36Sopenharmony_ci          - const: atmel,at91rm9200-dbgu
2162306a36Sopenharmony_ci          - const: atmel,at91rm9200-usart
2262306a36Sopenharmony_ci      - items:
2362306a36Sopenharmony_ci          - const: atmel,at91sam9260-dbgu
2462306a36Sopenharmony_ci          - const: atmel,at91sam9260-usart
2562306a36Sopenharmony_ci      - items:
2662306a36Sopenharmony_ci          - const: microchip,sam9x60-usart
2762306a36Sopenharmony_ci          - const: atmel,at91sam9260-usart
2862306a36Sopenharmony_ci      - items:
2962306a36Sopenharmony_ci          - const: microchip,sam9x60-dbgu
3062306a36Sopenharmony_ci          - const: microchip,sam9x60-usart
3162306a36Sopenharmony_ci          - const: atmel,at91sam9260-dbgu
3262306a36Sopenharmony_ci          - const: atmel,at91sam9260-usart
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci  reg:
3562306a36Sopenharmony_ci    maxItems: 1
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci  interrupts:
3862306a36Sopenharmony_ci    maxItems: 1
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci  clock-names:
4162306a36Sopenharmony_ci    minItems: 1
4262306a36Sopenharmony_ci    items:
4362306a36Sopenharmony_ci      - const: usart
4462306a36Sopenharmony_ci      - const: gclk
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci  clocks:
4762306a36Sopenharmony_ci    minItems: 1
4862306a36Sopenharmony_ci    items:
4962306a36Sopenharmony_ci      - description: USART Peripheral Clock
5062306a36Sopenharmony_ci      - description: USART Generic Clock
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci  dmas:
5362306a36Sopenharmony_ci    items:
5462306a36Sopenharmony_ci      - description: TX DMA Channel
5562306a36Sopenharmony_ci      - description: RX DMA Channel
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci  dma-names:
5862306a36Sopenharmony_ci    items:
5962306a36Sopenharmony_ci      - const: tx
6062306a36Sopenharmony_ci      - const: rx
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci  atmel,usart-mode:
6362306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
6462306a36Sopenharmony_ci    description:
6562306a36Sopenharmony_ci      Must be either <AT91_USART_MODE_SPI> for SPI or
6662306a36Sopenharmony_ci      <AT91_USART_MODE_SERIAL> for USART (found in dt-bindings/mfd/at91-usart.h).
6762306a36Sopenharmony_ci    enum: [ 0, 1 ]
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci  atmel,use-dma-rx:
7062306a36Sopenharmony_ci    type: boolean
7162306a36Sopenharmony_ci    description: use of PDC or DMA for receiving data
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ci  atmel,use-dma-tx:
7462306a36Sopenharmony_ci    type: boolean
7562306a36Sopenharmony_ci    description: use of PDC or DMA for transmitting data
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci  atmel,fifo-size:
7862306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
7962306a36Sopenharmony_ci    description:
8062306a36Sopenharmony_ci      Maximum number of data the RX and TX FIFOs can store for FIFO
8162306a36Sopenharmony_ci      capable USARTS.
8262306a36Sopenharmony_ci    enum: [ 16, 32 ]
8362306a36Sopenharmony_ci
8462306a36Sopenharmony_cirequired:
8562306a36Sopenharmony_ci  - compatible
8662306a36Sopenharmony_ci  - reg
8762306a36Sopenharmony_ci  - interrupts
8862306a36Sopenharmony_ci  - clock-names
8962306a36Sopenharmony_ci  - clocks
9062306a36Sopenharmony_ci  - atmel,usart-mode
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ciallOf:
9362306a36Sopenharmony_ci  - if:
9462306a36Sopenharmony_ci      properties:
9562306a36Sopenharmony_ci        atmel,usart-mode:
9662306a36Sopenharmony_ci          const: 1
9762306a36Sopenharmony_ci    then:
9862306a36Sopenharmony_ci      allOf:
9962306a36Sopenharmony_ci        - $ref: /schemas/spi/spi-controller.yaml#
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ci      properties:
10262306a36Sopenharmony_ci        atmel,use-dma-rx: false
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ci        atmel,use-dma-tx: false
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ci        atmel,fifo-size: false
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci        "#size-cells":
10962306a36Sopenharmony_ci          const: 0
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_ci        "#address-cells":
11262306a36Sopenharmony_ci          const: 1
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci      required:
11562306a36Sopenharmony_ci        - "#size-cells"
11662306a36Sopenharmony_ci        - "#address-cells"
11762306a36Sopenharmony_ci
11862306a36Sopenharmony_ci    else:
11962306a36Sopenharmony_ci      allOf:
12062306a36Sopenharmony_ci        - $ref: /schemas/serial/serial.yaml#
12162306a36Sopenharmony_ci        - $ref: /schemas/serial/rs485.yaml#
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ciunevaluatedProperties: false
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_ciexamples:
12662306a36Sopenharmony_ci  - |
12762306a36Sopenharmony_ci    #include <dt-bindings/gpio/gpio.h>
12862306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/irq.h>
12962306a36Sopenharmony_ci    #include <dt-bindings/mfd/at91-usart.h>
13062306a36Sopenharmony_ci    #include <dt-bindings/dma/at91.h>
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ci    /* use PDC */
13362306a36Sopenharmony_ci    usart0: serial@fff8c000 {
13462306a36Sopenharmony_ci        compatible = "atmel,at91sam9260-usart";
13562306a36Sopenharmony_ci        reg = <0xfff8c000 0x4000>;
13662306a36Sopenharmony_ci        atmel,usart-mode = <AT91_USART_MODE_SERIAL>;
13762306a36Sopenharmony_ci        interrupts = <7>;
13862306a36Sopenharmony_ci        clocks = <&usart0_clk>;
13962306a36Sopenharmony_ci        clock-names = "usart";
14062306a36Sopenharmony_ci        atmel,use-dma-rx;
14162306a36Sopenharmony_ci        atmel,use-dma-tx;
14262306a36Sopenharmony_ci        rts-gpios = <&pioD 15 GPIO_ACTIVE_LOW>;
14362306a36Sopenharmony_ci        cts-gpios = <&pioD 16 GPIO_ACTIVE_LOW>;
14462306a36Sopenharmony_ci        dtr-gpios = <&pioD 17 GPIO_ACTIVE_LOW>;
14562306a36Sopenharmony_ci        dsr-gpios = <&pioD 18 GPIO_ACTIVE_LOW>;
14662306a36Sopenharmony_ci        dcd-gpios = <&pioD 20 GPIO_ACTIVE_LOW>;
14762306a36Sopenharmony_ci        rng-gpios = <&pioD 19 GPIO_ACTIVE_LOW>;
14862306a36Sopenharmony_ci    };
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_ci  - |
15162306a36Sopenharmony_ci    #include <dt-bindings/gpio/gpio.h>
15262306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/irq.h>
15362306a36Sopenharmony_ci    #include <dt-bindings/mfd/at91-usart.h>
15462306a36Sopenharmony_ci    #include <dt-bindings/dma/at91.h>
15562306a36Sopenharmony_ci
15662306a36Sopenharmony_ci    /* use DMA */
15762306a36Sopenharmony_ci    usart1: serial@f001c000 {
15862306a36Sopenharmony_ci        compatible = "atmel,at91sam9260-usart";
15962306a36Sopenharmony_ci        reg = <0xf001c000 0x100>;
16062306a36Sopenharmony_ci        atmel,usart-mode = <AT91_USART_MODE_SERIAL>;
16162306a36Sopenharmony_ci        interrupts = <12 IRQ_TYPE_LEVEL_HIGH 5>;
16262306a36Sopenharmony_ci        clocks = <&usart0_clk>;
16362306a36Sopenharmony_ci        clock-names = "usart";
16462306a36Sopenharmony_ci        atmel,use-dma-rx;
16562306a36Sopenharmony_ci        atmel,use-dma-tx;
16662306a36Sopenharmony_ci        dmas = <&dma0 2 AT91_DMA_CFG_PER_ID(3)>,
16762306a36Sopenharmony_ci               <&dma0 2 (AT91_DMA_CFG_PER_ID(4) | AT91_DMA_CFG_FIFOCFG_ASAP)>;
16862306a36Sopenharmony_ci        dma-names = "tx", "rx";
16962306a36Sopenharmony_ci        atmel,fifo-size = <32>;
17062306a36Sopenharmony_ci    };
17162306a36Sopenharmony_ci
17262306a36Sopenharmony_ci  - |
17362306a36Sopenharmony_ci    #include <dt-bindings/gpio/gpio.h>
17462306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/irq.h>
17562306a36Sopenharmony_ci    #include <dt-bindings/mfd/at91-usart.h>
17662306a36Sopenharmony_ci    #include <dt-bindings/dma/at91.h>
17762306a36Sopenharmony_ci
17862306a36Sopenharmony_ci    /* SPI mode */
17962306a36Sopenharmony_ci    spi0: spi@f001c000 {
18062306a36Sopenharmony_ci        compatible = "atmel,at91sam9260-usart";
18162306a36Sopenharmony_ci        reg = <0xf001c000 0x100>;
18262306a36Sopenharmony_ci        #address-cells = <1>;
18362306a36Sopenharmony_ci        #size-cells = <0>;
18462306a36Sopenharmony_ci        atmel,usart-mode = <AT91_USART_MODE_SPI>;
18562306a36Sopenharmony_ci        interrupts = <12 IRQ_TYPE_LEVEL_HIGH 5>;
18662306a36Sopenharmony_ci        clocks = <&usart0_clk>;
18762306a36Sopenharmony_ci        clock-names = "usart";
18862306a36Sopenharmony_ci        dmas = <&dma0 2 AT91_DMA_CFG_PER_ID(3)>,
18962306a36Sopenharmony_ci               <&dma0 2 (AT91_DMA_CFG_PER_ID(4) | AT91_DMA_CFG_FIFOCFG_ASAP)>;
19062306a36Sopenharmony_ci        dma-names = "tx", "rx";
19162306a36Sopenharmony_ci        cs-gpios = <&pioB 3 GPIO_ACTIVE_HIGH>;
19262306a36Sopenharmony_ci    };
193