Simon Glass | 466c785 | 2019-12-06 21:42:18 -0700 | [diff] [blame] | 1 | // SPDX-License-Identifier: Intel |
| 2 | /* |
| 3 | * Copyright (C) 2015-2016 Intel Corp. |
| 4 | * (Written by Andrey Petrov <andrey.petrov@intel.com> for Intel Corp.) |
| 5 | * |
| 6 | * Mostly taken from coreboot fsp2_0/silicon_init.c |
| 7 | */ |
| 8 | |
| 9 | #define LOG_CATEGORY UCLASS_NORTHBRIDGE |
| 10 | |
| 11 | #include <common.h> |
| 12 | #include <binman.h> |
| 13 | #include <dm.h> |
| 14 | #include <asm/arch/fsp/fsp_configs.h> |
| 15 | #include <asm/arch/fsp/fsp_s_upd.h> |
| 16 | #include <asm/fsp/fsp_infoheader.h> |
| 17 | #include <asm/fsp2/fsp_internal.h> |
| 18 | |
| 19 | int fsp_silicon_init(bool s3wake, bool use_spi_flash) |
| 20 | { |
| 21 | struct fsps_upd upd, *fsp_upd; |
| 22 | fsp_silicon_init_func func; |
| 23 | struct fsp_header *hdr; |
| 24 | struct binman_entry entry; |
| 25 | struct udevice *dev; |
| 26 | ulong rom_offset = 0; |
| 27 | int ret; |
| 28 | |
| 29 | ret = fsp_locate_fsp(FSP_S, &entry, use_spi_flash, &dev, &hdr, |
| 30 | &rom_offset); |
| 31 | if (ret) |
| 32 | return log_msg_ret("locate FSP", ret); |
| 33 | gd->arch.fsp_s_hdr = hdr; |
| 34 | |
| 35 | /* Copy over the default config */ |
| 36 | fsp_upd = (struct fsps_upd *)(hdr->img_base + hdr->cfg_region_off); |
| 37 | if (fsp_upd->header.signature != FSPS_UPD_SIGNATURE) |
| 38 | return log_msg_ret("Bad UPD signature", -EPERM); |
| 39 | memcpy(&upd, fsp_upd, sizeof(upd)); |
| 40 | |
| 41 | ret = fsps_update_config(dev, rom_offset, &upd); |
| 42 | if (ret) |
| 43 | return log_msg_ret("Could not setup config", ret); |
| 44 | log_debug("Silicon init..."); |
Simon Glass | ea6a609 | 2020-05-10 11:39:59 -0600 | [diff] [blame^] | 45 | bootstage_start(BOOTSTAGE_ID_ACCUM_FSP_S, "fsp-s"); |
Simon Glass | 466c785 | 2019-12-06 21:42:18 -0700 | [diff] [blame] | 46 | func = (fsp_silicon_init_func)(hdr->img_base + hdr->fsp_silicon_init); |
| 47 | ret = func(&upd); |
Simon Glass | ea6a609 | 2020-05-10 11:39:59 -0600 | [diff] [blame^] | 48 | bootstage_accum(BOOTSTAGE_ID_ACCUM_FSP_S); |
Simon Glass | 466c785 | 2019-12-06 21:42:18 -0700 | [diff] [blame] | 49 | if (ret) |
| 50 | return log_msg_ret("Silicon init fail\n", ret); |
| 51 | log_debug("done\n"); |
| 52 | |
| 53 | return 0; |
| 54 | } |