Lines Matching +full:port +full:- +full:1
4 * SPDX-License-Identifier: GPL-2.0+
21 #define SRIO_RW_WIN_SIZE 0x100000 /* 1M */
45 (&((immap_t *)CONFIG_SYS_IMMR)->im_gur)
52 * Erratum A-004034
54 * Description: During port initialization, the SRIO port performs
59 * the configured port width.
60 * An SRIO port configured as a 4x port may see one of these scenarios:
61 * 1. One or more lanes fails to achieve lane synchronization. Depending
62 * on which lanes fail, this may result in downtraining from 4x to 1x
63 * on lane 0, 4x to 1x on lane R (redundant lane).
65 * all 4 lanes achieve lane synchronization, and downtrain to a 1x.
66 * An SRIO port configured as a 1x port may fail to complete port
67 * initialization (PnESCSR[PU] never deasserts) because of scenario 1.
68 * Impact: SRIO port may downtrain to 1x, or may fail to complete
69 * link initialization. Once a port completes link initialization
72 static int srio_erratum_a004034(u8 port) in srio_erratum_a004034() argument
83 conf_lane = (in_be32((void *)&srds_regs->srdspccr0) in srio_erratum_a004034()
84 >> (12 - port * 4)) & 0x3; in srio_erratum_a004034()
85 init_lane = (in_be32((void *)&srio_regs->lp_serial in srio_erratum_a004034()
86 .port[port].pccsr) >> 27) & 0x7; in srio_erratum_a004034()
90 * complete (SERDES SRDSBnRSTCTL[RST_DONE]=1 for n in srio_erratum_a004034()
91 * corresponding to the SERDES bank/PLL for the SRIO port). in srio_erratum_a004034()
93 if (in_be32((void *)&srds_regs->bank[0].rstctl) in srio_erratum_a004034()
96 * Poll the port uninitialized status (SRIO PnESCSR[PO]) until in srio_erratum_a004034()
97 * PO=1 or the counter expires. If the counter expires, the in srio_erratum_a004034()
98 * port has failed initialization: go to recover steps. If PO=1 in srio_erratum_a004034()
99 * and the desired port width is 1x, go to normal steps. If in srio_erratum_a004034()
100 * PO = 1 and the desired port width is 4x, go to recover steps. in srio_erratum_a004034()
104 if (in_be32((void *)&srio_regs->lp_serial in srio_erratum_a004034()
105 .port[port].pescsr) & 0x2) { in srio_erratum_a004034()
119 /* Set SRIO PnCCSR[PD]=1 */ in srio_erratum_a004034()
120 setbits_be32((void *)&srio_regs->lp_serial in srio_erratum_a004034()
121 .port[port].pccsr, in srio_erratum_a004034()
127 setbits_be32((void *)&srio_regs->impl.port[port].pcr, in srio_erratum_a004034()
134 if (port) in srio_erratum_a004034()
139 return -ENODEV; in srio_erratum_a004034()
149 clrbits_be32(&srds_regs->lane[idx].gcr0, in srio_erratum_a004034()
156 in_be32(&srds_regs->lane[idx].gcr0); in srio_erratum_a004034()
160 udelay(1); in srio_erratum_a004034()
162 * Set SERDES BnGCRm0[RRST]=1 for each SRIO in srio_erratum_a004034()
166 setbits_be32(&srds_regs->lane[idx].gcr0, in srio_erratum_a004034()
173 in_be32(&srds_regs->lane[idx].gcr0); in srio_erratum_a004034()
177 udelay(1); in srio_erratum_a004034()
179 /* Write 1 to clear all bits in SRIO PnSLCSR */ in srio_erratum_a004034()
180 out_be32((void *)&srio_regs->impl.port[port].slcsr, in srio_erratum_a004034()
183 clrbits_be32((void *)&srio_regs->impl.port[port].pcr, in srio_erratum_a004034()
186 clrbits_be32((void *)&srio_regs->lp_serial in srio_erratum_a004034()
187 .port[port].pccsr, in srio_erratum_a004034()
191 /* Poll the state of the port again */ in srio_erratum_a004034()
193 (in_be32((void *)&srio_regs->lp_serial in srio_erratum_a004034()
194 .port[port].pccsr) >> 27) & 0x7; in srio_erratum_a004034()
195 if (in_be32((void *)&srio_regs->lp_serial in srio_erratum_a004034()
196 .port[port].pescsr) & 0x2) { in srio_erratum_a004034()
205 return -ENODEV; in srio_erratum_a004034()
208 return -ENODEV; in srio_erratum_a004034()
214 if (!(in_be32((void *)&srio_regs->lp_serial.port[port].pescsr) in srio_erratum_a004034()
216 out_be32(((void *)&srio_regs->lp_serial in srio_erratum_a004034()
217 .port[port].pescsr), 0xffffffff); in srio_erratum_a004034()
218 out_be32(((void *)&srio_regs->phys_err in srio_erratum_a004034()
219 .port[port].edcsr), 0); in srio_erratum_a004034()
220 out_be32(((void *)&srio_regs->logical_err.ltledcsr), 0); in srio_erratum_a004034()
225 return -ENODEV; in srio_erratum_a004034()
236 devdisr = &gur->devdisr3; in srio_init()
238 devdisr = &gur->devdisr; in srio_init()
244 srio1_used = 1; in srio_init()
247 printf("SRIO1: enabled but port error\n"); in srio_init()
260 srio2_used = 1; in srio_init()
262 if (srio_erratum_a004034(1) < 0) in srio_init()
263 printf("SRIO2: enabled but port error\n"); in srio_init()
281 /* neither port is used - disable everything */ in srio_init()
290 void srio_boot_master(int port) in srio_boot_master() argument
294 /* set port accept-all */ in srio_boot_master()
295 out_be32((void *)&srio->impl.port[port - 1].ptaacr, in srio_boot_master()
298 debug("SRIOBOOT - MASTER: Master port [ %d ] for srio boot.\n", port); in srio_boot_master()
299 /* configure inbound window for slave's u-boot image */ in srio_boot_master()
300 debug("SRIOBOOT - MASTER: Inbound window for slave's image; " in srio_boot_master()
305 out_be32((void *)&srio->atmu.port[port - 1].inbw[0].riwtar, in srio_boot_master()
307 out_be32((void *)&srio->atmu.port[port - 1].inbw[0].riwbar, in srio_boot_master()
309 out_be32((void *)&srio->atmu.port[port - 1].inbw[0].riwar, in srio_boot_master()
313 /* configure inbound window for slave's u-boot image */ in srio_boot_master()
314 debug("SRIOBOOT - MASTER: Inbound window for slave's image; " in srio_boot_master()
319 out_be32((void *)&srio->atmu.port[port - 1].inbw[1].riwtar, in srio_boot_master()
321 out_be32((void *)&srio->atmu.port[port - 1].inbw[1].riwbar, in srio_boot_master()
323 out_be32((void *)&srio->atmu.port[port - 1].inbw[1].riwar, in srio_boot_master()
328 debug("SRIOBOOT - MASTER: Inbound window for slave's ucode and ENV; " in srio_boot_master()
333 out_be32((void *)&srio->atmu.port[port - 1].inbw[2].riwtar, in srio_boot_master()
335 out_be32((void *)&srio->atmu.port[port - 1].inbw[2].riwbar, in srio_boot_master()
337 out_be32((void *)&srio->atmu.port[port - 1].inbw[2].riwar, in srio_boot_master()
342 void srio_boot_master_release_slave(int port) in srio_boot_master_release_slave() argument
346 debug("SRIOBOOT - MASTER: " in srio_boot_master_release_slave()
347 "Check the port status and release slave core ...\n"); in srio_boot_master_release_slave()
349 escsr = in_be32((void *)&srio->lp_serial.port[port - 1].pescsr); in srio_boot_master_release_slave()
352 debug("SRIOBOOT - MASTER: Port [ %d ] is error.\n", in srio_boot_master_release_slave()
353 port); in srio_boot_master_release_slave()
355 debug("SRIOBOOT - MASTER: " in srio_boot_master_release_slave()
356 "Port [ %d ] is ready, now release slave's core ...\n", in srio_boot_master_release_slave()
357 port); in srio_boot_master_release_slave()
362 out_be32((void *)&srio->atmu.port[port - 1] in srio_boot_master_release_slave()
363 .outbw[1].rowtar, 0); in srio_boot_master_release_slave()
364 out_be32((void *)&srio->atmu.port[port - 1] in srio_boot_master_release_slave()
365 .outbw[1].rowtear, 0); in srio_boot_master_release_slave()
366 if (port - 1) in srio_boot_master_release_slave()
367 out_be32((void *)&srio->atmu.port[port - 1] in srio_boot_master_release_slave()
368 .outbw[1].rowbar, in srio_boot_master_release_slave()
371 out_be32((void *)&srio->atmu.port[port - 1] in srio_boot_master_release_slave()
372 .outbw[1].rowbar, in srio_boot_master_release_slave()
374 out_be32((void *)&srio->atmu.port[port - 1] in srio_boot_master_release_slave()
375 .outbw[1].rowar, in srio_boot_master_release_slave()
383 out_be32((void *)&srio->atmu.port[port - 1] in srio_boot_master_release_slave()
386 out_be32((void *)&srio->atmu.port[port - 1] in srio_boot_master_release_slave()
388 if (port - 1) in srio_boot_master_release_slave()
389 out_be32((void *)&srio->atmu.port[port - 1] in srio_boot_master_release_slave()
394 out_be32((void *)&srio->atmu.port[port - 1] in srio_boot_master_release_slave()
398 out_be32((void *)&srio->atmu.port[port - 1] in srio_boot_master_release_slave()
405 * by the maint-outbound window in srio_boot_master_release_slave()
407 if (port - 1) { in srio_boot_master_release_slave()
440 debug("SRIOBOOT - MASTER: " in srio_boot_master_release_slave()
444 debug("SRIOBOOT - MASTER: Port [ %d ] is not ready.\n", port); in srio_boot_master_release_slave()