Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2206708imu; Sat, 26 Jan 2019 23:11:50 -0800 (PST) X-Google-Smtp-Source: ALg8bN4gQ69ynqX1TtNfzkwvDVWxZlBmyApAIvPqS1iBGUh8zS3hQuIr82UNmvcaRYUralaiGCRA X-Received: by 2002:a17:902:784d:: with SMTP id e13mr17687495pln.188.1548573110549; Sat, 26 Jan 2019 23:11:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548573110; cv=none; d=google.com; s=arc-20160816; b=Zkaqn9aeDCJ4l9+1XSEACvI+d9OLL2/SprMkhq2tlGD+6LZNfY6jtbs0GVn0x9KXqF KTa11pcwupHKxNuM8xxI8akXNC4f1hmz3TY9yxTT7bOjNTlIWYinYjqxSQv9J8cmARcZ ScFVbe4TyogR3M6Ip7wOTfgRhiIwIT/Hu5y16+1yxFxrhOxMA0y0oEGsVxAw+IU03jOj 4Zs/+j6WtWolX7xqX9Qm3ykvd3UPOZbCJihkf7c1XXzSWKMuzX5NLabYpeNUg10Ncvyz PD+d1cCklUfOIKEx6Uu292ARjB/xAuUj8iTXCpi9rysTuQNLS418o7bu+BjP3kaGk4dx SIfg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=A1EFB/88FaXXqJZ8R5yZtk9VezdLBovyenKyAYnCGSA=; b=Mutzc24J7G886Q2v40VnFppd7H7tmyAgsBv851a8kmbcOb+W55TVzEqaUfbRNKlPY5 LWnkh3VYlhn1OI1m/qs6ByKYjuPOA+GE8QP5YZbnBX89lW5w/FCwj+LLmXRey5oi+wiI /MJUjP0jIP4x/9JlSN/4v45NRjAtccwOgHFYVjRxBQlI4tvYXszPVW17YbVmnd8rLOxb NtWu4ETF0qEwr7dg7JfYNFn50bjcaNngirINgDnv7F0Un4N5S537W7bFV6Bq5rrG2ZkL m+BobuW4CEUBusb0Qd4yT9dXeG/IEuORLuOR7VKbqx0JtULBgSXaav5TZ0flRgyLlF5b 5Z2w== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=ewZHFfyO; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=wdc.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v6si31294140pgv.277.2019.01.26.23.11.35; Sat, 26 Jan 2019 23:11:50 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=ewZHFfyO; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=wdc.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726750AbfA0HIk (ORCPT + 99 others); Sun, 27 Jan 2019 02:08:40 -0500 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:2665 "EHLO esa1.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726146AbfA0HIk (ORCPT ); Sun, 27 Jan 2019 02:08:40 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1548572919; x=1580108919; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=I9uS5c2zlfuikCDmgUHPIcKKT9lIOhMWPAj4ZVXpxX0=; b=ewZHFfyOEONzoSFa0iolQMtNEm3bQJxbjPZdXm5cU6BLvr5Pm2i2R1uy 03Dr7a2Krsu9dc3Lb4wAkBbTuBiALb/TcxEz2HENDw2yclCVasMjrG6PZ 0R90Irvc/lXVnROI5Ip5oVW/Ns3W4HrJjFoZw5eNEKJFexRDGRdp3N45v gVj1LdhBcCZBP1tsNwnZOT4ievQobSagmb+NTNkj2Ka/pp0boT9r5WCIK Chi1w8c95YWX1037AWKFeRpiZl9cW8GNogl2fVfIJ+H4fSinwGdxEKrBO D1XgXHUw1FsFHNyL8/coxXOpQiFcjMqDSnNJXrgZcN6ptGC7c8OqIXoRe w==; X-IronPort-AV: E=Sophos;i="5.56,529,1539619200"; d="scan'208";a="204903924" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 27 Jan 2019 15:08:39 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP; 26 Jan 2019 22:49:42 -0800 Received: from kfae422988.sdcorp.global.sandisk.com ([10.0.230.227]) by uls-op-cesaip02.wdc.com with ESMTP; 26 Jan 2019 23:08:38 -0800 From: Avri Altman To: "James E.J. Bottomley" , "Martin K. Petersen" , linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org, Evan Green Cc: Avi Shchislowski , Alex Lemberg , Avri Altman Subject: [PATCH v4 3/3] scsi: ufs-bsg: Allow reading descriptors Date: Sun, 27 Jan 2019 09:07:48 +0200 Message-Id: <1548572868-12589-4-git-send-email-avri.altman@wdc.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1548572868-12589-1-git-send-email-avri.altman@wdc.com> References: <1548572868-12589-1-git-send-email-avri.altman@wdc.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add this functionality, placing the descriptor being read in the actual data buffer in the bio. That is, for both read and write descriptors query upiu, we are using the job's request_payload. This in turn, is mapped back in user land to the applicable sg_io_v4 xferp: dout_xferp for write descriptor, and din_xferp for read descriptor. Signed-off-by: Avri Altman --- Documentation/scsi/ufs.txt | 7 ++++++- drivers/scsi/ufs/ufs_bsg.c | 20 ++++++++++++-------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/Documentation/scsi/ufs.txt b/Documentation/scsi/ufs.txt index 78fe7cb..1769f71 100644 --- a/Documentation/scsi/ufs.txt +++ b/Documentation/scsi/ufs.txt @@ -150,9 +150,14 @@ send SG_IO with the applicable sg_io_v4: if (dir == SG_DXFER_TO_DEV) { io_hdr_v4.dout_xfer_len = (uint32_t)byte_cnt; io_hdr_v4.dout_xferp = (uintptr_t)(__u64)buff; + } else { + io_hdr_v4.din_xfer_len = (uint32_t)byte_cnt; + io_hdr_v4.din_xferp = (uintptr_t)(__u64)buff; } -If you wish to write a descriptor, use the dout_xferp sg_io_v4. +If you wish to read or write a descriptor, use the appropriate xferp of +sg_io_v4. + UFS Specifications can be found at, UFS - http://www.jedec.org/sites/default/files/docs/JESD220.pdf diff --git a/drivers/scsi/ufs/ufs_bsg.c b/drivers/scsi/ufs/ufs_bsg.c index 2fd0769..869e71f 100644 --- a/drivers/scsi/ufs/ufs_bsg.c +++ b/drivers/scsi/ufs/ufs_bsg.c @@ -48,12 +48,8 @@ static int ufs_bsg_alloc_desc_buffer(struct ufs_hba *hba, struct bsg_job *job, struct utp_upiu_query *qr; u8 *descp; - if (desc_op == UPIU_QUERY_OPCODE_READ_DESC) { - dev_err(hba->dev, "unsupported opcode %d\n", desc_op); - return -ENOTSUPP; - } - - if (desc_op != UPIU_QUERY_OPCODE_WRITE_DESC) + if (desc_op != UPIU_QUERY_OPCODE_WRITE_DESC && + desc_op != UPIU_QUERY_OPCODE_READ_DESC) goto out; qr = &bsg_request->upiu_req.qr; @@ -71,8 +67,10 @@ static int ufs_bsg_alloc_desc_buffer(struct ufs_hba *hba, struct bsg_job *job, if (!descp) return -ENOMEM; - sg_copy_to_buffer(job->request_payload.sg_list, - job->request_payload.sg_cnt, descp, *desc_len); + if (desc_op == UPIU_QUERY_OPCODE_WRITE_DESC) + sg_copy_to_buffer(job->request_payload.sg_list, + job->request_payload.sg_cnt, descp, + *desc_len); *desc_buff = descp; @@ -140,6 +138,12 @@ static int ufs_bsg_request(struct bsg_job *job) if (!desc_buff) goto out; + if (desc_op == UPIU_QUERY_OPCODE_READ_DESC && desc_len) + bsg_reply->reply_payload_rcv_len = + sg_copy_from_buffer(job->request_payload.sg_list, + job->request_payload.sg_cnt, + desc_buff, desc_len); + kfree(desc_buff); out: -- 1.9.1