Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 43d4019b authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "scsi: ufs: don't free irq in suspend"

parents a484627e 2d1537be
Loading
Loading
Loading
Loading
+1 −6
Original line number Diff line number Diff line
@@ -821,15 +821,10 @@ static int scsi_add_lun(struct scsi_device *sdev, unsigned char *inq_result,
		 * well-known logical units. Force well-known type
		 * to enumerate them correctly.
		 */
		if (scsi_is_wlun(sdev->lun) && sdev->type != TYPE_WLUN) {
			sdev_printk(KERN_WARNING, sdev,
				"%s: correcting incorrect peripheral device type 0x%x for W-LUN 0x%16xhN\n",
				__func__, sdev->type, (unsigned int)sdev->lun);
		if (scsi_is_wlun(sdev->lun) && sdev->type != TYPE_WLUN)
			sdev->type = TYPE_WLUN;
	}

	}

	if (sdev->type == TYPE_RBC || sdev->type == TYPE_ROM) {
		/* RBC and MMC devices can return SCSI-3 compliance and yet
		 * still not support REPORT LUNS, so make them act as
+0 −29
Original line number Diff line number Diff line
@@ -2278,11 +2278,6 @@ got_data:
				sizeof(cap_str_10));

		if (sdkp->first_scan || old_capacity != sdkp->capacity) {
			sd_printk(KERN_NOTICE, sdkp,
				  "%llu %d-byte logical blocks: (%s/%s)\n",
				  (unsigned long long)sdkp->capacity,
				  sector_size, cap_str_10, cap_str_2);

			if (sdkp->physical_block_size != sector_size)
				sd_printk(KERN_NOTICE, sdkp,
					  "%u-byte physical blocks\n",
@@ -2330,7 +2325,6 @@ sd_read_write_protect_flag(struct scsi_disk *sdkp, unsigned char *buffer)
	int res;
	struct scsi_device *sdp = sdkp->device;
	struct scsi_mode_data data;
	int old_wp = sdkp->write_prot;

	set_disk_ro(sdkp->disk, 0);
	if (sdp->skip_ms_page_3f) {
@@ -2371,13 +2365,6 @@ sd_read_write_protect_flag(struct scsi_disk *sdkp, unsigned char *buffer)
	} else {
		sdkp->write_prot = ((data.device_specific & 0x80) != 0);
		set_disk_ro(sdkp->disk, sdkp->write_prot);
		if (sdkp->first_scan || old_wp != sdkp->write_prot) {
			sd_printk(KERN_NOTICE, sdkp, "Write Protect is %s\n",
				  sdkp->write_prot ? "on" : "off");
			sd_printk(KERN_DEBUG, sdkp,
				  "Mode Sense: %02x %02x %02x %02x\n",
				  buffer[0], buffer[1], buffer[2], buffer[3]);
		}
	}
}

@@ -2397,10 +2384,6 @@ sd_read_cache_type(struct scsi_disk *sdkp, unsigned char *buffer)
	int first_len;
	struct scsi_mode_data data;
	struct scsi_sense_hdr sshdr;
	int old_wce = sdkp->WCE;
	int old_rcd = sdkp->RCD;
	int old_dpofua = sdkp->DPOFUA;


	if (sdkp->cache_override)
		return;
@@ -2525,15 +2508,6 @@ sd_read_cache_type(struct scsi_disk *sdkp, unsigned char *buffer)
		if (sdkp->WCE && sdkp->write_prot)
			sdkp->WCE = 0;

		if (sdkp->first_scan || old_wce != sdkp->WCE ||
		    old_rcd != sdkp->RCD || old_dpofua != sdkp->DPOFUA)
			sd_printk(KERN_NOTICE, sdkp,
				  "Write cache: %s, read cache: %s, %s\n",
				  sdkp->WCE ? "enabled" : "disabled",
				  sdkp->RCD ? "disabled" : "enabled",
				  sdkp->DPOFUA ? "supports DPO and FUA"
				  : "doesn't support DPO or FUA");

		return;
	}

@@ -2971,8 +2945,6 @@ static void sd_probe_async(void *data, async_cookie_t cookie)

	sd_revalidate_disk(gd);

	sd_printk(KERN_NOTICE, sdkp, "Attached SCSI %sdisk\n",
		  sdp->removable ? "removable " : "");
	scsi_autopm_put_device(sdp);
	put_device(&sdkp->dev);
}
@@ -3221,7 +3193,6 @@ static int sd_suspend_common(struct device *dev, bool ignore_stop_errors)
		return 0;	/* this can happen */

	if (sdkp->WCE && sdkp->media_present) {
		sd_printk(KERN_DEBUG, sdkp, "Synchronizing SCSI cache\n");
		ret = sd_sync_cache(sdkp);
		if (ret) {
			/* ignore OFFLINE device */
+0 −3
Original line number Diff line number Diff line
@@ -1550,9 +1550,6 @@ sg_add_device(struct device *cl_dev, struct class_interface *cl_intf)
	} else
		pr_warn("%s: sg_sys Invalid\n", __func__);

	sdev_printk(KERN_NOTICE, scsidp, "Attached scsi generic sg%d "
		    "type %d\n", sdp->index, scsidp->type);

	dev_set_drvdata(cl_dev, sdp);

	return 0;
+4 −51
Original line number Diff line number Diff line
@@ -377,26 +377,18 @@ static inline bool ufshcd_valid_tag(struct ufs_hba *hba, int tag)
	return tag >= 0 && tag < hba->nutrs;
}

static inline int ufshcd_enable_irq(struct ufs_hba *hba)
static inline void ufshcd_enable_irq(struct ufs_hba *hba)
{
	int ret = 0;

	if (!hba->is_irq_enabled) {
		ret = request_irq(hba->irq, ufshcd_intr, IRQF_SHARED, UFSHCD,
				hba);
		if (ret)
			dev_err(hba->dev, "%s: request_irq failed, ret=%d\n",
				__func__, ret);
		enable_irq(hba->irq);
		hba->is_irq_enabled = true;
	}

	return ret;
}

static inline void ufshcd_disable_irq(struct ufs_hba *hba)
{
	if (hba->is_irq_enabled) {
		free_irq(hba->irq, hba);
		disable_irq(hba->irq);
		hba->is_irq_enabled = false;
	}
}
@@ -6264,33 +6256,6 @@ out:
	return ret;
}

