| /* SPDX-License-Identifier: GPL-2.0-only */ |
| |
| #include <bootstate.h> |
| #include <console/console.h> |
| #include <intelblocks/pcr.h> |
| #include <soc/pci_devs.h> |
| #include <soc/pnpconfig.h> |
| #include "chip.h" |
| |
| static const struct pnpconfig perf[] = { |
| VALUEFORPERF_MSG_VALUES_PLATFORM_DEFAULT, |
| }; |
| |
| static const struct pnpconfig power[] = { |
| VALUEFORPOWER_MSG_VALUES_PLATFORM_DEFAULT, |
| }; |
| |
| static const struct pnpconfig power_perf[] = { |
| VALUEFORPWRPERF_MSG_VALUES_PLATFORM_DEFAULT, |
| }; |
| |
| static void pnp_settings(void *unused) |
| { |
| int index; |
| size_t arrsize; |
| const struct pnpconfig *pnpconfigarr; |
| struct soc_intel_apollolake_config *config; |
| |
| config = config_of_soc(); |
| |
| switch (config->pnp_settings) { |
| case PNP_PERF: |
| pnpconfigarr = perf; |
| arrsize = ARRAY_SIZE(perf); |
| break; |
| case PNP_POWER: |
| pnpconfigarr = power; |
| arrsize = ARRAY_SIZE(power); |
| break; |
| case PNP_PERF_POWER: |
| pnpconfigarr = power_perf; |
| arrsize = ARRAY_SIZE(power_perf); |
| break; |
| default: |
| printk(BIOS_NOTICE, "Invalid PNP settings selected"); |
| return; |
| } |
| |
| for (index = 0; index < arrsize; index++) |
| pcr_rmw32(pnpconfigarr[index].msgport, |
| pnpconfigarr[index].msgregaddr, |
| pnpconfigarr[index].mask, |
| pnpconfigarr[index].value); |
| } |
| |
| BOOT_STATE_INIT_ENTRY(BS_DEV_INIT, BS_ON_EXIT, pnp_settings, NULL); |