blob: 37049fb0dfdcd7685af3f31e3bf0ee13b37a3181 [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0-only */
#include <amdblocks/root_complex.h>
#include <cbmem.h>
#include <console/console.h>
#include <device/device.h>
#include <fsp/util.h>
#include <types.h>
void read_fsp_resources(struct device *dev, unsigned long *idx)
{
const uint32_t mem_usable = (uintptr_t)cbmem_top();
const struct hob_header *hob_iterator;
const struct hob_resource *res;
if (fsp_hob_iterator_init(&hob_iterator) != CB_SUCCESS) {
printk(BIOS_ERR, "%s incomplete because no HOB list was found\n", __func__);
return;
}
while (fsp_hob_iterator_get_next_resource(&hob_iterator, &res) == CB_SUCCESS) {
if (res->type == EFI_RESOURCE_SYSTEM_MEMORY && res->addr < mem_usable)
/* 0 through low usable is already reported by the root complex code */
continue;
if (res->type == EFI_RESOURCE_MEMORY_MAPPED_IO)
continue; /* Done separately */
if (res->type == EFI_RESOURCE_SYSTEM_MEMORY)
ram_range(dev, (*idx)++, res->addr, res->length);
else if (res->type == EFI_RESOURCE_MEMORY_RESERVED)
reserved_ram_range(dev, (*idx)++, res->addr, res->length);
else
printk(BIOS_ERR, "failed to set resources for type %d\n", res->type);
}
}