static void
 lpfc_setup_bg(struct lpfc_hba *phba, struct Scsi_Host *shost)
 {
+       uint32_t old_mask;
+       uint32_t old_guard;
+
        int pagecnt = 10;
        if (lpfc_prot_mask && lpfc_prot_guard) {
                lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
                                "1478 Registering BlockGuard with the "
                                "SCSI layer\n");
-               scsi_host_set_prot(shost, lpfc_prot_mask);
-               scsi_host_set_guard(shost, lpfc_prot_guard);
+
+               old_mask = lpfc_prot_mask;
+               old_guard = lpfc_prot_guard;
+
+               /* Only allow supported values */
+               lpfc_prot_mask &= (SHOST_DIF_TYPE1_PROTECTION |
+                       SHOST_DIX_TYPE0_PROTECTION |
+                       SHOST_DIX_TYPE1_PROTECTION);
+               lpfc_prot_guard &= (SHOST_DIX_GUARD_IP | SHOST_DIX_GUARD_CRC);
+
+               /* DIF Type 1 protection for profiles AST1/C1 is end to end */
+               if (lpfc_prot_mask == SHOST_DIX_TYPE1_PROTECTION)
+                       lpfc_prot_mask |= SHOST_DIF_TYPE1_PROTECTION;
+
+               if (lpfc_prot_mask && lpfc_prot_guard) {
+                       if ((old_mask != lpfc_prot_mask) ||
+                               (old_guard != lpfc_prot_guard))
+                               lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
+                                       "1475 Registering BlockGuard with the "
+                                       "SCSI layer: mask %d  guard %d\n",
+                                       lpfc_prot_mask, lpfc_prot_guard);
+
+                       scsi_host_set_prot(shost, lpfc_prot_mask);
+                       scsi_host_set_guard(shost, lpfc_prot_guard);
+               } else
+                       lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
+                               "1479 Not Registering BlockGuard with the SCSI "
+                               "layer, Bad protection parameters: %d %d\n",
+                               old_mask, old_guard);
        }
+
        if (!_dump_buf_data) {
                while (pagecnt) {
                        spin_lock_init(&_dump_buf_lock);