1 /*
2  * Copyright (c) 2021 Microchip Technology Inc. and its subsidiaries.
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef _MEC_PECI_H
8 #define _MEC_PECI_H
9 
10 #include <stdint.h>
11 #include <stddef.h>
12 
13 /* Write Data register */
14 #define MCHP_PECI_WR_DATA_REG_OFS	0u
15 #define MCHP_PECI_WR_DATA_MASK		0xffu
16 
17 /* Read Data register */
18 #define MCHP_PECI_RD_DATA_REG_OFS	4u
19 #define MCHP_PECI_RD_DATA_MASK		0xffu
20 
21 /* Control register */
22 #define MCHP_PECI_CTRL_REG_OFS		8u
23 #define MCHP_PECI_CTRL_MASK		0xe9u
24 #define MCHP_PECI_CTRL_PD_POS		0
25 #define MCHP_PECI_CTRL_PD		BIT(MCHP_PECI_CTRL_PD_POS)
26 #define MCHP_PECI_CTRL_RST_POS		3
27 #define MCHP_PECI_CTRL_RST		BIT(MCHP_PECI_CTRL_RST_POS)
28 #define MCHP_PECI_CTRL_FRST_POS		5
29 #define MCHP_PECI_CTRL_FRST		BIT(MCHP_PECI_CTRL_FRST_POS)
30 #define MCHP_PECI_CTRL_TXEN_POS		6
31 #define MCHP_PECI_CTRL_TXEN		BIT(MCHP_PECI_CTRL_TXEN_POS)
32 #define MCHP_PECI_CTRL_MIEN_POS		7
33 #define MCHP_PECI_CTRL_MIEN		BIT(MCHP_PECI_CTRL_MIEN_POS)
34 
35 /* Status 1 register. RW1C and read-only bits. */
36 #define MCHP_PECI_STS1_REG_OFS		0x0cu
37 #define MCHP_PECI_STS1_MASK		0xbfu
38 #define MCHP_PECI_STS1_BOF_POS		0
39 #define MCHP_PECI_STS1_BOF		BIT(MCHP_PECI_STS1_BOF_POS)
40 #define MCHP_PECI_STS1_EOF_POS		1
41 #define MCHP_PECI_STS1_EOF		BIT(MCHP_PECI_STS1_EOF_POS)
42 /* Error is read-only */
43 #define MCHP_PECI_STS1_ERR_POS		2
44 #define MCHP_PECI_STS1_ERR		BIT(MCHP_PECI_STS1_ERR_POS)
45 /* Ready is read-only */
46 #define MCHP_PECI_STS1_RDY_POS		3
47 #define MCHP_PECI_STS1_RDY		BIT(MCHP_PECI_STS1_RDY_POS)
48 #define MCHP_PECI_STS1_RDYLO_POS	4
49 #define MCHP_PECI_STS1_RDYLO		BIT(MCHP_PECI_STS1_RDYLO_POS)
50 #define MCHP_PECI_STS1_RDYHI_POS	5
51 #define MCHP_PECI_STS1_RDYHI		BIT(MCHP_PECI_STS1_RDYHI_POS)
52 /* MINT is read-only */
53 #define MCHP_PECI_STS1_MINT_POS		7
54 #define MCHP_PECI_STS1_MINT		BIT(MCHP_PECI_STS1_MINT_POS)
55 
56 /* Status 2 register. Read-only bits. */
57 #define MCHP_PECI_STS2_REG_OFS		0x10u
58 #define MCHP_PECI_STS2_MASK		0x8fu
59 #define MCHP_PECI_STS2_WFF_POS		0
60 #define MCHP_PECI_STS2_WFF		BIT(MCHP_PECI_STS2_WFF_POS)
61 #define MCHP_PECI_STS2_WFE_POS		1
62 #define MCHP_PECI_STS2_WFE		BIT(MCHP_PECI_STS2_WFE_POS)
63 #define MCHP_PECI_STS2_RFF_POS		2
64 #define MCHP_PECI_STS2_RFF		BIT(MCHP_PECI_STS2_RFF_POS)
65 #define MCHP_PECI_STS2_RFE_POS		3
66 #define MCHP_PECI_STS2_RFE		BIT(MCHP_PECI_STS2_RFE_POS)
67 #define MCHP_PECI_STS2_IDLE_POS		7
68 #define MCHP_PECI_STS2_IDLE		BIT(MCHP_PECI_STS2_IDLE_POS)
69 
70 /* Error register. R/W1C bits. */
71 #define MCHP_PECI_ERR_REG_OFS		0x14u
72 #define MCHP_PECI_ERR_MASK		0xf3u
73 #define MCHP_PECI_ERR_FERR_POS		0
74 #define MCHP_PECI_ERR_FERR		BIT(MCHP_PECI_ERR_FERR_POS)
75 #define MCHP_PECI_ERR_BERR_POS		1
76 #define MCHP_PECI_ERR_BERR		BIT(MCHP_PECI_ERR_BERR_POS)
77 #define MCHP_PECI_ERR_WROV_POS		4
78 #define MCHP_PECI_ERR_WROV		BIT(MCHP_PECI_ERR_WROV_POS)
79 #define MCHP_PECI_ERR_WRUN_POS		5
80 #define MCHP_PECI_ERR_WRUN		BIT(MCHP_PECI_ERR_WRUN_POS)
81 #define MCHP_PECI_ERR_RDOV_POS		6
82 #define MCHP_PECI_ERR_RDOV		BIT(MCHP_PECI_ERR_RDOV_POS)
83 #define MCHP_PECI_ERR_CLK_POS		7
84 #define MCHP_PECI_ERR_CLK		BIT(MCHP_PECI_ERR_CLK_POS)
85 
86 /* Interrupt Enable 1 register. */
87 #define MCHP_PECI_IEN1_REG_OFS		0x18u
88 #define MCHP_PECI_IEN1_MASK		0x37u
89 #define MCHP_PECI_IEN1_BIEN_POS		0
90 #define MCHP_PECI_IEN1_BIEN		BIT(MCHP_PECI_IEN1_BIEN_POS)
91 #define MCHP_PECI_IEN1_EIEN_POS		1
92 #define MCHP_PECI_IEN1_EIEN		BIT(MCHP_PECI_IEN1_EIEN_POS)
93 #define MCHP_PECI_IEN1_EREN_POS		2
94 #define MCHP_PECI_IEN1_EREN		BIT(MCHP_PECI_IEN1_EREN_POS)
95 #define MCHP_PECI_IEN1_RLEN_POS		4
96 #define MCHP_PECI_IEN1_RLEN		BIT(MCHP_PECI_IEN1_RLEN_POS)
97 #define MCHP_PECI_IEN1_RHEN_POS		5
98 #define MCHP_PECI_IEN1_RHEN		BIT(MCHP_PECI_IEN1_RHEN_POS)
99 
100 /* Interrupt Enable 2 register. */
101 #define MCHP_PECI_IEN2_REG_OFS		0x1cu
102 #define MCHP_PECI_IEN2_MASK		0x06u
103 #define MCHP_PECI_IEN2_ENWFE_POS	1
104 #define MCHP_PECI_IEN2_ENWFE		BIT(MCHP_PECI_IEN2_ENWFE_POS)
105 #define MCHP_PECI_IEN2_ENRFF_POS	2
106 #define MCHP_PECI_IEN2_ENRFF		BIT(MCHP_PECI_IEN2_ENRFF_POS)
107 
108 /* Optimal Bit Time LSB register. */
109 #define MCHP_PECI_OPT_BT_LSB_REG_OFS	0x20u
110 #define MCHP_PECI_OPT_BT_LSB_MASK	0xffu
111 
112 /* Optimal Bit Time MSB register. */
113 #define MCHP_PECI_OPT_BT_MSB_REG_OFS	0x24u
114 #define MCHP_PECI_OPT_BT_MSB_MASK	0xffu
115 
116 /** @brief PECI controller. Size = 76(0x4c) */
117 struct peci_regs {
118 	volatile uint8_t WR_DATA;
119 	uint8_t RSVD1[3];
120 	volatile uint8_t RD_DATA;
121 	uint8_t RSVD2[3];
122 	volatile uint8_t CONTROL;
123 	uint8_t RSVD3[3];
124 	volatile uint8_t STATUS1;
125 	uint8_t RSVD4[3];
126 	volatile uint8_t STATUS2;
127 	uint8_t RSVD5[3];
128 	volatile uint8_t ERROR;
129 	uint8_t RSVD6[3];
130 	volatile uint8_t INT_EN1;
131 	uint8_t RSVD7[3];
132 	volatile uint8_t INT_EN2;
133 	uint8_t RSVD8[3];
134 	volatile uint8_t OPT_BIT_TIME_LSB;
135 	uint8_t RSVD9[3];
136 	volatile uint8_t OPT_BIT_TIME_MSB;
137 	uint8_t RSVD10[3];
138 	volatile uint8_t REQ_TMR_LSB;
139 	uint8_t RSVD11[3];
140 	volatile uint8_t REQ_TMR_MSB;
141 	uint8_t RSVD12[3];
142 	volatile uint8_t BAUD_CTRL;
143 	uint8_t RSVD13[3];
144 	uint32_t RSVD14[3];
145 	volatile uint8_t BLK_ID;
146 	uint8_t RSVD15[3];
147 	volatile uint8_t BLK_REV;
148 	uint8_t RSVD16[3];
149 	volatile uint8_t SST_CTL1;
150 	uint8_t RSVD17[3];
151 };
152 
153 #endif	/* #ifndef _MEC_PECI_H */
154