diff options
Diffstat (limited to 'nvmepatch1.patch')
-rw-r--r-- | nvmepatch1.patch | 113 |
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 |