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 18955EC8743 for ; Thu, 7 Sep 2023 17:24:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240884AbjIGRY4 (ORCPT ); Thu, 7 Sep 2023 13:24:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40294 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234942AbjIGRYz (ORCPT ); Thu, 7 Sep 2023 13:24:55 -0400 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2072.outbound.protection.outlook.com [40.107.237.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 654031FEE; Thu, 7 Sep 2023 10:24:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cn1lX2aBSkZpPduk3aTFZzQ2Q/yRLSPvHhcqOi3X3ajAhQGqwnBrS9fkmJAEo3EdzdrqI2ut0d0NgYHNr6Nnn9GcrPB78oGOiUuqFXsP9ywcIkHh9/obAX1fbRnKPJK2IQwsBA5HGDk2H+DD0fFUTk86m15jNVy3pIgH6CALYNj98a2AJbLDU7jr2KpXJGELe6KURrLkAI7zKEzQCCmygL9ychOFye/Bq441UhWy32zud0cNqCYdirzSniH+B9QlAfgFnK2yxoWiUbystIYsYyKx8Uog75VP1+ah32sQItTWAuShtSJOIHsZD4SRWoO8pdp1XuIjfqaIaF+dY8kWEA== 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=L7fM/z4RMsK8eb1gWkmOiNHv0dr7V+SbpHXE4IDRn08=; b=Ar24JwucnzMpJxx24vG0f8DbIgxKBx9GVGHFED55apA7tHr4VHooaAzfkeicgQKkcTmkzy9T1d51RE9D0rjq6zaRYYqSbLHZ5lF5oDSwL/UZYxDbJPWjZiHkj/tULBdKqq6NGh2iT+tTL7eJzVNQDFMQQAlDpfRf9K7XAYvViBdf2kesfhMDjC77+Xcc4FpJAHKTsGQfP6t7mJLXI5/9YPWdlWtFSwTuGcaiN1aiUrIOQFk/rftSbu+wBEqvOZgdqkmBEeLaExXNhW/W3kGzmpgDbBmBuZ+avkBi7pPL+WFnfvyfiOpdPACHyMAr+AxoeZ7E6cmYysjKKLn6xjpb9A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none 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=L7fM/z4RMsK8eb1gWkmOiNHv0dr7V+SbpHXE4IDRn08=; b=S3eSvrGjw6dTB624igUe6j/Fw4AghbTBoYQdthpX6KCcadp7Ey7J3FbTy4Z8wTqYtJ8LTcUX6CkvXHxdVIZY7jtQsaLbvHB5s0hrSZ8Th8Zl+F/TxC5HqfK19HpHy/ipSronDdRwfH6qZHV7SVChGRq7nHPRt53jMWMxDrRqTmk= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; Received: from BY5PR12MB3683.namprd12.prod.outlook.com (2603:10b6:a03:1a5::16) by PH7PR12MB8794.namprd12.prod.outlook.com (2603:10b6:510:27d::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6745.34; Thu, 7 Sep 2023 17:23:26 +0000 Received: from BY5PR12MB3683.namprd12.prod.outlook.com ([fe80::8304:46bd:5017:3dcb]) by BY5PR12MB3683.namprd12.prod.outlook.com ([fe80::8304:46bd:5017:3dcb%6]) with mapi id 15.20.6745.034; Thu, 7 Sep 2023 17:23:26 +0000 Message-ID: Date: Thu, 7 Sep 2023 12:23:23 -0500 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 3/3] remoteproc: zynqmp: get TCM from device-tree Content-Language: en-US From: Tanmay Shah To: Mathieu Poirier Cc: "linux-remoteproc@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , Bjorn Andersson , Rob Herring , Krzysztof Kozlowski , "Simek, Michal" , Conor Dooley , "Pandey, Radhey Shyam" , "Levinsky, Ben" References: <20230829181900.2561194-1-tanmay.shah@amd.com> <20230829181900.2561194-4-tanmay.shah@amd.com> In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-ClientProxiedBy: SJ0PR03CA0365.namprd03.prod.outlook.com (2603:10b6:a03:3a1::10) To BY5PR12MB3683.namprd12.prod.outlook.com (2603:10b6:a03:1a5::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY5PR12MB3683:EE_|PH7PR12MB8794:EE_ X-MS-Office365-Filtering-Correlation-Id: b2c17d3b-dacf-483a-2be7-08dbafc72574 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: uaa3R67NVfKiLlRqlME3s2vzIjrGY6WLvj8wwfsB4IBtAr7wo1SXk285BkMc4ppTbJcFcx8Fo+JJLHerb60Ev6Cw0KRovrVWUfU94+ve4B0z7hBJ3YV0tc95O2EWiSjA9B7EPPnUP98u1mT5T+ZH+CquQ0SHPNG2l2xgqUep76A0VkGvR/3KtdtVNQhPE18yLt4vZXbbXveknK8mMhbnzPUjmjBTDI6MbNz4v5fShIAjeHtyLKLLXUWWX2zjfxdLI+xXXA2dwBetGwSNL9hog4fdZwj2OzsizKfGp8A/4rTcy346ysel76bfeC9X53alXwWdZ7toWnM3SISYBJirXMIvhflfuBTnTomkntT4I07PQ77gg0nMYotHfcifNrV6n8qAFZkVu3CCSkL8GpVREOjVS3jiGL9Ogn66ePhldwjSN1pAqmXFXICcgp+TVjQfzE9UGiXHtJ0rDHTiupcRYy5/4odtRs8vtOAst87en45jBarD3vXOd3bJ5vRWoY+pfmbD/TJhj8P2rsLLstjGbHg0v/GbRmJWNURA3i1XM1tVGDfHjF2qEIXt0q/Dh6ooosgcrE10PVOPWyQvM0xzMgshrLNgbGpZLGGlqXQEoROE8EPVSUtNe6aXarE3Fulw5nG61MBajfoal1LQr1orOg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY5PR12MB3683.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(396003)(366004)(376002)(39860400002)(136003)(346002)(451199024)(1800799009)(186009)(6506007)(478600001)(6486002)(86362001)(53546011)(26005)(31696002)(5660300002)(6512007)(83380400001)(31686004)(6666004)(2906002)(38100700002)(30864003)(66556008)(36756003)(66899024)(2616005)(6916009)(316002)(54906003)(66476007)(44832011)(66946007)(8676002)(4326008)(8936002)(41300700001)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SkhGdDdKWE9ZQTA4NExCUmlYTHJMOEtMUmZpRWZOWTBkdW9CMlZhS2FFSDVs?= =?utf-8?B?K01VeU80UWhEYmxpVmwrWXJyYnRMVnQ2S0NoNWQ3RkFaQmNkQWdwTkhQKzRh?= =?utf-8?B?YTJiVElNNHF1VGZld0tneGNNK1cyTTVpbURVUU5RdEJ4c1doOHlPVHN6T1hI?= =?utf-8?B?VS9PMFFOVy9CTm5lc0hlT3RoL25keHZBalJieGRLZFlYN3lFYTFTaEJERnhm?= =?utf-8?B?UHBCRFc0dzVVOEhqdENqRXJxZzkwSVRYVmd4RlpDTXNPa2tiZ3FBaVdPYTZ1?= =?utf-8?B?NG1vVFVkdWJiMDhyYnBKbXozOURIZjU1UnFZSVB3ZUkzakJDZVJoREp3dUor?= =?utf-8?B?a3NVOE9mc3Q2SmM0MWRLL0FMQWdyU3JKamJJS05Idjg0LzUyWktjVzBYNkRB?= =?utf-8?B?RXcvVVlXNFFvMDdCTDduanZQRHBvR0VOL2NITTlGRGkvWEdELzJ6ZVh2cXRr?= =?utf-8?B?cWMzT002U0hXMDJJMXB5aGxDaDJWN1NFditib1d4NXFSUmpKSzhHTXRTZndk?= =?utf-8?B?VjNMTzBEU1IvUlNXZjBjS2lqZTdzWVFQRFAxZjdKSTQzNzlBaVVWVTkyZURz?= =?utf-8?B?QzVLQk13SE5RbWhGTHFWNWVHR2ptQ09BYk9JYkgwTEpvcGpleWQxcG54ZDRz?= =?utf-8?B?am5ma0RBN0pIQTh2K3M4RmtqM3J6WGNBTGE1U3FMZ0daN2xpMkk2aHpwVTVE?= =?utf-8?B?ejY2dlh4Ni8rNkNvMGdLaFFjZ3BoUGpLdXozTFhCZVZYSmRLb3VHV1dkNnRj?= =?utf-8?B?d0ZTSGFya2JhOFp2WmxNOEVhNFRkN0NzYmpPM1ZnMVd0NWI2eFNkN0dieWVp?= =?utf-8?B?cExPK3dydkhuRnVSS2NUNlhHMTR3L1BXclI5MTRJYmdNcTFkSk9UQ3FENUhZ?= =?utf-8?B?R2pkd0FqWUNIa1R6NzNXWWl2K3BFRFJHTHRZa3Q4Q2JsaTJ2NE9NQm9JaHAz?= =?utf-8?B?eE8xOUk0MVd5QytOS2I5SXlMNjZWUDRXNTdZQmwra1V2cjgyZ1V1QmtCQlZF?= =?utf-8?B?cVRkNTJGN3J6VUNDM0JhVEdnbnAxQlJIcEpaWUFlMU5BeUU3NDJOS0pJQ0tM?= =?utf-8?B?K283UjVPbHVqZWo3ZWJHajBBY1RyYWRPWmk0ZTVUM0YxSEROLzBaOFo2c1pI?= =?utf-8?B?dmVEOENjcnpCVi9QTko3cXQyWmorTDVkMmFBOHRPNUxZbXV3RGR6am9UblJp?= =?utf-8?B?bTlFd2NvM0hoa29ZVmwvU2NQN1JQVEE2YkNOVEpacGtsV0ZmQTU4TW1VZ1VZ?= =?utf-8?B?dXdDb29qOFJDNm4xaWxUN0NndGNqUDNUYjhmNzk2Qy9sNUFjckF0L081bnlS?= =?utf-8?B?QktuNlFJSFFiR3V6NzU2OW4vVDdqTDd5eCthdUZHYms5ZzdLMEZZSWxjL0RC?= =?utf-8?B?WHZXZjBWTXlubjNZR2lzaFpDNTkrdFZtSGRKeXFuK0dDQ05YNkFsVE93dTEx?= =?utf-8?B?YjZvRmh4bVVBV2IyZVFuUitVR3lsWlI4NXc1dGVrRmdtSTMwUXlsb2JVVDRs?= =?utf-8?B?N0pPUnkxc29DMVl4eVIyRXdLQmhoNGU1WEc2OXZ3QjVwUmJFQzdmclZ0ZWF3?= =?utf-8?B?VFh4eVkxbDFGQTFkY3hQeGZWS3N4SC80NG1nd0RRdy9Odmo4VnNBL2tHWmlx?= =?utf-8?B?NzlwdHRXdnVWeTI3VTIzclNjUnViRUg4WWdyN29SbDlmT0Ywam9CQ2ZQMHdo?= =?utf-8?B?R3NkZnlnNm1qenNEUkdSUXA0NTR2VFkvZkFnSXU0Vm9zczFYaStlTXFQYWJY?= =?utf-8?B?MXpObkZuM3NRUTR5R203V2ZXS2NGTmZ2aEhGUEJzLzFLeElMVFVSc0xVbE1j?= =?utf-8?B?aVdYb1hQb25hQmx3U1d1QmtWS1BoQndMdFZxK3F6d25ReUdpK3F4azI2bzRa?= =?utf-8?B?MzNObituZEl2OGNBNnpCbFpudkMzK1lsTE10TUIreC9xQThBMmwvUVZocko2?= =?utf-8?B?NmpkTkZRKzFQU2V5Y2JFbTNnNXlKNENXemcrMTQvODFUczh6V256bXJPZGJt?= =?utf-8?B?bUlSQ0tVRUp0MG5KRWJWeUtKUlVWNU5OTmdhRmxPUlJVd2tXWngzZ2I4T2tO?= =?utf-8?B?OHZzSVN1aVNBcW16cjNRLzNLVzVVYlpSc1FTeUZsa1A0N0dlRzcxd01qT0lu?= =?utf-8?Q?TdRC44Qh+k02snDY0+42FEjOU?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: b2c17d3b-dacf-483a-2be7-08dbafc72574 X-MS-Exchange-CrossTenant-AuthSource: BY5PR12MB3683.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2023 17:23:26.7060 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /6hMTtv2SSEC3DHIy0ivGF6RyPHoRSey9Nd0+fcnuCWd51FYONKRllN6ZmBpyWsZ X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB8794 Precedence: bulk List-ID: X-Mailing-List: linux-remoteproc@vger.kernel.org On 9/6/23 5:02 PM, Tanmay Shah wrote: > HI Mathieu, > > Thanks for reviews. Please find my comments below. > > > On 9/6/23 2:47 PM, Mathieu Poirier wrote: > > Hi Tanmay, > > > > On Tue, Aug 29, 2023 at 11:19:00AM -0700, Tanmay Shah wrote: > > > Use new dt bindings to get TCM address and size > > > information. Also make sure that driver stays > > > compatible with previous device-tree bindings. > > > So, if TCM information isn't available in device-tree > > > for zynqmp platform, hard-coded address of TCM will > > > be used. > > > > > > New platforms that are compatible with this > > > driver must add TCM support in device-tree as per new > > > bindings. > > > > > > Signed-off-by: Tanmay Shah > > > --- > > > drivers/remoteproc/xlnx_r5_remoteproc.c | 279 +++++++++++++++++++----- > > > 1 file changed, 221 insertions(+), 58 deletions(-) > > > > > > diff --git a/drivers/remoteproc/xlnx_r5_remoteproc.c b/drivers/remoteproc/xlnx_r5_remoteproc.c > > > index feca6de68da2..4eb62eb545c2 100644 > > > --- a/drivers/remoteproc/xlnx_r5_remoteproc.c > > > +++ b/drivers/remoteproc/xlnx_r5_remoteproc.c > > > @@ -39,15 +39,19 @@ enum zynqmp_r5_cluster_mode { > > > * struct mem_bank_data - Memory Bank description > > > * > > > * @addr: Start address of memory bank > > > + * @da: device address for this tcm bank > > > * @size: Size of Memory bank > > > * @pm_domain_id: Power-domains id of memory bank for firmware to turn on/off > > > + * @pm_domain_id2: second core's corresponding TCM's pm_domain_id > > > * @bank_name: name of the bank for remoteproc framework > > > */ > > > struct mem_bank_data { > > > - phys_addr_t addr; > > > - size_t size; > > > + u32 addr; > > > + u32 da; > > > + u32 size; > > > > Why are the types of @addr and @size changed? > > So, R5 can access 32-bit address range only. Before I had missed this. > > In Devce-tree bindings I am keeping address-cells and size-cells as 2. > > So, out of 64-bits only 32-bits will be used to get address of TCM. Same for size. > > This motivated me to change the type of @addr and @size fields. It doesn't have any side effects. > > > > > > > u32 pm_domain_id; > > > - char *bank_name; > > > + u32 pm_domain_id2; > > > + char bank_name[32]; > > > > Same > > Now we have "reg-names" property in dts so, when that is available, I try to use it. > > So, instead of keeping simple pointer, I copy name from "struct resources". So, I changed bank_name > > from pointer to array. > > > > > > > }; > > > > > > /** > > > @@ -75,11 +79,17 @@ struct mbox_info { > > > * Hardcoded TCM bank values. This will be removed once TCM bindings are > > > * accepted for system-dt specifications and upstreamed in linux kernel > > > */ > > > -static const struct mem_bank_data zynqmp_tcm_banks[] = { > > > - {0xffe00000UL, 0x10000UL, PD_R5_0_ATCM, "atcm0"}, /* TCM 64KB each */ > > > - {0xffe20000UL, 0x10000UL, PD_R5_0_BTCM, "btcm0"}, > > > - {0xffe90000UL, 0x10000UL, PD_R5_1_ATCM, "atcm1"}, > > > - {0xffeb0000UL, 0x10000UL, PD_R5_1_BTCM, "btcm1"}, > > > +static const struct mem_bank_data zynqmp_tcm_banks_split[] = { > > > + {0xffe00000, 0x0, 0x10000, PD_R5_0_ATCM, 0, "atcm0"}, /* TCM 64KB each */ > > > + {0xffe20000, 0x20000, 0x10000, PD_R5_0_BTCM, 0, "btcm0"}, > > > > Here the device address for btcm0 is 0x20000 while in the cover letter it is > > 0x2000. > > Thanks for catching this. This is actually typo in cover-letter. It should be 0x20000 in cover-letter. > > > > > > + {0xffe90000, 0x0, 0x10000, PD_R5_1_ATCM, 0, "atcm1"}, > > > + {0xffeb0000, 0x20000, 0x10000, PD_R5_1_BTCM, 0, "btcm1"}, > > > > Same > > Same here: It should be 0x20000 in cover-letter. > > > > > > +}; > > > + > > > +/* TCM 128KB each */ > > > +static const struct mem_bank_data zynqmp_tcm_banks_lockstep[] = { > > > + {0xffe00000, 0x0, 0x20000, PD_R5_0_ATCM, PD_R5_1_ATCM, "atcm0"}, > > > + {0xffe20000, 0x20000, 0x20000, PD_R5_0_BTCM, PD_R5_1_BTCM, "btcm0"}, > > > }; > > > > > > /** > > > @@ -422,6 +432,7 @@ static int zynqmp_r5_mem_region_unmap(struct rproc *rproc, > > > struct rproc_mem_entry *mem) > > > { > > > iounmap((void __iomem *)mem->va); > > > + > > > > Spurious change > Sure,  I will remove it. > > > > > return 0; > > > } > > > > > > @@ -526,30 +537,6 @@ static int tcm_mem_map(struct rproc *rproc, > > > /* clear TCMs */ > > > memset_io(va, 0, mem->len); > > > > > > - /* > > > - * The R5s expect their TCM banks to be at address 0x0 and 0x2000, > > > - * while on the Linux side they are at 0xffexxxxx. > > > - * > > > - * Zero out the high 12 bits of the address. This will give > > > - * expected values for TCM Banks 0A and 0B (0x0 and 0x20000). > > > - */ > > > - mem->da &= 0x000fffff; > > > - > > > - /* > > > - * TCM Banks 1A and 1B still have to be translated. > > > - * > > > - * Below handle these two banks' absolute addresses (0xffe90000 and > > > - * 0xffeb0000) and convert to the expected relative addresses > > > - * (0x0 and 0x20000). > > > - */ > > > - if (mem->da == 0x90000 || mem->da == 0xB0000) > > > - mem->da -= 0x90000; > > > - > > > - /* if translated TCM bank address is not valid report error */ > > > - if (mem->da != 0x0 && mem->da != 0x20000) { > > > - dev_err(&rproc->dev, "invalid TCM address: %x\n", mem->da); > > > - return -EINVAL; > > > - } > > > return 0; > > > } > > > > > > @@ -571,6 +558,7 @@ static int add_tcm_carveout_split_mode(struct rproc *rproc) > > > u32 pm_domain_id; > > > size_t bank_size; > > > char *bank_name; > > > + u32 da; > > > > > > r5_core = rproc->priv; > > > dev = r5_core->dev; > > > @@ -586,6 +574,7 @@ static int add_tcm_carveout_split_mode(struct rproc *rproc) > > > bank_name = r5_core->tcm_banks[i]->bank_name; > > > bank_size = r5_core->tcm_banks[i]->size; > > > pm_domain_id = r5_core->tcm_banks[i]->pm_domain_id; > > > + da = r5_core->tcm_banks[i]->da; > > > > > > ret = zynqmp_pm_request_node(pm_domain_id, > > > ZYNQMP_PM_CAPABILITY_ACCESS, 0, > > > @@ -599,7 +588,7 @@ static int add_tcm_carveout_split_mode(struct rproc *rproc) > > > bank_name, bank_addr, bank_size); > > > > > > rproc_mem = rproc_mem_entry_init(dev, NULL, bank_addr, > > > - bank_size, bank_addr, > > > + bank_size, da, > > > tcm_mem_map, tcm_mem_unmap, > > > bank_name); > > > if (!rproc_mem) { > > > @@ -632,14 +621,14 @@ static int add_tcm_carveout_split_mode(struct rproc *rproc) > > > */ > > > static int add_tcm_carveout_lockstep_mode(struct rproc *rproc) > > > { > > > + u32 pm_domain_id, da, pm_domain_id2; > > > struct rproc_mem_entry *rproc_mem; > > > struct zynqmp_r5_core *r5_core; > > > int i, num_banks, ret; > > > - phys_addr_t bank_addr; > > > - size_t bank_size = 0; > > > + u32 bank_size = 0; > > > struct device *dev; > > > - u32 pm_domain_id; > > > char *bank_name; > > > + u32 bank_addr; > > > > > > r5_core = rproc->priv; > > > dev = r5_core->dev; > > > @@ -653,12 +642,16 @@ static int add_tcm_carveout_lockstep_mode(struct rproc *rproc) > > > * So, Enable each TCM block individually, but add their size > > > * to create contiguous memory region. > > > */ > > > - bank_addr = r5_core->tcm_banks[0]->addr; > > > - bank_name = r5_core->tcm_banks[0]->bank_name; > > > - > > > for (i = 0; i < num_banks; i++) { > > > - bank_size += r5_core->tcm_banks[i]->size; > > > + bank_addr = r5_core->tcm_banks[i]->addr; > > > + bank_name = r5_core->tcm_banks[i]->bank_name; > > > + bank_size = r5_core->tcm_banks[i]->size; > > > pm_domain_id = r5_core->tcm_banks[i]->pm_domain_id; > > > + pm_domain_id2 = r5_core->tcm_banks[i]->pm_domain_id2; > > > + da = r5_core->tcm_banks[i]->da; > > > + > > > + dev_dbg(dev, "TCM %s addr=0x%x, size=0x%x", > > > + bank_name, bank_addr, bank_size); > > > > > > /* Turn on each TCM bank individually */ > > > ret = zynqmp_pm_request_node(pm_domain_id, > > > @@ -668,23 +661,28 @@ static int add_tcm_carveout_lockstep_mode(struct rproc *rproc) > > > dev_err(dev, "failed to turn on TCM 0x%x", pm_domain_id); > > > goto release_tcm_lockstep; > > > } > > > - } > > > > > > - dev_dbg(dev, "TCM add carveout lockstep mode %s addr=0x%llx, size=0x%lx", > > > - bank_name, bank_addr, bank_size); > > > - > > > - /* Register TCM address range, TCM map and unmap functions */ > > > - rproc_mem = rproc_mem_entry_init(dev, NULL, bank_addr, > > > - bank_size, bank_addr, > > > - tcm_mem_map, tcm_mem_unmap, > > > - bank_name); > > > - if (!rproc_mem) { > > > - ret = -ENOMEM; > > > - goto release_tcm_lockstep; > > > - } > > > + /* Turn on each TCM bank individually */ > > > + ret = zynqmp_pm_request_node(pm_domain_id2, > > > + ZYNQMP_PM_CAPABILITY_ACCESS, 0, > > > + ZYNQMP_PM_REQUEST_ACK_BLOCKING); > > > + if (ret < 0) { > > > + dev_err(dev, "failed to turn on TCM 0x%x", pm_domain_id2); > > > + goto release_tcm_lockstep; > > > + } > > > > > > - /* If registration is success, add carveouts */ > > > - rproc_add_carveout(rproc, rproc_mem); > > > + /* Register TCM address range, TCM map and unmap functions */ > > > + rproc_mem = rproc_mem_entry_init(dev, NULL, bank_addr, > > > + bank_size, da, > > > + tcm_mem_map, tcm_mem_unmap, > > > + bank_name); > > > + if (!rproc_mem) { > > > + ret = -ENOMEM; > > > + goto release_tcm_lockstep; > > > + } > > > + > > > + rproc_add_carveout(rproc, rproc_mem); > > > + } > > > > > > return 0; > > > > > > @@ -693,7 +691,12 @@ static int add_tcm_carveout_lockstep_mode(struct rproc *rproc) > > > for (i--; i >= 0; i--) { > > > pm_domain_id = r5_core->tcm_banks[i]->pm_domain_id; > > > zynqmp_pm_release_node(pm_domain_id); > > > + if (pm_domain_id2) { > > > + pm_domain_id2 = r5_core->tcm_banks[i]->pm_domain_id2; > > > + zynqmp_pm_release_node(pm_domain_id2); > > > + } > > > } > > > + > > > return ret; > > > } > > > > > > @@ -800,17 +803,23 @@ static int zynqmp_r5_rproc_prepare(struct rproc *rproc) > > > */ > > > static int zynqmp_r5_rproc_unprepare(struct rproc *rproc) > > > { > > > + u32 pm_domain_id, pm_domain_id2; > > > struct zynqmp_r5_core *r5_core; > > > - u32 pm_domain_id; > > > int i; > > > > > > r5_core = rproc->priv; > > > > > > for (i = 0; i < r5_core->tcm_bank_count; i++) { > > > pm_domain_id = r5_core->tcm_banks[i]->pm_domain_id; > > > + pm_domain_id2 = r5_core->tcm_banks[i]->pm_domain_id2; > > > if (zynqmp_pm_release_node(pm_domain_id)) > > > dev_warn(r5_core->dev, > > > "can't turn off TCM bank 0x%x", pm_domain_id); > > > + if (pm_domain_id2 && zynqmp_pm_release_node(pm_domain_id2)) > > > + dev_warn(r5_core->dev, > > > + "can't turn off TCM bank 0x%x", pm_domain_id2); > > > + dev_dbg(r5_core->dev, "pm_domain_id=%d, pm_domain_id2=%d\n", > > > + pm_domain_id, pm_domain_id2); > > > } > > > > > > return 0; > > > @@ -883,6 +892,137 @@ static struct zynqmp_r5_core *zynqmp_r5_add_rproc_core(struct device *cdev) > > > return ERR_PTR(ret); > > > } > > > > > > +static int zynqmp_r5_get_tcm_node_from_dt(struct zynqmp_r5_cluster *cluster) > > > +{ > > > + int i, j, tcm_bank_count, ret = -EINVAL; > > > + struct zynqmp_r5_core *r5_core; > > > + struct of_phandle_args out_arg; > > > + struct platform_device *cpdev; > > > + struct resource *res = NULL; > > > + u64 abs_addr = 0, size = 0; > > > + struct mem_bank_data *tcm; > > > + struct device_node *np, *np1 = NULL; > > > + struct device *dev; > > > + > > > + for (i = 0; i < cluster->core_count; i++) { > > > + r5_core = cluster->r5_cores[i]; > > > + dev = r5_core->dev; > > > + np = dev_of_node(dev); > > > + > > > + /* we have address cell 2 and size cell as 2 */ > > > + ret = of_property_count_elems_of_size(np, "reg", > > > + 4 * sizeof(u32)); > > > + if (ret <= 0) { > > > + ret = -EINVAL; > > > + goto fail_tcm; > > > + } > > > + > > > + tcm_bank_count = ret; > > > + > > > + r5_core->tcm_banks = devm_kcalloc(dev, tcm_bank_count, > > > + sizeof(struct mem_bank_data *), > > > + GFP_KERNEL); > > > + if (!r5_core->tcm_banks) { > > > + ret = -ENOMEM; > > > + goto fail_tcm; > > > + } > > > + > > > + r5_core->tcm_bank_count = tcm_bank_count; > > > + for (j = 0; j < tcm_bank_count; j++) { > > > + tcm = kzalloc(sizeof(struct mem_bank_data *), GFP_KERNEL); > > > + if (!tcm) { > > > + ret = -ENOMEM; > > > + goto fail_tcm; > > > + } > > > + > > > + r5_core->tcm_banks[j] = tcm; > > > + /* get tcm address without translation */ > > > + ret = of_property_read_reg(np, j, &abs_addr, &size); > > > + if (ret) { > > > + dev_err(dev, "failed to get reg property\n"); > > > + goto fail_tcm; > > > + } > > > + > > > + /* > > > + * remote processor can address only 32 bits > > > + * so convert 64-bits into 32-bits. This will discard > > > + * any unwanted upper 32-bits. > > > + */ > > > + tcm->da = (u32)abs_addr; > > > + tcm->size = (u32)size; > > > + > > > + cpdev = to_platform_device(dev); > > > + res = platform_get_resource(cpdev, IORESOURCE_MEM, j); > > > + if (!res) { > > > + dev_err(dev, "failed to get tcm resource\n"); > > > + ret = -EINVAL; > > > + goto fail_tcm; > > > + } > > > + > > > + tcm->addr = (u32)res->start; > > > + res = devm_request_mem_region(dev, tcm->addr, tcm->size, res->name); > > > + if (!res) { > > > + dev_err(dev, "failed to request tcm resource\n"); > > > + ret = -EINVAL; > > > + goto fail_tcm; > > > + } > > > + > > > + memcpy(tcm->bank_name, res->name, ARRAY_SIZE(tcm->bank_name)); > > > + np = of_node_get(dev_of_node(dev)); > > > + /* > > > + * In dt power-domains are described in this order: > > > + * , , > > > + * parse power domains for tcm accordingly > > > + */ > > > + of_parse_phandle_with_args(np, "power-domains", > > > + "#power-domain-cells", > > > + j + 1, &out_arg); > > > + tcm->pm_domain_id = out_arg.args[0]; > > > + of_node_put(out_arg.np); > > > + > > > + dev_dbg(dev, "TCM: %s, dma=0x%x, da=0x%x, size=0x%x\n", > > > + tcm->bank_name, tcm->addr, tcm->da, tcm->size); > > > + dev_dbg(dev, "tcm pm domain id %d\n", tcm->pm_domain_id); > > > + > > > + if (cluster->mode == SPLIT_MODE) > > > + continue; > > > + > > > + /* Turn on core-1's TCM as well */ > > > + np1 = of_get_next_child(dev_of_node(cluster->dev), > > > + r5_core->np); > > > + if (!np1) { > > > + of_node_put(np1); > > > + np1 = NULL; > > > + goto fail_tcm; > > > + } > > > + > > > + of_parse_phandle_with_args(np1, "power-domains", > > > + "#power-domain-cells", > > > + j + 1, &out_arg); > > > + tcm->pm_domain_id2 = out_arg.args[0]; > > > + of_node_put(out_arg.np); > > > + dev_dbg(dev, "tcm pm domain id %d\n", tcm->pm_domain_id2); > > > + } > > > + } > > > + > > > + return 0; > > > + > > > +fail_tcm: > > > + while (i >= 0) { > > > + r5_core = cluster->r5_cores[i]; > > > + for (j = 0; j < r5_core->tcm_bank_count; j++) { > > > + if (!r5_core->tcm_banks) > > > + continue; > > > + tcm = r5_core->tcm_banks[j]; > > > + kfree(tcm); > > > + } > > > + kfree(r5_core->tcm_banks); > > > + i--; > > > + } > > > + > > > + return ret; > > > +} > > > + > > > /** > > > * zynqmp_r5_get_tcm_node() > > > * Ideally this function should parse tcm node and store information > > > @@ -895,12 +1035,20 @@ static struct zynqmp_r5_core *zynqmp_r5_add_rproc_core(struct device *cdev) > > > */ > > > static int zynqmp_r5_get_tcm_node(struct zynqmp_r5_cluster *cluster) > > > { > > > + const struct mem_bank_data *zynqmp_tcm_banks; > > > struct device *dev = cluster->dev; > > > struct zynqmp_r5_core *r5_core; > > > int tcm_bank_count, tcm_node; > > > int i, j; > > > > > > - tcm_bank_count = ARRAY_SIZE(zynqmp_tcm_banks); > > > + if (cluster->mode == SPLIT_MODE) { > > > + zynqmp_tcm_banks = zynqmp_tcm_banks_split; > > > + tcm_bank_count = ARRAY_SIZE(zynqmp_tcm_banks_split); > > > + } else { > > > + zynqmp_tcm_banks = zynqmp_tcm_banks_lockstep; > > > + tcm_bank_count = ARRAY_SIZE(zynqmp_tcm_banks_lockstep); > > > + } > > > > Why are the changes to get TCM bank information from the DT and enhancement to > > support lockstep mode in the same patch? > > Actually TCM in lockstep mode was supported before as well. It's just I was using same table in lockstep mode before. > > However, now I am having two tables for split mode and lockstep mode. > > I had to do this as I have introduced "da" field in "struct mem_bank_data" object.  This makes it easy to process > > "device address" derived from device-tree. > > And as I have introduced "u32 da", I had to modify table as well and remove hardcoding of "da" calculation in "tcm_mem_map" function. > > As all of this is connected, I have them in same patch. No new functionality is added, but just code refactoring. > > > > + > > > > > > /* count per core tcm banks */ > > > tcm_bank_count = tcm_bank_count / cluster->core_count; > > > @@ -951,10 +1099,25 @@ static int zynqmp_r5_core_init(struct zynqmp_r5_cluster *cluster, > > > enum rpu_tcm_comb tcm_mode) > > > { > > > struct device *dev = cluster->dev; > > > + struct device_node *np; > > > struct zynqmp_r5_core *r5_core; > > > int ret, i; > > > > > > - ret = zynqmp_r5_get_tcm_node(cluster); > > > + /* > > > + * try to get tcm nodes from dt but if fail, use hardcode addresses only > > > + * for zynqmp platform. New platforms must use dt bindings for TCM. > > > + */ > > > + ret = zynqmp_r5_get_tcm_node_from_dt(cluster); > > > + if (ret) { > > > + np = of_get_compatible_child(dev_of_node(dev), "xlnx,zynqmp-r5f"); > > > + if (np) { > > > > Why was this check added? > > We want to maintain backward compatibility with previous bindings only for zynqmp platform. > > So, hardcode table is used only for "zynqmp" platform if getting "reg" information from device-tree fails. > > If node is not compatible with "xlnx,zynqmp-r5f" then it is new platform and we must not use hardcode > > table instead we should fail. > > > > So far there are too many unanswered questions with this patchset and as such I > > will stop here. > > No problem. Please let me know if you have any further questions. Hi Mathieu, Did you want me to document all the comments I mentioned in driver and send new patchset or can we continue reviews ? I am fine either way. Let me know. Thanks, Tanmay > > > > Mathieu > > > > > + ret = zynqmp_r5_get_tcm_node(cluster); > > > + } else { > > > + dev_err(dev, "tcm not found\n"); > > > + return -EINVAL; > > > + } > > > + } > > > + > > > if (ret < 0) { > > > dev_err(dev, "can't get tcm node, err %d\n", ret); > > > return ret; > > > -- > > > 2.25.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 E61A0EC8742 for ; Thu, 7 Sep 2023 17:24:08 +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:In-Reply-To:References:Cc: To:From:Subject:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=QfJH+395//6TSxTTuw2KoR5Rx1ED9Ft1iEJIPtYZo3o=; b=KGAEtQ+2PrQSIF 7bWrLVoHxFwKxOMh9GfZ735kL5LqcW0T6G+y1Ihvo5QYl1MaODMnjc8aB9doa9UTX8ukkdngsk+Cj ZdFrxb9scf/oVwCA0sFvqxzIiAtO2OJJrQ+0WWt5kmIOiLiosHh7ZXodFv8cT3d2T2K1YGuyjdNo6 eTvWl0yl7rje9pgYyR9jUvwGFoBb6i2cvTjKZpEb/DnZ84RzOcyR4T/buujpcbjtHDCA/8qGjp6V+ RlmujuRSEZKsOavTxp4NQyEgU+m97VqEKkertQ/ijUn5SBRzXhlunxdsqQOrXzX9ToB4/b/uON2tO gv5ezMF3QURW6zN6Cerg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qeIjE-00CTKe-2H; Thu, 07 Sep 2023 17:23:40 +0000 Received: from mail-bn8nam12on20604.outbound.protection.outlook.com ([2a01:111:f400:fe5b::604] helo=NAM12-BN8-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qeIj9-00CTK2-2Z for linux-arm-kernel@lists.infradead.org; Thu, 07 Sep 2023 17:23:38 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cn1lX2aBSkZpPduk3aTFZzQ2Q/yRLSPvHhcqOi3X3ajAhQGqwnBrS9fkmJAEo3EdzdrqI2ut0d0NgYHNr6Nnn9GcrPB78oGOiUuqFXsP9ywcIkHh9/obAX1fbRnKPJK2IQwsBA5HGDk2H+DD0fFUTk86m15jNVy3pIgH6CALYNj98a2AJbLDU7jr2KpXJGELe6KURrLkAI7zKEzQCCmygL9ychOFye/Bq441UhWy32zud0cNqCYdirzSniH+B9QlAfgFnK2yxoWiUbystIYsYyKx8Uog75VP1+ah32sQItTWAuShtSJOIHsZD4SRWoO8pdp1XuIjfqaIaF+dY8kWEA== 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=L7fM/z4RMsK8eb1gWkmOiNHv0dr7V+SbpHXE4IDRn08=; b=Ar24JwucnzMpJxx24vG0f8DbIgxKBx9GVGHFED55apA7tHr4VHooaAzfkeicgQKkcTmkzy9T1d51RE9D0rjq6zaRYYqSbLHZ5lF5oDSwL/UZYxDbJPWjZiHkj/tULBdKqq6NGh2iT+tTL7eJzVNQDFMQQAlDpfRf9K7XAYvViBdf2kesfhMDjC77+Xcc4FpJAHKTsGQfP6t7mJLXI5/9YPWdlWtFSwTuGcaiN1aiUrIOQFk/rftSbu+wBEqvOZgdqkmBEeLaExXNhW/W3kGzmpgDbBmBuZ+avkBi7pPL+WFnfvyfiOpdPACHyMAr+AxoeZ7E6cmYysjKKLn6xjpb9A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none 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=L7fM/z4RMsK8eb1gWkmOiNHv0dr7V+SbpHXE4IDRn08=; b=S3eSvrGjw6dTB624igUe6j/Fw4AghbTBoYQdthpX6KCcadp7Ey7J3FbTy4Z8wTqYtJ8LTcUX6CkvXHxdVIZY7jtQsaLbvHB5s0hrSZ8Th8Zl+F/TxC5HqfK19HpHy/ipSronDdRwfH6qZHV7SVChGRq7nHPRt53jMWMxDrRqTmk= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; Received: from BY5PR12MB3683.namprd12.prod.outlook.com (2603:10b6:a03:1a5::16) by PH7PR12MB8794.namprd12.prod.outlook.com (2603:10b6:510:27d::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6745.34; Thu, 7 Sep 2023 17:23:26 +0000 Received: from BY5PR12MB3683.namprd12.prod.outlook.com ([fe80::8304:46bd:5017:3dcb]) by BY5PR12MB3683.namprd12.prod.outlook.com ([fe80::8304:46bd:5017:3dcb%6]) with mapi id 15.20.6745.034; Thu, 7 Sep 2023 17:23:26 +0000 Message-ID: Date: Thu, 7 Sep 2023 12:23:23 -0500 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 3/3] remoteproc: zynqmp: get TCM from device-tree Content-Language: en-US From: Tanmay Shah To: Mathieu Poirier Cc: "linux-remoteproc@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , Bjorn Andersson , Rob Herring , Krzysztof Kozlowski , "Simek, Michal" , Conor Dooley , "Pandey, Radhey Shyam" , "Levinsky, Ben" References: <20230829181900.2561194-1-tanmay.shah@amd.com> <20230829181900.2561194-4-tanmay.shah@amd.com> In-Reply-To: X-ClientProxiedBy: SJ0PR03CA0365.namprd03.prod.outlook.com (2603:10b6:a03:3a1::10) To BY5PR12MB3683.namprd12.prod.outlook.com (2603:10b6:a03:1a5::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY5PR12MB3683:EE_|PH7PR12MB8794:EE_ X-MS-Office365-Filtering-Correlation-Id: b2c17d3b-dacf-483a-2be7-08dbafc72574 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: uaa3R67NVfKiLlRqlME3s2vzIjrGY6WLvj8wwfsB4IBtAr7wo1SXk285BkMc4ppTbJcFcx8Fo+JJLHerb60Ev6Cw0KRovrVWUfU94+ve4B0z7hBJ3YV0tc95O2EWiSjA9B7EPPnUP98u1mT5T+ZH+CquQ0SHPNG2l2xgqUep76A0VkGvR/3KtdtVNQhPE18yLt4vZXbbXveknK8mMhbnzPUjmjBTDI6MbNz4v5fShIAjeHtyLKLLXUWWX2zjfxdLI+xXXA2dwBetGwSNL9hog4fdZwj2OzsizKfGp8A/4rTcy346ysel76bfeC9X53alXwWdZ7toWnM3SISYBJirXMIvhflfuBTnTomkntT4I07PQ77gg0nMYotHfcifNrV6n8qAFZkVu3CCSkL8GpVREOjVS3jiGL9Ogn66ePhldwjSN1pAqmXFXICcgp+TVjQfzE9UGiXHtJ0rDHTiupcRYy5/4odtRs8vtOAst87en45jBarD3vXOd3bJ5vRWoY+pfmbD/TJhj8P2rsLLstjGbHg0v/GbRmJWNURA3i1XM1tVGDfHjF2qEIXt0q/Dh6ooosgcrE10PVOPWyQvM0xzMgshrLNgbGpZLGGlqXQEoROE8EPVSUtNe6aXarE3Fulw5nG61MBajfoal1LQr1orOg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY5PR12MB3683.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(396003)(366004)(376002)(39860400002)(136003)(346002)(451199024)(1800799009)(186009)(6506007)(478600001)(6486002)(86362001)(53546011)(26005)(31696002)(5660300002)(6512007)(83380400001)(31686004)(6666004)(2906002)(38100700002)(30864003)(66556008)(36756003)(66899024)(2616005)(6916009)(316002)(54906003)(66476007)(44832011)(66946007)(8676002)(4326008)(8936002)(41300700001)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SkhGdDdKWE9ZQTA4NExCUmlYTHJMOEtMUmZpRWZOWTBkdW9CMlZhS2FFSDVs?= =?utf-8?B?K01VeU80UWhEYmxpVmwrWXJyYnRMVnQ2S0NoNWQ3RkFaQmNkQWdwTkhQKzRh?= =?utf-8?B?YTJiVElNNHF1VGZld0tneGNNK1cyTTVpbURVUU5RdEJ4c1doOHlPVHN6T1hI?= =?utf-8?B?VS9PMFFOVy9CTm5lc0hlT3RoL25keHZBalJieGRLZFlYN3lFYTFTaEJERnhm?= =?utf-8?B?UHBCRFc0dzVVOEhqdENqRXJxZzkwSVRYVmd4RlpDTXNPa2tiZ3FBaVdPYTZ1?= =?utf-8?B?NG1vVFVkdWJiMDhyYnBKbXozOURIZjU1UnFZSVB3ZUkzakJDZVJoREp3dUor?= =?utf-8?B?a3NVOE9mc3Q2SmM0MWRLL0FMQWdyU3JKamJJS05Idjg0LzUyWktjVzBYNkRB?= =?utf-8?B?RXcvVVlXNFFvMDdCTDduanZQRHBvR0VOL2NITTlGRGkvWEdELzJ6ZVh2cXRr?= =?utf-8?B?cWMzT002U0hXMDJJMXB5aGxDaDJWN1NFditib1d4NXFSUmpKSzhHTXRTZndk?= =?utf-8?B?VjNMTzBEU1IvUlNXZjBjS2lqZTdzWVFQRFAxZjdKSTQzNzlBaVVWVTkyZURz?= =?utf-8?B?QzVLQk13SE5RbWhGTHFWNWVHR2ptQ09BYk9JYkgwTEpvcGpleWQxcG54ZDRz?= =?utf-8?B?am5ma0RBN0pIQTh2K3M4RmtqM3J6WGNBTGE1U3FMZ0daN2xpMkk2aHpwVTVE?= =?utf-8?B?ejY2dlh4Ni8rNkNvMGdLaFFjZ3BoUGpLdXozTFhCZVZYSmRLb3VHV1dkNnRj?= =?utf-8?B?d0ZTSGFya2JhOFp2WmxNOEVhNFRkN0NzYmpPM1ZnMVd0NWI2eFNkN0dieWVp?= =?utf-8?B?cExPK3dydkhuRnVSS2NUNlhHMTR3L1BXclI5MTRJYmdNcTFkSk9UQ3FENUhZ?= =?utf-8?B?R2pkd0FqWUNIa1R6NzNXWWl2K3BFRFJHTHRZa3Q4Q2JsaTJ2NE9NQm9JaHAz?= =?utf-8?B?eE8xOUk0MVd5QytOS2I5SXlMNjZWUDRXNTdZQmwra1V2cjgyZ1V1QmtCQlZF?= =?utf-8?B?cVRkNTJGN3J6VUNDM0JhVEdnbnAxQlJIcEpaWUFlMU5BeUU3NDJOS0pJQ0tM?= =?utf-8?B?K283UjVPbHVqZWo3ZWJHajBBY1RyYWRPWmk0ZTVUM0YxSEROLzBaOFo2c1pI?= =?utf-8?B?dmVEOENjcnpCVi9QTko3cXQyWmorTDVkMmFBOHRPNUxZbXV3RGR6am9UblJp?= =?utf-8?B?bTlFd2NvM0hoa29ZVmwvU2NQN1JQVEE2YkNOVEpacGtsV0ZmQTU4TW1VZ1VZ?= =?utf-8?B?dXdDb29qOFJDNm4xaWxUN0NndGNqUDNUYjhmNzk2Qy9sNUFjckF0L081bnlS?= =?utf-8?B?QktuNlFJSFFiR3V6NzU2OW4vVDdqTDd5eCthdUZHYms5ZzdLMEZZSWxjL0RC?= =?utf-8?B?WHZXZjBWTXlubjNZR2lzaFpDNTkrdFZtSGRKeXFuK0dDQ05YNkFsVE93dTEx?= =?utf-8?B?YjZvRmh4bVVBV2IyZVFuUitVR3lsWlI4NXc1dGVrRmdtSTMwUXlsb2JVVDRs?= =?utf-8?B?N0pPUnkxc29DMVl4eVIyRXdLQmhoNGU1WEc2OXZ3QjVwUmJFQzdmclZ0ZWF3?= =?utf-8?B?VFh4eVkxbDFGQTFkY3hQeGZWS3N4SC80NG1nd0RRdy9Odmo4VnNBL2tHWmlx?= =?utf-8?B?NzlwdHRXdnVWeTI3VTIzclNjUnViRUg4WWdyN29SbDlmT0Ywam9CQ2ZQMHdo?= =?utf-8?B?R3NkZnlnNm1qenNEUkdSUXA0NTR2VFkvZkFnSXU0Vm9zczFYaStlTXFQYWJY?= =?utf-8?B?MXpObkZuM3NRUTR5R203V2ZXS2NGTmZ2aEhGUEJzLzFLeElMVFVSc0xVbE1j?= =?utf-8?B?aVdYb1hQb25hQmx3U1d1QmtWS1BoQndMdFZxK3F6d25ReUdpK3F4azI2bzRa?= =?utf-8?B?MzNObituZEl2OGNBNnpCbFpudkMzK1lsTE10TUIreC9xQThBMmwvUVZocko2?= =?utf-8?B?NmpkTkZRKzFQU2V5Y2JFbTNnNXlKNENXemcrMTQvODFUczh6V256bXJPZGJt?= =?utf-8?B?bUlSQ0tVRUp0MG5KRWJWeUtKUlVWNU5OTmdhRmxPUlJVd2tXWngzZ2I4T2tO?= =?utf-8?B?OHZzSVN1aVNBcW16cjNRLzNLVzVVYlpSc1FTeUZsa1A0N0dlRzcxd01qT0lu?= =?utf-8?Q?TdRC44Qh+k02snDY0+42FEjOU?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: b2c17d3b-dacf-483a-2be7-08dbafc72574 X-MS-Exchange-CrossTenant-AuthSource: BY5PR12MB3683.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2023 17:23:26.7060 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /6hMTtv2SSEC3DHIy0ivGF6RyPHoRSey9Nd0+fcnuCWd51FYONKRllN6ZmBpyWsZ X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB8794 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230907_102336_343206_97CC8C60 X-CRM114-Status: GOOD ( 40.86 ) 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 Ck9uIDkvNi8yMyA1OjAyIFBNLCBUYW5tYXkgU2hhaCB3cm90ZToKPiBISSBNYXRoaWV1LAo+Cj4g VGhhbmtzIGZvciByZXZpZXdzLiBQbGVhc2UgZmluZCBteSBjb21tZW50cyBiZWxvdy4KPgo+Cj4g T24gOS82LzIzIDI6NDcgUE0sIE1hdGhpZXUgUG9pcmllciB3cm90ZToKPiA+IEhpIFRhbm1heSwK PiA+Cj4gPiBPbiBUdWUsIEF1ZyAyOSwgMjAyMyBhdCAxMToxOTowMEFNIC0wNzAwLCBUYW5tYXkg U2hhaCB3cm90ZToKPiA+ID4gVXNlIG5ldyBkdCBiaW5kaW5ncyB0byBnZXQgVENNIGFkZHJlc3Mg YW5kIHNpemUKPiA+ID4gaW5mb3JtYXRpb24uIEFsc28gbWFrZSBzdXJlIHRoYXQgZHJpdmVyIHN0 YXlzCj4gPiA+IGNvbXBhdGlibGUgd2l0aCBwcmV2aW91cyBkZXZpY2UtdHJlZSBiaW5kaW5ncy4K PiA+ID4gU28sIGlmIFRDTSBpbmZvcm1hdGlvbiBpc24ndCBhdmFpbGFibGUgaW4gZGV2aWNlLXRy ZWUKPiA+ID4gZm9yIHp5bnFtcCBwbGF0Zm9ybSwgaGFyZC1jb2RlZCBhZGRyZXNzIG9mIFRDTSB3 aWxsCj4gPiA+IGJlIHVzZWQuCj4gPiA+IAo+ID4gPiBOZXcgcGxhdGZvcm1zIHRoYXQgYXJlIGNv bXBhdGlibGUgd2l0aCB0aGlzCj4gPiA+IGRyaXZlciBtdXN0IGFkZCBUQ00gc3VwcG9ydCBpbiBk ZXZpY2UtdHJlZSBhcyBwZXIgbmV3Cj4gPiA+IGJpbmRpbmdzLgo+ID4gPiAKPiA+ID4gU2lnbmVk LW9mZi1ieTogVGFubWF5IFNoYWggPHRhbm1heS5zaGFoQGFtZC5jb20+Cj4gPiA+IC0tLQo+ID4g PiAgZHJpdmVycy9yZW1vdGVwcm9jL3hsbnhfcjVfcmVtb3RlcHJvYy5jIHwgMjc5ICsrKysrKysr KysrKysrKysrKystLS0tLQo+ID4gPiAgMSBmaWxlIGNoYW5nZWQsIDIyMSBpbnNlcnRpb25zKCsp LCA1OCBkZWxldGlvbnMoLSkKPiA+ID4gCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3JlbW90 ZXByb2MveGxueF9yNV9yZW1vdGVwcm9jLmMgYi9kcml2ZXJzL3JlbW90ZXByb2MveGxueF9yNV9y ZW1vdGVwcm9jLmMKPiA+ID4gaW5kZXggZmVjYTZkZTY4ZGEyLi40ZWI2MmViNTQ1YzIgMTAwNjQ0 Cj4gPiA+IC0tLSBhL2RyaXZlcnMvcmVtb3RlcHJvYy94bG54X3I1X3JlbW90ZXByb2MuYwo+ID4g PiArKysgYi9kcml2ZXJzL3JlbW90ZXByb2MveGxueF9yNV9yZW1vdGVwcm9jLmMKPiA+ID4gQEAg LTM5LDE1ICszOSwxOSBAQCBlbnVtIHp5bnFtcF9yNV9jbHVzdGVyX21vZGUgewo+ID4gPiAgICog c3RydWN0IG1lbV9iYW5rX2RhdGEgLSBNZW1vcnkgQmFuayBkZXNjcmlwdGlvbgo+ID4gPiAgICoK PiA+ID4gICAqIEBhZGRyOiBTdGFydCBhZGRyZXNzIG9mIG1lbW9yeSBiYW5rCj4gPiA+ICsgKiBA ZGE6IGRldmljZSBhZGRyZXNzIGZvciB0aGlzIHRjbSBiYW5rCj4gPiA+ICAgKiBAc2l6ZTogU2l6 ZSBvZiBNZW1vcnkgYmFuawo+ID4gPiAgICogQHBtX2RvbWFpbl9pZDogUG93ZXItZG9tYWlucyBp ZCBvZiBtZW1vcnkgYmFuayBmb3IgZmlybXdhcmUgdG8gdHVybiBvbi9vZmYKPiA+ID4gKyAqIEBw bV9kb21haW5faWQyOiBzZWNvbmQgY29yZSdzIGNvcnJlc3BvbmRpbmcgVENNJ3MgcG1fZG9tYWlu X2lkCj4gPiA+ICAgKiBAYmFua19uYW1lOiBuYW1lIG9mIHRoZSBiYW5rIGZvciByZW1vdGVwcm9j IGZyYW1ld29yawo+ID4gPiAgICovCj4gPiA+ICBzdHJ1Y3QgbWVtX2JhbmtfZGF0YSB7Cj4gPiA+ IC0JcGh5c19hZGRyX3QgYWRkcjsKPiA+ID4gLQlzaXplX3Qgc2l6ZTsKPiA+ID4gKwl1MzIgYWRk cjsKPiA+ID4gKwl1MzIgZGE7Cj4gPiA+ICsJdTMyIHNpemU7Cj4gPgo+ID4gV2h5IGFyZSB0aGUg dHlwZXMgb2YgQGFkZHIgYW5kIEBzaXplIGNoYW5nZWQ/Cj4KPiBTbywgUjUgY2FuIGFjY2VzcyAz Mi1iaXQgYWRkcmVzcyByYW5nZSBvbmx5LiBCZWZvcmUgSSBoYWQgbWlzc2VkIHRoaXMuCj4KPiBJ biBEZXZjZS10cmVlIGJpbmRpbmdzIEkgYW0ga2VlcGluZyBhZGRyZXNzLWNlbGxzIGFuZCBzaXpl LWNlbGxzIGFzIDIuCj4KPiBTbywgb3V0IG9mIDY0LWJpdHMgb25seSAzMi1iaXRzIHdpbGwgYmUg dXNlZCB0byBnZXQgYWRkcmVzcyBvZiBUQ00uIFNhbWUgZm9yIHNpemUuCj4KPiBUaGlzIG1vdGl2 YXRlZCBtZSB0byBjaGFuZ2UgdGhlIHR5cGUgb2YgQGFkZHIgYW5kIEBzaXplIGZpZWxkcy4gSXQg ZG9lc24ndCBoYXZlIGFueSBzaWRlIGVmZmVjdHMuCj4KPgo+ID4KPiA+ID4gIAl1MzIgcG1fZG9t YWluX2lkOwo+ID4gPiAtCWNoYXIgKmJhbmtfbmFtZTsKPiA+ID4gKwl1MzIgcG1fZG9tYWluX2lk MjsKPiA+ID4gKwljaGFyIGJhbmtfbmFtZVszMl07Cj4gPgo+ID4gU2FtZQo+Cj4gTm93IHdlIGhh dmUgInJlZy1uYW1lcyIgcHJvcGVydHkgaW4gZHRzIHNvLCB3aGVuIHRoYXQgaXMgYXZhaWxhYmxl LCBJIHRyeSB0byB1c2UgaXQuCj4KPiBTbywgaW5zdGVhZCBvZiBrZWVwaW5nIHNpbXBsZSBwb2lu dGVyLCBJIGNvcHkgbmFtZSBmcm9tICJzdHJ1Y3QgcmVzb3VyY2VzIi4gU28sIEkgY2hhbmdlZCBi YW5rX25hbWUKPgo+IGZyb20gcG9pbnRlciB0byBhcnJheS4KPgo+Cj4gPgo+ID4gPiAgfTsKPiA+ ID4gIAo+ID4gPiAgLyoqCj4gPiA+IEBAIC03NSwxMSArNzksMTcgQEAgc3RydWN0IG1ib3hfaW5m byB7Cj4gPiA+ICAgKiBIYXJkY29kZWQgVENNIGJhbmsgdmFsdWVzLiBUaGlzIHdpbGwgYmUgcmVt b3ZlZCBvbmNlIFRDTSBiaW5kaW5ncyBhcmUKPiA+ID4gICAqIGFjY2VwdGVkIGZvciBzeXN0ZW0t ZHQgc3BlY2lmaWNhdGlvbnMgYW5kIHVwc3RyZWFtZWQgaW4gbGludXgga2VybmVsCj4gPiA+ICAg Ki8KPiA+ID4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtX2JhbmtfZGF0YSB6eW5xbXBfdGNtX2Jh bmtzW10gPSB7Cj4gPiA+IC0JezB4ZmZlMDAwMDBVTCwgMHgxMDAwMFVMLCBQRF9SNV8wX0FUQ00s ICJhdGNtMCJ9LCAvKiBUQ00gNjRLQiBlYWNoICovCj4gPiA+IC0JezB4ZmZlMjAwMDBVTCwgMHgx MDAwMFVMLCBQRF9SNV8wX0JUQ00sICJidGNtMCJ9LAo+ID4gPiAtCXsweGZmZTkwMDAwVUwsIDB4 MTAwMDBVTCwgUERfUjVfMV9BVENNLCAiYXRjbTEifSwKPiA+ID4gLQl7MHhmZmViMDAwMFVMLCAw eDEwMDAwVUwsIFBEX1I1XzFfQlRDTSwgImJ0Y20xIn0sCj4gPiA+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IG1lbV9iYW5rX2RhdGEgenlucW1wX3RjbV9iYW5rc19zcGxpdFtdID0gewo+ID4gPiArCXsw eGZmZTAwMDAwLCAweDAsIDB4MTAwMDAsIFBEX1I1XzBfQVRDTSwgMCwgImF0Y20wIn0sIC8qIFRD TSA2NEtCIGVhY2ggKi8KPiA+ID4gKwl7MHhmZmUyMDAwMCwgMHgyMDAwMCwgMHgxMDAwMCwgUERf UjVfMF9CVENNLCAwLCAiYnRjbTAifSwKPiA+Cj4gPiBIZXJlIHRoZSBkZXZpY2UgYWRkcmVzcyBm b3IgYnRjbTAgaXMgMHgyMDAwMCB3aGlsZSBpbiB0aGUgY292ZXIgbGV0dGVyIGl0IGlzCj4gPiAw eDIwMDAuCj4KPiBUaGFua3MgZm9yIGNhdGNoaW5nIHRoaXMuIFRoaXMgaXMgYWN0dWFsbHkgdHlw byBpbiBjb3Zlci1sZXR0ZXIuIEl0IHNob3VsZCBiZSAweDIwMDAwIGluIGNvdmVyLWxldHRlci4K Pgo+ID4KPiA+ID4gKwl7MHhmZmU5MDAwMCwgMHgwLCAweDEwMDAwLCBQRF9SNV8xX0FUQ00sIDAs ICJhdGNtMSJ9LAo+ID4gPiArCXsweGZmZWIwMDAwLCAweDIwMDAwLCAweDEwMDAwLCBQRF9SNV8x X0JUQ00sIDAsICJidGNtMSJ9LAo+ID4KPiA+IFNhbWUKPgo+IFNhbWUgaGVyZTogSXQgc2hvdWxk IGJlIDB4MjAwMDAgaW4gY292ZXItbGV0dGVyLgo+Cj4gPgo+ID4gPiArfTsKPiA+ID4gKwo+ID4g PiArLyogVENNIDEyOEtCIGVhY2ggKi8KPiA+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtX2Jh bmtfZGF0YSB6eW5xbXBfdGNtX2JhbmtzX2xvY2tzdGVwW10gPSB7Cj4gPiA+ICsJezB4ZmZlMDAw MDAsIDB4MCwgMHgyMDAwMCwgUERfUjVfMF9BVENNLCBQRF9SNV8xX0FUQ00sICJhdGNtMCJ9LAo+ ID4gPiArCXsweGZmZTIwMDAwLCAweDIwMDAwLCAweDIwMDAwLCBQRF9SNV8wX0JUQ00sIFBEX1I1 XzFfQlRDTSwgImJ0Y20wIn0sCj4gPiA+ICB9Owo+ID4gPiAgCj4gPiA+ICAvKioKPiA+ID4gQEAg LTQyMiw2ICs0MzIsNyBAQCBzdGF0aWMgaW50IHp5bnFtcF9yNV9tZW1fcmVnaW9uX3VubWFwKHN0 cnVjdCBycHJvYyAqcnByb2MsCj4gPiA+ICAJCQkJICAgICAgc3RydWN0IHJwcm9jX21lbV9lbnRy eSAqbWVtKQo+ID4gPiAgewo+ID4gPiAgCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKW1lbS0+dmEp Owo+ID4gPiArCj4gPgo+ID4gU3B1cmlvdXMgY2hhbmdlCj4gU3VyZSzCoCBJIHdpbGwgcmVtb3Zl IGl0Lgo+ID4KPiA+ID4gIAlyZXR1cm4gMDsKPiA+ID4gIH0KPiA+ID4gIAo+ID4gPiBAQCAtNTI2 LDMwICs1MzcsNiBAQCBzdGF0aWMgaW50IHRjbV9tZW1fbWFwKHN0cnVjdCBycHJvYyAqcnByb2Ms Cj4gPiA+ICAJLyogY2xlYXIgVENNcyAqLwo+ID4gPiAgCW1lbXNldF9pbyh2YSwgMCwgbWVtLT5s ZW4pOwo+ID4gPiAgCj4gPiA+IC0JLyoKPiA+ID4gLQkgKiBUaGUgUjVzIGV4cGVjdCB0aGVpciBU Q00gYmFua3MgdG8gYmUgYXQgYWRkcmVzcyAweDAgYW5kIDB4MjAwMCwKPiA+ID4gLQkgKiB3aGls ZSBvbiB0aGUgTGludXggc2lkZSB0aGV5IGFyZSBhdCAweGZmZXh4eHh4Lgo+ID4gPiAtCSAqCj4g PiA+IC0JICogWmVybyBvdXQgdGhlIGhpZ2ggMTIgYml0cyBvZiB0aGUgYWRkcmVzcy4gVGhpcyB3 aWxsIGdpdmUKPiA+ID4gLQkgKiBleHBlY3RlZCB2YWx1ZXMgZm9yIFRDTSBCYW5rcyAwQSBhbmQg MEIgKDB4MCBhbmQgMHgyMDAwMCkuCj4gPiA+IC0JICovCj4gPiA+IC0JbWVtLT5kYSAmPSAweDAw MGZmZmZmOwo+ID4gPiAtCj4gPiA+IC0JLyoKPiA+ID4gLQkgKiBUQ00gQmFua3MgMUEgYW5kIDFC IHN0aWxsIGhhdmUgdG8gYmUgdHJhbnNsYXRlZC4KPiA+ID4gLQkgKgo+ID4gPiAtCSAqIEJlbG93 IGhhbmRsZSB0aGVzZSB0d28gYmFua3MnIGFic29sdXRlIGFkZHJlc3NlcyAoMHhmZmU5MDAwMCBh bmQKPiA+ID4gLQkgKiAweGZmZWIwMDAwKSBhbmQgY29udmVydCB0byB0aGUgZXhwZWN0ZWQgcmVs YXRpdmUgYWRkcmVzc2VzCj4gPiA+IC0JICogKDB4MCBhbmQgMHgyMDAwMCkuCj4gPiA+IC0JICov Cj4gPiA+IC0JaWYgKG1lbS0+ZGEgPT0gMHg5MDAwMCB8fCBtZW0tPmRhID09IDB4QjAwMDApCj4g PiA+IC0JCW1lbS0+ZGEgLT0gMHg5MDAwMDsKPiA+ID4gLQo+ID4gPiAtCS8qIGlmIHRyYW5zbGF0 ZWQgVENNIGJhbmsgYWRkcmVzcyBpcyBub3QgdmFsaWQgcmVwb3J0IGVycm9yICovCj4gPiA+IC0J aWYgKG1lbS0+ZGEgIT0gMHgwICYmIG1lbS0+ZGEgIT0gMHgyMDAwMCkgewo+ID4gPiAtCQlkZXZf ZXJyKCZycHJvYy0+ZGV2LCAiaW52YWxpZCBUQ00gYWRkcmVzczogJXhcbiIsIG1lbS0+ZGEpOwo+ ID4gPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gLQl9Cj4gPiA+ICAJcmV0dXJuIDA7Cj4gPiA+ ICB9Cj4gPiA+ICAKPiA+ID4gQEAgLTU3MSw2ICs1NTgsNyBAQCBzdGF0aWMgaW50IGFkZF90Y21f Y2FydmVvdXRfc3BsaXRfbW9kZShzdHJ1Y3QgcnByb2MgKnJwcm9jKQo+ID4gPiAgCXUzMiBwbV9k b21haW5faWQ7Cj4gPiA+ICAJc2l6ZV90IGJhbmtfc2l6ZTsKPiA+ID4gIAljaGFyICpiYW5rX25h bWU7Cj4gPiA+ICsJdTMyIGRhOwo+ID4gPiAgCj4gPiA+ICAJcjVfY29yZSA9IHJwcm9jLT5wcml2 Owo+ID4gPiAgCWRldiA9IHI1X2NvcmUtPmRldjsKPiA+ID4gQEAgLTU4Niw2ICs1NzQsNyBAQCBz dGF0aWMgaW50IGFkZF90Y21fY2FydmVvdXRfc3BsaXRfbW9kZShzdHJ1Y3QgcnByb2MgKnJwcm9j KQo+ID4gPiAgCQliYW5rX25hbWUgPSByNV9jb3JlLT50Y21fYmFua3NbaV0tPmJhbmtfbmFtZTsK PiA+ID4gIAkJYmFua19zaXplID0gcjVfY29yZS0+dGNtX2JhbmtzW2ldLT5zaXplOwo+ID4gPiAg CQlwbV9kb21haW5faWQgPSByNV9jb3JlLT50Y21fYmFua3NbaV0tPnBtX2RvbWFpbl9pZDsKPiA+ ID4gKwkJZGEgPSByNV9jb3JlLT50Y21fYmFua3NbaV0tPmRhOwo+ID4gPiAgCj4gPiA+ICAJCXJl dCA9IHp5bnFtcF9wbV9yZXF1ZXN0X25vZGUocG1fZG9tYWluX2lkLAo+ID4gPiAgCQkJCQkgICAg IFpZTlFNUF9QTV9DQVBBQklMSVRZX0FDQ0VTUywgMCwKPiA+ID4gQEAgLTU5OSw3ICs1ODgsNyBA QCBzdGF0aWMgaW50IGFkZF90Y21fY2FydmVvdXRfc3BsaXRfbW9kZShzdHJ1Y3QgcnByb2MgKnJw cm9jKQo+ID4gPiAgCQkJYmFua19uYW1lLCBiYW5rX2FkZHIsIGJhbmtfc2l6ZSk7Cj4gPiA+ICAK PiA+ID4gIAkJcnByb2NfbWVtID0gcnByb2NfbWVtX2VudHJ5X2luaXQoZGV2LCBOVUxMLCBiYW5r X2FkZHIsCj4gPiA+IC0JCQkJCQkgYmFua19zaXplLCBiYW5rX2FkZHIsCj4gPiA+ICsJCQkJCQkg YmFua19zaXplLCBkYSwKPiA+ID4gIAkJCQkJCSB0Y21fbWVtX21hcCwgdGNtX21lbV91bm1hcCwK PiA+ID4gIAkJCQkJCSBiYW5rX25hbWUpOwo+ID4gPiAgCQlpZiAoIXJwcm9jX21lbSkgewo+ID4g PiBAQCAtNjMyLDE0ICs2MjEsMTQgQEAgc3RhdGljIGludCBhZGRfdGNtX2NhcnZlb3V0X3NwbGl0 X21vZGUoc3RydWN0IHJwcm9jICpycHJvYykKPiA+ID4gICAqLwo+ID4gPiAgc3RhdGljIGludCBh ZGRfdGNtX2NhcnZlb3V0X2xvY2tzdGVwX21vZGUoc3RydWN0IHJwcm9jICpycHJvYykKPiA+ID4g IHsKPiA+ID4gKwl1MzIgcG1fZG9tYWluX2lkLCBkYSwgcG1fZG9tYWluX2lkMjsKPiA+ID4gIAlz dHJ1Y3QgcnByb2NfbWVtX2VudHJ5ICpycHJvY19tZW07Cj4gPiA+ICAJc3RydWN0IHp5bnFtcF9y NV9jb3JlICpyNV9jb3JlOwo+ID4gPiAgCWludCBpLCBudW1fYmFua3MsIHJldDsKPiA+ID4gLQlw aHlzX2FkZHJfdCBiYW5rX2FkZHI7Cj4gPiA+IC0Jc2l6ZV90IGJhbmtfc2l6ZSA9IDA7Cj4gPiA+ ICsJdTMyIGJhbmtfc2l6ZSA9IDA7Cj4gPiA+ICAJc3RydWN0IGRldmljZSAqZGV2Owo+ID4gPiAt CXUzMiBwbV9kb21haW5faWQ7Cj4gPiA+ICAJY2hhciAqYmFua19uYW1lOwo+ID4gPiArCXUzMiBi YW5rX2FkZHI7Cj4gPiA+ICAKPiA+ID4gIAlyNV9jb3JlID0gcnByb2MtPnByaXY7Cj4gPiA+ICAJ ZGV2ID0gcjVfY29yZS0+ZGV2Owo+ID4gPiBAQCAtNjUzLDEyICs2NDIsMTYgQEAgc3RhdGljIGlu dCBhZGRfdGNtX2NhcnZlb3V0X2xvY2tzdGVwX21vZGUoc3RydWN0IHJwcm9jICpycHJvYykKPiA+ ID4gIAkgKiBTbywgRW5hYmxlIGVhY2ggVENNIGJsb2NrIGluZGl2aWR1YWxseSwgYnV0IGFkZCB0 aGVpciBzaXplCj4gPiA+ICAJICogdG8gY3JlYXRlIGNvbnRpZ3VvdXMgbWVtb3J5IHJlZ2lvbi4K PiA+ID4gIAkgKi8KPiA+ID4gLQliYW5rX2FkZHIgPSByNV9jb3JlLT50Y21fYmFua3NbMF0tPmFk ZHI7Cj4gPiA+IC0JYmFua19uYW1lID0gcjVfY29yZS0+dGNtX2JhbmtzWzBdLT5iYW5rX25hbWU7 Cj4gPiA+IC0KPiA+ID4gIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2JhbmtzOyBpKyspIHsKPiA+ID4g LQkJYmFua19zaXplICs9IHI1X2NvcmUtPnRjbV9iYW5rc1tpXS0+c2l6ZTsKPiA+ID4gKwkJYmFu a19hZGRyID0gcjVfY29yZS0+dGNtX2JhbmtzW2ldLT5hZGRyOwo+ID4gPiArCQliYW5rX25hbWUg PSByNV9jb3JlLT50Y21fYmFua3NbaV0tPmJhbmtfbmFtZTsKPiA+ID4gKwkJYmFua19zaXplID0g cjVfY29yZS0+dGNtX2JhbmtzW2ldLT5zaXplOwo+ID4gPiAgCQlwbV9kb21haW5faWQgPSByNV9j b3JlLT50Y21fYmFua3NbaV0tPnBtX2RvbWFpbl9pZDsKPiA+ID4gKwkJcG1fZG9tYWluX2lkMiA9 IHI1X2NvcmUtPnRjbV9iYW5rc1tpXS0+cG1fZG9tYWluX2lkMjsKPiA+ID4gKwkJZGEgPSByNV9j b3JlLT50Y21fYmFua3NbaV0tPmRhOwo+ID4gPiArCj4gPiA+ICsJCWRldl9kYmcoZGV2LCAiVENN ICVzIGFkZHI9MHgleCwgc2l6ZT0weCV4IiwKPiA+ID4gKwkJCWJhbmtfbmFtZSwgYmFua19hZGRy LCBiYW5rX3NpemUpOwo+ID4gPiAgCj4gPiA+ICAJCS8qIFR1cm4gb24gZWFjaCBUQ00gYmFuayBp bmRpdmlkdWFsbHkgKi8KPiA+ID4gIAkJcmV0ID0genlucW1wX3BtX3JlcXVlc3Rfbm9kZShwbV9k b21haW5faWQsCj4gPiA+IEBAIC02NjgsMjMgKzY2MSwyOCBAQCBzdGF0aWMgaW50IGFkZF90Y21f Y2FydmVvdXRfbG9ja3N0ZXBfbW9kZShzdHJ1Y3QgcnByb2MgKnJwcm9jKQo+ID4gPiAgCQkJZGV2 X2VycihkZXYsICJmYWlsZWQgdG8gdHVybiBvbiBUQ00gMHgleCIsIHBtX2RvbWFpbl9pZCk7Cj4g PiA+ICAJCQlnb3RvIHJlbGVhc2VfdGNtX2xvY2tzdGVwOwo+ID4gPiAgCQl9Cj4gPiA+IC0JfQo+ ID4gPiAgCj4gPiA+IC0JZGV2X2RiZyhkZXYsICJUQ00gYWRkIGNhcnZlb3V0IGxvY2tzdGVwIG1v ZGUgJXMgYWRkcj0weCVsbHgsIHNpemU9MHglbHgiLAo+ID4gPiAtCQliYW5rX25hbWUsIGJhbmtf YWRkciwgYmFua19zaXplKTsKPiA+ID4gLQo+ID4gPiAtCS8qIFJlZ2lzdGVyIFRDTSBhZGRyZXNz IHJhbmdlLCBUQ00gbWFwIGFuZCB1bm1hcCBmdW5jdGlvbnMgKi8KPiA+ID4gLQlycHJvY19tZW0g PSBycHJvY19tZW1fZW50cnlfaW5pdChkZXYsIE5VTEwsIGJhbmtfYWRkciwKPiA+ID4gLQkJCQkJ IGJhbmtfc2l6ZSwgYmFua19hZGRyLAo+ID4gPiAtCQkJCQkgdGNtX21lbV9tYXAsIHRjbV9tZW1f dW5tYXAsCj4gPiA+IC0JCQkJCSBiYW5rX25hbWUpOwo+ID4gPiAtCWlmICghcnByb2NfbWVtKSB7 Cj4gPiA+IC0JCXJldCA9IC1FTk9NRU07Cj4gPiA+IC0JCWdvdG8gcmVsZWFzZV90Y21fbG9ja3N0 ZXA7Cj4gPiA+IC0JfQo+ID4gPiArCQkvKiBUdXJuIG9uIGVhY2ggVENNIGJhbmsgaW5kaXZpZHVh bGx5ICovCj4gPiA+ICsJCXJldCA9IHp5bnFtcF9wbV9yZXF1ZXN0X25vZGUocG1fZG9tYWluX2lk MiwKPiA+ID4gKwkJCQkJICAgICBaWU5RTVBfUE1fQ0FQQUJJTElUWV9BQ0NFU1MsIDAsCj4gPiA+ ICsJCQkJCSAgICAgWllOUU1QX1BNX1JFUVVFU1RfQUNLX0JMT0NLSU5HKTsKPiA+ID4gKwkJaWYg KHJldCA8IDApIHsKPiA+ID4gKwkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHR1cm4gb24gVENN IDB4JXgiLCBwbV9kb21haW5faWQyKTsKPiA+ID4gKwkJCWdvdG8gcmVsZWFzZV90Y21fbG9ja3N0 ZXA7Cj4gPiA+ICsJCX0KPiA+ID4gIAo+ID4gPiAtCS8qIElmIHJlZ2lzdHJhdGlvbiBpcyBzdWNj ZXNzLCBhZGQgY2FydmVvdXRzICovCj4gPiA+IC0JcnByb2NfYWRkX2NhcnZlb3V0KHJwcm9jLCBy cHJvY19tZW0pOwo+ID4gPiArCQkvKiBSZWdpc3RlciBUQ00gYWRkcmVzcyByYW5nZSwgVENNIG1h cCBhbmQgdW5tYXAgZnVuY3Rpb25zICovCj4gPiA+ICsJCXJwcm9jX21lbSA9IHJwcm9jX21lbV9l bnRyeV9pbml0KGRldiwgTlVMTCwgYmFua19hZGRyLAo+ID4gPiArCQkJCQkJIGJhbmtfc2l6ZSwg ZGEsCj4gPiA+ICsJCQkJCQkgdGNtX21lbV9tYXAsIHRjbV9tZW1fdW5tYXAsCj4gPiA+ICsJCQkJ CQkgYmFua19uYW1lKTsKPiA+ID4gKwkJaWYgKCFycHJvY19tZW0pIHsKPiA+ID4gKwkJCXJldCA9 IC1FTk9NRU07Cj4gPiA+ICsJCQlnb3RvIHJlbGVhc2VfdGNtX2xvY2tzdGVwOwo+ID4gPiArCQl9 Cj4gPiA+ICsKPiA+ID4gKwkJcnByb2NfYWRkX2NhcnZlb3V0KHJwcm9jLCBycHJvY19tZW0pOwo+ ID4gPiArCX0KPiA+ID4gIAo+ID4gPiAgCXJldHVybiAwOwo+ID4gPiAgCj4gPiA+IEBAIC02OTMs NyArNjkxLDEyIEBAIHN0YXRpYyBpbnQgYWRkX3RjbV9jYXJ2ZW91dF9sb2Nrc3RlcF9tb2RlKHN0 cnVjdCBycHJvYyAqcnByb2MpCj4gPiA+ICAJZm9yIChpLS07IGkgPj0gMDsgaS0tKSB7Cj4gPiA+ ICAJCXBtX2RvbWFpbl9pZCA9IHI1X2NvcmUtPnRjbV9iYW5rc1tpXS0+cG1fZG9tYWluX2lkOwo+ ID4gPiAgCQl6eW5xbXBfcG1fcmVsZWFzZV9ub2RlKHBtX2RvbWFpbl9pZCk7Cj4gPiA+ICsJCWlm IChwbV9kb21haW5faWQyKSB7Cj4gPiA+ICsJCQlwbV9kb21haW5faWQyID0gcjVfY29yZS0+dGNt X2JhbmtzW2ldLT5wbV9kb21haW5faWQyOwo+ID4gPiArCQkJenlucW1wX3BtX3JlbGVhc2Vfbm9k ZShwbV9kb21haW5faWQyKTsKPiA+ID4gKwkJfQo+ID4gPiAgCX0KPiA+ID4gKwo+ID4gPiAgCXJl dHVybiByZXQ7Cj4gPiA+ICB9Cj4gPiA+ICAKPiA+ID4gQEAgLTgwMCwxNyArODAzLDIzIEBAIHN0 YXRpYyBpbnQgenlucW1wX3I1X3Jwcm9jX3ByZXBhcmUoc3RydWN0IHJwcm9jICpycHJvYykKPiA+ ID4gICAqLwo+ID4gPiAgc3RhdGljIGludCB6eW5xbXBfcjVfcnByb2NfdW5wcmVwYXJlKHN0cnVj dCBycHJvYyAqcnByb2MpCj4gPiA+ICB7Cj4gPiA+ICsJdTMyIHBtX2RvbWFpbl9pZCwgcG1fZG9t YWluX2lkMjsKPiA+ID4gIAlzdHJ1Y3QgenlucW1wX3I1X2NvcmUgKnI1X2NvcmU7Cj4gPiA+IC0J dTMyIHBtX2RvbWFpbl9pZDsKPiA+ID4gIAlpbnQgaTsKPiA+ID4gIAo+ID4gPiAgCXI1X2NvcmUg PSBycHJvYy0+cHJpdjsKPiA+ID4gIAo+ID4gPiAgCWZvciAoaSA9IDA7IGkgPCByNV9jb3JlLT50 Y21fYmFua19jb3VudDsgaSsrKSB7Cj4gPiA+ICAJCXBtX2RvbWFpbl9pZCA9IHI1X2NvcmUtPnRj bV9iYW5rc1tpXS0+cG1fZG9tYWluX2lkOwo+ID4gPiArCQlwbV9kb21haW5faWQyID0gcjVfY29y ZS0+dGNtX2JhbmtzW2ldLT5wbV9kb21haW5faWQyOwo+ID4gPiAgCQlpZiAoenlucW1wX3BtX3Jl bGVhc2Vfbm9kZShwbV9kb21haW5faWQpKQo+ID4gPiAgCQkJZGV2X3dhcm4ocjVfY29yZS0+ZGV2 LAo+ID4gPiAgCQkJCSAiY2FuJ3QgdHVybiBvZmYgVENNIGJhbmsgMHgleCIsIHBtX2RvbWFpbl9p ZCk7Cj4gPiA+ICsJCWlmIChwbV9kb21haW5faWQyICYmIHp5bnFtcF9wbV9yZWxlYXNlX25vZGUo cG1fZG9tYWluX2lkMikpCj4gPiA+ICsJCQlkZXZfd2FybihyNV9jb3JlLT5kZXYsCj4gPiA+ICsJ CQkJICJjYW4ndCB0dXJuIG9mZiBUQ00gYmFuayAweCV4IiwgcG1fZG9tYWluX2lkMik7Cj4gPiA+ ICsJCWRldl9kYmcocjVfY29yZS0+ZGV2LCAicG1fZG9tYWluX2lkPSVkLCBwbV9kb21haW5faWQy PSVkXG4iLAo+ID4gPiArCQkJcG1fZG9tYWluX2lkLCBwbV9kb21haW5faWQyKTsKPiA+ID4gIAl9 Cj4gPiA+ICAKPiA+ID4gIAlyZXR1cm4gMDsKPiA+ID4gQEAgLTg4Myw2ICs4OTIsMTM3IEBAIHN0 YXRpYyBzdHJ1Y3QgenlucW1wX3I1X2NvcmUgKnp5bnFtcF9yNV9hZGRfcnByb2NfY29yZShzdHJ1 Y3QgZGV2aWNlICpjZGV2KQo+ID4gPiAgCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gPiA+ICB9Cj4g PiA+ICAKPiA+ID4gK3N0YXRpYyBpbnQgenlucW1wX3I1X2dldF90Y21fbm9kZV9mcm9tX2R0KHN0 cnVjdCB6eW5xbXBfcjVfY2x1c3RlciAqY2x1c3RlcikKPiA+ID4gK3sKPiA+ID4gKwlpbnQgaSwg aiwgdGNtX2JhbmtfY291bnQsIHJldCA9IC1FSU5WQUw7Cj4gPiA+ICsJc3RydWN0IHp5bnFtcF9y NV9jb3JlICpyNV9jb3JlOwo+ID4gPiArCXN0cnVjdCBvZl9waGFuZGxlX2FyZ3Mgb3V0X2FyZzsK PiA+ID4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjcGRldjsKPiA+ID4gKwlzdHJ1Y3QgcmVz b3VyY2UgKnJlcyA9IE5VTEw7Cj4gPiA+ICsJdTY0IGFic19hZGRyID0gMCwgc2l6ZSA9IDA7Cj4g PiA+ICsJc3RydWN0IG1lbV9iYW5rX2RhdGEgKnRjbTsKPiA+ID4gKwlzdHJ1Y3QgZGV2aWNlX25v ZGUgKm5wLCAqbnAxID0gTlVMTDsKPiA+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gPiA+ICsK PiA+ID4gKwlmb3IgKGkgPSAwOyBpIDwgY2x1c3Rlci0+Y29yZV9jb3VudDsgaSsrKSB7Cj4gPiA+ ICsJCXI1X2NvcmUgPSBjbHVzdGVyLT5yNV9jb3Jlc1tpXTsKPiA+ID4gKwkJZGV2ID0gcjVfY29y ZS0+ZGV2Owo+ID4gPiArCQlucCA9IGRldl9vZl9ub2RlKGRldik7Cj4gPiA+ICsKPiA+ID4gKwkJ Lyogd2UgaGF2ZSBhZGRyZXNzIGNlbGwgMiBhbmQgc2l6ZSBjZWxsIGFzIDIgKi8KPiA+ID4gKwkJ cmV0ID0gb2ZfcHJvcGVydHlfY291bnRfZWxlbXNfb2Zfc2l6ZShucCwgInJlZyIsCj4gPiA+ICsJ CQkJCQkgICAgICA0ICogc2l6ZW9mKHUzMikpOwo+ID4gPiArCQlpZiAocmV0IDw9IDApIHsKPiA+ ID4gKwkJCXJldCA9IC1FSU5WQUw7Cj4gPiA+ICsJCQlnb3RvIGZhaWxfdGNtOwo+ID4gPiArCQl9 Cj4gPiA+ICsKPiA+ID4gKwkJdGNtX2JhbmtfY291bnQgPSByZXQ7Cj4gPiA+ICsKPiA+ID4gKwkJ cjVfY29yZS0+dGNtX2JhbmtzID0gZGV2bV9rY2FsbG9jKGRldiwgdGNtX2JhbmtfY291bnQsCj4g PiA+ICsJCQkJCQkgIHNpemVvZihzdHJ1Y3QgbWVtX2JhbmtfZGF0YSAqKSwKPiA+ID4gKwkJCQkJ CSAgR0ZQX0tFUk5FTCk7Cj4gPiA+ICsJCWlmICghcjVfY29yZS0+dGNtX2JhbmtzKSB7Cj4gPiA+ ICsJCQlyZXQgPSAtRU5PTUVNOwo+ID4gPiArCQkJZ290byBmYWlsX3RjbTsKPiA+ID4gKwkJfQo+ ID4gPiArCj4gPiA+ICsJCXI1X2NvcmUtPnRjbV9iYW5rX2NvdW50ID0gdGNtX2JhbmtfY291bnQ7 Cj4gPiA+ICsJCWZvciAoaiA9IDA7IGogPCB0Y21fYmFua19jb3VudDsgaisrKSB7Cj4gPiA+ICsJ CQl0Y20gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWVtX2JhbmtfZGF0YSAqKSwgR0ZQX0tFUk5F TCk7Cj4gPiA+ICsJCQlpZiAoIXRjbSkgewo+ID4gPiArCQkJCXJldCA9IC1FTk9NRU07Cj4gPiA+ ICsJCQkJZ290byBmYWlsX3RjbTsKPiA+ID4gKwkJCX0KPiA+ID4gKwo+ID4gPiArCQkJcjVfY29y ZS0+dGNtX2JhbmtzW2pdID0gdGNtOwo+ID4gPiArCQkJLyogZ2V0IHRjbSBhZGRyZXNzIHdpdGhv dXQgdHJhbnNsYXRpb24gKi8KPiA+ID4gKwkJCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfcmVnKG5w LCBqLCAmYWJzX2FkZHIsICZzaXplKTsKPiA+ID4gKwkJCWlmIChyZXQpIHsKPiA+ID4gKwkJCQlk ZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgcmVnIHByb3BlcnR5XG4iKTsKPiA+ID4gKwkJCQln b3RvIGZhaWxfdGNtOwo+ID4gPiArCQkJfQo+ID4gPiArCj4gPiA+ICsJCQkvKgo+ID4gPiArCQkJ ICogcmVtb3RlIHByb2Nlc3NvciBjYW4gYWRkcmVzcyBvbmx5IDMyIGJpdHMKPiA+ID4gKwkJCSAq IHNvIGNvbnZlcnQgNjQtYml0cyBpbnRvIDMyLWJpdHMuIFRoaXMgd2lsbCBkaXNjYXJkCj4gPiA+ ICsJCQkgKiBhbnkgdW53YW50ZWQgdXBwZXIgMzItYml0cy4KPiA+ID4gKwkJCSAqLwo+ID4gPiAr CQkJdGNtLT5kYSA9ICh1MzIpYWJzX2FkZHI7Cj4gPiA+ICsJCQl0Y20tPnNpemUgPSAodTMyKXNp emU7Cj4gPiA+ICsKPiA+ID4gKwkJCWNwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Cj4g PiA+ICsJCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoY3BkZXYsIElPUkVTT1VSQ0VfTUVN LCBqKTsKPiA+ID4gKwkJCWlmICghcmVzKSB7Cj4gPiA+ICsJCQkJZGV2X2VycihkZXYsICJmYWls ZWQgdG8gZ2V0IHRjbSByZXNvdXJjZVxuIik7Cj4gPiA+ICsJCQkJcmV0ID0gLUVJTlZBTDsKPiA+ ID4gKwkJCQlnb3RvIGZhaWxfdGNtOwo+ID4gPiArCQkJfQo+ID4gPiArCj4gPiA+ICsJCQl0Y20t PmFkZHIgPSAodTMyKXJlcy0+c3RhcnQ7Cj4gPiA+ICsJCQlyZXMgPSBkZXZtX3JlcXVlc3RfbWVt X3JlZ2lvbihkZXYsIHRjbS0+YWRkciwgdGNtLT5zaXplLCByZXMtPm5hbWUpOwo+ID4gPiArCQkJ aWYgKCFyZXMpIHsKPiA+ID4gKwkJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXF1ZXN0IHRj bSByZXNvdXJjZVxuIik7Cj4gPiA+ICsJCQkJcmV0ID0gLUVJTlZBTDsKPiA+ID4gKwkJCQlnb3Rv IGZhaWxfdGNtOwo+ID4gPiArCQkJfQo+ID4gPiArCj4gPiA+ICsJCQltZW1jcHkodGNtLT5iYW5r X25hbWUsIHJlcy0+bmFtZSwgQVJSQVlfU0laRSh0Y20tPmJhbmtfbmFtZSkpOwo+ID4gPiArCQkJ bnAgPSBvZl9ub2RlX2dldChkZXZfb2Zfbm9kZShkZXYpKTsKPiA+ID4gKwkJCS8qCj4gPiA+ICsJ CQkgKiBJbiBkdCBwb3dlci1kb21haW5zIGFyZSBkZXNjcmliZWQgaW4gdGhpcyBvcmRlcjoKPiA+ ID4gKwkJCSAqIDxSUFUgY29yZT4sIDxhdGNtPiwgIDxidGNtPgo+ID4gPiArCQkJICogcGFyc2Ug cG93ZXIgZG9tYWlucyBmb3IgdGNtIGFjY29yZGluZ2x5Cj4gPiA+ICsJCQkgKi8KPiA+ID4gKwkJ CW9mX3BhcnNlX3BoYW5kbGVfd2l0aF9hcmdzKG5wLCAicG93ZXItZG9tYWlucyIsCj4gPiA+ICsJ CQkJCQkgICAiI3Bvd2VyLWRvbWFpbi1jZWxscyIsCj4gPiA+ICsJCQkJCQkgICBqICsgMSwgJm91 dF9hcmcpOwo+ID4gPiArCQkJdGNtLT5wbV9kb21haW5faWQgPSBvdXRfYXJnLmFyZ3NbMF07Cj4g PiA+ICsJCQlvZl9ub2RlX3B1dChvdXRfYXJnLm5wKTsKPiA+ID4gKwo+ID4gPiArCQkJZGV2X2Ri ZyhkZXYsICJUQ006ICVzLCBkbWE9MHgleCwgZGE9MHgleCwgc2l6ZT0weCV4XG4iLAo+ID4gPiAr CQkJCXRjbS0+YmFua19uYW1lLCB0Y20tPmFkZHIsIHRjbS0+ZGEsIHRjbS0+c2l6ZSk7Cj4gPiA+ ICsJCQlkZXZfZGJnKGRldiwgInRjbSBwbSBkb21haW4gaWQgJWRcbiIsIHRjbS0+cG1fZG9tYWlu X2lkKTsKPiA+ID4gKwo+ID4gPiArCQkJaWYgKGNsdXN0ZXItPm1vZGUgPT0gU1BMSVRfTU9ERSkK PiA+ID4gKwkJCQljb250aW51ZTsKPiA+ID4gKwo+ID4gPiArCQkJLyogVHVybiBvbiBjb3JlLTEn cyBUQ00gYXMgd2VsbCAqLwo+ID4gPiArCQkJbnAxID0gb2ZfZ2V0X25leHRfY2hpbGQoZGV2X29m X25vZGUoY2x1c3Rlci0+ZGV2KSwKPiA+ID4gKwkJCQkJCXI1X2NvcmUtPm5wKTsKPiA+ID4gKwkJ CWlmICghbnAxKSB7Cj4gPiA+ICsJCQkJb2Zfbm9kZV9wdXQobnAxKTsKPiA+ID4gKwkJCQlucDEg PSBOVUxMOwo+ID4gPiArCQkJCWdvdG8gZmFpbF90Y207Cj4gPiA+ICsJCQl9Cj4gPiA+ICsKPiA+ ID4gKwkJCW9mX3BhcnNlX3BoYW5kbGVfd2l0aF9hcmdzKG5wMSwgInBvd2VyLWRvbWFpbnMiLAo+ ID4gPiArCQkJCQkJICAgIiNwb3dlci1kb21haW4tY2VsbHMiLAo+ID4gPiArCQkJCQkJICAgaiAr IDEsICZvdXRfYXJnKTsKPiA+ID4gKwkJCXRjbS0+cG1fZG9tYWluX2lkMiA9IG91dF9hcmcuYXJn c1swXTsKPiA+ID4gKwkJCW9mX25vZGVfcHV0KG91dF9hcmcubnApOwo+ID4gPiArCQkJZGV2X2Ri ZyhkZXYsICJ0Y20gcG0gZG9tYWluIGlkICVkXG4iLCB0Y20tPnBtX2RvbWFpbl9pZDIpOwo+ID4g PiArCQl9Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIDA7Cj4gPiA+ICsKPiA+ID4g K2ZhaWxfdGNtOgo+ID4gPiArCXdoaWxlIChpID49IDApIHsKPiA+ID4gKwkJcjVfY29yZSA9IGNs dXN0ZXItPnI1X2NvcmVzW2ldOwo+ID4gPiArCQlmb3IgKGogPSAwOyBqIDwgcjVfY29yZS0+dGNt X2JhbmtfY291bnQ7IGorKykgewo+ID4gPiArCQkJaWYgKCFyNV9jb3JlLT50Y21fYmFua3MpCj4g PiA+ICsJCQkJY29udGludWU7Cj4gPiA+ICsJCQl0Y20gPSByNV9jb3JlLT50Y21fYmFua3Nbal07 Cj4gPiA+ICsJCQlrZnJlZSh0Y20pOwo+ID4gPiArCQl9Cj4gPiA+ICsJCWtmcmVlKHI1X2NvcmUt PnRjbV9iYW5rcyk7Cj4gPiA+ICsJCWktLTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlyZXR1 cm4gcmV0Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICAvKioKPiA+ID4gICAqIHp5bnFtcF9yNV9n ZXRfdGNtX25vZGUoKQo+ID4gPiAgICogSWRlYWxseSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBwYXJz ZSB0Y20gbm9kZSBhbmQgc3RvcmUgaW5mb3JtYXRpb24KPiA+ID4gQEAgLTg5NSwxMiArMTAzNSwy MCBAQCBzdGF0aWMgc3RydWN0IHp5bnFtcF9yNV9jb3JlICp6eW5xbXBfcjVfYWRkX3Jwcm9jX2Nv cmUoc3RydWN0IGRldmljZSAqY2RldikKPiA+ID4gICAqLwo+ID4gPiAgc3RhdGljIGludCB6eW5x bXBfcjVfZ2V0X3RjbV9ub2RlKHN0cnVjdCB6eW5xbXBfcjVfY2x1c3RlciAqY2x1c3RlcikKPiA+ ID4gIHsKPiA+ID4gKwljb25zdCBzdHJ1Y3QgbWVtX2JhbmtfZGF0YSAqenlucW1wX3RjbV9iYW5r czsKPiA+ID4gIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjbHVzdGVyLT5kZXY7Cj4gPiA+ICAJc3Ry dWN0IHp5bnFtcF9yNV9jb3JlICpyNV9jb3JlOwo+ID4gPiAgCWludCB0Y21fYmFua19jb3VudCwg dGNtX25vZGU7Cj4gPiA+ICAJaW50IGksIGo7Cj4gPiA+ICAKPiA+ID4gLQl0Y21fYmFua19jb3Vu dCA9IEFSUkFZX1NJWkUoenlucW1wX3RjbV9iYW5rcyk7Cj4gPiA+ICsJaWYgKGNsdXN0ZXItPm1v ZGUgPT0gU1BMSVRfTU9ERSkgewo+ID4gPiArCQl6eW5xbXBfdGNtX2JhbmtzID0genlucW1wX3Rj bV9iYW5rc19zcGxpdDsKPiA+ID4gKwkJdGNtX2JhbmtfY291bnQgPSBBUlJBWV9TSVpFKHp5bnFt cF90Y21fYmFua3Nfc3BsaXQpOwo+ID4gPiArCX0gZWxzZSB7Cj4gPiA+ICsJCXp5bnFtcF90Y21f YmFua3MgPSB6eW5xbXBfdGNtX2JhbmtzX2xvY2tzdGVwOwo+ID4gPiArCQl0Y21fYmFua19jb3Vu dCA9IEFSUkFZX1NJWkUoenlucW1wX3RjbV9iYW5rc19sb2Nrc3RlcCk7Cj4gPiA+ICsJfQo+ID4K PiA+IFdoeSBhcmUgdGhlIGNoYW5nZXMgdG8gZ2V0IFRDTSBiYW5rIGluZm9ybWF0aW9uIGZyb20g dGhlIERUIGFuZCBlbmhhbmNlbWVudCB0bwo+ID4gc3VwcG9ydCBsb2Nrc3RlcCBtb2RlIGluIHRo ZSBzYW1lIHBhdGNoPwo+Cj4gQWN0dWFsbHkgVENNIGluIGxvY2tzdGVwIG1vZGUgd2FzIHN1cHBv cnRlZCBiZWZvcmUgYXMgd2VsbC4gSXQncyBqdXN0IEkgd2FzIHVzaW5nIHNhbWUgdGFibGUgaW4g bG9ja3N0ZXAgbW9kZSBiZWZvcmUuCj4KPiBIb3dldmVyLCBub3cgSSBhbSBoYXZpbmcgdHdvIHRh YmxlcyBmb3Igc3BsaXQgbW9kZSBhbmQgbG9ja3N0ZXAgbW9kZS4KPgo+IEkgaGFkIHRvIGRvIHRo aXMgYXMgSSBoYXZlIGludHJvZHVjZWQgImRhIiBmaWVsZCBpbiAic3RydWN0IG1lbV9iYW5rX2Rh dGEiIG9iamVjdC7CoCBUaGlzIG1ha2VzIGl0IGVhc3kgdG8gcHJvY2Vzcwo+Cj4gImRldmljZSBh ZGRyZXNzIiBkZXJpdmVkIGZyb20gZGV2aWNlLXRyZWUuCj4KPiBBbmQgYXMgSSBoYXZlIGludHJv ZHVjZWQgInUzMiBkYSIsIEkgaGFkIHRvIG1vZGlmeSB0YWJsZSBhcyB3ZWxsIGFuZCByZW1vdmUg aGFyZGNvZGluZyBvZiAiZGEiIGNhbGN1bGF0aW9uIGluICJ0Y21fbWVtX21hcCIgZnVuY3Rpb24u Cj4KPiBBcyBhbGwgb2YgdGhpcyBpcyBjb25uZWN0ZWQsIEkgaGF2ZSB0aGVtIGluIHNhbWUgcGF0 Y2guIE5vIG5ldyBmdW5jdGlvbmFsaXR5IGlzIGFkZGVkLCBidXQganVzdCBjb2RlIHJlZmFjdG9y aW5nLgo+Cj4gPiA+ICsKPiA+ID4gIAo+ID4gPiAgCS8qIGNvdW50IHBlciBjb3JlIHRjbSBiYW5r cyAqLwo+ID4gPiAgCXRjbV9iYW5rX2NvdW50ID0gdGNtX2JhbmtfY291bnQgLyBjbHVzdGVyLT5j b3JlX2NvdW50Owo+ID4gPiBAQCAtOTUxLDEwICsxMDk5LDI1IEBAIHN0YXRpYyBpbnQgenlucW1w X3I1X2NvcmVfaW5pdChzdHJ1Y3QgenlucW1wX3I1X2NsdXN0ZXIgKmNsdXN0ZXIsCj4gPiA+ICAJ CQkgICAgICAgZW51bSBycHVfdGNtX2NvbWIgdGNtX21vZGUpCj4gPiA+ICB7Cj4gPiA+ICAJc3Ry dWN0IGRldmljZSAqZGV2ID0gY2x1c3Rlci0+ZGV2Owo+ID4gPiArCXN0cnVjdCBkZXZpY2Vfbm9k ZSAqbnA7Cj4gPiA+ICAJc3RydWN0IHp5bnFtcF9yNV9jb3JlICpyNV9jb3JlOwo+ID4gPiAgCWlu dCByZXQsIGk7Cj4gPiA+ICAKPiA+ID4gLQlyZXQgPSB6eW5xbXBfcjVfZ2V0X3RjbV9ub2RlKGNs dXN0ZXIpOwo+ID4gPiArCS8qCj4gPiA+ICsJICogdHJ5IHRvIGdldCB0Y20gbm9kZXMgZnJvbSBk dCBidXQgaWYgZmFpbCwgdXNlIGhhcmRjb2RlIGFkZHJlc3NlcyBvbmx5Cj4gPiA+ICsJICogZm9y IHp5bnFtcCBwbGF0Zm9ybS4gTmV3IHBsYXRmb3JtcyBtdXN0IHVzZSBkdCBiaW5kaW5ncyBmb3Ig VENNLgo+ID4gPiArCSAqLwo+ID4gPiArCXJldCA9IHp5bnFtcF9yNV9nZXRfdGNtX25vZGVfZnJv bV9kdChjbHVzdGVyKTsKPiA+ID4gKwlpZiAocmV0KSB7Cj4gPiA+ICsJCW5wID0gb2ZfZ2V0X2Nv bXBhdGlibGVfY2hpbGQoZGV2X29mX25vZGUoZGV2KSwgInhsbngsenlucW1wLXI1ZiIpOwo+ID4g PiArCQlpZiAobnApIHsKPiA+Cj4gPiBXaHkgd2FzIHRoaXMgY2hlY2sgYWRkZWQ/Cj4KPiBXZSB3 YW50IHRvIG1haW50YWluIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cyBiaW5k aW5ncyBvbmx5IGZvciB6eW5xbXAgcGxhdGZvcm0uCj4KPiBTbywgaGFyZGNvZGUgdGFibGUgaXMg dXNlZCBvbmx5IGZvciAienlucW1wIiBwbGF0Zm9ybSBpZiBnZXR0aW5nICJyZWciIGluZm9ybWF0 aW9uIGZyb20gZGV2aWNlLXRyZWUgZmFpbHMuCj4KPiBJZiBub2RlIGlzIG5vdCBjb21wYXRpYmxl IHdpdGggInhsbngsenlucW1wLXI1ZiIgdGhlbiBpdCBpcyBuZXcgcGxhdGZvcm0gYW5kIHdlIG11 c3Qgbm90IHVzZSBoYXJkY29kZQo+Cj4gdGFibGUgaW5zdGVhZCB3ZSBzaG91bGQgZmFpbC4KPgo+ Cj4gPiBTbyBmYXIgdGhlcmUgYXJlIHRvbyBtYW55IHVuYW5zd2VyZWQgcXVlc3Rpb25zIHdpdGgg dGhpcyBwYXRjaHNldCBhbmQgYXMgc3VjaCBJCj4gPiB3aWxsIHN0b3AgaGVyZS4KPgo+IE5vIHBy b2JsZW0uIFBsZWFzZSBsZXQgbWUga25vdyBpZiB5b3UgaGF2ZSBhbnkgZnVydGhlciBxdWVzdGlv bnMuCgpIaSBNYXRoaWV1LAoKRGlkIHlvdSB3YW50IG1lIHRvIGRvY3VtZW50IGFsbCB0aGUgY29t bWVudHMgSSBtZW50aW9uZWQgaW4gZHJpdmVyIGFuZCBzZW5kIG5ldyBwYXRjaHNldCBvciBjYW4g d2UgY29udGludWUgcmV2aWV3cyA/CgpJIGFtIGZpbmUgZWl0aGVyIHdheS4gTGV0IG1lIGtub3cu CgpUaGFua3MsCgpUYW5tYXkKCj4KPgo+ID4gTWF0aGlldQo+ID4KPiA+ID4gKwkJCXJldCA9IHp5 bnFtcF9yNV9nZXRfdGNtX25vZGUoY2x1c3Rlcik7Cj4gPiA+ICsJCX0gZWxzZSB7Cj4gPiA+ICsJ CQlkZXZfZXJyKGRldiwgInRjbSBub3QgZm91bmRcbiIpOwo+ID4gPiArCQkJcmV0dXJuIC1FSU5W QUw7Cj4gPiA+ICsJCX0KPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gIAlpZiAocmV0IDwgMCkgewo+ ID4gPiAgCQlkZXZfZXJyKGRldiwgImNhbid0IGdldCB0Y20gbm9kZSwgZXJyICVkXG4iLCByZXQp Owo+ID4gPiAgCQlyZXR1cm4gcmV0Owo+ID4gPiAtLSAKPiA+ID4gMi4yNS4xCj4gPiA+IAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtl cm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0 dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5l bAo=