Lines Matching refs:fman

47 #include "fman.h"
574 static irqreturn_t fman_exceptions(struct fman *fman,
577 dev_dbg(fman->dev, "%s: FMan[%d] exception %d\n",
578 __func__, fman->state->fm_id, exception);
583 static irqreturn_t fman_bus_error(struct fman *fman, u8 __maybe_unused port_id,
588 dev_dbg(fman->dev, "%s: FMan[%d] bus error: port_id[%d]\n",
589 __func__, fman->state->fm_id, port_id);
594 static inline irqreturn_t call_mac_isr(struct fman *fman, u8 id)
596 if (fman->intr_mng[id].isr_cb) {
597 fman->intr_mng[id].isr_cb(fman->intr_mng[id].src_handle);
637 static void set_port_liodn(struct fman *fman, u8 port_id,
642 iowrite32be(liodn_ofst, &fman->bmi_regs->fmbm_spliodn[port_id - 1]);
646 tmp = ioread32be(&fman->dma_regs->fmdmplr[port_id / 2]);
654 iowrite32be(tmp, &fman->dma_regs->fmdmplr[port_id / 2]);
706 static int dma_init(struct fman *fman)
708 struct fman_dma_regs __iomem *dma_rg = fman->dma_regs;
709 struct fman_cfg *cfg = fman->cfg;
770 fman->cam_size =
771 (u32)(fman->cfg->dma_cam_num_of_entries * DMA_CAM_SIZEOF_ENTRY);
772 fman->cam_offset = fman_muram_alloc(fman->muram, fman->cam_size);
773 if (IS_ERR_VALUE(fman->cam_offset)) {
774 dev_err(fman->dev, "%s: MURAM alloc for DMA CAM failed\n",
779 if (fman->state->rev_info.major == 2) {
782 fman_muram_free_mem(fman->muram, fman->cam_offset,
783 fman->cam_size);
785 fman->cam_size = fman->cfg->dma_cam_num_of_entries * 72 + 128;
786 fman->cam_offset = fman_muram_alloc(fman->muram,
787 fman->cam_size);
788 if (IS_ERR_VALUE(fman->cam_offset)) {
789 dev_err(fman->dev, "%s: MURAM alloc for DMA CAM failed\n",
794 if (fman->cfg->dma_cam_num_of_entries % 8 ||
795 fman->cfg->dma_cam_num_of_entries > 32) {
796 dev_err(fman->dev, "%s: wrong dma_cam_num_of_entries\n",
802 fman_muram_offset_to_vbase(fman->muram,
803 fman->cam_offset);
805 (32 - fman->cfg->dma_cam_num_of_entries)) - 1),
809 fman->cfg->cam_base_addr = fman->cam_offset;
954 static int enable(struct fman *fman, struct fman_cfg *cfg)
968 iowrite32be(BMI_INIT_START, &fman->bmi_regs->fmbm_init);
970 &fman->qmi_regs->fmqm_gc);
975 static int set_exception(struct fman *fman,
982 tmp = ioread32be(&fman->dma_regs->fmdmmr);
988 iowrite32be(tmp, &fman->dma_regs->fmdmmr);
993 tmp = ioread32be(&fman->dma_regs->fmdmmr);
998 iowrite32be(tmp, &fman->dma_regs->fmdmmr);
1001 tmp = ioread32be(&fman->fpm_regs->fmfp_ee);
1006 iowrite32be(tmp, &fman->fpm_regs->fmfp_ee);
1009 tmp = ioread32be(&fman->fpm_regs->fmfp_ee);
1014 iowrite32be(tmp, &fman->fpm_regs->fmfp_ee);
1017 tmp = ioread32be(&fman->fpm_regs->fmfp_ee);
1022 iowrite32be(tmp, &fman->fpm_regs->fmfp_ee);
1025 tmp = ioread32be(&fman->qmi_regs->fmqm_ien);
1030 iowrite32be(tmp, &fman->qmi_regs->fmqm_ien);
1033 tmp = ioread32be(&fman->qmi_regs->fmqm_eien);
1038 iowrite32be(tmp, &fman->qmi_regs->fmqm_eien);
1041 tmp = ioread32be(&fman->qmi_regs->fmqm_eien);
1046 iowrite32be(tmp, &fman->qmi_regs->fmqm_eien);
1049 tmp = ioread32be(&fman->bmi_regs->fmbm_ier);
1054 iowrite32be(tmp, &fman->bmi_regs->fmbm_ier);
1057 tmp = ioread32be(&fman->bmi_regs->fmbm_ier);
1062 iowrite32be(tmp, &fman->bmi_regs->fmbm_ier);
1065 tmp = ioread32be(&fman->bmi_regs->fmbm_ier);
1070 iowrite32be(tmp, &fman->bmi_regs->fmbm_ier);
1073 tmp = ioread32be(&fman->bmi_regs->fmbm_ier);
1078 iowrite32be(tmp, &fman->bmi_regs->fmbm_ier);
1081 tmp = ioread32be(&fman->fpm_regs->fm_rie);
1084 enable_rams_ecc(fman->fpm_regs);
1091 disable_rams_ecc(fman->fpm_regs);
1094 iowrite32be(tmp, &fman->fpm_regs->fm_rie);
1097 tmp = ioread32be(&fman->fpm_regs->fm_rie);
1100 enable_rams_ecc(fman->fpm_regs);
1107 disable_rams_ecc(fman->fpm_regs);
1110 iowrite32be(tmp, &fman->fpm_regs->fm_rie);
1217 static void free_init_resources(struct fman *fman)
1219 if (fman->cam_offset)
1220 fman_muram_free_mem(fman->muram, fman->cam_offset,
1221 fman->cam_size);
1222 if (fman->fifo_offset)
1223 fman_muram_free_mem(fman->muram, fman->fifo_offset,
1224 fman->fifo_size);
1227 static irqreturn_t bmi_err_event(struct fman *fman)
1230 struct fman_bmi_regs __iomem *bmi_rg = fman->bmi_regs;
1244 ret = fman->exception_cb(fman, FMAN_EX_BMI_STORAGE_PROFILE_ECC);
1246 ret = fman->exception_cb(fman, FMAN_EX_BMI_LIST_RAM_ECC);
1248 ret = fman->exception_cb(fman, FMAN_EX_BMI_STATISTICS_RAM_ECC);
1250 ret = fman->exception_cb(fman, FMAN_EX_BMI_DISPATCH_RAM_ECC);
1255 static irqreturn_t qmi_err_event(struct fman *fman)
1258 struct fman_qmi_regs __iomem *qmi_rg = fman->qmi_regs;
1273 ret = fman->exception_cb(fman, FMAN_EX_QMI_DOUBLE_ECC);
1275 ret = fman->exception_cb(fman,
1281 static irqreturn_t dma_err_event(struct fman *fman)
1286 struct fman_dma_regs __iomem *dma_rg = fman->dma_regs;
1316 hw_port_id_to_sw_port_id(fman->state->rev_info.major, port_id);
1320 ret = fman->bus_error_cb(fman, relative_port_id, addr, tnum,
1324 ret = fman->exception_cb(fman, FMAN_EX_DMA_SINGLE_PORT_ECC);
1326 ret = fman->exception_cb(fman, FMAN_EX_DMA_READ_ECC);
1328 ret = fman->exception_cb(fman, FMAN_EX_DMA_SYSTEM_WRITE_ECC);
1330 ret = fman->exception_cb(fman, FMAN_EX_DMA_FM_WRITE_ECC);
1335 static irqreturn_t fpm_err_event(struct fman *fman)
1338 struct fman_fpm_regs __iomem *fpm_rg = fman->fpm_regs;
1347 ret = fman->exception_cb(fman, FMAN_EX_FPM_DOUBLE_ECC);
1349 ret = fman->exception_cb(fman, FMAN_EX_FPM_STALL_ON_TASKS);
1352 ret = fman->exception_cb(fman, FMAN_EX_FPM_SINGLE_ECC);
1357 static irqreturn_t muram_err_intr(struct fman *fman)
1360 struct fman_fpm_regs __iomem *fpm_rg = fman->fpm_regs;
1370 ret = fman->exception_cb(fman, FMAN_EX_MURAM_ECC);
1375 static irqreturn_t qmi_event(struct fman *fman)
1378 struct fman_qmi_regs __iomem *qmi_rg = fman->qmi_regs;
1392 ret = fman->exception_cb(fman, FMAN_EX_QMI_SINGLE_ECC);
1397 static void enable_time_stamp(struct fman *fman)
1399 struct fman_fpm_regs __iomem *fpm_rg = fman->fpm_regs;
1400 u16 fm_clk_freq = fman->state->fm_clk_freq;
1403 ts_freq = (u32)(1 << fman->state->count1_micro_bit);
1428 fman->state->enabled_time_stamp = true;
1431 static int clear_iram(struct fman *fman)
1436 iram = fman->base_addr + IMEM_OFFSET;
1447 for (i = 0; i < (fman->state->fm_iram_size / 4); i++)
1450 iowrite32be(fman->state->fm_iram_size - 4, &iram->iadd);
1551 static int set_size_of_fifo(struct fman *fman, u8 port_id, u32 *size_of_fifo,
1554 struct fman_bmi_regs __iomem *bmi_rg = fman->bmi_regs;
1563 if (extra_fifo && !fman->state->extra_fifo_pool_size)
1564 fman->state->extra_fifo_pool_size =
1565 fman->state->num_of_rx_ports * FMAN_BMI_FIFO_UNITS;
1567 fman->state->extra_fifo_pool_size =
1568 max(fman->state->extra_fifo_pool_size, extra_fifo);
1571 if ((fman->state->accumulated_fifo_size + fifo) >
1572 (fman->state->total_fifo_size -
1573 fman->state->extra_fifo_pool_size)) {
1574 dev_err(fman->dev, "%s: Requested fifo size and extra size exceed total FIFO size.\n",
1586 fman->state->accumulated_fifo_size += fifo;
1591 static int set_num_of_tasks(struct fman *fman, u8 port_id, u8 *num_of_tasks,
1594 struct fman_bmi_regs __iomem *bmi_rg = fman->bmi_regs;
1600 fman->state->extra_tasks_pool_size =
1601 max(fman->state->extra_tasks_pool_size, extra_tasks);
1604 if ((fman->state->accumulated_num_of_tasks + tasks) >
1605 (fman->state->total_num_of_tasks -
1606 fman->state->extra_tasks_pool_size)) {
1607 dev_err(fman->dev, "%s: Requested num_of_tasks and extra tasks pool for fm%d exceed total num_of_tasks.\n",
1608 __func__, fman->state->fm_id);
1612 fman->state->accumulated_num_of_tasks += tasks;
1624 static int set_num_of_open_dmas(struct fman *fman, u8 port_id,
1628 struct fman_bmi_regs __iomem *bmi_rg = fman->bmi_regs;
1650 fman->state->extra_open_dmas_pool_size =
1651 (u8)max(fman->state->extra_open_dmas_pool_size,
1653 fman->state->accumulated_num_of_open_dmas += current_val;
1660 fman->state->extra_open_dmas_pool_size =
1661 (u8)max(fman->state->extra_open_dmas_pool_size,
1664 if ((fman->state->rev_info.major < 6) &&
1665 (fman->state->accumulated_num_of_open_dmas - current_val +
1666 open_dmas > fman->state->max_num_of_open_dmas)) {
1667 dev_err(fman->dev, "%s: Requested num_of_open_dmas for fm%d exceeds total num_of_open_dmas.\n",
1668 __func__, fman->state->fm_id);
1670 } else if ((fman->state->rev_info.major >= 6) &&
1671 !((fman->state->rev_info.major == 6) &&
1672 (fman->state->rev_info.minor == 0)) &&
1673 (fman->state->accumulated_num_of_open_dmas -
1675 fman->state->dma_thresh_max_commq + 1)) {
1676 dev_err(fman->dev, "%s: Requested num_of_open_dmas for fm%d exceeds DMA Command queue (%d)\n",
1677 __func__, fman->state->fm_id,
1678 fman->state->dma_thresh_max_commq + 1);
1682 WARN_ON(fman->state->accumulated_num_of_open_dmas < current_val);
1684 fman->state->accumulated_num_of_open_dmas -= current_val;
1685 fman->state->accumulated_num_of_open_dmas += open_dmas;
1687 if (fman->state->rev_info.major < 6)
1689 (u8)(fman->state->accumulated_num_of_open_dmas +
1690 fman->state->extra_open_dmas_pool_size);
1711 static int fman_config(struct fman *fman)
1716 base_addr = fman->dts_params.base_addr;
1718 fman->state = kzalloc(sizeof(*fman->state), GFP_KERNEL);
1719 if (!fman->state)
1723 fman->cfg = kzalloc(sizeof(*fman->cfg), GFP_KERNEL);
1724 if (!fman->cfg)
1728 fman->muram =
1729 fman_muram_init(fman->dts_params.muram_res.start,
1730 resource_size(&fman->dts_params.muram_res));
1731 if (!fman->muram)
1735 fman->state->fm_id = fman->dts_params.id;
1736 fman->state->fm_clk_freq = fman->dts_params.clk_freq;
1737 fman->state->qman_channel_base = fman->dts_params.qman_channel_base;
1738 fman->state->num_of_qman_channels =
1739 fman->dts_params.num_of_qman_channels;
1740 fman->state->res = fman->dts_params.res;
1741 fman->exception_cb = fman_exceptions;
1742 fman->bus_error_cb = fman_bus_error;
1743 fman->fpm_regs = base_addr + FPM_OFFSET;
1744 fman->bmi_regs = base_addr + BMI_OFFSET;
1745 fman->qmi_regs = base_addr + QMI_OFFSET;
1746 fman->dma_regs = base_addr + DMA_OFFSET;
1747 fman->hwp_regs = base_addr + HWP_OFFSET;
1748 fman->kg_regs = base_addr + KG_OFFSET;
1749 fman->base_addr = base_addr;
1751 spin_lock_init(&fman->spinlock);
1752 fman_defconfig(fman->cfg);
1754 fman->state->extra_fifo_pool_size = 0;
1755 fman->state->exceptions = (EX_DMA_BUS_ERROR |
1772 fman_get_revision(fman, &fman->state->rev_info);
1774 err = fill_soc_specific_params(fman->state);
1779 if (fman->state->rev_info.major >= 6)
1780 fman->cfg->dma_aid_mode = FMAN_DMA_AID_OUT_PORT_ID;
1782 fman->cfg->qmi_def_tnums_thresh = fman->state->qmi_def_tnums_thresh;
1784 fman->state->total_num_of_tasks =
1785 (u8)DFLT_TOTAL_NUM_OF_TASKS(fman->state->rev_info.major,
1786 fman->state->rev_info.minor,
1787 fman->state->bmi_max_num_of_tasks);
1789 if (fman->state->rev_info.major < 6) {
1790 fman->cfg->dma_comm_qtsh_clr_emer =
1791 (u8)DFLT_DMA_COMM_Q_LOW(fman->state->rev_info.major,
1792 fman->state->dma_thresh_max_commq);
1794 fman->cfg->dma_comm_qtsh_asrt_emer =
1795 (u8)DFLT_DMA_COMM_Q_HIGH(fman->state->rev_info.major,
1796 fman->state->dma_thresh_max_commq);
1798 fman->cfg->dma_cam_num_of_entries =
1799 DFLT_DMA_CAM_NUM_OF_ENTRIES(fman->state->rev_info.major);
1801 fman->cfg->dma_read_buf_tsh_clr_emer =
1802 DFLT_DMA_READ_INT_BUF_LOW(fman->state->dma_thresh_max_buf);
1804 fman->cfg->dma_read_buf_tsh_asrt_emer =
1805 DFLT_DMA_READ_INT_BUF_HIGH(fman->state->dma_thresh_max_buf);
1807 fman->cfg->dma_write_buf_tsh_clr_emer =
1808 DFLT_DMA_WRITE_INT_BUF_LOW(fman->state->dma_thresh_max_buf);
1810 fman->cfg->dma_write_buf_tsh_asrt_emer =
1811 DFLT_DMA_WRITE_INT_BUF_HIGH(fman->state->dma_thresh_max_buf);
1813 fman->cfg->dma_axi_dbg_num_of_beats =
1820 kfree(fman->cfg);
1822 kfree(fman->state);
1824 kfree(fman);
1828 static int fman_reset(struct fman *fman)
1833 if (fman->state->rev_info.major < 6) {
1834 iowrite32be(FPM_RSTC_FM_RESET, &fman->fpm_regs->fm_rstc);
1839 } while (((ioread32be(&fman->fpm_regs->fm_rstc)) &
1856 dev_err(fman->dev, "%s: Couldn't find guts node\n",
1863 dev_err(fman->dev, "%s: Couldn't map %pOF regs\n",
1871 if (fman->dts_params.id == 0)
1881 iowrite32be(FPM_RSTC_FM_RESET, &fman->fpm_regs->fm_rstc);
1887 } while (((ioread32be(&fman->fpm_regs->fm_rstc)) &
1912 dev_dbg(fman->dev, "%s: Didn't perform FManV3 reset due to Errata A007273!\n",
1920 static int fman_init(struct fman *fman)
1925 if (is_init_done(fman->cfg))
1928 fman->state->count1_micro_bit = FM_TIMESTAMP_1_USEC_BIT;
1930 cfg = fman->cfg;
1933 if (fman->state->rev_info.major < 6)
1934 fman->state->exceptions &= ~FMAN_EX_BMI_DISPATCH_RAM_ECC;
1936 if (fman->state->rev_info.major >= 6)
1937 fman->state->exceptions &= ~FMAN_EX_QMI_SINGLE_ECC;
1940 memset_io((void __iomem *)(fman->base_addr + CGP_OFFSET), 0,
1941 fman->state->fm_port_num_of_cg);
1949 fman->liodn_offset[i] =
1950 ioread32be(&fman->bmi_regs->fmbm_spliodn[i - 1]);
1953 liodn_base = ioread32be(&fman->dma_regs->fmdmplr[i / 2]);
1962 fman->liodn_base[i] = liodn_base;
1965 err = fman_reset(fman);
1969 if (ioread32be(&fman->qmi_regs->fmqm_gs) & QMI_GS_HALT_NOT_BUSY) {
1970 resume(fman->fpm_regs);
1975 } while (((ioread32be(&fman->qmi_regs->fmqm_gs)) &
1978 dev_warn(fman->dev, "%s: QMI is in halt not busy state\n",
1982 if (clear_iram(fman) != 0)
1985 cfg->exceptions = fman->state->exceptions;
1989 err = dma_init(fman);
1991 free_init_resources(fman);
1996 fpm_init(fman->fpm_regs, fman->cfg);
2000 fman->fifo_offset = fman_muram_alloc(fman->muram,
2001 fman->state->total_fifo_size);
2002 if (IS_ERR_VALUE(fman->fifo_offset)) {
2003 free_init_resources(fman);
2004 dev_err(fman->dev, "%s: MURAM alloc for BMI FIFO failed\n",
2009 cfg->fifo_base_addr = fman->fifo_offset;
2010 cfg->total_fifo_size = fman->state->total_fifo_size;
2011 cfg->total_num_of_tasks = fman->state->total_num_of_tasks;
2012 cfg->clk_freq = fman->state->fm_clk_freq;
2015 bmi_init(fman->bmi_regs, fman->cfg);
2018 qmi_init(fman->qmi_regs, fman->cfg);
2021 hwp_init(fman->hwp_regs);
2024 fman->keygen = keygen_init(fman->kg_regs);
2025 if (!fman->keygen)
2028 err = enable(fman, cfg);
2032 enable_time_stamp(fman);
2034 kfree(fman->cfg);
2035 fman->cfg = NULL;
2040 static int fman_set_exception(struct fman *fman,
2045 if (!is_init_done(fman->cfg))
2051 fman->state->exceptions |= bit_mask;
2053 fman->state->exceptions &= ~bit_mask;
2055 dev_err(fman->dev, "%s: Undefined exception (%d)\n",
2060 return set_exception(fman, exception, enable);
2065 * @fman: A Pointer to FMan device
2076 void fman_register_intr(struct fman *fman, enum fman_event_modules module,
2086 fman->intr_mng[event].isr_cb = isr_cb;
2087 fman->intr_mng[event].src_handle = src_arg;
2093 * @fman: A Pointer to FMan device
2102 void fman_unregister_intr(struct fman *fman, enum fman_event_modules module,
2110 fman->intr_mng[event].isr_cb = NULL;
2111 fman->intr_mng[event].src_handle = NULL;
2117 * @fman: A Pointer to FMan device
2124 int fman_set_port_params(struct fman *fman,
2131 spin_lock_irqsave(&fman->spinlock, flags);
2133 err = set_num_of_tasks(fman, port_params->port_id,
2144 fman->state->accumulated_num_of_deq_tnums +=
2146 enq_th = (ioread32be(&fman->qmi_regs->fmqm_gc) &
2151 if (enq_th >= (fman->state->qmi_max_num_of_tnums -
2152 fman->state->accumulated_num_of_deq_tnums)) {
2154 fman->state->qmi_max_num_of_tnums -
2155 fman->state->accumulated_num_of_deq_tnums - 1;
2157 reg = ioread32be(&fman->qmi_regs->fmqm_gc);
2160 iowrite32be(reg, &fman->qmi_regs->fmqm_gc);
2163 deq_th = ioread32be(&fman->qmi_regs->fmqm_gc) &
2168 * (fman->state->qmi_max_num_of_tnums-1).
2170 if ((deq_th <= fman->state->accumulated_num_of_deq_tnums) &&
2171 (deq_th < fman->state->qmi_max_num_of_tnums - 1)) {
2172 deq_th = fman->state->accumulated_num_of_deq_tnums + 1;
2173 reg = ioread32be(&fman->qmi_regs->fmqm_gc);
2176 iowrite32be(reg, &fman->qmi_regs->fmqm_gc);
2180 err = set_size_of_fifo(fman, port_params->port_id,
2186 err = set_num_of_open_dmas(fman, port_params->port_id,
2192 set_port_liodn(fman, port_id, fman->liodn_base[port_id],
2193 fman->liodn_offset[port_id]);
2195 if (fman->state->rev_info.major < 6)
2196 set_port_order_restoration(fman->fpm_regs, port_id);
2198 mac_id = hw_port_id_to_sw_port_id(fman->state->rev_info.major, port_id);
2200 if (port_params->max_frame_length >= fman->state->mac_mfl[mac_id]) {
2201 fman->state->port_mfl[mac_id] = port_params->max_frame_length;
2203 dev_warn(fman->dev, "%s: Port (%d) max_frame_length is smaller than MAC (%d) current MTU\n",
2209 spin_unlock_irqrestore(&fman->spinlock, flags);
2214 spin_unlock_irqrestore(&fman->spinlock, flags);
2221 * @fman: A Pointer to FMan device
2228 int fman_reset_mac(struct fman *fman, u8 mac_id)
2230 struct fman_fpm_regs __iomem *fpm_rg = fman->fpm_regs;
2233 if (fman->state->rev_info.major >= 6) {
2234 dev_err(fman->dev, "%s: FMan MAC reset no available for FMan V3!\n",
2272 dev_warn(fman->dev, "%s: Illegal MAC Id [%d]\n",
2291 * @fman: A Pointer to FMan device
2299 int fman_set_mac_max_frame(struct fman *fman, u8 mac_id, u16 mfl)
2304 if ((!fman->state->port_mfl[mac_id]) ||
2305 (mfl <= fman->state->port_mfl[mac_id])) {
2306 fman->state->mac_mfl[mac_id] = mfl;
2308 dev_warn(fman->dev, "%s: MAC max_frame_length is larger than Port max_frame_length\n",
2318 * @fman: A Pointer to FMan device
2324 u16 fman_get_clock_freq(struct fman *fman)
2326 return fman->state->fm_clk_freq;
2331 * @fman: A Pointer to FMan device
2337 u32 fman_get_bmi_max_fifo_size(struct fman *fman)
2339 return fman->state->bmi_max_fifo_size;
2345 * @fman: - Pointer to the FMan module
2354 void fman_get_revision(struct fman *fman, struct fman_rev_info *rev_info)
2358 tmp = ioread32be(&fman->fpm_regs->fm_ip_rev_1);
2367 * @fman: A Pointer to FMan device
2374 u32 fman_get_qman_channel_id(struct fman *fman, u32 port_id)
2378 if (fman->state->rev_info.major >= 6) {
2384 for (i = 0; i < fman->state->num_of_qman_channels; i++) {
2394 for (i = 0; i < fman->state->num_of_qman_channels; i++) {
2400 if (i == fman->state->num_of_qman_channels)
2403 return fman->state->qman_channel_base + i;
2409 * @fman: A Pointer to FMan device
2415 struct resource *fman_get_mem_region(struct fman *fman)
2417 return fman->state->res;
2519 struct fman *fman_bind(struct device *fm_dev)
2521 return (struct fman *)(dev_get_drvdata(get_device(fm_dev)));
2535 struct fman *fman = (struct fman *)handle;
2540 if (!is_init_done(fman->cfg))
2543 fpm_rg = fman->fpm_regs;
2551 single_ret = bmi_err_event(fman);
2556 single_ret = qmi_err_event(fman);
2561 single_ret = fpm_err_event(fman);
2566 single_ret = dma_err_event(fman);
2571 single_ret = muram_err_intr(fman);
2578 single_ret = call_mac_isr(fman, FMAN_EV_ERR_MAC0 + 0);
2583 single_ret = call_mac_isr(fman, FMAN_EV_ERR_MAC0 + 1);
2588 single_ret = call_mac_isr(fman, FMAN_EV_ERR_MAC0 + 2);
2593 single_ret = call_mac_isr(fman, FMAN_EV_ERR_MAC0 + 3);
2598 single_ret = call_mac_isr(fman, FMAN_EV_ERR_MAC0 + 4);
2603 single_ret = call_mac_isr(fman, FMAN_EV_ERR_MAC0 + 5);
2608 single_ret = call_mac_isr(fman, FMAN_EV_ERR_MAC0 + 6);
2613 single_ret = call_mac_isr(fman, FMAN_EV_ERR_MAC0 + 7);
2618 single_ret = call_mac_isr(fman, FMAN_EV_ERR_MAC0 + 8);
2623 single_ret = call_mac_isr(fman, FMAN_EV_ERR_MAC0 + 9);
2633 struct fman *fman = (struct fman *)handle;
2638 if (!is_init_done(fman->cfg))
2641 fpm_rg = fman->fpm_regs;
2649 single_ret = qmi_event(fman);
2656 single_ret = call_mac_isr(fman, FMAN_EV_MAC0 + 0);
2661 single_ret = call_mac_isr(fman, FMAN_EV_MAC0 + 1);
2666 single_ret = call_mac_isr(fman, FMAN_EV_MAC0 + 2);
2671 single_ret = call_mac_isr(fman, FMAN_EV_MAC0 + 3);
2676 single_ret = call_mac_isr(fman, FMAN_EV_MAC0 + 4);
2681 single_ret = call_mac_isr(fman, FMAN_EV_MAC0 + 5);
2686 single_ret = call_mac_isr(fman, FMAN_EV_MAC0 + 6);
2691 single_ret = call_mac_isr(fman, FMAN_EV_MAC0 + 7);
2696 single_ret = call_mac_isr(fman, FMAN_EV_MAC0 + 8);
2701 single_ret = call_mac_isr(fman, FMAN_EV_MAC0 + 9);
2711 .compatible = "fsl,fman-muram"},
2716 static struct fman *read_dts_node(struct platform_device *of_dev)
2718 struct fman *fman;
2728 fman = kzalloc(sizeof(*fman), GFP_KERNEL);
2729 if (!fman)
2740 fman->dts_params.id = (u8)val;
2758 fman->dts_params.err_irq = res->start;
2774 __func__, fman->dts_params.id);
2781 __func__, fman->dts_params.id);
2785 fman->dts_params.clk_freq = DIV_ROUND_UP(clk_rate, 1000000);
2794 fman->dts_params.qman_channel_base = range[0];
2795 fman->dts_params.num_of_qman_channels = range[1];
2806 &fman->dts_params.muram_res);
2817 "fman", fman);
2824 if (fman->dts_params.err_irq != 0) {
2825 err = devm_request_irq(&of_dev->dev, fman->dts_params.err_irq,
2827 "fman-err", fman);
2830 __func__, fman->dts_params.err_irq, err);
2835 fman->dts_params.res =
2837 mem_size, "fman");
2838 if (!fman->dts_params.res) {
2844 fman->dts_params.base_addr =
2846 if (!fman->dts_params.base_addr) {
2851 fman->dev = &of_dev->dev;
2865 return fman;
2870 kfree(fman);
2876 struct fman *fman;
2882 fman = read_dts_node(of_dev);
2883 if (!fman)
2886 err = fman_config(fman);
2892 if (fman_init(fman) != 0) {
2897 if (fman->dts_params.err_irq == 0) {
2898 fman_set_exception(fman, FMAN_EX_DMA_BUS_ERROR, false);
2899 fman_set_exception(fman, FMAN_EX_DMA_READ_ECC, false);
2900 fman_set_exception(fman, FMAN_EX_DMA_SYSTEM_WRITE_ECC, false);
2901 fman_set_exception(fman, FMAN_EX_DMA_FM_WRITE_ECC, false);
2902 fman_set_exception(fman, FMAN_EX_DMA_SINGLE_PORT_ECC, false);
2903 fman_set_exception(fman, FMAN_EX_FPM_STALL_ON_TASKS, false);
2904 fman_set_exception(fman, FMAN_EX_FPM_SINGLE_ECC, false);
2905 fman_set_exception(fman, FMAN_EX_FPM_DOUBLE_ECC, false);
2906 fman_set_exception(fman, FMAN_EX_QMI_SINGLE_ECC, false);
2907 fman_set_exception(fman, FMAN_EX_QMI_DOUBLE_ECC, false);
2908 fman_set_exception(fman,
2910 fman_set_exception(fman, FMAN_EX_BMI_LIST_RAM_ECC, false);
2911 fman_set_exception(fman, FMAN_EX_BMI_STORAGE_PROFILE_ECC,
2913 fman_set_exception(fman, FMAN_EX_BMI_STATISTICS_RAM_ECC, false);
2914 fman_set_exception(fman, FMAN_EX_BMI_DISPATCH_RAM_ECC, false);
2917 dev_set_drvdata(dev, fman);
2919 dev_dbg(dev, "FMan%d probed\n", fman->dts_params.id);
2926 .compatible = "fsl,fman"},
2934 .name = "fsl-fman",