1*4882a593Smuzhiyun/* 2*4882a593Smuzhiyun * Copyright (C) 2007-2009 coresystems GmbH 3*4882a593Smuzhiyun * Copyright (C) 2013 Google Inc. 4*4882a593Smuzhiyun * Copyright (C) 2016 Bin Meng <bmeng.cn@gmail.com> 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Modified from coreboot src/soc/intel/baytrail/acpi/lpc.asl 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 9*4882a593Smuzhiyun */ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun/* Intel LPC Bus Device - 0:1f.0 */ 12*4882a593Smuzhiyun 13*4882a593SmuzhiyunScope (\) 14*4882a593Smuzhiyun{ 15*4882a593Smuzhiyun /* Intel Legacy Block */ 16*4882a593Smuzhiyun OperationRegion(ILBS, SystemMemory, ILB_BASE_ADDRESS, ILB_BASE_SIZE) 17*4882a593Smuzhiyun Field(ILBS, AnyAcc, NoLock, Preserve) { 18*4882a593Smuzhiyun Offset (0x8), 19*4882a593Smuzhiyun PRTA, 8, 20*4882a593Smuzhiyun PRTB, 8, 21*4882a593Smuzhiyun PRTC, 8, 22*4882a593Smuzhiyun PRTD, 8, 23*4882a593Smuzhiyun PRTE, 8, 24*4882a593Smuzhiyun PRTF, 8, 25*4882a593Smuzhiyun PRTG, 8, 26*4882a593Smuzhiyun PRTH, 8, 27*4882a593Smuzhiyun Offset (0x88), 28*4882a593Smuzhiyun , 3, 29*4882a593Smuzhiyun UI3E, 1, 30*4882a593Smuzhiyun UI4E, 1 31*4882a593Smuzhiyun } 32*4882a593Smuzhiyun} 33*4882a593Smuzhiyun 34*4882a593SmuzhiyunDevice (LPCB) 35*4882a593Smuzhiyun{ 36*4882a593Smuzhiyun Name(_ADR, 0x001f0000) 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun OperationRegion(LPC0, PCI_Config, 0x00, 0x100) 39*4882a593Smuzhiyun Field(LPC0, AnyAcc, NoLock, Preserve) { 40*4882a593Smuzhiyun Offset(0x08), 41*4882a593Smuzhiyun SRID, 8, 42*4882a593Smuzhiyun Offset(0x80), 43*4882a593Smuzhiyun C1EN, 1, 44*4882a593Smuzhiyun Offset(0x84) 45*4882a593Smuzhiyun } 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun #include <asm/acpi/irqlinks.asl> 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun /* Firmware Hub */ 50*4882a593Smuzhiyun Device (FWH) 51*4882a593Smuzhiyun { 52*4882a593Smuzhiyun Name(_HID, EISAID("INT0800")) 53*4882a593Smuzhiyun Name(_CRS, ResourceTemplate() 54*4882a593Smuzhiyun { 55*4882a593Smuzhiyun Memory32Fixed(ReadOnly, 0xff000000, 0x01000000) 56*4882a593Smuzhiyun }) 57*4882a593Smuzhiyun } 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun /* 8259 Interrupt Controller */ 60*4882a593Smuzhiyun Device (PIC) 61*4882a593Smuzhiyun { 62*4882a593Smuzhiyun Name(_HID, EISAID("PNP0000")) 63*4882a593Smuzhiyun Name(_CRS, ResourceTemplate() 64*4882a593Smuzhiyun { 65*4882a593Smuzhiyun IO(Decode16, 0x20, 0x20, 0x01, 0x02) 66*4882a593Smuzhiyun IO(Decode16, 0x24, 0x24, 0x01, 0x02) 67*4882a593Smuzhiyun IO(Decode16, 0x28, 0x28, 0x01, 0x02) 68*4882a593Smuzhiyun IO(Decode16, 0x2c, 0x2c, 0x01, 0x02) 69*4882a593Smuzhiyun IO(Decode16, 0x30, 0x30, 0x01, 0x02) 70*4882a593Smuzhiyun IO(Decode16, 0x34, 0x34, 0x01, 0x02) 71*4882a593Smuzhiyun IO(Decode16, 0x38, 0x38, 0x01, 0x02) 72*4882a593Smuzhiyun IO(Decode16, 0x3c, 0x3c, 0x01, 0x02) 73*4882a593Smuzhiyun IO(Decode16, 0xa0, 0xa0, 0x01, 0x02) 74*4882a593Smuzhiyun IO(Decode16, 0xa4, 0xa4, 0x01, 0x02) 75*4882a593Smuzhiyun IO(Decode16, 0xa8, 0xa8, 0x01, 0x02) 76*4882a593Smuzhiyun IO(Decode16, 0xac, 0xac, 0x01, 0x02) 77*4882a593Smuzhiyun IO(Decode16, 0xb0, 0xb0, 0x01, 0x02) 78*4882a593Smuzhiyun IO(Decode16, 0xb4, 0xb4, 0x01, 0x02) 79*4882a593Smuzhiyun IO(Decode16, 0xb8, 0xb8, 0x01, 0x02) 80*4882a593Smuzhiyun IO(Decode16, 0xbc, 0xbc, 0x01, 0x02) 81*4882a593Smuzhiyun IO(Decode16, 0x4d0, 0x4d0, 0x01, 0x02) 82*4882a593Smuzhiyun IRQNoFlags () { 2 } 83*4882a593Smuzhiyun }) 84*4882a593Smuzhiyun } 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun /* 8254 timer */ 87*4882a593Smuzhiyun Device (TIMR) 88*4882a593Smuzhiyun { 89*4882a593Smuzhiyun Name(_HID, EISAID("PNP0100")) 90*4882a593Smuzhiyun Name(_CRS, ResourceTemplate() 91*4882a593Smuzhiyun { 92*4882a593Smuzhiyun IO(Decode16, 0x40, 0x40, 0x01, 0x04) 93*4882a593Smuzhiyun IO(Decode16, 0x50, 0x50, 0x10, 0x04) 94*4882a593Smuzhiyun IRQNoFlags() { 0 } 95*4882a593Smuzhiyun }) 96*4882a593Smuzhiyun } 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun /* HPET */ 99*4882a593Smuzhiyun Device (HPET) 100*4882a593Smuzhiyun { 101*4882a593Smuzhiyun Name(_HID, EISAID("PNP0103")) 102*4882a593Smuzhiyun Name(_CID, 0x010CD041) 103*4882a593Smuzhiyun Name(_CRS, ResourceTemplate() 104*4882a593Smuzhiyun { 105*4882a593Smuzhiyun Memory32Fixed(ReadOnly, HPET_BASE_ADDRESS, HPET_BASE_SIZE) 106*4882a593Smuzhiyun }) 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun Method(_STA) 109*4882a593Smuzhiyun { 110*4882a593Smuzhiyun Return (STA_VISIBLE) 111*4882a593Smuzhiyun } 112*4882a593Smuzhiyun } 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun /* Internal UART */ 115*4882a593Smuzhiyun Device (IURT) 116*4882a593Smuzhiyun { 117*4882a593Smuzhiyun Name(_HID, EISAID("PNP0501")) 118*4882a593Smuzhiyun Name(_UID, 1) 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun Method(_STA, 0, Serialized) 121*4882a593Smuzhiyun { 122*4882a593Smuzhiyun If (LEqual(IURE, 1)) { 123*4882a593Smuzhiyun Store(1, UI3E) 124*4882a593Smuzhiyun Store(1, UI4E) 125*4882a593Smuzhiyun Store(1, C1EN) 126*4882a593Smuzhiyun Return (STA_VISIBLE) 127*4882a593Smuzhiyun } Else { 128*4882a593Smuzhiyun Return (STA_MISSING) 129*4882a593Smuzhiyun } 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun } 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun Method(_DIS, 0, Serialized) 134*4882a593Smuzhiyun { 135*4882a593Smuzhiyun Store(0, UI3E) 136*4882a593Smuzhiyun Store(0, UI4E) 137*4882a593Smuzhiyun Store(0, C1EN) 138*4882a593Smuzhiyun } 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun Method(_CRS, 0, Serialized) 141*4882a593Smuzhiyun { 142*4882a593Smuzhiyun Name(BUF0, ResourceTemplate() 143*4882a593Smuzhiyun { 144*4882a593Smuzhiyun IO(Decode16, 0x03f8, 0x03f8, 0x01, 0x08) 145*4882a593Smuzhiyun IRQNoFlags() { 3 } 146*4882a593Smuzhiyun }) 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun Name(BUF1, ResourceTemplate() 149*4882a593Smuzhiyun { 150*4882a593Smuzhiyun IO(Decode16, 0x03f8, 0x03f8, 0x01, 0x08) 151*4882a593Smuzhiyun IRQNoFlags() { 4 } 152*4882a593Smuzhiyun }) 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun If (LLessEqual(SRID, 0x04)) { 155*4882a593Smuzhiyun Return (BUF0) 156*4882a593Smuzhiyun } Else { 157*4882a593Smuzhiyun Return (BUF1) 158*4882a593Smuzhiyun } 159*4882a593Smuzhiyun } 160*4882a593Smuzhiyun } 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun /* Real Time Clock */ 163*4882a593Smuzhiyun Device (RTC) 164*4882a593Smuzhiyun { 165*4882a593Smuzhiyun Name(_HID, EISAID("PNP0B00")) 166*4882a593Smuzhiyun Name(_CRS, ResourceTemplate() 167*4882a593Smuzhiyun { 168*4882a593Smuzhiyun IO(Decode16, 0x70, 0x70, 1, 8) 169*4882a593Smuzhiyun /* 170*4882a593Smuzhiyun * Disable as Windows doesn't like it, and systems 171*4882a593Smuzhiyun * don't seem to use it 172*4882a593Smuzhiyun */ 173*4882a593Smuzhiyun /* IRQNoFlags() { 8 } */ 174*4882a593Smuzhiyun }) 175*4882a593Smuzhiyun } 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun /* LPC device: Resource consumption */ 178*4882a593Smuzhiyun Device (LDRC) 179*4882a593Smuzhiyun { 180*4882a593Smuzhiyun Name(_HID, EISAID("PNP0C02")) 181*4882a593Smuzhiyun Name(_UID, 2) 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun Name(RBUF, ResourceTemplate() 184*4882a593Smuzhiyun { 185*4882a593Smuzhiyun IO(Decode16, 0x61, 0x61, 0x1, 0x01) /* NMI Status */ 186*4882a593Smuzhiyun IO(Decode16, 0x63, 0x63, 0x1, 0x01) /* CPU Reserved */ 187*4882a593Smuzhiyun IO(Decode16, 0x65, 0x65, 0x1, 0x01) /* CPU Reserved */ 188*4882a593Smuzhiyun IO(Decode16, 0x67, 0x67, 0x1, 0x01) /* CPU Reserved */ 189*4882a593Smuzhiyun IO(Decode16, 0x80, 0x80, 0x1, 0x01) /* Port 80 Post */ 190*4882a593Smuzhiyun IO(Decode16, 0x92, 0x92, 0x1, 0x01) /* CPU Reserved */ 191*4882a593Smuzhiyun IO(Decode16, 0xb2, 0xb2, 0x1, 0x02) /* SWSMI */ 192*4882a593Smuzhiyun }) 193*4882a593Smuzhiyun 194*4882a593Smuzhiyun Method(_CRS, 0, NotSerialized) 195*4882a593Smuzhiyun { 196*4882a593Smuzhiyun Return (RBUF) 197*4882a593Smuzhiyun } 198*4882a593Smuzhiyun } 199*4882a593Smuzhiyun} 200