blob: b0c067bc69294a8938398ac59c34db34f8093801 [file] [log] [blame]
Rocky Phaguracced3462020-06-11 11:18:02 -07001/* SPDX-License-Identifier: GPL-2.0-only */
2
Rocky Phaguracced3462020-06-11 11:18:02 -07003#include <console/console.h>
4#include <device/device.h>
5#include <device/pci_ops.h>
6#include <intelblocks/pmc.h>
7#include <intelblocks/pmclib.h>
8#include <intelblocks/rtc.h>
9#include <reg_script.h>
10#include <soc/pci_devs.h>
11#include <soc/pm.h>
12
Angel Pons6a2ece72021-04-17 13:30:40 +020013#include "chip.h"
Rocky Phaguracced3462020-06-11 11:18:02 -070014
Rocky Phaguracced3462020-06-11 11:18:02 -070015/* Fill up PMC resource structure */
16int pmc_soc_get_resources(struct pmc_resource_config *cfg)
17{
18 cfg->pwrmbase_offset = PWRMBASE;
19 cfg->pwrmbase_addr = PCH_PWRM_BASE_ADDRESS;
20 cfg->pwrmbase_size = PCH_PWRM_BASE_SIZE;
21 cfg->abase_offset = ABASE;
22 cfg->abase_addr = ACPI_BASE_ADDRESS;
23 cfg->abase_size = ACPI_BASE_SIZE;
24
25 return 0;
26}
27
28static const struct reg_script pch_pmc_misc_init_script[] = {
29 /* Enable SCI and clear SLP requests. */
30 REG_IO_RMW32(ACPI_BASE_ADDRESS + PM1_CNT, ~SLP_TYP, SCI_EN),
31 REG_SCRIPT_END
32};
33
34static const struct reg_script pmc_write1_to_clear_script[] = {
35 REG_PCI_OR32(GEN_PMCON_A, 0),
36 REG_PCI_OR32(GEN_PMCON_B, 0),
37 REG_PCI_OR32(GEN_PMCON_B, 0),
38 REG_RES_OR32(PWRMBASE, GBLRST_CAUSE0, 0),
39 REG_RES_OR32(PWRMBASE, GBLRST_CAUSE1, 0),
40 REG_SCRIPT_END
41};
42
43void pmc_soc_init(struct device *dev)
44{
45 pmc_set_power_failure_state(true);
46 pmc_gpe_init();
47
48 /* Note that certain bits may be cleared from running script as
49 * certain bit fields are write 1 to clear. */
50 reg_script_run_on_dev(dev, pch_pmc_misc_init_script);
51 pmc_set_acpi_mode();
52
53 /* Clear registers that contain write-1-to-clear bits. */
54 reg_script_run_on_dev(dev, pmc_write1_to_clear_script);
55}
Rocky Phaguracced3462020-06-11 11:18:02 -070056
Marc Jones52e14f72021-03-11 14:49:19 -070057void pmc_lock_smi(void)
58{
59 printk(BIOS_DEBUG, "Locking SMM enable.\n");
60 pci_or_config32(PCH_DEV_PMC, GEN_PMCON_A, SMI_LOCK);
61}