Lines Matching +full:tx +full:- +full:fifo +full:- +full:max +full:- +full:num

1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright 2009-2011 Freescale Semiconductor, Inc.
38 align_mask = align - 1; in fm_muram_alloc()
43 muram[fm_idx].alloc += (align - off); in fm_muram_alloc()
46 size += (align - off); in fm_muram_alloc()
71 * fm_upload_ucode - Fman microcode upload worker function
83 out_be32(&imem->iadd, IRAM_IADD_AIE); in fm_upload_ucode()
86 out_be32(&imem->idata, (be32_to_cpu(ucode[i]))); in fm_upload_ucode()
89 out_be32(&imem->iadd, 0); in fm_upload_ucode()
90 while ((in_be32(&imem->idata) != be32_to_cpu(ucode[0])) && --timeout) in fm_upload_ucode()
96 out_be32(&imem->iready, IRAM_READY); in fm_upload_ucode()
122 return -EINVAL; in fman_upload_firmware()
125 hdr = &firmware->header; in fman_upload_firmware()
126 length = be32_to_cpu(hdr->length); in fman_upload_firmware()
129 if ((hdr->magic[0] != 'Q') || (hdr->magic[1] != 'E') || in fman_upload_firmware()
130 (hdr->magic[2] != 'F')) { in fman_upload_firmware()
133 return -EPERM; in fman_upload_firmware()
137 if (hdr->version != 1) { in fman_upload_firmware()
139 hdr->version); in fman_upload_firmware()
140 return -EPERM; in fman_upload_firmware()
144 if ((firmware->count != 1)) { in fman_upload_firmware()
146 return -EINVAL; in fman_upload_firmware()
150 calc_size += (firmware->count - 1) * sizeof(struct qe_microcode); in fman_upload_firmware()
152 for (i = 0; i < firmware->count; i++) in fman_upload_firmware()
159 be32_to_cpu(firmware->microcode[i].count); in fman_upload_firmware()
165 return -EPERM; in fman_upload_firmware()
173 if (crc != (crc32(-1, (const void *)firmware, calc_size) ^ -1)) { in fman_upload_firmware()
175 return -EIO; in fman_upload_firmware()
179 for (i = 0; i < firmware->count; i++) { in fman_upload_firmware()
180 const struct qe_microcode *ucode = &firmware->microcode[i]; in fman_upload_firmware()
183 if (be32_to_cpu(ucode->code_offset)) { in fman_upload_firmware()
187 fm_idx + 1, ucode->major, ucode->minor, in fman_upload_firmware()
188 ucode->revision); in fman_upload_firmware()
190 be32_to_cpu(ucode->code_offset); in fman_upload_firmware()
191 ucode_size = sizeof(u32) * be32_to_cpu(ucode->count); in fman_upload_firmware()
214 setbits_be32(&fpm->fmfpee, FMFPEE_EHM | FMFPEE_UEC | in fm_init_fpm()
223 out_be32(&fpm->fpmprc, val); in fm_init_fpm()
229 out_be32(&fpm->fpmprc, val); in fm_init_fpm()
231 /* Tx 1G port */ in fm_init_fpm()
235 out_be32(&fpm->fpmprc, val); in fm_init_fpm()
240 out_be32(&fpm->fpmprc, val); in fm_init_fpm()
241 /* Tx 10G port */ in fm_init_fpm()
244 out_be32(&fpm->fpmprc, val); in fm_init_fpm()
247 out_be32(&fpm->fpmflc, FMFP_FLC_DISP_LIM_NONE); in fm_init_fpm()
249 out_be32(&fpm->fmfpee, FMFPEE_CLEAR_EVENT); in fm_init_fpm()
253 out_be32(&fpm->fpmcev[i], 0xffffffff); in fm_init_fpm()
256 out_be32(&fpm->fpmrcr, FMFP_RCR_MDEC | FMFP_RCR_IDEC); in fm_init_fpm()
270 return -ENOMEM; in fm_init_bmi()
272 offset = base - fm_muram_base(fm_idx); in fm_init_bmi()
278 val |= ((blk - 1) << FMBM_CFG1_FBPS_SHIFT); in fm_init_bmi()
279 out_be32(&bmi->fmbm_cfg1, val); in fm_init_bmi()
282 out_be32(&bmi->fmbm_ier, FMBM_IER_DISABLE_ALL); in fm_init_bmi()
285 out_be32(&bmi->fmbm_ievr, FMBM_IEVR_CLEAR_ALL); in fm_init_bmi()
288 * set port parameters - FMBM_PP_x in fm_init_bmi()
289 * max tasks 10G Rx/Tx=12, 1G Rx/Tx 4, others is 1 in fm_init_bmi()
290 * max dma 10G Rx/Tx=3, others is 1 in fm_init_bmi()
291 * set port FIFO size - FMBM_PFS_x in fm_init_bmi()
292 * 4KB for all Rx and Tx ports in fm_init_bmi()
296 port_id = OH_PORT_ID_BASE + i - 1; in fm_init_bmi()
297 /* max tasks=1, max dma=1, no extra */ in fm_init_bmi()
298 out_be32(&bmi->fmbm_pp[port_id], 0); in fm_init_bmi()
299 /* port FIFO size - 256 bytes, no extra */ in fm_init_bmi()
300 out_be32(&bmi->fmbm_pfs[port_id], 0); in fm_init_bmi()
304 port_id = RX_PORT_1G_BASE + i - 1; in fm_init_bmi()
305 /* max tasks=4, max dma=1, no extra */ in fm_init_bmi()
306 out_be32(&bmi->fmbm_pp[port_id], FMBM_PP_MXT(4)); in fm_init_bmi()
307 /* FIFO size - 4KB, no extra */ in fm_init_bmi()
308 out_be32(&bmi->fmbm_pfs[port_id], FMBM_PFS_IFSZ(0xf)); in fm_init_bmi()
310 /* Tx 1G port FIFO size - 4KB, no extra */ in fm_init_bmi()
312 port_id = TX_PORT_1G_BASE + i - 1; in fm_init_bmi()
313 /* max tasks=4, max dma=1, no extra */ in fm_init_bmi()
314 out_be32(&bmi->fmbm_pp[port_id], FMBM_PP_MXT(4)); in fm_init_bmi()
315 /* FIFO size - 4KB, no extra */ in fm_init_bmi()
316 out_be32(&bmi->fmbm_pfs[port_id], FMBM_PFS_IFSZ(0xf)); in fm_init_bmi()
319 port_id = RX_PORT_10G_BASE - 1; in fm_init_bmi()
320 /* max tasks=12, max dma=3, no extra */ in fm_init_bmi()
321 out_be32(&bmi->fmbm_pp[port_id], FMBM_PP_MXT(12) | FMBM_PP_MXD(3)); in fm_init_bmi()
322 /* FIFO size - 4KB, no extra */ in fm_init_bmi()
323 out_be32(&bmi->fmbm_pfs[port_id], FMBM_PFS_IFSZ(0xf)); in fm_init_bmi()
325 /* Tx 10G port */ in fm_init_bmi()
326 port_id = TX_PORT_10G_BASE - 1; in fm_init_bmi()
327 /* max tasks=12, max dma=3, no extra */ in fm_init_bmi()
328 out_be32(&bmi->fmbm_pp[port_id], FMBM_PP_MXT(12) | FMBM_PP_MXD(3)); in fm_init_bmi()
329 /* FIFO size - 4KB, no extra */ in fm_init_bmi()
330 out_be32(&bmi->fmbm_pfs[port_id], FMBM_PFS_IFSZ(0xf)); in fm_init_bmi()
333 out_be32(&bmi->fmbm_init, FMBM_INIT_START); in fm_init_bmi()
341 out_be32(&qmi->fmqm_eien, FMQM_EIEN_DISABLE_ALL); in fm_init_qmi()
343 out_be32(&qmi->fmqm_eie, FMQM_EIE_CLEAR_ALL); in fm_init_qmi()
346 out_be32(&qmi->fmqm_ien, FMQM_IEN_DISABLE_ALL); in fm_init_qmi()
348 out_be32(&qmi->fmqm_ie, FMQM_IE_CLEAR_ALL); in fm_init_qmi()
351 /* Init common part of FM, index is fm num# like fm as above */
370 if (rc == -EUCLEAN) { in fm_init_common()
428 rc = fman_upload_firmware(index, &reg->fm_imem, addr); in fm_init_common()
433 fm_init_muram(index, &reg->muram); in fm_init_common()
434 fm_init_qmi(&reg->fm_qmi_common); in fm_init_common()
435 fm_init_fpm(&reg->fm_fpm); in fm_init_common()
438 setbits_be32(&reg->fm_dma.fmdmsr, FMDMSR_CLEAR_ALL); in fm_init_common()
441 setbits_be32(&reg->fm_dma.fmdmmr, FMDMMR_SBER); in fm_init_common()
443 return fm_init_bmi(index, &reg->fm_bmi_common); in fm_init_common()
458 if (rc == -EUCLEAN) { in fm_init_common()
511 rc = fman_upload_firmware(index, &reg->fm_imem, addr); in fm_init_common()
516 fm_init_muram(index, &reg->muram); in fm_init_common()
517 fm_init_qmi(&reg->fm_qmi_common); in fm_init_common()
518 fm_init_fpm(&reg->fm_fpm); in fm_init_common()
521 setbits_be32(&reg->fm_dma.fmdmsr, FMDMSR_CLEAR_ALL); in fm_init_common()
524 setbits_be32(&reg->fm_dma.fmdmmr, FMDMMR_SBER); in fm_init_common()
526 return fm_init_bmi(index, &reg->fm_bmi_common); in fm_init_common()