blob: 21060eee1a640d1648cb269ced3cac73f7d85b8d [file] [log] [blame]
Angel Ponsc3f58f62020-04-05 15:46:41 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Aaron Durbin9a7d7bc2013-09-07 00:41:48 -05002
Kyösti Mälkkie459a892019-03-04 07:22:56 +02003#include <stdint.h>
Kyösti Mälkkif1b58b72019-03-01 13:43:02 +02004#include <device/pci_ops.h>
Julius Werner18ea2d32014-10-07 16:42:17 -07005#include <soc/iosf.h>
Aaron Durbin9a7d7bc2013-09-07 00:41:48 -05006
Kyösti Mälkkie459a892019-03-04 07:22:56 +02007static inline void write_iosf_reg(int reg, uint32_t value)
8{
9 pci_s_write_config32(IOSF_PCI_DEV, reg, value);
10}
Aaron Durbin9a7d7bc2013-09-07 00:41:48 -050011
Aaron Durbin9a7d7bc2013-09-07 00:41:48 -050012static inline uint32_t read_iosf_reg(int reg)
13{
Kyösti Mälkkie459a892019-03-04 07:22:56 +020014 return pci_s_read_config32(IOSF_PCI_DEV, reg);
Aaron Durbin9a7d7bc2013-09-07 00:41:48 -050015}
Aaron Durbin9a7d7bc2013-09-07 00:41:48 -050016
Aaron Durbin4a082c62013-10-31 11:58:32 -050017/* Common sequences for all the port accesses. */
Mate Kukrie2319492020-07-04 11:20:07 +020018uint32_t iosf_read_port(uint32_t cr, int reg)
Aaron Durbin9a7d7bc2013-09-07 00:41:48 -050019{
Aaron Durbin4a082c62013-10-31 11:58:32 -050020 cr |= IOSF_REG(reg) | IOSF_BYTE_EN;
Aaron Durbin67633a52013-10-29 10:57:31 -050021 write_iosf_reg(MCRX_REG, IOSF_REG_UPPER(reg));
Aaron Durbin9a7d7bc2013-09-07 00:41:48 -050022 write_iosf_reg(MCR_REG, cr);
23 return read_iosf_reg(MDR_REG);
24}
25
Mate Kukrie2319492020-07-04 11:20:07 +020026void iosf_write_port(uint32_t cr, int reg, uint32_t val)
Aaron Durbin9a7d7bc2013-09-07 00:41:48 -050027{
Aaron Durbin4a082c62013-10-31 11:58:32 -050028 cr |= IOSF_REG(reg) | IOSF_BYTE_EN;
Aaron Durbin9a7d7bc2013-09-07 00:41:48 -050029 write_iosf_reg(MDR_REG, val);
Aaron Durbin67633a52013-10-29 10:57:31 -050030 write_iosf_reg(MCRX_REG, IOSF_REG_UPPER(reg));
Duncan Lauriee549e942013-10-28 14:18:38 -070031 write_iosf_reg(MCR_REG, cr);
Aaron Durbin9a7d7bc2013-09-07 00:41:48 -050032}
Aaron Durbin4c53df42013-09-23 14:17:35 -050033
Aaron Durbin5cc3b402013-12-11 17:10:58 -080034#define IOSF_READ(port) \
Angel Ponse94a5282020-07-07 17:41:54 +020035 (IOSF_OPCODE(IOSF_OP_READ_##port) | IOSF_PORT(IOSF_PORT_##port))
Aaron Durbin5cc3b402013-12-11 17:10:58 -080036#define IOSF_WRITE(port) \
Angel Ponse94a5282020-07-07 17:41:54 +020037 (IOSF_OPCODE(IOSF_OP_WRITE_##port) | IOSF_PORT(IOSF_PORT_##port))
Aaron Durbin5cc3b402013-12-11 17:10:58 -080038
Aaron Durbin4a082c62013-10-31 11:58:32 -050039uint32_t iosf_bunit_read(int reg)
40{
Aaron Durbin5cc3b402013-12-11 17:10:58 -080041 return iosf_read_port(IOSF_READ(BUNIT), reg);
Aaron Durbin4a082c62013-10-31 11:58:32 -050042}
43
44void iosf_bunit_write(int reg, uint32_t val)
45{
Aaron Durbin5cc3b402013-12-11 17:10:58 -080046 iosf_write_port(IOSF_WRITE(BUNIT), reg, val);
Aaron Durbin4a082c62013-10-31 11:58:32 -050047}
48
Aaron Durbin4c53df42013-09-23 14:17:35 -050049uint32_t iosf_dunit_read(int reg)
50{
Aaron Durbin5cc3b402013-12-11 17:10:58 -080051 return iosf_read_port(IOSF_READ(SYSMEMC), reg);
Aaron Durbin4c53df42013-09-23 14:17:35 -050052}
53
Aaron Durbin3ccb3ce2013-10-11 00:26:04 -050054uint32_t iosf_dunit_ch0_read(int reg)
55{
56 return iosf_dunit_read(reg);
57}
58
59uint32_t iosf_dunit_ch1_read(int reg)
60{
61 uint32_t cr = IOSF_OPCODE(IOSF_OP_READ_SYSMEMC) |
Aaron Durbin4a082c62013-10-31 11:58:32 -050062 IOSF_PORT(IOSF_PORT_DUNIT_CH1);
63 return iosf_read_port(cr, reg);
Aaron Durbin3ccb3ce2013-10-11 00:26:04 -050064}
65
Aaron Durbin4c53df42013-09-23 14:17:35 -050066void iosf_dunit_write(int reg, uint32_t val)
67{
Aaron Durbin5cc3b402013-12-11 17:10:58 -080068 iosf_write_port(IOSF_WRITE(SYSMEMC), reg, val);
Aaron Durbin3f5a1ff2013-10-04 15:23:31 -050069}
70
Mate Kukrie2319492020-07-04 11:20:07 +020071uint32_t iosf_cunit_read(int reg)
72{
73 return iosf_read_port(IOSF_READ(CUNIT), reg);
74}
75
76void iosf_cunit_write(int reg, uint32_t val)
77{
78 iosf_write_port(IOSF_WRITE(CUNIT), reg, val);
79}
80
Aaron Durbin3f5a1ff2013-10-04 15:23:31 -050081uint32_t iosf_punit_read(int reg)
82{
Aaron Durbin5cc3b402013-12-11 17:10:58 -080083 return iosf_read_port(IOSF_READ(PMC), reg);
Aaron Durbin3f5a1ff2013-10-04 15:23:31 -050084}
85
86void iosf_punit_write(int reg, uint32_t val)
87{
Aaron Durbin5cc3b402013-12-11 17:10:58 -080088 iosf_write_port(IOSF_WRITE(PMC), reg, val);
Aaron Durbin4c53df42013-09-23 14:17:35 -050089}
Duncan Laurie0854c842013-10-31 08:20:48 -070090
91uint32_t iosf_usbphy_read(int reg)
92{
Aaron Durbin5cc3b402013-12-11 17:10:58 -080093 return iosf_read_port(IOSF_READ(USBPHY), reg);
Duncan Laurie0854c842013-10-31 08:20:48 -070094}
95
96void iosf_usbphy_write(int reg, uint32_t val)
97{
Angel Ponsa81c8ee2020-07-07 17:46:49 +020098 iosf_write_port(IOSF_WRITE(USBPHY), reg, val);
Duncan Laurie0854c842013-10-31 08:20:48 -070099}
100
101uint32_t iosf_ushphy_read(int reg)
102{
Aaron Durbin5cc3b402013-12-11 17:10:58 -0800103 return iosf_read_port(IOSF_READ(USHPHY), reg);
Duncan Laurie0854c842013-10-31 08:20:48 -0700104}
105
106void iosf_ushphy_write(int reg, uint32_t val)
107{
Angel Ponsa81c8ee2020-07-07 17:46:49 +0200108 iosf_write_port(IOSF_WRITE(USHPHY), reg, val);
Duncan Laurie0854c842013-10-31 08:20:48 -0700109}
Aaron Durbinbc69ae92013-10-31 10:46:56 -0500110
111uint32_t iosf_lpss_read(int reg)
112{
Aaron Durbin5cc3b402013-12-11 17:10:58 -0800113 return iosf_read_port(IOSF_READ(LPSS), reg);
Aaron Durbinbc69ae92013-10-31 10:46:56 -0500114}
115
116void iosf_lpss_write(int reg, uint32_t val)
117{
Angel Ponsa81c8ee2020-07-07 17:46:49 +0200118 iosf_write_port(IOSF_WRITE(LPSS), reg, val);
Aaron Durbinbc69ae92013-10-31 10:46:56 -0500119}
Aaron Durbin65ad5212013-11-01 14:19:24 -0500120
121uint32_t iosf_ccu_read(int reg)
122{
Aaron Durbin5cc3b402013-12-11 17:10:58 -0800123 return iosf_read_port(IOSF_READ(CCU), reg);
Aaron Durbin65ad5212013-11-01 14:19:24 -0500124}
125
126void iosf_ccu_write(int reg, uint32_t val)
127{
Angel Ponsa81c8ee2020-07-07 17:46:49 +0200128 iosf_write_port(IOSF_WRITE(CCU), reg, val);
Aaron Durbin65ad5212013-11-01 14:19:24 -0500129}
Aaron Durbind7f0f3d2013-11-12 16:37:05 -0600130
131uint32_t iosf_score_read(int reg)
132{
Aaron Durbin5cc3b402013-12-11 17:10:58 -0800133 return iosf_read_port(IOSF_READ(SCORE), reg);
Aaron Durbind7f0f3d2013-11-12 16:37:05 -0600134}
135
136void iosf_score_write(int reg, uint32_t val)
137{
Angel Ponsa81c8ee2020-07-07 17:46:49 +0200138 iosf_write_port(IOSF_WRITE(SCORE), reg, val);
Aaron Durbind7f0f3d2013-11-12 16:37:05 -0600139}
140
141uint32_t iosf_scc_read(int reg)
142{
Aaron Durbin5cc3b402013-12-11 17:10:58 -0800143 return iosf_read_port(IOSF_READ(SCC), reg);
Aaron Durbind7f0f3d2013-11-12 16:37:05 -0600144}
145
146void iosf_scc_write(int reg, uint32_t val)
147{
Angel Ponsa81c8ee2020-07-07 17:46:49 +0200148 iosf_write_port(IOSF_WRITE(SCC), reg, val);
Aaron Durbind7f0f3d2013-11-12 16:37:05 -0600149}
Aaron Durbinbc5b5572013-12-11 17:13:10 -0800150
151uint32_t iosf_aunit_read(int reg)
152{
153 return iosf_read_port(IOSF_READ(AUNIT), reg);
154}
155
156void iosf_aunit_write(int reg, uint32_t val)
157{
Angel Ponsa81c8ee2020-07-07 17:46:49 +0200158 iosf_write_port(IOSF_WRITE(AUNIT), reg, val);
Aaron Durbinbc5b5572013-12-11 17:13:10 -0800159}
160
161uint32_t iosf_cpu_bus_read(int reg)
162{
163 return iosf_read_port(IOSF_READ(CPU_BUS), reg);
164}
165
166void iosf_cpu_bus_write(int reg, uint32_t val)
167{
Angel Ponsa81c8ee2020-07-07 17:46:49 +0200168 iosf_write_port(IOSF_WRITE(CPU_BUS), reg, val);
Aaron Durbinbc5b5572013-12-11 17:13:10 -0800169}
170
171uint32_t iosf_sec_read(int reg)
172{
173 return iosf_read_port(IOSF_READ(SEC), reg);
174}
175
176void iosf_sec_write(int reg, uint32_t val)
177{
Angel Ponsa81c8ee2020-07-07 17:46:49 +0200178 iosf_write_port(IOSF_WRITE(SEC), reg, val);
Aaron Durbinbc5b5572013-12-11 17:13:10 -0800179}
180
181uint32_t iosf_port45_read(int reg)
182{
183 return iosf_read_port(IOSF_READ(0x45), reg);
184}
185
186void iosf_port45_write(int reg, uint32_t val)
187{
Angel Ponsa81c8ee2020-07-07 17:46:49 +0200188 iosf_write_port(IOSF_WRITE(0x45), reg, val);
Aaron Durbinbc5b5572013-12-11 17:13:10 -0800189}
190
191uint32_t iosf_port46_read(int reg)
192{
193 return iosf_read_port(IOSF_READ(0x46), reg);
194}
195
196void iosf_port46_write(int reg, uint32_t val)
197{
Angel Ponsa81c8ee2020-07-07 17:46:49 +0200198 iosf_write_port(IOSF_WRITE(0x46), reg, val);
Aaron Durbinbc5b5572013-12-11 17:13:10 -0800199}
200
201uint32_t iosf_port47_read(int reg)
202{
203 return iosf_read_port(IOSF_READ(0x47), reg);
204}
205
206void iosf_port47_write(int reg, uint32_t val)
207{
Angel Ponsa81c8ee2020-07-07 17:46:49 +0200208 iosf_write_port(IOSF_WRITE(0x47), reg, val);
Aaron Durbinbc5b5572013-12-11 17:13:10 -0800209}
210
211uint32_t iosf_port55_read(int reg)
212{
213 return iosf_read_port(IOSF_READ(0x55), reg);
214}
215
216void iosf_port55_write(int reg, uint32_t val)
217{
Angel Ponsa81c8ee2020-07-07 17:46:49 +0200218 iosf_write_port(IOSF_WRITE(0x55), reg, val);
Aaron Durbinbc5b5572013-12-11 17:13:10 -0800219}
220
221uint32_t iosf_port58_read(int reg)
222{
223 return iosf_read_port(IOSF_READ(0x58), reg);
224}
225
226void iosf_port58_write(int reg, uint32_t val)
227{
Angel Ponsa81c8ee2020-07-07 17:46:49 +0200228 iosf_write_port(IOSF_WRITE(0x58), reg, val);
Aaron Durbinbc5b5572013-12-11 17:13:10 -0800229}
230
231uint32_t iosf_port59_read(int reg)
232{
233 return iosf_read_port(IOSF_READ(0x59), reg);
234}
235
236void iosf_port59_write(int reg, uint32_t val)
237{
Angel Ponsa81c8ee2020-07-07 17:46:49 +0200238 iosf_write_port(IOSF_WRITE(0x59), reg, val);
Aaron Durbinbc5b5572013-12-11 17:13:10 -0800239}
240
241uint32_t iosf_port5a_read(int reg)
242{
243 return iosf_read_port(IOSF_READ(0x5a), reg);
244}
245
246void iosf_port5a_write(int reg, uint32_t val)
247{
Angel Ponsa81c8ee2020-07-07 17:46:49 +0200248 iosf_write_port(IOSF_WRITE(0x5a), reg, val);
Aaron Durbinbc5b5572013-12-11 17:13:10 -0800249}
250
251uint32_t iosf_porta2_read(int reg)
252{
253 return iosf_read_port(IOSF_READ(0xa2), reg);
254}
255
256void iosf_porta2_write(int reg, uint32_t val)
257{
Angel Ponsa81c8ee2020-07-07 17:46:49 +0200258 iosf_write_port(IOSF_WRITE(0xa2), reg, val);
Aaron Durbinbc5b5572013-12-11 17:13:10 -0800259}
260
261uint32_t iosf_ssus_read(int reg)
262{
263 return iosf_read_port(IOSF_READ(SSUS), reg);
264}
265
266void iosf_ssus_write(int reg, uint32_t val)
267{
Angel Ponsa81c8ee2020-07-07 17:46:49 +0200268 iosf_write_port(IOSF_WRITE(SSUS), reg, val);
Aaron Durbinbc5b5572013-12-11 17:13:10 -0800269}