blob: 78dc9a74dfc5af1329e66e784abad5836817cd0a [file] [log] [blame]
Simon Glass18d4a112024-10-23 15:20:12 +02001/** @file
2 *
3 * [DSDT] Serial devices (UART).
4 *
5 * Copyright (c) 2021, ARM Limited. All rights reserved.
6 * Copyright (c) 2020, Pete Batard <pete@akeo.ie>
7 * Copyright (c) 2018, Andrey Warkentin <andrey.warkentin@gmail.com>
8 * Copyright (c) Microsoft Corporation. All rights reserved.
9 *
10 * SPDX-License-Identifier: BSD-2-Clause-Patent
11 *
12 **/
13
14#include <asm/arch/acpi/bcm2836.h>
15
16#include "acpitables.h"
17
18// PL011 based UART.
19Device (URT0)
20{
21 Name (_HID, "BCM2837")
22 Name (_CID, "ARMH0011")
23 Name (_UID, 0x4)
24 Name (_CCA, 0x0)
25
26 Name (RBUF, ResourceTemplate ()
27 {
28 MEMORY32FIXED (ReadWrite, 0, BCM2836_PL011_UART_LENGTH, RMEM)
29 Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive) { BCM2836_PL011_UART_INTERRUPT }
30 })
31 Method (_CRS, 0x0, Serialized)
32 {
33 MEMORY32SETBASE (RBUF, RMEM, RBAS, BCM2836_PL011_UART_OFFSET)
34 Return (^RBUF)
35 }
36
37 Name (CLCK, 48000000)
38
39 Name (_DSD, Package ()
40 {
41 ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package ()
42 {
43 Package (2) { "clock-frequency", CLCK },
44 }
45 })
46}
47
48//
49// UART Mini.
50//
51// This device is referenced in the DBG2 table, which will cause the system to
52// not start the driver when the debugger is enabled and to mark the device
53// with problem code 53 (CM_PROB_USED_BY_DEBUGGER).
54//
55
56Device (URTM)
57{
58 Name (_HID, "BCM2836")
59 Name (_CID, "BCM2836")
60 Name (_UID, 0x0)
61 Name (_CCA, 0x0)
62
63 Name (RBUF, ResourceTemplate ()
64 {
65 MEMORY32FIXED (ReadWrite, 0, BCM2836_MINI_UART_LENGTH, RMEM)
66 Interrupt(ResourceConsumer, Level, ActiveHigh, Shared) { BCM2836_MINI_UART_INTERRUPT }
67
68 })
69 Method (_CRS, 0x0, Serialized)
70 {
71 MEMORY32SETBASE (RBUF, RMEM, RBAS, BCM2836_MINI_UART_OFFSET)
72 Return (^RBUF)
73 }
74
75 //
76 // Mini Uart Clock Rate will be dynamically updated during boot
77 //
78 External (\_SB.URTM.MUCR, IntObj)
79
80 Name (_DSD, Package ()
81 {
82 ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package ()
83 {
84 Package (2) { "clock-frequency", MUCR },
85 }
86 })
87}
88
89//
90// Multifunction serial bus device to support Bluetooth function.
91//
92Device(BTH0)
93{
94 Name (_HID, "BCM2EA6")
95 Name (_CID, "BCM2EA6")
96
97 //
98 // UART In Use will be dynamically updated during boot
99 //
100 External (\_SB.BTH0.URIU, IntObj)
101
102 Method (_STA)
103 {
104 Return (0xf)
105 }
106
107 //
108 // Resource for URT0 (PL011)
109 //
110 Name (BTPL, ResourceTemplate ()
111 {
112 UARTSerialBus(
113 115200, // InitialBaudRate: in BPS
114 , // BitsPerByte: default to 8 bits
115 , // StopBits: Defaults to one bit
116 0x00, // LinesInUse: 8 1-bit flags to
117 // declare enabled control lines.
118 // Raspberry Pi does not exposed
119 // HW control signals -> not supported.
120 // Optional bits:
121 // - Bit 7 (0x80) Request To Send (RTS)
122 // - Bit 6 (0x40) Clear To Send (CTS)
123 // - Bit 5 (0x20) Data Terminal Ready (DTR)
124 // - Bit 4 (0x10) Data Set Ready (DSR)
125 // - Bit 3 (0x08) Ring Indicator (RI)
126 // - Bit 2 (0x04) Data Carrier Detect (DTD)
127 // - Bit 1 (0x02) Reserved. Must be 0.
128 // - Bit 0 (0x01) Reserved. Must be 0.
129 , // IsBigEndian:
130 // default to LittleEndian.
131 , // Parity: Defaults to no parity
132 , // FlowControl: Defaults to
133 // no flow control.
134 16, // ReceiveBufferSize
135 16, // TransmitBufferSize
136 "\\_SB.GDV0.URT0", // ResourceSource:
137 // UART bus controller name
138 , // ResourceSourceIndex: assumed to be 0
139 , // ResourceUsage: assumed to be
140 // ResourceConsumer
141 UAR0, // DescriptorName: creates name
142 // for offset of resource descriptor
143 ) // Vendor data
144 })
145
146 //
147 // Resource for URTM (miniUART)
148 //
149 Name (BTMN, ResourceTemplate ()
150 {
151 //
152 // BT UART: ResourceSource will be dynamically updated to
153 // either URT0 (PL011) or URTM (miniUART) during boot
154 //
155 UARTSerialBus(
156 115200, // InitialBaudRate: in BPS
157 , // BitsPerByte: default to 8 bits
158 , // StopBits: Defaults to one bit
159 0x00, // LinesInUse: 8 1-bit flags to
160 // declare enabled control lines.
161 // Raspberry Pi does not exposed
162 // HW control signals -> not supported.
163 // Optional bits:
164 // - Bit 7 (0x80) Request To Send (RTS)
165 // - Bit 6 (0x40) Clear To Send (CTS)
166 // - Bit 5 (0x20) Data Terminal Ready (DTR)
167 // - Bit 4 (0x10) Data Set Ready (DSR)
168 // - Bit 3 (0x08) Ring Indicator (RI)
169 // - Bit 2 (0x04) Data Carrier Detect (DTD)
170 // - Bit 1 (0x02) Reserved. Must be 0.
171 // - Bit 0 (0x01) Reserved. Must be 0.
172 , // IsBigEndian:
173 // default to LittleEndian.
174 , // Parity: Defaults to no parity
175 , // FlowControl: Defaults to
176 // no flow control.
177 16, // ReceiveBufferSize
178 16, // TransmitBufferSize
179 "\\_SB.GDV0.URTM", // ResourceSource:
180 // UART bus controller name
181 , // ResourceSourceIndex: assumed to be 0
182 , // ResourceUsage: assumed to be
183 // ResourceConsumer
184 UARM, // DescriptorName: creates name
185 // for offset of resource descriptor
186 ) // Vendor data
187 })
188
189 Method (_CRS, 0x0, Serialized)
190 {
191 if (URIU == 0)
192 {
193 //
194 // PL011 UART is configured for console output
195 // Return Mini UART for Bluetooth
196 //
197 return (^BTMN)
198 }
199 else
200 {
201 //
202 // Mini UART is configured for console output
203 // Return PL011 UART for Bluetooth
204 //
205 return (^BTPL)
206 }
207 }
208}