Commit f1b21f24ac483dadc7d06a3f30a47a331d848774
Committed by
Larisa Grigore
1 parent
f0e1c30478
Exists in
smarc_8mq_lf_v2020.04
and in
4 other branches
sja1105: Add per port configuration
Add function that programmes RGMII ports on SJA1105 Issue: ALB-1755 Signed-off-by: Iustin Dumitrescu <iustin.dumitrescu@nxp.com>
Showing 2 changed files with 74 additions and 2 deletions Side-by-side Diff
drivers/spi/sja1105.c
... | ... | @@ -294,6 +294,45 @@ |
294 | 294 | return status; |
295 | 295 | } |
296 | 296 | |
297 | +void sja1105_port_cfg(struct sja_parms *sjap) | |
298 | +{ | |
299 | + u32 i; | |
300 | + | |
301 | + for (i = 0; i < SJA1105_PORT_NB; i++) { | |
302 | + u32 port_status; | |
303 | + | |
304 | + /* Get port type / speed */ | |
305 | + port_status = sja1105_read_reg32(sjap, | |
306 | + SJA1105_PORT_STATUS_MII_PORT(i)); | |
307 | + | |
308 | + switch (port_status & SJA1105_PORT_STATUS_MII_MODE) { | |
309 | + case e_mii_mode_rgmii: | |
310 | + /* Set slew rate of TX Pins to high speed */ | |
311 | + sja1105_write_reg32(sjap, | |
312 | + SJA1105_CFG_PAD_MIIX_TX_PORT(i), | |
313 | + SJA1105_CFG_PAD_MIIX_TX_SLEW_RGMII); | |
314 | + | |
315 | + /* Set Clock delay */ | |
316 | + sja1105_write_reg32(sjap, | |
317 | + SJA1105_CFG_PAD_MIIX_ID_PORT(i), | |
318 | + SJA1105_CFG_PAD_MIIX_ID_RGMII); | |
319 | + | |
320 | + /* Disable IDIV */ | |
321 | + sja1105_write_reg32(sjap, SJA1105_CGU_IDIV_PORT(i), | |
322 | + SJA1105_CGU_IDIV_DISABLE); | |
323 | + | |
324 | + /* Set Clock source to PLL0 */ | |
325 | + sja1105_write_reg32(sjap, | |
326 | + SJA1105_CGU_MII_TX_CLK_PORT(i), | |
327 | + SJA1105_CGU_MII_CLK_SRC_PLL0); | |
328 | + break; | |
329 | + | |
330 | + default: | |
331 | + break; | |
332 | + } | |
333 | + } | |
334 | +} | |
335 | + | |
297 | 336 | static int sja1105_configuration_load(struct sja_parms *sjap) |
298 | 337 | { |
299 | 338 | int remaining_words; |
300 | 339 | |
... | ... | @@ -371,10 +410,13 @@ |
371 | 410 | sja1105_post_cfg_load_check(sjap); |
372 | 411 | } |
373 | 412 | |
374 | - if (!sja1105_post_cfg_load_check(sjap)) { | |
413 | + if (!sja1105_post_cfg_load_check(sjap)) { | |
375 | 414 | printf("SJA1105 configuration failed\n"); |
376 | 415 | return -ENXIO; |
377 | 416 | } |
417 | + | |
418 | + sja1105_port_cfg(sjap); | |
419 | + | |
378 | 420 | return 0; |
379 | 421 | } |
380 | 422 | |
... | ... | @@ -416,7 +458,7 @@ |
416 | 458 | sjap.cs = cs; |
417 | 459 | sjap.bus = bus; |
418 | 460 | |
419 | - printf("Loading SJA1105 firmware over SPI\n"); | |
461 | + printf("Loading SJA1105 firmware over SPI %d:%d\n", bus, cs); | |
420 | 462 | |
421 | 463 | sjap.devid = sja1105_check_device_id(&sjap); |
422 | 464 |
drivers/spi/sja1105_ll.h
... | ... | @@ -187,6 +187,10 @@ |
187 | 187 | #define SJA1105_CGU_MII_TX_CLK_PORT(port) (SJA1105_CGU_MII_TX_CLK_ADDR + \ |
188 | 188 | (port) * 6) |
189 | 189 | |
190 | +#define SJA1105_CGU_IDIV_DISABLE 0x0A00001 | |
191 | + | |
192 | +#define SJA1105_CGU_MII_CLK_SRC_PLL0 0XB000800 | |
193 | + | |
190 | 194 | /* Configuration registers */ |
191 | 195 | |
192 | 196 | #define SJA1105_CFG_PAD_MIIX_TX_ADDR 0x100800 |
193 | 197 | |
... | ... | @@ -201,9 +205,35 @@ |
201 | 205 | #define SJA1105_PORT_STATUS_MII_PORT(port) (SJA1105_PORT_STATUS_MII_ADDR \ |
202 | 206 | + (port)) |
203 | 207 | |
208 | +#define SJA1105_CFG_PAD_MIIX_TX_D32_OS_HS 0x18000000 | |
209 | +#define SJA1105_CFG_PAD_MIIX_TX_D32_IPUD_FS 0x02000000 | |
210 | +#define SJA1105_CFG_PAD_MIIX_TX_D10_OS_HS 0x00180000 | |
211 | +#define SJA1105_CFG_PAD_MIIX_TX_D10_IPUD_FS 0x00020000 | |
212 | +#define SJA1105_CFG_PAD_MIIX_TX_CTRL_OS_HS 0x00001800 | |
213 | +#define SJA1105_CFG_PAD_MIIX_TX_CTRL_IPUD_FS 0x00000200 | |
214 | +#define SJA1105_CFG_PAD_MIIX_TX_CLK_OS_HS 0x00000018 | |
215 | +#define SJA1105_CFG_PAD_MIIX_TX_CLK_IPUD_FS 0x00000002 | |
216 | + | |
217 | +#define SJA1105_CFG_PAD_MIIX_TX_SLEW_RGMII ( \ | |
218 | + SJA1105_CFG_PAD_MIIX_TX_D32_OS_HS \ | |
219 | + | SJA1105_CFG_PAD_MIIX_TX_D32_IPUD_FS \ | |
220 | + | SJA1105_CFG_PAD_MIIX_TX_D10_OS_HS \ | |
221 | + | SJA1105_CFG_PAD_MIIX_TX_D10_IPUD_FS \ | |
222 | + | SJA1105_CFG_PAD_MIIX_TX_CTRL_OS_HS \ | |
223 | + | SJA1105_CFG_PAD_MIIX_TX_CTRL_IPUD_FS \ | |
224 | + | SJA1105_CFG_PAD_MIIX_TX_CLK_OS_HS \ | |
225 | + | SJA1105_CFG_PAD_MIIX_TX_CLK_IPUD_FS) | |
226 | + | |
204 | 227 | #define SJA1105_CFG_PAD_MIIX_ID_RXC_DELAY(delay) ((delay) << 10) |
205 | 228 | #define SJA1105_CFG_PAD_MIIX_ID_RXC_BYPASS BIT(9) |
206 | 229 | #define SJA1105_CFG_PAD_MIIX_ID_RXC_PD BIT(8) |
230 | +#define SJA1105_CFG_PAD_MIIX_ID_TXC_DELAY(delay) ((delay) << 2) | |
231 | + | |
232 | +#define SJA1105_DELAY_81DEG 8 | |
233 | + | |
234 | +#define SJA1105_CFG_PAD_MIIX_ID_RGMII ( \ | |
235 | + SJA1105_CFG_PAD_MIIX_ID_RXC_DELAY(SJA1105_DELAY_81DEG) \ | |
236 | + | SJA1105_CFG_PAD_MIIX_ID_TXC_DELAY(SJA1105_DELAY_81DEG)) | |
207 | 237 | |
208 | 238 | #define SJA1105_PORT_STATUS_MII_MODE (0x00000003) |
209 | 239 |