From patchwork Mon Oct 17 10:24:07 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sumit Saxena X-Patchwork-Id: 9378909 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 900CC607D4 for ; Mon, 17 Oct 2016 10:32:06 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 80D6328D53 for ; Mon, 17 Oct 2016 10:32:06 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 75B5728D9B; Mon, 17 Oct 2016 10:32:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 08AE528D57 for ; Mon, 17 Oct 2016 10:32:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932711AbcJQKcF (ORCPT ); Mon, 17 Oct 2016 06:32:05 -0400 Received: from mail-pf0-f182.google.com ([209.85.192.182]:34238 "EHLO mail-pf0-f182.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932551AbcJQKcD (ORCPT ); Mon, 17 Oct 2016 06:32:03 -0400 Received: by mail-pf0-f182.google.com with SMTP id r16so54516357pfg.1 for ; Mon, 17 Oct 2016 03:32:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=k9OB7Pc49PM2ODpNL1/oJb8cwcBACVuEW0PoBUb4wgw=; b=XQl4EhmbcA2sh66kGRt83eu6OrJLxaNirlvhmOHwHMoT1SsEL93e/107TWdVJilxfR cm9u065iy1jpfJGi7gX1UdNPDyHuhfFQpdm3enbTnP/Bot3G/FWV5NtkWfcQW1wN0up1 /xu5qQ1e9+YV9/Jl31W/OhgZWyZrmU5dV+6I4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=k9OB7Pc49PM2ODpNL1/oJb8cwcBACVuEW0PoBUb4wgw=; b=YY65BpCqsIs+2u0cGvoLKvqvQAux4xkCI6unoiPRG9UaD1ji3+Bz6MSukDy3MxNH5j 5GdrHz9i5QubnvvbcFg1PMER+gXu+ZFMNZJHGPKwycQUADFnM3RPtjFHPQYYsvCFzWwl LrOT6ZfEvogjWAXufeqrrU/jtbmKwUWfuTnNYI3IHBh/HV0neMGqlmzqzZX8XAdgTiaM Xqtl+CVbbtCJsP+6/nKMsF1DzVZtpRLkTGhbfs681VR1QcpS7knhvWT6Up2IMDEij9rd WuBDj6DGTvOi9gWgBDNMi7qbGFcDW3feTRqnBsA6uTsBl9Ouce+/ZqAde/6Va3FMZIGg 8kvg== X-Gm-Message-State: AA6/9RmdYaqg93auQ9qfzVFfl4wTLI6PtnKGHzb2EDWZ+oBG1d3FB2xeVtZiQAB9ub5r+W4o X-Received: by 10.98.208.3 with SMTP id p3mr36666265pfg.125.1476699872249; Mon, 17 Oct 2016 03:24:32 -0700 (PDT) Received: from dhcp-135-24-192-142.localdomain ([192.19.239.250]) by smtp.gmail.com with ESMTPSA id dj3sm36203777pad.1.2016.10.17.03.24.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 17 Oct 2016 03:24:31 -0700 (PDT) From: Sumit Saxena To: linux-scsi@vger.kernel.org Cc: martin.petersen@oracle.com, thenzl@redhat.com, jejb@linux.vnet.ibm.com, kashyap.desai@broadcom.com, Sumit Saxena Subject: [PATCH 4/7] megaraid_sas: Send SYNCHRONIZE_CACHE command to firmware Date: Mon, 17 Oct 2016 03:24:07 -0700 Message-Id: <1476699850-25083-5-git-send-email-sumit.saxena@broadcom.com> X-Mailer: git-send-email 2.4.3 In-Reply-To: <1476699850-25083-1-git-send-email-sumit.saxena@broadcom.com> References: <1476699850-25083-1-git-send-email-sumit.saxena@broadcom.com> Sender: linux-scsi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP megaraid_sas driver returns SYNCHRONIZE_CACHE command back to SCSI layer without sending it to firmware as firmware takes care of flushing cache. This patch will change the driver behavior wrt SYNCHRONIZE_CACHE handling. If underlying firmware has support to handle the SYNCHORNIZE_CACHE, driver will send it for firmware otherwise complete it back to SCSI layer with SUCCESS immediately. If Firmware handle SYNCHORNIZE_CACHE for both VD and JBOD "canHandleSyncCache" bit in scratch pad register(offset 0x00B4) will be set. This behavior can be controlled via module parameter and user can fallback to old behavior of returning SYNCHRONIZE_CACHE by driver only without sending it to firmware. Signed-off-by: Sumit Saxena Signed-off-by: Kashyap Desai --- drivers/scsi/megaraid/megaraid_sas.h | 3 +++ drivers/scsi/megaraid/megaraid_sas_base.c | 14 ++++++-------- drivers/scsi/megaraid/megaraid_sas_fusion.c | 3 +++ drivers/scsi/megaraid/megaraid_sas_fusion.h | 2 ++ 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/drivers/scsi/megaraid/megaraid_sas.h b/drivers/scsi/megaraid/megaraid_sas.h index ca86c88..43fd14f 100644 --- a/drivers/scsi/megaraid/megaraid_sas.h +++ b/drivers/scsi/megaraid/megaraid_sas.h @@ -1429,6 +1429,8 @@ enum FW_BOOT_CONTEXT { #define MR_MAX_REPLY_QUEUES_EXT_OFFSET_SHIFT 14 #define MR_MAX_MSIX_REG_ARRAY 16 #define MR_RDPQ_MODE_OFFSET 0X00800000 +#define MR_CAN_HANDLE_SYNC_CACHE_OFFSET 0X01000000 + /* * register set for both 1068 and 1078 controllers * structure extended for 1078 registers @@ -2140,6 +2142,7 @@ struct megasas_instance { u8 is_imr; u8 is_rdpq; bool dev_handle; + bool fw_sync_cache_support; }; struct MR_LD_VF_MAP { u32 size; diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c index 092387f..a4a8e2f 100644 --- a/drivers/scsi/megaraid/megaraid_sas_base.c +++ b/drivers/scsi/megaraid/megaraid_sas_base.c @@ -104,6 +104,10 @@ unsigned int scmd_timeout = MEGASAS_DEFAULT_CMD_TIMEOUT; module_param(scmd_timeout, int, S_IRUGO); MODULE_PARM_DESC(scmd_timeout, "scsi command timeout (10-90s), default 90s. See megasas_reset_timer."); +bool block_sync_cache; +module_param(block_sync_cache, bool, S_IRUGO); +MODULE_PARM_DESC(block_sync_cache, "Block SYNC CACHE by driver Default: 0(Send it to firmware)"); + MODULE_LICENSE("GPL"); MODULE_VERSION(MEGASAS_VERSION); MODULE_AUTHOR("megaraidlinux.pdl@avagotech.com"); @@ -1700,16 +1704,10 @@ megasas_queue_command(struct Scsi_Host *shost, struct scsi_cmnd *scmd) goto out_done; } - switch (scmd->cmnd[0]) { - case SYNCHRONIZE_CACHE: - /* - * FW takes care of flush cache on its own - * No need to send it down - */ + if ((scmd->cmnd[0] == SYNCHRONIZE_CACHE) && + (!instance->fw_sync_cache_support)) { scmd->result = DID_OK << 16; goto out_done; - default: - break; } return instance->instancet->build_and_issue_cmd(instance, scmd); diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c index 2159f6a..8237580 100644 --- a/drivers/scsi/megaraid/megaraid_sas_fusion.c +++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c @@ -747,6 +747,9 @@ megasas_ioc_init_fusion(struct megasas_instance *instance) ret = 1; goto fail_fw_init; } + if (!block_sync_cache) + instance->fw_sync_cache_support = (scratch_pad_2 & + MR_CAN_HANDLE_SYNC_CACHE_OFFSET) ? 1 : 0; IOCInitMessage = dma_alloc_coherent(&instance->pdev->dev, diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.h b/drivers/scsi/megaraid/megaraid_sas_fusion.h index e3bee04..2857154 100644 --- a/drivers/scsi/megaraid/megaraid_sas_fusion.h +++ b/drivers/scsi/megaraid/megaraid_sas_fusion.h @@ -72,6 +72,8 @@ #define MPI2_SUP_REPLY_POST_HOST_INDEX_OFFSET (0x0000030C) #define MPI2_REPLY_POST_HOST_INDEX_OFFSET (0x0000006C) +extern bool block_sync_cache; + /* * Raid context flags */