]> git.openfabrics.org - ~adrianc/mstflint.git/commitdiff
ported changes from MFT-3.7.0 pt2
authorAdrian Chiris <adrianc@mellanox.com>
Sun, 17 Aug 2014 08:57:47 +0000 (11:57 +0300)
committerAdrian Chiris <adrianc@mellanox.com>
Sun, 17 Aug 2014 08:57:47 +0000 (11:57 +0300)
include/mtcr_ul/mtcr.h
mflash/mflash.c
mflash/mflash_types.h
mlxfwops/lib/fs3_ops.cpp
mlxfwops/lib/fw_ops.cpp
mtcr_ul/mtcr_ib_ofed.c
mtcr_ul/mtcr_ul.c

index c1614817e0ec1fc046b880e4a89169802e13fafb..935ddeda972e9ff2fc216c44e8fcbfb42ad66eba 100644 (file)
@@ -28,6 +28,7 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
+ *
  */
 
 #ifndef MTCR_H
@@ -118,9 +119,9 @@ typedef enum Mdevs_t {
     MDEVS_GAMLA     = 0x01, /*  Each device that actually is a Gamla */
     MDEVS_I2CM      = 0x02, /*  Each device that can work as I2C master */
     MDEVS_MEM       = 0x04, /*  Each device that is a memory driver (vtop) */
-    MDEVS_TAVOR_DDR = 0x08, /*  Each device that maps to Tavor DDR */
-    MDEVS_TAVOR_UAR = 0x10, /*  Each device that maps to Tavor UAR */
-    MDEVS_TAVOR_CR  = 0x20, /*  Each device that maps to Tavor CR */
+    MDEVS_TAVOR_DDR = 0x08, /*  Each device that maps to DDR */
+    MDEVS_TAVOR_UAR = 0x10, /*  Each device that maps to UAR */
+    MDEVS_TAVOR_CR  = 0x20, /*  Each device that maps to CR */
     MDEVS_IF        = 0x40, /*  Standard device  interface */
     MDEVS_REM       = 0x80, /*  Remote devices */
     MDEVS_PPC       = 0x100, /*  PPC devices */
@@ -227,7 +228,7 @@ void mdevices_info_destroy(dev_info* dev_info, int len);
 int mget_mdevs_type(mfile *mf, u_int32_t *mtype);
 
 /*
- * Open Mellanox Software tools (mst) driver. Device type==TAVOR
+ * Open Mellanox Software tools (mst) driver. Device type==INFINIHOST
  * Return valid mfile ptr or 0 on failure
  */
 mfile *mopen(const char *name);
index cf3e2f27b86de05a752619c5225407a744bb8bb3..93c7c5c83ef6624c45c91aa9fcda7a862ed9bf46 100644 (file)
@@ -212,11 +212,9 @@ enum FlashConstant {
     ERASE_SUBSECTOR_RETRIES      = 10000,
 
     FLASH_CMD_CNT  = 5000,      // Number of reads till flash cmd is zeroed
-#ifdef __WIN__
-    GPIO_SEM_TRIES = 1024 ,
-#else
-    GPIO_SEM_TRIES = 4096 ,     // Number of tries to obtain a GPIO sem.
-#endif
+
+    GPIO_SEM_TRIES = 1024 ,     // Number of tries to obtain a GPIO sem.
+
     MAX_WRITE_BUFFER_SIZE = 256 // Max buffer size for buffer write devices
 };
 
@@ -1734,14 +1732,14 @@ int old_flash_lock(mflash* mfl, int lock_state) {
             }
             MREAD4(SEMAP63, &word);
             if (word) {
-                usleep(1);
+                msleep(1);
             }
         } while (word);
     } else {
         MWRITE4(SEMAP63, 0);
         if (cnt > 1) {
             // we are not alone...
-            usleep(1);
+            msleep(1);
         }
         cnt = 0;
     }
@@ -1824,14 +1822,14 @@ int is4_flash_lock(mflash* mfl, int lock_state) {
             MREAD4(HCR_FLASH_CMD , &word);
             lock_status = EXTRACT(word, HBO_LOCK, 1);
             if (lock_status) {
-                usleep(1);
+                msleep(1);
             }
         } while (lock_status);
     } else {
         MWRITE4(HCR_FLASH_CMD, 0);
         if (cnt > 1) {
             // we are not alone
-            usleep(1);
+            msleep(1);
         }
         cnt = 0;
     }
