summaryrefslogtreecommitdiffstats
path: root/dts/Bindings/mfd/aspeed-lpc.yaml
blob: 750996d9a1757415aee7d569d78932ffef0ed615 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
# # Copyright (c) 2021 Aspeed Tehchnology Inc.
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/aspeed-lpc.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Aspeed Low Pin Count (LPC) Bus Controller

maintainers:
  - Andrew Jeffery <andrew@aj.id.au>
  - Chia-Wei Wang <chiawei_wang@aspeedtech.com>

description:
  The LPC bus is a means to bridge a host CPU to a number of low-bandwidth
  peripheral devices, replacing the use of the ISA bus in the age of PCI[0]. The
  primary use case of the Aspeed LPC controller is as a slave on the bus
  (typically in a Baseboard Management Controller SoC), but under certain
  conditions it can also take the role of bus master.

  The LPC controller is represented as a multi-function device to account for the
  mix of functionality, which includes, but is not limited to

  * An IPMI Block Transfer[2] Controller

  * An LPC Host Interface Controller manages functions exposed to the host such
    as LPC firmware hub cycles, configuration of the LPC-to-AHB mapping, UART
    management and bus snoop configuration.

  * A set of SuperIO[3] scratch registers enableing implementation of e.g. custom
    hardware management protocols for handover between the host and baseboard
    management controller.

  Additionally the state of the LPC controller influences the pinmux
  configuration, therefore the host portion of the controller is exposed as a
  syscon as a means to arbitrate access.

properties:
  compatible:
    items:
      - enum:
          - aspeed,ast2400-lpc-v2
          - aspeed,ast2500-lpc-v2
          - aspeed,ast2600-lpc-v2
      - const: simple-mfd
      - const: syscon

  reg:
    maxItems: 1

  "#address-cells":
    const: 1

  "#size-cells":
    const: 1

  ranges: true

patternProperties:
  "^lpc-ctrl@[0-9a-f]+$":
    type: object
    additionalProperties: false

    description: |
      The LPC Host Interface Controller manages functions exposed to the host such as
      LPC firmware hub cycles, configuration of the LPC-to-AHB mapping, UART management
      and bus snoop configuration.

    properties:
      compatible:
        items:
          - enum:
              - aspeed,ast2400-lpc-ctrl
              - aspeed,ast2500-lpc-ctrl
              - aspeed,ast2600-lpc-ctrl

      reg:
        maxItems: 1

      clocks:
        maxItems: 1

      memory-region:
        maxItems: 1
        description: handle to memory reservation for the LPC to AHB mapping region

      flash:
        $ref: /schemas/types.yaml#/definitions/phandle
        description: The SPI flash controller containing the flash to be exposed over the LPC to AHB mapping

    required:
      - compatible
      - clocks

  "^reset-controller@[0-9a-f]+$":
    type: object
    additionalProperties: false

    description:
      The UARTs present in the ASPEED SoC can have their resets tied to the reset
      state of the LPC bus. Some systems may chose to modify this configuration

    properties:
      compatible:
        items:
          - enum:
              - aspeed,ast2400-lpc-reset
              - aspeed,ast2500-lpc-reset
              - aspeed,ast2600-lpc-reset

      reg:
        maxItems: 1

      '#reset-cells':
        const: 1

    required:
      - compatible
      - '#reset-cells'

  "^lpc-snoop@[0-9a-f]+$":
    type: object
    additionalProperties: false

    description:
      The LPC snoop interface allows the BMC to listen on and record the data
      bytes written by the Host to the targeted LPC I/O pots.

    properties:
      compatible:
        items:
          - enum:
              - aspeed,ast2400-lpc-snoop
              - aspeed,ast2500-lpc-snoop
              - aspeed,ast2600-lpc-snoop

      reg:
        maxItems: 1

      interrupts:
        maxItems: 1

      snoop-ports:
        $ref: /schemas/types.yaml#/definitions/uint32-array
        description: The LPC I/O ports to snoop

    required:
      - compatible
      - interrupts
      - snoop-ports

  "^uart-routing@[0-9a-f]+$":
    $ref: /schemas/soc/aspeed/uart-routing.yaml#
    description: The UART routing control under LPC register space

required:
  - compatible
  - reg
  - "#address-cells"
  - "#size-cells"
  - ranges

additionalProperties:
  type: object

examples:
  - |
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/clock/ast2600-clock.h>

    lpc: lpc@1e789000 {
        compatible = "aspeed,ast2600-lpc-v2", "simple-mfd", "syscon";
        reg = <0x1e789000 0x1000>;

        #address-cells = <1>;
        #size-cells = <1>;
        ranges = <0x0 0x1e789000 0x1000>;

        lpc_ctrl: lpc-ctrl@80 {
            compatible = "aspeed,ast2600-lpc-ctrl";
            reg = <0x80 0x80>;
            clocks = <&syscon ASPEED_CLK_GATE_LCLK>;
            memory-region = <&flash_memory>;
            flash = <&spi>;
        };

        lpc_reset: reset-controller@98 {
            compatible = "aspeed,ast2600-lpc-reset";
            reg = <0x98 0x4>;
            #reset-cells = <1>;
        };

        lpc_snoop: lpc-snoop@90 {
            compatible = "aspeed,ast2600-lpc-snoop";
            reg = <0x90 0x8>;
            interrupts = <GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH>;
            snoop-ports = <0x80>;
        };
    };