diff --git a/QDMA/linux-kernel/driver/libqdma/qdma_descq.c b/QDMA/linux-kernel/driver/libqdma/qdma_descq.c index db8e44e50fe9637667760c0fb98334200135b8ff..9cc4e49b80380d91dfd8c8e542092a2052d5c8aa 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 47c26b43ca66916471b5809182170481c6c1984d..d79eb2b8c1f55e7f158e2eeb40196d63901f4d9c 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 */