142f8ebfdSBin Meng/* 242f8ebfdSBin Meng * Copyright (C) 2007-2009 coresystems GmbH 342f8ebfdSBin Meng * Copyright (C) 2013 Google Inc. 442f8ebfdSBin Meng * Copyright (C) 2016 Bin Meng <bmeng.cn@gmail.com> 542f8ebfdSBin Meng * 642f8ebfdSBin Meng * Modified from coreboot src/soc/intel/baytrail/acpi/lpc.asl 742f8ebfdSBin Meng * 842f8ebfdSBin Meng * SPDX-License-Identifier: GPL-2.0+ 942f8ebfdSBin Meng */ 1042f8ebfdSBin Meng 1142f8ebfdSBin Meng/* Intel LPC Bus Device - 0:1f.0 */ 1242f8ebfdSBin Meng 1342f8ebfdSBin MengDevice (LPCB) 1442f8ebfdSBin Meng{ 1542f8ebfdSBin Meng Name(_ADR, 0x001f0000) 1642f8ebfdSBin Meng 17*fa427438SBin Meng OperationRegion(LPC0, PCI_Config, 0x00, 0x100) 18*fa427438SBin Meng Field(LPC0, AnyAcc, NoLock, Preserve) { 19*fa427438SBin Meng Offset(0x08), 20*fa427438SBin Meng SRID, 8, 21*fa427438SBin Meng Offset(0x80), 22*fa427438SBin Meng C1EN, 1, 23*fa427438SBin Meng Offset(0x84) 24*fa427438SBin Meng } 25*fa427438SBin Meng 2642f8ebfdSBin Meng #include "irqlinks.asl" 2742f8ebfdSBin Meng 2842f8ebfdSBin Meng /* Firmware Hub */ 2942f8ebfdSBin Meng Device (FWH) 3042f8ebfdSBin Meng { 3142f8ebfdSBin Meng Name(_HID, EISAID("INT0800")) 3242f8ebfdSBin Meng Name(_CRS, ResourceTemplate() 3342f8ebfdSBin Meng { 3442f8ebfdSBin Meng Memory32Fixed(ReadOnly, 0xff000000, 0x01000000) 3542f8ebfdSBin Meng }) 3642f8ebfdSBin Meng } 3742f8ebfdSBin Meng 3842f8ebfdSBin Meng /* 8259 Interrupt Controller */ 3942f8ebfdSBin Meng Device (PIC) 4042f8ebfdSBin Meng { 4142f8ebfdSBin Meng Name(_HID, EISAID("PNP0000")) 4242f8ebfdSBin Meng Name(_CRS, ResourceTemplate() 4342f8ebfdSBin Meng { 4442f8ebfdSBin Meng IO(Decode16, 0x20, 0x20, 0x01, 0x02) 4542f8ebfdSBin Meng IO(Decode16, 0x24, 0x24, 0x01, 0x02) 4642f8ebfdSBin Meng IO(Decode16, 0x28, 0x28, 0x01, 0x02) 4742f8ebfdSBin Meng IO(Decode16, 0x2c, 0x2c, 0x01, 0x02) 4842f8ebfdSBin Meng IO(Decode16, 0x30, 0x30, 0x01, 0x02) 4942f8ebfdSBin Meng IO(Decode16, 0x34, 0x34, 0x01, 0x02) 5042f8ebfdSBin Meng IO(Decode16, 0x38, 0x38, 0x01, 0x02) 5142f8ebfdSBin Meng IO(Decode16, 0x3c, 0x3c, 0x01, 0x02) 5242f8ebfdSBin Meng IO(Decode16, 0xa0, 0xa0, 0x01, 0x02) 5342f8ebfdSBin Meng IO(Decode16, 0xa4, 0xa4, 0x01, 0x02) 5442f8ebfdSBin Meng IO(Decode16, 0xa8, 0xa8, 0x01, 0x02) 5542f8ebfdSBin Meng IO(Decode16, 0xac, 0xac, 0x01, 0x02) 5642f8ebfdSBin Meng IO(Decode16, 0xb0, 0xb0, 0x01, 0x02) 5742f8ebfdSBin Meng IO(Decode16, 0xb4, 0xb4, 0x01, 0x02) 5842f8ebfdSBin Meng IO(Decode16, 0xb8, 0xb8, 0x01, 0x02) 5942f8ebfdSBin Meng IO(Decode16, 0xbc, 0xbc, 0x01, 0x02) 6042f8ebfdSBin Meng IO(Decode16, 0x4d0, 0x4d0, 0x01, 0x02) 6142f8ebfdSBin Meng IRQNoFlags () { 2 } 6242f8ebfdSBin Meng }) 6342f8ebfdSBin Meng } 6442f8ebfdSBin Meng 6542f8ebfdSBin Meng /* 8254 timer */ 6642f8ebfdSBin Meng Device (TIMR) 6742f8ebfdSBin Meng { 6842f8ebfdSBin Meng Name(_HID, EISAID("PNP0100")) 6942f8ebfdSBin Meng Name(_CRS, ResourceTemplate() 7042f8ebfdSBin Meng { 7142f8ebfdSBin Meng IO(Decode16, 0x40, 0x40, 0x01, 0x04) 7242f8ebfdSBin Meng IO(Decode16, 0x50, 0x50, 0x10, 0x04) 7342f8ebfdSBin Meng IRQNoFlags() { 0 } 7442f8ebfdSBin Meng }) 7542f8ebfdSBin Meng } 7642f8ebfdSBin Meng 7742f8ebfdSBin Meng /* HPET */ 7842f8ebfdSBin Meng Device (HPET) 7942f8ebfdSBin Meng { 8042f8ebfdSBin Meng Name(_HID, EISAID("PNP0103")) 8142f8ebfdSBin Meng Name(_CID, 0x010CD041) 8242f8ebfdSBin Meng Name(_CRS, ResourceTemplate() 8342f8ebfdSBin Meng { 8442f8ebfdSBin Meng Memory32Fixed(ReadOnly, HPET_BASE_ADDRESS, HPET_BASE_SIZE) 8542f8ebfdSBin Meng }) 8642f8ebfdSBin Meng 8742f8ebfdSBin Meng Method(_STA) 8842f8ebfdSBin Meng { 8942f8ebfdSBin Meng Return (STA_VISIBLE) 9042f8ebfdSBin Meng } 9142f8ebfdSBin Meng } 9242f8ebfdSBin Meng 93*fa427438SBin Meng /* Internal UART */ 94*fa427438SBin Meng Device (IURT) 95*fa427438SBin Meng { 96*fa427438SBin Meng Name(_HID, EISAID("PNP0501")) 97*fa427438SBin Meng Name(_UID, 1) 98*fa427438SBin Meng 99*fa427438SBin Meng Method(_STA, 0, Serialized) 100*fa427438SBin Meng { 101*fa427438SBin Meng /* 102*fa427438SBin Meng * TODO: 103*fa427438SBin Meng * 104*fa427438SBin Meng * Need to hide the internal UART depending on whether 105*fa427438SBin Meng * internal UART is enabled or not so that external 106*fa427438SBin Meng * SuperIO UART can be exposed to system. 107*fa427438SBin Meng */ 108*fa427438SBin Meng Store(1, UI3E) 109*fa427438SBin Meng Store(1, UI4E) 110*fa427438SBin Meng Store(1, C1EN) 111*fa427438SBin Meng Return (STA_VISIBLE) 112*fa427438SBin Meng 113*fa427438SBin Meng } 114*fa427438SBin Meng 115*fa427438SBin Meng Method(_DIS, 0, Serialized) 116*fa427438SBin Meng { 117*fa427438SBin Meng Store(0, UI3E) 118*fa427438SBin Meng Store(0, UI4E) 119*fa427438SBin Meng Store(0, C1EN) 120*fa427438SBin Meng } 121*fa427438SBin Meng 122*fa427438SBin Meng Method(_CRS, 0, Serialized) 123*fa427438SBin Meng { 124*fa427438SBin Meng Name(BUF0, ResourceTemplate() 125*fa427438SBin Meng { 126*fa427438SBin Meng IO(Decode16, 0x03f8, 0x03f8, 0x01, 0x08) 127*fa427438SBin Meng IRQNoFlags() { 3 } 128*fa427438SBin Meng }) 129*fa427438SBin Meng 130*fa427438SBin Meng Name(BUF1, ResourceTemplate() 131*fa427438SBin Meng { 132*fa427438SBin Meng IO(Decode16, 0x03f8, 0x03f8, 0x01, 0x08) 133*fa427438SBin Meng IRQNoFlags() { 4 } 134*fa427438SBin Meng }) 135*fa427438SBin Meng 136*fa427438SBin Meng If (LLessEqual(SRID, 0x04)) { 137*fa427438SBin Meng Return (BUF0) 138*fa427438SBin Meng } Else { 139*fa427438SBin Meng Return (BUF1) 140*fa427438SBin Meng } 141*fa427438SBin Meng } 142*fa427438SBin Meng } 143*fa427438SBin Meng 14442f8ebfdSBin Meng /* Real Time Clock */ 14542f8ebfdSBin Meng Device (RTC) 14642f8ebfdSBin Meng { 14742f8ebfdSBin Meng Name(_HID, EISAID("PNP0B00")) 14842f8ebfdSBin Meng Name(_CRS, ResourceTemplate() 14942f8ebfdSBin Meng { 15042f8ebfdSBin Meng IO(Decode16, 0x70, 0x70, 1, 8) 15142f8ebfdSBin Meng /* 15242f8ebfdSBin Meng * Disable as Windows doesn't like it, and systems 15342f8ebfdSBin Meng * don't seem to use it 15442f8ebfdSBin Meng */ 15542f8ebfdSBin Meng /* IRQNoFlags() { 8 } */ 15642f8ebfdSBin Meng }) 15742f8ebfdSBin Meng } 15842f8ebfdSBin Meng 15942f8ebfdSBin Meng /* LPC device: Resource consumption */ 16042f8ebfdSBin Meng Device (LDRC) 16142f8ebfdSBin Meng { 16242f8ebfdSBin Meng Name(_HID, EISAID("PNP0C02")) 16342f8ebfdSBin Meng Name(_UID, 2) 16442f8ebfdSBin Meng 16542f8ebfdSBin Meng Name(RBUF, ResourceTemplate() 16642f8ebfdSBin Meng { 16742f8ebfdSBin Meng IO(Decode16, 0x61, 0x61, 0x1, 0x01) /* NMI Status */ 16842f8ebfdSBin Meng IO(Decode16, 0x63, 0x63, 0x1, 0x01) /* CPU Reserved */ 16942f8ebfdSBin Meng IO(Decode16, 0x65, 0x65, 0x1, 0x01) /* CPU Reserved */ 17042f8ebfdSBin Meng IO(Decode16, 0x67, 0x67, 0x1, 0x01) /* CPU Reserved */ 17142f8ebfdSBin Meng IO(Decode16, 0x80, 0x80, 0x1, 0x01) /* Port 80 Post */ 17242f8ebfdSBin Meng IO(Decode16, 0x92, 0x92, 0x1, 0x01) /* CPU Reserved */ 17342f8ebfdSBin Meng IO(Decode16, 0xb2, 0xb2, 0x1, 0x02) /* SWSMI */ 17442f8ebfdSBin Meng }) 17542f8ebfdSBin Meng 17642f8ebfdSBin Meng Method(_CRS, 0, NotSerialized) 17742f8ebfdSBin Meng { 17842f8ebfdSBin Meng Return (RBUF) 17942f8ebfdSBin Meng } 18042f8ebfdSBin Meng } 18142f8ebfdSBin Meng} 182