]> git.ipfire.org Git - thirdparty/u-boot.git/blame - arch/x86/lib/fsp2/fsp_dram.c
Revert "Merge patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet""
[thirdparty/u-boot.git] / arch / x86 / lib / fsp2 / fsp_dram.c
CommitLineData
cf87d3b5
SG
1// SPDX-License-Identifier: GPL-2.0+
2/*
3 * Copyright 2019 Google LLC
4 * Written by Simon Glass <sjg@chromium.org>
5 */
6
d0147fe8
SG
7#define LOG_CATEGORY LOGC_ARCH
8
d678a59d 9#include <common.h>
cf87d3b5 10#include <handoff.h>
691d719d 11#include <init.h>
f7ae49fc 12#include <log.h>
cf87d3b5 13#include <spl.h>
3cabcf96 14#include <acpi/acpi_s3.h>
cf87d3b5
SG
15#include <asm/arch/cpu.h>
16#include <asm/fsp/fsp_support.h>
17#include <asm/fsp2/fsp_api.h>
18#include <asm/fsp2/fsp_internal.h>
401d1c4f 19#include <asm/global_data.h>
c793dbdb 20#include <linux/sizes.h>
cf87d3b5
SG
21
22int dram_init(void)
23{
24 int ret;
25
c793dbdb
SG
26 if (!ll_boot_init()) {
27 /* Use a small and safe amount of 1GB */
28 gd->ram_size = SZ_1G;
29
30 return 0;
31 }
cf87d3b5 32 if (spl_phase() == PHASE_SPL) {
cf87d3b5 33 bool s3wake = false;
ef5f5f6c
SG
34
35 s3wake = IS_ENABLED(CONFIG_HAVE_ACPI_RESUME) &&
36 gd->arch.prev_sleep_state == ACPI_S3;
cf87d3b5
SG
37
38 ret = fsp_memory_init(s3wake,
39 IS_ENABLED(CONFIG_APL_BOOT_FROM_FAST_SPI_FLASH));
40 if (ret) {
d0147fe8 41 log_debug("Memory init failed (err=%x)\n", ret);
cf87d3b5
SG
42 return ret;
43 }
44
45 /* The FSP has already set up DRAM, so grab the info we need */
46 ret = fsp_scan_for_ram_size();
47 if (ret)
48 return ret;
49
50#ifdef CONFIG_ENABLE_MRC_CACHE
51 gd->arch.mrc[MRC_TYPE_NORMAL].buf =
52 fsp_get_nvs_data(gd->arch.hob_list,
53 &gd->arch.mrc[MRC_TYPE_NORMAL].len);
54 gd->arch.mrc[MRC_TYPE_VAR].buf =
55 fsp_get_var_nvs_data(gd->arch.hob_list,
56 &gd->arch.mrc[MRC_TYPE_VAR].len);
57 log_debug("normal %x, var %x\n",
58 gd->arch.mrc[MRC_TYPE_NORMAL].len,
59 gd->arch.mrc[MRC_TYPE_VAR].len);
60#endif
61 } else {
62#if CONFIG_IS_ENABLED(HANDOFF)
63 struct spl_handoff *ho = gd->spl_handoff;
64
65 if (!ho) {
d0147fe8 66 log_debug("No SPL handoff found\n");
cf87d3b5
SG
67 return -ESTRPIPE;
68 }
69 gd->ram_size = ho->ram_size;
70 handoff_load_dram_banks(ho);
71#endif
72 ret = arch_fsps_preinit();
73 if (ret)
74 return log_msg_ret("fsp_s_preinit", ret);
75 }
76
77 return 0;
78}
79
d768dd88 80phys_addr_t board_get_usable_ram_top(phys_size_t total_size)
cf87d3b5 81{
c793dbdb
SG
82 if (!ll_boot_init())
83 return gd->ram_size;
84
cf87d3b5
SG
85#if CONFIG_IS_ENABLED(HANDOFF)
86 struct spl_handoff *ho = gd->spl_handoff;
87
d0147fe8
SG
88 log_debug("usable_ram_top = %lx\n", ho->arch.usable_ram_top);
89
cf87d3b5
SG
90 return ho->arch.usable_ram_top;
91#endif
92
93 return gd->ram_top;
94}