5 * Coherent Family 15h Routines.
7 * Coherent feature Northbridge implementation specific to Family 15h processors.
9 * @xrefitem bom "File Content Label" "Release Content"
11 * @e sub-project: HyperTransport
12 * @e \$Revision: 44324 $ @e \$Date: 2010-12-22 02:16:51 -0700 (Wed, 22 Dec 2010) $
16 *****************************************************************************
18 * Copyright (C) 2012 Advanced Micro Devices, Inc.
19 * All rights reserved.
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.
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.
43 * ***************************************************************************
48 *----------------------------------------------------------------------------
51 *----------------------------------------------------------------------------
62 #include "htNbCommonHardware.h"
63 #include "htNbCoherentFam15.h"
67 #define FILECODE PROC_HT_FAM15_HTNBCOHERENTFAM15_FILECODE
68 /*----------------------------------------------------------------------------
69 * DEFINITIONS AND MACROS
71 *----------------------------------------------------------------------------
74 /*----------------------------------------------------------------------------------------*/
76 * Return whether the current configuration exceeds the capability.
78 * @HtNbMethod{::F_IS_EXCEEDED_CAPABLE}.
80 * Get Node capability and update the minimum supported system capability.
82 * @param[in] Node the Node
83 * @param[in] State sysMpCap (updated) and NodesDiscovered
84 * @param[in] Nb this northbridge
86 * @retval TRUE system is not capable of current config.
87 * @retval FALSE system is capable of current config.
90 Fam15IsExceededCapable (
100 ASSERT (Node < MAX_NODES);
102 Reg.AddressValue = MAKE_SBDFO (MakePciSegmentFromNode (Node),
103 MakePciBusFromNode (Node),
104 MakePciDeviceFromNode (Node),
106 REG_NB_CAPABILITY_3XE8);
108 LibAmdPciReadBits (Reg, 18, 16, &Temp, Nb->ConfigHandle);
111 MaxNodes = (UINT8) (1 << (~Temp & 0x3)); // That is, 1, 2, 4, or 8
115 if (State->SysMpCap > MaxNodes) {
116 State->SysMpCap = MaxNodes;
118 // Note since sysMpCap is one based and NodesDiscovered is zero based, equal returns true
120 return ((BOOLEAN) (State->SysMpCap <= State->NodesDiscovered));
124 * Stop a link, so that it is isolated from a connected device.
126 * @HtNbMethod{::F_STOP_LINK}.
128 * Use is for fatal incompatible configurations, or for user interface
129 * request to power off a link (IgnoreLink, SkipRegang).
130 * Set ConnDly to make the power effective at the warm reset.
131 * Set XMT and RCV off.
133 * @param[in] Node the node to stop a link on.
134 * @param[in] Link the link to stop.
135 * @param[in] State access to special routine for writing link control register
136 * @param[in] Nb this northbridge.
142 IN STATE_DATA *State,
150 Reg.AddressValue = MAKE_SBDFO (MakePciSegmentFromNode (Node),
151 MakePciBusFromNode (Node),
152 MakePciDeviceFromNode (Node),
154 REG_LINK_GLOBAL_EXT_CONTROL_0x16C);
156 LibAmdPciWriteBits (Reg, 8, 8, &Temp, Nb->ConfigHandle);
157 // Set TransOff and EndOfChain
158 Reg = Nb->MakeLinkBase (Node, Link, Nb);
159 Reg.Address.Register += HTHOST_LINK_CONTROL_REG;
161 State->HtFeatures->SetHtControlRegisterBits (Reg, 7, 6, &Temp, State);