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 130d71511aSBin MengScope (\) 140d71511aSBin Meng{ 150d71511aSBin Meng /* Intel Legacy Block */ 160d71511aSBin Meng OperationRegion(ILBS, SystemMemory, ILB_BASE_ADDRESS, ILB_BASE_SIZE) 170d71511aSBin Meng Field(ILBS, AnyAcc, NoLock, Preserve) { 180d71511aSBin Meng Offset (0x8), 190d71511aSBin Meng PRTA, 8, 200d71511aSBin Meng PRTB, 8, 210d71511aSBin Meng PRTC, 8, 220d71511aSBin Meng PRTD, 8, 230d71511aSBin Meng PRTE, 8, 240d71511aSBin Meng PRTF, 8, 250d71511aSBin Meng PRTG, 8, 260d71511aSBin Meng PRTH, 8, 270d71511aSBin Meng Offset (0x88), 280d71511aSBin Meng , 3, 290d71511aSBin Meng UI3E, 1, 300d71511aSBin Meng UI4E, 1 310d71511aSBin Meng } 320d71511aSBin Meng} 330d71511aSBin Meng 3442f8ebfdSBin MengDevice (LPCB) 3542f8ebfdSBin Meng{ 3642f8ebfdSBin Meng Name(_ADR, 0x001f0000) 3742f8ebfdSBin Meng 38fa427438SBin Meng OperationRegion(LPC0, PCI_Config, 0x00, 0x100) 39fa427438SBin Meng Field(LPC0, AnyAcc, NoLock, Preserve) { 40fa427438SBin Meng Offset(0x08), 41fa427438SBin Meng SRID, 8, 42fa427438SBin Meng Offset(0x80), 43fa427438SBin Meng C1EN, 1, 44fa427438SBin Meng Offset(0x84) 45fa427438SBin Meng } 46fa427438SBin Meng 470d71511aSBin Meng #include <asm/acpi/irqlinks.asl> 4842f8ebfdSBin Meng 4942f8ebfdSBin Meng /* Firmware Hub */ 5042f8ebfdSBin Meng Device (FWH) 5142f8ebfdSBin Meng { 5242f8ebfdSBin Meng Name(_HID, EISAID("INT0800")) 5342f8ebfdSBin Meng Name(_CRS, ResourceTemplate() 5442f8ebfdSBin Meng { 5542f8ebfdSBin Meng Memory32Fixed(ReadOnly, 0xff000000, 0x01000000) 5642f8ebfdSBin Meng }) 5742f8ebfdSBin Meng } 5842f8ebfdSBin Meng 5942f8ebfdSBin Meng /* 8259 Interrupt Controller */ 6042f8ebfdSBin Meng Device (PIC) 6142f8ebfdSBin Meng { 6242f8ebfdSBin Meng Name(_HID, EISAID("PNP0000")) 6342f8ebfdSBin Meng Name(_CRS, ResourceTemplate() 6442f8ebfdSBin Meng { 6542f8ebfdSBin Meng IO(Decode16, 0x20, 0x20, 0x01, 0x02) 6642f8ebfdSBin Meng IO(Decode16, 0x24, 0x24, 0x01, 0x02) 6742f8ebfdSBin Meng IO(Decode16, 0x28, 0x28, 0x01, 0x02) 6842f8ebfdSBin Meng IO(Decode16, 0x2c, 0x2c, 0x01, 0x02) 6942f8ebfdSBin Meng IO(Decode16, 0x30, 0x30, 0x01, 0x02) 7042f8ebfdSBin Meng IO(Decode16, 0x34, 0x34, 0x01, 0x02) 7142f8ebfdSBin Meng IO(Decode16, 0x38, 0x38, 0x01, 0x02) 7242f8ebfdSBin Meng IO(Decode16, 0x3c, 0x3c, 0x01, 0x02) 7342f8ebfdSBin Meng IO(Decode16, 0xa0, 0xa0, 0x01, 0x02) 7442f8ebfdSBin Meng IO(Decode16, 0xa4, 0xa4, 0x01, 0x02) 7542f8ebfdSBin Meng IO(Decode16, 0xa8, 0xa8, 0x01, 0x02) 7642f8ebfdSBin Meng IO(Decode16, 0xac, 0xac, 0x01, 0x02) 7742f8ebfdSBin Meng IO(Decode16, 0xb0, 0xb0, 0x01, 0x02) 7842f8ebfdSBin Meng IO(Decode16, 0xb4, 0xb4, 0x01, 0x02) 7942f8ebfdSBin Meng IO(Decode16, 0xb8, 0xb8, 0x01, 0x02) 8042f8ebfdSBin Meng IO(Decode16, 0xbc, 0xbc, 0x01, 0x02) 8142f8ebfdSBin Meng IO(Decode16, 0x4d0, 0x4d0, 0x01, 0x02) 8242f8ebfdSBin Meng IRQNoFlags () { 2 } 8342f8ebfdSBin Meng }) 8442f8ebfdSBin Meng } 8542f8ebfdSBin Meng 8642f8ebfdSBin Meng /* 8254 timer */ 8742f8ebfdSBin Meng Device (TIMR) 8842f8ebfdSBin Meng { 8942f8ebfdSBin Meng Name(_HID, EISAID("PNP0100")) 9042f8ebfdSBin Meng Name(_CRS, ResourceTemplate() 9142f8ebfdSBin Meng { 9242f8ebfdSBin Meng IO(Decode16, 0x40, 0x40, 0x01, 0x04) 9342f8ebfdSBin Meng IO(Decode16, 0x50, 0x50, 0x10, 0x04) 9442f8ebfdSBin Meng IRQNoFlags() { 0 } 9542f8ebfdSBin Meng }) 9642f8ebfdSBin Meng } 9742f8ebfdSBin Meng 9842f8ebfdSBin Meng /* HPET */ 9942f8ebfdSBin Meng Device (HPET) 10042f8ebfdSBin Meng { 10142f8ebfdSBin Meng Name(_HID, EISAID("PNP0103")) 10242f8ebfdSBin Meng Name(_CID, 0x010CD041) 10342f8ebfdSBin Meng Name(_CRS, ResourceTemplate() 10442f8ebfdSBin Meng { 10542f8ebfdSBin Meng Memory32Fixed(ReadOnly, HPET_BASE_ADDRESS, HPET_BASE_SIZE) 10642f8ebfdSBin Meng }) 10742f8ebfdSBin Meng 10842f8ebfdSBin Meng Method(_STA) 10942f8ebfdSBin Meng { 11042f8ebfdSBin Meng Return (STA_VISIBLE) 11142f8ebfdSBin Meng } 11242f8ebfdSBin Meng } 11342f8ebfdSBin Meng 114fa427438SBin Meng /* Internal UART */ 115fa427438SBin Meng Device (IURT) 116fa427438SBin Meng { 117fa427438SBin Meng Name(_HID, EISAID("PNP0501")) 118fa427438SBin Meng Name(_UID, 1) 119fa427438SBin Meng 120fa427438SBin Meng Method(_STA, 0, Serialized) 121fa427438SBin Meng { 122*3ff11aaaSBin Meng If (LEqual(IURE, 1)) { 123fa427438SBin Meng Store(1, UI3E) 124fa427438SBin Meng Store(1, UI4E) 125fa427438SBin Meng Store(1, C1EN) 126fa427438SBin Meng Return (STA_VISIBLE) 127*3ff11aaaSBin Meng } Else { 128*3ff11aaaSBin Meng Return (STA_MISSING) 129*3ff11aaaSBin Meng } 130fa427438SBin Meng 131fa427438SBin Meng } 132fa427438SBin Meng 133fa427438SBin Meng Method(_DIS, 0, Serialized) 134fa427438SBin Meng { 135fa427438SBin Meng Store(0, UI3E) 136fa427438SBin Meng Store(0, UI4E) 137fa427438SBin Meng Store(0, C1EN) 138fa427438SBin Meng } 139fa427438SBin Meng 140fa427438SBin Meng Method(_CRS, 0, Serialized) 141fa427438SBin Meng { 142fa427438SBin Meng Name(BUF0, ResourceTemplate() 143fa427438SBin Meng { 144fa427438SBin Meng IO(Decode16, 0x03f8, 0x03f8, 0x01, 0x08) 145fa427438SBin Meng IRQNoFlags() { 3 } 146fa427438SBin Meng }) 147fa427438SBin Meng 148fa427438SBin Meng Name(BUF1, ResourceTemplate() 149fa427438SBin Meng { 150fa427438SBin Meng IO(Decode16, 0x03f8, 0x03f8, 0x01, 0x08) 151fa427438SBin Meng IRQNoFlags() { 4 } 152fa427438SBin Meng }) 153fa427438SBin Meng 154fa427438SBin Meng If (LLessEqual(SRID, 0x04)) { 155fa427438SBin Meng Return (BUF0) 156fa427438SBin Meng } Else { 157fa427438SBin Meng Return (BUF1) 158fa427438SBin Meng } 159fa427438SBin Meng } 160fa427438SBin Meng } 161fa427438SBin Meng 16242f8ebfdSBin Meng /* Real Time Clock */ 16342f8ebfdSBin Meng Device (RTC) 16442f8ebfdSBin Meng { 16542f8ebfdSBin Meng Name(_HID, EISAID("PNP0B00")) 16642f8ebfdSBin Meng Name(_CRS, ResourceTemplate() 16742f8ebfdSBin Meng { 16842f8ebfdSBin Meng IO(Decode16, 0x70, 0x70, 1, 8) 16942f8ebfdSBin Meng /* 17042f8ebfdSBin Meng * Disable as Windows doesn't like it, and systems 17142f8ebfdSBin Meng * don't seem to use it 17242f8ebfdSBin Meng */ 17342f8ebfdSBin Meng /* IRQNoFlags() { 8 } */ 17442f8ebfdSBin Meng }) 17542f8ebfdSBin Meng } 17642f8ebfdSBin Meng 17742f8ebfdSBin Meng /* LPC device: Resource consumption */ 17842f8ebfdSBin Meng Device (LDRC) 17942f8ebfdSBin Meng { 18042f8ebfdSBin Meng Name(_HID, EISAID("PNP0C02")) 18142f8ebfdSBin Meng Name(_UID, 2) 18242f8ebfdSBin Meng 18342f8ebfdSBin Meng Name(RBUF, ResourceTemplate() 18442f8ebfdSBin Meng { 18542f8ebfdSBin Meng IO(Decode16, 0x61, 0x61, 0x1, 0x01) /* NMI Status */ 18642f8ebfdSBin Meng IO(Decode16, 0x63, 0x63, 0x1, 0x01) /* CPU Reserved */ 18742f8ebfdSBin Meng IO(Decode16, 0x65, 0x65, 0x1, 0x01) /* CPU Reserved */ 18842f8ebfdSBin Meng IO(Decode16, 0x67, 0x67, 0x1, 0x01) /* CPU Reserved */ 18942f8ebfdSBin Meng IO(Decode16, 0x80, 0x80, 0x1, 0x01) /* Port 80 Post */ 19042f8ebfdSBin Meng IO(Decode16, 0x92, 0x92, 0x1, 0x01) /* CPU Reserved */ 19142f8ebfdSBin Meng IO(Decode16, 0xb2, 0xb2, 0x1, 0x02) /* SWSMI */ 19242f8ebfdSBin Meng }) 19342f8ebfdSBin Meng 19442f8ebfdSBin Meng Method(_CRS, 0, NotSerialized) 19542f8ebfdSBin Meng { 19642f8ebfdSBin Meng Return (RBUF) 19742f8ebfdSBin Meng } 19842f8ebfdSBin Meng } 19942f8ebfdSBin Meng} 200