blob: 9bd0ed46e4660d03cfcf590612f9b32047e4f559 [file] [log] [blame]
Angel Pons93bcf242020-04-03 01:22:17 +02001/* SPDX-License-Identifier: GPL-2.0-only */
2/* This file is part of the coreboot project. */
Edward O'Callaghan4726a872014-01-25 07:40:39 +11003
Edward O'Callaghan4726a872014-01-25 07:40:39 +11004
Kyösti Mälkki87df2672017-09-23 14:36:16 +03005#include <AGESA.h>
Kyösti Mälkkif61ffcf2017-03-04 07:48:32 +02006#include <northbridge/amd/agesa/state_machine.h>
Kyösti Mälkki53052fe2016-04-27 09:04:11 +03007#include <PlatformMemoryConfiguration.h>
Edward O'Callaghan5ff4b082014-03-29 17:54:26 +11008
Kyösti Mälkki87df2672017-09-23 14:36:16 +03009static const PCIe_PORT_DESCRIPTOR PortList[] = {
10 /* (PCIe port, Lanes 4, PCI Device Number 4, ...) */
11 {
12 0,
13 PCIE_ENGINE_DATA_INITIALIZER(PciePortEngine, 4, 4),
Kyösti Mälkkic7008292017-09-23 19:12:38 +030014 PCIE_PORT_DATA_INITIALIZER(PortEnabled,
15 ChannelTypeExt6db,
Kyösti Mälkki87df2672017-09-23 14:36:16 +030016 4,
Kyösti Mälkkic7008292017-09-23 19:12:38 +030017 HotplugDisabled,
18 PcieGen2,
19 PcieGen2,
20 AspmL0sL1,
Kyösti Mälkki87df2672017-09-23 14:36:16 +030021 46)
22 },
23 /* (PCIe port, Lanes 5, PCI Device Number 5, ...) */
24 {
25 0,
26 PCIE_ENGINE_DATA_INITIALIZER(PciePortEngine, 5, 5),
Kyösti Mälkkic7008292017-09-23 19:12:38 +030027 PCIE_PORT_DATA_INITIALIZER(PortEnabled,
28 ChannelTypeExt6db,
Kyösti Mälkki87df2672017-09-23 14:36:16 +030029 5,
Kyösti Mälkkic7008292017-09-23 19:12:38 +030030 HotplugDisabled,
31 PcieGen2,
32 PcieGen2,
33 AspmL0sL1,
Kyösti Mälkki87df2672017-09-23 14:36:16 +030034 46)
35 },
36 /* (PCIe port, Lanes 6, PCI Device Number 6, ...) */
37 {
38 0,
39 PCIE_ENGINE_DATA_INITIALIZER(PciePortEngine, 6, 6),
Kyösti Mälkkic7008292017-09-23 19:12:38 +030040 PCIE_PORT_DATA_INITIALIZER(PortEnabled,
41 ChannelTypeExt6db,
Kyösti Mälkki87df2672017-09-23 14:36:16 +030042 6,
Kyösti Mälkkic7008292017-09-23 19:12:38 +030043 HotplugDisabled,
44 PcieGen2,
45 PcieGen2,
46 AspmL0sL1,
Kyösti Mälkki87df2672017-09-23 14:36:16 +030047 46)
48 },
49 /* (PCIe port, Lanes 7, PCI Device Number 7, ...) */
50 {
51 0,
52 PCIE_ENGINE_DATA_INITIALIZER(PciePortEngine, 7, 7),
Kyösti Mälkkic7008292017-09-23 19:12:38 +030053 PCIE_PORT_DATA_INITIALIZER(PortDisabled,
54 ChannelTypeExt6db,
Kyösti Mälkki87df2672017-09-23 14:36:16 +030055 7,
Kyösti Mälkkic7008292017-09-23 19:12:38 +030056 HotplugDisabled,
57 PcieGen2,
58 PcieGen2,
59 AspmL0sL1,
Kyösti Mälkki87df2672017-09-23 14:36:16 +030060 0)
61 },
62 /* (PCIe port, Lanes 8, PCI Device Number 8, ...) */
63 {
64 DESCRIPTOR_TERMINATE_LIST,
65 PCIE_ENGINE_DATA_INITIALIZER(PciePortEngine, 0, 3),
Kyösti Mälkkic7008292017-09-23 19:12:38 +030066 PCIE_PORT_DATA_INITIALIZER(PortEnabled,
67 ChannelTypeExt6db,
Kyösti Mälkki87df2672017-09-23 14:36:16 +030068 8,
Kyösti Mälkkic7008292017-09-23 19:12:38 +030069 HotplugDisabled,
70 PcieGen2,
71 PcieGen2,
72 AspmL0sL1,
Kyösti Mälkki87df2672017-09-23 14:36:16 +030073 0)
74 }
75};
Edward O'Callaghan4726a872014-01-25 07:40:39 +110076
Kyösti Mälkki87df2672017-09-23 14:36:16 +030077static const PCIe_DDI_DESCRIPTOR DdiList[] = {
78 /* (DDI interface Lanes 8:11, DdA, ...) */
79 {
80 0,
81 PCIE_ENGINE_DATA_INITIALIZER(PcieDdiEngine, 8, 11),
82 /* PCIE_DDI_DATA_INITIALIZER(ConnectorTypeDP, Aux1, Hdp1) */
83 {ConnectorTypeLvds, Aux1, Hdp1}
84 },
85 /* (DDI interface Lanes 12:15, DdB, ...) */
86 {
87 DESCRIPTOR_TERMINATE_LIST,
88 PCIE_ENGINE_DATA_INITIALIZER(PcieDdiEngine, 12, 15),
89 /* PCIE_DDI_DATA_INITIALIZER(ConnectorTypeDP, Aux2, Hdp2) */
90 {ConnectorTypeDP, Aux2, Hdp2}
91 }
92};
93
94static const PCIe_COMPLEX_DESCRIPTOR PcieComplex = {
95 .Flags = DESCRIPTOR_TERMINATE_LIST,
96 .SocketId = 0,
97 .PciePortList = PortList,
98 .DdiLinkList = DdiList,
99};
Kyösti Mälkki6e74b2c2014-12-16 07:34:58 +0200100
Kyösti Mälkkif61ffcf2017-03-04 07:48:32 +0200101void board_BeforeInitEarly(struct sysinfo *cb, AMD_EARLY_PARAMS *InitEarly)
Edward O'Callaghan4726a872014-01-25 07:40:39 +1100102{
Kyösti Mälkki87df2672017-09-23 14:36:16 +0300103 InitEarly->GnbConfig.PcieComplexList = &PcieComplex;
104 InitEarly->GnbConfig.PsppPolicy = 0;
Edward O'Callaghan4726a872014-01-25 07:40:39 +1100105}
Kyösti Mälkki6e74b2c2014-12-16 07:34:58 +0200106
Kyösti Mälkki53052fe2016-04-27 09:04:11 +0300107/**
108 * @brief Customer Overides Memory Table
109 *
110 * Platform Specific Overriding Table allows IBV/OEM to pass in platform
111 * information to AGESA
112 * (e.g. MemClk routing, the number of DIMM slots per channel,...).
113 * If PlatformSpecificTable is populated, AGESA will base its settings on the
114 * data from the table. Otherwise, it will use its default conservative settings.
115 */
Kyösti Mälkkif61ffcf2017-03-04 07:48:32 +0200116static const PSO_ENTRY ROMDATA PlatformMemoryTable[] = {
Kyösti Mälkkie52738b2017-09-21 12:32:43 +0300117 NUMBER_OF_DIMMS_SUPPORTED(ANY_SOCKET, ANY_CHANNEL, 2),
118 NUMBER_OF_CHANNELS_SUPPORTED(ANY_SOCKET, 1),
Kyösti Mälkki53052fe2016-04-27 09:04:11 +0300119 PSO_END
120};
121
Kyösti Mälkkif61ffcf2017-03-04 07:48:32 +0200122void board_BeforeInitPost(struct sysinfo *cb, AMD_POST_PARAMS *InitPost)
123{
124 InitPost->MemConfig.PlatformMemoryConfiguration = (PSO_ENTRY *)PlatformMemoryTable;
125}