xref: /rk3399_rockchip-uboot/arch/x86/include/asm/arch-baytrail/acpi/lpc.asl (revision b8e599746cac1833328bc3a8e37eeefe346baf90)
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