From patchwork Wed Nov 22 05:30:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Manne, Nava kishore" X-Patchwork-Id: 168101 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2b07:b0:403:3b70:6f57 with SMTP id io7csp1110991vqb; Tue, 21 Nov 2023 21:34:17 -0800 (PST) X-Google-Smtp-Source: AGHT+IHbnC3kriMSZxCT9IGW6g/+KBc5L/UgcY8BQGk+Bny1e7JmWZRwO0MEtL4SQe2O8zc/eOKI X-Received: by 2002:a17:90b:3807:b0:281:3fb:6df2 with SMTP id mq7-20020a17090b380700b0028103fb6df2mr1310351pjb.22.1700631257345; Tue, 21 Nov 2023 21:34:17 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1700631257; cv=pass; d=google.com; s=arc-20160816; b=u7gF+iJBybswqkyW1PQqzLFSdmcSoJb+t5g4ToxsC7OpiNS8DaKWKemyRM3sJ41tjd E6FDKmryKZhzGFn1LaidRgskPAsBweMNf6EEd4GGjDFyL0EW3NxoN6e0BgBZDzHhYtsS tt7nOOCkrSK6kxb5cS1hmDnLoLHcwg2DhOYMKzEXdFPU9C5ndGLtSah2UmgCNy8L6q8y Yt+loPNl+Pn3cez1xN9ghw2WLjf4VKGmMzKOXWYJ6SD5CFB4/MspZe/N70pI8iDj3Pmr wunBsRm6TT6l/A/txBYqe0DcBnL34xDZ6OcB/Hue9udv3BDbpQKsXk2Zjj/msugJVl2P cn/Q== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=bbTTlxZASBh0q8qRFW+vLxjZsFXjd/zFD5OKrxtsdMY=; fh=bdz8H8z5xleMu+8dVcWveIEBkwVfmnZ58GmxhTWYfXY=; b=RjXW97l2eqewX1X1Tze9OZdgQgl1GopicEP62i9DZ3Hp+1qbaV05vMNs5MEEKctU0C pGOANtdh4u50Mnz3DJlkpSgBq8DarlpfcihsrlLYhWwbfjwQmOVwJEB+3407VboQmXGJ LINRNuQ/pnw12RFo6KF2doLDW+H3xcIugHWjteVqpBQp5KbOaKyTVhcxYZ9JyoTx6ftT WimJDgtx4PpRvJh9/7IWsXc9ODTqOGAz826gYaPr8sIt9ONeCVbn92yyRKfp+HrNr/Hh hAnDPemI/NaaMqNTTCC/q99/eliLDmVJ5WxXTxdy6yjyvhdhQFzaDCdKE5f5VguQ9xXa U5WA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b=AwyouEut; arc=pass (i=1 spf=pass spfdomain=amd.com dmarc=pass fromdomain=amd.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amd.com Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id gv22-20020a17090b11d600b0027763f3e3c8si749267pjb.186.2023.11.21.21.34.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Nov 2023 21:34:17 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b=AwyouEut; arc=pass (i=1 spf=pass spfdomain=amd.com dmarc=pass fromdomain=amd.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amd.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 52BF980657FB; Tue, 21 Nov 2023 21:31:28 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234662AbjKVFbR (ORCPT + 99 others); Wed, 22 Nov 2023 00:31:17 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53094 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234574AbjKVFbN (ORCPT ); Wed, 22 Nov 2023 00:31:13 -0500 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam04on2060.outbound.protection.outlook.com [40.107.101.60]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8DC77D52; Tue, 21 Nov 2023 21:31:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Orqd/4qqg5Jlav9M8CWpdryhfdqz1yjSgNFgkQNmZOXjq8IOdO5xfcl4fW9LB+Q3makHp3MZcCfnAA/dTlPgP6/zNdtPk2nEiA2Nt+L46BL8sb7d7y9kVGNN9JI1/R6dEmHMo7pZchFx7CRiKFpoMZtd6oVpi6abhDVWNFd0Aovw6kE1p+tKKJrGxyWHvijxi3OWjABGwMEtKYNKt1Ufqez3RjWVe/5AvIihlkXGdK8Od6hdYB5bjraMOiQkfVz7ei+SfbGMrRaGSZpAnd65SrxwTb4Yn4i8M1nVvWYQkAvd6p7nsMn37Xam/UbBxwar0i0pAlZDrPrelrhv0PMYXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=bbTTlxZASBh0q8qRFW+vLxjZsFXjd/zFD5OKrxtsdMY=; b=fhy1pIyAEuXCzNtVY+39Cqgx791Kb9/UM/OBQaYDPXB2fAvWIkCR+T9qojovbDWj68iVfGTBg2MHe+2d/It2LDQ3UdvuAI6GpgjqWhuTdKjePIHSQ4AdFGIAFPEjLo98kXAcq+s0RXsVh1V06L3/lAAStUGai5hkBlg+3nKyc6GtnYxo8R5j+HOy1idBAJVDZZWMZYL3hDsqbh1WFyss77B4aglMkI9bZ2iV8HmxQu5g1qgx7knPWw/NZlUJG0eBQXyWuL48b1vfPlFNKj+HGb56CXKmNHUrUooIOyhlefbS77QiPVwwXO9EuzX0gaaNkJjWhfoX8xWfuj1SkC4DzA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bbTTlxZASBh0q8qRFW+vLxjZsFXjd/zFD5OKrxtsdMY=; b=AwyouEutTEoAuOF3AsmTZifb+vylM8mhv+ToRtEbDKzov/X0wsqkGdyyNLcvdT1092VCu8dj/CiFvlJMe0X9CmRG0XhxCggSJMzGiTSl28Q5KQqMUAAayr3fh1y4k9t/z0UC2s+Frg4XIvVlXr5o6wfA4YSzWd5D7qT2ONrxIiY= Received: from MN2PR05CA0053.namprd05.prod.outlook.com (2603:10b6:208:236::22) by MN0PR12MB6152.namprd12.prod.outlook.com (2603:10b6:208:3c4::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7002.28; Wed, 22 Nov 2023 05:31:06 +0000 Received: from BL6PEPF0001AB4B.namprd04.prod.outlook.com (2603:10b6:208:236:cafe::2e) by MN2PR05CA0053.outlook.office365.com (2603:10b6:208:236::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7025.16 via Frontend Transport; Wed, 22 Nov 2023 05:31:06 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BL6PEPF0001AB4B.mail.protection.outlook.com (10.167.242.69) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.7025.12 via Frontend Transport; Wed, 22 Nov 2023 05:31:06 +0000 Received: from localhost (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.34; Tue, 21 Nov 2023 23:31:03 -0600 From: Nava kishore Manne To: , , , , , , , , , , Subject: [RFC 1/2] fpga: support loading from a pre-allocated buffer Date: Wed, 22 Nov 2023 11:00:34 +0530 Message-ID: <20231122053035.3758124-2-nava.kishore.manne@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231122053035.3758124-1-nava.kishore.manne@amd.com> References: <20231122053035.3758124-1-nava.kishore.manne@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB4B:EE_|MN0PR12MB6152:EE_ X-MS-Office365-Filtering-Correlation-Id: c32917b5-97a4-4cf8-7a89-08dbeb1c39a3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: mhW8wwc64CGdHlzG57FxJcJ51XuYF/4d/Ik1fHQIuZYaoYG4D9WZdkOyEHw+CuKp5jO6wibM3WKAA/3z9OlbrByU8sdmHFdg6bmrbpqy+eAwzUTEGHWOtTY2TA6xX12F5EqbKIgxPnEJqY3DgmQLAZZB+Ytl+0QUuvhfir2QWDUfAGu6/o2xusqD1+Ip3jn64vzHBwWQ/Da3RTYScHhHFd6DMn5gqk58IKE177pu4E1q70cGqKs4Yy16q3cBgls3uPE0XbntN+JoksKaBSdAQz6e3fxIVNRhR9hypa5vZxVlbQMjujMEvPfOZUTJYvBHCgjoGnLlrUMtqpCSZpM+2HrFYdOoJ5OZ47huy87Jch0awwvhvi+822/dljTND6RIOQFU2AQqgdw9CYcH4AB6unSpD+obOTBUM8xrxzEqQkScXIvbFsdTTlZNFGPQCLQNR7OfcY8dklObIrQXiOtIqJX9ZU3rKoGkHZcPfD+yepvXJfyZiYD6mzbvvMsPrzFlpzqzAcn/a7j/iEWn07RlM56lCxUqafbawyRJDyJXRdsq3s0WizrhwTAmZrTnPGTCAwWqQ66Pr6mgKAHVrs4L1vxYJHP6lYL7loeZD6FL/jhO0mrqlkLUyqXWgjWCEAnZWuZs6cpehcFBY1IlN/NFa8mfB/bHHzPJMLeptxWGN9cYDYPsUilcfEwhEkL7DrqTktymWFMT7jX3bq6o7tT17v6buSOLqcDlEzz3Xl6BUD+upAQ/Y3bozslyWFsoE7N4J7d5vVfbSWR8uG4Sm2Ozpxnuw5cztdZHKWN/biCIDeQ= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230031)(4636009)(346002)(39860400002)(396003)(136003)(376002)(230922051799003)(82310400011)(451199024)(1800799012)(64100799003)(186009)(46966006)(40470700004)(36840700001)(36756003)(41300700001)(40460700003)(86362001)(7416002)(5660300002)(103116003)(921008)(336012)(81166007)(47076005)(356005)(2906002)(40480700001)(2616005)(478600001)(1076003)(26005)(16526019)(426003)(82740400003)(83380400001)(70586007)(8936002)(8676002)(6666004)(316002)(70206006)(110136005)(36860700001)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Nov 2023 05:31:06.1215 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c32917b5-97a4-4cf8-7a89-08dbeb1c39a3 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB4B.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR12MB6152 X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Tue, 21 Nov 2023 21:31:28 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783241121276717456 X-GMAIL-MSGID: 1783241121276717456 Some systems are memory constrained but they need to load very large Configuration files. The FPGA subsystem allows drivers to request this Configuration image be loaded from the filesystem, but this requires that the entire configuration data be loaded into kernel memory first before it's provided to the driver. This can lead to a situation where we map the configuration data twice, once to load the configuration data into kernel memory and once to copy the configuration data into the final resting place which is nothing but a dma-able continuous buffer. This creates needless memory pressure and delays due to multiple copies. Let's add a dmabuf handling support to the fpga manager framework that allows drivers to load the Configuration data directly from a pre-allocated buffer. This skips the intermediate step of allocating a buffer in kernel memory to hold the Configuration data. Signed-off-by: Nava kishore Manne --- drivers/fpga/fpga-mgr.c | 113 ++++++++++++++++++++++++++++++++++ include/linux/fpga/fpga-mgr.h | 10 +++ 2 files changed, 123 insertions(+) diff --git a/drivers/fpga/fpga-mgr.c b/drivers/fpga/fpga-mgr.c index 06651389c592..23d2b4d45827 100644 --- a/drivers/fpga/fpga-mgr.c +++ b/drivers/fpga/fpga-mgr.c @@ -8,6 +8,8 @@ * With code from the mailing list: * Copyright (C) 2013 Xilinx, Inc. */ +#include +#include #include #include #include @@ -519,6 +521,39 @@ static int fpga_mgr_buf_load(struct fpga_manager *mgr, return rc; } +static int fpga_dmabuf_load(struct fpga_manager *mgr, + struct fpga_image_info *info) +{ + struct dma_buf_attachment *attach; + struct sg_table *sgt; + int ret; + + /* create attachment for dmabuf with the user device */ + attach = dma_buf_attach(mgr->dmabuf, &mgr->dev); + if (IS_ERR(attach)) { + pr_err("failed to attach dmabuf\n"); + ret = PTR_ERR(attach); + goto fail_put; + } + + sgt = dma_buf_map_attachment(attach, DMA_BIDIRECTIONAL); + if (IS_ERR(sgt)) { + ret = PTR_ERR(sgt); + goto fail_detach; + } + + info->sgt = sgt; + ret = fpga_mgr_buf_load_sg(mgr, info, info->sgt); + dma_buf_unmap_attachment(attach, sgt, DMA_BIDIRECTIONAL); + +fail_detach: + dma_buf_detach(mgr->dmabuf, attach); +fail_put: + dma_buf_put(mgr->dmabuf); + + return ret; +} + /** * fpga_mgr_firmware_load - request firmware and load to fpga * @mgr: fpga manager @@ -573,6 +608,8 @@ int fpga_mgr_load(struct fpga_manager *mgr, struct fpga_image_info *info) { info->header_size = mgr->mops->initial_header_size; + if (mgr->flags & FPGA_MGR_CONFIG_DMA_BUF) + return fpga_dmabuf_load(mgr, info); if (info->sgt) return fpga_mgr_buf_load_sg(mgr, info, info->sgt); if (info->buf && info->count) @@ -732,6 +769,64 @@ void fpga_mgr_put(struct fpga_manager *mgr) } EXPORT_SYMBOL_GPL(fpga_mgr_put); +static int fpga_dmabuf_fd_get(struct file *file, char __user *argp) +{ + struct fpga_manager *mgr = (struct fpga_manager *)(file->private_data); + int buffd; + + if (copy_from_user(&buffd, argp, sizeof(buffd))) + return -EFAULT; + + mgr->dmabuf = dma_buf_get(buffd); + if (IS_ERR_OR_NULL(mgr->dmabuf)) + return -EINVAL; + + mgr->flags = FPGA_MGR_CONFIG_DMA_BUF; + + return 0; +} + +static int fpga_device_open(struct inode *inode, struct file *file) +{ + struct miscdevice *miscdev = file->private_data; + struct fpga_manager *mgr = container_of(miscdev, + struct fpga_manager, miscdev); + + file->private_data = mgr; + + return 0; +} + +static int fpga_device_release(struct inode *inode, struct file *file) +{ + return 0; +} + +static long fpga_device_ioctl(struct file *file, unsigned int cmd, + unsigned long arg) +{ + char __user *argp = (char __user *)arg; + int err; + + switch (cmd) { + case FPGA_IOCTL_LOAD_DMA_BUFF: + err = fpga_dmabuf_fd_get(file, argp); + break; + default: + err = -ENOTTY; + } + + return err; +} + +static const struct file_operations fpga_fops = { + .owner = THIS_MODULE, + .open = fpga_device_open, + .release = fpga_device_release, + .unlocked_ioctl = fpga_device_ioctl, + .compat_ioctl = fpga_device_ioctl, +}; + /** * fpga_mgr_lock - Lock FPGA manager for exclusive use * @mgr: fpga manager @@ -815,10 +910,28 @@ fpga_mgr_register_full(struct device *parent, const struct fpga_manager_info *in mgr->dev.of_node = parent->of_node; mgr->dev.id = id; + /* Make device dma capable by inheriting from parent's */ + set_dma_ops(&mgr->dev, get_dma_ops(parent)); + ret = dma_coerce_mask_and_coherent(&mgr->dev, dma_get_mask(parent)); + if (ret) { + dev_warn(parent, + "Failed to set DMA mask %llx. Trying to continue... %x\n", + dma_get_mask(parent), ret); + } + ret = dev_set_name(&mgr->dev, "fpga%d", id); if (ret) goto error_device; + mgr->miscdev.minor = MISC_DYNAMIC_MINOR; + mgr->miscdev.name = kobject_name(&mgr->dev.kobj); + mgr->miscdev.fops = &fpga_fops; + ret = misc_register(&mgr->miscdev); + if (ret) { + pr_err("fpga: failed to register misc device.\n"); + goto error_device; + } + /* * Initialize framework state by requesting low level driver read state * from device. FPGA may be in reset mode or may have been programmed diff --git a/include/linux/fpga/fpga-mgr.h b/include/linux/fpga/fpga-mgr.h index 54f63459efd6..c5de19a9b4ed 100644 --- a/include/linux/fpga/fpga-mgr.h +++ b/include/linux/fpga/fpga-mgr.h @@ -9,6 +9,7 @@ #define _LINUX_FPGA_MGR_H #include +#include #include struct fpga_manager; @@ -77,6 +78,7 @@ enum fpga_mgr_states { #define FPGA_MGR_ENCRYPTED_BITSTREAM BIT(2) #define FPGA_MGR_BITSTREAM_LSB_FIRST BIT(3) #define FPGA_MGR_COMPRESSED_BITSTREAM BIT(4) +#define FPGA_MGR_CONFIG_DMA_BUF BIT(5) /** * struct fpga_image_info - information specific to an FPGA image @@ -197,7 +199,10 @@ struct fpga_manager_ops { * struct fpga_manager - fpga manager structure * @name: name of low level fpga manager * @dev: fpga manager device + * @flags: flags determines the type of Bitstream + * @dmabuf: shared dma buffer * @ref_mutex: only allows one reference to fpga manager + * @miscdev: information about character device node * @state: state of fpga manager * @compat_id: FPGA manager id for compatibility check. * @mops: pointer to struct of fpga manager ops @@ -206,7 +211,10 @@ struct fpga_manager_ops { struct fpga_manager { const char *name; struct device dev; + unsigned long flags; + struct dma_buf *dmabuf; struct mutex ref_mutex; + struct miscdevice miscdev; enum fpga_mgr_states state; struct fpga_compat_id *compat_id; const struct fpga_manager_ops *mops; @@ -244,4 +252,6 @@ struct fpga_manager * devm_fpga_mgr_register(struct device *parent, const char *name, const struct fpga_manager_ops *mops, void *priv); +#define FPGA_IOCTL_LOAD_DMA_BUFF _IOWR('R', 1, __u32) + #endif /*_LINUX_FPGA_MGR_H */ From patchwork Wed Nov 22 05:30:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Manne, Nava kishore" X-Patchwork-Id: 168102 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2b07:b0:403:3b70:6f57 with SMTP id io7csp1110998vqb; Tue, 21 Nov 2023 21:34:18 -0800 (PST) X-Google-Smtp-Source: AGHT+IHdXxF9oBh1NHdZxNw2Sbpt9w0NNBD3+sGEkFfaWUQ9+Gqy4TZo7SGG8DS5N5QCi7i8K0FR X-Received: by 2002:a05:6a20:e11b:b0:187:7af3:bb0c with SMTP id kr27-20020a056a20e11b00b001877af3bb0cmr1627934pzb.58.1700631258197; Tue, 21 Nov 2023 21:34:18 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1700631258; cv=pass; d=google.com; s=arc-20160816; b=M/6wxUHkVG5HjJkLkrZqO8hEcph9w+dHDEpvof8cnOz5Jmh+hOtkaM0O+vOpukenB8 6eEl8HqX7KZOP+FKpbArTNf1S4uDR1uMlzJQKvKELbEvib86Y3ikKn/m+UVa6oVcrTDZ sjKN7oKYPMAhSU82xWmP5/W016MbyWNWYUXm/W46d7kioTqp8AUj5N7OVZ58lxWs9J39 Oc9ldWVxTdBFjC3GC77VEWEaxOdktQSt+jg4hD0RCXFXIArQX1kE8H+/jPrtNTRIK3jo 2CAwN88uuda8/WBDNuu7v+sJcuAKxWa7eA83BEegUnZq5utQRy548CZs+K2X1WbgT+8I SJEg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=vTw4SoSSLjZh8+v4JCagfM9/lx9KlKg4pAxKEQ2dA0A=; fh=bdz8H8z5xleMu+8dVcWveIEBkwVfmnZ58GmxhTWYfXY=; b=aP8LF4Ndnk/yzZfklHCk18TA6JIn6iAYxfs4wm39x7sm7bQyK906auKGxKHrJcGFTP 49sKf+xNnoFCkYs7ze8i1i7Q43FXv5fj84wmKxRoJqF3BWA01fAfC7ZrxtyI8bDiVUIr UZ2ZmqSQOsMAY04YZdiEBXxxlgdMLcuCACsF3A7eo/a5czK6cPQrTEHbMGtoQt9/SC6n 3ytsrXIQxdye93WmPvVk+50mwGuvx43Aj6+J2lDyKAPfmu87+WiZanFHZARc6O976OKa b0dybiIppqoJHqKdANUzNc4monmHfjkRiABuPB8WvvKaWEDEsPqNm706+jvTCzLgOI4O BdQA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b=Om6VUEwT; arc=pass (i=1 spf=pass spfdomain=amd.com dmarc=pass fromdomain=amd.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amd.com Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id qa3-20020a17090b4fc300b002764fc15dd3si802890pjb.37.2023.11.21.21.34.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Nov 2023 21:34:18 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b=Om6VUEwT; arc=pass (i=1 spf=pass spfdomain=amd.com dmarc=pass fromdomain=amd.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amd.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 180098092EF2; Tue, 21 Nov 2023 21:31:36 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234834AbjKVFb3 (ORCPT + 99 others); Wed, 22 Nov 2023 00:31:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53126 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234641AbjKVFbR (ORCPT ); Wed, 22 Nov 2023 00:31:17 -0500 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on2085.outbound.protection.outlook.com [40.107.96.85]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6FB5C1BC; Tue, 21 Nov 2023 21:31:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YsRJW9tDxwQSwFc9w9nNYBvNj92ckrummSjd9NzgP0g8BNk9qbORBNL8FaAX5n4mXAw8BiVx/Vb/9os5ESLSxtB/KBeCvd+xrtBVSyXGVftnxZTLsyoR7Jww6/aJzKwesjnOl9drsrMBd73JCpEOKdu43fpz3Z1ET9PX8E0gznLNZ/dRfB2xxZxBfrggpkpm8l2P8haWDzjd9vMApW1cMGdcwfbMCHh1rJuUieY2xAsPCaDp0zdeai4ju4ynGt9ON+PdiEK8wk8mqKLqMZboV3M9FhmFobpECSoQv3kj7Fk1RJqQkfHOJadoWqnhEN/mnjYqACo6VMs4Ohd/uOdHzQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=vTw4SoSSLjZh8+v4JCagfM9/lx9KlKg4pAxKEQ2dA0A=; b=kLxZMRO/qR6xsFajevf5cUF0DWORBGOJeikwk7X/0/Em0VWoniaicoVSA0VBRjPJOZy5hJ+5vtP0jiyegL6V7X0lBWAzfKBnsFS1mFnx/wrNdVJgGVHwxK1V9z2tiFOK5J+LqmrmizGpQ2RnoSHfksBhKddM4Y1v99Byhgb7j/V89x9okEhdp322Hk5yMA3OluNp7v8/fc9YDkvINb6w48mVFIGqrnCxkjEM0D/RX8kV+eVyk+OofkZdYmaao6lCCs6z+DtNhmjTGaLbs+HT6gnw2sUV4SDQFBUTo1Kqd3FVSi8+q8ziClGfpJ7ie9aUgffgfQccChRax4KbgSvZEg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vTw4SoSSLjZh8+v4JCagfM9/lx9KlKg4pAxKEQ2dA0A=; b=Om6VUEwTe/wjIzJgNhGasGVcZtU/Lx+UuXe515283eh5NNbkyByA8kfvVI5zLsGYGtvnj1D8oEE+5lmJA7eyYVAIswGc7tQDfg0wv29iSdTOYtqOez7oWYrUAe0nMYWOHMR0XA6Xyxn62RDTfcKcMyToTUDg/J7r4oep8wEDibo= Received: from MN2PR05CA0060.namprd05.prod.outlook.com (2603:10b6:208:236::29) by SJ1PR12MB6121.namprd12.prod.outlook.com (2603:10b6:a03:45c::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7025.18; Wed, 22 Nov 2023 05:31:09 +0000 Received: from BL6PEPF0001AB4B.namprd04.prod.outlook.com (2603:10b6:208:236:cafe::e9) by MN2PR05CA0060.outlook.office365.com (2603:10b6:208:236::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7025.18 via Frontend Transport; Wed, 22 Nov 2023 05:31:09 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BL6PEPF0001AB4B.mail.protection.outlook.com (10.167.242.69) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.7025.12 via Frontend Transport; Wed, 22 Nov 2023 05:31:09 +0000 Received: from localhost (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.34; Tue, 21 Nov 2023 23:31:07 -0600 From: Nava kishore Manne To: , , , , , , , , , , Subject: [RFC 2/2] fpga: versal: Use the scatterlist interface Date: Wed, 22 Nov 2023 11:00:35 +0530 Message-ID: <20231122053035.3758124-3-nava.kishore.manne@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231122053035.3758124-1-nava.kishore.manne@amd.com> References: <20231122053035.3758124-1-nava.kishore.manne@amd.com> MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB4B:EE_|SJ1PR12MB6121:EE_ X-MS-Office365-Filtering-Correlation-Id: c6e237e2-dc7b-424d-b4a5-08dbeb1c3b63 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: JwjNquiUm35KZMw693YQBgtiGD8W5B/2gXSBxriH2FTqDpp4Hvez2QjxAU81g4dOLrzk7UrNv4R1i7j+9t/ovpxDJwCxfyVA/Kfj7LvkShbfwiVsHM3xPD59IaecnrGpRdRumlewZzYenIFSx6usRY6mTPYwrzq87UVu8QhknrhTHAx7ne7RfrBtspw6J9dm6etP+EAWiYp0E3J6CIvfGvaNKVNa0KGf3zYv+qjYjM4C0lbjEDbV1Bru+z8DS9k1gY45tE38FLSRbcJ+clYB4WShPMqvmHJ9Mey6HgV0TgZn9kBeAXW4cSOHkL8sifsCTi4PZvJZfhNpBB/nilAWZc2obXAv6asnBvq1z3r6oi/B4wIbqy3yIDPV4PQUsF4nJvnbLxwVO6bao5clyWxOSKMV8FdEuaJQmDEatgNwzkaeByAqD305iJE/bgTeIxVbKkzPWcAbJBoC+rKnU1qL9uO/Q8ulzHefGcGYop3jsZShVFlxOr4ILfn0WNZoWOfMUB5iQfckX6uXedMPpiFDlHWcw3UUPiXE/C+gM45gdpyGa66wR+lpjX2IXmH8AKP8/tcMwbYfbag6/LCJfceErvwde7oSbAuy33ds/KWWXnKBpe0FkJXDa1HBHTAeUvwGWRMq52fT28H7aPo87P4PS1/CBCdShvsK3g2+bBVeAP3Jgbb5qWVxGx+yfQS7SgIiPS6YgMM9h8VnoiCkYsPx/8EiqeyZqdwhwmdnR3PYV1Y+kw2u+rxbkQOrF3d+YBevaL544ERzkE6PEQMJGihVrNzt+9o35spmsdOSaSCkyZk= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230031)(4636009)(136003)(39860400002)(376002)(346002)(396003)(230922051799003)(1800799012)(82310400011)(186009)(451199024)(64100799003)(40470700004)(36840700001)(46966006)(7416002)(5660300002)(2906002)(41300700001)(8936002)(70586007)(110136005)(316002)(8676002)(6666004)(40480700001)(478600001)(70206006)(2616005)(26005)(1076003)(83380400001)(16526019)(426003)(336012)(40460700003)(36860700001)(921008)(47076005)(81166007)(356005)(86362001)(103116003)(82740400003)(36756003)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Nov 2023 05:31:09.0590 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c6e237e2-dc7b-424d-b4a5-08dbeb1c3b63 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB4B.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ1PR12MB6121 X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Tue, 21 Nov 2023 21:31:36 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783241122421531053 X-GMAIL-MSGID: 1783241122421531053 Allows drivers to request the Configuration image be loaded from dma-able continuous buffer to avoid needless memory pressure and delays due to multiple copies. Signed-off-by: Nava kishore Manne --- drivers/fpga/versal-fpga.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/fpga/versal-fpga.c b/drivers/fpga/versal-fpga.c index 3710e8f01be2..bf4fb4426417 100644 --- a/drivers/fpga/versal-fpga.c +++ b/drivers/fpga/versal-fpga.c @@ -19,6 +19,18 @@ static int versal_fpga_ops_write_init(struct fpga_manager *mgr, return 0; } +static int versal_fpga_ops_write_sg(struct fpga_manager *mgr, + struct sg_table *sgt) +{ + dma_addr_t dma_addr; + int ret; + + dma_addr = sg_dma_address(sgt->sgl); + ret = zynqmp_pm_load_pdi(PDI_SRC_DDR, dma_addr); + + return ret; +} + static int versal_fpga_ops_write(struct fpga_manager *mgr, const char *buf, size_t size) { @@ -40,6 +52,7 @@ static int versal_fpga_ops_write(struct fpga_manager *mgr, static const struct fpga_manager_ops versal_fpga_ops = { .write_init = versal_fpga_ops_write_init, .write = versal_fpga_ops_write, + .write_sg = versal_fpga_ops_write_sg, }; static int versal_fpga_probe(struct platform_device *pdev)