xref: /OK3568_Linux_fs/u-boot/arch/x86/include/asm/acpi/debug.asl (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun/*
2*4882a593Smuzhiyun * Copyright (C) 2008 Advanced Micro Devices, Inc.
3*4882a593Smuzhiyun * Copyright (C) 2016 Bin Meng <bmeng.cn@gmail.com>
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * Modified from coreboot src/arch/x86/acpi/debug.asl
6*4882a593Smuzhiyun *
7*4882a593Smuzhiyun * SPDX-License-Identifier:	GPL-2.0+
8*4882a593Smuzhiyun */
9*4882a593Smuzhiyun
10*4882a593Smuzhiyun/* POST register region */
11*4882a593SmuzhiyunOperationRegion(X80, SystemIO, 0x80, 1)
12*4882a593SmuzhiyunField(X80, ByteAcc, NoLock, Preserve)
13*4882a593Smuzhiyun{
14*4882a593Smuzhiyun	P80, 8
15*4882a593Smuzhiyun}
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun/* Legacy serial port register region */
18*4882a593SmuzhiyunOperationRegion(CREG, SystemIO, 0x3F8, 8)
19*4882a593SmuzhiyunField(CREG, ByteAcc, NoLock, Preserve)
20*4882a593Smuzhiyun{
21*4882a593Smuzhiyun	CDAT, 8,
22*4882a593Smuzhiyun	CDLM, 8,
23*4882a593Smuzhiyun	    , 8,
24*4882a593Smuzhiyun	CLCR, 8,
25*4882a593Smuzhiyun	CMCR, 8,
26*4882a593Smuzhiyun	CLSR, 8
27*4882a593Smuzhiyun}
28*4882a593Smuzhiyun
29*4882a593Smuzhiyun/* DINI - Initialize the serial port to 115200 8-N-1 */
30*4882a593SmuzhiyunMethod(DINI)
31*4882a593Smuzhiyun{
32*4882a593Smuzhiyun	Store(0x83, CLCR)
33*4882a593Smuzhiyun	Store(0x01, CDAT)	/* 115200 baud (low) */
34*4882a593Smuzhiyun	Store(0x00, CDLM)	/* 115200 baud (high) */
35*4882a593Smuzhiyun	Store(0x03, CLCR)	/* word=8 stop=1 parity=none */
36*4882a593Smuzhiyun	Store(0x03, CMCR)	/* DTR=1 RTS=1 out1/2=Off loop=Off */
37*4882a593Smuzhiyun	Store(0x00, CDLM)	/* turn off interrupts */
38*4882a593Smuzhiyun}
39*4882a593Smuzhiyun
40*4882a593Smuzhiyun/* THRE - Wait for serial port transmitter holding register to go empty */
41*4882a593SmuzhiyunMethod(THRE)
42*4882a593Smuzhiyun{
43*4882a593Smuzhiyun	And(CLSR, 0x20, Local0)
44*4882a593Smuzhiyun	While (LEqual(Local0, Zero)) {
45*4882a593Smuzhiyun		And(CLSR, 0x20, Local0)
46*4882a593Smuzhiyun	}
47*4882a593Smuzhiyun}
48*4882a593Smuzhiyun
49*4882a593Smuzhiyun/* OUTX - Send a single raw character */
50*4882a593SmuzhiyunMethod(OUTX, 1)
51*4882a593Smuzhiyun{
52*4882a593Smuzhiyun	THRE()
53*4882a593Smuzhiyun	Store(Arg0, CDAT)
54*4882a593Smuzhiyun}
55*4882a593Smuzhiyun
56*4882a593Smuzhiyun/* OUTC - Send a single character, expanding LF into CR/LF */
57*4882a593SmuzhiyunMethod(OUTC, 1)
58*4882a593Smuzhiyun{
59*4882a593Smuzhiyun	If (LEqual(Arg0, 0x0a)) {
60*4882a593Smuzhiyun		OUTX(0x0d)
61*4882a593Smuzhiyun	}
62*4882a593Smuzhiyun	OUTX(Arg0)
63*4882a593Smuzhiyun}
64*4882a593Smuzhiyun
65*4882a593Smuzhiyun/* DBGN - Send a single hex nibble */
66*4882a593SmuzhiyunMethod(DBGN, 1)
67*4882a593Smuzhiyun{
68*4882a593Smuzhiyun	And(Arg0, 0x0f, Local0)
69*4882a593Smuzhiyun	If (LLess(Local0, 10)) {
70*4882a593Smuzhiyun		Add(Local0, 0x30, Local0)
71*4882a593Smuzhiyun	} Else {
72*4882a593Smuzhiyun		Add(Local0, 0x37, Local0)
73*4882a593Smuzhiyun	}
74*4882a593Smuzhiyun	OUTC(Local0)
75*4882a593Smuzhiyun}
76*4882a593Smuzhiyun
77*4882a593Smuzhiyun/* DBGB - Send a hex byte */
78*4882a593SmuzhiyunMethod(DBGB, 1)
79*4882a593Smuzhiyun{
80*4882a593Smuzhiyun	ShiftRight(Arg0, 4, Local0)
81*4882a593Smuzhiyun	DBGN(Local0)
82*4882a593Smuzhiyun	DBGN(Arg0)
83*4882a593Smuzhiyun}
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun/* DBGW - Send a hex word */
86*4882a593SmuzhiyunMethod(DBGW, 1)
87*4882a593Smuzhiyun{
88*4882a593Smuzhiyun	ShiftRight(Arg0, 8, Local0)
89*4882a593Smuzhiyun	DBGB(Local0)
90*4882a593Smuzhiyun	DBGB(Arg0)
91*4882a593Smuzhiyun}
92*4882a593Smuzhiyun
93*4882a593Smuzhiyun/* DBGD - Send a hex dword */
94*4882a593SmuzhiyunMethod(DBGD, 1)
95*4882a593Smuzhiyun{
96*4882a593Smuzhiyun	ShiftRight(Arg0, 16, Local0)
97*4882a593Smuzhiyun	DBGW(Local0)
98*4882a593Smuzhiyun	DBGW(Arg0)
99*4882a593Smuzhiyun}
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun/* Get a char from a string */
102*4882a593SmuzhiyunMethod(GETC, 2)
103*4882a593Smuzhiyun{
104*4882a593Smuzhiyun	CreateByteField(Arg0, Arg1, DBGC)
105*4882a593Smuzhiyun	Return (DBGC)
106*4882a593Smuzhiyun}
107*4882a593Smuzhiyun
108*4882a593Smuzhiyun/* DBGO - Send either a string or an integer */
109*4882a593SmuzhiyunMethod(DBGO, 1, Serialized)
110*4882a593Smuzhiyun{
111*4882a593Smuzhiyun	If (LEqual(ObjectType(Arg0), 1)) {
112*4882a593Smuzhiyun		If (LGreater(Arg0, 0xffff)) {
113*4882a593Smuzhiyun			DBGD(Arg0)
114*4882a593Smuzhiyun		} Else {
115*4882a593Smuzhiyun			If (LGreater(Arg0, 0xff)) {
116*4882a593Smuzhiyun				DBGW(Arg0)
117*4882a593Smuzhiyun			} Else {
118*4882a593Smuzhiyun				DBGB(Arg0)
119*4882a593Smuzhiyun			}
120*4882a593Smuzhiyun		}
121*4882a593Smuzhiyun	} Else {
122*4882a593Smuzhiyun		Name(BDBG, Buffer(80) {})
123*4882a593Smuzhiyun		Store(Arg0, BDBG)
124*4882a593Smuzhiyun		Store(0, Local1)
125*4882a593Smuzhiyun		While (One) {
126*4882a593Smuzhiyun			Store(GETC(BDBG, Local1), Local0)
127*4882a593Smuzhiyun			If (LEqual(Local0, 0)) {
128*4882a593Smuzhiyun				Return (Zero)
129*4882a593Smuzhiyun			}
130*4882a593Smuzhiyun			OUTC(Local0)
131*4882a593Smuzhiyun			Increment(Local1)
132*4882a593Smuzhiyun		}
133*4882a593Smuzhiyun	}
134*4882a593Smuzhiyun
135*4882a593Smuzhiyun	Return (Zero)
136*4882a593Smuzhiyun}
137