Angel Pons | 3bd1e3d | 2020-04-05 15:47:17 +0200 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
Lee Leahy | b000513 | 2015-05-12 18:19:47 -0700 | [diff] [blame] | 2 | |
Lee Leahy | b000513 | 2015-05-12 18:19:47 -0700 | [diff] [blame] | 3 | #include <device/device.h> |
| 4 | #include <device/pci.h> |
Lee Leahy | b000513 | 2015-05-12 18:19:47 -0700 | [diff] [blame] | 5 | #include <pc80/isa-dma.h> |
| 6 | #include <pc80/i8259.h> |
Lee Leahy | b000513 | 2015-05-12 18:19:47 -0700 | [diff] [blame] | 7 | #include <arch/ioapic.h> |
Bora Guvendik | 43c3109 | 2017-04-11 16:05:23 -0700 | [diff] [blame] | 8 | #include <intelblocks/itss.h> |
Ravi Sarawadi | 1483d1f | 2017-09-28 17:06:01 -0700 | [diff] [blame] | 9 | #include <intelblocks/lpc_lib.h> |
Lee Leahy | b000513 | 2015-05-12 18:19:47 -0700 | [diff] [blame] | 10 | #include <soc/iomap.h> |
Subrata Banik | e7ceae7 | 2017-03-08 17:59:40 +0530 | [diff] [blame] | 11 | #include <soc/pcr_ids.h> |
praveen hodagatta pranesh | d6dffdc | 2017-12-09 00:51:21 +0800 | [diff] [blame] | 12 | #include <soc/intel/common/block/lpc/lpc_def.h> |
Ravi Sarawadi | 1483d1f | 2017-09-28 17:06:01 -0700 | [diff] [blame] | 13 | |
Elyes HAOUAS | bf0970e | 2019-03-21 11:10:03 +0100 | [diff] [blame] | 14 | #include "chip.h" |
| 15 | |
Patrick Georgi | 40b8f01 | 2021-05-12 14:52:12 +0200 | [diff] [blame] | 16 | void soc_get_gen_io_dec_range(uint32_t gen_io_dec[LPC_NUM_GENERIC_IO_RANGES]) |
Lee Leahy | b000513 | 2015-05-12 18:19:47 -0700 | [diff] [blame] | 17 | { |
Furquan Shaikh | e4f7e04 | 2020-12-23 14:11:00 -0800 | [diff] [blame] | 18 | const config_t *config = config_of_soc(); |
Lee Leahy | b000513 | 2015-05-12 18:19:47 -0700 | [diff] [blame] | 19 | |
Ravi Sarawadi | 1483d1f | 2017-09-28 17:06:01 -0700 | [diff] [blame] | 20 | gen_io_dec[0] = config->gen1_dec; |
| 21 | gen_io_dec[1] = config->gen2_dec; |
| 22 | gen_io_dec[2] = config->gen3_dec; |
| 23 | gen_io_dec[3] = config->gen4_dec; |
Lee Leahy | b000513 | 2015-05-12 18:19:47 -0700 | [diff] [blame] | 24 | } |
| 25 | |
Subrata Banik | 8885206 | 2018-01-10 10:51:50 +0530 | [diff] [blame] | 26 | void lpc_soc_init(struct device *dev) |
Lee Leahy | b000513 | 2015-05-12 18:19:47 -0700 | [diff] [blame] | 27 | { |
Kyösti Mälkki | 8950cfb | 2019-07-13 22:16:25 +0300 | [diff] [blame] | 28 | const config_t *const config = config_of(dev); |
Nico Huber | 44e89af | 2019-02-23 19:24:51 +0100 | [diff] [blame] | 29 | |
Lee Leahy | b000513 | 2015-05-12 18:19:47 -0700 | [diff] [blame] | 30 | /* Legacy initialization */ |
| 31 | isa_dma_init(); |
Subrata Banik | 8971ccd | 2020-09-29 14:36:40 +0530 | [diff] [blame] | 32 | pch_misc_init(); |
Angel Pons | 72b8fd5 | 2021-09-28 10:28:38 +0200 | [diff] [blame] | 33 | |
| 34 | /* Enable BIOS updates outside of SMM */ |
| 35 | pci_and_config8(PCH_DEV_LPC, 0xdc, ~(1 << 5)); |
Ravi Sarawadi | 1483d1f | 2017-09-28 17:06:01 -0700 | [diff] [blame] | 36 | |
| 37 | /* Enable CLKRUN_EN for power gating LPC */ |
| 38 | lpc_enable_pci_clk_cntl(); |
| 39 | |
| 40 | /* Set LPC Serial IRQ mode */ |
Nico Huber | 44e89af | 2019-02-23 19:24:51 +0100 | [diff] [blame] | 41 | lpc_set_serirq_mode(config->serirq_mode); |
Lee Leahy | b000513 | 2015-05-12 18:19:47 -0700 | [diff] [blame] | 42 | |
| 43 | /* Interrupt configuration */ |
Subrata Banik | 1366e44 | 2020-09-29 13:55:50 +0530 | [diff] [blame] | 44 | pch_enable_ioapic(); |
Subrata Banik | 78463a7 | 2020-09-29 14:28:09 +0530 | [diff] [blame] | 45 | pch_pirq_init(); |
Lee Leahy | b000513 | 2015-05-12 18:19:47 -0700 | [diff] [blame] | 46 | setup_i8259(); |
| 47 | i8259_configure_irq_trigger(9, 1); |
Lee Leahy | b000513 | 2015-05-12 18:19:47 -0700 | [diff] [blame] | 48 | } |