Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[platform/kernel/linux-starfive.git] / drivers / scsi / lpfc / lpfc_attr.c
index fa84152..9b982cc 100644 (file)
@@ -2838,7 +2838,6 @@ static DEVICE_ATTR(lpfc_xlane_supported, S_IRUGO, lpfc_oas_supported_show,
                   NULL);
 static DEVICE_ATTR(cmf_info, 0444, lpfc_cmf_info_show, NULL);
 
-static char *lpfc_soft_wwn_key = "C99G71SL8032A";
 #define WWN_SZ 8
 /**
  * lpfc_wwn_set - Convert string to the 8 byte WWN value.
@@ -2882,229 +2881,7 @@ lpfc_wwn_set(const char *buf, size_t cnt, char wwn[])
        }
        return 0;
 }
-/**
- * lpfc_soft_wwn_enable_store - Allows setting of the wwn if the key is valid
- * @dev: class device that is converted into a Scsi_host.
- * @attr: device attribute, not used.
- * @buf: containing the string lpfc_soft_wwn_key.
- * @count: must be size of lpfc_soft_wwn_key.
- *
- * Returns:
- * -EINVAL if the buffer does not contain lpfc_soft_wwn_key
- * length of buf indicates success
- **/
-static ssize_t
-lpfc_soft_wwn_enable_store(struct device *dev, struct device_attribute *attr,
-                          const char *buf, size_t count)
-{
-       struct Scsi_Host  *shost = class_to_shost(dev);
-       struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;
-       struct lpfc_hba   *phba = vport->phba;
-       unsigned int cnt = count;
-       uint8_t vvvl = vport->fc_sparam.cmn.valid_vendor_ver_level;
-       u32 *fawwpn_key = (uint32_t *)&vport->fc_sparam.un.vendorVersion[0];
-
-       /*
-        * We're doing a simple sanity check for soft_wwpn setting.
-        * We require that the user write a specific key to enable
-        * the soft_wwpn attribute to be settable. Once the attribute
-        * is written, the enable key resets. If further updates are
-        * desired, the key must be written again to re-enable the
-        * attribute.
-        *
-        * The "key" is not secret - it is a hardcoded string shown
-        * here. The intent is to protect against the random user or
-        * application that is just writing attributes.
-        */
-       if (vvvl == 1 && cpu_to_be32(*fawwpn_key) == FAPWWN_KEY_VENDOR) {
-               lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
-                               "0051 lpfc soft wwpn can not be enabled: "
-                               "fawwpn is enabled\n");
-               return -EINVAL;
-       }
-
-       /* count may include a LF at end of string */
-       if (buf[cnt-1] == '\n')
-               cnt--;
-
-       if ((cnt != strlen(lpfc_soft_wwn_key)) ||
-           (strncmp(buf, lpfc_soft_wwn_key, strlen(lpfc_soft_wwn_key)) != 0))
-               return -EINVAL;
-
-       phba->soft_wwn_enable = 1;
-
-       dev_printk(KERN_WARNING, &phba->pcidev->dev,
-                  "lpfc%d: soft_wwpn assignment has been enabled.\n",
-                  phba->brd_no);
-       dev_printk(KERN_WARNING, &phba->pcidev->dev,
-                  "  The soft_wwpn feature is not supported by Broadcom.");
-
-       return count;
-}
-static DEVICE_ATTR_WO(lpfc_soft_wwn_enable);
-
-/**
- * lpfc_soft_wwpn_show - Return the cfg soft ww port name of the adapter
- * @dev: class device that is converted into a Scsi_host.
- * @attr: device attribute, not used.
- * @buf: on return contains the wwpn in hexadecimal.
- *
- * Returns: size of formatted string.
- **/
-static ssize_t
-lpfc_soft_wwpn_show(struct device *dev, struct device_attribute *attr,
-                   char *buf)
-{
-       struct Scsi_Host  *shost = class_to_shost(dev);
-       struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;
-       struct lpfc_hba   *phba = vport->phba;
-
-       return scnprintf(buf, PAGE_SIZE, "0x%llx\n",
-                       (unsigned long long)phba->cfg_soft_wwpn);
-}
-
-/**
- * lpfc_soft_wwpn_store - Set the ww port name of the adapter
- * @dev: class device that is converted into a Scsi_host.
- * @attr: device attribute, not used.
- * @buf: contains the wwpn in hexadecimal.
- * @count: number of wwpn bytes in buf
- *
- * Returns:
- * -EACCES hba reset not enabled, adapter over temp
- * -EINVAL soft wwn not enabled, count is invalid, invalid wwpn byte invalid
- * -EIO error taking adapter offline or online
- * value of count on success
- **/
-static ssize_t
-lpfc_soft_wwpn_store(struct device *dev, struct device_attribute *attr,
-                    const char *buf, size_t count)
-{
-       struct Scsi_Host  *shost = class_to_shost(dev);
-       struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;
-       struct lpfc_hba   *phba = vport->phba;
-       struct completion online_compl;
-       int stat1 = 0, stat2 = 0;
-       unsigned int cnt = count;
-       u8 wwpn[WWN_SZ];
-       int rc;
-
-       if (!phba->cfg_enable_hba_reset)
-               return -EACCES;
-       spin_lock_irq(&phba->hbalock);
-       if (phba->over_temp_state == HBA_OVER_TEMP) {
-               spin_unlock_irq(&phba->hbalock);
-               return -EACCES;
-       }
-       spin_unlock_irq(&phba->hbalock);
-       /* count may include a LF at end of string */
-       if (buf[cnt-1] == '\n')
-               cnt--;
-
-       if (!phba->soft_wwn_enable)
-               return -EINVAL;
-
-       /* lock setting wwpn, wwnn down */
-       phba->soft_wwn_enable = 0;
-
-       rc = lpfc_wwn_set(buf, cnt, wwpn);
-       if (rc) {
-               /* not able to set wwpn, unlock it */
-               phba->soft_wwn_enable = 1;
-               return rc;
-       }
-
-       phba->cfg_soft_wwpn = wwn_to_u64(wwpn);
-       fc_host_port_name(shost) = phba->cfg_soft_wwpn;
-       if (phba->cfg_soft_wwnn)
-               fc_host_node_name(shost) = phba->cfg_soft_wwnn;
-
-       dev_printk(KERN_NOTICE, &phba->pcidev->dev,
-                  "lpfc%d: Reinitializing to use soft_wwpn\n", phba->brd_no);
-
-       stat1 = lpfc_do_offline(phba, LPFC_EVT_OFFLINE);
-       if (stat1)
-               lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
-                               "0463 lpfc_soft_wwpn attribute set failed to "
-                               "reinit adapter - %d\n", stat1);
-       init_completion(&online_compl);
-       rc = lpfc_workq_post_event(phba, &stat2, &online_compl,
-                                  LPFC_EVT_ONLINE);
-       if (rc == 0)
-               return -ENOMEM;
 
