From patchwork Tue Nov 8 07:45:17 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kiwoong Kim X-Patchwork-Id: 9416799 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 B3DDC60459 for ; Tue, 8 Nov 2016 07:45:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A3F0A28866 for ; Tue, 8 Nov 2016 07:45:22 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9672C28877; Tue, 8 Nov 2016 07:45:22 +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.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI 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 CB16028866 for ; Tue, 8 Nov 2016 07:45:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752653AbcKHHpV convert rfc822-to-8bit (ORCPT ); Tue, 8 Nov 2016 02:45:21 -0500 Received: from mailout4.samsung.com ([203.254.224.34]:51097 "EHLO mailout4.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752508AbcKHHpU (ORCPT ); Tue, 8 Nov 2016 02:45:20 -0500 Received: from epcpsbgm1new.samsung.com (epcpsbgm1 [203.254.230.26]) by mailout4.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0OGB02A62C78RD20@mailout4.samsung.com> for linux-scsi@vger.kernel.org; Tue, 08 Nov 2016 16:45:18 +0900 (KST) X-AuditID: cbfee61a-f79916d0000062de-1b-5821828e7868 Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm1new.samsung.com (EPCPMTA) with SMTP id 0F.64.25310.E8281285; Tue, 8 Nov 2016 16:45:18 +0900 (KST) Received: from DOKWMADKIM02 ([12.36.166.218]) by mmp2.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0OGB00DEDC7ITPB0@mmp2.samsung.com>; Tue, 08 Nov 2016 16:45:18 +0900 (KST) From: Kiwoong Kim To: "Martin K. Petersen" , vinholikatti@gmail.com, linux-scsi@vger.kernel.org Cc: "James E.J. Bottomley" , =?UTF-8?B?7LaU7ZeM6rSR?= Subject: [PATCH v1] ufs: introduce setup_xfer_req callback Date: Tue, 08 Nov 2016 16:45:17 +0900 Message-id: <001d01d23994$0d233580$2769a080$@samsung.com> MIME-version: 1.0 Content-type: text/plain; charset=UTF-8 Content-transfer-encoding: 8BIT X-Mailer: Microsoft Outlook 15.0 Thread-index: AdI5k12kP0a1HFXXSoKAE+Y+JrOi4A== Content-language: ko X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrEIsWRmVeSWpSXmKPExsVy+t9jQd2+JsUIg7W96hazLzQxWqyamGfR fX0Hm8Xy4/+YLHYsrHJg9dg56y67x4NDm1k8Pj69xeLRt2UVo8fnTXIBrFFuNhmpiSmpRQqp ecn5KZl56bZKoSFuuhZKCnmJuam2ShG6viFBSgpliTmlQJ6RARpwcA5wD1bSt0twyzi1/xxr wSLRij+T/zM1MJ4R7GLk4JAQMJH4OtW6i5ETyBSTuHBvPVsXIxeHkMAsRolF378yQjjvGSWO /PnFBlLFJqAp8fTmVCYQW0QgW+LRurfMIIOYBVIlbuzSAgkLC1hJnJs4mwkkzCKgKrF3Rw1I mFfAUuL7k/WsELagxI/J91hAbGYBdYlJ8xYxQ9jaEk/eXWCFuEdBYveno6wQm/Qkfr67DFUv IrHvxTvGCYxARyKMmoVk1Cwko2YhaVnAyLKKUSK1ILmgOCk91zAvtVyvODG3uDQvXS85P3cT Izi+nkntYDy4y/0QowAHoxIPb4eMYoQQa2JZcWXuIUYJDmYlEV7uaqAQb0piZVVqUX58UWlO avEhRlOgXycyS4km5wNjP68k3tDE3MTc2MDC3NLSxEhJnLdx9rNwIYH0xJLU7NTUgtQimD4m Dk6pBkb7d9pGuXd3XLQXLgjsrrVpXXz4f8oOH7PHzuzmtklTDn9dEt+t4jphx7wAtxs5x1Uv qHi7qx45nP7d9s5V6arl6w6/+8Pml+23Lfin/5GQzVsaxJ43Ldj68tBMVaaGtrYPZdyFhVy/ DtblvVB77NWkX5udxhC35+aOY5/3P+T+qa/tX1J8u0uJpTgj0VCLuag4EQDWshxXxQIAAA== X-MTR: 20000000000000000@CPGS 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 Some UFS host controller may need to configure some things before any transfer request is issued. Signed-off-by: Kiwoong Kim --- drivers/scsi/ufs/ufshcd.c | 2 ++ drivers/scsi/ufs/ufshcd.h | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 8cf5d8f..bf78321 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -1516,6 +1516,7 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd) /* issue command to the controller */ spin_lock_irqsave(hba->host->host_lock, flags); + ufshcd_vops_setup_xfer_req(hba, tag, (lrbp->cmd ? true : false)); ufshcd_send_command(hba, tag); out_unlock: spin_unlock_irqrestore(hba->host->host_lock, flags); @@ -1727,6 +1728,7 @@ static int ufshcd_exec_dev_cmd(struct ufs_hba *hba, /* Make sure descriptors are ready before ringing the doorbell */ wmb(); spin_lock_irqsave(hba->host->host_lock, flags); + ufshcd_vops_setup_xfer_req(hba, tag, (lrbp->cmd ? true : false)); ufshcd_send_command(hba, tag); spin_unlock_irqrestore(hba->host->host_lock, flags); diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index afff7f4..f2a69c0 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -261,6 +261,8 @@ struct ufs_pwr_mode_info { * @pwr_change_notify: called before and after a power mode change * is carried out to allow vendor spesific capabilities * to be set. + * @setup_xfer_req: called before any transfer request is issued + * to set some things * @suspend: called during host controller PM callback * @resume: called during host controller PM callback * @dbg_register_dump: used to dump controller debug information @@ -284,6 +286,7 @@ struct ufs_hba_variant_ops { enum ufs_notify_change_status status, struct ufs_pa_layer_attr *, struct ufs_pa_layer_attr *); + void (*setup_xfer_req)(struct ufs_hba *, int, bool); int (*suspend)(struct ufs_hba *, enum ufs_pm_op); int (*resume)(struct ufs_hba *, enum ufs_pm_op); void (*dbg_register_dump)(struct ufs_hba *hba); @@ -801,6 +804,13 @@ static inline int ufshcd_vops_pwr_change_notify(struct ufs_hba *hba, return -ENOTSUPP; } +static inline void ufshcd_vops_setup_xfer_req(struct ufs_hba *hba, int tag, + bool is_cmd_not_null) +{ + if (hba->vops && hba->vops->setup_xfer_req) + return hba->vops->setup_xfer_req(hba, tag, is_cmd_not_null); +} + static inline int ufshcd_vops_suspend(struct ufs_hba *hba, enum ufs_pm_op op) { if (hba->vops && hba->vops->suspend)