Lines Matching defs:fman

21 #include "fman.h"
548 static irqreturn_t fman_exceptions(struct fman *fman,
551 dev_dbg(fman->dev, "%s: FMan[%d] exception %d\n",
552 __func__, fman->state->fm_id, exception);
557 static irqreturn_t fman_bus_error(struct fman *fman, u8 __maybe_unused port_id,
562 dev_dbg(fman->dev, "%s: FMan[%d] bus error: port_id[%d]\n",
563 __func__, fman->state->fm_id, port_id);
568 static inline irqreturn_t call_mac_isr(struct fman *fman, u8 id)
570 if (fman->intr_mng[id].isr_cb) {
571 fman->intr_mng[id].isr_cb(fman->intr_mng[id].src_handle);
611 static void set_port_liodn(struct fman *fman, u8 port_id,
616 iowrite32be(liodn_ofst, &fman->bmi_regs->fmbm_spliodn[port_id - 1]);
620 tmp = ioread32be(&fman->dma_regs->fmdmplr[port_id / 2]);
628 iowrite32be(tmp, &fman->dma_regs->fmdmplr[port_id / 2]);
680 static int dma_init(struct fman *fman)
682 struct fman_dma_regs __iomem *dma_rg = fman->dma_regs;
683 struct fman_cfg *cfg = fman->cfg;
744 fman->cam_size =
745 (u32)(fman->cfg->dma_cam_num_of_entries * DMA_CAM_SIZEOF_ENTRY);
746 fman->cam_offset = fman_muram_alloc(fman->muram, fman->cam_size);
747 if (IS_ERR_VALUE(fman->cam_offset)) {
748 dev_err(fman->dev, "%s: MURAM alloc for DMA CAM failed\n",
753 if (fman->state->rev_info.major == 2) {
756 fman_muram_free_mem(fman->muram, fman->cam_offset,
757 fman->cam_size);
759 fman->cam_size = fman->cfg->dma_cam_num_of_entries * 72 + 128;
760 fman->cam_offset = fman_muram_alloc(fman->muram,
761 fman->cam_size);
762 if (IS_ERR_VALUE(fman->cam_offset)) {
763 dev_err(fman->dev, "%s: MURAM alloc for DMA CAM failed\n",
768 if (fman->cfg->dma_cam_num_of_entries % 8 ||
769 fman->cfg->dma_cam_num_of_entries > 32) {
770 dev_err(fman->dev, "%s: wrong dma_cam_num_of_entries\n",
776 fman_muram_offset_to_vbase(fman->muram,
777 fman->cam_offset);
779 (32 - fman->cfg->dma_cam_num_of_entries)) - 1),
783 fman->cfg->cam_base_addr = fman->cam_offset;
928 static int enable(struct fman *fman, struct fman_cfg *cfg)
942 iowrite32be(BMI_INIT_START, &fman->bmi_regs->fmbm_init);
944 &fman->qmi_regs->fmqm_gc);
949 static int set_exception(struct fman *fman,
956 tmp = ioread32be(&fman->dma_regs->fmdmmr);
962 iowrite32be(tmp, &fman->dma_regs->fmdmmr);
967 tmp = ioread32be(&fman->dma_regs->fmdmmr);
972 iowrite32be(tmp, &fman->dma_regs->fmdmmr);
975 tmp = ioread32be(&fman->fpm_regs->fmfp_ee);
980 iowrite32be(tmp, &fman->fpm_regs->fmfp_ee);
983 tmp = ioread32be(&fman->fpm_regs->fmfp_ee);
988 iowrite32be(tmp, &fman->fpm_regs->fmfp_ee);
991 tmp = ioread32be(&fman->fpm_regs->fmfp_ee);
996 iowrite32be(tmp, &fman->fpm_regs->fmfp_ee);
999 tmp = ioread32be(&fman->qmi_regs->fmqm_ien);
1004 iowrite32be(tmp, &fman->qmi_regs->fmqm_ien);
1007 tmp = ioread32be(&fman->qmi_regs->fmqm_eien);
1012 iowrite32be(tmp, &fman->qmi_regs->fmqm_eien);
1015 tmp = ioread32be(&fman->qmi_regs->fmqm_eien);
1020 iowrite32be(tmp, &fman->qmi_regs->fmqm_eien);
1023 tmp = ioread32be(&fman->bmi_regs->fmbm_ier);
1028 iowrite32be(tmp, &fman->bmi_regs->fmbm_ier);
1031 tmp = ioread32be(&fman->bmi_regs->fmbm_ier);
1036 iowrite32be(tmp, &fman->bmi_regs->fmbm_ier);
1039 tmp = ioread32be(&fman->bmi_regs->fmbm_ier);
1044 iowrite32be(tmp, &fman->bmi_regs->fmbm_ier);
1047 tmp = ioread32be(&fman->bmi_regs->fmbm_ier);
1052 iowrite32be(tmp, &fman->bmi_regs->fmbm_ier);
1055 tmp = ioread32be(&fman->fpm_regs->fm_rie);
1058 enable_rams_ecc(fman->fpm_regs);
1065 disable_rams_ecc(fman->fpm_regs);
1068 iowrite32be(tmp, &fman->fpm_regs->fm_rie);
1071 tmp = ioread32be(&fman->fpm_regs->fm_rie);
1074 enable_rams_ecc(fman->fpm_regs);
1081 disable_rams_ecc(fman->fpm_regs);
1084 iowrite32be(tmp, &fman->fpm_regs->fm_rie);
1191 static void free_init_resources(struct fman *fman)
1193 if (fman->cam_offset)
1194 fman_muram_free_mem(fman->muram, fman->cam_offset,
1195 fman->cam_size);
1196 if (fman->fifo_offset)
1197 fman_muram_free_mem(fman->muram, fman->fifo_offset,
1198 fman->fifo_size);
1201 static irqreturn_t bmi_err_event(struct fman *fman)
1204 struct fman_bmi_regs __iomem *bmi_rg = fman->bmi_regs;
1218 ret = fman->exception_cb(fman, FMAN_EX_BMI_STORAGE_PROFILE_ECC);
1220 ret = fman->exception_cb(fman, FMAN_EX_BMI_LIST_RAM_ECC);
1222 ret = fman->exception_cb(fman, FMAN_EX_BMI_STATISTICS_RAM_ECC);
1224 ret = fman->exception_cb(fman, FMAN_EX_BMI_DISPATCH_RAM_ECC);
1229 static irqreturn_t qmi_err_event(struct fman *fman)
1232 struct fman_qmi_regs __iomem *qmi_rg = fman->qmi_regs;
1247 ret = fman->exception_cb(fman, FMAN_EX_QMI_DOUBLE_ECC);
1249 ret = fman->exception_cb(fman,
1255 static irqreturn_t dma_err_event(struct fman *fman)
1260 struct fman_dma_regs __iomem *dma_rg = fman->dma_regs;
1290 hw_port_id_to_sw_port_id(fman->state->rev_info.major, port_id);
1294 ret = fman->bus_error_cb(fman, relative_port_id, addr, tnum,
1298 ret = fman->exception_cb(fman, FMAN_EX_DMA_SINGLE_PORT_ECC);
1300 ret = fman->exception_cb(fman, FMAN_EX_DMA_READ_ECC);
1302 ret = fman->exception_cb(fman, FMAN_EX_DMA_SYSTEM_WRITE_ECC);
1304 ret = fman->exception_cb(fman, FMAN_EX_DMA_FM_WRITE_ECC);
1309 static irqreturn_t fpm_err_event(struct fman *fman)
1312 struct fman_fpm_regs __iomem *fpm_rg = fman->fpm_regs;
1321 ret = fman->exception_cb(fman, FMAN_EX_FPM_DOUBLE_ECC);
1323 ret = fman->exception_cb(fman, FMAN_EX_FPM_STALL_ON_TASKS);
1326 ret = fman->exception_cb(fman, FMAN_EX_FPM_SINGLE_ECC);
1331 static irqreturn_t muram_err_intr(struct fman *fman)
1334 struct fman_fpm_regs __iomem *fpm_rg = fman->fpm_regs;
1344 ret = fman->exception_cb(fman, FMAN_EX_MURAM_ECC);
1349 static irqreturn_t qmi_event(struct fman *fman)
1352 struct fman_qmi_regs __iomem *qmi_rg = fman->qmi_regs;
1366 ret = fman->exception_cb(fman, FMAN_EX_QMI_SINGLE_ECC);
1371 static void enable_time_stamp(struct fman *fman)
1373 struct fman_fpm_regs __iomem *fpm_rg = fman->fpm_regs;
1374 u16 fm_clk_freq = fman->state->fm_clk_freq;
1377 ts_freq = (u32)(1 << fman->state->count1_micro_bit);
1402 fman->state->enabled_time_stamp = true;
1405 static int clear_iram(struct fman *fman)
1410 iram = fman->base_addr + IMEM_OFFSET;
1421 for (i = 0; i < (fman->state->fm_iram_size / 4); i++)
1424 iowrite32be(fman->state->fm_iram_size - 4, &iram->iadd);
1525 static int set_size_of_fifo(struct fman *fman, u8 port_id, u32 *size_of_fifo,
1528 struct fman_bmi_regs __iomem *bmi_rg = fman->bmi_regs;
1537 if (extra_fifo && !fman->state->extra_fifo_pool_size)
1538 fman->state->extra_fifo_pool_size =
1539 fman->state->num_of_rx_ports * FMAN_BMI_FIFO_UNITS;
1541 fman->state->extra_fifo_pool_size =
1542 max(fman->state->extra_fifo_pool_size, extra_fifo);
1545 if ((fman->state->accumulated_fifo_size + fifo) >
1546 (fman->state->total_fifo_size -
1547 fman->state->extra_fifo_pool_size)) {
1548 dev_err(fman->dev, "%s: Requested fifo size and extra size exceed total FIFO size.\n",
1560 fman->state->accumulated_fifo_size += fifo;
1565 static int set_num_of_tasks(struct fman *fman, u8 port_id, u8 *num_of_tasks,
1568 struct fman_bmi_regs __iomem *bmi_rg = fman->bmi_regs;
1574 fman->state->extra_tasks_pool_size =
1575 max(fman->state->extra_tasks_pool_size, extra_tasks);
1578 if ((fman->state->accumulated_num_of_tasks + tasks) >
1579 (fman->state->total_num_of_tasks -
1580 fman->state->extra_tasks_pool_size)) {
1581 dev_err(fman->dev, "%s: Requested num_of_tasks and extra tasks pool for fm%d exceed total num_of_tasks.\n",
1582 __func__, fman->state->fm_id);
1586 fman->state->accumulated_num_of_tasks += tasks;
1598 static int set_num_of_open_dmas(struct fman *fman, u8 port_id,
1602 struct fman_bmi_regs __iomem *bmi_rg = fman->bmi_regs;
1624 fman->state->extra_open_dmas_pool_size =
1625 (u8)max(fman->state->extra_open_dmas_pool_size,
1627 fman->state->accumulated_num_of_open_dmas += current_val;
1634 fman->state->extra_open_dmas_pool_size =
1635 (u8)max(fman->state->extra_open_dmas_pool_size,
1638 if ((fman->state->rev_info.major < 6) &&
1639 (fman->state->accumulated_num_of_open_dmas - current_val +
1640 open_dmas > fman->state->max_num_of_open_dmas)) {
1641 dev_err(fman->dev, "%s: Requested num_of_open_dmas for fm%d exceeds total num_of_open_dmas.\n",
1642 __func__, fman->state->fm_id);
1644 } else if ((fman->state->rev_info.major >= 6) &&
1645 !((fman->state->rev_info.major == 6) &&
1646 (fman->state->rev_info.minor == 0)) &&
1647 (fman->state->accumulated_num_of_open_dmas -
1649 fman->state->dma_thresh_max_commq + 1)) {
1650 dev_err(fman->dev, "%s: Requested num_of_open_dmas for fm%d exceeds DMA Command queue (%d)\n",
1651 __func__, fman->state->fm_id,
1652 fman->state->dma_thresh_max_commq + 1);
1656 WARN_ON(fman->state->accumulated_num_of_open_dmas < current_val);
1658 fman->state->accumulated_num_of_open_dmas -= current_val;
1659 fman->state->accumulated_num_of_open_dmas += open_dmas;
1661 if (fman->state->rev_info.major < 6)
1663 (u8)(fman->state->accumulated_num_of_open_dmas +
1664 fman->state->extra_open_dmas_pool_size);
1685 static int fman_config(struct fman *fman)
1690 base_addr = fman->dts_params.base_addr;
1692 fman->state = kzalloc(sizeof(*fman->state), GFP_KERNEL);
1693 if (!fman->state)
1697 fman->cfg = kzalloc(sizeof(*fman->cfg), GFP_KERNEL);
1698 if (!fman->cfg)
1702 fman->muram =
1703 fman_muram_init(fman->dts_params.muram_res.start,
1704 resource_size(&fman->dts_params.muram_res));
1705 if (!fman->muram)
1709 fman->state->fm_id = fman->dts_params.id;
1710 fman->state->fm_clk_freq = fman->dts_params.clk_freq;
1711 fman->state->qman_channel_base = fman->dts_params.qman_channel_base;
1712 fman->state->num_of_qman_channels =
1713 fman->dts_params.num_of_qman_channels;
1714 fman->state->res = fman->dts_params.res;
1715 fman->exception_cb = fman_exceptions;
1716 fman->bus_error_cb = fman_bus_error;
1717 fman->fpm_regs = base_addr + FPM_OFFSET;
1718 fman->bmi_regs = base_addr + BMI_OFFSET;
1719 fman->qmi_regs = base_addr + QMI_OFFSET;
1720 fman->dma_regs = base_addr + DMA_OFFSET;
1721 fman->hwp_regs = base_addr + HWP_OFFSET;
1722 fman->kg_regs = base_addr + KG_OFFSET;
1723 fman->base_addr = base_addr;
1725 spin_lock_init(&fman->spinlock);
1726 fman_defconfig(fman->cfg);
1728 fman->state->extra_fifo_pool_size = 0;
1729 fman->state->exceptions = (EX_DMA_BUS_ERROR |
1746 fman_get_revision(fman, &fman->state->rev_info);
1748 err = fill_soc_specific_params(fman->state);
1753 if (fman->state->rev_info.major >= 6)
1754 fman->cfg->dma_aid_mode = FMAN_DMA_AID_OUT_PORT_ID;
1756 fman->cfg->qmi_def_tnums_thresh = fman->state->qmi_def_tnums_thresh;
1758 fman->state->total_num_of_tasks =
1759 (u8)DFLT_TOTAL_NUM_OF_TASKS(fman->state->rev_info.major,
1760 fman->state->rev_info.minor,
1761 fman->state->bmi_max_num_of_tasks);
1763 if (fman->state->rev_info.major < 6) {
1764 fman->cfg->dma_comm_qtsh_clr_emer =
1765 (u8)DFLT_DMA_COMM_Q_LOW(fman->state->rev_info.major,
1766 fman->state->dma_thresh_max_commq);
1768 fman->cfg->dma_comm_qtsh_asrt_emer =
1769 (u8)DFLT_DMA_COMM_Q_HIGH(fman->state->rev_info.major,
1770 fman->state->dma_thresh_max_commq);
1772 fman->cfg->dma_cam_num_of_entries =
1773 DFLT_DMA_CAM_NUM_OF_ENTRIES(fman->state->rev_info.major);
1775 fman->cfg->dma_read_buf_tsh_clr_emer =
1776 DFLT_DMA_READ_INT_BUF_LOW(fman->state->dma_thresh_max_buf);
1778 fman->cfg->dma_read_buf_tsh_asrt_emer =
1779 DFLT_DMA_READ_INT_BUF_HIGH(fman->state->dma_thresh_max_buf);
1781 fman->cfg->dma_write_buf_tsh_clr_emer =
1782 DFLT_DMA_WRITE_INT_BUF_LOW(fman->state->dma_thresh_max_buf);
1784 fman->cfg->dma_write_buf_tsh_asrt_emer =
1785 DFLT_DMA_WRITE_INT_BUF_HIGH(fman->state->dma_thresh_max_buf);
1787 fman->cfg->dma_axi_dbg_num_of_beats =
1794 kfree(fman->cfg);
1796 kfree(fman->state);
1798 kfree(fman);
1802 static int fman_reset(struct fman *fman)
1807 if (fman->state->rev_info.major < 6) {
1808 iowrite32be(FPM_RSTC_FM_RESET, &fman->fpm_regs->fm_rstc);
1813 } while (((ioread32be(&fman->fpm_regs->fm_rstc)) &
1830 dev_err(fman->dev, "%s: Couldn't find guts node\n",
1837 dev_err(fman->dev, "%s: Couldn't map %pOF regs\n",
1845 if (fman->dts_params.id == 0)
1855 iowrite32be(FPM_RSTC_FM_RESET, &fman->fpm_regs->fm_rstc);
1861 } while (((ioread32be(&fman->fpm_regs->fm_rstc)) &
1886 dev_dbg(fman->dev, "%s: Didn't perform FManV3 reset due to Errata A007273!\n",
1894 static int fman_init(struct fman *fman)
1899 if (is_init_done(fman->cfg))
1902 fman->state->count1_micro_bit = FM_TIMESTAMP_1_USEC_BIT;
1904 cfg = fman->cfg;
1907 if (fman->state->rev_info.major < 6)
1908 fman->state->exceptions &= ~FMAN_EX_BMI_DISPATCH_RAM_ECC;
1910 if (fman->state->rev_info.major >= 6)
1911 fman->state->exceptions &= ~FMAN_EX_QMI_SINGLE_ECC;
1914 memset_io((void __iomem *)(fman->base_addr + CGP_OFFSET), 0,
1915 fman->state->fm_port_num_of_cg);
1923 fman->liodn_offset[i] =
1924 ioread32be(&fman->bmi_regs->fmbm_spliodn[i - 1]);
1927 liodn_base = ioread32be(&fman->dma_regs->fmdmplr[i / 2]);
1936 fman->liodn_base[i] = liodn_base;
1939 err = fman_reset(fman);
1943 if (ioread32be(&fman->qmi_regs->fmqm_gs) & QMI_GS_HALT_NOT_BUSY) {
1944 resume(fman->fpm_regs);
1949 } while (((ioread32be(&fman->qmi_regs->fmqm_gs)) &
1952 dev_warn(fman->dev, "%s: QMI is in halt not busy state\n",
1956 if (clear_iram(fman) != 0)
1959 cfg->exceptions = fman->state->exceptions;
1963 err = dma_init(fman);
1965 free_init_resources(fman);
1970 fpm_init(fman->fpm_regs, fman->cfg);
1974 fman->fifo_offset = fman_muram_alloc(fman->muram,
1975 fman->state->total_fifo_size);
1976 if (IS_ERR_VALUE(fman->fifo_offset)) {
1977 free_init_resources(fman);
1978 dev_err(fman->dev, "%s: MURAM alloc for BMI FIFO failed\n",
1983 cfg->fifo_base_addr = fman->fifo_offset;
1984 cfg->total_fifo_size = fman->state->total_fifo_size;
1985 cfg->total_num_of_tasks = fman->state->total_num_of_tasks;
1986 cfg->clk_freq = fman->state->fm_clk_freq;
1989 bmi_init(fman->bmi_regs, fman->cfg);
1992 qmi_init(fman->qmi_regs, fman->cfg);
1995 hwp_init(fman->hwp_regs);
1998 fman->keygen = keygen_init(fman->kg_regs);
1999 if (!fman->keygen)
2002 err = enable(fman, cfg);
2006 enable_time_stamp(fman);
2008 kfree(fman->cfg);
2009 fman->cfg = NULL;
2014 static int fman_set_exception(struct fman *fman,
2019 if (!is_init_done(fman->cfg))
2025 fman->state->exceptions |= bit_mask;
2027 fman->state->exceptions &= ~bit_mask;
2029 dev_err(fman->dev, "%s: Undefined exception (%d)\n",
2034 return set_exception(fman, exception, enable);
2039 * @fman: A Pointer to FMan device
2050 void fman_register_intr(struct fman *fman, enum fman_event_modules module,
2060 fman->intr_mng[event].isr_cb = isr_cb;
2061 fman->intr_mng[event].src_handle = src_arg;
2067 * @fman: A Pointer to FMan device
2076 void fman_unregister_intr(struct fman *fman, enum fman_event_modules module,
2084 fman->intr_mng[event].isr_cb = NULL;
2085 fman->intr_mng[event].src_handle = NULL;
2091 * @fman: A Pointer to FMan device
2098 int fman_set_port_params(struct fman *fman,
2105 spin_lock_irqsave(&fman->spinlock, flags);
2107 err = set_num_of_tasks(fman, port_params->port_id,
2118 fman->state->accumulated_num_of_deq_tnums +=
2120 enq_th = (ioread32be(&fman->qmi_regs->fmqm_gc) &
2125 if (enq_th >= (fman->state->qmi_max_num_of_tnums -
2126 fman->state->accumulated_num_of_deq_tnums)) {
2128 fman->state->qmi_max_num_of_tnums -
2129 fman->state->accumulated_num_of_deq_tnums - 1;
2131 reg = ioread32be(&fman->qmi_regs->fmqm_gc);
2134 iowrite32be(reg, &fman->qmi_regs->fmqm_gc);
2137 deq_th = ioread32be(&fman->qmi_regs->fmqm_gc) &
2142 * (fman->state->qmi_max_num_of_tnums-1).
2144 if ((deq_th <= fman->state->accumulated_num_of_deq_tnums) &&
2145 (deq_th < fman->state->qmi_max_num_of_tnums - 1)) {
2146 deq_th = fman->state->accumulated_num_of_deq_tnums + 1;
2147 reg = ioread32be(&fman->qmi_regs->fmqm_gc);
2150 iowrite32be(reg, &fman->qmi_regs->fmqm_gc);
2154 err = set_size_of_fifo(fman, port_params->port_id,
2160 err = set_num_of_open_dmas(fman, port_params->port_id,
2166 set_port_liodn(fman, port_id, fman->liodn_base[port_id],
2167 fman->liodn_offset[port_id]);
2169 if (fman->state->rev_info.major < 6)
2170 set_port_order_restoration(fman->fpm_regs, port_id);
2172 mac_id = hw_port_id_to_sw_port_id(fman->state->rev_info.major, port_id);
2174 if (port_params->max_frame_length >= fman->state->mac_mfl[mac_id]) {
2175 fman->state->port_mfl[mac_id] = port_params->max_frame_length;
2177 dev_warn(fman->dev, "%s: Port (%d) max_frame_length is smaller than MAC (%d) current MTU\n",
2183 spin_unlock_irqrestore(&fman->spinlock, flags);
2188 spin_unlock_irqrestore(&fman->spinlock, flags);
2195 * @fman: A Pointer to FMan device
2202 int fman_reset_mac(struct fman *fman, u8 mac_id)
2204 struct fman_fpm_regs __iomem *fpm_rg = fman->fpm_regs;
2207 if (fman->state->rev_info.major >= 6) {
2208 dev_err(fman->dev, "%s: FMan MAC reset no available for FMan V3!\n",
2246 dev_warn(fman->dev, "%s: Illegal MAC Id [%d]\n",
2265 * @fman: A Pointer to FMan device
2273 int fman_set_mac_max_frame(struct fman *fman, u8 mac_id, u16 mfl)
2278 if ((!fman->state->port_mfl[mac_id]) ||
2279 (mfl <= fman->state->port_mfl[mac_id])) {
2280 fman->state->mac_mfl[mac_id] = mfl;
2282 dev_warn(fman->dev, "%s: MAC max_frame_length is larger than Port max_frame_length\n",
2292 * @fman: A Pointer to FMan device
2298 u16 fman_get_clock_freq(struct fman *fman)
2300 return fman->state->fm_clk_freq;
2305 * @fman: A Pointer to FMan device
2311 u32 fman_get_bmi_max_fifo_size(struct fman *fman)
2313 return fman->state->bmi_max_fifo_size;
2319 * @fman: - Pointer to the FMan module
2328 void fman_get_revision(struct fman *fman, struct fman_rev_info *rev_info)
2332 tmp = ioread32be(&fman->fpm_regs->fm_ip_rev_1);
2341 * @fman: A Pointer to FMan device
2348 u32 fman_get_qman_channel_id(struct fman *fman, u32 port_id)
2352 if (fman->state->rev_info.major >= 6) {
2358 for (i = 0; i < fman->state->num_of_qman_channels; i++) {
2368 for (i = 0; i < fman->state->num_of_qman_channels; i++) {
2374 if (i == fman->state->num_of_qman_channels)
2377 return fman->state->qman_channel_base + i;
2383 * @fman: A Pointer to FMan device
2389 struct resource *fman_get_mem_region(struct fman *fman)
2391 return fman->state->res;
2493 struct fman *fman_bind(struct device *fm_dev)
2495 return (struct fman *)(dev_get_drvdata(get_device(fm_dev)));
2509 struct fman *fman = (struct fman *)handle;
2514 if (!is_init_done(fman->cfg))
2517 fpm_rg = fman->fpm_regs;
2525 single_ret = bmi_err_event(fman);
2530 single_ret = qmi_err_event(fman);
2535 single_ret = fpm_err_event(fman);
2540 single_ret = dma_err_event(fman);
2545 single_ret = muram_err_intr(fman);
2552 single_ret = call_mac_isr(fman, FMAN_EV_ERR_MAC0 + 0);
2557 single_ret = call_mac_isr(fman, FMAN_EV_ERR_MAC0 + 1);
2562 single_ret = call_mac_isr(fman, FMAN_EV_ERR_MAC0 + 2);
2567 single_ret = call_mac_isr(fman, FMAN_EV_ERR_MAC0 + 3);
2572 single_ret = call_mac_isr(fman, FMAN_EV_ERR_MAC0 + 4);
2577 single_ret = call_mac_isr(fman, FMAN_EV_ERR_MAC0 + 5);
2582 single_ret = call_mac_isr(fman, FMAN_EV_ERR_MAC0 + 6);
2587 single_ret = call_mac_isr(fman, FMAN_EV_ERR_MAC0 + 7);
2592 single_ret = call_mac_isr(fman, FMAN_EV_ERR_MAC0 + 8);
2597 single_ret = call_mac_isr(fman, FMAN_EV_ERR_MAC0 + 9);
2607 struct fman *fman = (struct fman *)handle;
2612 if (!is_init_done(fman->cfg))
2615 fpm_rg = fman->fpm_regs;
2623 single_ret = qmi_event(fman);
2630 single_ret = call_mac_isr(fman, FMAN_EV_MAC0 + 0);
2635 single_ret = call_mac_isr(fman, FMAN_EV_MAC0 + 1);
2640 single_ret = call_mac_isr(fman, FMAN_EV_MAC0 + 2);
2645 single_ret = call_mac_isr(fman, FMAN_EV_MAC0 + 3);
2650 single_ret = call_mac_isr(fman, FMAN_EV_MAC0 + 4);
2655 single_ret = call_mac_isr(fman, FMAN_EV_MAC0 + 5);
2660 single_ret = call_mac_isr(fman, FMAN_EV_MAC0 + 6);
2665 single_ret = call_mac_isr(fman, FMAN_EV_MAC0 + 7);
2670 single_ret = call_mac_isr(fman, FMAN_EV_MAC0 + 8);
2675 single_ret = call_mac_isr(fman, FMAN_EV_MAC0 + 9);
2685 .compatible = "fsl,fman-muram"},
2690 static struct fman *read_dts_node(struct platform_device *of_dev)
2692 struct fman *fman;
2702 fman = kzalloc(sizeof(*fman), GFP_KERNEL);
2703 if (!fman)
2714 fman->dts_params.id = (u8)val;
2726 fman->dts_params.err_irq = err;
2744 __func__, fman->dts_params.id);
2752 __func__, fman->dts_params.id);
2756 fman->dts_params.clk_freq = DIV_ROUND_UP(clk_rate, 1000000);
2765 fman->dts_params.qman_channel_base = range[0];
2766 fman->dts_params.num_of_qman_channels = range[1];
2778 &fman->dts_params.muram_res);
2789 "fman", fman);
2796 if (fman->dts_params.err_irq != 0) {
2797 err = devm_request_irq(&of_dev->dev, fman->dts_params.err_irq,
2799 "fman-err", fman);
2802 __func__, fman->dts_params.err_irq, err);
2807 fman->dts_params.res =
2809 mem_size, "fman");
2810 if (!fman->dts_params.res) {
2817 fman->dts_params.base_addr =
2819 if (!fman->dts_params.base_addr) {
2825 fman->dev = &of_dev->dev;
2839 return fman;
2844 kfree(fman);
2850 struct fman *fman;
2856 fman = read_dts_node(of_dev);
2857 if (IS_ERR(fman))
2858 return PTR_ERR(fman);
2860 err = fman_config(fman);
2866 if (fman_init(fman) != 0) {
2871 if (fman->dts_params.err_irq == 0) {
2872 fman_set_exception(fman, FMAN_EX_DMA_BUS_ERROR, false);
2873 fman_set_exception(fman, FMAN_EX_DMA_READ_ECC, false);
2874 fman_set_exception(fman, FMAN_EX_DMA_SYSTEM_WRITE_ECC, false);
2875 fman_set_exception(fman, FMAN_EX_DMA_FM_WRITE_ECC, false);
2876 fman_set_exception(fman, FMAN_EX_DMA_SINGLE_PORT_ECC, false);
2877 fman_set_exception(fman, FMAN_EX_FPM_STALL_ON_TASKS, false);
2878 fman_set_exception(fman, FMAN_EX_FPM_SINGLE_ECC, false);
2879 fman_set_exception(fman, FMAN_EX_FPM_DOUBLE_ECC, false);
2880 fman_set_exception(fman, FMAN_EX_QMI_SINGLE_ECC, false);
2881 fman_set_exception(fman, FMAN_EX_QMI_DOUBLE_ECC, false);
2882 fman_set_exception(fman,
2884 fman_set_exception(fman, FMAN_EX_BMI_LIST_RAM_ECC, false);
2885 fman_set_exception(fman, FMAN_EX_BMI_STORAGE_PROFILE_ECC,
2887 fman_set_exception(fman, FMAN_EX_BMI_STATISTICS_RAM_ECC, false);
2888 fman_set_exception(fman, FMAN_EX_BMI_DISPATCH_RAM_ECC, false);
2891 dev_set_drvdata(dev, fman);
2893 dev_dbg(dev, "FMan%d probed\n", fman->dts_params.id);
2900 .compatible = "fsl,fman"},
2908 .name = "fsl-fman",