Lines Matching +full:port +full:- +full:1

1 // SPDX-License-Identifier: GPL-2.0+
20 #define SRIO_RW_WIN_SIZE 0x100000 /* 1M */
44 (&((immap_t *)CONFIG_SYS_IMMR)->im_gur)
51 * Erratum A-004034
53 * Description: During port initialization, the SRIO port performs
58 * the configured port width.
59 * An SRIO port configured as a 4x port may see one of these scenarios:
60 * 1. One or more lanes fails to achieve lane synchronization. Depending
61 * on which lanes fail, this may result in downtraining from 4x to 1x
62 * on lane 0, 4x to 1x on lane R (redundant lane).
64 * all 4 lanes achieve lane synchronization, and downtrain to a 1x.
65 * An SRIO port configured as a 1x port may fail to complete port
66 * initialization (PnESCSR[PU] never deasserts) because of scenario 1.
67 * Impact: SRIO port may downtrain to 1x, or may fail to complete
68 * link initialization. Once a port completes link initialization
71 static int srio_erratum_a004034(u8 port) in srio_erratum_a004034() argument
82 conf_lane = (in_be32((void *)&srds_regs->srdspccr0) in srio_erratum_a004034()
83 >> (12 - port * 4)) & 0x3; in srio_erratum_a004034()
84 init_lane = (in_be32((void *)&srio_regs->lp_serial in srio_erratum_a004034()
85 .port[port].pccsr) >> 27) & 0x7; in srio_erratum_a004034()
89 * complete (SERDES SRDSBnRSTCTL[RST_DONE]=1 for n in srio_erratum_a004034()
90 * corresponding to the SERDES bank/PLL for the SRIO port). in srio_erratum_a004034()
92 if (in_be32((void *)&srds_regs->bank[0].rstctl) in srio_erratum_a004034()
95 * Poll the port uninitialized status (SRIO PnESCSR[PO]) until in srio_erratum_a004034()
96 * PO=1 or the counter expires. If the counter expires, the in srio_erratum_a004034()
97 * port has failed initialization: go to recover steps. If PO=1 in srio_erratum_a004034()
98 * and the desired port width is 1x, go to normal steps. If in srio_erratum_a004034()
99 * PO = 1 and the desired port width is 4x, go to recover steps. in srio_erratum_a004034()
103 if (in_be32((void *)&srio_regs->lp_serial in srio_erratum_a004034()
104 .port[port].pescsr) & 0x2) { in srio_erratum_a004034()
118 /* Set SRIO PnCCSR[PD]=1 */ in srio_erratum_a004034()
119 setbits_be32((void *)&srio_regs->lp_serial in srio_erratum_a004034()
120 .port[port].pccsr, in srio_erratum_a004034()
126 setbits_be32((void *)&srio_regs->impl.port[port].pcr, in srio_erratum_a004034()
133 if (port) in srio_erratum_a004034()
138 return -ENODEV; in srio_erratum_a004034()
148 clrbits_be32(&srds_regs->lane[idx].gcr0, in srio_erratum_a004034()
155 in_be32(&srds_regs->lane[idx].gcr0); in srio_erratum_a004034()
159 udelay(1); in srio_erratum_a004034()
161 * Set SERDES BnGCRm0[RRST]=1 for each SRIO in srio_erratum_a004034()
165 setbits_be32(&srds_regs->lane[idx].gcr0, in srio_erratum_a004034()
172 in_be32(&srds_regs->lane[idx].gcr0); in srio_erratum_a004034()
176 udelay(1); in srio_erratum_a004034()
178 /* Write 1 to clear all bits in SRIO PnSLCSR */ in srio_erratum_a004034()
179 out_be32((void *)&srio_regs->impl.port[port].slcsr, in srio_erratum_a004034()
182 clrbits_be32((void *)&srio_regs->impl.port[port].pcr, in srio_erratum_a004034()
185 clrbits_be32((void *)&srio_regs->lp_serial in srio_erratum_a004034()
186 .port[port].pccsr, in srio_erratum_a004034()
190 /* Poll the state of the port again */ in srio_erratum_a004034()
192 (in_be32((void *)&srio_regs->lp_serial in srio_erratum_a004034()
193 .port[port].pccsr) >> 27) & 0x7; in srio_erratum_a004034()
194 if (in_be32((void *)&srio_regs->lp_serial in srio_erratum_a004034()
195 .port[port].pescsr) & 0x2) { in srio_erratum_a004034()
204 return -ENODEV; in srio_erratum_a004034()
207 return -ENODEV; in srio_erratum_a004034()
213 if (!(in_be32((void *)&srio_regs->lp_serial.port[port].pescsr) in srio_erratum_a004034()
215 out_be32(((void *)&srio_regs->lp_serial in srio_erratum_a004034()
216 .port[port].pescsr), 0xffffffff); in srio_erratum_a004034()
217 out_be32(((void *)&srio_regs->phys_err in srio_erratum_a004034()
218 .port[port].edcsr), 0); in srio_erratum_a004034()
219 out_be32(((void *)&srio_regs->logical_err.ltledcsr), 0); in srio_erratum_a004034()
224 return -ENODEV; in srio_erratum_a004034()
235 devdisr = &gur->devdisr3; in srio_init()
237 devdisr = &gur->devdisr; in srio_init()
243 srio1_used = 1; in srio_init()
246 printf("SRIO1: enabled but port error\n"); in srio_init()
259 srio2_used = 1; in srio_init()
261 if (srio_erratum_a004034(1) < 0) in srio_init()
262 printf("SRIO2: enabled but port error\n"); in srio_init()
280 /* neither port is used - disable everything */ in srio_init()
289 void srio_boot_master(int port) in srio_boot_master() argument
293 /* set port accept-all */ in srio_boot_master()
294 out_be32((void *)&srio->impl.port[port - 1].ptaacr, in srio_boot_master()
297 debug("SRIOBOOT - MASTER: Master port [ %d ] for srio boot.\n", port); in srio_boot_master()
298 /* configure inbound window for slave's u-boot image */ in srio_boot_master()
299 debug("SRIOBOOT - MASTER: Inbound window for slave's image; " in srio_boot_master()
304 out_be32((void *)&srio->atmu.port[port - 1].inbw[0].riwtar, in srio_boot_master()
306 out_be32((void *)&srio->atmu.port[port - 1].inbw[0].riwbar, in srio_boot_master()
308 out_be32((void *)&srio->atmu.port[port - 1].inbw[0].riwar, in srio_boot_master()
312 /* configure inbound window for slave's u-boot image */ in srio_boot_master()
313 debug("SRIOBOOT - MASTER: Inbound window for slave's image; " in srio_boot_master()
318 out_be32((void *)&srio->atmu.port[port - 1].inbw[1].riwtar, in srio_boot_master()
320 out_be32((void *)&srio->atmu.port[port - 1].inbw[1].riwbar, in srio_boot_master()
322 out_be32((void *)&srio->atmu.port[port - 1].inbw[1].riwar, in srio_boot_master()
327 debug("SRIOBOOT - MASTER: Inbound window for slave's ucode and ENV; " in srio_boot_master()
332 out_be32((void *)&srio->atmu.port[port - 1].inbw[2].riwtar, in srio_boot_master()
334 out_be32((void *)&srio->atmu.port[port - 1].inbw[2].riwbar, in srio_boot_master()
336 out_be32((void *)&srio->atmu.port[port - 1].inbw[2].riwar, in srio_boot_master()
341 void srio_boot_master_release_slave(int port) in srio_boot_master_release_slave() argument
345 debug("SRIOBOOT - MASTER: " in srio_boot_master_release_slave()
346 "Check the port status and release slave core ...\n"); in srio_boot_master_release_slave()
348 escsr = in_be32((void *)&srio->lp_serial.port[port - 1].pescsr); in srio_boot_master_release_slave()
351 debug("SRIOBOOT - MASTER: Port [ %d ] is error.\n", in srio_boot_master_release_slave()
352 port); in srio_boot_master_release_slave()
354 debug("SRIOBOOT - MASTER: " in srio_boot_master_release_slave()
355 "Port [ %d ] is ready, now release slave's core ...\n", in srio_boot_master_release_slave()
356 port); in srio_boot_master_release_slave()
361 out_be32((void *)&srio->atmu.port[port - 1] in srio_boot_master_release_slave()
362 .outbw[1].rowtar, 0); in srio_boot_master_release_slave()
363 out_be32((void *)&srio->atmu.port[port - 1] in srio_boot_master_release_slave()
364 .outbw[1].rowtear, 0); in srio_boot_master_release_slave()
365 if (port - 1) in srio_boot_master_release_slave()
366 out_be32((void *)&srio->atmu.port[port - 1] in srio_boot_master_release_slave()
367 .outbw[1].rowbar, in srio_boot_master_release_slave()
370 out_be32((void *)&srio->atmu.port[port - 1] in srio_boot_master_release_slave()
371 .outbw[1].rowbar, in srio_boot_master_release_slave()
373 out_be32((void *)&srio->atmu.port[port - 1] in srio_boot_master_release_slave()
374 .outbw[1].rowar, in srio_boot_master_release_slave()
382 out_be32((void *)&srio->atmu.port[port - 1] in srio_boot_master_release_slave()
385 out_be32((void *)&srio->atmu.port[port - 1] in srio_boot_master_release_slave()
387 if (port - 1) in srio_boot_master_release_slave()
388 out_be32((void *)&srio->atmu.port[port - 1] in srio_boot_master_release_slave()
393 out_be32((void *)&srio->atmu.port[port - 1] in srio_boot_master_release_slave()
397 out_be32((void *)&srio->atmu.port[port - 1] in srio_boot_master_release_slave()
404 * by the maint-outbound window in srio_boot_master_release_slave()
406 if (port - 1) { in srio_boot_master_release_slave()
439 debug("SRIOBOOT - MASTER: " in srio_boot_master_release_slave()
443 debug("SRIOBOOT - MASTER: Port [ %d ] is not ready.\n", port); in srio_boot_master_release_slave()