summarylogtreecommitdiffstats
path: root/nvmepatch1.patch
diff options
context:
space:
mode:
Diffstat (limited to 'nvmepatch1.patch')
-rw-r--r--nvmepatch1.patch113
1 files changed, 113 insertions, 0 deletions
diff --git a/nvmepatch1.patch b/nvmepatch1.patch
new file mode 100644
index 000000000000..cb322fa5ec0c
--- /dev/null
+++ b/nvmepatch1.patch
@@ -0,0 +1,113 @@
+diff --git a/drivers/nvme/host/scsi.c b/drivers/nvme/host/scsi.c
+index e947e298a737..44009105f8c8 100644
+--- a/drivers/nvme/host/scsi.c
++++ b/drivers/nvme/host/scsi.c
+@@ -72,15 +72,6 @@ static int sg_version_num = 30534; /* 2 digits for each component */
+ #define ALL_LUNS_RETURNED 0x02
+ #define ALL_WELL_KNOWN_LUNS_RETURNED 0x01
+ #define RESTRICTED_LUNS_RETURNED 0x00
+-#define NVME_POWER_STATE_START_VALID 0x00
+-#define NVME_POWER_STATE_ACTIVE 0x01
+-#define NVME_POWER_STATE_IDLE 0x02
+-#define NVME_POWER_STATE_STANDBY 0x03
+-#define NVME_POWER_STATE_LU_CONTROL 0x07
+-#define POWER_STATE_0 0
+-#define POWER_STATE_1 1
+-#define POWER_STATE_2 2
+-#define POWER_STATE_3 3
+ #define DOWNLOAD_SAVE_ACTIVATE 0x05
+ #define DOWNLOAD_SAVE_DEFER_ACTIVATE 0x0E
+ #define ACTIVATE_DEFERRED_MICROCODE 0x0F
+@@ -1229,64 +1220,6 @@ static void nvme_trans_fill_read_cap(u8 *response, struct nvme_id_ns *id_ns,
+
+ /* Start Stop Unit Helper Functions */
+
+-static int nvme_trans_power_state(struct nvme_ns *ns, struct sg_io_hdr *hdr,
+- u8 pc, u8 pcmod, u8 start)
+-{
+- int res;
+- int nvme_sc;
+- struct nvme_id_ctrl *id_ctrl;
+- int lowest_pow_st; /* max npss = lowest power consumption */
+- unsigned ps_desired = 0;
+-
+- nvme_sc = nvme_identify_ctrl(ns->ctrl, &id_ctrl);
+- res = nvme_trans_status_code(hdr, nvme_sc);
+- if (res)
+- return res;
+-
+- lowest_pow_st = max(POWER_STATE_0, (int)(id_ctrl->npss - 1));
+- kfree(id_ctrl);
+-
+- switch (pc) {
+- case NVME_POWER_STATE_START_VALID:
+- /* Action unspecified if POWER CONDITION MODIFIER != 0 */
+- if (pcmod == 0 && start == 0x1)
+- ps_desired = POWER_STATE_0;
+- if (pcmod == 0 && start == 0x0)
+- ps_desired = lowest_pow_st;
+- break;
+- case NVME_POWER_STATE_ACTIVE:
+- /* Action unspecified if POWER CONDITION MODIFIER != 0 */
+- if (pcmod == 0)
+- ps_desired = POWER_STATE_0;
+- break;
+- case NVME_POWER_STATE_IDLE:
+- /* Action unspecified if POWER CONDITION MODIFIER != [0,1,2] */
+- if (pcmod == 0x0)
+- ps_desired = POWER_STATE_1;
+- else if (pcmod == 0x1)
+- ps_desired = POWER_STATE_2;
+- else if (pcmod == 0x2)
+- ps_desired = POWER_STATE_3;
+- break;
+- case NVME_POWER_STATE_STANDBY:
+- /* Action unspecified if POWER CONDITION MODIFIER != [0,1] */
+- if (pcmod == 0x0)
+- ps_desired = max(POWER_STATE_0, (lowest_pow_st - 2));
+- else if (pcmod == 0x1)
+- ps_desired = max(POWER_STATE_0, (lowest_pow_st - 1));
+- break;
+- case NVME_POWER_STATE_LU_CONTROL:
+- default:
+- res = nvme_trans_completion(hdr, SAM_STAT_CHECK_CONDITION,
+- ILLEGAL_REQUEST, SCSI_ASC_INVALID_CDB,
+- SCSI_ASCQ_CAUSE_NOT_REPORTABLE);
+- break;
+- }
+- nvme_sc = nvme_set_features(ns->ctrl, NVME_FEAT_POWER_MGMT, ps_desired, 0,
+- NULL);
+- return nvme_trans_status_code(hdr, nvme_sc);
+-}
+-
+ static int nvme_trans_send_activate_fw_cmd(struct nvme_ns *ns, struct sg_io_hdr *hdr,
+ u8 buffer_id)
+ {
+@@ -2235,11 +2168,10 @@ static int nvme_trans_synchronize_cache(struct nvme_ns *ns,
+ static int nvme_trans_start_stop(struct nvme_ns *ns, struct sg_io_hdr *hdr,
+ u8 *cmd)
+ {
+- u8 immed, pcmod, pc, no_flush, start;
++ u8 immed, pcmod, no_flush, start;
+
+ immed = cmd[1] & 0x01;
+ pcmod = cmd[3] & 0x0f;
+- pc = (cmd[4] & 0xf0) >> 4;
+ no_flush = cmd[4] & 0x04;
+ start = cmd[4] & 0x01;
+
+@@ -2254,8 +2186,8 @@ static int nvme_trans_start_stop(struct nvme_ns *ns, struct sg_io_hdr *hdr,
+ if (res)
+ return res;
+ }
+- /* Setup the expected power state transition */
+- return nvme_trans_power_state(ns, hdr, pc, pcmod, start);
++
++ return 0;
+ }
+ }
+
+--
+2.7.4
+
+ \ No newline at end of file