-       wait_for_completion(&online_compl);
-       if (stat2)
-               lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
-                               "0464 lpfc_soft_wwpn attribute set failed to "
-                               "reinit adapter - %d\n", stat2);
-       return (stat1 || stat2) ? -EIO : count;
-}
-static DEVICE_ATTR_RW(lpfc_soft_wwpn);
-
-/**
- * lpfc_soft_wwnn_show - Return the cfg soft ww node name for the adapter
- * @dev: class device that is converted into a Scsi_host.
- * @attr: device attribute, not used.
- * @buf: on return contains the wwnn in hexadecimal.
- *
- * Returns: size of formatted string.
- **/
-static ssize_t
-lpfc_soft_wwnn_show(struct device *dev, struct device_attribute *attr,
-                   char *buf)
-{
-       struct Scsi_Host *shost = class_to_shost(dev);
-       struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
-       return scnprintf(buf, PAGE_SIZE, "0x%llx\n",
-                       (unsigned long long)phba->cfg_soft_wwnn);
-}
-
-/**
- * lpfc_soft_wwnn_store - sets the ww node name of the adapter
- * @dev: class device that is converted into a Scsi_host.
- * @attr: device attribute, not used.
- * @buf: contains the ww node name in hexadecimal.
- * @count: number of wwnn bytes in buf.
- *
- * Returns:
- * -EINVAL soft wwn not enabled, count is invalid, invalid wwnn byte invalid
- * value of count on success
- **/
-static ssize_t
-lpfc_soft_wwnn_store(struct device *dev, struct device_attribute *attr,
-                    const char *buf, size_t count)
-{
-       struct Scsi_Host *shost = class_to_shost(dev);
-       struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba;
-       unsigned int cnt = count;
-       u8 wwnn[WWN_SZ];
-       int rc;
-
-       /* count may include a LF at end of string */
-       if (buf[cnt-1] == '\n')
-               cnt--;
-
-       if (!phba->soft_wwn_enable)
-               return -EINVAL;
-
-       rc = lpfc_wwn_set(buf, cnt, wwnn);
-       if (rc) {
-               /* Allow wwnn to be set many times, as long as the enable
-                * is set. However, once the wwpn is set, everything locks.
-                */
-               return rc;
-       }
-
-       phba->cfg_soft_wwnn = wwn_to_u64(wwnn);
-
-       dev_printk(KERN_NOTICE, &phba->pcidev->dev,
-                  "lpfc%d: soft_wwnn set. Value will take effect upon "
-                  "setting of the soft_wwpn\n", phba->brd_no);
-
-       return count;
-}
-static DEVICE_ATTR_RW(lpfc_soft_wwnn);
 
 /**
  * lpfc_oas_tgt_show - Return wwpn of target whose luns maybe enabled for
@@ -6498,9 +6275,6 @@ static struct attribute *lpfc_hba_attrs[] = {
        &dev_attr_lpfc_nvme_enable_fb.attr,
        &dev_attr_lpfc_nvmet_fb_size.attr,
        &dev_attr_lpfc_enable_bg.attr,
-       &dev_attr_lpfc_soft_wwnn.attr,
-       &dev_attr_lpfc_soft_wwpn.attr,
-       &dev_attr_lpfc_soft_wwn_enable.attr,
        &dev_attr_lpfc_enable_hba_reset.attr,
        &dev_attr_lpfc_enable_hba_heartbeat.attr,
        &dev_attr_lpfc_EnableXLane.attr,
@@ -7730,8 +7504,6 @@ lpfc_get_cfgparam(struct lpfc_hba *phba)
            phba->sli_rev == LPFC_SLI_REV4)
                phba->cfg_irq_chann = phba->cfg_hdw_queue;
 
-       phba->cfg_soft_wwnn = 0L;
-       phba->cfg_soft_wwpn = 0L;
        lpfc_sg_seg_cnt_init(phba, lpfc_sg_seg_cnt);
        lpfc_hba_queue_depth_init(phba, lpfc_hba_queue_depth);
        lpfc_aer_support_init(phba, lpfc_aer_support);