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 /**DMA block TS**/
44 #define SEDI_DMA_PERIPH_MAX_SIZE 4096
45 #define SEDI_DMA_PERIPH_MAX_SIZE_SHIFT 12
46 
47 /****** i2c *****/
48 /*!
49  * \struct sedi_i2c
50  * \brief  I2C device bus ID
51  */
52 typedef enum {
53 	SEDI_I2C_0 = 0,
54 	SEDI_I2C_1,
55 	SEDI_I2C_2,
56 	SEDI_I2C_NUM
57 } sedi_i2c_t;
58 
59 SEDI_IREG_BASE_DEFINE(I2C, 0, 0x0000);
60 SEDI_IREG_BASE_DEFINE(I2C, 1, 0x2000);
61 SEDI_IREG_BASE_DEFINE(I2C, 2, 0x4000);
62 
63 #define I2C_FIFO_DEPTH (64)
64 
65 /****** GPIO *****/
66 
67 /*!
68  * \struct sedi_gpio
69  * \brief  GPIO controller device ID
70  */
71 typedef enum { SEDI_GPIO_0 = 0, SEDI_GPIO_NUM } sedi_gpio_t;
72 
73 #define ISH_PIN_NUM 36
74 #define SEDI_GPIO_SOC_PORT_NUM (2U)
75 
76 SEDI_IREG_BASE_DEFINE(GPIO, 0, 0x00100000);
77 
78 
79 typedef enum {
80 	SEDI_HW_REV_INVALID = 0,
81 } sedi_hw_rev_t;
82 
83 /****** WDT *****/
84 
85 /*!
86  * \struct sedi_watchdog
87  * \brief  WATCHDOG device bus ID
88  */
89 
90 typedef enum { SEDI_WATCHDOG_0 = 0, SEDI_WATCHDOG_NUM } sedi_watchdog_t;
91 
92 SEDI_REG_BASE_DEFINE(WDT, 0x4900000);
93 
94 /****** HPET *****/
95 SEDI_REG_BASE_DEFINE(HPET, 0x04700000);
96 
97 #define SEDI_HPET_SOC_TIMER_NUM (3)
98 
99 #define SEDI_IRQ_HPET_TIMER_0 (14)
100 #define SEDI_IRQ_HPET_TIMER_1 (0) /* fake IRQ number, same as timer 0's */
101 
102 /****** IPC *****/
103 SEDI_IREG_BASE_DEFINE(IPC, HOST, 0x4100000);
104 SEDI_IREG_BASE_DEFINE(IPC, CSME, 0x4110000);
105 SEDI_IREG_BASE_DEFINE(IPC, PMC, 0x4111000);
106 
107 /****** MISC *****/
108 #define SEDI_MISC_BASE (0x04400000)
109 
110 #define SEDI_RTC_COUNTER (SEDI_MISC_BASE + 0x70)
111 #define SEDI_RTC_COUNTER0 (SEDI_MISC_BASE + 0x70)
112 #define SEDI_RTC_COUNTER1 (SEDI_MISC_BASE + 0x74)
113 
114 /****** PM *****/
115 #define SEDI_PMU_BASE (0x04200000)
116 #define SEDI_CCU_BASE 0x04300000
117 
118 #define SEDI_IRQ_RESET_PREP (6)
119 #define SEDI_IRQ_PCIEDEV (9)
120 #define SEDI_IRQ_PMU2IOAPIC (10)
121 
122 /****** APIC *****/
123 #define SEDI_IOAPIC_BASE 0xFEC00000
124 #define SEDI_LAPIC_BASE 0xFEE00000
125 
126 #define SEDI_IOAPIC_IDX (SEDI_IOAPIC_BASE + 0x0000)
127 #define SEDI_IOAPIC_WDW (SEDI_IOAPIC_BASE + 0x0010)
128 #define SEDI_IOAPIC_EOI (SEDI_IOAPIC_BASE + 0x0040)
129 
130 #define SEDI_IOAPIC_IOREDTBL 0x10
131 #define SEDI_IOAPIC_REDTBL_MASK 0x00010000
132 
133 /****** SPI *****/
134 /*!
135  * \struct sedi_spi
136  * \brief  SPI device bus ID
137  */
138 typedef enum {
139 	SEDI_SPI_0 = 0,
140 	SEDI_SPI_1,
141 	SEDI_SPI_NUM
142 } sedi_spi_t;
143 
144 SEDI_IREG_BASE_DEFINE(SPI, 0, 0x8000000);
145 SEDI_IREG_BASE_DEFINE(SPI, 1, 0x8002000);
146 
147 /**SPI physical addr for DMA transfer**/
148 #define SEDI_SPI_0_REG_DMA 0x8000000
149 #define SEDI_SPI_1_REG_DMA 0x8002000
150 
151 #define SPI_FIFO_DEPTH (64)
152 #define SEDI_SPI_USE_DMA (1)
153 
154 
155 #endif /* _SEDI_SOC_REGS_H_ */
156