@@ -2305,8 +2303,7 @@ int mf_open_fw(mflash* mfl, flash_params_t* flash_params, int num_of_banks)
         } else if (has_icmd_if(mfl->attr.hw_dev_id)) {
             rc = connectib_flash_init(mfl, flash_params);
         } else if (mfl->attr.hw_dev_id == 0xffff) {
-            printf("-E- Read a corrupted device id (0x%x). Probably HW/PCI access problem\n", mfl->attr.hw_dev_id);
-            rc = MFE_CR_ERROR;
+            rc = MFE_HW_DEVID_ERROR;
         } else {
             rc = MFE_UNSUPPORTED_DEVICE;
         }
@@ -2436,69 +2433,131 @@ int     mf_sw_reset     (mflash* mfl) {
 
 
 const char*   mf_err2str (int err_code) {
-    static const char* mf_err_str[] = {
-    "MFE_OK",
-    "MFE_GENERAL_ERROR",
-    "MFE_BAD_PARAMS",
-    "MFE_CR_ERROR",
-    "MFE_INVAL",
-    "MFE_NOT_IMPLEMENTED",
-    "MFE_UNSUPPORTED_FLASH_TOPOLOGY",
-    "MFE_UNSUPPORTED_FLASH_TYPE",
-    "MFE_CFI_FAILED",
-    "MFE_TIMEOUT",
-    "MFE_ERASE_TIMEOUT",
-    "MFE_WRITE_TIMEOUT",
-    "MFE_ERASE_ERROR",
-    "MFE_WRITE_ERROR",
-    "MFE_BAD_ALIGN",
-    "MFE_SEM_LOCKED",
-    "MFE_VERIFY_ERROR",
-    "MFE_NOMEM",
-    "MFE_OUT_OF_RANGE",
-    "MFE_CMD_SUPPORTED_INBAND_ONLY",
-    "MFE_NO_FLASH_DETECTED",
-    "MFE_HW_ACCESS_DISABLED",
-    "MFE_CMDIF_BAD_STATUS_ERR",
-    "MFE_CMDIF_TIMEOUT_ERR",
-    "MFE_CMDIF_GO_BIT_BUSY",
-    "The given key is incorrect",
-    "MFE_UNKNOWN_REG",
-    "MFE_DIRECT_FW_ACCESS_DISABLED",
-    "MFE_MANAGED_SWITCH_NOT_SUPPORTED",
-    "MFE_NOT_SUPPORTED_OPERATION",
-    "MFE_FLASH_NOT_EXIST",
-    "MFE_MISMATCH_PARAM",
-    "MFE_EXCEED_SUBSECTORS_MAX_NUM",
-    "MFE_EXCEED_SECTORS_MAX_NUM",
-    "MFE_SECTORS_NUM_NOT_POWER_OF_TWO",
-    "MFE_UNKOWN_ACCESS_TYPE",
-    "MFE_UNSUPPORTED_DEVICE",
-    "MFE_OLD_DEVICE_TYPE",
-    "MFE_ICMD_INIT_FAILED",
-    "MFE_ICMD_NOT_SUPPORTED",
-    "Secure host mode is not enabled in this FW.",
-    "MFE_MAD_SEND_ERR",
-    "MFE_ICMD_BAD_PARAM",
-    "MFE_ICMD_INVALID_OPCODE",
-    "MFE_ICMD_INVALID_CMD",
-    "MFE_ICMD_OPERATIONAL_ERROR",
-    "MFE_REG_ACCESS_BAD_METHOD",
-    "MFE_REG_ACCESS_NOT_SUPPORTED",
-    "MFE_REG_ACCESS_DEV_BUSY",
-    "MFE_REG_ACCESS_VER_NOT_SUPP",
-    "MFE_REG_ACCESS_UNKNOWN_TLV",
-    "MFE_REG_ACCESS_REG_NOT_SUPP",
-    "MFE_REG_ACCESS_CLASS_NOT_SUPP",
-    "MFE_REG_ACCESS_METHOD_NOT_SUPP",
-    "MFE_REG_ACCESS_BAD_PARAM",
-    "MFE_REG_ACCESS_RESOURCE_NOT_AVAILABLE",
-    "MFE_REG_ACCESS_MSG_RECPT_ACK",
-    "MFE_REG_ACCESS_UNKNOWN_ERR",
-    "MFE_REG_ACCESS_SIZE_EXCCEEDS_LIMIT",
-    };
-
-    return err_code < (int)ARRSIZE(mf_err_str) ? mf_err_str[err_code] : NULL;
+
+    switch (err_code) {
+    case MFE_OK:
+        return "MFE_OK";
+    case MFE_ERROR :
+        return "MFE_GENERAL_ERROR";
+    case MFE_BAD_PARAMS:
+        return "MFE_BAD_PARAMS";
+    case MFE_CR_ERROR :
+        return "MFE_CR_ERROR";
+    case MFE_HW_DEVID_ERROR:
+        return "Read a corrupted device id (0xffff). Probably HW/PCI access problem.";
+    case MFE_INVAL:
+        return "MFE_INVAL";
+    case MFE_NOT_IMPLEMENTED:
+        return "MFE_NOT_IMPLEMENTED";
+    case MFE_UNSUPPORTED_FLASH_TOPOLOGY:
+        return "MFE_UNSUPPORTED_FLASH_TOPOLOGY";
+    case MFE_UNSUPPORTED_FLASH_TYPE:
+        return "MFE_UNSUPPORTED_FLASH_TYPE";
+    case MFE_CFI_FAILED:
+        return "MFE_CFI_FAILED";
+    case MFE_TIMEOUT:
+        return "MFE_TIMEOUT";
+    case MFE_ERASE_TIMEOUT:
+        return "MFE_ERASE_TIMEOUT";
+    case MFE_WRITE_TIMEOUT:
+        return "MFE_WRITE_TIMEOUT";
+    case MFE_ERASE_ERROR:
+        return "MFE_ERASE_ERROR";
+    case MFE_WRITE_ERROR:
+        return "MFE_WRITE_ERROR";
+    case MFE_BAD_ALIGN:
+        return "MFE_BAD_ALIGN";
+    case MFE_SEM_LOCKED:
+        return "MFE_SEM_LOCKED";
+    case MFE_VERIFY_ERROR:
+        return "MFE_VERIFY_ERROR";
+    case MFE_NOMEM:
+        return "MFE_NOMEM";
+    case MFE_OUT_OF_RANGE:
+        return "MFE_OUT_OF_RANGE";
+    case MFE_CMD_SUPPORTED_INBAND_ONLY:
+        return "MFE_CMD_SUPPORTED_INBAND_ONLY";
+    case MFE_NO_FLASH_DETECTED:
+        return "MFE_NO_FLASH_DETECTED";
+    case MFE_LOCKED_CRSPACE:
+        return "MFE_HW_ACCESS_DISABLED";
+    case MFE_CMDIF_BAD_STATUS_ERR:
+        return "MFE_CMDIF_BAD_STATUS_ERR";
+    case MFE_CMDIF_TIMEOUT_ERR:
+        return "MFE_CMDIF_TIMEOUT_ERR";
+    case MFE_CMDIF_GO_BIT_BUSY:
+        return "MFE_CMDIF_GO_BIT_BUSY";
+    case MFE_MISMATCH_KEY:
+        return "The given key is incorrect";
+    case MFE_UNKNOWN_REG:
+        return "MFE_UNKNOWN_REG";
+    case MFE_DIRECT_FW_ACCESS_DISABLED:
+        return "MFE_DIRECT_FW_ACCESS_DISABLED";
+    case MFE_MANAGED_SWITCH_NOT_SUPPORTED:
+        return "MFE_MANAGED_SWITCH_NOT_SUPPORTED";
+    case MFE_NOT_SUPPORTED_OPERATION:
+        return "MFE_NOT_SUPPORTED_OPERATION";
+    case MFE_FLASH_NOT_EXIST:
+        return "MFE_FLASH_NOT_EXIST";
+    case MFE_MISMATCH_PARAM:
+        return "MFE_MISMATCH_PARAM";
+    case MFE_EXCEED_SUBSECTORS_MAX_NUM:
+        return "MFE_EXCEED_SUBSECTORS_MAX_NUM";
+    case MFE_EXCEED_SECTORS_MAX_NUM:
+        return "MFE_EXCEED_SECTORS_MAX_NUM";
+    case MFE_SECTORS_NUM_NOT_POWER_OF_TWO:
+        return "MFE_SECTORS_NUM_NOT_POWER_OF_TWO";
+    case MFE_UNKOWN_ACCESS_TYPE:
+        return "MFE_UNKOWN_ACCESS_TYPE";
+    case MFE_UNSUPPORTED_DEVICE:
+        return "MFE_UNSUPPORTED_DEVICE";
+    case MFE_OLD_DEVICE_TYPE:
+        return "MFE_OLD_DEVICE_TYPE";
+    case MFE_ICMD_INIT_FAILED:
+        return "MFE_ICMD_INIT_FAILED";
+    case MFE_ICMD_NOT_SUPPORTED:
+        return "MFE_ICMD_NOT_SUPPORTED";
+    case MFE_HW_ACCESS_NOT_SUPP:
+        return "Secure host mode is not enabled in this FW.";
+    case MFE_MAD_SEND_ERR:
+        return "MFE_MAD_SEND_ERR";
+    case MFE_ICMD_BAD_PARAM:
+        return "MFE_ICMD_BAD_PARAM";
+    case MFE_ICMD_INVALID_OPCODE:
+        return "MFE_ICMD_INVALID_OPCODE";
+    case MFE_ICMD_INVALID_CMD:
+        return "MFE_ICMD_INVALID_CMD";
+    case MFE_ICMD_OPERATIONAL_ERROR:
+        return "MFE_ICMD_OPERATIONAL_ERROR";
+    case MFE_REG_ACCESS_BAD_METHOD:
+        return "MFE_REG_ACCESS_BAD_METHOD";
+    case MFE_REG_ACCESS_NOT_SUPPORTED:
+        return "MFE_REG_ACCESS_NOT_SUPPORTED";
+    case MFE_REG_ACCESS_DEV_BUSY:
+        return "MFE_REG_ACCESS_DEV_BUSY";
+    case MFE_REG_ACCESS_VER_NOT_SUPP:
+        return "MFE_REG_ACCESS_VER_NOT_SUPP";
+    case MFE_REG_ACCESS_UNKNOWN_TLV:
+        return "MFE_REG_ACCESS_UNKNOWN_TLV";
+    case MFE_REG_ACCESS_REG_NOT_SUPP:
+        return "MFE_REG_ACCESS_REG_NOT_SUPP";
+    case MFE_REG_ACCESS_CLASS_NOT_SUPP:
+        return "MFE_REG_ACCESS_CLASS_NOT_SUPP";
+    case MFE_REG_ACCESS_METHOD_NOT_SUPP:
+        return "MFE_REG_ACCESS_METHOD_NOT_SUPP";
+    case MFE_REG_ACCESS_BAD_PARAM:
+        return "MFE_REG_ACCESS_BAD_PARAM";
+    case MFE_REG_ACCESS_RES_NOT_AVLBL:
+        return "MFE_REG_ACCESS_RESOURCE_NOT_AVAILABLE";
+    case MFE_REG_ACCESS_MSG_RECPT_ACK:
+        return "MFE_REG_ACCESS_MSG_RECPT_ACK";
+    case MFE_REG_ACCESS_UNKNOWN_ERR:
+        return "MFE_REG_ACCESS_UNKNOWN_ERR";
+    case MFE_REG_ACCESS_SIZE_EXCCEEDS_LIMIT:
+        return "MFE_REG_ACCESS_SIZE_EXCCEEDS_LIMIT";
+    default:
+        return "Unknown error";
+    }
 }
 
 int     mf_set_opt     (mflash* mfl, MfOpt opt, int  val) {
index 1bc0ec5608e5e1ee16d51897cfa4e20cd8219366..2250c446e8bd759f911cb3c05449f6c275cfd66c 100644 (file)
@@ -28,6 +28,7 @@
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
+ *
  */
 
 #ifndef MFLASH_TYPES_H
@@ -38,6 +39,7 @@ typedef enum MfError {
     MFE_ERROR,
     MFE_BAD_PARAMS,
     MFE_CR_ERROR,
+    MFE_HW_DEVID_ERROR,
     MFE_INVAL,
     MFE_NOT_IMPLEMENTED,
     MFE_UNSUPPORTED_FLASH_TOPOLOGY,
index 014c00b1d935cd71119bfc5542b4e7ada99fee2f..6c12c38aa9dd05aff01dd200b919eac878adbcba 100644 (file)
@@ -178,6 +178,10 @@ bool Fs3Operations::GetImageInfo(u_int8_t *buff)
     _fwImgInfo.ext_info.fw_rel_date[1] = (u_int16_t)image_info.FW_VERSION.Month;
     _fwImgInfo.ext_info.fw_rel_date[2] = (u_int16_t)image_info.FW_VERSION.Year;
 
+    // assuming number of supported_hw_id < MAX_NUM_SUPP_HW_IDS
+    memcpy(_fwImgInfo.supportedHwId, image_info.supported_hw_id, sizeof(image_info.supported_hw_id));
+    _fwImgInfo.supportedHwIdNum = (sizeof(image_info.supported_hw_id))/sizeof(image_info.supported_hw_id[0]);
+
     strcpy(_fs3ImgInfo.ext_info.image_vsd, image_info.vsd);
     strcpy(_fwImgInfo.ext_info.psid, image_info.psid);
     strcpy(_fwImgInfo.ext_info.product_ver, image_info.prod_ver);
index a342c30bd055a6e96d37fe7d19e76ae6e0c15118..bb5795896d2e8a2714d84159126509910b57cc71 100644 (file)
@@ -734,7 +734,7 @@ const FwOperations::HwDev2Str FwOperations::hwDev2Str[] = {
         {"ConnectX-2",        CX_HW_ID,         0xB0},
         {"ConnectX-3 A0",     CX3_HW_ID,        0x00},
         {"ConnectX-3 A1",     CX3_HW_ID,        0x01},
-        {"ConnectX-3Pro",     CX3_PRO_HW_ID,    0x0},
+        {"ConnectX-3Pro",     CX3_PRO_HW_ID,    0x00},
         {"ConnectX-4",        CX4_HW_ID,       0x00},
         {"SwitchX A0",        SWITCHX_HW_ID,    0x00},
         {"SwitchX A1",        SWITCHX_HW_ID,    0x01},
index 3fb30c16d639b452c4cd2b5749f4468a6c50c21b..b8c93a4dcfaf42594b8256aeeaefb6cd5dd4ff7c 100644 (file)
  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
+ *
  */
 
-/********************************************************
-**
-*   ibvsmad.c
-*
-*   the ibvsmad library.
-*   this library provides vendor specific mad capabilities.
-*
-*   mread64, mwrite64 - IS3 I2C bus access MAD - ExtPortAccess -> I2C compliant port #1
-*   mread4 , mwrite4  - IS3 CR-Space access MAD - ConfigSpaceAccess
-*
-*
-*   author: yoniy@mellanox.co.il , Apr. 16th 2007
-*/
-
-
-
 #if HAVE_CONFIG_H
 #  include <config.h>
 #endif
@@ -733,14 +718,15 @@ end:
 int
 mib_close(mfile *mf)
 {
+    if (mf->ctx) {
     // TODO: free the ddl handlers
-       ibvs_mad* h = (ibvs_mad*)(mf->ctx);
-       h->mad_rpc_close_port(h->srcport);
-
+        ibvs_mad* h = (ibvs_mad*)(mf->ctx);
+        h->mad_rpc_close_port(h->srcport);
 #ifndef IBVSMAD_DLOPEN
-    free_dll_handle(mf);
+        free_dll_handle(mf);
 #endif
-    free(mf->ctx);
+        free(mf->ctx);
+    }
     return 0;
 }
 
index a81c69f61fe9f8c9a94519457f7a5b16a606d680..bc6a6ef26adc6c2516905799c4cebee1823c9eec 100644 (file)
@@ -1586,9 +1586,9 @@ static int supports_icmd(mfile* mf) {
        u_int32_t dev_id;
        mread4(mf,HW_ID_ADDR, &dev_id); // cr might be locked and retured 0xbad0cafe but we dont care we search for device that supports icmd
        switch (dev_id & 0xffff) { // that the hw device id
-               case CIB_HW_ID : //golan
-               case CX4_HW_ID : // shomron
-               case SW_IB_HW_ID : // pelican
+               case CIB_HW_ID :
+               case CX4_HW_ID :
+               case SW_IB_HW_ID :
                        return 1;
                default:
                        break;