AGESA F15: AMD family15 AGESA code
[coreboot.git] / src / vendorcode / amd / agesa / f15 / Proc / HT / NbCommon / htNbCoherent.h
1 /* $NoKeywords:$ */
2 /**
3  * @file
4  *
5  * Coherent Feature Northbridge common routines.
6  *
7  * Provide access to hardware for routing, coherent discovery.
8  *
9  * @xrefitem bom "File Content Label" "Release Content"
10  * @e project:      AGESA
11  * @e sub-project:  HyperTransport
12  * @e \$Revision: 44324 $   @e \$Date: 2010-12-22 02:16:51 -0700 (Wed, 22 Dec 2010) $
13  *
14  */
15 /*
16 *****************************************************************************
17 *
18 * Copyright (C) 2012 Advanced Micro Devices, Inc.
19 * All rights reserved.
20 *
21 * Redistribution and use in source and binary forms, with or without
22 * modification, are permitted provided that the following conditions are met:
23 *     * Redistributions of source code must retain the above copyright
24 *       notice, this list of conditions and the following disclaimer.
25 *     * Redistributions in binary form must reproduce the above copyright
26 *       notice, this list of conditions and the following disclaimer in the
27 *       documentation and/or other materials provided with the distribution.
28 *     * Neither the name of Advanced Micro Devices, Inc. nor the names of
29 *       its contributors may be used to endorse or promote products derived
30 *       from this software without specific prior written permission.
31 *
32 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
33 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
34 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
35 * DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY
36 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
37 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
38 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
39 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
40 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
41 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
42 *
43 * ***************************************************************************
44 *
45 */
46
47 /*
48  *----------------------------------------------------------------------------
49  *                                MODULES USED
50  *
51  *----------------------------------------------------------------------------
52  */
53
54 /***************************************************************************
55  ***               FAMILY/NORTHBRIDGE GENERIC FUNCTIONS                 ***
56  ***************************************************************************/
57
58 /**
59  * Establish a Temporary route from one Node to another.
60  *
61  */
62 VOID
63 WriteRoutingTable (
64   IN       UINT8       Node,
65   IN       UINT8       Target,
66   IN       UINT8       Link,
67   IN       NORTHBRIDGE *Nb
68   );
69
70 /**
71  * Modifies the NodeID register on the target Node
72  *
73  */
74 VOID
75 WriteNodeID (
76   IN       UINT8       Node,
77   IN       UINT8       NodeID,
78   IN       NORTHBRIDGE *Nb
79   );
80
81 /**
82  * Read the Default Link
83  *
84  */
85 UINT8
86 ReadDefaultLink (
87   IN       UINT8       Node,
88   IN       NORTHBRIDGE *Nb
89   );
90
91 /**
92  * Turns routing tables on for a given Node
93  *
94  */
95 VOID
96 EnableRoutingTables (
97   IN       UINT8       Node,
98   IN       NORTHBRIDGE *Nb
99   );
100
101 /**
102  * Turns routing tables off for a given Node
103  *
104  */
105 VOID
106 DisableRoutingTables (
107   IN       UINT8       Node,
108   IN       NORTHBRIDGE *Nb
109   );
110
111 /**
112  * Verify that the Link is coherent, connected, and ready
113  *
114 */
115 BOOLEAN
116 VerifyLinkIsCoherent (
117   IN       UINT8       Node,
118   IN       UINT8       Link,
119   IN       NORTHBRIDGE *Nb
120   );
121
122 /**
123  * Read the token stored in the scratchpad register field.
124  *
125  */
126 UINT8
127 ReadToken (
128   IN       UINT8       Node,
129   IN       NORTHBRIDGE *Nb
130   );
131
132 /**
133  * Write the token stored in the scratchpad register
134  *
135  */
136 VOID
137 WriteToken (
138   IN       UINT8       Node,
139   IN       UINT8       Value,
140   IN       NORTHBRIDGE *Nb
141   );
142
143 /**
144  * Full Routing Table Register initialization
145  *
146  */
147 VOID
148 WriteFullRoutingTable (
149   IN       UINT8       Node,
150   IN       UINT8       Target,
151   IN       UINT8       ReqLink,
152   IN       UINT8       RspLink,
153   IN       UINT32      BroadcastLinks,
154   IN       NORTHBRIDGE *Nb
155   );
156
157 /**
158  * Determine whether a Node is compatible with the discovered configuration so far.
159  *
160  */
161 BOOLEAN
162 IsIllegalTypeMix (
163   IN       UINT8       Node,
164   IN       NORTHBRIDGE *Nb
165   );
166
167 /**
168  * Fix (hopefully) exceptional conditions.
169  *
170  */
171 BOOLEAN
172 HandleSpecialNodeCase (
173   IN       UINT8       Node,
174   IN       UINT8       Link,
175   IN       STATE_DATA  *State,
176   IN       NORTHBRIDGE *Nb
177   );
178