From e47d8761bb183a09c40eb678bbb23fbf5130d782 Mon Sep 17 00:00:00 2001 From: Devendar Gali <devendar.gali@amd.com> Date: Mon, 27 May 2024 10:03:45 +0530 Subject: [PATCH] QDMA: Limit descriptor length for EQDMA Soft IP EQDMA Soft 5.0 IP is designed to do only 64Kb-1 data transfer per descriptor. So, limiting the descriptor length to 32Kb. Signed-off-by: Devendar Gali <devendar.gali@amd.com> --- QDMA/linux-kernel/driver/libqdma/qdma_descq.c | 19 +++++++++++++++++++ QDMA/linux-kernel/driver/libqdma/xdev.h | 12 ++++++++++++ 2 files changed, 31 insertions(+) diff --git a/QDMA/linux-kernel/driver/libqdma/qdma_descq.c b/QDMA/linux-kernel/driver/libqdma/qdma_descq.c index db8e44e..9cc4e49 100755 --- a/QDMA/linux-kernel/driver/libqdma/qdma_descq.c +++ b/QDMA/linux-kernel/driver/libqdma/qdma_descq.c @@ -31,6 +31,9 @@ #include "qdma_context.h" #include "qdma_st_c2h.h" #include "qdma_access_common.h" +#ifdef __XRT__ +#include "eqdma_soft_access.h" +#endif #include "thread.h" #include "qdma_ul_ext.h" #include "version.h" @@ -196,6 +199,22 @@ static ssize_t descq_mm_proc_request(struct qdma_descq *descq) qconf->aperture_size : QDMA_DESC_BLEN_MAX; u8 keyhole_en = qconf->aperture_size ? 1 : 0; u64 ep_addr_max = 0; +#ifdef __XRT__ + if (descq->xdev->version_info.ip_type == EQDMA_SOFT_IP) { + uint32_t ip_version; +#ifndef __QDMA_VF__ + uint8_t is_vf = 0; +#else + uint8_t is_vf = 1; +#endif + rv = eqdma_get_ip_version(descq->xdev, is_vf, &ip_version); + if (ip_version == EQDMA_IP_VERSION_5) { + pr_info("EQDMA Soft IP 5.0 supports descriptor length < 64K.\n"); + aperture = qconf->aperture_size ? + qconf->aperture_size : SOFT_QDMA_DESC_BLEN_MAX; + } + } +#endif lock_descq(descq); /* process completion of submitted requests */ diff --git a/QDMA/linux-kernel/driver/libqdma/xdev.h b/QDMA/linux-kernel/driver/libqdma/xdev.h index 47c26b4..d79eb2b 100755 --- a/QDMA/linux-kernel/driver/libqdma/xdev.h +++ b/QDMA/linux-kernel/driver/libqdma/xdev.h @@ -95,6 +95,18 @@ enum qdma_pf_devices { */ #define QDMA_DESC_BLEN_MAX ((1 << (QDMA_DESC_BLEN_BITS)) - 1) +#ifdef __XRT__ +/** + * number of bits to describe the SOFT DMA transfer descriptor + */ +#define SOFT_QDMA_DESC_BLEN_BITS 15 + +/** + * maximum size of a single SOFT DMA transfer descriptor + */ +#define SOFT_QDMA_DESC_BLEN_MAX (1 << (SOFT_QDMA_DESC_BLEN_BITS)) +#endif + /** * obtain the 32 most significant (high) bits of a 32-bit or 64-bit address */ -- GitLab