blob: d634cf8943200be59d332eb7a186d7946b3ee320 [file] [log] [blame]
Angel Pons32abdd62020-04-05 15:47:03 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Aamir Bohra3ee54bb2018-10-17 11:55:01 +05302
Aamir Bohra3ee54bb2018-10-17 11:55:01 +05303#include <device/device.h>
4#include <device/pci.h>
Aamir Bohra3ee54bb2018-10-17 11:55:01 +05305#include <pc80/isa-dma.h>
6#include <pc80/i8259.h>
7#include <arch/io.h>
Kyösti Mälkkif1b58b72019-03-01 13:43:02 +02008#include <device/pci_ops.h>
Aamir Bohra3ee54bb2018-10-17 11:55:01 +05309#include <arch/ioapic.h>
10#include <intelblocks/itss.h>
11#include <intelblocks/lpc_lib.h>
Subrata Banik3d152ac2018-10-31 23:08:14 +053012#include <soc/espi.h>
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053013#include <soc/iomap.h>
Subrata Banik8ad5a622018-11-14 15:50:03 +053014#include <soc/irq.h>
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053015#include <soc/pci_devs.h>
16#include <soc/pcr_ids.h>
Subrata Banikdf29d232019-07-05 16:00:38 +053017#include <soc/soc_chip.h>
Elyes HAOUASbf0970e2019-03-21 11:10:03 +010018
Patrick Georgi40b8f012021-05-12 14:52:12 +020019void soc_get_gen_io_dec_range(uint32_t gen_io_dec[LPC_NUM_GENERIC_IO_RANGES])
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053020{
Furquan Shaikhe4f7e042020-12-23 14:11:00 -080021 const config_t *config = config_of_soc();
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053022
23 gen_io_dec[0] = config->gen1_dec;
24 gen_io_dec[1] = config->gen2_dec;
25 gen_io_dec[2] = config->gen3_dec;
26 gen_io_dec[3] = config->gen4_dec;
27}
28
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053029#if ENV_RAMSTAGE
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053030void lpc_soc_init(struct device *dev)
31{
32 /* Legacy initialization */
33 isa_dma_init();
34 pch_misc_init();
35
Subrata Banik3d152ac2018-10-31 23:08:14 +053036 /* Enable CLKRUN_EN for power gating ESPI */
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053037 lpc_enable_pci_clk_cntl();
38
Subrata Banik3d152ac2018-10-31 23:08:14 +053039 /* Set ESPI Serial IRQ mode */
Julius Wernercd49cce2019-03-05 16:53:33 -080040 if (CONFIG(SERIRQ_CONTINUOUS_MODE))
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053041 lpc_set_serirq_mode(SERIRQ_CONTINUOUS);
42 else
43 lpc_set_serirq_mode(SERIRQ_QUIET);
44
45 /* Interrupt configuration */
Subrata Banik1366e442020-09-29 13:55:50 +053046 pch_enable_ioapic();
Subrata Banik78463a72020-09-29 14:28:09 +053047 pch_pirq_init();
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053048 setup_i8259();
49 i8259_configure_irq_trigger(9, 1);
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053050}
51
Subrata Banik3d152ac2018-10-31 23:08:14 +053052/* Fill up ESPI IO resource structure inside SoC directory */
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053053void pch_lpc_soc_fill_io_resources(struct device *dev)
54{
55 /*
56 * PMC pci device gets hidden from PCI bus due to Silicon
57 * policy hence bind ACPI BASE aka ABASE (offset 0x20) with
Subrata Banik3d152ac2018-10-31 23:08:14 +053058 * ESPI IO resources to ensure that ABASE falls under PCI reserved
Aamir Bohra3ee54bb2018-10-17 11:55:01 +053059 * IO memory range.
60 *
61 * Note: Don't add any more resource with same offset 0x20
62 * under this device space.
63 */
64 pch_lpc_add_new_resource(dev, PCI_BASE_ADDRESS_4,
65 ACPI_BASE_ADDRESS, ACPI_BASE_SIZE, IORESOURCE_IO |
66 IORESOURCE_ASSIGNED | IORESOURCE_FIXED);
67}
68
69#endif