PCI: tegra: edmatest: use stop edma API for abort

Use tegra_pcie_edma_stop() API to perform abort testing.

Bug 3626323
Bug 3868928

Change-Id: Idc90b8ab2836ab535414cc1bd8b99bfda508d129
Signed-off-by: Nagarjuna Kristam <nkristam@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2708632
(cherry picked from commit d7fc5eebce85ac670a1a62d38c1572ff5a679258)
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/2815925
Reviewed-by: Manikanta Maddireddy <mmaddireddy@nvidia.com>
Reviewed-by: Bitan Biswas <bbiswas@nvidia.com>
GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
This commit is contained in:
Nagarjuna Kristam
2022-05-06 13:28:37 +05:30
committed by mobile promotions
parent 0c594b0c0b
commit 2b9e2da317

View File

@@ -13,6 +13,7 @@
#include <linux/tegra-pcie-edma.h> #include <linux/tegra-pcie-edma.h>
#define EDMA_ABORT_TEST_EN (edma->edma_ch & 0x40000000) #define EDMA_ABORT_TEST_EN (edma->edma_ch & 0x40000000)
#define EDMA_STOP_TEST_EN (edma->edma_ch & 0x20000000)
#define IS_EDMA_CH_ENABLED(i) (edma->edma_ch & ((BIT(i) << 4))) #define IS_EDMA_CH_ENABLED(i) (edma->edma_ch & ((BIT(i) << 4)))
#define IS_EDMA_CH_ASYNC(i) (edma->edma_ch & BIT(i)) #define IS_EDMA_CH_ASYNC(i) (edma->edma_ch & BIT(i))
#define REMOTE_EDMA_TEST_EN (edma->edma_ch & 0x80000000) #define REMOTE_EDMA_TEST_EN (edma->edma_ch & 0x80000000)
@@ -122,7 +123,7 @@ static int edmalib_common_test(struct edmalib_common *edma)
l_edma = edma; l_edma = edma;
if (EDMA_ABORT_TEST_EN) { if (EDMA_ABORT_TEST_EN || EDMA_STOP_TEST_EN) {
edma->edma_ch &= ~0xFF; edma->edma_ch &= ~0xFF;
/* only channel 0, 2 is ASYNC, where chan 0 async gets aborted */ /* only channel 0, 2 is ASYNC, where chan 0 async gets aborted */
edma->edma_ch |= 0xF5; edma->edma_ch |= 0xF5;
@@ -257,7 +258,9 @@ static int edmalib_common_test(struct edmalib_common *edma)
} else if ((ret != EDMA_XFER_SUCCESS) && (ret != EDMA_XFER_FAIL_NOMEM)) { } else if ((ret != EDMA_XFER_SUCCESS) && (ret != EDMA_XFER_FAIL_NOMEM)) {
dev_err(edma->fdev, "%s: LL %d, SZ: %u B CH: %d failed. %d at iter %d ret: %d\n", dev_err(edma->fdev, "%s: LL %d, SZ: %u B CH: %d failed. %d at iter %d ret: %d\n",
__func__, xfer_type, edma->dma_size, ch, ret, k, ret); __func__, xfer_type, edma->dma_size, ch, ret, k, ret);
if (EDMA_ABORT_TEST_EN) { if (EDMA_STOP_TEST_EN) {
break;
} else if (EDMA_ABORT_TEST_EN) {
msleep(5000); msleep(5000);
break; break;
} }
@@ -266,16 +269,27 @@ static int edmalib_common_test(struct edmalib_common *edma)
dev_dbg(edma->fdev, "%s: LL EDMA LIB %d, SZ: %u B CH: %d iter %d\n", dev_dbg(edma->fdev, "%s: LL EDMA LIB %d, SZ: %u B CH: %d iter %d\n",
__func__, xfer_type, edma->dma_size, ch, i); __func__, xfer_type, edma->dma_size, ch, i);
} }
if (EDMA_ABORT_TEST_EN && i == 0) { if (i == 0) {
msleep(edma->stress_count); if (EDMA_ABORT_TEST_EN) {
dma_common_wr(edma->dma_base, DMA_WRITE_DOORBELL_OFF_WR_STOP, msleep(edma->stress_count);
db_off); dma_common_wr(edma->dma_base, DMA_WRITE_DOORBELL_OFF_WR_STOP,
db_off);
} else if (EDMA_STOP_TEST_EN) {
bool stop_status;
msleep(edma->stress_count);
stop_status = tegra_pcie_edma_stop(edma->cookie);
dev_info(edma->fdev, "%s: EDMA LIB, status of stop DMA is %d",
__func__, stop_status);
}
} }
diff = ktime_to_ns(ktime_get()) - ktime_to_ns(edma->edma_start_time[i]); diff = ktime_to_ns(ktime_get()) - ktime_to_ns(edma->edma_start_time[i]);
if (ch_info->ch_type == EDMA_CHAN_XFER_SYNC) if (ch_info->ch_type == EDMA_CHAN_XFER_SYNC) {
dev_info(edma->fdev, "%s: EDMA LIB %s-%s-SYNC done for %d iter on channel %d. Total Size %llu bytes, time %llu nsec. Perf is %llu Mbps\n", if (ret == EDMA_XFER_SUCCESS)
__func__, xfer_str[xfer_type], l_r_str[l_r], edma->stress_count, i, dev_info(edma->fdev, "%s: EDMA LIB %s-%s-SYNC done for %d iter on channel %d. Total Size %llu bytes, time %llu nsec. Perf is %llu Mbps\n",
edma->tsz, diff, EDMA_PERF); __func__, xfer_str[xfer_type], l_r_str[l_r], edma->stress_count, i,
edma->tsz, diff, EDMA_PERF);
}
} }
dev_info(edma->fdev, "%s: EDMA LIB submit done\n", __func__); dev_info(edma->fdev, "%s: EDMA LIB submit done\n", __func__);