/* SPDX-License-Identifier: GPL-2.0-only */ #include #include #include #include #include #include #include static const struct reg_script clear_smi_and_wake_events_script[] = { /* Clear any SMI or wake events */ REG_GPE0_READ(R_QNC_GPE0BLK_GPE0S), REG_GPE0_READ(R_QNC_GPE0BLK_SMIS), REG_GPE0_OR(R_QNC_GPE0BLK_GPE0S, B_QNC_GPE0BLK_GPE0S_ALL), REG_GPE0_OR(R_QNC_GPE0BLK_SMIS, B_QNC_GPE0BLK_SMIS_ALL), REG_SCRIPT_END }; void clear_smi_and_wake_events(void) { struct chipset_power_state *ps; /* Clear SMI and wake events */ ps = get_power_state(); if (ps->prev_sleep_state != 3) { printk(BIOS_SPEW, "Clearing SMI interrupts and wake events\n"); reg_script_run_on_dev(LPC_BDF, clear_smi_and_wake_events_script); } } void disable_rom_shadow(void) { uint32_t data; /* Determine if the shadow ROM is enabled */ data = port_reg_read(QUARK_NC_HOST_BRIDGE_SB_PORT_ID, QNC_MSG_FSBIC_REG_HMISC); if ((data & (ESEG_RD_DRAM | FSEG_RD_DRAM)) != (ESEG_RD_DRAM | FSEG_RD_DRAM)) { /* Disable the ROM shadow 0x000e0000 - 0x000fffff */ data |= ESEG_RD_DRAM | FSEG_RD_DRAM; port_reg_write(QUARK_NC_HOST_BRIDGE_SB_PORT_ID, QNC_MSG_FSBIC_REG_HMISC, data); } } void *locate_rmu_file(size_t *rmu_file_len) { size_t fsize; void *rmu_data; /* Locate the rmu.bin file in the read-only region of the flash */ rmu_data = cbfs_ro_map("rmu.bin", &fsize); if (!rmu_data) return NULL; if (rmu_file_len != NULL) *rmu_file_len = fsize; return rmu_data; }