blob: c02cbf9a58db5d47a2b8dfe5be39a8753824fcc4 [file] [log] [blame]
Subrata Banik9b4f2212020-10-10 15:53:33 +05301/* SPDX-License-Identifier: GPL-2.0-only */
2
3#include <baseboard/gpio.h>
4#include <baseboard/variants.h>
Elyes Haouas1bd23e32022-10-31 13:13:37 +01005#include <cpu/cpu.h>
Bora Guvendik64450232022-05-25 17:39:34 -07006#include <cpu/intel/cpu_ids.h>
Subrata Banik9b4f2212020-10-10 15:53:33 +05307#include <device/device.h>
Meera Ravindranath8dffc382020-12-07 20:48:09 +05308#include <drivers/intel/gma/opregion.h>
Subrata Banik9b4f2212020-10-10 15:53:33 +05309#include <ec/ec.h>
Elyes Haouas1bd23e32022-10-31 13:13:37 +010010#include <fw_config.h>
Subrata Banik9b4f2212020-10-10 15:53:33 +053011#include <smbios.h>
Elyes Haouas1bd23e32022-10-31 13:13:37 +010012#include <soc/gpio.h>
Subrata Banik9b4f2212020-10-10 15:53:33 +053013#include <stdint.h>
Elyes Haouasbdd03c22024-05-27 11:20:07 +020014#include <stdio.h>
Elyes Haouas1bd23e32022-10-31 13:13:37 +010015
Subrata Banik9b4f2212020-10-10 15:53:33 +053016#include "board_id.h"
17
18const char *smbios_system_sku(void)
19{
20 static char sku_str[7] = "";
21 uint8_t sku_id = get_board_id();
22
23 snprintf(sku_str, sizeof(sku_str), "sku%u", sku_id);
24 return sku_str;
25}
26
27static void mainboard_init(void *chip_info)
28{
29 variant_configure_gpio_pads();
30
31 if (CONFIG(EC_GOOGLE_CHROMEEC))
32 mainboard_ec_init();
Sumeet Pawnikar698ee272021-08-09 16:08:40 +053033
34 variant_devtree_update();
35}
36
37void __weak variant_devtree_update(void)
38{
39 /* Override dev tree settings per board */
Subrata Banik9b4f2212020-10-10 15:53:33 +053040}
41
Sean Rhodes9c402152024-02-19 11:45:26 +000042#if CONFIG(BOARD_INTEL_ADLRVP_N_EXT_EC)
Anil Kumar9b73c2b2021-06-09 11:51:10 -070043static void add_fw_config_oem_string(const struct fw_config *config, void *arg)
44{
45 struct smbios_type11 *t;
46 char buffer[64];
47
48 t = (struct smbios_type11 *)arg;
49
50 snprintf(buffer, sizeof(buffer), "%s-%s", config->field_name, config->option_name);
51 t->count = smbios_add_string(t->eos, buffer);
52}
53
54static void mainboard_smbios_strings(struct device *dev, struct smbios_type11 *t)
55{
56 fw_config_for_each_found(add_fw_config_oem_string, t);
57}
58#endif
59
Subrata Banik9b4f2212020-10-10 15:53:33 +053060static void mainboard_enable(struct device *dev)
61{
Sean Rhodes9c402152024-02-19 11:45:26 +000062#if CONFIG(BOARD_INTEL_ADLRVP_N_EXT_EC)
Anil Kumar9b73c2b2021-06-09 11:51:10 -070063 dev->ops->get_smbios_strings = mainboard_smbios_strings;
64#endif
Subrata Banik9b4f2212020-10-10 15:53:33 +053065}
66
67struct chip_operations mainboard_ops = {
68 .init = mainboard_init,
69 .enable_dev = mainboard_enable,
70};
Meera Ravindranath8dffc382020-12-07 20:48:09 +053071
72const char *mainboard_vbt_filename(void)
73{
Lean Sheng Tan8ad51a82022-02-01 10:07:12 +010074 if (!CONFIG(CHROMEOS))
75 return "vbt.bin";
76
Bora Guvendik64450232022-05-25 17:39:34 -070077 uint32_t cpu_id = cpu_get_cpuid();
Meera Ravindranath8dffc382020-12-07 20:48:09 +053078 uint8_t sku_id = get_board_id();
79 switch (sku_id) {
80 case ADL_P_LP5_1:
81 case ADL_P_LP5_2:
Michał Żygowskid54a5b292023-07-03 17:17:32 +020082 if (cpu_id == CPUID_RAPTORLAKE_J0)
Bora Guvendik64450232022-05-25 17:39:34 -070083 return "vbt_adlrvp_rpl_lp5.bin";
Tim Wawrzynczaka10cc8a2021-04-01 15:41:16 -060084 return "vbt_adlrvp_lp5.bin";
Deepti Deshatty193203f2021-04-29 21:32:58 +053085 case ADL_P_DDR5_1:
86 case ADL_P_DDR5_2:
Tim Wawrzynczaka10cc8a2021-04-01 15:41:16 -060087 return "vbt_adlrvp_ddr5.bin";
Meera Ravindranath8dffc382020-12-07 20:48:09 +053088 default:
89 return "vbt.bin";
90 }
91}