#define MSG_INTERNAL_ERR "PKG install error : Internal error"
 #define MSG_NO_PKG_UPDATE_AREA_ERR "PKG update area not created in nvram"
 #define MSG_NO_SPACE_ERR "PKG insufficient update area in nvram"
+#define MSG_RESIZE_UPDATE_ERR "Resize UPDATE entry error"
 #define MSG_ANTI_ROLLBACK_ERR "HWRM_NVM_INSTALL_UPDATE failure due to Anti-rollback detected"
 #define MSG_GENERIC_FAILURE_ERR "HWRM_NVM_INSTALL_UPDATE failure"
 
 #define BNXT_NVM_MORE_FLAG     (cpu_to_le16(NVM_MODIFY_REQ_FLAGS_BATCH_MODE))
 #define BNXT_NVM_LAST_FLAG     (cpu_to_le16(NVM_MODIFY_REQ_FLAGS_BATCH_LAST))
 
+static int bnxt_resize_update_entry(struct net_device *dev, size_t fw_size,
+                                   struct netlink_ext_ack *extack)
+{
+       u32 item_len;
+       int rc;
+
+       rc = bnxt_find_nvram_item(dev, BNX_DIR_TYPE_UPDATE,
+                                 BNX_DIR_ORDINAL_FIRST, BNX_DIR_EXT_NONE, NULL,
+                                 &item_len, NULL);
+       if (rc) {
+               BNXT_NVM_ERR_MSG(dev, extack, MSG_NO_PKG_UPDATE_AREA_ERR);
+               return rc;
+       }
+
+       if (fw_size > item_len) {
+               rc = bnxt_flash_nvram(dev, BNX_DIR_TYPE_UPDATE,
+                                     BNX_DIR_ORDINAL_FIRST, 0, 1,
+                                     round_up(fw_size, 4096), NULL, 0);
+               if (rc) {
+                       BNXT_NVM_ERR_MSG(dev, extack, MSG_RESIZE_UPDATE_ERR);
+                       return rc;
+               }
+       }
+       return 0;
+}
+
 int bnxt_flash_package_from_fw_obj(struct net_device *dev, const struct firmware *fw,
                                   u32 install_type, struct netlink_ext_ack *extack)
 {
        u16 index;
        int rc;
 
+       /* resize before flashing larger image than available space */
+       rc = bnxt_resize_update_entry(dev, fw->size, extack);
+       if (rc)
+               return rc;
+
        bnxt_hwrm_fw_set_time(bp);
 
        rc = hwrm_req_init(bp, modify, HWRM_NVM_MODIFY);