Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Workaround to limit Aperture Size Limit as part of QDMA Queues for SOFT QDMA IP. #7979

Merged
merged 8 commits into from
Mar 5, 2024
23 changes: 21 additions & 2 deletions src/runtime_src/core/pcie/driver/linux/xocl/subdev/qdma.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@

#define QDMA_REQ_TIMEOUT_MS 10000

/* This is a temporary workaround in limiting the aperture size
* until the block size issue in SOFT QDMA IP is fixed.
*/
#define QDMA_WA_APERTURE_SIZE 0x8000

/* Module Parameters */
unsigned int qdma_max_channel = 8;
module_param(qdma_max_channel, uint, 0644);
Expand Down Expand Up @@ -483,10 +488,11 @@ static int set_max_chan(struct xocl_qdma *qdma, u32 count)
struct platform_device *pdev = qdma->pdev;
struct qdma_queue_conf *qconf;
struct mm_channel *chan;
struct qdma_version_info ver_info;
u32 write, qidx;
char ebuf[MM_EBUF_LEN + 1];
int i, ret;
bool reset = false;
int i, ret, rv;
bool reset = false, is_soft_qdma = false;

if (count > sizeof(qdma->channel_bitmap[0]) * 8) {
xocl_info(&pdev->dev, "Invalide number of channels set %d", count);
Expand Down Expand Up @@ -519,6 +525,14 @@ static int set_max_chan(struct xocl_qdma *qdma, u32 count)
}
}

rv = qdma_device_version_info(qdma->dma_hndl, &ver_info);

if (rv < 0) {
xocl_err(&pdev->dev, "qdma_device_version_info failed: %d", rv);
goto failed_create_queue;
}
is_soft_qdma = (strcmp(ver_info.ip_str, "EQDMA5.0 Soft IP") == 0)? true : false;

for (i = 0; i < qdma->channel * 2; i++) {
write = i / qdma->channel;
qidx = i % qdma->channel;
Expand All @@ -541,6 +555,11 @@ static int set_max_chan(struct xocl_qdma *qdma, u32 count)
qconf->qidx = qidx;
qconf->irq_en = (qdma->dev_conf.qdma_drv_mode == POLL_MODE) ?
0 : 1;
if (is_soft_qdma)
{
Copy link
Collaborator

@chvamshi-xilinx chvamshi-xilinx Mar 5, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please use "{" along with if condition in next PR

/* This is a temporary workaround to limit aperture size until we have a fix in SOFT IP */
qconf->aperture_size = QDMA_WA_APERTURE_SIZE;
}

ret = qdma_queue_add(qdma->dma_hndl, qconf, &chan->queue,
ebuf, MM_EBUF_LEN);
Expand Down
Loading