Lines Matching refs:cntlr
78 static int HiDmacIsrErrProc(struct DmaCntlr *cntlr, uint16_t chan)
82 chanErrStats[ERROR_STATUS_NUM_0] = OSAL_READL(cntlr->remapBase + HIDMAC_INT_ERR1_OFFSET);
84 chanErrStats[ERROR_STATUS_NUM_1] = OSAL_READL(cntlr->remapBase + HIDMAC_INT_ERR2_OFFSET);
86 chanErrStats[ERROR_STATUS_NUM_2] = OSAL_READL(cntlr->remapBase + HIDMAC_INT_ERR3_OFFSET);
93 OSAL_WRITEL(1 << chan, cntlr->remapBase + HIDMAC_INT_ERR1_RAW_OFFSET);
94 HDF_LOGE("HIDMAC_INT_ERR1_RAW = 0x%x", OSAL_READL(cntlr->remapBase + HIDMAC_INT_ERR1_RAW_OFFSET));
95 OSAL_WRITEL(1 << chan, cntlr->remapBase + HIDMAC_INT_ERR2_RAW_OFFSET);
96 HDF_LOGE("HIDMAC_INT_ERR2_RAW = 0x%x", OSAL_READL(cntlr->remapBase + HIDMAC_INT_ERR2_RAW_OFFSET));
97 OSAL_WRITEL(1 << chan, cntlr->remapBase + HIDMAC_INT_ERR3_RAW_OFFSET);
98 HDF_LOGE("HIDMAC_INT_ERR3_RAW = 0x%x", OSAL_READL(cntlr->remapBase + HIDMAC_INT_ERR3_RAW_OFFSET));
104 static int HiDmacGetChanStat(struct DmaCntlr *cntlr, uint16_t chan)
110 chanStatus = OSAL_READL(cntlr->remapBase + HIDMAC_INT_STAT_OFFSET);
112 chanTcStatus = OSAL_READL(cntlr->remapBase + HIDMAC_INT_TC1_OFFSET);
118 OSAL_WRITEL(chanTcStatus << chan, cntlr->remapBase + HIDMAC_INT_TC1_RAW_OFFSET);
121 ret = HiDmacIsrErrProc(cntlr, chan);
126 chanTcStatus = OSAL_READL(cntlr->remapBase + HIDMAC_INT_TC2_OFFSET);
132 OSAL_WRITEL(chanTcStatus << chan, cntlr->remapBase + HIDMAC_INT_TC2_RAW_OFFSET);
169 static int32_t HiDmacGetChanInfo(struct DmaCntlr *cntlr, struct DmacChanInfo *chanInfo, struct DmacMsg *msg)
175 if (cntlr == NULL) {
205 static inline void HiDmacDisable(struct DmaCntlr *cntlr, uint16_t channel)
207 if (cntlr != NULL) {
208 OSAL_WRITEL(HIDMAC_CX_DISABLE, cntlr->remapBase + HIDMAC_CX_CFG_OFFSET(channel));
216 static int32_t HiDmacStartM2M(struct DmaCntlr *cntlr, struct DmacChanInfo *chanInfo,
219 if (cntlr == NULL) {
220 HDF_LOGE("%s: invalid cntlr", __func__);
228 OSAL_WRITEL(psrc & HIDMAC_32BITS_MASK, cntlr->remapBase + HIDMAC_CX_SRC_OFFSET_L(chanInfo->channel));
231 cntlr->remapBase + HIDMAC_CX_SRC_OFFSET_H(chanInfo->channel));
233 OSAL_WRITEL(0, cntlr->remapBase + HIDMAC_CX_SRC_OFFSET_H(chanInfo->channel));
236 OSAL_WRITEL(pdst & HIDMAC_32BITS_MASK, cntlr->remapBase + HIDMAC_CX_DST_OFFSET_L(chanInfo->channel));
239 cntlr->remapBase + HIDMAC_CX_DST_OFFSET_H(chanInfo->channel));
241 OSAL_WRITEL(0, cntlr->remapBase + HIDMAC_CX_DST_OFFSET_H(chanInfo->channel));
244 OSAL_WRITEL(0, cntlr->remapBase + HIDMAC_CX_LLI_OFFSET_L(chanInfo->channel));
245 OSAL_WRITEL(len, cntlr->remapBase + HIDMAC_CX_CNT0_OFFSET(chanInfo->channel));
246 OSAL_WRITEL(HIDMAC_CX_CFG_M2M, cntlr->remapBase + HIDMAC_CX_CFG_OFFSET(chanInfo->channel));
250 static int32_t HiDmacStartLli(struct DmaCntlr *cntlr, struct DmacChanInfo *chanInfo)
254 if (cntlr == NULL) {
255 HDF_LOGE("%s: invalid cntlr", __func__);
264 OSAL_WRITEL(plli->srcAddr & HIDMAC_32BITS_MASK, cntlr->remapBase + HIDMAC_CX_SRC_OFFSET_L(chanInfo->channel));
267 cntlr->remapBase + HIDMAC_CX_SRC_OFFSET_H(chanInfo->channel));
269 OSAL_WRITEL(0, cntlr->remapBase + HIDMAC_CX_SRC_OFFSET_H(chanInfo->channel));
272 OSAL_WRITEL(plli->destAddr & HIDMAC_32BITS_MASK, cntlr->remapBase + HIDMAC_CX_DST_OFFSET_L(chanInfo->channel));
275 cntlr->remapBase + HIDMAC_CX_DST_OFFSET_H(chanInfo->channel));
277 OSAL_WRITEL(0, cntlr->remapBase + HIDMAC_CX_DST_OFFSET_H(chanInfo->channel));
280 OSAL_WRITEL(plli->nextLli & HIDMAC_32BITS_MASK, cntlr->remapBase + HIDMAC_CX_LLI_OFFSET_L(chanInfo->channel));
283 cntlr->remapBase + HIDMAC_CX_LLI_OFFSET_H(chanInfo->channel));
285 OSAL_WRITEL(0, cntlr->remapBase + HIDMAC_CX_LLI_OFFSET_H(chanInfo->channel));
288 OSAL_WRITEL(plli->count, cntlr->remapBase + HIDMAC_CX_CNT0_OFFSET(chanInfo->channel));
290 OSAL_WRITEL(plli->config | HIDMAC_CX_CFG_CHN_START, cntlr->remapBase + HIDMAC_CX_CFG_OFFSET(chanInfo->channel));
294 static uintptr_t HiDmacGetCurrDstAddr(struct DmaCntlr *cntlr, uint16_t channel)
296 if (cntlr == NULL || channel >= HIDMAC_CHANNEL_NUM) {
299 return OSAL_READL(cntlr->remapBase + HIDMAC_CX_CUR_DST_OFFSET(channel));
328 static int32_t Hi35xxDmacInit(struct DmaCntlr *cntlr)
332 HiDmacClkEn(cntlr->index);
333 HiDmacUnReset(cntlr->index);
335 OSAL_WRITEL(HIDMAC_ALL_CHAN_CLR, cntlr->remapBase + HIDMAC_INT_TC1_RAW_OFFSET);
336 OSAL_WRITEL(HIDMAC_ALL_CHAN_CLR, cntlr->remapBase + HIDMAC_INT_TC2_RAW_OFFSET);
337 OSAL_WRITEL(HIDMAC_ALL_CHAN_CLR, cntlr->remapBase + HIDMAC_INT_ERR1_RAW_OFFSET);
338 OSAL_WRITEL(HIDMAC_ALL_CHAN_CLR, cntlr->remapBase + HIDMAC_INT_ERR2_RAW_OFFSET);
339 OSAL_WRITEL(HIDMAC_ALL_CHAN_CLR, cntlr->remapBase + HIDMAC_INT_ERR3_RAW_OFFSET);
340 OSAL_WRITEL(HIDMAC_INT_ENABLE_ALL_CHAN, cntlr->remapBase + HIDMAC_INT_TC1_MASK_OFFSET);
341 OSAL_WRITEL(HIDMAC_INT_ENABLE_ALL_CHAN, cntlr->remapBase + HIDMAC_INT_TC2_MASK_OFFSET);
342 OSAL_WRITEL(HIDMAC_INT_ENABLE_ALL_CHAN, cntlr->remapBase + HIDMAC_INT_ERR1_MASK_OFFSET);
343 OSAL_WRITEL(HIDMAC_INT_ENABLE_ALL_CHAN, cntlr->remapBase + HIDMAC_INT_ERR2_MASK_OFFSET);
344 OSAL_WRITEL(HIDMAC_INT_ENABLE_ALL_CHAN, cntlr->remapBase + HIDMAC_INT_ERR3_MASK_OFFSET);
374 static int32_t HiDmacParseHcs(struct DmaCntlr *cntlr, const struct DeviceResourceNode *node)
379 if (cntlr == NULL) {
388 ret = drsOps->GetUint32(node, "reg_pbase", &cntlr->phyBase, 0);
393 cntlr->remapBase = OsalIoRemap((unsigned long)cntlr->phyBase, (unsigned long)cntlr->regSize);
395 ret = drsOps->GetUint32(node, "reg_size", &cntlr->regSize, 0);
400 ret = drsOps->GetUint16(node, "index", &cntlr->index, 0);
405 ret = drsOps->GetUint32(node, "irq", &cntlr->irq, 0);
410 ret = drsOps->GetUint32(node, "max_transfer_size", &cntlr->maxTransSize, 0);
415 ret = drsOps->GetUint16(node, "channel_num", &cntlr->channelNum, 0);
421 cntlr->phyBase, cntlr->regSize, cntlr->index, cntlr->irq, cntlr->maxTransSize, cntlr->channelNum);
427 struct DmaCntlr *cntlr = NULL;
429 cntlr = DmaCntlrCreate(device);
430 if (cntlr == NULL) {
433 cntlr->getChanInfo = HiDmacGetChanInfo;
434 cntlr->dmacCacheFlush = HiDmacCacheFlush;
435 cntlr->dmacCacheInv = HiDmacCacheInv;
436 cntlr->dmaChanEnable = HiDmacStartLli;
437 cntlr->dmaM2mChanEnable = HiDmacStartM2M;
438 cntlr->dmacChanDisable = HiDmacDisable;
439 cntlr->dmacVaddrToPaddr = HiDmacVaddrToPaddr;
440 cntlr->dmacPaddrToVaddr = HiDmacPaddrToVaddr;
441 cntlr->dmacGetChanStatus = HiDmacGetChanStat;
442 cntlr->dmacGetCurrDestAddr = HiDmacGetCurrDstAddr;
443 device->service = &cntlr->service;
450 struct DmaCntlr *cntlr = NULL;
457 cntlr = CONTAINER_OF(device->service, struct DmaCntlr, service);
458 ret = HiDmacParseHcs(cntlr, device->property);
462 ret = Hi35xxDmacInit(cntlr);
466 return DmacCntlrAdd(cntlr);
471 struct DmaCntlr *cntlr = NULL;
476 cntlr = CONTAINER_OF(device->service, struct DmaCntlr, service);
477 DmacCntlrRemove(cntlr);
478 DmaCntlrDestroy(cntlr);