diff --git a/0001-Fix-compile-errors.patch b/0001-Fix-compile-errors.patch index 369640d..d4ed6fd 100644 --- a/0001-Fix-compile-errors.patch +++ b/0001-Fix-compile-errors.patch @@ -1,4 +1,4 @@ -From a6ab27b854a63983403ee4376a0303629267c6c1 Mon Sep 17 00:00:00 2001 +From 8dad60feacfc28d092a0de066eba4e2a41dfe616 Mon Sep 17 00:00:00 2001 From: lizhenhua Date: Wed, 20 May 2020 13:49:21 +0800 Subject: [PATCH] Fix compile errors @@ -6,88 +6,93 @@ Subject: [PATCH] Fix compile errors --- ext_libs/muparser/muParserCallback.cpp | 16 ++++++++++++++++ ext_libs/muparser/muParserCallback.h | 1 + - mlxfwops/lib/fw_ops.cpp | 6 +++--- + mlxfwops/lib/fw_ops.cpp | 10 +++------- small_utils/mtserver.c | 4 ++-- - 4 files changed, 22 insertions(+), 5 deletions(-) + 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/ext_libs/muparser/muParserCallback.cpp b/ext_libs/muparser/muParserCallback.cpp -index 2044fe1..27c5b08 100755 +index 8db3c1d..2040efe 100644 --- a/ext_libs/muparser/muParserCallback.cpp +++ b/ext_libs/muparser/muParserCallback.cpp -@@ -386,6 +386,22 @@ namespace mu - m_eOprtAsct = ref.m_eOprtAsct; - } +@@ -392,6 +392,22 @@ ParserCallback::ParserCallback(const ParserCallback& ref) + m_eOprtAsct = ref.m_eOprtAsct; + } -+ ParserCallback& ParserCallback::operator=(const ParserCallback& cb) -+ { -+ if (this != &cb) -+ { -+ m_pFun = cb.m_pFun; -+ m_iArgc = cb.m_iArgc; -+ m_bAllowOpti = cb.m_bAllowOpti; -+ m_iCode = cb.m_iCode; -+ m_iType = cb.m_iType; -+ m_iPri = cb.m_iPri; -+ m_eOprtAsct = cb.m_eOprtAsct; -+ } ++ParserCallback& ParserCallback::operator=(const ParserCallback& cb) ++{ ++ if (this != &cb) ++ { ++ m_pFun = cb.m_pFun; ++ m_iArgc = cb.m_iArgc; ++ m_bAllowOpti = cb.m_bAllowOpti; ++ m_iCode = cb.m_iCode; ++ m_iType = cb.m_iType; ++ m_iPri = cb.m_iPri; ++ m_eOprtAsct = cb.m_eOprtAsct; ++ } + -+ return *this; -+ } ++ return *this; ++} + - //--------------------------------------------------------------------------- - /** \brief Clone this instance and return a pointer to the new instance. */ - ParserCallback* ParserCallback::Clone() const + //--------------------------------------------------------------------------- + /** \brief Clone this instance and return a pointer to the new instance. */ + ParserCallback* ParserCallback::Clone() const diff --git a/ext_libs/muparser/muParserCallback.h b/ext_libs/muparser/muParserCallback.h -index ef32b49..e8e274d 100755 +index d756099..913e059 100644 --- a/ext_libs/muparser/muParserCallback.h +++ b/ext_libs/muparser/muParserCallback.h -@@ -81,6 +81,7 @@ public: +@@ -80,6 +80,7 @@ public: ParserCallback(strfun_type3 a_pFun, bool a_bAllowOpti); ParserCallback(); - ParserCallback(const ParserCallback &a_Fun); + ParserCallback(const ParserCallback& a_Fun); + ParserCallback& operator=(const ParserCallback& cb); - + ParserCallback* Clone() const; diff --git a/mlxfwops/lib/fw_ops.cpp b/mlxfwops/lib/fw_ops.cpp -index fc06c50..4d7bcdf 100644 +index ea3ca19..d26d6c7 100644 --- a/mlxfwops/lib/fw_ops.cpp +++ b/mlxfwops/lib/fw_ops.cpp -@@ -768,16 +768,16 @@ void FwOperations::BackUpFwParams(fw_ops_params_t& fwParams) - _fwParams.errBuff = (char*)NULL; +@@ -879,21 +879,17 @@ void FwOperations::BackUpFwParams(fw_ops_params_t& fwParams) _fwParams.errBuffSize = 0; - _fwParams.fileHndl = (fwParams.hndlType == FHT_FW_FILE && fwParams.fileHndl) ? \ -- strncpy((char*)(new char[(strlen(fwParams.fileHndl) + 1)]), fwParams.fileHndl, strlen(fwParams.fileHndl) + 1) : (char*)NULL; -+ (char*)memmove((new char[(strlen(fwParams.fileHndl) + 1)]), fwParams.fileHndl, strlen(fwParams.fileHndl) + 1) : (char*)NULL; + _fwParams.fileHndl = + (fwParams.hndlType == FHT_FW_FILE && fwParams.fileHndl) ? +- strncpy((char*)(new char[(strlen(fwParams.fileHndl) + 1)]), fwParams.fileHndl, strlen(fwParams.fileHndl) + 1) : +- (char*)NULL; ++ (char*)memmove((new char[(strlen(fwParams.fileHndl) + 1)]), fwParams.fileHndl, strlen(fwParams.fileHndl) + 1) : (char*)NULL; // no support for flash params _fwParams.flashParams = (flash_params_t*)NULL; _fwParams.forceLock = fwParams.forceLock; _fwParams.ignoreCacheRep = fwParams.ignoreCacheRep; - _fwParams.mstHndl = (fwParams.hndlType == FHT_MST_DEV && fwParams.mstHndl) ? \ -- strncpy((char*)(new char[(strlen(fwParams.mstHndl) + 1)]), fwParams.mstHndl, strlen(fwParams.mstHndl) + 1) : (char*)NULL; -+ (char*)memmove((new char[(strlen(fwParams.mstHndl) + 1)]), fwParams.mstHndl, strlen(fwParams.mstHndl) + 1) : (char*)NULL; + _fwParams.mstHndl = + (fwParams.hndlType == FHT_MST_DEV && fwParams.mstHndl) ? +- strncpy((char*)(new char[(strlen(fwParams.mstHndl) + 1)]), fwParams.mstHndl, strlen(fwParams.mstHndl) + 1) : +- (char*)NULL; ++ (char*)memmove((new char[(strlen(fwParams.mstHndl) + 1)]), fwParams.mstHndl, strlen(fwParams.mstHndl) + 1) : (char*)NULL; _fwParams.noFlashVerify = fwParams.noFlashVerify; _fwParams.numOfBanks = fwParams.numOfBanks; -- _fwParams.psid = fwParams.psid ? strncpy((char*)(new char[(strlen(fwParams.psid) + 1)]), fwParams.psid, strlen(fwParams.psid) + 1) : (char*)NULL; +- _fwParams.psid = fwParams.psid ? strncpy((char*)(new char[(strlen(fwParams.psid) + 1)]), fwParams.psid, +- strlen(fwParams.psid) + 1) : +- (char*)NULL; + _fwParams.psid = fwParams.psid ? (char*)memmove((new char[(strlen(fwParams.psid) + 1)]), fwParams.psid, strlen(fwParams.psid) + 1) : (char*)NULL; _fwParams.readOnly = fwParams.readOnly; _fwParams.shortErrors = fwParams.shortErrors; _fwParams.uefiExtra = fwParams.uefiExtra; diff --git a/small_utils/mtserver.c b/small_utils/mtserver.c -index 143c1f4..335a5ff 100644 +index d75ec2e..8026ce5 100644 --- a/small_utils/mtserver.c +++ b/small_utils/mtserver.c -@@ -420,8 +420,8 @@ int parse_i2c_cmd(char *buf, u_int8_t *addr_width, u_int8_t *slave_addr, int *si - for (i = 0; i < *size; i++) { +@@ -714,8 +714,8 @@ int parse_i2c_cmd(char* buf, + { char tmp_num[10]; // TODO: use 16 on the strtoul -- strncpy(tmp_num, "0x", 2); +- strncpy(tmp_num, "0x", 3); - strncpy(tmp_num + 2, p, 2); -+ memmove(tmp_num, "0x", 2); ++ memmove(tmp_num, "0x", 3); + memmove(tmp_num + 2, p, 2); tmp_num[4] = '\0'; ((u_int8_t*)data)[i] = (u_int8_t)strtoul(tmp_num, 0, 0); p += 2; -- -2.23.0 +2.27.0 diff --git a/0002-fix-build-failure-due-to-gcc-updated.patch b/0002-fix-build-failure-due-to-gcc-updated.patch deleted file mode 100644 index ee200f9..0000000 --- a/0002-fix-build-failure-due-to-gcc-updated.patch +++ /dev/null @@ -1,43 +0,0 @@ -From a0776ec857a40991f8ff82e49d9e9a0302848038 Mon Sep 17 00:00:00 2001 -From: wang--ge -Date: Tue, 4 Jul 2023 15:02:53 +0800 -Subject: [PATCH] fix build failure due to gcc updated - ---- - ext_libs/sqlite/sqlite3.c | 6 +++++- - mlxfwupdate/server_request.cpp | 2 +- - 2 files changed, 6 insertions(+), 2 deletions(-) - -diff --git a/ext_libs/sqlite/sqlite3.c b/ext_libs/sqlite/sqlite3.c -index e198678..e244656 100755 ---- a/ext_libs/sqlite/sqlite3.c -+++ b/ext_libs/sqlite/sqlite3.c -@@ -100249,7 +100249,11 @@ SQLITE_PRIVATE void sqlite3DefaultRowEst(Index *pIdx){ - ** number of rows in the table. Or 10, if the estimated number of rows - ** in the table is less than that. */ - a[0] = pIdx->pTable->nRowLogEst; -- if( a[0]<33 ) a[0] = 33; assert( 33==sqlite3LogEst(10) ); -+ if( a[0]<33 ) { -+ a[0] = 33; -+ } -+ -+ assert( 33==sqlite3LogEst(10) ); - - /* Estimate that a[1] is 10, a[2] is 9, a[3] is 8, a[4] is 7, a[5] is - ** 6 and each subsequent value (if any) is 5. */ -diff --git a/mlxfwupdate/server_request.cpp b/mlxfwupdate/server_request.cpp -index a33559a..46a19fa 100644 ---- a/mlxfwupdate/server_request.cpp -+++ b/mlxfwupdate/server_request.cpp -@@ -482,7 +482,7 @@ int ServerRequest::curl_request(const char *url, - // Internal CURL progressmeter must be disabled if we provide our own callback - curl_easy_setopt(_curl, CURLOPT_NOPROGRESS, false); - // Install the callback function -- curl_easy_setopt(_curl, CURLOPT_PROGRESSFUNCTION, progress_func); -+ curl_easy_setopt(_curl, CURLOPT_XFERINFOFUNCTION, progress_func); - } - if (_Proxy.size() > 0) { - curl_easy_setopt(_curl, CURLOPT_PROXY, _Proxy.c_str()); --- -2.33.0 - diff --git a/0005-Allow-building-on-riscv64.patch b/0005-Allow-building-on-riscv64.patch deleted file mode 100644 index dd662fb..0000000 --- a/0005-Allow-building-on-riscv64.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 889235fee41dc9b565407ce923e5af100c839b97 Mon Sep 17 00:00:00 2001 -From: Tzafrir Cohen -Date: Fri, 5 Feb 2021 10:36:33 +0200 -Subject: [PATCH] Allow building on riscv64 - ---- - common/compatibility.h | 4 +++- - mtcr_ul/packets_common.h | 4 +++- - tools_layouts/adb_to_c_utils.h | 4 +++- - 3 files changed, 9 insertions(+), 3 deletions(-) - -diff --git a/common/compatibility.h b/common/compatibility.h -index f8bc817..d163478 100644 ---- a/common/compatibility.h -+++ b/common/compatibility.h -@@ -63,6 +63,8 @@ - # define ARCH_arm64 - # elif defined(__arm__) - # define ARCH_arm6l -+# elif defined(__riscv) -+# define ARCH_riscv - # else - # error Unknown CPU architecture using the linux OS - # endif -@@ -109,7 +111,7 @@ - # define U48H_FMT "0x%012llx" - # define U64D_FMT_GEN "llu" - # endif --#elif defined(ARCH_ia64) || defined(ARCH_x86_64) || defined(ARCH_ppc64) || defined(ARCH_arm64) -+#elif defined(ARCH_ia64) || defined(ARCH_x86_64) || defined(ARCH_ppc64) || defined(ARCH_arm64) || defined(ARCH_riscv) - # define U64D_FMT "%lu" - # define U64H_FMT "0x%016lx" - # define U48H_FMT "0x%012lx" -diff --git a/mtcr_ul/packets_common.h b/mtcr_ul/packets_common.h -index 4df05ef..7f43b59 100644 ---- a/mtcr_ul/packets_common.h -+++ b/mtcr_ul/packets_common.h -@@ -152,6 +152,8 @@ - # define ARCH_arm64 - # elif defined(__arm__) - # define ARCH_arm6l -+# elif defined(__riscv) -+# define ARCH_riscv - # else - # error Unknown CPU architecture using the linux OS - # endif -@@ -165,7 +167,7 @@ - /* define macros for print fields */ - //#if defined (ARCH_ia64) || defined(ARCH_x86_64) || defined(ARCH_ppc64) || defined(__MINGW64__) - /* -- #if !defined(UEFI_BUILD) && (defined (ARCH_ia64) || defined(ARCH_x86_64) || defined(ARCH_ppc64) || defined(__MINGW64__)) -+ #if !defined(UEFI_BUILD) && (defined (ARCH_ia64) || defined(ARCH_x86_64) || defined(ARCH_ppc64) || defined(__MINGW64__) || defined(ARCH_riscv)) - # define U64H_FMT "0x%016lx" - # define U64D_FMT "%lu" - # define U32H_FMT "0x%08x" -diff --git a/tools_layouts/adb_to_c_utils.h b/tools_layouts/adb_to_c_utils.h -index 2e7a1ef..61af52f 100644 ---- a/tools_layouts/adb_to_c_utils.h -+++ b/tools_layouts/adb_to_c_utils.h -@@ -140,6 +140,8 @@ extern "C" { - # define ARCH_arm64 - # elif defined(__arm__) - # define ARCH_arm6l -+# elif defined(__riscv) -+# define ARCH_riscv - # else - # error Unknown CPU architecture using the linux OS - # endif -@@ -183,7 +185,7 @@ extern "C" { - # define U64H_FMT "0x%016llx" - # define U48H_FMT "0x%012llx" - # endif --#elif defined (ARCH_ia64) || defined(ARCH_x86_64) || defined(ARCH_ppc64) || defined(ARCH_arm64) -+#elif defined (ARCH_ia64) || defined(ARCH_x86_64) || defined(ARCH_ppc64) || defined(ARCH_arm64) || defined(ARCH_riscv) - # define U64D_FMT "%lu" - # define U64H_FMT "0x%016lx" - # define U48H_FMT "0x%012lx" --- -2.40.1 - diff --git a/backport-0001-Title-Fix-error-while-burning-mcc-enabled.patch b/backport-0001-Title-Fix-error-while-burning-mcc-enabled.patch deleted file mode 100644 index 46fe7f7..0000000 --- a/backport-0001-Title-Fix-error-while-burning-mcc-enabled.patch +++ /dev/null @@ -1,33 +0,0 @@ -From e8d9ff786a04eb142ce6f3c8650ea975bbe595e2 Mon Sep 17 00:00:00 2001 -From: Samer Deeb -Date: Mon, 12 Nov 2018 20:39:36 +0000 -Subject: [PATCH] Title: Fix error while burning mcc enabled Description: - ignore HMAC calculation Issue: 1472385 - -Signed-off-by: Samer Deeb ---- - mlxfwops/lib/fs3_ops.cpp | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/mlxfwops/lib/fs3_ops.cpp b/mlxfwops/lib/fs3_ops.cpp -index deb4a05..b5a9d93 100644 ---- a/mlxfwops/lib/fs3_ops.cpp -+++ b/mlxfwops/lib/fs3_ops.cpp -@@ -3316,12 +3316,12 @@ bool Fs3Operations::AddHMACIfNeeded(Fs3Operations* imageOps, Flash *f) - } - } - -- return true; - #else - (void)imageOps; - (void)f; -- return errmsg("HMAC calculation is not implemented\n"); -+ //ignore - #endif -+ return true; - } - - bool Fs3Operations::DoAfterBurnJobs(const u_int32_t magic_patter[], --- -2.21.0 - diff --git a/backport-0001-Title-Fix-errors-found-with-checkpatch-script.patch b/backport-0001-Title-Fix-errors-found-with-checkpatch-script.patch deleted file mode 100644 index 3ee3d9a..0000000 --- a/backport-0001-Title-Fix-errors-found-with-checkpatch-script.patch +++ /dev/null @@ -1,1146 +0,0 @@ -From 8154be122d0f841208b787b728085c565710e0f7 Mon Sep 17 00:00:00 2001 -From: Idan Mehalel -Date: Mon, 23 Jul 2018 15:24:12 +0300 -Subject: [PATCH] Title: Fix errors found with checkpatch script - -Description: -Issue: 1471556 ---- - kernel/mst.h | 32 +-- - kernel/mst_kernel.h | 4 +- - kernel/mst_main.c | 616 +++++++++++++++++++++++--------------------- - kernel/mst_vpd.c | 4 +- - 4 files changed, 338 insertions(+), 318 deletions(-) - -diff --git a/kernel/mst.h b/kernel/mst.h -index dc22513..c076c1d 100644 ---- a/kernel/mst.h -+++ b/kernel/mst.h -@@ -74,18 +74,18 @@ typedef uint32_t u32; - #define MST_READ4 _IOR(MST_BYTE_ACCESS_MAGIC, 1, struct mst_read4_st) - - struct mst_read4_st { -- unsigned int address_space; -- unsigned int offset; -- unsigned int data; /*OUT*/ -+ unsigned int address_space; -+ unsigned int offset; -+ unsigned int data; /*OUT*/ - }; - - - #define MST_WRITE4 _IOW(MST_BYTE_ACCESS_MAGIC, 2, struct mst_write4_st) - - struct mst_write4_st { -- unsigned int address_space; -- unsigned int offset; -- unsigned int data; -+ unsigned int address_space; -+ unsigned int offset; -+ unsigned int data; - }; - - -@@ -115,20 +115,20 @@ struct mst_write_block_st { - }; - - --#define PCICONF_READ4_BUFFER _IOR (MST_BLOCK_ACCESS_MAGIC, 3, struct mst_read4_st) -+#define PCICONF_READ4_BUFFER _IOR(MST_BLOCK_ACCESS_MAGIC, 3, struct mst_read4_st) - struct mst_read4_buffer_st { -- unsigned int address_space; -- unsigned int offset; -- int size; -- unsigned int data[PCICONF_MAX_BUFFER_SIZE/4]; /*OUT*/ -+ unsigned int address_space; -+ unsigned int offset; -+ int size; -+ unsigned int data[PCICONF_MAX_BUFFER_SIZE/4]; /*OUT*/ - }; - --#define PCICONF_WRITE4_BUFFER _IOW (MST_BLOCK_ACCESS_MAGIC, 4, struct mst_write4_buffer_st) -+#define PCICONF_WRITE4_BUFFER _IOW(MST_BLOCK_ACCESS_MAGIC, 4, struct mst_write4_buffer_st) - struct mst_write4_buffer_st { -- unsigned int address_space; -- unsigned int offset; -- int size; -- unsigned int data[PCICONF_MAX_BUFFER_SIZE/4]; /*IN*/ -+ unsigned int address_space; -+ unsigned int offset; -+ int size; -+ unsigned int data[PCICONF_MAX_BUFFER_SIZE/4]; /*IN*/ - }; - /****************************************************/ - /* -diff --git a/kernel/mst_kernel.h b/kernel/mst_kernel.h -index d7188e9..fb52abc 100644 ---- a/kernel/mst_kernel.h -+++ b/kernel/mst_kernel.h -@@ -113,10 +113,10 @@ struct mst_dev_data { - - /****************************************************/ - int pci_read4_vpd(struct mst_dev_data *dev, unsigned int timeout, -- unsigned offset, u32 *buf); -+ unsigned int offset, u32 *buf); - - int pci_write4_vpd(struct mst_dev_data *dev, unsigned int timeout, -- unsigned offset, u32 buf); -+ unsigned int offset, u32 buf); - - - #endif /* _MST_KERNEL_H_ */ -diff --git a/kernel/mst_main.c b/kernel/mst_main.c -index 047cc98..9da9df9 100644 ---- a/kernel/mst_main.c -+++ b/kernel/mst_main.c -@@ -33,7 +33,7 @@ - #include - #include - #include --#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18) -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 18) - #include - #else - #include -@@ -59,7 +59,7 @@ static const char mst_driver_string[] = "Mellanox Technologies Software Tools Dr - LIST_HEAD(mst_devices); - - static struct pci_device_id mst_livefish_pci_table[] = { -- { PCI_DEVICE(MST_MELLANOX_PCI_VENDOR, 0x01f6) }, /* MT27500 [ConnectX-3 Flash Recovery] */ -+ { PCI_DEVICE(MST_MELLANOX_PCI_VENDOR, 0x01f6) }, /* MT27500 [ConnectX-3 Flash Recovery] */ - { PCI_DEVICE(MST_MELLANOX_PCI_VENDOR, 0x01f8) }, /* MT27520 [ConnectX-3 Pro Flash Recovery] */ - { PCI_DEVICE(MST_MELLANOX_PCI_VENDOR, 0x01ff) }, /* MT27520 [ConnectX-IB Flash Recovery] */ - { PCI_DEVICE(MST_MELLANOX_PCI_VENDOR, 0x0209) }, /* MT27520 [ConnectX-4 Flash Recovery] */ -@@ -70,14 +70,14 @@ static struct pci_device_id mst_livefish_pci_table[] = { - }; - - static struct pci_device_id mst_bar_pci_table[] = { -- { PCI_DEVICE(MST_MELLANOX_PCI_VENDOR, 4099) }, /* MT27600 [ConnectX-3] */ -- { PCI_DEVICE(MST_MELLANOX_PCI_VENDOR, 4103) }, /* MT27600 [ConnectX-3Pro] */ -+ { PCI_DEVICE(MST_MELLANOX_PCI_VENDOR, 4099) }, /* MT27600 [ConnectX-3] */ -+ { PCI_DEVICE(MST_MELLANOX_PCI_VENDOR, 4103) }, /* MT27600 [ConnectX-3Pro] */ - { 0, } - }; - - static struct pci_device_id supported_pci_devices[] = { -- { PCI_DEVICE(MST_MELLANOX_PCI_VENDOR, 4099) }, /* MT27600 [ConnectX-3] */ -- { PCI_DEVICE(MST_MELLANOX_PCI_VENDOR, 4103) }, /* MT27600 [ConnectX-3Pro] */ -+ { PCI_DEVICE(MST_MELLANOX_PCI_VENDOR, 4099) }, /* MT27600 [ConnectX-3] */ -+ { PCI_DEVICE(MST_MELLANOX_PCI_VENDOR, 4103) }, /* MT27600 [ConnectX-3Pro] */ - { PCI_DEVICE(MST_MELLANOX_PCI_VENDOR, 4113) }, /* MT27600 [ConnectX-IB] */ - { PCI_DEVICE(MST_MELLANOX_PCI_VENDOR, 4115) }, /* MT27600 [ConnectX-4] */ - { PCI_DEVICE(MST_MELLANOX_PCI_VENDOR, 4117) }, /* MT27600 [ConnectX-4Lx] */ -@@ -93,13 +93,13 @@ static struct pci_device_id supported_pci_devices[] = { - - // BIT Slicing macros - #define ONES32(size) ((size)?(0xffffffff>>(32-(size))):0) --#define MASK32(offset,size) (ONES32(size)<<(offset)) -+#define MASK32(offset, size) (ONES32(size)<<(offset)) - --#define EXTRACT_C(source,offset,size) ((((unsigned)(source))>>(offset)) & ONES32(size)) --#define EXTRACT(src,start,len) (((len)==32)?(src):EXTRACT_C(src,start,len)) -+#define EXTRACT_C(source, offset, size) ((((unsigned int)(source))>>(offset)) & ONES32(size)) -+#define EXTRACT(src, start, len) (((len) == 32)?(src):EXTRACT_C(src, start, len)) - --#define MERGE_C(rsrc1,rsrc2,start,len) ((((rsrc2)<<(start)) & (MASK32((start),(len)))) | ((rsrc1) & (~MASK32((start),(len))))) --#define MERGE(rsrc1,rsrc2,start,len) (((len)==32)?(rsrc2):MERGE_C(rsrc1,rsrc2,start,len)) -+#define MERGE_C(rsrc1, rsrc2, start, len) ((((rsrc2)<<(start)) & (MASK32((start), (len)))) | ((rsrc1) & (~MASK32((start), (len))))) -+#define MERGE(rsrc1, rsrc2, start, len) (((len) == 32)?(rsrc2):MERGE_C(rsrc1, rsrc2, start, len)) - - - /* Allow minor numbers 0-255 */ -@@ -163,34 +163,40 @@ static int _vendor_specific_sem(struct mst_dev_data *dev, int state) - u32 counter = 0; - int retries = 0; - int ret; -+ - if (!state) {// unlock -- ret = pci_write_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_SEMAPHORE_OFFSET, 0); -- if (ret) return ret; -+ ret = pci_write_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_SEMAPHORE_OFFSET, 0); -+ if (ret) -+ return ret; - } else { // lock -- do { -- if (retries > SEM_MAX_RETRIES) { -- return -1; -- } -- // read semaphore untill 0x0 -- ret = pci_read_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_SEMAPHORE_OFFSET, &lock_val); -- if (ret) return ret; -- -- if (lock_val) { //semaphore is taken -- retries++; -- msleep(1); // wait for current op to end -- continue; -- } -- //read ticket -- ret = pci_read_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_COUNTER_OFFSET, &counter); -- if (ret) return ret; -- //write ticket to semaphore dword -- ret = pci_write_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_SEMAPHORE_OFFSET, counter); -- if (ret) return ret; -- // read back semaphore make sure ticket == semaphore else repeat -- ret = pci_read_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_SEMAPHORE_OFFSET, &lock_val); -- if (ret) return ret; -- retries++; -- } while (counter != lock_val); -+ do { -+ if (retries > SEM_MAX_RETRIES) { -+ return -1; -+ } -+ // read semaphore untill 0x0 -+ ret = pci_read_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_SEMAPHORE_OFFSET, &lock_val); -+ if (ret) -+ return ret; -+ -+ if (lock_val) { //semaphore is taken -+ retries++; -+ msleep(1); // wait for current op to end -+ continue; -+ } -+ //read ticket -+ ret = pci_read_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_COUNTER_OFFSET, &counter); -+ if (ret) -+ return ret; -+ //write ticket to semaphore dword -+ ret = pci_write_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_SEMAPHORE_OFFSET, counter); -+ if (ret) -+ return ret; -+ // read back semaphore make sure ticket == semaphore else repeat -+ ret = pci_read_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_SEMAPHORE_OFFSET, &lock_val); -+ if (ret) -+ return ret; -+ retries++; -+ } while (counter != lock_val); - } - return 0; - } -@@ -200,91 +206,101 @@ static int _wait_on_flag(struct mst_dev_data *dev, u8 expected_val) - int retries = 0; - int ret; - u32 flag; -+ - do { -- if (retries > IFC_MAX_RETRIES) { -- return -1; -- } -- -- ret = pci_read_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_ADDR_OFFSET, &flag); -- if (ret) return ret; -- -- flag = EXTRACT(flag, PCI_FLAG_BIT_OFFS, 1); -- retries++; -- if ((retries & 0xf) == 0) {// dont sleep always -- //usleep_range(1,5); -- } -+ if (retries > IFC_MAX_RETRIES) { -+ return -1; -+ } -+ -+ ret = pci_read_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_ADDR_OFFSET, &flag); -+ if (ret) -+ return ret; -+ -+ flag = EXTRACT(flag, PCI_FLAG_BIT_OFFS, 1); -+ retries++; -+ if ((retries & 0xf) == 0) {// dont sleep always -+ //usleep_range(1,5); -+ } - } while (flag != expected_val); - return 0; - } - --static int _set_addr_space( struct mst_dev_data *dev, u16 space) -+static int _set_addr_space(struct mst_dev_data *dev, u16 space) - { - // read modify write - u32 val; - int ret; -+ - ret = pci_read_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_CTRL_OFFSET, &val); -- if (ret) return ret; -+ if (ret) -+ return ret; - val = MERGE(val, space, PCI_SPACE_BIT_OFFS, PCI_SPACE_BIT_LEN); - ret = pci_write_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_CTRL_OFFSET, val); -- if (ret) return ret; -+ if (ret) -+ return ret; - // read status and make sure space is supported - ret = pci_read_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_CTRL_OFFSET, &val); -- if (ret) return ret; -+ if (ret) -+ return ret; - - if (EXTRACT(val, PCI_STATUS_BIT_OFFS, PCI_STATUS_BIT_LEN) == 0) { - // mst_err("CRSPACE %d is not supported !\n", space); -- return -1; -+ return -1; - } - // mst_err("CRSPACE %d is supported !\n", space); - return 0; - } - --static int _pciconf_rw(struct mst_dev_data *dev, unsigned int offset, u32* data, int rw) -+static int _pciconf_rw(struct mst_dev_data *dev, unsigned int offset, u32 *data, int rw) - { - int ret = 0; - u32 address = offset; - - //last 2 bits must be zero as we only allow 30 bits addresses - if (EXTRACT(address, 30, 2)) { -- return -1; -+ return -1; - } - -- address = MERGE(address,(rw ? 1 : 0), PCI_FLAG_BIT_OFFS, 1); -+ address = MERGE(address, (rw ? 1 : 0), PCI_FLAG_BIT_OFFS, 1); - if (rw == WRITE_OP) { -- // write data -- ret = pci_write_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_DATA_OFFSET, *data); -- if (ret) return ret; -- // write address -- ret = pci_write_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_ADDR_OFFSET, address); -- if (ret) return ret; -- // wait on flag -- ret = _wait_on_flag(dev, 0); -+ // write data -+ ret = pci_write_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_DATA_OFFSET, *data); -+ if (ret) -+ return ret; -+ // write address -+ ret = pci_write_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_ADDR_OFFSET, address); -+ if (ret) -+ return ret; -+ // wait on flag -+ ret = _wait_on_flag(dev, 0); - } else { -- // write address -- ret = pci_write_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_ADDR_OFFSET, address); -- if (ret) return ret; -- // wait on flag -- ret = _wait_on_flag(dev, 1); -- // read data -- ret = pci_read_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_DATA_OFFSET, data); -- if (ret) return ret; -+ // write address -+ ret = pci_write_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_ADDR_OFFSET, address); -+ if (ret) -+ return ret; -+ // wait on flag -+ ret = _wait_on_flag(dev, 1); -+ // read data -+ ret = pci_read_config_dword(dev->pci_dev, dev->vendor_specific_cap + PCI_DATA_OFFSET, data); -+ if (ret) -+ return ret; - } - return ret; - } - --static int _send_pci_cmd_int( struct mst_dev_data *dev, int space, unsigned int offset, u32* data, int rw) -+static int _send_pci_cmd_int(struct mst_dev_data *dev, int space, unsigned int offset, u32 *data, int rw) - { - int ret = 0; - - // take semaphore - ret = _vendor_specific_sem(dev, 1); - if (ret) { -- return ret; -+ return ret; - } - // set address space - ret = _set_addr_space(dev, space); - if (ret) { -- goto cleanup; -+ goto cleanup; - } - // read/write the data - ret = _pciconf_rw(dev, offset, data, rw); -@@ -294,55 +310,56 @@ cleanup: - return ret; - } - --static int _block_op( struct mst_dev_data *dev, int space, unsigned int offset, int size, u32* data, int rw) -+static int _block_op(struct mst_dev_data *dev, int space, unsigned int offset, int size, u32 *data, int rw) - { - int i; - int ret = 0; - int wrote_or_read = size; -+ - if (size % 4) { -- return -1; -+ return -1; - } - // lock semaphore and set address space - ret = _vendor_specific_sem(dev, 1); - if (ret) { -- return -1; -+ return -1; - } - // set address space - ret = _set_addr_space(dev, space); - if (ret) { -- wrote_or_read = -1; -- goto cleanup; -+ wrote_or_read = -1; -+ goto cleanup; - } - - for (i = 0; i < size ; i += 4) { -- if (_pciconf_rw(dev, offset + i, &(data[(i >> 2)]), rw)) { -- wrote_or_read = i; -- goto cleanup; -- } -+ if (_pciconf_rw(dev, offset + i, &(data[(i >> 2)]), rw)) { -+ wrote_or_read = i; -+ goto cleanup; -+ } - } - cleanup: - _vendor_specific_sem(dev, 0); - return wrote_or_read; - } - --static int write4_vsec( struct mst_dev_data *dev, int addresss_domain, unsigned int offset, unsigned int data) -+static int write4_vsec(struct mst_dev_data *dev, int addresss_domain, unsigned int offset, unsigned int data) - { - int ret; - - ret = _send_pci_cmd_int(dev, addresss_domain, offset, &data, WRITE_OP); - if (ret) { -- return -1; -+ return -1; - } - return 0; - } - --static int read4_vsec( struct mst_dev_data *dev, int address_space, unsigned int offset, unsigned int* data) -+static int read4_vsec(struct mst_dev_data *dev, int address_space, unsigned int offset, unsigned int *data) - { - int ret; - //mst_info("Read from VSEC: offset: %#x\n", offset); - ret = _send_pci_cmd_int(dev, address_space, offset, data, READ_OP); - if (ret) { -- return -1; -+ return -1; - } - return 0; - } -@@ -355,23 +372,23 @@ int pciconf_read4_legacy(struct mst_dev_data *dev, unsigned int offset, unsigned - unsigned int new_offset = offset; - //mst_info("pciconf_read4_legacy: offset: %#x\n", offset); - if (dev->type != PCICONF) { -- return -1; -+ return -1; - } - if (dev->wo_addr) { -- new_offset |= 0x1; -+ new_offset |= 0x1; - } - /* write the wanted address to addr register */ - res = pci_write_config_dword(dev->pci_dev, dev->addr_reg, new_offset); - if (res) { -- mst_err("pci_write_config_dword failed\n"); -- return res; -+ mst_err("pci_write_config_dword failed\n"); -+ return res; - } - - /* read the result from data register */ - res = pci_read_config_dword(dev->pci_dev, dev->data_reg, data); - if (res) { -- mst_err("pci_read_config_dword failed\n"); -- return res; -+ mst_err("pci_read_config_dword failed\n"); -+ return res; - } - return 0; - } -@@ -379,55 +396,56 @@ int pciconf_read4_legacy(struct mst_dev_data *dev, unsigned int offset, unsigned - int pciconf_write4_legacy(struct mst_dev_data *dev, unsigned int offset, unsigned int data) - { - int res = 0; -+ - if (dev->type != PCICONF) { -- return -1; -+ return -1; - } - if (dev->wo_addr) { -- /* -- * Write operation with new WO GW -- * 1. Write data -- * 2. Write address -- */ -- -- /* write the data to data register */ -- res = pci_write_config_dword(dev->pci_dev, dev->data_reg, data); -- if (res) { -- mst_err("pci_write_config_dword failed\n"); -- return res; -- } -- /* write the destination address to addr register */ -- res = pci_write_config_dword(dev->pci_dev, dev->addr_reg, offset); -- if (res) { -- mst_err("pci_write_config_dword failed\n"); -- return res; -- } -+ /* -+ * Write operation with new WO GW -+ * 1. Write data -+ * 2. Write address -+ */ -+ -+ /* write the data to data register */ -+ res = pci_write_config_dword(dev->pci_dev, dev->data_reg, data); -+ if (res) { -+ mst_err("pci_write_config_dword failed\n"); -+ return res; -+ } -+ /* write the destination address to addr register */ -+ res = pci_write_config_dword(dev->pci_dev, dev->addr_reg, offset); -+ if (res) { -+ mst_err("pci_write_config_dword failed\n"); -+ return res; -+ } - - } else { -- /* write the destination address to addr register */ -- res = pci_write_config_dword(dev->pci_dev, dev->addr_reg, offset); -- if (res) { -- mst_err("pci_write_conflig_dword failed\n"); -- return res; -- } -- -- /* write the data to data register */ -- res = pci_write_config_dword(dev->pci_dev, dev->data_reg, data); -- if (res) { -- mst_err("pci_write_config_dword failed\n"); -- return res; -- } -+ /* write the destination address to addr register */ -+ res = pci_write_config_dword(dev->pci_dev, dev->addr_reg, offset); -+ if (res) { -+ mst_err("pci_write_conflig_dword failed\n"); -+ return res; -+ } -+ -+ /* write the data to data register */ -+ res = pci_write_config_dword(dev->pci_dev, dev->data_reg, data); -+ if (res) { -+ mst_err("pci_write_config_dword failed\n"); -+ return res; -+ } - } - return 0; - } - - --static int write4_block_vsec( struct mst_dev_data *dev, int address_space, unsigned int offset, int size, u32* data) -+static int write4_block_vsec(struct mst_dev_data *dev, int address_space, unsigned int offset, int size, u32 *data) - { - // mst_info("HERE %#x %#x %#x\n", address_space, offset, *data); - return _block_op(dev, address_space, offset, size, data, WRITE_OP); - } - --static int read4_block_vsec( struct mst_dev_data *dev, int address_space, unsigned int offset, int size, u32* data) -+static int read4_block_vsec(struct mst_dev_data *dev, int address_space, unsigned int offset, int size, u32 *data) - { - // mst_info("HERE %#x %#x %#x\n", address_space, offset, *data); - return _block_op(dev, address_space, offset, size, data, READ_OP); -@@ -438,25 +456,25 @@ static int get_space_support_status(struct mst_dev_data *dev) - int ret; - // printk("[MST] Checking if the Vendor CAP %d supports the SPACES in devices\n", vend_cap); - if (!dev->vendor_specific_cap) { -- return 0; -+ return 0; - } -- if (dev->spaces_support_status != SS_UNINITIALIZED ) { -- return 0; -+ if (dev->spaces_support_status != SS_UNINITIALIZED) { -+ return 0; - } - // take semaphore - ret = _vendor_specific_sem(dev, 1); - if (ret) { -- mst_err("Failed to lock VSEC semaphore\n"); -- return 1; -+ mst_err("Failed to lock VSEC semaphore\n"); -+ return 1; - } - -- if( _set_addr_space(dev, AS_CR_SPACE) || -+ if (_set_addr_space(dev, AS_CR_SPACE) || - _set_addr_space(dev, AS_ICMD) || -- _set_addr_space(dev, AS_SEMAPHORE) ) { -- mst_err("At least one SPACE is not supported\n"); -- dev->spaces_support_status = SS_NOT_ALL_SPACES_SUPPORTED; -+ _set_addr_space(dev, AS_SEMAPHORE)) { -+ mst_err("At least one SPACE is not supported\n"); -+ dev->spaces_support_status = SS_NOT_ALL_SPACES_SUPPORTED; - } else { -- dev->spaces_support_status = SS_ALL_SPACES_SUPPORTED; -+ dev->spaces_support_status = SS_ALL_SPACES_SUPPORTED; - } - // clear semaphore - _vendor_specific_sem(dev, 0); -@@ -468,20 +486,21 @@ static int get_space_support_status(struct mst_dev_data *dev) - - #define WO_REG_ADDR_DATA 0xbadacce5 - #define DEVID_OFFSET 0xf0014 --int is_wo_gw(struct pci_dev* pcidev, unsigned addr_reg) -+int is_wo_gw(struct pci_dev *pcidev, unsigned int addr_reg) - { - int ret; - unsigned int data = 0; -+ - ret = pci_write_config_dword(pcidev, addr_reg, DEVID_OFFSET); - if (ret) { -- return 0; -+ return 0; - } - ret = pci_read_config_dword(pcidev, addr_reg, &data); - if (ret) { -- return 0; -+ return 0; - } -- if ( data == WO_REG_ADDR_DATA ) { -- return 1; -+ if (data == WO_REG_ADDR_DATA) { -+ return 1; - } - return 0; - } -@@ -493,15 +512,15 @@ static int mst_open(struct inode *inode, struct file *file) - struct mst_file_data *md = NULL; - - md = kmalloc(sizeof(struct mst_connectx_wa), GFP_KERNEL); -- if (!md) { -- return -ERESTARTSYS; -- } -+ if (!md) { -+ return -ERESTARTSYS; -+ } - - memset(md, 0, sizeof(struct mst_connectx_wa)); - - file->private_data = md; - -- return 0; -+ return 0; - } - - -@@ -512,7 +531,7 @@ static int mst_release(struct inode *inode, struct file *file) - struct mst_dev_data *dev = NULL; - struct mst_dev_data *cur = NULL; - unsigned int slot_mask; -- struct mst_connectx_wa *md = file->private_data; -+ struct mst_connectx_wa *md = file->private_data; - - /* - * make sure the device is available since it -@@ -539,7 +558,7 @@ static int mst_release(struct inode *inode, struct file *file) - - /* - * mst_info("CONNECTX_WA: Released slot %u. Current slots: %02x\n", -- * md->connectx_wa_slot_p1 - 1, dev->connectx_wa_slots); -+ * md->connectx_wa_slot_p1 - 1, dev->connectx_wa_slots); - */ - md->connectx_wa_slot_p1 = 0; - mutex_unlock(&dev->lock); -@@ -680,24 +699,24 @@ static int mst_ioctl(struct inode *inode, struct file *file, - goto fin; - } - // best effort : try to get space spport status if we fail assume we got vsec support. -- get_space_support_status(dev); -- paramst.domain = pci_domain_nr(dev->pci_dev->bus); -- paramst.bus = dev->pci_dev->bus->number; -- paramst.slot = PCI_SLOT(dev->pci_dev->devfn); -+ get_space_support_status(dev); -+ paramst.domain = pci_domain_nr(dev->pci_dev->bus); -+ paramst.bus = dev->pci_dev->bus->number; -+ paramst.slot = PCI_SLOT(dev->pci_dev->devfn); - paramst.func = PCI_FUNC(dev->pci_dev->devfn); -- paramst.bar = dev->bar; -- paramst.device = dev->pci_dev->device; -+ paramst.bar = dev->bar; -+ paramst.device = dev->pci_dev->device; - paramst.vendor = dev->pci_dev->vendor; -- paramst.subsystem_device = dev->pci_dev->subsystem_device; -+ paramst.subsystem_device = dev->pci_dev->subsystem_device; - paramst.subsystem_vendor = dev->pci_dev->subsystem_vendor; -- if (dev->vendor_specific_cap && -- (dev->spaces_support_status == SS_ALL_SPACES_SUPPORTED || -- dev->spaces_support_status == SS_UNINITIALIZED) ) { -- // assume supported if SS_UNINITIALIZED (since semaphore is locked) -- paramst.vendor_specific_cap = dev->vendor_specific_cap; -- } else { -- paramst.vendor_specific_cap = 0; -- } -+ if (dev->vendor_specific_cap && -+ (dev->spaces_support_status == SS_ALL_SPACES_SUPPORTED || -+ dev->spaces_support_status == SS_UNINITIALIZED)) { -+ // assume supported if SS_UNINITIALIZED (since semaphore is locked) -+ paramst.vendor_specific_cap = dev->vendor_specific_cap; -+ } else { -+ paramst.vendor_specific_cap = 0; -+ } - if (copy_to_user(user_buf, ¶mst, sizeof(struct mst_params))) { - res = -EFAULT; - goto fin; -@@ -723,19 +742,19 @@ static int mst_ioctl(struct inode *inode, struct file *file, - - switch (dev->type) { - case PCICONF: -- if (get_space_support_status(dev)) { -- res = -EBUSY; -- goto fin; -- } -- -- if ( VSEC_FULLY_SUPPORTED(dev) ) { -- res = read4_vsec(dev, readst.address_space, readst.offset, &out); -- } else { -- res = pciconf_read4_legacy(dev, readst.offset, &out); -- } -- if (res) { -- goto fin; -- } -+ if (get_space_support_status(dev)) { -+ res = -EBUSY; -+ goto fin; -+ } -+ -+ if (VSEC_FULLY_SUPPORTED(dev)) { -+ res = read4_vsec(dev, readst.address_space, readst.offset, &out); -+ } else { -+ res = pciconf_read4_legacy(dev, readst.offset, &out); -+ } -+ if (res) { -+ goto fin; -+ } - break; - - case PCIMEM: -@@ -749,8 +768,8 @@ static int mst_ioctl(struct inode *inode, struct file *file, - out = ioread32(dev->hw_addr + readst.offset); - - /* endianness conversion - we noticed that we need to swap always */ -- be32_to_cpus(&out); -- out = cpu_to_le32(out); -+ be32_to_cpus(&out); -+ out = cpu_to_le32(out); - break; - } - -@@ -779,15 +798,15 @@ static int mst_ioctl(struct inode *inode, struct file *file, - - switch (dev->type) { - case PCICONF: -- if (get_space_support_status(dev)) { -- res = -EBUSY; -- goto fin; -- } -- if ( VSEC_FULLY_SUPPORTED(dev) ) { -- res = write4_vsec(dev, writest.address_space, writest.offset, writest.data); -- } else { -- res = pciconf_write4_legacy(dev, writest.offset, writest.data); -- } -+ if (get_space_support_status(dev)) { -+ res = -EBUSY; -+ goto fin; -+ } -+ if (VSEC_FULLY_SUPPORTED(dev)) { -+ res = write4_vsec(dev, writest.address_space, writest.offset, writest.data); -+ } else { -+ res = pciconf_write4_legacy(dev, writest.offset, writest.data); -+ } - break; - - case PCIMEM: -@@ -799,7 +818,7 @@ static int mst_ioctl(struct inode *inode, struct file *file, - - /* endianness conversion - we noticed that we need to swap always */ - cpu_to_be32s(&(writest.data)); -- writest.data = cpu_to_le32(writest.data); -+ writest.data = cpu_to_le32(writest.data); - - /* write to hardware */ - iowrite32(writest.data, dev->hw_addr + writest.offset); -@@ -912,86 +931,87 @@ static int mst_ioctl(struct inode *inode, struct file *file, - break; - } - -- case PCICONF_READ4_BUFFER: -+ case PCICONF_READ4_BUFFER: - { -- struct mst_read4_buffer_st read4_buf; -- struct mst_read4_buffer_st* rb_udata = (struct mst_read4_buffer_st *)user_buf; -- -- if (!dev->initialized) { -- mst_err("device is not initialized\n"); -- res = -ENODEV; -- goto fin; -- } -- -- if (dev->type != PCICONF) { -- mst_err("wrong type for device\n"); -- res = -EPERM; -- goto fin; -- } -- -- if (get_space_support_status(dev)) { -- res = -EBUSY; -- goto fin; -- } -- -- if (dev->spaces_support_status != SS_ALL_SPACES_SUPPORTED) { -- res = -ENOSYS; -- goto fin; -- } -- -- -- if (copy_from_user(&read4_buf, user_buf, sizeof(read4_buf))) { -- res = -EFAULT; -- goto fin; -- } -- -- res = read4_block_vsec(dev, read4_buf.address_space, read4_buf.offset, read4_buf.size, read4_buf.data); -- if (res != read4_buf.size) { -- goto fin; -- } -- -- res = copy_to_user(rb_udata, &read4_buf, sizeof(read4_buf)) ? -EFAULT : read4_buf.size; -- goto fin; -+ struct mst_read4_buffer_st read4_buf; -+ struct mst_read4_buffer_st *rb_udata = (struct mst_read4_buffer_st *)user_buf; -+ -+ if (!dev->initialized) { -+ mst_err("device is not initialized\n"); -+ res = -ENODEV; -+ goto fin; -+ } -+ -+ if (dev->type != PCICONF) { -+ mst_err("wrong type for device\n"); -+ res = -EPERM; -+ goto fin; -+ } -+ -+ if (get_space_support_status(dev)) { -+ res = -EBUSY; -+ goto fin; -+ } -+ -+ if (dev->spaces_support_status != SS_ALL_SPACES_SUPPORTED) { -+ res = -ENOSYS; -+ goto fin; -+ } -+ -+ -+ if (copy_from_user(&read4_buf, user_buf, sizeof(read4_buf))) { -+ res = -EFAULT; -+ goto fin; -+ } -+ -+ res = read4_block_vsec(dev, read4_buf.address_space, read4_buf.offset, read4_buf.size, read4_buf.data); -+ if (res != read4_buf.size) { -+ goto fin; -+ } -+ -+ res = copy_to_user(rb_udata, &read4_buf, sizeof(read4_buf)) ? -EFAULT : read4_buf.size; -+ goto fin; - } -- case PCICONF_WRITE4_BUFFER: -+ case PCICONF_WRITE4_BUFFER: - { -- struct mst_write4_buffer_st write4_buf; -- struct mst_write4_buffer_st* wb_udata = (struct mst_write4_buffer_st *)user_buf; -+ struct mst_write4_buffer_st write4_buf; -+ struct mst_write4_buffer_st *wb_udata = (struct mst_write4_buffer_st *)user_buf; - -- if (!dev->initialized) { -- mst_err("device is not initialized\n"); -- res = -ENODEV; -- goto fin; -- } -+ if (!dev->initialized) { -+ mst_err("device is not initialized\n"); -+ res = -ENODEV; -+ goto fin; -+ } - -- if (dev->type != PCICONF) { -- mst_err("wrong type for device\n"); -- res = -EPERM; -- goto fin; -- } -+ if (dev->type != PCICONF) { -+ mst_err("wrong type for device\n"); -+ res = -EPERM; -+ goto fin; -+ } - - -- if (get_space_support_status(dev)) { -- res = -EBUSY; -- goto fin; -- } -+ if (get_space_support_status(dev)) { -+ res = -EBUSY; -+ goto fin; -+ } - -- if (dev->spaces_support_status != SS_ALL_SPACES_SUPPORTED) { -- res = -ENOSYS; -- goto fin; -- } -+ if (dev->spaces_support_status != SS_ALL_SPACES_SUPPORTED) { -+ res = -ENOSYS; -+ goto fin; -+ } - - -- if (copy_from_user(&write4_buf, user_buf, sizeof(write4_buf))) { -- res = -EFAULT; -- goto fin; -- } -+ if (copy_from_user(&write4_buf, user_buf, sizeof(write4_buf))) { -+ res = -EFAULT; -+ goto fin; -+ } - -- res = write4_block_vsec(dev, write4_buf.address_space, write4_buf.offset, write4_buf.size, write4_buf.data); -- if (res != write4_buf.size) goto fin; -+ res = write4_block_vsec(dev, write4_buf.address_space, write4_buf.offset, write4_buf.size, write4_buf.data); -+ if (res != write4_buf.size) -+ goto fin; - -- res = copy_to_user(wb_udata, &write4_buf, sizeof(write4_buf)) ? -EFAULT : write4_buf.size; -- goto fin; -+ res = copy_to_user(wb_udata, &write4_buf, sizeof(write4_buf)) ? -EFAULT : write4_buf.size; -+ goto fin; - } - case PCICONF_INIT: { - struct mst_pciconf_init_st initst; -@@ -1020,7 +1040,7 @@ static int mst_ioctl(struct inode *inode, struct file *file, - dev->wo_addr = is_wo_gw(dev->pci_dev, initst.addr_reg); - dev->vendor_specific_cap = pci_find_capability(dev->pci_dev, MLNX_VENDOR_SPECIFIC_CAP_ID); - //mst_info("VSEC SUPP: %#x\n", dev->vendor_specific_cap); -- dev->spaces_support_status = SS_UNINITIALIZED; // init on first op -+ dev->spaces_support_status = SS_UNINITIALIZED; // init on first op - - - dev->initialized = 1; -@@ -1139,7 +1159,7 @@ static int mst_ioctl(struct inode *inode, struct file *file, - - /* - * mst_info("CONNECTX_WA: Took slot %u. Current slots: %02x\n", -- * md->connectx_wa_slot_p1 - 1, dev->connectx_wa_slots); -+ * md->connectx_wa_slot_p1 - 1, dev->connectx_wa_slots); - */ - if (copy_to_user(user_buf, md, sizeof(struct mst_connectx_wa))) { - res = -EFAULT; -@@ -1177,7 +1197,7 @@ static int mst_ioctl(struct inode *inode, struct file *file, - - /* retrieve to user - we noticed that we need to swap always */ - dataout = &((struct mst_vpd_read4_st *)user_buf)->data; -- out = le32_to_cpu(out); -+ out = le32_to_cpu(out); - if (copy_to_user(dataout, &out, sizeof(u32))) { - res = -EFAULT; - goto fin; -@@ -1204,7 +1224,7 @@ static int mst_ioctl(struct inode *inode, struct file *file, - res = -EFAULT; - goto fin; - } -- writest.data = le32_to_cpu(writest.data); -+ writest.data = le32_to_cpu(writest.data); - res = pci_write4_vpd(dev, writest.timeout, writest.offset, writest.data); - if (res) { - goto fin; -@@ -1228,9 +1248,9 @@ fin_err: - } - - #if HAVE_COMPAT_IOCTL --static long compat_ioctl (struct file *f, unsigned int o, unsigned long d) -+static long compat_ioctl(struct file *f, unsigned int o, unsigned long d) - { --#if LINUX_VERSION_CODE < KERNEL_VERSION(3,18,0) -+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 18, 0) - struct inode *n = f->f_dentry->d_inode; - #else - struct inode *n = f->f_path.dentry->d_inode; -@@ -1240,9 +1260,9 @@ static long compat_ioctl (struct file *f, unsigned int o, unsigned long d) - #endif - - #ifdef HAVE_UNLOCKED_IOCTL --static long unlocked_ioctl (struct file *f, unsigned int o, unsigned long d) -+static long unlocked_ioctl(struct file *f, unsigned int o, unsigned long d) - { --#if LINUX_VERSION_CODE < KERNEL_VERSION(3,18,0) -+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 18, 0) - struct inode *n = f->f_dentry->d_inode; - #else - struct inode *n = f->f_path.dentry->d_inode; -@@ -1275,7 +1295,7 @@ static const struct file_operations mst_fops = { - .unlocked_ioctl = unlocked_ioctl, - #endif - --#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35) -+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 35) - .ioctl = mst_ioctl, - #endif - -@@ -1292,7 +1312,7 @@ static struct mst_dev_data *mst_device_create(enum dev_type type, - struct pci_dev *pdev) - { - struct mst_dev_data *dev = NULL; -- char dbdf[20]; -+ char dbdf[20]; - - dev = kzalloc(sizeof(struct mst_dev_data), GFP_KERNEL); - if (!dev) { -@@ -1302,7 +1322,7 @@ static struct mst_dev_data *mst_device_create(enum dev_type type, - return NULL; - } - -- sprintf(dbdf, "%4.4x:%2.2x:%2.2x.%1.1x", pci_domain_nr(pdev->bus), pdev->bus->number, PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn)); -+ sprintf(dbdf, "%4.4x:%2.2x:%2.2x.%1.1x", pci_domain_nr(pdev->bus), pdev->bus->number, PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn)); - switch (type) { - case PCICONF: - dev->addr_reg = MST_CONF_ADDR_REG; -@@ -1312,15 +1332,15 @@ static struct mst_dev_data *mst_device_create(enum dev_type type, - snprintf(dev->name, - MST_NAME_SIZE, - "%s" MST_PCICONF_DEVICE_NAME, -- dbdf); -+ dbdf); - - - break; - case PCIMEM: - dev->addr_reg = 0; /* invalid */ - dev->data_reg = 0; /* invalid */ -- dev->bar = 0; -- dev->hw_addr = ioremap(pci_resource_start(pdev, dev->bar), -+ dev->bar = 0; -+ dev->hw_addr = ioremap(pci_resource_start(pdev, dev->bar), - MST_MEMORY_SIZE); - if (dev->hw_addr <= 0) { - mst_err("could not map device memory, BAR: %x\n", dev->bar); -@@ -1345,19 +1365,20 @@ static struct mst_dev_data *mst_device_create(enum dev_type type, - dev->vpd_cap_addr = pci_find_capability(pdev, PCI_CAP_ID_VPD); - - if (alloc_chrdev_region(&dev->my_dev, 0, 1, dev->name)) { -- mst_err("failed to allocate chrdev_region\n"); -+ mst_err("failed to allocate chrdev_region\n"); - } -- if ( (dev->cl = class_create( THIS_MODULE, dev->name ) ) == NULL ) { -- printk(KERN_ALERT "Class creation failed\n"); -- unregister_chrdev_region(dev->my_dev, 1); -- goto out; -+ dev->cl = class_create(THIS_MODULE, dev->name) -+ if (dev->cl == NULL) { -+ printk(KERN_ALERT "Class creation failed\n"); -+ unregister_chrdev_region(dev->my_dev, 1); -+ goto out; - } - -- if( device_create(dev->cl, NULL, dev->my_dev, NULL, dev->name) == NULL) { -- printk(KERN_ALERT "Device creation failed\n"); -- class_destroy(dev->cl); -- unregister_chrdev_region(dev->my_dev , 1); -- goto out; -+ if (device_create(dev->cl, NULL, dev->my_dev, NULL, dev->name) == NULL) { -+ printk(KERN_ALERT "Device creation failed\n"); -+ class_destroy(dev->cl); -+ unregister_chrdev_region(dev->my_dev, 1); -+ goto out; - } - - dev->major = MAJOR(dev->my_dev); -@@ -1365,13 +1386,13 @@ static struct mst_dev_data *mst_device_create(enum dev_type type, - cdev_add(&dev->mcdev, dev->my_dev, 1); //TODO check if cdev_add fails - - if (type == PCICONF) { -- /* -- * Initialize 5th Gen attributes -- */ -- dev->wo_addr = is_wo_gw(dev->pci_dev, MST_CONF_ADDR_REG); -- dev->vendor_specific_cap = pci_find_capability(dev->pci_dev, MLNX_VENDOR_SPECIFIC_CAP_ID); -- //mst_info("VSEC SUPP: %#x\n", dev->vendor_specific_cap); -- dev->spaces_support_status = SS_UNINITIALIZED; // init on first op -+ /* -+ * Initialize 5th Gen attributes -+ */ -+ dev->wo_addr = is_wo_gw(dev->pci_dev, MST_CONF_ADDR_REG); -+ dev->vendor_specific_cap = pci_find_capability(dev->pci_dev, MLNX_VENDOR_SPECIFIC_CAP_ID); -+ //mst_info("VSEC SUPP: %#x\n", dev->vendor_specific_cap); -+ dev->spaces_support_status = SS_UNINITIALIZED; // init on first op - } - dev->initialized = 1; - list_add_tail(&dev->list, &mst_devices); -@@ -1389,10 +1410,10 @@ static void mst_device_destroy(struct mst_dev_data *dev) - iounmap(dev->hw_addr); - } - -- cdev_del(&dev->mcdev); -- device_destroy(dev->cl, dev->my_dev); -- class_destroy(dev->cl); -- unregister_chrdev_region(dev->my_dev, 1); -+ cdev_del(&dev->mcdev); -+ device_destroy(dev->cl, dev->my_dev); -+ class_destroy(dev->cl); -+ unregister_chrdev_region(dev->my_dev, 1); - list_del(&dev->list); - kfree(dev); - } -@@ -1410,9 +1431,9 @@ static int __init mst_init(void) - mst_info("%s - version %s\n", mst_driver_string, mst_driver_version); - - while ((pdev = pci_get_device(MST_MELLANOX_PCI_VENDOR, PCI_ANY_ID, pdev)) != NULL) { -- if (!pci_match_id(supported_pci_devices, pdev) && !pci_match_id(mst_livefish_pci_table, pdev)) { -- continue; -- } -+ if (!pci_match_id(supported_pci_devices, pdev) && !pci_match_id(mst_livefish_pci_table, pdev)) { -+ continue; -+ } - device_exists = 0; - list_for_each_entry(cur, &mst_devices, list) { - if (cur->pci_dev->bus->number == pdev->bus->number) { -@@ -1430,8 +1451,7 @@ static int __init mst_init(void) - } - - /* found new device */ -- mst_info("found device - " -- "domain=0x%x, bus=0x%x, slot=0x%x, func=0x%x, vendor=0x%x, device=0x%x\n", -+ mst_info("found device - domain=0x%x, bus=0x%x, slot=0x%x, func=0x%x, vendor=0x%x, device=0x%x\n", - pci_domain_nr(pdev->bus), - pdev->bus->number, - PCI_SLOT(pdev->devfn), -diff --git a/kernel/mst_vpd.c b/kernel/mst_vpd.c -index 36ebae1..60efa11 100644 ---- a/kernel/mst_vpd.c -+++ b/kernel/mst_vpd.c -@@ -37,7 +37,7 @@ - - /****************************************************/ - int pci_read4_vpd(struct mst_dev_data *dev, unsigned int timeout, -- unsigned offset, u32 *buf) -+ unsigned int offset, u32 *buf) - { - struct pci_dev *pci_dev = dev->pci_dev; - int vpd_cap = dev->vpd_cap_addr; -@@ -99,7 +99,7 @@ int pci_read4_vpd(struct mst_dev_data *dev, unsigned int timeout, - EXPORT_SYMBOL(pci_read4_vpd); - - int pci_write4_vpd(struct mst_dev_data *dev, unsigned int timeout, -- unsigned offset, u32 buf) -+ unsigned int offset, u32 buf) - { - struct pci_dev *pci_dev = dev->pci_dev; - int vpd_cap = dev->vpd_cap_addr; --- -2.21.0 - diff --git a/fix-return-local-addr.patch b/fix-return-local-addr.patch index 0c29c23..ad17a74 100644 --- a/fix-return-local-addr.patch +++ b/fix-return-local-addr.patch @@ -1,12 +1,12 @@ -diff -urN ./ext_libs2/sqlite/sqlite3.c ./ext_libs/sqlite/sqlite3.c ---- ./ext_libs2/sqlite/sqlite3.c 2021-08-05 09:37:16.410250283 +0800 -+++ ./ext_libs/sqlite/sqlite3.c 2021-08-05 09:36:24.801803014 +0800 -@@ -112969,7 +112969,7 @@ - Expr *pLimit, /* LIMIT value. NULL means not used */ - Expr *pOffset /* OFFSET value. NULL means no offset */ +diff -Nur a/ext_libs/sqlite/sqlite3.c b/ext_libs/sqlite/sqlite3.c +--- a/ext_libs/sqlite/sqlite3.c 2023-10-09 17:31:40.829134845 +0800 ++++ b/ext_libs/sqlite/sqlite3.c 2023-10-09 17:32:35.753931035 +0800 +@@ -134302,7 +134302,7 @@ + u32 selFlags, /* Flag parameters, such as SF_Distinct */ + Expr *pLimit /* LIMIT value. NULL means not used */ ){ -- Select *pNew; -+ static Select *pNew; +- Select *pNew, *pAllocated; ++ static Select *pNew, *pAllocated; Select standin; - sqlite3 *db = pParse->db; - pNew = sqlite3DbMallocRawNN(db, sizeof(*pNew) ); + pAllocated = pNew = sqlite3DbMallocRawNN(pParse->db, sizeof(*pNew) ); + if( pNew==0 ){ diff --git a/mstflint-4.10.0.tar.gz b/mstflint-4.10.0.tar.gz deleted file mode 100644 index cf1ad97..0000000 Binary files a/mstflint-4.10.0.tar.gz and /dev/null differ diff --git a/mstflint-4.25.0-1.tar.gz b/mstflint-4.25.0-1.tar.gz new file mode 100644 index 0000000..0e58df2 Binary files /dev/null and b/mstflint-4.25.0-1.tar.gz differ diff --git a/mstflint.spec b/mstflint.spec index 6ade491..30433ac 100644 --- a/mstflint.spec +++ b/mstflint.spec @@ -1,16 +1,12 @@ Name: mstflint Summary: Firmware Burning and Diagnostics Tools -Version: 4.10.0 -Release: 12 +Version: 4.25.0 +Release: 1 License: GPLv2+ or BSD Url: https://github.com/Mellanox/mstflint -Source: https://github.com/Mellanox/%{name}/releases/download/v4.10.0-2/%{name}-%{version}.tar.gz +Source: https://github.com/Mellanox/%{name}/releases/download/v%{version}-1/%{name}-%{version}-1.tar.gz Patch0000: 0001-Fix-compile-errors.patch Patch0001: fix-return-local-addr.patch -Patch0002: backport-0001-Title-Fix-error-while-burning-mcc-enabled.patch -Patch0003: backport-0001-Title-Fix-errors-found-with-checkpatch-script.patch -Patch0004: 0002-fix-build-failure-due-to-gcc-updated.patch -Patch0005: 0005-Allow-building-on-riscv64.patch BuildRequires: libstdc++-devel zlib-devel rdma-core-devel gcc-c++ gcc BuildRequires: libcurl-devel boost-devel libxml2-devel openssl-devel Obsoletes: openib-mstflint <= 1.4 openib-tvflash <= 0.9.2 tvflash <= 0.9.0 @@ -47,6 +43,9 @@ strip %{buildroot}/%{_libdir}/mstflint/python_tools/*.so %{_mandir}/man1/* %changelog +* Mon Oct 09 2023 wulei - 4.25.0-1 +- Update to 4.25.0 + * Wed Jul 19 2023 lvxiaoqian - 4.10.0-12 - Add riscv patch from v4.17