1*4882a593Smuzhiyun/* 2*4882a593Smuzhiyun * Copyright (C) 2013 Google Inc. 3*4882a593Smuzhiyun * Copyright (C) 2016 Bin Meng <bmeng.cn@gmail.com> 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Modified from coreboot src/soc/intel/baytrail/acpi/southcluster.asl 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun 10*4882a593SmuzhiyunDevice (PCI0) 11*4882a593Smuzhiyun{ 12*4882a593Smuzhiyun Name(_HID, EISAID("PNP0A08")) /* PCIe */ 13*4882a593Smuzhiyun Name(_CID, EISAID("PNP0A03")) /* PCI */ 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun Name(_ADR, 0) 16*4882a593Smuzhiyun Name(_BBN, 0) 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun Name(MCRS, ResourceTemplate() 19*4882a593Smuzhiyun { 20*4882a593Smuzhiyun /* Bus Numbers */ 21*4882a593Smuzhiyun WordBusNumber(ResourceProducer, MinFixed, MaxFixed, PosDecode, 22*4882a593Smuzhiyun 0x0000, 0x0000, 0x00ff, 0x0000, 0x0100, , , PB00) 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun /* IO Region 0 */ 25*4882a593Smuzhiyun WordIO(ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, 26*4882a593Smuzhiyun 0x0000, 0x0000, 0x0cf7, 0x0000, 0x0cf8, , , PI00) 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun /* PCI Config Space */ 29*4882a593Smuzhiyun IO(Decode16, 0x0cf8, 0x0cf8, 0x0001, 0x0008) 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun /* IO Region 1 */ 32*4882a593Smuzhiyun WordIO(ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange, 33*4882a593Smuzhiyun 0x0000, 0x0d00, 0xffff, 0x0000, 0xf300, , , PI01) 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun /* VGA memory (0xa0000-0xbffff) */ 36*4882a593Smuzhiyun DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, 37*4882a593Smuzhiyun Cacheable, ReadWrite, 38*4882a593Smuzhiyun 0x00000000, 0x000a0000, 0x000bffff, 0x00000000, 39*4882a593Smuzhiyun 0x00020000, , , ASEG) 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun /* OPROM reserved (0xc0000-0xc3fff) */ 42*4882a593Smuzhiyun DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, 43*4882a593Smuzhiyun Cacheable, ReadWrite, 44*4882a593Smuzhiyun 0x00000000, 0x000c0000, 0x000c3fff, 0x00000000, 45*4882a593Smuzhiyun 0x00004000, , , OPR0) 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun /* OPROM reserved (0xc4000-0xc7fff) */ 48*4882a593Smuzhiyun DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, 49*4882a593Smuzhiyun Cacheable, ReadWrite, 50*4882a593Smuzhiyun 0x00000000, 0x000c4000, 0x000c7fff, 0x00000000, 51*4882a593Smuzhiyun 0x00004000, , , OPR1) 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun /* OPROM reserved (0xc8000-0xcbfff) */ 54*4882a593Smuzhiyun DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, 55*4882a593Smuzhiyun Cacheable, ReadWrite, 56*4882a593Smuzhiyun 0x00000000, 0x000c8000, 0x000cbfff, 0x00000000, 57*4882a593Smuzhiyun 0x00004000, , , OPR2) 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun /* OPROM reserved (0xcc000-0xcffff) */ 60*4882a593Smuzhiyun DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, 61*4882a593Smuzhiyun Cacheable, ReadWrite, 62*4882a593Smuzhiyun 0x00000000, 0x000cc000, 0x000cffff, 0x00000000, 63*4882a593Smuzhiyun 0x00004000, , , OPR3) 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun /* OPROM reserved (0xd0000-0xd3fff) */ 66*4882a593Smuzhiyun DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, 67*4882a593Smuzhiyun Cacheable, ReadWrite, 68*4882a593Smuzhiyun 0x00000000, 0x000d0000, 0x000d3fff, 0x00000000, 69*4882a593Smuzhiyun 0x00004000, , , OPR4) 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun /* OPROM reserved (0xd4000-0xd7fff) */ 72*4882a593Smuzhiyun DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, 73*4882a593Smuzhiyun Cacheable, ReadWrite, 74*4882a593Smuzhiyun 0x00000000, 0x000d4000, 0x000d7fff, 0x00000000, 75*4882a593Smuzhiyun 0x00004000, , , OPR5) 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun /* OPROM reserved (0xd8000-0xdbfff) */ 78*4882a593Smuzhiyun DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, 79*4882a593Smuzhiyun Cacheable, ReadWrite, 80*4882a593Smuzhiyun 0x00000000, 0x000d8000, 0x000dbfff, 0x00000000, 81*4882a593Smuzhiyun 0x00004000, , , OPR6) 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun /* OPROM reserved (0xdc000-0xdffff) */ 84*4882a593Smuzhiyun DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, 85*4882a593Smuzhiyun Cacheable, ReadWrite, 86*4882a593Smuzhiyun 0x00000000, 0x000dc000, 0x000dffff, 0x00000000, 87*4882a593Smuzhiyun 0x00004000, , , OPR7) 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun /* BIOS Extension (0xe0000-0xe3fff) */ 90*4882a593Smuzhiyun DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, 91*4882a593Smuzhiyun Cacheable, ReadWrite, 92*4882a593Smuzhiyun 0x00000000, 0x000e0000, 0x000e3fff, 0x00000000, 93*4882a593Smuzhiyun 0x00004000, , , ESG0) 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun /* BIOS Extension (0xe4000-0xe7fff) */ 96*4882a593Smuzhiyun DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, 97*4882a593Smuzhiyun Cacheable, ReadWrite, 98*4882a593Smuzhiyun 0x00000000, 0x000e4000, 0x000e7fff, 0x00000000, 99*4882a593Smuzhiyun 0x00004000, , , ESG1) 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun /* BIOS Extension (0xe8000-0xebfff) */ 102*4882a593Smuzhiyun DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, 103*4882a593Smuzhiyun Cacheable, ReadWrite, 104*4882a593Smuzhiyun 0x00000000, 0x000e8000, 0x000ebfff, 0x00000000, 105*4882a593Smuzhiyun 0x00004000, , , ESG2) 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun /* BIOS Extension (0xec000-0xeffff) */ 108*4882a593Smuzhiyun DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, 109*4882a593Smuzhiyun Cacheable, ReadWrite, 110*4882a593Smuzhiyun 0x00000000, 0x000ec000, 0x000effff, 0x00000000, 111*4882a593Smuzhiyun 0x00004000, , , ESG3) 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun /* System BIOS (0xf0000-0xfffff) */ 114*4882a593Smuzhiyun DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, 115*4882a593Smuzhiyun Cacheable, ReadWrite, 116*4882a593Smuzhiyun 0x00000000, 0x000f0000, 0x000fffff, 0x00000000, 117*4882a593Smuzhiyun 0x00010000, , , FSEG) 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun /* PCI Memory Region (TOLM-CONFIG_MMCONF_BASE_ADDRESS) */ 120*4882a593Smuzhiyun DWordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, 121*4882a593Smuzhiyun Cacheable, ReadWrite, 122*4882a593Smuzhiyun 0x00000000, 0x00000000, 0x00000000, 0x00000000, 123*4882a593Smuzhiyun 0x00000000, , , PMEM) 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun /* High PCI Memory Region */ 126*4882a593Smuzhiyun QwordMemory(ResourceProducer, PosDecode, MinFixed, MaxFixed, 127*4882a593Smuzhiyun Cacheable, ReadWrite, 128*4882a593Smuzhiyun 0x00000000, 0x00000000, 0x00000000, 0x00000000, 129*4882a593Smuzhiyun 0x00000000, , , UMEM) 130*4882a593Smuzhiyun }) 131*4882a593Smuzhiyun 132*4882a593Smuzhiyun Method(_CRS, 0, Serialized) 133*4882a593Smuzhiyun { 134*4882a593Smuzhiyun /* Update PCI resource area */ 135*4882a593Smuzhiyun CreateDwordField(MCRS, ^PMEM._MIN, PMIN) 136*4882a593Smuzhiyun CreateDwordField(MCRS, ^PMEM._MAX, PMAX) 137*4882a593Smuzhiyun CreateDwordField(MCRS, ^PMEM._LEN, PLEN) 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun /* 140*4882a593Smuzhiyun * Hardcode TOLM to 2GB for now as BayTrail FSP uses this value. 141*4882a593Smuzhiyun * 142*4882a593Smuzhiyun * TODO: for generic usage, read TOLM value from register, or 143*4882a593Smuzhiyun * from global NVS (not implemented by U-Boot yet). 144*4882a593Smuzhiyun */ 145*4882a593Smuzhiyun Store(0x80000000, PMIN) 146*4882a593Smuzhiyun Store(Subtract(MCFG_BASE_ADDRESS, 1), PMAX) 147*4882a593Smuzhiyun Add(Subtract(PMAX, PMIN), 1, PLEN) 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun /* Update High PCI resource area */ 150*4882a593Smuzhiyun CreateQwordField(MCRS, ^UMEM._MIN, UMIN) 151*4882a593Smuzhiyun CreateQwordField(MCRS, ^UMEM._MAX, UMAX) 152*4882a593Smuzhiyun CreateQwordField(MCRS, ^UMEM._LEN, ULEN) 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun /* Set base address to 48GB and allocate 16GB for PCI space */ 155*4882a593Smuzhiyun Store(0xc00000000, UMIN) 156*4882a593Smuzhiyun Store(0x400000000, ULEN) 157*4882a593Smuzhiyun Add(UMIN, Subtract(ULEN, 1), UMAX) 158*4882a593Smuzhiyun 159*4882a593Smuzhiyun Return (MCRS) 160*4882a593Smuzhiyun } 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun /* Device Resource Consumption */ 163*4882a593Smuzhiyun Device (PDRC) 164*4882a593Smuzhiyun { 165*4882a593Smuzhiyun Name(_HID, EISAID("PNP0C02")) 166*4882a593Smuzhiyun Name(_UID, 1) 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun Name(PDRS, ResourceTemplate() { 169*4882a593Smuzhiyun Memory32Fixed(ReadWrite, MCFG_BASE_ADDRESS, MCFG_BASE_SIZE) 170*4882a593Smuzhiyun Memory32Fixed(ReadWrite, ABORT_BASE_ADDRESS, ABORT_BASE_SIZE) 171*4882a593Smuzhiyun Memory32Fixed(ReadWrite, SPI_BASE_ADDRESS, SPI_BASE_SIZE) 172*4882a593Smuzhiyun Memory32Fixed(ReadWrite, PMC_BASE_ADDRESS, PMC_BASE_SIZE) 173*4882a593Smuzhiyun Memory32Fixed(ReadWrite, PUNIT_BASE_ADDRESS, PUNIT_BASE_SIZE) 174*4882a593Smuzhiyun Memory32Fixed(ReadWrite, ILB_BASE_ADDRESS, ILB_BASE_SIZE) 175*4882a593Smuzhiyun Memory32Fixed(ReadWrite, RCBA_BASE_ADDRESS, RCBA_BASE_SIZE) 176*4882a593Smuzhiyun Memory32Fixed(ReadWrite, MPHY_BASE_ADDRESS, MPHY_BASE_SIZE) 177*4882a593Smuzhiyun }) 178*4882a593Smuzhiyun 179*4882a593Smuzhiyun /* Current Resource Settings */ 180*4882a593Smuzhiyun Method(_CRS, 0, Serialized) 181*4882a593Smuzhiyun { 182*4882a593Smuzhiyun Return (PDRS) 183*4882a593Smuzhiyun } 184*4882a593Smuzhiyun } 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun Method(_OSC, 4) 187*4882a593Smuzhiyun { 188*4882a593Smuzhiyun /* Check for proper GUID */ 189*4882a593Smuzhiyun If (LEqual(Arg0, ToUUID("33DB4D5B-1FF7-401C-9657-7441C03DD766"))) { 190*4882a593Smuzhiyun /* Let OS control everything */ 191*4882a593Smuzhiyun Return (Arg3) 192*4882a593Smuzhiyun } Else { 193*4882a593Smuzhiyun /* Unrecognized UUID */ 194*4882a593Smuzhiyun CreateDWordField(Arg3, 0, CDW1) 195*4882a593Smuzhiyun Or(CDW1, 4, CDW1) 196*4882a593Smuzhiyun Return (Arg3) 197*4882a593Smuzhiyun } 198*4882a593Smuzhiyun } 199*4882a593Smuzhiyun 200*4882a593Smuzhiyun /* LPC Bridge 0:1f.0 */ 201*4882a593Smuzhiyun #include "lpc.asl" 202*4882a593Smuzhiyun 203*4882a593Smuzhiyun /* USB EHCI 0:1d.0 */ 204*4882a593Smuzhiyun #include "usb.asl" 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun /* USB XHCI 0:14.0 */ 207*4882a593Smuzhiyun #include "xhci.asl" 208*4882a593Smuzhiyun 209*4882a593Smuzhiyun /* IRQ routing for each PCI device */ 210*4882a593Smuzhiyun #include <asm/acpi/irqroute.asl> 211*4882a593Smuzhiyun} 212