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 X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 74402C433FF for ; Tue, 30 Jul 2019 21:48:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 34546206E0 for ; Tue, 30 Jul 2019 21:48:52 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ddkccz9d" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387434AbfG3Vsv (ORCPT ); Tue, 30 Jul 2019 17:48:51 -0400 Received: from mail-pg1-f194.google.com ([209.85.215.194]:34511 "EHLO mail-pg1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725975AbfG3Vsv (ORCPT ); Tue, 30 Jul 2019 17:48:51 -0400 Received: by mail-pg1-f194.google.com with SMTP id n9so24514196pgc.1; Tue, 30 Jul 2019 14:48:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=ElPlp+VRpfvHqwOymsphqHnB2ea8iEK4QxZsWnz9kGM=; b=ddkccz9dF/g2WpKWiXA9y5t9DwjI47nEvnGe+OmlHLimwzVNo/XEkXeZx+sXTwpZaS 8OFDOvduTWzvh8VHtc3R/vJXwlJgxBYjEdsqVt6BT/pFnx8+4xwfTtrbSmfUZc3R6gC/ iRIsmS61wBzt9diF8OtOKhW8QuZAKHPlGBiKqJV/f68YUzLTSX8ybXYWlG0legoWZdyR LHPeU+199A6j16MbSpEUCEPqazyTroRJn3+0xoRz6bX4Wi4dS+9dnlqFT2pW9u6IrOmn RyR8lKxIGYbmIwhMObn8wdYWVJ/DqFUj5KzhQhcMo+KvcZHEyeG7Qg4Q0izRewGv6yQo 1p3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=ElPlp+VRpfvHqwOymsphqHnB2ea8iEK4QxZsWnz9kGM=; b=Wom4FA1ZrHXV2oQxEpPkZQujk/VOF8V9CIYIg9o4IGqaPyQfqaudciq9UrCArHO+Tn pqfQRYpOe3baV53s4SpsLlgZlMTAQI4E4FeUmS4P50999eTUxNHPvReZY7o12991idNg BMVsYNu+8+L9bCvEPFcqeqV3IyhuQH4TklA5cW5Vvh46KgS4x3IE3wlTL0rdSFPLHCj7 hI5ZAHATBSacpHOzz0j7ucExyfcBbyvY+pY1RIVFTbAaO8EsgP/CuI9ds5yj5zZTuJpT cnj81Yh0MNQjybfgNIilcwAt9Kd441aU5cqrbrYZE2YR1JZp7+EpKmop3yFPyvYCqpqk 7XhA== X-Gm-Message-State: APjAAAVS3Yt2XBZip/qfu90loMdhBW0ikRCwHDgfvN6Vjm3AGGgwkCHA h8WrJ6SL0p87rTPph7mT4pc= X-Google-Smtp-Source: APXvYqx37O6WDVUjoOK86chq+3TypiJfoSPzXlU122ldm7wURtrmx4CX2Kp/O3dtRKVbPlRDSXEglA== X-Received: by 2002:a63:904:: with SMTP id 4mr38008433pgj.19.1564523330494; Tue, 30 Jul 2019 14:48:50 -0700 (PDT) Received: from localhost ([100.118.89.196]) by smtp.gmail.com with ESMTPSA id l25sm81887158pff.143.2019.07.30.14.48.49 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 30 Jul 2019 14:48:49 -0700 (PDT) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: Rob Clark , Rob Clark , Sean Paul , David Airlie , Daniel Vetter , linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH] drm/msm: shake fist angrily at dma-mapping Date: Tue, 30 Jul 2019 14:46:28 -0700 Message-Id: <20190730214633.17820-1-robdclark@gmail.com> X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org From: Rob Clark So, using dma_sync_* for our cache needs works out w/ dma iommu ops, but it falls appart with dma direct ops. The problem is that, depending on display generation, we can have either set of dma ops (mdp4 and dpu have iommu wired to mdss node, which maps to toplevel drm device, but mdp5 has iommu wired up to the mdp sub-node within mdss). Fixes this splat on mdp5 devices: Unable to handle kernel paging request at virtual address ffffffff80000000 Mem abort info: ESR = 0x96000144 Exception class = DABT (current EL), IL = 32 bits SET = 0, FnV = 0 EA = 0, S1PTW = 0 Data abort info: ISV = 0, ISS = 0x00000144 CM = 1, WnR = 1 swapper pgtable: 4k pages, 48-bit VAs, pgdp=00000000810e4000 [ffffffff80000000] pgd=0000000000000000 Internal error: Oops: 96000144 [#1] SMP Modules linked in: btqcomsmd btqca bluetooth cfg80211 ecdh_generic ecc rfkill libarc4 panel_simple msm wcnss_ctrl qrtr_smd drm_kms_helper venus_enc venus_dec videobuf2_dma_sg videobuf2_memops drm venus_core ipv6 qrtr qcom_wcnss_pil v4l2_mem2mem qcom_sysmon videobuf2_v4l2 qmi_helpers videobuf2_common crct10dif_ce mdt_loader qcom_common videodev qcom_glink_smem remoteproc bmc150_accel_i2c bmc150_magn_i2c bmc150_accel_core bmc150_magn snd_soc_lpass_apq8016 snd_soc_msm8916_analog mms114 mc nf_defrag_ipv6 snd_soc_lpass_cpu snd_soc_apq8016_sbc industrialio_triggered_buffer kfifo_buf snd_soc_lpass_platform snd_soc_msm8916_digital drm_panel_orientation_quirks CPU: 2 PID: 33 Comm: kworker/2:1 Not tainted 5.3.0-rc2 #1 Hardware name: Samsung Galaxy A5U (EUR) (DT) Workqueue: events deferred_probe_work_func pstate: 80000005 (Nzcv daif -PAN -UAO) pc : __clean_dcache_area_poc+0x20/0x38 lr : arch_sync_dma_for_device+0x28/0x30 sp : ffff0000115736a0 x29: ffff0000115736a0 x28: 0000000000000001 x27: ffff800074830800 x26: ffff000011478000 x25: 0000000000000000 x24: 0000000000000001 x23: ffff000011478a98 x22: ffff800009fd1c10 x21: 0000000000000001 x20: ffff800075ad0a00 x19: 0000000000000000 x18: ffff0000112b2000 x17: 0000000000000000 x16: 0000000000000000 x15: 00000000fffffff0 x14: ffff000011455d70 x13: 0000000000000000 x12: 0000000000000028 x11: 0000000000000001 x10: ffff00001106c000 x9 : ffff7e0001d6b380 x8 : 0000000000001000 x7 : ffff7e0001d6b380 x6 : ffff7e0001d6b382 x5 : 0000000000000000 x4 : 0000000000001000 x3 : 000000000000003f x2 : 0000000000000040 x1 : ffffffff80001000 x0 : ffffffff80000000 Call trace: __clean_dcache_area_poc+0x20/0x38 dma_direct_sync_sg_for_device+0xb8/0xe8 get_pages+0x22c/0x250 [msm] msm_gem_get_and_pin_iova+0xdc/0x168 [msm] ... Fixes the combination of two patches: Fixes: 0036bc73ccbe ("drm/msm: stop abusing dma_map/unmap for cache") Fixes: 449fa54d6815 ("dma-direct: correct the physical addr in dma_direct_sync_sg_for_cpu/device") Signed-off-by: Rob Clark --- I think it is time to revisit drm_cache support for arm64, but we need something for v5.3 to keep things working. armv7 support might be harder, but hopefully no one is changing dma- mapping implementation much on armv7 and we can just limp along with the current hack on 32b arm. drivers/gpu/drm/msm/msm_gem.c | 47 +++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index c2114c748c2f..8cf6362e64bf 100644 --- a/drivers/gpu/drm/msm/msm_gem.c +++ b/drivers/gpu/drm/msm/msm_gem.c @@ -32,6 +32,46 @@ static bool use_pages(struct drm_gem_object *obj) return !msm_obj->vram_node; } +/* + * Cache sync.. this is a bit over-complicated, to fit dma-mapping + * API. Really GPU cache is out of scope here (handled on cmdstream) + * and all we need to do is invalidate newly allocated pages before + * mapping to CPU as uncached/writecombine. + * + * On top of this, we have the added headache, that depending on + * display generation, the display's iommu may be wired up to either + * the toplevel drm device (mdss), or to the mdp sub-node, meaning + * that here we either have dma-direct or iommu ops. + * + * Let this be a cautionary tail of abstraction gone wrong. + */ + +static void sync_for_device(struct msm_gem_object *msm_obj) +{ + struct device *dev = msm_obj->base.dev->dev; + + if (get_dma_ops(dev)) { + dma_sync_sg_for_device(dev, msm_obj->sgt->sgl, + msm_obj->sgt->nents, DMA_BIDIRECTIONAL); + } else { + dma_map_sg(dev, msm_obj->sgt->sgl, + msm_obj->sgt->nents, DMA_BIDIRECTIONAL); + } +} + +static void sync_for_cpu(struct msm_gem_object *msm_obj) +{ + struct device *dev = msm_obj->base.dev->dev; + + if (get_dma_ops(dev)) { + dma_sync_sg_for_cpu(dev, msm_obj->sgt->sgl, + msm_obj->sgt->nents, DMA_BIDIRECTIONAL); + } else { + dma_unmap_sg(dev, msm_obj->sgt->sgl, + msm_obj->sgt->nents, DMA_BIDIRECTIONAL); + } +} + /* allocate pages from VRAM carveout, used when no IOMMU: */ static struct page **get_pages_vram(struct drm_gem_object *obj, int npages) { @@ -97,8 +137,7 @@ static struct page **get_pages(struct drm_gem_object *obj) * because display controller, GPU, etc. are not coherent: */ if (msm_obj->flags & (MSM_BO_WC|MSM_BO_UNCACHED)) - dma_sync_sg_for_device(dev->dev, msm_obj->sgt->sgl, - msm_obj->sgt->nents, DMA_BIDIRECTIONAL); + sync_for_device(msm_obj); } return msm_obj->pages; @@ -127,9 +166,7 @@ static void put_pages(struct drm_gem_object *obj) * GPU, etc. are not coherent: */ if (msm_obj->flags & (MSM_BO_WC|MSM_BO_UNCACHED)) - dma_sync_sg_for_cpu(obj->dev->dev, msm_obj->sgt->sgl, - msm_obj->sgt->nents, - DMA_BIDIRECTIONAL); + sync_for_cpu(msm_obj); sg_free_table(msm_obj->sgt); kfree(msm_obj->sgt); -- 2.21.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Clark Subject: [PATCH] drm/msm: shake fist angrily at dma-mapping Date: Tue, 30 Jul 2019 14:46:28 -0700 Message-ID: <20190730214633.17820-1-robdclark@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Rob Clark , freedreno@lists.freedesktop.org, David Airlie , linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Sean Paul List-Id: dri-devel@lists.freedesktop.org RnJvbTogUm9iIENsYXJrIDxyb2JkY2xhcmtAY2hyb21pdW0ub3JnPgoKU28sIHVzaW5nIGRtYV9z eW5jXyogZm9yIG91ciBjYWNoZSBuZWVkcyB3b3JrcyBvdXQgdy8gZG1hIGlvbW11IG9wcywgYnV0 Cml0IGZhbGxzIGFwcGFydCB3aXRoIGRtYSBkaXJlY3Qgb3BzLiAgVGhlIHByb2JsZW0gaXMgdGhh dCwgZGVwZW5kaW5nIG9uCmRpc3BsYXkgZ2VuZXJhdGlvbiwgd2UgY2FuIGhhdmUgZWl0aGVyIHNl dCBvZiBkbWEgb3BzIChtZHA0IGFuZCBkcHUgaGF2ZQppb21tdSB3aXJlZCB0byBtZHNzIG5vZGUs IHdoaWNoIG1hcHMgdG8gdG9wbGV2ZWwgZHJtIGRldmljZSwgYnV0IG1kcDUKaGFzIGlvbW11IHdp cmVkIHVwIHRvIHRoZSBtZHAgc3ViLW5vZGUgd2l0aGluIG1kc3MpLgoKRml4ZXMgdGhpcyBzcGxh dCBvbiBtZHA1IGRldmljZXM6CgogICBVbmFibGUgdG8gaGFuZGxlIGtlcm5lbCBwYWdpbmcgcmVx dWVzdCBhdCB2aXJ0dWFsIGFkZHJlc3MgZmZmZmZmZmY4MDAwMDAwMAogICBNZW0gYWJvcnQgaW5m bzoKICAgICBFU1IgPSAweDk2MDAwMTQ0CiAgICAgRXhjZXB0aW9uIGNsYXNzID0gREFCVCAoY3Vy cmVudCBFTCksIElMID0gMzIgYml0cwogICAgIFNFVCA9IDAsIEZuViA9IDAKICAgICBFQSA9IDAs IFMxUFRXID0gMAogICBEYXRhIGFib3J0IGluZm86CiAgICAgSVNWID0gMCwgSVNTID0gMHgwMDAw MDE0NAogICAgIENNID0gMSwgV25SID0gMQogICBzd2FwcGVyIHBndGFibGU6IDRrIHBhZ2VzLCA0 OC1iaXQgVkFzLCBwZ2RwPTAwMDAwMDAwODEwZTQwMDAKICAgW2ZmZmZmZmZmODAwMDAwMDBdIHBn ZD0wMDAwMDAwMDAwMDAwMDAwCiAgIEludGVybmFsIGVycm9yOiBPb3BzOiA5NjAwMDE0NCBbIzFd IFNNUAogICBNb2R1bGVzIGxpbmtlZCBpbjogYnRxY29tc21kIGJ0cWNhIGJsdWV0b290aCBjZmc4 MDIxMSBlY2RoX2dlbmVyaWMgZWNjIHJma2lsbCBsaWJhcmM0IHBhbmVsX3NpbXBsZSBtc20gd2Nu c3NfY3RybCBxcnRyX3NtZCBkcm1fa21zX2hlbHBlciB2ZW51c19lbmMgdmVudXNfZGVjIHZpZGVv YnVmMl9kbWFfc2cgdmlkZW9idWYyX21lbW9wcyBkcm0gdmVudXNfY29yZSBpcHY2IHFydHIgcWNv bV93Y25zc19waWwgdjRsMl9tZW0ybWVtIHFjb21fc3lzbW9uIHZpZGVvYnVmMl92NGwyIHFtaV9o ZWxwZXJzIHZpZGVvYnVmMl9jb21tb24gY3JjdDEwZGlmX2NlIG1kdF9sb2FkZXIgcWNvbV9jb21t b24gdmlkZW9kZXYgcWNvbV9nbGlua19zbWVtIHJlbW90ZXByb2MgYm1jMTUwX2FjY2VsX2kyYyBi bWMxNTBfbWFnbl9pMmMgYm1jMTUwX2FjY2VsX2NvcmUgYm1jMTUwX21hZ24gc25kX3NvY19scGFz c19hcHE4MDE2IHNuZF9zb2NfbXNtODkxNl9hbmFsb2cgbW1zMTE0IG1jIG5mX2RlZnJhZ19pcHY2 IHNuZF9zb2NfbHBhc3NfY3B1IHNuZF9zb2NfYXBxODAxNl9zYmMgaW5kdXN0cmlhbGlvX3RyaWdn ZXJlZF9idWZmZXIga2ZpZm9fYnVmIHNuZF9zb2NfbHBhc3NfcGxhdGZvcm0gc25kX3NvY19tc204 OTE2X2RpZ2l0YWwgZHJtX3BhbmVsX29yaWVudGF0aW9uX3F1aXJrcwogICBDUFU6IDIgUElEOiAz MyBDb21tOiBrd29ya2VyLzI6MSBOb3QgdGFpbnRlZCA1LjMuMC1yYzIgIzEKICAgSGFyZHdhcmUg bmFtZTogU2Ftc3VuZyBHYWxheHkgQTVVIChFVVIpIChEVCkKICAgV29ya3F1ZXVlOiBldmVudHMg ZGVmZXJyZWRfcHJvYmVfd29ya19mdW5jCiAgIHBzdGF0ZTogODAwMDAwMDUgKE56Y3YgZGFpZiAt UEFOIC1VQU8pCiAgIHBjIDogX19jbGVhbl9kY2FjaGVfYXJlYV9wb2MrMHgyMC8weDM4CiAgIGxy IDogYXJjaF9zeW5jX2RtYV9mb3JfZGV2aWNlKzB4MjgvMHgzMAogICBzcCA6IGZmZmYwMDAwMTE1 NzM2YTAKICAgeDI5OiBmZmZmMDAwMDExNTczNmEwIHgyODogMDAwMDAwMDAwMDAwMDAwMQogICB4 Mjc6IGZmZmY4MDAwNzQ4MzA4MDAgeDI2OiBmZmZmMDAwMDExNDc4MDAwCiAgIHgyNTogMDAwMDAw MDAwMDAwMDAwMCB4MjQ6IDAwMDAwMDAwMDAwMDAwMDEKICAgeDIzOiBmZmZmMDAwMDExNDc4YTk4 IHgyMjogZmZmZjgwMDAwOWZkMWMxMAogICB4MjE6IDAwMDAwMDAwMDAwMDAwMDEgeDIwOiBmZmZm ODAwMDc1YWQwYTAwCiAgIHgxOTogMDAwMDAwMDAwMDAwMDAwMCB4MTg6IGZmZmYwMDAwMTEyYjIw MDAKICAgeDE3OiAwMDAwMDAwMDAwMDAwMDAwIHgxNjogMDAwMDAwMDAwMDAwMDAwMAogICB4MTU6 IDAwMDAwMDAwZmZmZmZmZjAgeDE0OiBmZmZmMDAwMDExNDU1ZDcwCiAgIHgxMzogMDAwMDAwMDAw MDAwMDAwMCB4MTI6IDAwMDAwMDAwMDAwMDAwMjgKICAgeDExOiAwMDAwMDAwMDAwMDAwMDAxIHgx MDogZmZmZjAwMDAxMTA2YzAwMAogICB4OSA6IGZmZmY3ZTAwMDFkNmIzODAgeDggOiAwMDAwMDAw MDAwMDAxMDAwCiAgIHg3IDogZmZmZjdlMDAwMWQ2YjM4MCB4NiA6IGZmZmY3ZTAwMDFkNmIzODIK ICAgeDUgOiAwMDAwMDAwMDAwMDAwMDAwIHg0IDogMDAwMDAwMDAwMDAwMTAwMAogICB4MyA6IDAw MDAwMDAwMDAwMDAwM2YgeDIgOiAwMDAwMDAwMDAwMDAwMDQwCiAgIHgxIDogZmZmZmZmZmY4MDAw MTAwMCB4MCA6IGZmZmZmZmZmODAwMDAwMDAKICAgQ2FsbCB0cmFjZToKICAgIF9fY2xlYW5fZGNh Y2hlX2FyZWFfcG9jKzB4MjAvMHgzOAogICAgZG1hX2RpcmVjdF9zeW5jX3NnX2Zvcl9kZXZpY2Ur MHhiOC8weGU4CiAgICBnZXRfcGFnZXMrMHgyMmMvMHgyNTAgW21zbV0KICAgIG1zbV9nZW1fZ2V0 X2FuZF9waW5faW92YSsweGRjLzB4MTY4IFttc21dCiAgICAuLi4KCkZpeGVzIHRoZSBjb21iaW5h dGlvbiBvZiB0d28gcGF0Y2hlczoKCkZpeGVzOiAwMDM2YmM3M2NjYmUgKCJkcm0vbXNtOiBzdG9w IGFidXNpbmcgZG1hX21hcC91bm1hcCBmb3IgY2FjaGUiKQpGaXhlczogNDQ5ZmE1NGQ2ODE1ICgi ZG1hLWRpcmVjdDogY29ycmVjdCB0aGUgcGh5c2ljYWwgYWRkciBpbiBkbWFfZGlyZWN0X3N5bmNf c2dfZm9yX2NwdS9kZXZpY2UiKQpTaWduZWQtb2ZmLWJ5OiBSb2IgQ2xhcmsgPHJvYmRjbGFya0Bj aHJvbWl1bS5vcmc+Ci0tLQpJIHRoaW5rIGl0IGlzIHRpbWUgdG8gcmV2aXNpdCBkcm1fY2FjaGUg c3VwcG9ydCBmb3IgYXJtNjQsIGJ1dCB3ZSBuZWVkCnNvbWV0aGluZyBmb3IgdjUuMyB0byBrZWVw IHRoaW5ncyB3b3JraW5nLgoKYXJtdjcgc3VwcG9ydCBtaWdodCBiZSBoYXJkZXIsIGJ1dCBob3Bl ZnVsbHkgbm8gb25lIGlzIGNoYW5naW5nIGRtYS0KbWFwcGluZyBpbXBsZW1lbnRhdGlvbiBtdWNo IG9uIGFybXY3IGFuZCB3ZSBjYW4ganVzdCBsaW1wIGFsb25nIHdpdGgKdGhlIGN1cnJlbnQgaGFj ayBvbiAzMmIgYXJtLgoKIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jIHwgNDcgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA0MiBpbnNlcnRp b25zKCspLCA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20v bXNtX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmMKaW5kZXggYzIxMTRjNzQ4 YzJmLi44Y2Y2MzYyZTY0YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dl bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jCkBAIC0zMiw2ICszMiw0NiBA QCBzdGF0aWMgYm9vbCB1c2VfcGFnZXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCiAJcmV0 dXJuICFtc21fb2JqLT52cmFtX25vZGU7CiB9CiAKKy8qCisgKiBDYWNoZSBzeW5jLi4gdGhpcyBp cyBhIGJpdCBvdmVyLWNvbXBsaWNhdGVkLCB0byBmaXQgZG1hLW1hcHBpbmcKKyAqIEFQSS4gIFJl YWxseSBHUFUgY2FjaGUgaXMgb3V0IG9mIHNjb3BlIGhlcmUgKGhhbmRsZWQgb24gY21kc3RyZWFt KQorICogYW5kIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIGludmFsaWRhdGUgbmV3bHkgYWxsb2NhdGVk IHBhZ2VzIGJlZm9yZQorICogbWFwcGluZyB0byBDUFUgYXMgdW5jYWNoZWQvd3JpdGVjb21iaW5l LgorICoKKyAqIE9uIHRvcCBvZiB0aGlzLCB3ZSBoYXZlIHRoZSBhZGRlZCBoZWFkYWNoZSwgdGhh dCBkZXBlbmRpbmcgb24KKyAqIGRpc3BsYXkgZ2VuZXJhdGlvbiwgdGhlIGRpc3BsYXkncyBpb21t dSBtYXkgYmUgd2lyZWQgdXAgdG8gZWl0aGVyCisgKiB0aGUgdG9wbGV2ZWwgZHJtIGRldmljZSAo bWRzcyksIG9yIHRvIHRoZSBtZHAgc3ViLW5vZGUsIG1lYW5pbmcKKyAqIHRoYXQgaGVyZSB3ZSBl aXRoZXIgaGF2ZSBkbWEtZGlyZWN0IG9yIGlvbW11IG9wcy4KKyAqCisgKiBMZXQgdGhpcyBiZSBh IGNhdXRpb25hcnkgdGFpbCBvZiBhYnN0cmFjdGlvbiBnb25lIHdyb25nLgorICovCisKK3N0YXRp YyB2b2lkIHN5bmNfZm9yX2RldmljZShzdHJ1Y3QgbXNtX2dlbV9vYmplY3QgKm1zbV9vYmopCit7 CisJc3RydWN0IGRldmljZSAqZGV2ID0gbXNtX29iai0+YmFzZS5kZXYtPmRldjsKKworCWlmIChn ZXRfZG1hX29wcyhkZXYpKSB7CisJCWRtYV9zeW5jX3NnX2Zvcl9kZXZpY2UoZGV2LCBtc21fb2Jq LT5zZ3QtPnNnbCwKKwkJCW1zbV9vYmotPnNndC0+bmVudHMsIERNQV9CSURJUkVDVElPTkFMKTsK Kwl9IGVsc2UgeworCQlkbWFfbWFwX3NnKGRldiwgbXNtX29iai0+c2d0LT5zZ2wsCisJCQltc21f b2JqLT5zZ3QtPm5lbnRzLCBETUFfQklESVJFQ1RJT05BTCk7CisJfQorfQorCitzdGF0aWMgdm9p ZCBzeW5jX2Zvcl9jcHUoc3RydWN0IG1zbV9nZW1fb2JqZWN0ICptc21fb2JqKQoreworCXN0cnVj dCBkZXZpY2UgKmRldiA9IG1zbV9vYmotPmJhc2UuZGV2LT5kZXY7CisKKwlpZiAoZ2V0X2RtYV9v cHMoZGV2KSkgeworCQlkbWFfc3luY19zZ19mb3JfY3B1KGRldiwgbXNtX29iai0+c2d0LT5zZ2ws CisJCQltc21fb2JqLT5zZ3QtPm5lbnRzLCBETUFfQklESVJFQ1RJT05BTCk7CisJfSBlbHNlIHsK KwkJZG1hX3VubWFwX3NnKGRldiwgbXNtX29iai0+c2d0LT5zZ2wsCisJCQltc21fb2JqLT5zZ3Qt Pm5lbnRzLCBETUFfQklESVJFQ1RJT05BTCk7CisJfQorfQorCiAvKiBhbGxvY2F0ZSBwYWdlcyBm cm9tIFZSQU0gY2FydmVvdXQsIHVzZWQgd2hlbiBubyBJT01NVTogKi8KIHN0YXRpYyBzdHJ1Y3Qg cGFnZSAqKmdldF9wYWdlc192cmFtKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBpbnQgbnBh Z2VzKQogewpAQCAtOTcsOCArMTM3LDcgQEAgc3RhdGljIHN0cnVjdCBwYWdlICoqZ2V0X3BhZ2Vz KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQogCQkgKiBiZWNhdXNlIGRpc3BsYXkgY29udHJv bGxlciwgR1BVLCBldGMuIGFyZSBub3QgY29oZXJlbnQ6CiAJCSAqLwogCQlpZiAobXNtX29iai0+ ZmxhZ3MgJiAoTVNNX0JPX1dDfE1TTV9CT19VTkNBQ0hFRCkpCi0JCQlkbWFfc3luY19zZ19mb3Jf ZGV2aWNlKGRldi0+ZGV2LCBtc21fb2JqLT5zZ3QtPnNnbCwKLQkJCQkJbXNtX29iai0+c2d0LT5u ZW50cywgRE1BX0JJRElSRUNUSU9OQUwpOworCQkJc3luY19mb3JfZGV2aWNlKG1zbV9vYmopOwog CX0KIAogCXJldHVybiBtc21fb2JqLT5wYWdlczsKQEAgLTEyNyw5ICsxNjYsNyBAQCBzdGF0aWMg dm9pZCBwdXRfcGFnZXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCiAJCQkgKiBHUFUsIGV0 Yy4gYXJlIG5vdCBjb2hlcmVudDoKIAkJCSAqLwogCQkJaWYgKG1zbV9vYmotPmZsYWdzICYgKE1T TV9CT19XQ3xNU01fQk9fVU5DQUNIRUQpKQotCQkJCWRtYV9zeW5jX3NnX2Zvcl9jcHUob2JqLT5k ZXYtPmRldiwgbXNtX29iai0+c2d0LT5zZ2wsCi0JCQkJCSAgICAgbXNtX29iai0+c2d0LT5uZW50 cywKLQkJCQkJICAgICBETUFfQklESVJFQ1RJT05BTCk7CisJCQkJc3luY19mb3JfY3B1KG1zbV9v YmopOwogCiAJCQlzZ19mcmVlX3RhYmxlKG1zbV9vYmotPnNndCk7CiAJCQlrZnJlZShtc21fb2Jq LT5zZ3QpOwotLSAKMi4yMS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9k cmktZGV2ZWw=