blob: ba34dabde906a2b6ed45b398c87f6361d3e752f5 [file] [log] [blame]
Angel Pons4b429832020-04-02 23:48:50 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Krystian Hebel0d2dbca2019-04-23 19:28:16 +02002
Kyösti Mälkki2446c1e2020-07-09 07:13:37 +03003#include <amdblocks/biosram.h>
4
Krystian Hebel0d2dbca2019-04-23 19:28:16 +02005#include "Porting.h"
6#include "AGESA.h"
7
Michał Żygowski7c071102019-12-20 17:18:42 +01008#include <device/device.h>
Krystian Hebel0d2dbca2019-04-23 19:28:16 +02009#include <northbridge/amd/agesa/state_machine.h>
10#include <northbridge/amd/agesa/agesa_helper.h>
Angel Ponsec5cf152020-11-10 20:42:07 +010011#include <northbridge/amd/nb_common.h>
Krystian Hebel0d2dbca2019-04-23 19:28:16 +020012
13void platform_BeforeInitReset(struct sysinfo *cb, AMD_RESET_PARAMS *Reset)
14{
15}
16
17void platform_BeforeInitEarly(struct sysinfo *cb, AMD_EARLY_PARAMS *Early)
18{
Michał Żygowski7c071102019-12-20 17:18:42 +010019 Early->GnbConfig.PsppPolicy = PsppDisabled;
Krystian Hebel0d2dbca2019-04-23 19:28:16 +020020}
21
22void platform_BeforeInitPost(struct sysinfo *cb, AMD_POST_PARAMS *Post)
23{
Michał Żygowski7c071102019-12-20 17:18:42 +010024 Post->MemConfig.UmaMode = CONFIG(GFXUMA) ? UMA_AUTO : UMA_NONE;
25 Post->MemConfig.UmaSize = 0;
26 Post->MemConfig.BottomIo = (UINT16)(CONFIG_BOTTOMIO_POSITION >> 24);
Krystian Hebel0d2dbca2019-04-23 19:28:16 +020027}
28
29void platform_AfterInitPost(struct sysinfo *cb, AMD_POST_PARAMS *Post)
30{
31 /* If UMA is enabled we currently have it below TOP_MEM as well.
32 * UMA may or may not be cacheable, so Sub4GCacheTop could be
33 * higher than UmaBase. With UMA_NONE we see UmaBase==0. */
34 if (Post->MemConfig.UmaBase)
35 backup_top_of_low_cacheable(Post->MemConfig.UmaBase << 16);
36 else
37 backup_top_of_low_cacheable(Post->MemConfig.Sub4GCacheTop);
38}
39
Krystian Hebel0d2dbca2019-04-23 19:28:16 +020040void platform_BeforeInitEnv(struct sysinfo *cb, AMD_ENV_PARAMS *Env)
41{
42 EmptyHeap();
43}
44
45void platform_AfterInitEnv(struct sysinfo *cb, AMD_ENV_PARAMS *Env)
46{
47}
48
49void platform_BeforeInitMid(struct sysinfo *cb, AMD_MID_PARAMS *Mid)
50{
51 amd_initcpuio();
Michał Żygowski7c071102019-12-20 17:18:42 +010052
53 /* 0 iGpuVgaAdapter, 1 iGpuVgaNonAdapter; */
54 Mid->GnbMidConfiguration.iGpuVgaMode = 0;
Michał Żygowski3fbd2af2020-03-19 15:39:12 +010055 Mid->GnbMidConfiguration.GnbIoapicAddress = IO_APIC2_ADDR;
Krystian Hebel0d2dbca2019-04-23 19:28:16 +020056}
57
Michał Żygowski506b9c12019-12-20 16:57:13 +010058void platform_BeforeInitLate(struct sysinfo *cb, AMD_LATE_PARAMS *Late)
Krystian Hebel0d2dbca2019-04-23 19:28:16 +020059{
Michał Żygowski7c071102019-12-20 17:18:42 +010060 const struct device *iommu_dev = pcidev_on_root(0, 2);
61
62 if (iommu_dev && iommu_dev->enabled) {
63 /* According to AGESA headers these must be set to sane values
64 * when IOMMU build config is enabled otherwise AGESA will skip
65 * it during IOMMU init and IVRS generation.
66 */
67 Late->GnbLateConfiguration.GnbIoapicId = CONFIG_MAX_CPUS + 1;
68 Late->GnbLateConfiguration.FchIoapicId = CONFIG_MAX_CPUS;
69 }
70
71 /* Code for creating CDIT requires hop count table. If it is not
72 * present AGESA_ERROR is returned, which confuses users. CDIT is not
73 * written to the ACPI tables anyway. */
74 Late->PlatformConfig.UserOptionCdit = 0;
Krystian Hebel0d2dbca2019-04-23 19:28:16 +020075}
76
Michał Żygowski506b9c12019-12-20 16:57:13 +010077void platform_AfterInitLate(struct sysinfo *cb, AMD_LATE_PARAMS *Late)
78{
79}
Krystian Hebel0d2dbca2019-04-23 19:28:16 +020080
81void platform_BeforeInitResume(struct sysinfo *cb, AMD_RESUME_PARAMS *Resume)
82{
83}
84
85void platform_AfterInitResume(struct sysinfo *cb, AMD_RESUME_PARAMS *Resume)
86{
87}
88
89void platform_BeforeS3LateRestore(struct sysinfo *cb, AMD_S3LATE_PARAMS *S3Late)
90{
91}
92
93void platform_AfterS3LateRestore(struct sysinfo *cb, AMD_S3LATE_PARAMS *S3Late)
94{
95 amd_initcpuio();
96}
97
98void platform_AfterS3Save(struct sysinfo *cb, AMD_S3SAVE_PARAMS *S3Save)
99{
100}