1 /*
2  * Copyright (c) 2023 Intel Corporation
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef _SEDI_SOC_REGS_H_
8 #define _SEDI_SOC_REGS_H_
9 
10 #include "sedi_reg_defs.h"
11 
12 /****** uart *****/
13 
14 /** Number of UART controllers. */
15 typedef enum {
16 	SEDI_UART_0 = 0,
17 	SEDI_UART_1,
18 	SEDI_UART_2,
19 	SEDI_UART_NUM
20 } sedi_uart_t;
21 
22 /* UART register base addresses. */
23 SEDI_IREG_BASE_DEFINE(UART, 0, 0x08100000);
24 SEDI_IREG_BASE_DEFINE(UART, 1, 0x08102000);
25 SEDI_IREG_BASE_DEFINE(UART, 2, 0x08104000);
26 
27 #define SEDI_UART_SFT_RST_REG (0x0430004C)
28 #define SEDI_UART_SFT_RST_MASK (0x7)
29 
30 
31 /****** dma *****/
32 /*!
33  * \struct sedi_dma
34  * \brief  DMA device bus ID
35  */
36 typedef enum {
37 	SEDI_DMA_0 = 0,
38 	SEDI_DMA_NUM
39 } sedi_dma_t;
40 
41 SEDI_IREG_BASE_DEFINE(DMA, 0, 0x10100000);
42 
43 /****** i2c *****/
44 /*!
45  * \struct sedi_i2c
46  * \brief  I2C device bus ID
47  */
48 typedef enum {
49 	SEDI_I2C_0 = 0,
50 	SEDI_I2C_1,
51 	SEDI_I2C_2,
52 	SEDI_I2C_NUM
53 } sedi_i2c_t;
54 
55 SEDI_IREG_BASE_DEFINE(I2C, 0, 0x0000);
56 SEDI_IREG_BASE_DEFINE(I2C, 1, 0x2000);
57 SEDI_IREG_BASE_DEFINE(I2C, 2, 0x4000);
58 
59 #define I2C_FIFO_DEPTH (64)
60 
61 /****** GPIO *****/
62 
63 /*!
64  * \struct sedi_gpio
65  * \brief  GPIO controller device ID
66  */
67 typedef enum { SEDI_GPIO_0 = 0, SEDI_GPIO_NUM } sedi_gpio_t;
68 
69 #define ISH_PIN_NUM 36
70 #define SEDI_GPIO_SOC_PORT_NUM (2U)
71 
72 SEDI_IREG_BASE_DEFINE(GPIO, 0, 0x00100000);
73 
74 
75 typedef enum {
76 	SEDI_HW_REV_INVALID = 0,
77 } sedi_hw_rev_t;
78 
79 /****** WDT *****/
80 
81 /*!
82  * \struct sedi_watchdog
83  * \brief  WATCHDOG device bus ID
84  */
85 
86 typedef enum { SEDI_WATCHDOG_0 = 0, SEDI_WATCHDOG_NUM } sedi_watchdog_t;
87 
88 SEDI_REG_BASE_DEFINE(WDT, 0x4900000);
89 
90 /****** HPET *****/
91 SEDI_REG_BASE_DEFINE(HPET, 0x04700000);
92 
93 #define SEDI_HPET_SOC_TIMER_NUM (3)
94 
95 #define SEDI_IRQ_HPET_TIMER_0 (14)
96 #define SEDI_IRQ_HPET_TIMER_1 (0) /* fake IRQ number, same as timer 0's */
97 
98 /****** IPC *****/
99 SEDI_IREG_BASE_DEFINE(IPC, HOST, 0x4100000);
100 SEDI_IREG_BASE_DEFINE(IPC, CSME, 0x4110000);
101 SEDI_IREG_BASE_DEFINE(IPC, PMC, 0x4111000);
102 
103 /****** MISC *****/
104 #define SEDI_MISC_BASE (0x04400000)
105 
106 #define SEDI_RTC_COUNTER (SEDI_MISC_BASE + 0x70)
107 #define SEDI_RTC_COUNTER0 (SEDI_MISC_BASE + 0x70)
108 #define SEDI_RTC_COUNTER1 (SEDI_MISC_BASE + 0x74)
109 
110 /****** PM *****/
111 #define SEDI_PMU_BASE (0x04200000)
112 #define SEDI_CCU_BASE 0x04300000
113 
114 #define SEDI_IRQ_RESET_PREP (6)
115 #define SEDI_IRQ_PCIEDEV (9)
116 #define SEDI_IRQ_PMU2IOAPIC (10)
117 
118 /****** APIC *****/
119 #define SEDI_IOAPIC_BASE 0xFEC00000
120 #define SEDI_LAPIC_BASE 0xFEE00000
121 
122 #define SEDI_IOAPIC_IDX (SEDI_IOAPIC_BASE + 0x0000)
123 #define SEDI_IOAPIC_WDW (SEDI_IOAPIC_BASE + 0x0010)
124 #define SEDI_IOAPIC_EOI (SEDI_IOAPIC_BASE + 0x0040)
125 
126 #define SEDI_IOAPIC_IOREDTBL 0x10
127 #define SEDI_IOAPIC_REDTBL_MASK 0x00010000
128 
129 /****** SPI *****/
130 /*!
131  * \struct sedi_spi
132  * \brief  SPI device bus ID
133  */
134 typedef enum {
135 	SEDI_SPI_0 = 0,
136 	SEDI_SPI_1,
137 	SEDI_SPI_NUM
138 } sedi_spi_t;
139 
140 SEDI_IREG_BASE_DEFINE(SPI, 0, 0x8000000);
141 SEDI_IREG_BASE_DEFINE(SPI, 1, 0x8002000);
142 
143 /**SPI physical addr for DMA transfer**/
144 #define SEDI_SPI_0_REG_DMA 0x8000000
145 #define SEDI_SPI_1_REG_DMA 0x8002000
146 
147 #define SPI_FIFO_DEPTH (64)
148 #define SEDI_SPI_USE_DMA (1)
149 
150 
151 #endif /* _SEDI_SOC_REGS_H_ */
152