/**
 * ufshcd_get_device_ref_clk - get the device bRefClkFreq
 * @hba: per-adapter instance
 *
 * Returns zero on success, non-zero error value on failure.
 */
static int ufshcd_get_device_ref_clk(struct ufs_hba *hba)
{
	int err = 0;
	int val = -1;
	char *arr[] = {"19.2 MHz", "26 MHz", "38.4 MHz", "52 MHz"};

	err = ufshcd_query_attr_retry(hba, UPIU_QUERY_OPCODE_READ_ATTR,
			QUERY_ATTR_IDN_REF_CLK_FREQ, 0, 0, &val);

	if (err || val >= ARRAY_SIZE(arr) || val < 0) {
		dev_err(hba->dev, "%s: err = %d, val = %d",
			 __func__, err, val);
		goto out;
	}

	dev_info(hba->dev, "%s: bRefClkFreq = %s", __func__, arr[val]);

out:
	return err;
}

/**
 * ufshcd_tune_pa_tactivate - Tunes PA_TActivate of local UniPro
 * @hba: per-adapter instance
@@ -6464,16 +6429,6 @@ static int ufshcd_probe_hba(struct ufs_hba *hba)
	if (ret)
		goto out;

	if (!hba->is_init_prefetch) {
		ret = ufshcd_get_device_ref_clk(hba);
		if (ret) {
			dev_err(hba->dev,
				"%s: Failed reading bRefClkFreq attribute\n",
				__func__);
			ret = 0;
		}
	}

	/* UFS device is also active now */
	ufshcd_set_ufs_dev_active(hba);
	ufshcd_force_reset_auto_bkops(hba);
@@ -7718,9 +7673,7 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
		goto out;

	/* enable the host irq as host controller would be active soon */
	ret = ufshcd_enable_irq(hba);
	if (ret)
		goto disable_irq_and_vops_clks;
	ufshcd_enable_irq(hba);

	ret = ufshcd_vreg_set_hpm(hba);
	if (ret)