ipr: Issue Configure Cache Parameters command.
Some new adapters require a special Configure Cache Parameters command to enable the adapter write cache, so send this during the adapter initialization if the adapter requires it. Signed-off-by: Gabriel Krisman Bertazi <krisman@linux.vnet.ibm.com> Acked-by: Brian King <brking@linux.vnet.ibm.com> Reviewed-by: Wen Xiong <wenxiong@linux.vnet.ibm.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
1021b3ffad
commit
1a47af26b7
|
@ -7675,6 +7675,63 @@ static int ipr_ioafp_query_ioa_cfg(struct ipr_cmnd *ipr_cmd)
|
|||
return IPR_RC_JOB_RETURN;
|
||||
}
|
||||
|
||||
static int ipr_ioa_service_action_failed(struct ipr_cmnd *ipr_cmd)
|
||||
{
|
||||
u32 ioasc = be32_to_cpu(ipr_cmd->s.ioasa.hdr.ioasc);
|
||||
|
||||
if (ioasc == IPR_IOASC_IR_INVALID_REQ_TYPE_OR_PKT)
|
||||
return IPR_RC_JOB_CONTINUE;
|
||||
|
||||
return ipr_reset_cmd_failed(ipr_cmd);
|
||||
}
|
||||
|
||||
static void ipr_build_ioa_service_action(struct ipr_cmnd *ipr_cmd,
|
||||
__be32 res_handle, u8 sa_code)
|
||||
{
|
||||
struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
|
||||
|
||||
ioarcb->res_handle = res_handle;
|
||||
ioarcb->cmd_pkt.cdb[0] = IPR_IOA_SERVICE_ACTION;
|
||||
ioarcb->cmd_pkt.cdb[1] = sa_code;
|
||||
ioarcb->cmd_pkt.request_type = IPR_RQTYPE_IOACMD;
|
||||
}
|
||||
|
||||
/**
|
||||
* ipr_ioafp_set_caching_parameters - Issue Set Cache parameters service
|
||||
* action
|
||||
*
|
||||
* Return value:
|
||||
* none
|
||||
**/
|
||||
static int ipr_ioafp_set_caching_parameters(struct ipr_cmnd *ipr_cmd)
|
||||
{
|
||||
struct ipr_ioarcb *ioarcb = &ipr_cmd->ioarcb;
|
||||
struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg;
|
||||
struct ipr_inquiry_pageC4 *pageC4 = &ioa_cfg->vpd_cbs->pageC4_data;
|
||||
|
||||
ENTER;
|
||||
|
||||
ipr_cmd->job_step = ipr_ioafp_query_ioa_cfg;
|
||||
|
||||
if (pageC4->cache_cap[0] & IPR_CAP_SYNC_CACHE) {
|
||||
ipr_build_ioa_service_action(ipr_cmd,
|
||||
cpu_to_be32(IPR_IOA_RES_HANDLE),
|
||||
IPR_IOA_SA_CHANGE_CACHE_PARAMS);
|
||||
|
||||
ioarcb->cmd_pkt.cdb[2] = 0x40;
|
||||
|
||||
ipr_cmd->job_step_failed = ipr_ioa_service_action_failed;
|
||||
ipr_do_req(ipr_cmd, ipr_reset_ioa_job, ipr_timeout,
|
||||
IPR_SET_SUP_DEVICE_TIMEOUT);
|
||||
|
||||
LEAVE;
|
||||
return IPR_RC_JOB_RETURN;
|
||||
}
|
||||
|
||||
LEAVE;
|
||||
return IPR_RC_JOB_CONTINUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* ipr_ioafp_inquiry - Send an Inquiry to the adapter.
|
||||
* @ipr_cmd: ipr command struct
|
||||
|
@ -7742,7 +7799,7 @@ static int ipr_ioafp_pageC4_inquiry(struct ipr_cmnd *ipr_cmd)
|
|||
struct ipr_inquiry_pageC4 *pageC4 = &ioa_cfg->vpd_cbs->pageC4_data;
|
||||
|
||||
ENTER;
|
||||
ipr_cmd->job_step = ipr_ioafp_query_ioa_cfg;
|
||||
ipr_cmd->job_step = ipr_ioafp_set_caching_parameters;
|
||||
memset(pageC4, 0, sizeof(*pageC4));
|
||||
|
||||
if (ipr_inquiry_page_supported(page0, 0xC4)) {
|
||||
|
|
|
@ -216,6 +216,10 @@
|
|||
#define IPR_SET_ALL_SUPPORTED_DEVICES 0x80
|
||||
#define IPR_IOA_SHUTDOWN 0xF7
|
||||
#define IPR_WR_BUF_DOWNLOAD_AND_SAVE 0x05
|
||||
#define IPR_IOA_SERVICE_ACTION 0xD2
|
||||
|
||||
/* IOA Service Actions */
|
||||
#define IPR_IOA_SA_CHANGE_CACHE_PARAMS 0x14
|
||||
|
||||
/*
|
||||
* Timeouts
|
||||
|
|
Loading…
Reference in New Issue