blob: cbb1b9178202f9935f61b291b4a8c35c854ec315 [file] [log] [blame]
Angel Ponsae593872020-04-04 18:50:57 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Martin Roth5c354b92019-04-22 14:55:16 -06002
3External(\_SB.ALIB, MethodObj)
4
5/* System Bus */
6/* _SB.PCI0 */
7
8/* Operating System Capabilities Method */
9Method(_OSC,4)
10{
11 /* Check for proper PCI/PCIe UUID */
Elyes HAOUAS28b68ae2020-09-24 20:18:26 +020012 If (Arg0 == ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))
Martin Roth5c354b92019-04-22 14:55:16 -060013 {
14 /* Let OS control everything */
15 Return (Arg3)
16 } Else {
17 CreateDWordField(Arg3,0,CDW1)
Elyes HAOUAS28b68ae2020-09-24 20:18:26 +020018 CDW1 |= 4 // Unrecognized UUID
19 Return (Arg3)
Martin Roth5c354b92019-04-22 14:55:16 -060020 }
21}
22
Martin Roth5c354b92019-04-22 14:55:16 -060023/* 0:14.3 - LPC */
24#include <soc/amd/common/acpi/lpc.asl>
Josie Nordrumda4d9da2020-10-22 17:50:20 -060025#include <soc/amd/common/acpi/platform.asl>
Martin Roth5c354b92019-04-22 14:55:16 -060026
Martin Roth5c354b92019-04-22 14:55:16 -060027Name(CRES, ResourceTemplate() {
28 /* Set the Bus number and Secondary Bus number for the PCI0 device
29 * The Secondary bus range for PCI0 lets the system
30 * know what bus values are allowed on the downstream
31 * side of this PCI bus if there is a PCI-PCI bridge.
32 * PCI busses can have 256 secondary busses which
33 * range from [0-0xFF] but they do not need to be
34 * sequential.
35 */
36 WordBusNumber (ResourceProducer, MinFixed, MaxFixed, PosDecode,
37 0x0000, /* address granularity */
38 0x0000, /* range minimum */
39 0x00ff, /* range maximum */
40 0x0000, /* translation */
41 0x0100, /* length */
42 ,, PSB0) /* ResourceSourceIndex, ResourceSource, DescriptorName */
43
44 IO(Decode16, 0x0cf8, 0x0cf8, 1, 8)
45
46 WORDIO(ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
47 0x0000, /* address granularity */
48 0x0000, /* range minimum */
49 0x0cf7, /* range maximum */
50 0x0000, /* translation */
51 0x0cf8 /* length */
52 )
Martin Roth5c354b92019-04-22 14:55:16 -060053
54 WORDIO(ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
55 0x0000, /* address granularity */
56 0x0d00, /* range minimum */
57 0xffff, /* range maximum */
58 0x0000, /* translation */
59 0xf300 /* length */
60 )
61
62 Memory32Fixed(READONLY, 0x000a0000, 0x00020000, VGAM) /* VGA memory space */
63 Memory32Fixed(READONLY, 0x000c0000, 0x00020000, EMM1) /* Assume C0000-E0000 empty */
64
65 /* memory space for PCI BARs below 4GB */
66 Memory32Fixed(ReadOnly, 0x00000000, 0x00000000, MMIO)
67}) /* End Name(_SB.PCI0.CRES) */
68
69Method(_CRS, 0) {
70 /* DBGO("\\_SB\\PCI0\\_CRS\n") */
71 CreateDWordField(CRES, ^MMIO._BAS, MM1B)
72 CreateDWordField(CRES, ^MMIO._LEN, MM1L)
73
74 /*
75 * Declare memory between TOM1 and 4GB as available
76 * for PCI MMIO.
77 * Use ShiftLeft to avoid 64bit constant (for XP).
78 * This will work even if the OS does 32bit arithmetic, as
79 * 32bit (0x00000000 - TOM1) will wrap and give the same
80 * result as 64bit (0x100000000 - TOM1).
81 */
Elyes HAOUAS28b68ae2020-09-24 20:18:26 +020082 MM1B = TOM1
83 Local0 = 0x10000000 << 4
84 Local0 -= TOM1
85 MM1L = Local0
Martin Roth5c354b92019-04-22 14:55:16 -060086
Aaron Durbin8c28e512020-06-23 13:49:21 -060087 CreateWordField(CRES, ^PSB0._MAX, BMAX)
88 CreateWordField(CRES, ^PSB0._LEN, BLEN)
Elyes HAOUAS28b68ae2020-09-24 20:18:26 +020089 BMAX = CONFIG_MMCONF_BUS_NUMBER - 1
90 BLEN = CONFIG_MMCONF_BUS_NUMBER
Aaron Durbin8c28e512020-06-23 13:49:21 -060091
Martin Roth5c354b92019-04-22 14:55:16 -060092 Return(CRES) /* note to change the Name buffer */
93} /* end of Method(_SB.PCI0._CRS) */