From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 94B6BC19F2C for ; Tue, 16 Aug 2022 05:18:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233059AbiHPFSd (ORCPT ); Tue, 16 Aug 2022 01:18:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60620 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232302AbiHPFSQ (ORCPT ); Tue, 16 Aug 2022 01:18:16 -0400 Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-eopbgr10089.outbound.protection.outlook.com [40.107.1.89]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3C580203683; Mon, 15 Aug 2022 14:40:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=U09tWjYbMbWPGFcg5jArO5SZsOgWn5vakCtu8ypzSC080QdWvMwJGVtHynGeKz+WYsAZf29BDHfkC7/yqlEEPoG9pvDtyM3sEa1tn2Z6sc24zWvtfXxE0I8cRGUyK3z6m799YVcDSWVo3HfiWHH5RKTNSXsCegT3C29iHccX8uW5ps4GTlSu0ZQ3L7tRQyAmcdYfF2pDOOKkq1CC0yPYiPBSLyl0PZs+rKZ5wZfUIYRSUu0+t45feMdeoz0DDFT0OfYiWIt95wJgfzeRpQHKPuzNZ6XeAWeOVoqJHe0vDD+5FX+KtgzbQ4sr7ugMTzz6R6aOrNAYnpQUlMWuLHl5nw== 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=g1NdUcLeUXF4fzJDgh+3FCiqhJxBXQ8qbrSj5WgwzKo=; b=dGVSt0ORMMQ8NlpzeOimNs2SxkM+lexFGeXAxFpxhTQQOpP7wXJXEZdb8G5nVSa7a1raK/Vh8rAX/Zp488koC2Z1iHSBhl9Y8ihm32rDh2tcbC4OUl/zZnFsJuDTIFY58GreAG6bCFCo1OfvQIaAcbF7qlwzmXiixRn7yBFUotAKdXR04/q9QzuuTd8sZ4y274/NLXiM/j//HVEs1Hb+RVi/PHzC30ETwK1jxUAaFmCjObnN8DClIGhZHwBS5CkLNfwPgUtKTzJqzZXtKClXTjtUxs34aGPQBfI2yc1K9JPKyrQ6xzA+btm+SIstVwH9nHOp7m+lzmhf3qWu0cdNFw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=g1NdUcLeUXF4fzJDgh+3FCiqhJxBXQ8qbrSj5WgwzKo=; b=XAJEEZbIfZfKGnXX6DjsKPWHY0IowbDPhiRP1WEF/BAGwKldnSYG4FHlhM9zWUySUWBT/kauJ5E+drFd3EEtf0Ifu8qe+P/yr6fGZ5CweVNHLWnwGmgJ0r3uBgntOp4ugHeFMtpzvW0KS9HHOSpNjT9TJBYyqt9h8hETPmb6EcI= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB9186.eurprd04.prod.outlook.com (2603:10a6:102:232::18) by AM5PR0401MB2580.eurprd04.prod.outlook.com (2603:10a6:203:38::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5525.10; Mon, 15 Aug 2022 21:40:16 +0000 Received: from PAXPR04MB9186.eurprd04.prod.outlook.com ([fe80::c5f1:b708:61db:a004]) by PAXPR04MB9186.eurprd04.prod.outlook.com ([fe80::c5f1:b708:61db:a004%5]) with mapi id 15.20.5504.028; Mon, 15 Aug 2022 21:40:16 +0000 From: Frank Li To: maz@kernel.org, tglx@linutronix.de, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, shawnguo@kernel.org, s.hauer@pengutronix.de, kw@linux.com, bhelgaas@google.com Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-pci@vger.kernel.org, peng.fan@nxp.com, aisheng.dong@nxp.com, jdmason@kudzu.us, kernel@pengutronix.de, festevam@gmail.com, linux-imx@nxp.com, kishon@ti.com, lorenzo.pieralisi@arm.com, ntb@lists.linux.dev, lznuaa@gmail.com Subject: [PATCH v5 4/4] pcie: endpoint: pci-epf-vntb: add endpoint MSI support Date: Mon, 15 Aug 2022 16:39:36 -0500 Message-Id: <20220815213936.2380439-5-Frank.Li@nxp.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220815213936.2380439-1-Frank.Li@nxp.com> References: <20220815213936.2380439-1-Frank.Li@nxp.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-ClientProxiedBy: CY5PR15CA0006.namprd15.prod.outlook.com (2603:10b6:930:14::9) To PAXPR04MB9186.eurprd04.prod.outlook.com (2603:10a6:102:232::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8a71fac6-145d-49f3-ae68-08da7f06be15 X-MS-TrafficTypeDiagnostic: AM5PR0401MB2580:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: WiXYlFO/TrmjrcBxVAI9xpchPGoyQAV0JN7pE3UPK1X1jJ1+e/+MCL8oP3Y1qR3J8AIq+heUiZte1DtXI5zTL10+kcE7Kvf2Ybc7kGK53NbOamIEymAjh2+p8m3hT9HDstJXo/6q1vIN8x2QTilXWgh1kPFKTGBeFmNSYNyNgTdFRIyDHC3fBQ6fDH7hLv3YrnBg8YS5P6+DCNXZctd2Pv+Y24n7LsqFxxiL8+76iYR4ZI1j2bqzljnir1wT9RjmVggwi0FMsjCt+gmNRLu4d6Yf/RydNGjZf93c42qYW1iGQXmTvZnbYFEwj/dhRJj8carf8fhCRRWldQW494/dEXleAhEFmzv/QrOWJ810bedluNWJnNe2OfoVNq58p0Z83BNgHhkNumSg8ClMiB+s6i0D04ELBB5k/jp3TaxIW9HKy5XvvF4LLQTa40APlInXYDkl+ELCdIXX6K3yVH9mcAaSkikTT9OKpWa35qCMW9rKHOzT39ipsZ1DMiARPIZuskxYdLu1l6M6SZmji4yBfi+ZyiGhQrtcQHISpZtBtmJf9t0tEQNBtq3cgnloOtAqvO7CJuVpSkrvg4A34pm9XXr7rEuF5NmOkfn+3M+EcmSQLT9Wy3amNzMQV9IaQry/Fg3kdM4TiClXJrG8vWLoNFvHA9kod1EoKBMyRbBlCQ7mtZWj/bN3pfRYZgO+3SX/RrPBrb8P7PTPNunhoW2m0C7/dpQdGSFcSacnqkDvhRRj3+9Ds94jIK4iZ6447bKY9Mo/PIO8ewAh/VUOxPyHz2PGBhDdTvWPc/abkKjq5Bw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9186.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(366004)(376002)(136003)(39860400002)(396003)(346002)(83380400001)(478600001)(5660300002)(1076003)(36756003)(186003)(6486002)(2616005)(38350700002)(8936002)(86362001)(41300700001)(316002)(7416002)(6666004)(4326008)(8676002)(66476007)(38100700002)(66556008)(6506007)(6512007)(52116002)(2906002)(66946007)(26005);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SHViSzI1SXoxbU4xbHZtSC9BTU9kK2dBUVlQNkhJS21WOGFFN0lKc2s2Zytk?= =?utf-8?B?SCt0QVJQWEp1MVJhNzJPeGxmcG5TRDdxY0hGYVI4VDlXODd1YU54dkIvRldL?= =?utf-8?B?UUhnYWVuNDgwM2VhYklqcENkSHJlaXNxWWlTSG0wN3FTcGd3a0xtSXowdFpZ?= =?utf-8?B?ZitqWHMyYlMzWEc0OGtsekh5M244M3hrUkVGQXFEbWtya0dmQkREeXBXeExp?= =?utf-8?B?TXdQNU5rU0xIUy90UndiOHkrSy9NUHlvbWw0ZEMyeFVjcDdYb1R0NTdmYVhF?= =?utf-8?B?STdlalFPV1UzenJneEJ1OG01Rk9MVmY4eVNPODBqQWNlSndlbTJ4QVpVNlB1?= =?utf-8?B?dkVFZm01R2p3TStUN1huZHdHeXg5OEh2b1JLU0FseHhHUXgvemVuMkd4SFJj?= =?utf-8?B?N2s0UWhQSlFMZ0xHN0lNYUl1cWtJaTlZNTlmRThUWXEzUk5DVFhlNFdEOUxX?= =?utf-8?B?aWt4VHM4U2VYUUlHcitBSmVzdk5uNFVVRlF6cnlOUWY1ZW92RzIralNrSFB3?= =?utf-8?B?TExscmxIRVJTUGRSVEc2aXRvdGJNOUw5RU9FbzJDcVZ6VDJBZy9UM0VseU5v?= =?utf-8?B?cVZBWlQ3MkNidm5CZlh2QVVoTG0vMHhzUHR1TFEvbHMzc0dDekFwR1hFdlRT?= =?utf-8?B?dkRoeCtwWENWYkVobEUxR25WZU9hQm1DRVJLMjAwbWlZU1g4VTdNaDh4UFZt?= =?utf-8?B?bFJCdWdYUm9rUzNxekJWd2VnMDhZZHU4aVBXcFNHRkVYdCs3eU1Fckh4d01W?= =?utf-8?B?eFVVbWdabEZscmhzS3dJNjRjeHNXZ3ZLaEFLZGZjcHMwOTE4SE5kTjRyOFpT?= =?utf-8?B?VW1maDVucE1kL2Z0eTBIRWNJLzcyNDVVV0FjSUVCSmI5QURDdkc4T3BWZDNL?= =?utf-8?B?UmlZc0JVNnU0QlgwRDYvRVNhSllreVVlZktmWVg0MU5hVjNaWFNpMmloNG8x?= =?utf-8?B?RVFscS84bG0ya2VoaWFGNkViR2RBK0o5NmlHTmtLaEZpdXNsbFVuMVJtZEx0?= =?utf-8?B?QWNQWWNDUjc5aTUwZXRKb1ZLc2NjcGswMHA4OFVXczRVMWV0RGJ1V09aVE1X?= =?utf-8?B?ajRhTy9vMlNCQmgrcWM4WHU1VXd1M0VmV21DalMrQW5YWnZiaDZOSFNRcUh1?= =?utf-8?B?T0tFRGlvTEc0SndEbmxUZElDT0tqd3NuR25ua2RUVmcycUF0MFhkYXc5Nmdx?= =?utf-8?B?Z1FVaExzZFhuUjhnR0pxRHI3UEt3TGVSM29wVFh0NXlrTmdQK2wzTjNnMTRB?= =?utf-8?B?QXUxT29vQ2dpNVhmREZMUDFXU05QVGh1aEozM1FMbDJYMVVWZ1FIZk1kUytx?= =?utf-8?B?VkZDMm5iYWRmbmxlWWlFQld3RzF2aTlpUGlBWDgyMHZXWHRsc210cStYNzRy?= =?utf-8?B?ZVhCbFBtMmtvUlVjdE9abGVhR2ovS05wd2xqRzZMZVU2cjkvNzdWNlBSaUR2?= =?utf-8?B?WFRRT1Z1WXdVTHJacmVuTFlPVkpOSW1ubG1mbmVKdnFOSHJQWXNyOUt6ajBF?= =?utf-8?B?ZGVROGIrWGRjUVcrYkd2eHBjckUzMFBnNnU4eE02YkQ1RWtPM3FUZmV4Lzhv?= =?utf-8?B?MmVsVWxUV3hiTi85cTNaKzJQU3ZMVE5WcWMxanJUTTdUdGJGbU5WWm1SZm9M?= =?utf-8?B?MXJSQ0tlYU4xOEZXL21zS254Um5lODNibnJoSGxiNEtLQkhBSjRRekUzejJB?= =?utf-8?B?dVMvQnk4SFFzTHJ1ZVY5eWgwL1N2ZVFKWDVrQXgrdDVGOThqUnZJa2J5OERi?= =?utf-8?B?VkRlWGpSZlNQWjNxNkh0ajhtcFZYM2VGbDdONnluQmRnLzV4NnYyQ2I5YUVT?= =?utf-8?B?VEg5YUtudUtHbFMzZTcwVlZoTUpVdlNIQk5yK2doTjlMZnJIOVBvY3Q0WjN2?= =?utf-8?B?Z1ZLOUh2L0JCWFF4blpyOThRb0R4ZFczRGZnNGlzOEhsbjFwS0ZCN1ZWMDlJ?= =?utf-8?B?VFczWjhrSm5DcEtYNnkwOEgxcXIvMjJQZHZOQUhTdkhDeDkrL28zaEg2a0l2?= =?utf-8?B?OUI1SCt0b0NPYVRmMmxUa1NWemJxdVRKV01qcEZKdHB2a2V5NnpxcER2TTVp?= =?utf-8?B?Sk5BazZscG5mZGIzZkpDaGJzaWNDZDhZcEQyTVVIY08xbmFHYTN3SksyUnQv?= =?utf-8?Q?qJYzz6UxdMV3KFkYwTGDOmmq6?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8a71fac6-145d-49f3-ae68-08da7f06be15 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9186.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Aug 2022 21:40:16.3844 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: P/q4EVnQonnJtPAk6029ZoC4uMQ7z6LggR7Ps1GogxJTnrZo9PgyCfKl713xxHC1POuaBzeSElHSr7duHPneow== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0401MB2580 Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org ┌───────┐ ┌──────────┐ │ │ │ │ ┌─────────────┐ │ │ │ PCI Host │ │ MSI │◄┐ │ │ │ │ │ Controller │ │ │ │ │ │ └─────────────┘ └─┼───────┼──────────┼─BAR0 │ │ PCI │ │ BAR1 │ │ Func │ │ BAR2 │ │ │ │ BAR3 │ │ │ │ BAR4 │ │ ├─────────►│ │ └───────┘ └──────────┘ Linux supports endpoint functions. PCI Host write BAR space like write to memory. The EP side can't know memory changed by the host driver. PCI Spec has not defined a standard method to do that. Only define MSI(x) to let EP notified RC status change. The basic idea is to trigger an IRQ when PCI RC writes to a memory address. That's what MSI controller provided. EP drivers just need to request a platform MSI interrupt, struct msi_msg *msg will pass down a memory address and data. EP driver will map such memory address to one of PCI BAR. Host just writes such an address to trigger EP side irq. Add MSI support for pci-epf-vntb. pci-epf-vntb driver query if system have MSI controller. Setup doorbell address according to struct msi_msg. So PCIe host can write this doorbell address to triger EP side's irq. If no MSI controller exist, fall back to software polling. Signed-off-by: Frank Li --- drivers/pci/endpoint/functions/pci-epf-vntb.c | 134 +++++++++++++++--- 1 file changed, 112 insertions(+), 22 deletions(-) diff --git a/drivers/pci/endpoint/functions/pci-epf-vntb.c b/drivers/pci/endpoint/functions/pci-epf-vntb.c index 1466dd1904175..ad4f7ec8a39fc 100644 --- a/drivers/pci/endpoint/functions/pci-epf-vntb.c +++ b/drivers/pci/endpoint/functions/pci-epf-vntb.c @@ -44,6 +44,7 @@ #include #include #include +#include static struct workqueue_struct *kpcintb_workqueue; @@ -143,6 +144,8 @@ struct epf_ntb { void __iomem *vpci_mw_addr[MAX_MW]; struct delayed_work cmd_handler; + + int msi_virqbase; }; #define to_epf_ntb(epf_group) container_of((epf_group), struct epf_ntb, group) @@ -253,7 +256,7 @@ static void epf_ntb_cmd_handler(struct work_struct *work) ntb = container_of(work, struct epf_ntb, cmd_handler.work); - for (i = 1; i < ntb->db_count; i++) { + for (i = 1; i < ntb->db_count && !ntb->epf_db_phy; i++) { if (readl(ntb->epf_db + i * 4)) { if (readl(ntb->epf_db + i * 4)) ntb->db |= 1 << (i - 1); @@ -454,11 +457,9 @@ static int epf_ntb_config_spad_bar_alloc(struct epf_ntb *ntb) ctrl->num_mws = ntb->num_mws; ntb->spad_size = spad_size; - ctrl->db_entry_size = 4; - for (i = 0; i < ntb->db_count; i++) { ntb->reg->db_data[i] = 1 + i; - ntb->reg->db_offset[i] = 0; + ntb->reg->db_offset[i] = 4 * i; } return 0; @@ -509,6 +510,28 @@ static int epf_ntb_configure_interrupt(struct epf_ntb *ntb) return 0; } +static int epf_ntb_db_size(struct epf_ntb *ntb) +{ + const struct pci_epc_features *epc_features; + size_t size = 4 * ntb->db_count; + u32 align; + + epc_features = pci_epc_get_features(ntb->epf->epc, + ntb->epf->func_no, + ntb->epf->vfunc_no); + align = epc_features->align; + + if (size < 128) + size = 128; + + if (align) + size = ALIGN(size, align); + else + size = roundup_pow_of_two(size); + + return size; +} + /** * epf_ntb_db_bar_init() - Configure Doorbell window BARs * @ntb: NTB device that facilitates communication between HOST and vHOST @@ -520,35 +543,33 @@ static int epf_ntb_db_bar_init(struct epf_ntb *ntb) struct device *dev = &ntb->epf->dev; int ret; struct pci_epf_bar *epf_bar; - void __iomem *mw_addr; + void __iomem *mw_addr = NULL; enum pci_barno barno; - size_t size = 4 * ntb->db_count; + size_t size; epc_features = pci_epc_get_features(ntb->epf->epc, ntb->epf->func_no, ntb->epf->vfunc_no); align = epc_features->align; - - if (size < 128) - size = 128; - - if (align) - size = ALIGN(size, align); - else - size = roundup_pow_of_two(size); + size = epf_ntb_db_size(ntb); barno = ntb->epf_ntb_bar[BAR_DB]; + epf_bar = &ntb->epf->bar[barno]; - mw_addr = pci_epf_alloc_space(ntb->epf, size, barno, align, 0); - if (!mw_addr) { - dev_err(dev, "Failed to allocate OB address\n"); - return -ENOMEM; + if (!ntb->epf_db_phy) { + mw_addr = pci_epf_alloc_space(ntb->epf, size, barno, align, 0); + if (!mw_addr) { + dev_err(dev, "Failed to allocate OB address\n"); + return -ENOMEM; + } + } else { + epf_bar->phys_addr = ntb->epf_db_phy; + epf_bar->barno = barno; + epf_bar->size = size; } ntb->epf_db = mw_addr; - epf_bar = &ntb->epf->bar[barno]; - ret = pci_epc_set_bar(ntb->epf->epc, ntb->epf->func_no, ntb->epf->vfunc_no, epf_bar); if (ret) { dev_err(dev, "Doorbell BAR set failed\n"); @@ -704,6 +725,74 @@ static int epf_ntb_init_epc_bar(struct epf_ntb *ntb) return 0; } +static void epf_ntb_write_msi_msg(struct msi_desc *desc, struct msi_msg *msg) +{ + struct epf_ntb *ntb = dev_get_drvdata(desc->dev); + struct epf_ntb_ctrl *reg = ntb->reg; + int size = epf_ntb_db_size(ntb); + u64 addr; + + addr = msg->address_hi; + addr <<= 32; + addr |= msg->address_lo; + + reg->db_data[desc->msi_index] = msg->data; + + if (desc->msi_index == 0) + ntb->epf_db_phy = round_down(addr, size); + + reg->db_offset[desc->msi_index] = addr - ntb->epf_db_phy; +} + +static irqreturn_t epf_ntb_interrupt_handler(int irq, void *data) +{ + struct epf_ntb *ntb = data; + int index; + + index = irq - ntb->msi_virqbase; + ntb->db |= 1 << (index - 1); + ntb_db_event(&ntb->ntb, index); + + return IRQ_HANDLED; +} + +static void epf_ntb_epc_msi_init(struct epf_ntb *ntb) +{ + struct device *dev = &ntb->epf->dev; + struct irq_domain *domain; + int virq; + int ret; + int i; + + domain = dev_get_msi_domain(ntb->epf->epc->dev.parent); + if (!domain) + return; + + dev_set_msi_domain(dev, domain); + + if (platform_msi_domain_alloc_irqs(&ntb->epf->dev, + ntb->db_count, + epf_ntb_write_msi_msg)) { + dev_info(dev, "Can't allocate MSI, fall back to poll mode\n"); + return; + } + + dev_info(dev, "vntb use MSI as doorbell\n"); + + for (i = 0; i < ntb->db_count; i++) { + virq = msi_get_virq(dev, i); + ret = devm_request_irq(dev, virq, + epf_ntb_interrupt_handler, 0, + "ntb", ntb); + + if (ret) + dev_err(dev, "devm_request_irq() failure\n"); + + if (!i) + ntb->msi_virqbase = virq; + } +} + /** * epf_ntb_epc_init() - Initialize NTB interface * @ntb: NTB device that facilitates communication between HOST and vHOST2 @@ -1299,14 +1388,15 @@ static int epf_ntb_bind(struct pci_epf *epf) goto err_bar_alloc; } + epf_set_drvdata(epf, ntb); + epf_ntb_epc_msi_init(ntb); + ret = epf_ntb_epc_init(ntb); if (ret) { dev_err(dev, "Failed to initialize EPC\n"); goto err_bar_alloc; } - epf_set_drvdata(epf, ntb); - pci_space[0] = (ntb->vntb_pid << 16) | ntb->vntb_vid; pci_vntb_table[0].vendor = ntb->vntb_vid; pci_vntb_table[0].device = ntb->vntb_pid; -- 2.35.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 40EDBC25B08 for ; Mon, 15 Aug 2022 21:43:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=UdvQwyeaeWi92Dea9uIy1cBLbnvjSti9btrp/lpvt8o=; b=I7+vEBn4WE6IPO Zf8fGEuw5gBW0qHkCgO8pQTBnMgLRwJhsJGpkfyBEo52fGFoxSL9n8yUUrQFgcDRSNxcd3chbShD9 1ckBVsfttrkUfgfYhOFkHUslUA4yhblNqrUQ22dmbfXqYQtJMBw8h63xVe4Mp8aaJS/VEL7t813wO 1X7af9BEFzjKFcLj3oNMKt/LEfUTt3w1mnMqkkdfHzoIjLV6Wutw2M0NCUpRmde/AmlhwRl5lK3Nq x7ucdwpF4Hi1M7OkqJjx+bjyxvAnDJlbBqOezZ8wjsPFSVPnYxwK7EMkFw0SNpvFPEt/YYKsBCAXv OJkV5hjfAtUdgmyXLUzg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oNhqQ-0062dE-4e; Mon, 15 Aug 2022 21:41:59 +0000 Received: from mail-eopbgr10055.outbound.protection.outlook.com ([40.107.1.55] helo=EUR02-HE1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oNhor-0060wM-0C for linux-arm-kernel@lists.infradead.org; Mon, 15 Aug 2022 21:40:23 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=U09tWjYbMbWPGFcg5jArO5SZsOgWn5vakCtu8ypzSC080QdWvMwJGVtHynGeKz+WYsAZf29BDHfkC7/yqlEEPoG9pvDtyM3sEa1tn2Z6sc24zWvtfXxE0I8cRGUyK3z6m799YVcDSWVo3HfiWHH5RKTNSXsCegT3C29iHccX8uW5ps4GTlSu0ZQ3L7tRQyAmcdYfF2pDOOKkq1CC0yPYiPBSLyl0PZs+rKZ5wZfUIYRSUu0+t45feMdeoz0DDFT0OfYiWIt95wJgfzeRpQHKPuzNZ6XeAWeOVoqJHe0vDD+5FX+KtgzbQ4sr7ugMTzz6R6aOrNAYnpQUlMWuLHl5nw== 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=g1NdUcLeUXF4fzJDgh+3FCiqhJxBXQ8qbrSj5WgwzKo=; b=dGVSt0ORMMQ8NlpzeOimNs2SxkM+lexFGeXAxFpxhTQQOpP7wXJXEZdb8G5nVSa7a1raK/Vh8rAX/Zp488koC2Z1iHSBhl9Y8ihm32rDh2tcbC4OUl/zZnFsJuDTIFY58GreAG6bCFCo1OfvQIaAcbF7qlwzmXiixRn7yBFUotAKdXR04/q9QzuuTd8sZ4y274/NLXiM/j//HVEs1Hb+RVi/PHzC30ETwK1jxUAaFmCjObnN8DClIGhZHwBS5CkLNfwPgUtKTzJqzZXtKClXTjtUxs34aGPQBfI2yc1K9JPKyrQ6xzA+btm+SIstVwH9nHOp7m+lzmhf3qWu0cdNFw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=g1NdUcLeUXF4fzJDgh+3FCiqhJxBXQ8qbrSj5WgwzKo=; b=XAJEEZbIfZfKGnXX6DjsKPWHY0IowbDPhiRP1WEF/BAGwKldnSYG4FHlhM9zWUySUWBT/kauJ5E+drFd3EEtf0Ifu8qe+P/yr6fGZ5CweVNHLWnwGmgJ0r3uBgntOp4ugHeFMtpzvW0KS9HHOSpNjT9TJBYyqt9h8hETPmb6EcI= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB9186.eurprd04.prod.outlook.com (2603:10a6:102:232::18) by AM5PR0401MB2580.eurprd04.prod.outlook.com (2603:10a6:203:38::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5525.10; Mon, 15 Aug 2022 21:40:16 +0000 Received: from PAXPR04MB9186.eurprd04.prod.outlook.com ([fe80::c5f1:b708:61db:a004]) by PAXPR04MB9186.eurprd04.prod.outlook.com ([fe80::c5f1:b708:61db:a004%5]) with mapi id 15.20.5504.028; Mon, 15 Aug 2022 21:40:16 +0000 From: Frank Li To: maz@kernel.org, tglx@linutronix.de, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, shawnguo@kernel.org, s.hauer@pengutronix.de, kw@linux.com, bhelgaas@google.com Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-pci@vger.kernel.org, peng.fan@nxp.com, aisheng.dong@nxp.com, jdmason@kudzu.us, kernel@pengutronix.de, festevam@gmail.com, linux-imx@nxp.com, kishon@ti.com, lorenzo.pieralisi@arm.com, ntb@lists.linux.dev, lznuaa@gmail.com Subject: [PATCH v5 4/4] pcie: endpoint: pci-epf-vntb: add endpoint MSI support Date: Mon, 15 Aug 2022 16:39:36 -0500 Message-Id: <20220815213936.2380439-5-Frank.Li@nxp.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220815213936.2380439-1-Frank.Li@nxp.com> References: <20220815213936.2380439-1-Frank.Li@nxp.com> X-ClientProxiedBy: CY5PR15CA0006.namprd15.prod.outlook.com (2603:10b6:930:14::9) To PAXPR04MB9186.eurprd04.prod.outlook.com (2603:10a6:102:232::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8a71fac6-145d-49f3-ae68-08da7f06be15 X-MS-TrafficTypeDiagnostic: AM5PR0401MB2580:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: WiXYlFO/TrmjrcBxVAI9xpchPGoyQAV0JN7pE3UPK1X1jJ1+e/+MCL8oP3Y1qR3J8AIq+heUiZte1DtXI5zTL10+kcE7Kvf2Ybc7kGK53NbOamIEymAjh2+p8m3hT9HDstJXo/6q1vIN8x2QTilXWgh1kPFKTGBeFmNSYNyNgTdFRIyDHC3fBQ6fDH7hLv3YrnBg8YS5P6+DCNXZctd2Pv+Y24n7LsqFxxiL8+76iYR4ZI1j2bqzljnir1wT9RjmVggwi0FMsjCt+gmNRLu4d6Yf/RydNGjZf93c42qYW1iGQXmTvZnbYFEwj/dhRJj8carf8fhCRRWldQW494/dEXleAhEFmzv/QrOWJ810bedluNWJnNe2OfoVNq58p0Z83BNgHhkNumSg8ClMiB+s6i0D04ELBB5k/jp3TaxIW9HKy5XvvF4LLQTa40APlInXYDkl+ELCdIXX6K3yVH9mcAaSkikTT9OKpWa35qCMW9rKHOzT39ipsZ1DMiARPIZuskxYdLu1l6M6SZmji4yBfi+ZyiGhQrtcQHISpZtBtmJf9t0tEQNBtq3cgnloOtAqvO7CJuVpSkrvg4A34pm9XXr7rEuF5NmOkfn+3M+EcmSQLT9Wy3amNzMQV9IaQry/Fg3kdM4TiClXJrG8vWLoNFvHA9kod1EoKBMyRbBlCQ7mtZWj/bN3pfRYZgO+3SX/RrPBrb8P7PTPNunhoW2m0C7/dpQdGSFcSacnqkDvhRRj3+9Ds94jIK4iZ6447bKY9Mo/PIO8ewAh/VUOxPyHz2PGBhDdTvWPc/abkKjq5Bw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9186.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(366004)(376002)(136003)(39860400002)(396003)(346002)(83380400001)(478600001)(5660300002)(1076003)(36756003)(186003)(6486002)(2616005)(38350700002)(8936002)(86362001)(41300700001)(316002)(7416002)(6666004)(4326008)(8676002)(66476007)(38100700002)(66556008)(6506007)(6512007)(52116002)(2906002)(66946007)(26005);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SHViSzI1SXoxbU4xbHZtSC9BTU9kK2dBUVlQNkhJS21WOGFFN0lKc2s2Zytk?= =?utf-8?B?SCt0QVJQWEp1MVJhNzJPeGxmcG5TRDdxY0hGYVI4VDlXODd1YU54dkIvRldL?= =?utf-8?B?UUhnYWVuNDgwM2VhYklqcENkSHJlaXNxWWlTSG0wN3FTcGd3a0xtSXowdFpZ?= =?utf-8?B?ZitqWHMyYlMzWEc0OGtsekh5M244M3hrUkVGQXFEbWtya0dmQkREeXBXeExp?= =?utf-8?B?TXdQNU5rU0xIUy90UndiOHkrSy9NUHlvbWw0ZEMyeFVjcDdYb1R0NTdmYVhF?= =?utf-8?B?STdlalFPV1UzenJneEJ1OG01Rk9MVmY4eVNPODBqQWNlSndlbTJ4QVpVNlB1?= =?utf-8?B?dkVFZm01R2p3TStUN1huZHdHeXg5OEh2b1JLU0FseHhHUXgvemVuMkd4SFJj?= =?utf-8?B?N2s0UWhQSlFMZ0xHN0lNYUl1cWtJaTlZNTlmRThUWXEzUk5DVFhlNFdEOUxX?= =?utf-8?B?aWt4VHM4U2VYUUlHcitBSmVzdk5uNFVVRlF6cnlOUWY1ZW92RzIralNrSFB3?= =?utf-8?B?TExscmxIRVJTUGRSVEc2aXRvdGJNOUw5RU9FbzJDcVZ6VDJBZy9UM0VseU5v?= =?utf-8?B?cVZBWlQ3MkNidm5CZlh2QVVoTG0vMHhzUHR1TFEvbHMzc0dDekFwR1hFdlRT?= =?utf-8?B?dkRoeCtwWENWYkVobEUxR25WZU9hQm1DRVJLMjAwbWlZU1g4VTdNaDh4UFZt?= =?utf-8?B?bFJCdWdYUm9rUzNxekJWd2VnMDhZZHU4aVBXcFNHRkVYdCs3eU1Fckh4d01W?= =?utf-8?B?eFVVbWdabEZscmhzS3dJNjRjeHNXZ3ZLaEFLZGZjcHMwOTE4SE5kTjRyOFpT?= =?utf-8?B?VW1maDVucE1kL2Z0eTBIRWNJLzcyNDVVV0FjSUVCSmI5QURDdkc4T3BWZDNL?= =?utf-8?B?UmlZc0JVNnU0QlgwRDYvRVNhSllreVVlZktmWVg0MU5hVjNaWFNpMmloNG8x?= =?utf-8?B?RVFscS84bG0ya2VoaWFGNkViR2RBK0o5NmlHTmtLaEZpdXNsbFVuMVJtZEx0?= =?utf-8?B?QWNQWWNDUjc5aTUwZXRKb1ZLc2NjcGswMHA4OFVXczRVMWV0RGJ1V09aVE1X?= =?utf-8?B?ajRhTy9vMlNCQmgrcWM4WHU1VXd1M0VmV21DalMrQW5YWnZiaDZOSFNRcUh1?= =?utf-8?B?T0tFRGlvTEc0SndEbmxUZElDT0tqd3NuR25ua2RUVmcycUF0MFhkYXc5Nmdx?= =?utf-8?B?Z1FVaExzZFhuUjhnR0pxRHI3UEt3TGVSM29wVFh0NXlrTmdQK2wzTjNnMTRB?= =?utf-8?B?QXUxT29vQ2dpNVhmREZMUDFXU05QVGh1aEozM1FMbDJYMVVWZ1FIZk1kUytx?= =?utf-8?B?VkZDMm5iYWRmbmxlWWlFQld3RzF2aTlpUGlBWDgyMHZXWHRsc210cStYNzRy?= =?utf-8?B?ZVhCbFBtMmtvUlVjdE9abGVhR2ovS05wd2xqRzZMZVU2cjkvNzdWNlBSaUR2?= =?utf-8?B?WFRRT1Z1WXdVTHJacmVuTFlPVkpOSW1ubG1mbmVKdnFOSHJQWXNyOUt6ajBF?= =?utf-8?B?ZGVROGIrWGRjUVcrYkd2eHBjckUzMFBnNnU4eE02YkQ1RWtPM3FUZmV4Lzhv?= =?utf-8?B?MmVsVWxUV3hiTi85cTNaKzJQU3ZMVE5WcWMxanJUTTdUdGJGbU5WWm1SZm9M?= =?utf-8?B?MXJSQ0tlYU4xOEZXL21zS254Um5lODNibnJoSGxiNEtLQkhBSjRRekUzejJB?= =?utf-8?B?dVMvQnk4SFFzTHJ1ZVY5eWgwL1N2ZVFKWDVrQXgrdDVGOThqUnZJa2J5OERi?= =?utf-8?B?VkRlWGpSZlNQWjNxNkh0ajhtcFZYM2VGbDdONnluQmRnLzV4NnYyQ2I5YUVT?= =?utf-8?B?VEg5YUtudUtHbFMzZTcwVlZoTUpVdlNIQk5yK2doTjlMZnJIOVBvY3Q0WjN2?= =?utf-8?B?Z1ZLOUh2L0JCWFF4blpyOThRb0R4ZFczRGZnNGlzOEhsbjFwS0ZCN1ZWMDlJ?= =?utf-8?B?VFczWjhrSm5DcEtYNnkwOEgxcXIvMjJQZHZOQUhTdkhDeDkrL28zaEg2a0l2?= =?utf-8?B?OUI1SCt0b0NPYVRmMmxUa1NWemJxdVRKV01qcEZKdHB2a2V5NnpxcER2TTVp?= =?utf-8?B?Sk5BazZscG5mZGIzZkpDaGJzaWNDZDhZcEQyTVVIY08xbmFHYTN3SksyUnQv?= =?utf-8?Q?qJYzz6UxdMV3KFkYwTGDOmmq6?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8a71fac6-145d-49f3-ae68-08da7f06be15 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9186.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Aug 2022 21:40:16.3844 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: P/q4EVnQonnJtPAk6029ZoC4uMQ7z6LggR7Ps1GogxJTnrZo9PgyCfKl713xxHC1POuaBzeSElHSr7duHPneow== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0401MB2580 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220815_144021_182240_5C0509FE X-CRM114-Status: GOOD ( 21.79 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org ICAgICAgICAgICAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAgICAg ICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkAogICAgICAgICAgICAgICAg ICAgICAgICDilIIgICAgICAg4pSCICAgICAgICAgIOKUgiAgICAgICAgICDilIIKICAgICAg4pSM 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAg4pSCICAgICAgIOKU giAgICAgICAgICDilIIgUENJIEhvc3Qg4pSCCiAgICAgIOKUgiBNU0kgICAgICAgICDilILil4Ti lJAg4pSCICAgICAgIOKUgiAgICAgICAgICDilIIgICAgICAgICAg4pSCCiAgICAgIOKUgiBDb250 cm9sbGVyICDilIIg4pSCIOKUgiAgICAgICDilIIgICAgICAgICAg4pSCICAgICAgICAgIOKUggog ICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJgg4pSU4pSA 4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pS84pSAQkFSMCAgICAg4pSCCiAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBQQ0kgICDilIIg ICAgICAgICAg4pSCIEJBUjEgICAgIOKUggogICAgICAgICAgICAgICAgICAgICAgICDilIIgRnVu YyAg4pSCICAgICAgICAgIOKUgiBCQVIyICAgICDilIIKICAgICAgICAgICAgICAgICAgICAgICAg 4pSCICAgICAgIOKUgiAgICAgICAgICDilIIgQkFSMyAgICAg4pSCCiAgICAgICAgICAgICAgICAg ICAgICAgIOKUgiAgICAgICDilIIgICAgICAgICAg4pSCIEJBUjQgICAgIOKUggogICAgICAgICAg ICAgICAgICAgICAgICDilIIgICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pa6 4pSCICAgICAgICAgIOKUggogICAgICAgICAgICAgICAgICAgICAgICDilJTilIDilIDilIDilIDi lIDilIDilIDilJggICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSY CgpMaW51eCBzdXBwb3J0cyBlbmRwb2ludCBmdW5jdGlvbnMuIFBDSSBIb3N0IHdyaXRlIEJBUjxu PiBzcGFjZSBsaWtlIHdyaXRlCnRvIG1lbW9yeS4gVGhlIEVQIHNpZGUgY2FuJ3Qga25vdyBtZW1v cnkgY2hhbmdlZCBieSB0aGUgaG9zdCBkcml2ZXIuCgpQQ0kgU3BlYyBoYXMgbm90IGRlZmluZWQg YSBzdGFuZGFyZCBtZXRob2QgdG8gZG8gdGhhdC4gT25seSBkZWZpbmUgTVNJKHgpCnRvIGxldCBF UCBub3RpZmllZCBSQyBzdGF0dXMgY2hhbmdlLgoKVGhlIGJhc2ljIGlkZWEgaXMgdG8gdHJpZ2dl ciBhbiBJUlEgd2hlbiBQQ0kgUkMgd3JpdGVzIHRvIGEgbWVtb3J5CmFkZHJlc3MuIFRoYXQncyB3 aGF0IE1TSSBjb250cm9sbGVyIHByb3ZpZGVkLiBFUCBkcml2ZXJzIGp1c3QgbmVlZCB0bwpyZXF1 ZXN0IGEgcGxhdGZvcm0gTVNJIGludGVycnVwdCwgc3RydWN0IG1zaV9tc2cgKm1zZyB3aWxsIHBh c3MgZG93biBhCm1lbW9yeSBhZGRyZXNzIGFuZCBkYXRhLiBFUCBkcml2ZXIgd2lsbCBtYXAgc3Vj aCBtZW1vcnkgYWRkcmVzcyB0byBvbmUgb2YKUENJIEJBUjxuPi4gIEhvc3QganVzdCB3cml0ZXMg c3VjaCBhbiBhZGRyZXNzIHRvIHRyaWdnZXIgRVAgc2lkZSBpcnEuCgpBZGQgTVNJIHN1cHBvcnQg Zm9yIHBjaS1lcGYtdm50Yi4gcGNpLWVwZi12bnRiIGRyaXZlciBxdWVyeSBpZiBzeXN0ZW0KaGF2 ZSBNU0kgY29udHJvbGxlci4gU2V0dXAgZG9vcmJlbGwgYWRkcmVzcyBhY2NvcmRpbmcgdG8gc3Ry dWN0IG1zaV9tc2cuCgpTbyBQQ0llIGhvc3QgY2FuIHdyaXRlIHRoaXMgZG9vcmJlbGwgYWRkcmVz cyB0byB0cmlnZXIgRVAgc2lkZSdzIGlycS4KCklmIG5vIE1TSSBjb250cm9sbGVyIGV4aXN0LCBm YWxsIGJhY2sgdG8gc29mdHdhcmUgcG9sbGluZy4KClNpZ25lZC1vZmYtYnk6IEZyYW5rIExpIDxG cmFuay5MaUBueHAuY29tPgotLS0KIGRyaXZlcnMvcGNpL2VuZHBvaW50L2Z1bmN0aW9ucy9wY2kt ZXBmLXZudGIuYyB8IDEzNCArKysrKysrKysrKysrKystLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMTIg aW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kv ZW5kcG9pbnQvZnVuY3Rpb25zL3BjaS1lcGYtdm50Yi5jIGIvZHJpdmVycy9wY2kvZW5kcG9pbnQv ZnVuY3Rpb25zL3BjaS1lcGYtdm50Yi5jCmluZGV4IDE0NjZkZDE5MDQxNzUuLmFkNGY3ZWM4YTM5 ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2VuZHBvaW50L2Z1bmN0aW9ucy9wY2ktZXBmLXZu dGIuYworKysgYi9kcml2ZXJzL3BjaS9lbmRwb2ludC9mdW5jdGlvbnMvcGNpLWVwZi12bnRiLmMK QEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2ktZXBjLmg+CiAjaW5jbHVkZSA8 bGludXgvcGNpLWVwZi5oPgogI2luY2x1ZGUgPGxpbnV4L250Yi5oPgorI2luY2x1ZGUgPGxpbnV4 L21zaS5oPgogCiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmtwY2ludGJfd29ya3F1 ZXVlOwogCkBAIC0xNDMsNiArMTQ0LDggQEAgc3RydWN0IGVwZl9udGIgewogCXZvaWQgX19pb21l bSAqdnBjaV9td19hZGRyW01BWF9NV107CiAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGNtZF9oYW5k bGVyOworCisJaW50IG1zaV92aXJxYmFzZTsKIH07CiAKICNkZWZpbmUgdG9fZXBmX250YihlcGZf Z3JvdXApIGNvbnRhaW5lcl9vZigoZXBmX2dyb3VwKSwgc3RydWN0IGVwZl9udGIsIGdyb3VwKQpA QCAtMjUzLDcgKzI1Niw3IEBAIHN0YXRpYyB2b2lkIGVwZl9udGJfY21kX2hhbmRsZXIoc3RydWN0 IHdvcmtfc3RydWN0ICp3b3JrKQogCiAJbnRiID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBl cGZfbnRiLCBjbWRfaGFuZGxlci53b3JrKTsKIAotCWZvciAoaSA9IDE7IGkgPCBudGItPmRiX2Nv dW50OyBpKyspIHsKKwlmb3IgKGkgPSAxOyBpIDwgbnRiLT5kYl9jb3VudCAmJiAhbnRiLT5lcGZf ZGJfcGh5OyBpKyspIHsKIAkJaWYgKHJlYWRsKG50Yi0+ZXBmX2RiICsgaSAqIDQpKSB7CiAJCQlp ZiAocmVhZGwobnRiLT5lcGZfZGIgKyBpICogNCkpCiAJCQkJbnRiLT5kYiB8PSAxIDw8IChpIC0g MSk7CkBAIC00NTQsMTEgKzQ1Nyw5IEBAIHN0YXRpYyBpbnQgZXBmX250Yl9jb25maWdfc3BhZF9i YXJfYWxsb2Moc3RydWN0IGVwZl9udGIgKm50YikKIAljdHJsLT5udW1fbXdzID0gbnRiLT5udW1f bXdzOwogCW50Yi0+c3BhZF9zaXplID0gc3BhZF9zaXplOwogCi0JY3RybC0+ZGJfZW50cnlfc2l6 ZSA9IDQ7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgbnRiLT5kYl9jb3VudDsgaSsrKSB7CiAJCW50Yi0+ cmVnLT5kYl9kYXRhW2ldID0gMSArIGk7Ci0JCW50Yi0+cmVnLT5kYl9vZmZzZXRbaV0gPSAwOwor CQludGItPnJlZy0+ZGJfb2Zmc2V0W2ldID0gNCAqIGk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC01 MDksNiArNTEwLDI4IEBAIHN0YXRpYyBpbnQgZXBmX250Yl9jb25maWd1cmVfaW50ZXJydXB0KHN0 cnVjdCBlcGZfbnRiICpudGIpCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZXBmX250Yl9k Yl9zaXplKHN0cnVjdCBlcGZfbnRiICpudGIpCit7CisJY29uc3Qgc3RydWN0IHBjaV9lcGNfZmVh dHVyZXMgKmVwY19mZWF0dXJlczsKKwlzaXplX3Qgc2l6ZSA9IDQgKiBudGItPmRiX2NvdW50Owor CXUzMiBhbGlnbjsKKworCWVwY19mZWF0dXJlcyA9IHBjaV9lcGNfZ2V0X2ZlYXR1cmVzKG50Yi0+ ZXBmLT5lcGMsCisJCQkJCSAgICBudGItPmVwZi0+ZnVuY19ubywKKwkJCQkJICAgIG50Yi0+ZXBm LT52ZnVuY19ubyk7CisJYWxpZ24gPSBlcGNfZmVhdHVyZXMtPmFsaWduOworCisJaWYgKHNpemUg PCAxMjgpCisJCXNpemUgPSAxMjg7CisKKwlpZiAoYWxpZ24pCisJCXNpemUgPSBBTElHTihzaXpl LCBhbGlnbik7CisJZWxzZQorCQlzaXplID0gcm91bmR1cF9wb3dfb2ZfdHdvKHNpemUpOworCisJ cmV0dXJuIHNpemU7Cit9CisKIC8qKgogICogZXBmX250Yl9kYl9iYXJfaW5pdCgpIC0gQ29uZmln dXJlIERvb3JiZWxsIHdpbmRvdyBCQVJzCiAgKiBAbnRiOiBOVEIgZGV2aWNlIHRoYXQgZmFjaWxp dGF0ZXMgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIEhPU1QgYW5kIHZIT1NUCkBAIC01MjAsMzUgKzU0 MywzMyBAQCBzdGF0aWMgaW50IGVwZl9udGJfZGJfYmFyX2luaXQoc3RydWN0IGVwZl9udGIgKm50 YikKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmbnRiLT5lcGYtPmRldjsKIAlpbnQgcmV0OwogCXN0 cnVjdCBwY2lfZXBmX2JhciAqZXBmX2JhcjsKLQl2b2lkIF9faW9tZW0gKm13X2FkZHI7CisJdm9p ZCBfX2lvbWVtICptd19hZGRyID0gTlVMTDsKIAllbnVtIHBjaV9iYXJubyBiYXJubzsKLQlzaXpl X3Qgc2l6ZSA9IDQgKiBudGItPmRiX2NvdW50OworCXNpemVfdCBzaXplOwogCiAJZXBjX2ZlYXR1 cmVzID0gcGNpX2VwY19nZXRfZmVhdHVyZXMobnRiLT5lcGYtPmVwYywKIAkJCQkJICAgIG50Yi0+ ZXBmLT5mdW5jX25vLAogCQkJCQkgICAgbnRiLT5lcGYtPnZmdW5jX25vKTsKIAlhbGlnbiA9IGVw Y19mZWF0dXJlcy0+YWxpZ247Ci0KLQlpZiAoc2l6ZSA8IDEyOCkKLQkJc2l6ZSA9IDEyODsKLQot CWlmIChhbGlnbikKLQkJc2l6ZSA9IEFMSUdOKHNpemUsIGFsaWduKTsKLQllbHNlCi0JCXNpemUg PSByb3VuZHVwX3Bvd19vZl90d28oc2l6ZSk7CisJc2l6ZSA9IGVwZl9udGJfZGJfc2l6ZShudGIp OwogCiAJYmFybm8gPSBudGItPmVwZl9udGJfYmFyW0JBUl9EQl07CisJZXBmX2JhciA9ICZudGIt PmVwZi0+YmFyW2Jhcm5vXTsKIAotCW13X2FkZHIgPSBwY2lfZXBmX2FsbG9jX3NwYWNlKG50Yi0+ ZXBmLCBzaXplLCBiYXJubywgYWxpZ24sIDApOwotCWlmICghbXdfYWRkcikgewotCQlkZXZfZXJy KGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBPQiBhZGRyZXNzXG4iKTsKLQkJcmV0dXJuIC1FTk9N RU07CisJaWYgKCFudGItPmVwZl9kYl9waHkpIHsKKwkJbXdfYWRkciA9IHBjaV9lcGZfYWxsb2Nf c3BhY2UobnRiLT5lcGYsIHNpemUsIGJhcm5vLCBhbGlnbiwgMCk7CisJCWlmICghbXdfYWRkcikg eworCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgT0IgYWRkcmVzc1xuIik7CisJ CQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0gZWxzZSB7CisJCWVwZl9iYXItPnBoeXNfYWRkciA9 IG50Yi0+ZXBmX2RiX3BoeTsKKwkJZXBmX2Jhci0+YmFybm8gPSBiYXJubzsKKwkJZXBmX2Jhci0+ c2l6ZSA9IHNpemU7CiAJfQogCiAJbnRiLT5lcGZfZGIgPSBtd19hZGRyOwogCi0JZXBmX2JhciA9 ICZudGItPmVwZi0+YmFyW2Jhcm5vXTsKLQogCXJldCA9IHBjaV9lcGNfc2V0X2JhcihudGItPmVw Zi0+ZXBjLCBudGItPmVwZi0+ZnVuY19ubywgbnRiLT5lcGYtPnZmdW5jX25vLCBlcGZfYmFyKTsK IAlpZiAocmV0KSB7CiAJCWRldl9lcnIoZGV2LCAiRG9vcmJlbGwgQkFSIHNldCBmYWlsZWRcbiIp OwpAQCAtNzA0LDYgKzcyNSw3NCBAQCBzdGF0aWMgaW50IGVwZl9udGJfaW5pdF9lcGNfYmFyKHN0 cnVjdCBlcGZfbnRiICpudGIpCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGVwZl9udGJf d3JpdGVfbXNpX21zZyhzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MsIHN0cnVjdCBtc2lfbXNnICptc2cp Cit7CisJc3RydWN0IGVwZl9udGIgKm50YiA9IGRldl9nZXRfZHJ2ZGF0YShkZXNjLT5kZXYpOwor CXN0cnVjdCBlcGZfbnRiX2N0cmwgKnJlZyA9IG50Yi0+cmVnOworCWludCBzaXplID0gZXBmX250 Yl9kYl9zaXplKG50Yik7CisJdTY0IGFkZHI7CisKKwlhZGRyID0gbXNnLT5hZGRyZXNzX2hpOwor CWFkZHIgPDw9IDMyOworCWFkZHIgfD0gbXNnLT5hZGRyZXNzX2xvOworCisJcmVnLT5kYl9kYXRh W2Rlc2MtPm1zaV9pbmRleF0gPSBtc2ctPmRhdGE7CisKKwlpZiAoZGVzYy0+bXNpX2luZGV4ID09 IDApCisJCW50Yi0+ZXBmX2RiX3BoeSA9IHJvdW5kX2Rvd24oYWRkciwgc2l6ZSk7CisKKwlyZWct PmRiX29mZnNldFtkZXNjLT5tc2lfaW5kZXhdID0gYWRkciAtIG50Yi0+ZXBmX2RiX3BoeTsKK30K Kworc3RhdGljIGlycXJldHVybl90IGVwZl9udGJfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwg dm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZXBmX250YiAqbnRiID0gZGF0YTsKKwlpbnQgaW5kZXg7 CisKKwlpbmRleCA9IGlycSAtIG50Yi0+bXNpX3ZpcnFiYXNlOworCW50Yi0+ZGIgfD0gMSA8PCAo aW5kZXggLSAxKTsKKwludGJfZGJfZXZlbnQoJm50Yi0+bnRiLCBpbmRleCk7CisKKwlyZXR1cm4g SVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGVwZl9udGJfZXBjX21zaV9pbml0KHN0cnVj dCBlcGZfbnRiICpudGIpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJm50Yi0+ZXBmLT5kZXY7 CisJc3RydWN0IGlycV9kb21haW4gKmRvbWFpbjsKKwlpbnQgdmlycTsKKwlpbnQgcmV0OworCWlu dCBpOworCisJZG9tYWluID0gZGV2X2dldF9tc2lfZG9tYWluKG50Yi0+ZXBmLT5lcGMtPmRldi5w YXJlbnQpOworCWlmICghZG9tYWluKQorCQlyZXR1cm47CisKKwlkZXZfc2V0X21zaV9kb21haW4o ZGV2LCBkb21haW4pOworCisJaWYgKHBsYXRmb3JtX21zaV9kb21haW5fYWxsb2NfaXJxcygmbnRi LT5lcGYtPmRldiwKKwkJbnRiLT5kYl9jb3VudCwKKwkJZXBmX250Yl93cml0ZV9tc2lfbXNnKSkg eworCQlkZXZfaW5mbyhkZXYsICJDYW4ndCBhbGxvY2F0ZSBNU0ksIGZhbGwgYmFjayB0byBwb2xs IG1vZGVcbiIpOworCQlyZXR1cm47CisJfQorCisJZGV2X2luZm8oZGV2LCAidm50YiB1c2UgTVNJ IGFzIGRvb3JiZWxsXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBudGItPmRiX2NvdW50OyBpKysp IHsKKwkJdmlycSA9IG1zaV9nZXRfdmlycShkZXYsIGkpOworCQlyZXQgPSBkZXZtX3JlcXVlc3Rf aXJxKGRldiwgdmlycSwKKwkJCSAgICAgICBlcGZfbnRiX2ludGVycnVwdF9oYW5kbGVyLCAwLAor CQkJICAgICAgICJudGIiLCBudGIpOworCisJCWlmIChyZXQpCisJCQlkZXZfZXJyKGRldiwgImRl dm1fcmVxdWVzdF9pcnEoKSBmYWlsdXJlXG4iKTsKKworCQlpZiAoIWkpCisJCQludGItPm1zaV92 aXJxYmFzZSA9IHZpcnE7CisJfQorfQorCiAvKioKICAqIGVwZl9udGJfZXBjX2luaXQoKSAtIElu aXRpYWxpemUgTlRCIGludGVyZmFjZQogICogQG50YjogTlRCIGRldmljZSB0aGF0IGZhY2lsaXRh dGVzIGNvbW11bmljYXRpb24gYmV0d2VlbiBIT1NUIGFuZCB2SE9TVDIKQEAgLTEyOTksMTQgKzEz ODgsMTUgQEAgc3RhdGljIGludCBlcGZfbnRiX2JpbmQoc3RydWN0IHBjaV9lcGYgKmVwZikKIAkJ Z290byBlcnJfYmFyX2FsbG9jOwogCX0KIAorCWVwZl9zZXRfZHJ2ZGF0YShlcGYsIG50Yik7CisJ ZXBmX250Yl9lcGNfbXNpX2luaXQobnRiKTsKKwogCXJldCA9IGVwZl9udGJfZXBjX2luaXQobnRi KTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgRVBD XG4iKTsKIAkJZ290byBlcnJfYmFyX2FsbG9jOwogCX0KIAotCWVwZl9zZXRfZHJ2ZGF0YShlcGYs IG50Yik7Ci0KIAlwY2lfc3BhY2VbMF0gPSAobnRiLT52bnRiX3BpZCA8PCAxNikgfCBudGItPnZu dGJfdmlkOwogCXBjaV92bnRiX3RhYmxlWzBdLnZlbmRvciA9IG50Yi0+dm50Yl92aWQ7CiAJcGNp X3ZudGJfdGFibGVbMF0uZGV2aWNlID0gbnRiLT52bnRiX3BpZDsKLS0gCjIuMzUuMQoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJu ZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRw Oi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK