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