From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8768B205E0A for ; Mon, 22 Apr 2024 05:22:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.7 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713763358; cv=none; b=Z9r0792OWNBI7kd1hHNjgYBk5tT+kZyBVLV4CC05g996prR6QkqOhmTWhONVRSWvENMe21fBEIpnqRAPS9COT0YFTUdaz9D7B6XdRrMjRgPgEgfZZ6bmwtoIFOvDOw5FjWnJ/7dhMHVFwV0uV6EGoc4x2oFpGmFTPNrSpbVjx/s= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713763358; c=relaxed/simple; bh=ZKqatucqlCT9kWZz8IX/UslCh9aEuPFTXZOmstfs/CU=; h=Message-ID:Date:MIME-Version:Cc:Subject:To:References:From: In-Reply-To:Content-Type; b=MQGcraHufh5PqR+Kdqv6HatDqNUqXDvRjf7IK1tYd9/PJQS6AuN6vCfbOf5S+/cqS7XJUdOTJNSQ9lisM+mCLNhCPok/LiMuuzjsbk6d47MaR2z1jYETEuvQ6ymC/lM/02V0BJw/cjP1nWfIpQ+JEAwY2cnN4nWPdT972qNTJzg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=lE/YPNbh; arc=none smtp.client-ip=192.198.163.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="lE/YPNbh" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1713763356; x=1745299356; h=message-id:date:mime-version:cc:subject:to:references: from:in-reply-to:content-transfer-encoding; bh=ZKqatucqlCT9kWZz8IX/UslCh9aEuPFTXZOmstfs/CU=; b=lE/YPNbhnJwgEwITJyFieqdud+Hsr95PUSs0sHRDw1sktoQSPoPHH9nt nEXUatZQrQc3E+lnRBMoDu2Rc4mSlxE2puInTb0io7HpGx/klZaFpYVKd VR9RmTFzkBhNG6nk5264xZFTUvK402s7bCYucU4vBEE/k7ACk0GRjzjfQ f7vbvhN4OYbgSq1JCn/RbXLyXNxfbi0BD6LPfmq86ZKBOPcXEzy8e0OMU K44ywQe4HBguzo6t3z+1Fxd7Chu1r8AIT4BnGiUW9aFxRrxD3u/zvgxBe UKAYai4kx0YejnhLv2rlnewuYEJ0I+iMNm++cbWOpkNEunUeNSOWYavnz g==; X-CSE-ConnectionGUID: QpeR37FCRRWfRhUsBHG3kw== X-CSE-MsgGUID: nnLUs64gReWNPI5kwnug5Q== X-IronPort-AV: E=McAfee;i="6600,9927,11051"; a="34683065" X-IronPort-AV: E=Sophos;i="6.07,219,1708416000"; d="scan'208";a="34683065" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Apr 2024 22:22:31 -0700 X-CSE-ConnectionGUID: 3AUe3Y+NQx2mxryv5T9TlQ== X-CSE-MsgGUID: N7gOqtsFQ8W23/Oj5az/fg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,219,1708416000"; d="scan'208";a="23952539" Received: from unknown (HELO [10.239.159.127]) ([10.239.159.127]) by fmviesa006.fm.intel.com with ESMTP; 21 Apr 2024 22:22:26 -0700 Message-ID: <2f2750cd-a5bf-4486-8f50-c93d246f8b0c@linux.intel.com> Date: Mon, 22 Apr 2024 13:21:05 +0800 Precedence: bulk X-Mailing-List: iommu@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Cc: baolu.lu@linux.intel.com, Palmer Dabbelt , Albert Ou , Anup Patel , Sunil V L , Nick Kossifidis , Sebastien Boeuf , Rob Herring , Krzysztof Kozlowski , Conor Dooley , devicetree@vger.kernel.org, iommu@lists.linux.dev, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux@rivosinc.com Subject: Re: [PATCH v2 7/7] iommu/riscv: Paging domain support To: Tomasz Jeznach , Joerg Roedel , Will Deacon , Robin Murphy , Paul Walmsley References: <301244bc3ff5da484b46d3fecc931cdad7d2806f.1713456598.git.tjeznach@rivosinc.com> Content-Language: en-US From: Baolu Lu In-Reply-To: <301244bc3ff5da484b46d3fecc931cdad7d2806f.1713456598.git.tjeznach@rivosinc.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 4/19/24 12:32 AM, Tomasz Jeznach wrote: > Introduce first-stage address translation support. > > Page table configured by the IOMMU driver will use the same format > as the CPU’s MMU, and will fallback to identity translation if the > page table format configured for the MMU is not supported by the > IOMMU hardware. > > This change introduces IOTINVAL.VMA command, required to invalidate > any cached IOATC entries after mapping is updated and/or removed from > the paging domain. Invalidations for the non-leaf page entries will > be added to the driver code in separate patch series, following spec > update to clarify non-leaf cache invalidation command. With this patch, > allowing only 4K mappings and keeping non-leaf page entries in memory > this should be a reasonable simplification. > > Signed-off-by: Tomasz Jeznach > --- > drivers/iommu/riscv/Kconfig | 1 + > drivers/iommu/riscv/iommu.c | 467 +++++++++++++++++++++++++++++++++++- > 2 files changed, 466 insertions(+), 2 deletions(-) > [...] > + > static int riscv_iommu_attach_domain(struct riscv_iommu_device *iommu, > struct device *dev, > struct iommu_domain *iommu_domain) > { > struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev); > + struct riscv_iommu_domain *domain; > struct riscv_iommu_dc *dc; > + struct riscv_iommu_bond *bond = NULL, *b; > + struct riscv_iommu_command cmd; > u64 fsc, ta, tc; > int i; > > @@ -769,6 +838,20 @@ static int riscv_iommu_attach_domain(struct riscv_iommu_device *iommu, > ta = 0; > tc = RISCV_IOMMU_DC_TC_V; > fsc = FIELD_PREP(RISCV_IOMMU_DC_FSC_MODE, RISCV_IOMMU_DC_FSC_MODE_BARE); > + } else if (iommu_domain->type & __IOMMU_DOMAIN_PAGING) { > + domain = iommu_domain_to_riscv(iommu_domain); > + > + ta = FIELD_PREP(RISCV_IOMMU_PC_TA_PSCID, domain->pscid); > + tc = RISCV_IOMMU_DC_TC_V; > + if (domain->amo_enabled) > + tc |= RISCV_IOMMU_DC_TC_SADE; > + fsc = FIELD_PREP(RISCV_IOMMU_PC_FSC_MODE, domain->pgd_mode) | > + FIELD_PREP(RISCV_IOMMU_PC_FSC_PPN, virt_to_pfn(domain->pgd_root)); > + > + bond = kzalloc(sizeof(*bond), GFP_KERNEL); > + if (!bond) > + return -ENOMEM; > + bond->dev = dev; > } else { > /* This should never happen. */ > return -ENODEV; > @@ -787,12 +870,390 @@ static int riscv_iommu_attach_domain(struct riscv_iommu_device *iommu, > xchg64(&dc->ta, ta); > xchg64(&dc->tc, tc); > > - /* Device context invalidation will be required. Ignoring for now. */ > + if (!(tc & RISCV_IOMMU_DC_TC_V)) > + continue; > + > + /* Invalidate device context cache */ > + riscv_iommu_cmd_iodir_inval_ddt(&cmd); > + riscv_iommu_cmd_iodir_set_did(&cmd, fwspec->ids[i]); > + riscv_iommu_cmd_send(iommu, &cmd, 0); > + > + if (FIELD_GET(RISCV_IOMMU_PC_FSC_MODE, fsc) == RISCV_IOMMU_DC_FSC_MODE_BARE) > + continue; > + > + /* Invalidate last valid PSCID */ > + riscv_iommu_cmd_inval_vma(&cmd); > + riscv_iommu_cmd_inval_set_pscid(&cmd, FIELD_GET(RISCV_IOMMU_DC_TA_PSCID, ta)); > + riscv_iommu_cmd_send(iommu, &cmd, 0); > + } > + > + /* Synchronize directory update */ > + riscv_iommu_cmd_iofence(&cmd); > + riscv_iommu_cmd_send(iommu, &cmd, RISCV_IOMMU_IOTINVAL_TIMEOUT); > + > + /* Track domain to devices mapping. */ > + if (bond) > + list_add_rcu(&bond->list, &domain->bonds); > + > + /* Remove tracking from previous domain, if needed. */ > + iommu_domain = iommu_get_domain_for_dev(dev); Calling iommu_get_domain_for_dev() in the domain attaching path is very fragile because it heavily depends on the order of calling the attach callback and setting the domain pointer in the core. Perhaps the driver can use dev_iommu_priv_set/get() to keep the active domain in the per-device private data? > + if (iommu_domain && !!(iommu_domain->type & __IOMMU_DOMAIN_PAGING)) { > + domain = iommu_domain_to_riscv(iommu_domain); > + bond = NULL; > + rcu_read_lock(); > + list_for_each_entry_rcu(b, &domain->bonds, list) { > + if (b->dev == dev) { > + bond = b; > + break; > + } > + } > + rcu_read_unlock(); > + > + if (bond) { > + list_del_rcu(&bond->list); > + kfree_rcu(bond, rcu); > + } > + } > + > + return 0; > +} Best regards, baolu 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 3357EC4345F for ; Mon, 22 Apr 2024 05:22:46 +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-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:To:Subject:MIME-Version: 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=Q89wjk9LnV3uDaq2hTGZbkPFKNEiezvhkVyLIzFK9CU=; b=KfcJHHJPfjZVatz4tleT2pK70H uPLejO7s1XVmlkHmt64bZBIHFGrWGAszQsYsWrNmR7dVoUnUv7etEBwEeL2JdoAXtY6wuaxo4GDTR C8/BjGDTwJY5DojIwI+v8KLmAyF4W7zVgXL4o75cneUdo9EFzi76JCPA/7ECTNsaO+O0bhQPy7uYr hCwdw532GH9iC4mvyl0l5cuoRl5YDTUZqfVTQ3zfQSha2jCNIZU3bO+jpVnmwYGmsn4mdXd69yOQ9 Xd/5MOpN8tRqHherMqeGZrTHewgWQNCzsrUP5/7591HyMXwaFFTHEQ0Ncris2pMIhpZfwsFIrH3Oz 2lpVTWzw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rym8V-0000000C5dJ-0dwj; Mon, 22 Apr 2024 05:22:39 +0000 Received: from mgamail.intel.com ([192.198.163.7]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rym8S-0000000C5ca-1GNW for linux-riscv@lists.infradead.org; Mon, 22 Apr 2024 05:22:37 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1713763356; x=1745299356; h=message-id:date:mime-version:cc:subject:to:references: from:in-reply-to:content-transfer-encoding; bh=ZKqatucqlCT9kWZz8IX/UslCh9aEuPFTXZOmstfs/CU=; b=lE/YPNbhnJwgEwITJyFieqdud+Hsr95PUSs0sHRDw1sktoQSPoPHH9nt nEXUatZQrQc3E+lnRBMoDu2Rc4mSlxE2puInTb0io7HpGx/klZaFpYVKd VR9RmTFzkBhNG6nk5264xZFTUvK402s7bCYucU4vBEE/k7ACk0GRjzjfQ f7vbvhN4OYbgSq1JCn/RbXLyXNxfbi0BD6LPfmq86ZKBOPcXEzy8e0OMU K44ywQe4HBguzo6t3z+1Fxd7Chu1r8AIT4BnGiUW9aFxRrxD3u/zvgxBe UKAYai4kx0YejnhLv2rlnewuYEJ0I+iMNm++cbWOpkNEunUeNSOWYavnz g==; X-CSE-ConnectionGUID: LgEkOKuMT+KiS/HcsTNckA== X-CSE-MsgGUID: URRjKfetSCOyPSqdMugGDA== X-IronPort-AV: E=McAfee;i="6600,9927,11051"; a="34683066" X-IronPort-AV: E=Sophos;i="6.07,219,1708416000"; d="scan'208";a="34683066" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Apr 2024 22:22:31 -0700 X-CSE-ConnectionGUID: 3AUe3Y+NQx2mxryv5T9TlQ== X-CSE-MsgGUID: N7gOqtsFQ8W23/Oj5az/fg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,219,1708416000"; d="scan'208";a="23952539" Received: from unknown (HELO [10.239.159.127]) ([10.239.159.127]) by fmviesa006.fm.intel.com with ESMTP; 21 Apr 2024 22:22:26 -0700 Message-ID: <2f2750cd-a5bf-4486-8f50-c93d246f8b0c@linux.intel.com> Date: Mon, 22 Apr 2024 13:21:05 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 7/7] iommu/riscv: Paging domain support To: Tomasz Jeznach , Joerg Roedel , Will Deacon , Robin Murphy , Paul Walmsley References: <301244bc3ff5da484b46d3fecc931cdad7d2806f.1713456598.git.tjeznach@rivosinc.com> Content-Language: en-US From: Baolu Lu In-Reply-To: <301244bc3ff5da484b46d3fecc931cdad7d2806f.1713456598.git.tjeznach@rivosinc.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240421_222236_412956_5249A3ED X-CRM114-Status: GOOD ( 26.51 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Anup Patel , devicetree@vger.kernel.org, Conor Dooley , Albert Ou , linux@rivosinc.com, linux-kernel@vger.kernel.org, Rob Herring , Sebastien Boeuf , iommu@lists.linux.dev, Palmer Dabbelt , Nick Kossifidis , Krzysztof Kozlowski , linux-riscv@lists.infradead.org, baolu.lu@linux.intel.com Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gNC8xOS8yNCAxMjozMiBBTSwgVG9tYXN6IEplem5hY2ggd3JvdGU6Cj4gSW50cm9kdWNlIGZp cnN0LXN0YWdlIGFkZHJlc3MgdHJhbnNsYXRpb24gc3VwcG9ydC4KPiAKPiBQYWdlIHRhYmxlIGNv bmZpZ3VyZWQgYnkgdGhlIElPTU1VIGRyaXZlciB3aWxsIHVzZSB0aGUgc2FtZSBmb3JtYXQKPiBh cyB0aGUgQ1BV4oCZcyBNTVUsIGFuZCB3aWxsIGZhbGxiYWNrIHRvIGlkZW50aXR5IHRyYW5zbGF0 aW9uIGlmIHRoZQo+IHBhZ2UgdGFibGUgZm9ybWF0IGNvbmZpZ3VyZWQgZm9yIHRoZSBNTVUgaXMg bm90IHN1cHBvcnRlZCBieSB0aGUKPiBJT01NVSBoYXJkd2FyZS4KPiAKPiBUaGlzIGNoYW5nZSBp bnRyb2R1Y2VzIElPVElOVkFMLlZNQSBjb21tYW5kLCByZXF1aXJlZCB0byBpbnZhbGlkYXRlCj4g YW55IGNhY2hlZCBJT0FUQyBlbnRyaWVzIGFmdGVyIG1hcHBpbmcgaXMgdXBkYXRlZCBhbmQvb3Ig cmVtb3ZlZCBmcm9tCj4gdGhlIHBhZ2luZyBkb21haW4uIEludmFsaWRhdGlvbnMgZm9yIHRoZSBu b24tbGVhZiBwYWdlIGVudHJpZXMgd2lsbAo+IGJlIGFkZGVkIHRvIHRoZSBkcml2ZXIgY29kZSBp biBzZXBhcmF0ZSBwYXRjaCBzZXJpZXMsIGZvbGxvd2luZyBzcGVjCj4gdXBkYXRlIHRvIGNsYXJp Znkgbm9uLWxlYWYgY2FjaGUgaW52YWxpZGF0aW9uIGNvbW1hbmQuIFdpdGggdGhpcyBwYXRjaCwK PiBhbGxvd2luZyBvbmx5IDRLIG1hcHBpbmdzIGFuZCBrZWVwaW5nIG5vbi1sZWFmIHBhZ2UgZW50 cmllcyBpbiBtZW1vcnkKPiB0aGlzIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc2ltcGxpZmljYXRp b24uCj4gCj4gU2lnbmVkLW9mZi1ieTogVG9tYXN6IEplem5hY2ggPHRqZXpuYWNoQHJpdm9zaW5j LmNvbT4KPiAtLS0KPiAgIGRyaXZlcnMvaW9tbXUvcmlzY3YvS2NvbmZpZyB8ICAgMSArCj4gICBk cml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmMgfCA0NjcgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystCj4gICAyIGZpbGVzIGNoYW5nZWQsIDQ2NiBpbnNlcnRpb25zKCspLCAyIGRl bGV0aW9ucygtKQo+IAoKWy4uLl0KCj4gKwo+ICAgc3RhdGljIGludCByaXNjdl9pb21tdV9hdHRh Y2hfZG9tYWluKHN0cnVjdCByaXNjdl9pb21tdV9kZXZpY2UgKmlvbW11LAo+ICAgCQkJCSAgICAg c3RydWN0IGRldmljZSAqZGV2LAo+ICAgCQkJCSAgICAgc3RydWN0IGlvbW11X2RvbWFpbiAqaW9t bXVfZG9tYWluKQo+ICAgewo+ICAgCXN0cnVjdCBpb21tdV9md3NwZWMgKmZ3c3BlYyA9IGRldl9p b21tdV9md3NwZWNfZ2V0KGRldik7Cj4gKwlzdHJ1Y3QgcmlzY3ZfaW9tbXVfZG9tYWluICpkb21h aW47Cj4gICAJc3RydWN0IHJpc2N2X2lvbW11X2RjICpkYzsKPiArCXN0cnVjdCByaXNjdl9pb21t dV9ib25kICpib25kID0gTlVMTCwgKmI7Cj4gKwlzdHJ1Y3QgcmlzY3ZfaW9tbXVfY29tbWFuZCBj bWQ7Cj4gICAJdTY0IGZzYywgdGEsIHRjOwo+ICAgCWludCBpOwo+ICAgCj4gQEAgLTc2OSw2ICs4 MzgsMjAgQEAgc3RhdGljIGludCByaXNjdl9pb21tdV9hdHRhY2hfZG9tYWluKHN0cnVjdCByaXNj dl9pb21tdV9kZXZpY2UgKmlvbW11LAo+ICAgCQl0YSA9IDA7Cj4gICAJCXRjID0gUklTQ1ZfSU9N TVVfRENfVENfVjsKPiAgIAkJZnNjID0gRklFTERfUFJFUChSSVNDVl9JT01NVV9EQ19GU0NfTU9E RSwgUklTQ1ZfSU9NTVVfRENfRlNDX01PREVfQkFSRSk7Cj4gKwl9IGVsc2UgaWYgKGlvbW11X2Rv bWFpbi0+dHlwZSAmIF9fSU9NTVVfRE9NQUlOX1BBR0lORykgewo+ICsJCWRvbWFpbiA9IGlvbW11 X2RvbWFpbl90b19yaXNjdihpb21tdV9kb21haW4pOwo+ICsKPiArCQl0YSA9IEZJRUxEX1BSRVAo UklTQ1ZfSU9NTVVfUENfVEFfUFNDSUQsIGRvbWFpbi0+cHNjaWQpOwo+ICsJCXRjID0gUklTQ1Zf SU9NTVVfRENfVENfVjsKPiArCQlpZiAoZG9tYWluLT5hbW9fZW5hYmxlZCkKPiArCQkJdGMgfD0g UklTQ1ZfSU9NTVVfRENfVENfU0FERTsKPiArCQlmc2MgPSBGSUVMRF9QUkVQKFJJU0NWX0lPTU1V X1BDX0ZTQ19NT0RFLCBkb21haW4tPnBnZF9tb2RlKSB8Cj4gKwkJICAgICAgRklFTERfUFJFUChS SVNDVl9JT01NVV9QQ19GU0NfUFBOLCB2aXJ0X3RvX3Bmbihkb21haW4tPnBnZF9yb290KSk7Cj4g Kwo+ICsJCWJvbmQgPSBremFsbG9jKHNpemVvZigqYm9uZCksIEdGUF9LRVJORUwpOwo+ICsJCWlm ICghYm9uZCkKPiArCQkJcmV0dXJuIC1FTk9NRU07Cj4gKwkJYm9uZC0+ZGV2ID0gZGV2Owo+ICAg CX0gZWxzZSB7Cj4gICAJCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gKi8KPiAgIAkJcmV0 dXJuIC1FTk9ERVY7Cj4gQEAgLTc4NywxMiArODcwLDM5MCBAQCBzdGF0aWMgaW50IHJpc2N2X2lv bW11X2F0dGFjaF9kb21haW4oc3RydWN0IHJpc2N2X2lvbW11X2RldmljZSAqaW9tbXUsCj4gICAJ CXhjaGc2NCgmZGMtPnRhLCB0YSk7Cj4gICAJCXhjaGc2NCgmZGMtPnRjLCB0Yyk7Cj4gICAKPiAt CQkvKiBEZXZpY2UgY29udGV4dCBpbnZhbGlkYXRpb24gd2lsbCBiZSByZXF1aXJlZC4gSWdub3Jp bmcgZm9yIG5vdy4gKi8KPiArCQlpZiAoISh0YyAmIFJJU0NWX0lPTU1VX0RDX1RDX1YpKQo+ICsJ CQljb250aW51ZTsKPiArCj4gKwkJLyogSW52YWxpZGF0ZSBkZXZpY2UgY29udGV4dCBjYWNoZSAq Lwo+ICsJCXJpc2N2X2lvbW11X2NtZF9pb2Rpcl9pbnZhbF9kZHQoJmNtZCk7Cj4gKwkJcmlzY3Zf aW9tbXVfY21kX2lvZGlyX3NldF9kaWQoJmNtZCwgZndzcGVjLT5pZHNbaV0pOwo+ICsJCXJpc2N2 X2lvbW11X2NtZF9zZW5kKGlvbW11LCAmY21kLCAwKTsKPiArCj4gKwkJaWYgKEZJRUxEX0dFVChS SVNDVl9JT01NVV9QQ19GU0NfTU9ERSwgZnNjKSA9PSBSSVNDVl9JT01NVV9EQ19GU0NfTU9ERV9C QVJFKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJLyogSW52YWxpZGF0ZSBsYXN0IHZhbGlkIFBT Q0lEICovCj4gKwkJcmlzY3ZfaW9tbXVfY21kX2ludmFsX3ZtYSgmY21kKTsKPiArCQlyaXNjdl9p b21tdV9jbWRfaW52YWxfc2V0X3BzY2lkKCZjbWQsIEZJRUxEX0dFVChSSVNDVl9JT01NVV9EQ19U QV9QU0NJRCwgdGEpKTsKPiArCQlyaXNjdl9pb21tdV9jbWRfc2VuZChpb21tdSwgJmNtZCwgMCk7 Cj4gKwl9Cj4gKwo+ICsJLyogU3luY2hyb25pemUgZGlyZWN0b3J5IHVwZGF0ZSAqLwo+ICsJcmlz Y3ZfaW9tbXVfY21kX2lvZmVuY2UoJmNtZCk7Cj4gKwlyaXNjdl9pb21tdV9jbWRfc2VuZChpb21t dSwgJmNtZCwgUklTQ1ZfSU9NTVVfSU9USU5WQUxfVElNRU9VVCk7Cj4gKwo+ICsJLyogVHJhY2sg ZG9tYWluIHRvIGRldmljZXMgbWFwcGluZy4gKi8KPiArCWlmIChib25kKQo+ICsJCWxpc3RfYWRk X3JjdSgmYm9uZC0+bGlzdCwgJmRvbWFpbi0+Ym9uZHMpOwo+ICsKPiArCS8qIFJlbW92ZSB0cmFj a2luZyBmcm9tIHByZXZpb3VzIGRvbWFpbiwgaWYgbmVlZGVkLiAqLwo+ICsJaW9tbXVfZG9tYWlu ID0gaW9tbXVfZ2V0X2RvbWFpbl9mb3JfZGV2KGRldik7CgpDYWxsaW5nIGlvbW11X2dldF9kb21h aW5fZm9yX2RldigpIGluIHRoZSBkb21haW4gYXR0YWNoaW5nIHBhdGggaXMgdmVyeQpmcmFnaWxl IGJlY2F1c2UgaXQgaGVhdmlseSBkZXBlbmRzIG9uIHRoZSBvcmRlciBvZiBjYWxsaW5nIHRoZSBh dHRhY2gKY2FsbGJhY2sgYW5kIHNldHRpbmcgdGhlIGRvbWFpbiBwb2ludGVyIGluIHRoZSBjb3Jl LgoKUGVyaGFwcyB0aGUgZHJpdmVyIGNhbiB1c2UgZGV2X2lvbW11X3ByaXZfc2V0L2dldCgpIHRv IGtlZXAgdGhlIGFjdGl2ZQpkb21haW4gaW4gdGhlIHBlci1kZXZpY2UgcHJpdmF0ZSBkYXRhPwoK PiArCWlmIChpb21tdV9kb21haW4gJiYgISEoaW9tbXVfZG9tYWluLT50eXBlICYgX19JT01NVV9E T01BSU5fUEFHSU5HKSkgewo+ICsJCWRvbWFpbiA9IGlvbW11X2RvbWFpbl90b19yaXNjdihpb21t dV9kb21haW4pOwo+ICsJCWJvbmQgPSBOVUxMOwo+ICsJCXJjdV9yZWFkX2xvY2soKTsKPiArCQls aXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShiLCAmZG9tYWluLT5ib25kcywgbGlzdCkgewo+ICsJCQlp ZiAoYi0+ZGV2ID09IGRldikgewo+ICsJCQkJYm9uZCA9IGI7Cj4gKwkJCQlicmVhazsKPiArCQkJ fQo+ICsJCX0KPiArCQlyY3VfcmVhZF91bmxvY2soKTsKPiArCj4gKwkJaWYgKGJvbmQpIHsKPiAr CQkJbGlzdF9kZWxfcmN1KCZib25kLT5saXN0KTsKPiArCQkJa2ZyZWVfcmN1KGJvbmQsIHJjdSk7 Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9CgpCZXN0IHJlZ2FyZHMsCmJhb2x1 CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1y aXNjdiBtYWlsaW5nIGxpc3QKbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8v bGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cg==