From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jason Wang Subject: [PATCH V8 0/6] mdev based hardware virtio offloading support Date: Tue, 5 Nov 2019 17:32:34 +0800 Message-ID: <20191105093240.5135-1-jasowang@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=WINDOWS-1252 Content-Transfer-Encoding: quoted-printable Return-path: Sender: netdev-owner@vger.kernel.org To: kvm@vger.kernel.org, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-gvt-dev@lists.freedesktop.org, kwankhede@nvidia.com, alex.williamson@redhat.com, mst@redhat.com, tiwei.bie@intel.com Cc: virtualization@lists.linux-foundation.org, netdev@vger.kernel.org, cohuck@redhat.com, maxime.coquelin@redhat.com, cunming.liang@intel.com, zhihong.wang@intel.com, rob.miller@broadcom.com, xiao.w.wang@intel.com, haotian.wang@sifive.com, zhenyuw@linux.intel.com, zhi.a.wang@intel.com, jani.nikula@linux.intel.com, joonas.lahtinen@linux.intel.com, rodrigo.vivi@intel.com, airlied@linux.ie, daniel@ffwll.ch, farman@linux.ibm.com, pasic@linux.ibm.com, sebott@linux.ibm.com, oberpar@linux.ibm.com, heiko.carstens@de.ibm.com, gor@linux.ibm.com, borntraeger@de.ibm.com, akrowiak@linux.ibm.com, freude@linux.ibm.com, lingshan.zhu@intel.com, idos@mellanox.com, eperezma@redhat.com, lulu@redhat.com, parav@mellanox.com, christophe.de.dinechin@gmail.com, kevin.tian@intel.com, stefanha@redhat.com List-Id: dri-devel@lists.freedesktop.org Hi all: There are hardwares that can do virtio datapath offloading while having its own control path. This path tries to implement a mdev based unified API to support using kernel virtio driver to drive those devices. This is done by introducing a new mdev transport for virtio (virtio_mdev) and register itself as a new kind of mdev driver. Then it provides a unified way for kernel virtio driver to talk with mdev device implementation. Though the series only contains kernel driver support, the goal is to make the transport generic enough to support userspace drivers. This means vhost-mdev[1] could be built on top as well by resuing the transport. A sample driver is also implemented which simulate a virito-net loopback ethernet device on top of vringh + workqueue. This could be used as a reference implementation for real hardware driver. Also a real ICF VF driver was also posted here[2] which is a good reference for vendors who is interested in their own virtio datapath offloading product. Consider mdev framework only support VFIO device and driver right now, this series also extend it to support other types. This is done through introducing class id to the device and pairing it with id_talbe claimed by the driver. On top, this seris also decouple device specific parents ops out of the common ones. Pktgen test was done with virito-net + mvnet loop back device. Please review. [1] https://lkml.org/lkml/2019/10/31/440 [2] https://lkml.org/lkml/2019/10/15/1226 Changes from V7: - drop {set|get}_mdev_features for virtio - typo and comment style fixes Changes from V6: - rename ops files and compile guard Changes from V5: - use dev_warn() instead of WARN(1) when class id is not set - validate id_table before trying to do matching between device and driver - add wildcard for modpost script - use unique name for id_table - move get_mdev_features() to be the first member of virtio_device_ops and more comments for it - typo fixes for the comments above virtio_mdev_ops Changes from V4: - keep mdev_set_class() for the device that doesn't use device ops - use union for device ops pointer in mdev_device - introduce class specific helper for getting is device ops - use WARN_ON instead of BUG_ON in mdev_set_virtio_ops - explain details of get_mdev_features() and get_vendor_id() - distinguish the optional virito device ops from mandatory ones and make get_generation() optional - rename vfio_mdev.h to vfio_mdev_ops.h, rename virito_mdev.h to virtio_mdev_ops.h - don't abuse version fileds in virtio_mdev structure, use features instead - fix warning during device remove - style & docs tweaks and typo fixes Changes from V3: - document that class id (device ops) must be specified in create() - add WARN() when trying to set class_id when it has already set - add WARN() when class_id is not specified in create() and correctly return an error in this case - correct the prototype of mdev_set_class() in the doc - add documention of mdev_set_class() - remove the unnecessary "class_id_fail" label when class id is not specified in create() - convert id_table in vfio_mdev to const - move mdev_set_class and its friends after mdev_uuid() - suqash the patch of bus uevent into patch of introducing class id - tweak the words in the docs per Cornelia suggestion - tie class_id and device ops through class specific initialization routine like mdev_set_vfio_ops() - typos fixes in the docs of virtio-mdev callbacks - document the usage of virtqueues in struct virtio_mdev_device - remove the useless vqs array in struct virtio_mdev_device - rename MDEV_ID_XXX to MDEV_CLASS_ID_XXX Changes from V2: - fail when class_id is not specified - drop the vringh patch - match the doc to the code - tweak the commit log - move device_ops from parent to mdev device - remove the unused MDEV_ID_VHOST Changes from V1: - move virtio_mdev.c to drivers/virtio - store class_id in mdev_device instead of mdev_parent - store device_ops in mdev_device instead of mdev_parent - reorder the patch, vringh fix comes first - really silent compiling warnings - really switch to use u16 for class_id - uevent and modpost support for mdev class_id - vraious tweaks per comments from Parav Changes from RFC-V2: - silent compile warnings on some specific configuration - use u16 instead u8 for class id - reseve MDEV_ID_VHOST for future vhost-mdev work - introduce "virtio" type for mvnet and make "vhost" type for future work - add entries in MAINTAINER - tweak and typos fixes in commit log Changes from RFC-V1: - rename device id to class id - add docs for class id and device specific ops (device_ops) - split device_ops into seperate headers - drop the mdev_set_dma_ops() - use device_ops to implement the transport API, then it's not a part of UAPI any more - use GFP_ATOMIC in mvnet sample device and other tweaks - set_vring_base/get_vring_base support for mvnet device Jason Wang (6): mdev: class id support modpost: add support for mdev class id mdev: introduce device specific ops mdev: introduce virtio device and its device ops virtio: introduce a mdev based transport docs: sample driver to demonstrate how to implement virtio-mdev framework .../driver-api/vfio-mediated-device.rst | 38 +- MAINTAINERS | 2 + drivers/gpu/drm/i915/gvt/kvmgt.c | 17 +- drivers/s390/cio/vfio_ccw_ops.c | 17 +- drivers/s390/crypto/vfio_ap_ops.c | 13 +- drivers/vfio/mdev/mdev_core.c | 60 ++ drivers/vfio/mdev/mdev_driver.c | 25 + drivers/vfio/mdev/mdev_private.h | 8 + drivers/vfio/mdev/vfio_mdev.c | 45 +- drivers/virtio/Kconfig | 7 + drivers/virtio/Makefile | 1 + drivers/virtio/virtio_mdev.c | 407 +++++++++++ include/linux/mdev.h | 57 +- include/linux/mdev_vfio_ops.h | 52 ++ include/linux/mdev_virtio_ops.h | 149 ++++ include/linux/mod_devicetable.h | 8 + samples/Kconfig | 7 + samples/vfio-mdev/Makefile | 1 + samples/vfio-mdev/mbochs.c | 19 +- samples/vfio-mdev/mdpy.c | 19 +- samples/vfio-mdev/mtty.c | 17 +- samples/vfio-mdev/mvnet.c | 685 ++++++++++++++++++ scripts/mod/devicetable-offsets.c | 3 + scripts/mod/file2alias.c | 11 + 24 files changed, 1577 insertions(+), 91 deletions(-) create mode 100644 drivers/virtio/virtio_mdev.c create mode 100644 include/linux/mdev_vfio_ops.h create mode 100644 include/linux/mdev_virtio_ops.h create mode 100644 samples/vfio-mdev/mvnet.c --=20 2.19.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 X-Spam-Level: X-Spam-Status: No, score=-0.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=no 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 BA82CC49EAD for ; Tue, 5 Nov 2019 09:33:53 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9C0A0214D8 for ; Tue, 5 Nov 2019 09:33:53 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9C0A0214D8 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C62456E961; Tue, 5 Nov 2019 09:33:52 +0000 (UTC) Received: from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com [207.211.31.81]) by gabe.freedesktop.org (Postfix) with ESMTPS id B86D66E960 for ; Tue, 5 Nov 2019 09:33:50 +0000 (UTC) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-235-AOn84NNqPKWIK3fMNPFBLw-1; Tue, 05 Nov 2019 04:33:45 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id EFDCD107ACC2; Tue, 5 Nov 2019 09:33:40 +0000 (UTC) Received: from jason-ThinkPad-X1-Carbon-6th.redhat.com (ovpn-12-252.pek2.redhat.com [10.72.12.252]) by smtp.corp.redhat.com (Postfix) with ESMTP id 255BC5C1B2; Tue, 5 Nov 2019 09:32:45 +0000 (UTC) From: Jason Wang To: kvm@vger.kernel.org, linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-gvt-dev@lists.freedesktop.org, kwankhede@nvidia.com, alex.williamson@redhat.com, mst@redhat.com, tiwei.bie@intel.com Subject: [PATCH V8 0/6] mdev based hardware virtio offloading support Date: Tue, 5 Nov 2019 17:32:34 +0800 Message-Id: <20191105093240.5135-1-jasowang@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-MC-Unique: AOn84NNqPKWIK3fMNPFBLw-1 X-Mimecast-Spam-Score: 0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1572946429; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=E12QQhoLkodtr7tObwU2tg4h6lVPBMRwKLoDjj8IKNc=; b=YM36kONIdLW/acsucHq4hbC3waoVWoIaMlrOxnedoIxZGxP+NZRNPbs4MqIG5EuGZjU1bL 0kAcN7QdeBbXT8MbCbYxgW8c6c3FwaiYhjMl7BhrzMEZAZ0dytZOrELHPYkiU8shtpb8uG 1Afa/ME8MpcJueW0jfUde2OoLKFNTxc= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: christophe.de.dinechin@gmail.com, sebott@linux.ibm.com, airlied@linux.ie, Jason Wang , heiko.carstens@de.ibm.com, kevin.tian@intel.com, virtualization@lists.linux-foundation.org, rob.miller@broadcom.com, lulu@redhat.com, eperezma@redhat.com, pasic@linux.ibm.com, borntraeger@de.ibm.com, haotian.wang@sifive.com, zhi.a.wang@intel.com, farman@linux.ibm.com, idos@mellanox.com, gor@linux.ibm.com, cunming.liang@intel.com, rodrigo.vivi@intel.com, xiao.w.wang@intel.com, freude@linux.ibm.com, parav@mellanox.com, zhihong.wang@intel.com, stefanha@redhat.com, akrowiak@linux.ibm.com, netdev@vger.kernel.org, cohuck@redhat.com, oberpar@linux.ibm.com, maxime.coquelin@redhat.com, lingshan.zhu@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191105093234.i8t8vaO0zkQO7fDCn8vbDNeY2sWTjAcfOyaUm-OvL-Y@z> SGkgYWxsOgoKVGhlcmUgYXJlIGhhcmR3YXJlcyB0aGF0IGNhbiBkbyB2aXJ0aW8gZGF0YXBhdGgg b2ZmbG9hZGluZyB3aGlsZQpoYXZpbmcgaXRzIG93biBjb250cm9sIHBhdGguIFRoaXMgcGF0aCB0 cmllcyB0byBpbXBsZW1lbnQgYSBtZGV2IGJhc2VkCnVuaWZpZWQgQVBJIHRvIHN1cHBvcnQgdXNp bmcga2VybmVsIHZpcnRpbyBkcml2ZXIgdG8gZHJpdmUgdGhvc2UKZGV2aWNlcy4gVGhpcyBpcyBk b25lIGJ5IGludHJvZHVjaW5nIGEgbmV3IG1kZXYgdHJhbnNwb3J0IGZvciB2aXJ0aW8KKHZpcnRp b19tZGV2KSBhbmQgcmVnaXN0ZXIgaXRzZWxmIGFzIGEgbmV3IGtpbmQgb2YgbWRldiBkcml2ZXIu IFRoZW4KaXQgcHJvdmlkZXMgYSB1bmlmaWVkIHdheSBmb3Iga2VybmVsIHZpcnRpbyBkcml2ZXIg dG8gdGFsayB3aXRoIG1kZXYKZGV2aWNlIGltcGxlbWVudGF0aW9uLgoKVGhvdWdoIHRoZSBzZXJp ZXMgb25seSBjb250YWlucyBrZXJuZWwgZHJpdmVyIHN1cHBvcnQsIHRoZSBnb2FsIGlzIHRvCm1h a2UgdGhlIHRyYW5zcG9ydCBnZW5lcmljIGVub3VnaCB0byBzdXBwb3J0IHVzZXJzcGFjZSBkcml2 ZXJzLiBUaGlzCm1lYW5zIHZob3N0LW1kZXZbMV0gY291bGQgYmUgYnVpbHQgb24gdG9wIGFzIHdl bGwgYnkgcmVzdWluZyB0aGUKdHJhbnNwb3J0LgoKQSBzYW1wbGUgZHJpdmVyIGlzIGFsc28gaW1w bGVtZW50ZWQgd2hpY2ggc2ltdWxhdGUgYSB2aXJpdG8tbmV0Cmxvb3BiYWNrIGV0aGVybmV0IGRl dmljZSBvbiB0b3Agb2YgdnJpbmdoICsgd29ya3F1ZXVlLiBUaGlzIGNvdWxkIGJlCnVzZWQgYXMg YSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gZm9yIHJlYWwgaGFyZHdhcmUgZHJpdmVyLgoKQWxz byBhIHJlYWwgSUNGIFZGIGRyaXZlciB3YXMgYWxzbyBwb3N0ZWQgaGVyZVsyXSB3aGljaCBpcyBh IGdvb2QKcmVmZXJlbmNlIGZvciB2ZW5kb3JzIHdobyBpcyBpbnRlcmVzdGVkIGluIHRoZWlyIG93 biB2aXJ0aW8gZGF0YXBhdGgKb2ZmbG9hZGluZyBwcm9kdWN0LgoKQ29uc2lkZXIgbWRldiBmcmFt ZXdvcmsgb25seSBzdXBwb3J0IFZGSU8gZGV2aWNlIGFuZCBkcml2ZXIgcmlnaHQgbm93LAp0aGlz IHNlcmllcyBhbHNvIGV4dGVuZCBpdCB0byBzdXBwb3J0IG90aGVyIHR5cGVzLiBUaGlzIGlzIGRv bmUKdGhyb3VnaCBpbnRyb2R1Y2luZyBjbGFzcyBpZCB0byB0aGUgZGV2aWNlIGFuZCBwYWlyaW5n IGl0IHdpdGgKaWRfdGFsYmUgY2xhaW1lZCBieSB0aGUgZHJpdmVyLiBPbiB0b3AsIHRoaXMgc2Vy aXMgYWxzbyBkZWNvdXBsZQpkZXZpY2Ugc3BlY2lmaWMgcGFyZW50cyBvcHMgb3V0IG9mIHRoZSBj b21tb24gb25lcy4KClBrdGdlbiB0ZXN0IHdhcyBkb25lIHdpdGggdmlyaXRvLW5ldCArIG12bmV0 IGxvb3AgYmFjayBkZXZpY2UuCgpQbGVhc2UgcmV2aWV3LgoKWzFdIGh0dHBzOi8vbGttbC5vcmcv bGttbC8yMDE5LzEwLzMxLzQ0MApbMl0gaHR0cHM6Ly9sa21sLm9yZy9sa21sLzIwMTkvMTAvMTUv MTIyNgoKQ2hhbmdlcyBmcm9tIFY3OgotIGRyb3Age3NldHxnZXR9X21kZXZfZmVhdHVyZXMgZm9y IHZpcnRpbwotIHR5cG8gYW5kIGNvbW1lbnQgc3R5bGUgZml4ZXMKCkNoYW5nZXMgZnJvbSBWNjoK Ci0gcmVuYW1lIG9wcyBmaWxlcyBhbmQgY29tcGlsZSBndWFyZAoKQ2hhbmdlcyBmcm9tIFY1OgoK LSB1c2UgZGV2X3dhcm4oKSBpbnN0ZWFkIG9mIFdBUk4oMSkgd2hlbiBjbGFzcyBpZCBpcyBub3Qg c2V0Ci0gdmFsaWRhdGUgaWRfdGFibGUgYmVmb3JlIHRyeWluZyB0byBkbyBtYXRjaGluZyBiZXR3 ZWVuIGRldmljZSBhbmQKICBkcml2ZXIKLSBhZGQgd2lsZGNhcmQgZm9yIG1vZHBvc3Qgc2NyaXB0 Ci0gdXNlIHVuaXF1ZSBuYW1lIGZvciBpZF90YWJsZQotIG1vdmUgZ2V0X21kZXZfZmVhdHVyZXMo KSB0byBiZSB0aGUgZmlyc3QgbWVtYmVyIG9mIHZpcnRpb19kZXZpY2Vfb3BzCiAgYW5kIG1vcmUg Y29tbWVudHMgZm9yIGl0Ci0gdHlwbyBmaXhlcyBmb3IgdGhlIGNvbW1lbnRzIGFib3ZlIHZpcnRp b19tZGV2X29wcwoKQ2hhbmdlcyBmcm9tIFY0OgoKLSBrZWVwIG1kZXZfc2V0X2NsYXNzKCkgZm9y IHRoZSBkZXZpY2UgdGhhdCBkb2Vzbid0IHVzZSBkZXZpY2Ugb3BzCi0gdXNlIHVuaW9uIGZvciBk ZXZpY2Ugb3BzIHBvaW50ZXIgaW4gbWRldl9kZXZpY2UKLSBpbnRyb2R1Y2UgY2xhc3Mgc3BlY2lm aWMgaGVscGVyIGZvciBnZXR0aW5nIGlzIGRldmljZSBvcHMKLSB1c2UgV0FSTl9PTiBpbnN0ZWFk IG9mIEJVR19PTiBpbiBtZGV2X3NldF92aXJ0aW9fb3BzCi0gZXhwbGFpbiBkZXRhaWxzIG9mIGdl dF9tZGV2X2ZlYXR1cmVzKCkgYW5kIGdldF92ZW5kb3JfaWQoKQotIGRpc3Rpbmd1aXNoIHRoZSBv cHRpb25hbCB2aXJpdG8gZGV2aWNlIG9wcyBmcm9tIG1hbmRhdG9yeSBvbmVzIGFuZAogIG1ha2Ug Z2V0X2dlbmVyYXRpb24oKSBvcHRpb25hbAotIHJlbmFtZSB2ZmlvX21kZXYuaCB0byB2ZmlvX21k ZXZfb3BzLmgsIHJlbmFtZSB2aXJpdG9fbWRldi5oIHRvCiAgdmlydGlvX21kZXZfb3BzLmgKLSBk b24ndCBhYnVzZSB2ZXJzaW9uIGZpbGVkcyBpbiB2aXJ0aW9fbWRldiBzdHJ1Y3R1cmUsIHVzZSBm ZWF0dXJlcwogIGluc3RlYWQKLSBmaXggd2FybmluZyBkdXJpbmcgZGV2aWNlIHJlbW92ZQotIHN0 eWxlICYgZG9jcyB0d2Vha3MgYW5kIHR5cG8gZml4ZXMKCkNoYW5nZXMgZnJvbSBWMzoKCi0gZG9j dW1lbnQgdGhhdCBjbGFzcyBpZCAoZGV2aWNlIG9wcykgbXVzdCBiZSBzcGVjaWZpZWQgaW4gY3Jl YXRlKCkKLSBhZGQgV0FSTigpIHdoZW4gdHJ5aW5nIHRvIHNldCBjbGFzc19pZCB3aGVuIGl0IGhh cyBhbHJlYWR5IHNldAotIGFkZCBXQVJOKCkgd2hlbiBjbGFzc19pZCBpcyBub3Qgc3BlY2lmaWVk IGluIGNyZWF0ZSgpIGFuZCBjb3JyZWN0bHkKICByZXR1cm4gYW4gZXJyb3IgaW4gdGhpcyBjYXNl Ci0gY29ycmVjdCB0aGUgcHJvdG90eXBlIG9mIG1kZXZfc2V0X2NsYXNzKCkgaW4gdGhlIGRvYwot IGFkZCBkb2N1bWVudGlvbiBvZiBtZGV2X3NldF9jbGFzcygpCi0gcmVtb3ZlIHRoZSB1bm5lY2Vz c2FyeSAiY2xhc3NfaWRfZmFpbCIgbGFiZWwgd2hlbiBjbGFzcyBpZCBpcyBub3QKICBzcGVjaWZp ZWQgaW4gY3JlYXRlKCkKLSBjb252ZXJ0IGlkX3RhYmxlIGluIHZmaW9fbWRldiB0byBjb25zdAot IG1vdmUgbWRldl9zZXRfY2xhc3MgYW5kIGl0cyBmcmllbmRzIGFmdGVyIG1kZXZfdXVpZCgpCi0g c3VxYXNoIHRoZSBwYXRjaCBvZiBidXMgdWV2ZW50IGludG8gcGF0Y2ggb2YgaW50cm9kdWNpbmcg Y2xhc3MgaWQKLSB0d2VhayB0aGUgd29yZHMgaW4gdGhlIGRvY3MgcGVyIENvcm5lbGlhIHN1Z2dl c3Rpb24KLSB0aWUgY2xhc3NfaWQgYW5kIGRldmljZSBvcHMgdGhyb3VnaCBjbGFzcyBzcGVjaWZp YyBpbml0aWFsaXphdGlvbgogIHJvdXRpbmUgbGlrZSBtZGV2X3NldF92ZmlvX29wcygpCi0gdHlw b3MgZml4ZXMgaW4gdGhlIGRvY3Mgb2YgdmlydGlvLW1kZXYgY2FsbGJhY2tzCi0gZG9jdW1lbnQg dGhlIHVzYWdlIG9mIHZpcnRxdWV1ZXMgaW4gc3RydWN0IHZpcnRpb19tZGV2X2RldmljZQotIHJl bW92ZSB0aGUgdXNlbGVzcyB2cXMgYXJyYXkgaW4gc3RydWN0IHZpcnRpb19tZGV2X2RldmljZQot IHJlbmFtZSBNREVWX0lEX1hYWCB0byBNREVWX0NMQVNTX0lEX1hYWAoKQ2hhbmdlcyBmcm9tIFYy OgoKLSBmYWlsIHdoZW4gY2xhc3NfaWQgaXMgbm90IHNwZWNpZmllZAotIGRyb3AgdGhlIHZyaW5n aCBwYXRjaAotIG1hdGNoIHRoZSBkb2MgdG8gdGhlIGNvZGUKLSB0d2VhayB0aGUgY29tbWl0IGxv ZwotIG1vdmUgZGV2aWNlX29wcyBmcm9tIHBhcmVudCB0byBtZGV2IGRldmljZQotIHJlbW92ZSB0 aGUgdW51c2VkIE1ERVZfSURfVkhPU1QKCkNoYW5nZXMgZnJvbSBWMToKCi0gbW92ZSB2aXJ0aW9f bWRldi5jIHRvIGRyaXZlcnMvdmlydGlvCi0gc3RvcmUgY2xhc3NfaWQgaW4gbWRldl9kZXZpY2Ug aW5zdGVhZCBvZiBtZGV2X3BhcmVudAotIHN0b3JlIGRldmljZV9vcHMgaW4gbWRldl9kZXZpY2Ug aW5zdGVhZCBvZiBtZGV2X3BhcmVudAotIHJlb3JkZXIgdGhlIHBhdGNoLCB2cmluZ2ggZml4IGNv bWVzIGZpcnN0Ci0gcmVhbGx5IHNpbGVudCBjb21waWxpbmcgd2FybmluZ3MKLSByZWFsbHkgc3dp dGNoIHRvIHVzZSB1MTYgZm9yIGNsYXNzX2lkCi0gdWV2ZW50IGFuZCBtb2Rwb3N0IHN1cHBvcnQg Zm9yIG1kZXYgY2xhc3NfaWQKLSB2cmFpb3VzIHR3ZWFrcyBwZXIgY29tbWVudHMgZnJvbSBQYXJh dgoKQ2hhbmdlcyBmcm9tIFJGQy1WMjoKCi0gc2lsZW50IGNvbXBpbGUgd2FybmluZ3Mgb24gc29t ZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uCi0gdXNlIHUxNiBpbnN0ZWFkIHU4IGZvciBjbGFzcyBp ZAotIHJlc2V2ZSBNREVWX0lEX1ZIT1NUIGZvciBmdXR1cmUgdmhvc3QtbWRldiB3b3JrCi0gaW50 cm9kdWNlICJ2aXJ0aW8iIHR5cGUgZm9yIG12bmV0IGFuZCBtYWtlICJ2aG9zdCIgdHlwZSBmb3Ig ZnV0dXJlCiAgd29yawotIGFkZCBlbnRyaWVzIGluIE1BSU5UQUlORVIKLSB0d2VhayBhbmQgdHlw b3MgZml4ZXMgaW4gY29tbWl0IGxvZwoKQ2hhbmdlcyBmcm9tIFJGQy1WMToKCi0gcmVuYW1lIGRl dmljZSBpZCB0byBjbGFzcyBpZAotIGFkZCBkb2NzIGZvciBjbGFzcyBpZCBhbmQgZGV2aWNlIHNw ZWNpZmljIG9wcyAoZGV2aWNlX29wcykKLSBzcGxpdCBkZXZpY2Vfb3BzIGludG8gc2VwZXJhdGUg aGVhZGVycwotIGRyb3AgdGhlIG1kZXZfc2V0X2RtYV9vcHMoKQotIHVzZSBkZXZpY2Vfb3BzIHRv IGltcGxlbWVudCB0aGUgdHJhbnNwb3J0IEFQSSwgdGhlbiBpdCdzIG5vdCBhIHBhcnQKICBvZiBV QVBJIGFueSBtb3JlCi0gdXNlIEdGUF9BVE9NSUMgaW4gbXZuZXQgc2FtcGxlIGRldmljZSBhbmQg b3RoZXIgdHdlYWtzCi0gc2V0X3ZyaW5nX2Jhc2UvZ2V0X3ZyaW5nX2Jhc2Ugc3VwcG9ydCBmb3Ig bXZuZXQgZGV2aWNlCgpKYXNvbiBXYW5nICg2KToKICBtZGV2OiBjbGFzcyBpZCBzdXBwb3J0CiAg bW9kcG9zdDogYWRkIHN1cHBvcnQgZm9yIG1kZXYgY2xhc3MgaWQKICBtZGV2OiBpbnRyb2R1Y2Ug ZGV2aWNlIHNwZWNpZmljIG9wcwogIG1kZXY6IGludHJvZHVjZSB2aXJ0aW8gZGV2aWNlIGFuZCBp dHMgZGV2aWNlIG9wcwogIHZpcnRpbzogaW50cm9kdWNlIGEgbWRldiBiYXNlZCB0cmFuc3BvcnQK ICBkb2NzOiBzYW1wbGUgZHJpdmVyIHRvIGRlbW9uc3RyYXRlIGhvdyB0byBpbXBsZW1lbnQgdmly dGlvLW1kZXYKICAgIGZyYW1ld29yawoKIC4uLi9kcml2ZXItYXBpL3ZmaW8tbWVkaWF0ZWQtZGV2 aWNlLnJzdCAgICAgICB8ICAzOCArLQogTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9rdm1ndC5jICAg ICAgICAgICAgICB8ICAxNyArLQogZHJpdmVycy9zMzkwL2Npby92ZmlvX2Njd19vcHMuYyAgICAg ICAgICAgICAgIHwgIDE3ICstCiBkcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMgICAg ICAgICAgICAgfCAgMTMgKy0KIGRyaXZlcnMvdmZpby9tZGV2L21kZXZfY29yZS5jICAgICAgICAg ICAgICAgICB8ICA2MCArKwogZHJpdmVycy92ZmlvL21kZXYvbWRldl9kcml2ZXIuYyAgICAgICAg ICAgICAgIHwgIDI1ICsKIGRyaXZlcnMvdmZpby9tZGV2L21kZXZfcHJpdmF0ZS5oICAgICAgICAg ICAgICB8ICAgOCArCiBkcml2ZXJzL3ZmaW8vbWRldi92ZmlvX21kZXYuYyAgICAgICAgICAgICAg ICAgfCAgNDUgKy0KIGRyaXZlcnMvdmlydGlvL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgNyArCiBkcml2ZXJzL3ZpcnRpby9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAg fCAgIDEgKwogZHJpdmVycy92aXJ0aW8vdmlydGlvX21kZXYuYyAgICAgICAgICAgICAgICAgIHwg NDA3ICsrKysrKysrKysrCiBpbmNsdWRlL2xpbnV4L21kZXYuaCAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgNTcgKy0KIGluY2x1ZGUvbGludXgvbWRldl92ZmlvX29wcy5oICAgICAgICAgICAg ICAgICB8ICA1MiArKwogaW5jbHVkZS9saW51eC9tZGV2X3ZpcnRpb19vcHMuaCAgICAgICAgICAg ICAgIHwgMTQ5ICsrKysKIGluY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmggICAgICAgICAg ICAgICB8ICAgOCArCiBzYW1wbGVzL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDcgKwogc2FtcGxlcy92ZmlvLW1kZXYvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAg IHwgICAxICsKIHNhbXBsZXMvdmZpby1tZGV2L21ib2Nocy5jICAgICAgICAgICAgICAgICAgICB8 ICAxOSArLQogc2FtcGxlcy92ZmlvLW1kZXYvbWRweS5jICAgICAgICAgICAgICAgICAgICAgIHwg IDE5ICstCiBzYW1wbGVzL3ZmaW8tbWRldi9tdHR5LmMgICAgICAgICAgICAgICAgICAgICAgfCAg MTcgKy0KIHNhbXBsZXMvdmZpby1tZGV2L212bmV0LmMgICAgICAgICAgICAgICAgICAgICB8IDY4 NSArKysrKysrKysrKysrKysrKysKIHNjcmlwdHMvbW9kL2RldmljZXRhYmxlLW9mZnNldHMuYyAg ICAgICAgICAgICB8ICAgMyArCiBzY3JpcHRzL21vZC9maWxlMmFsaWFzLmMgICAgICAgICAgICAg ICAgICAgICAgfCAgMTEgKwogMjQgZmlsZXMgY2hhbmdlZCwgMTU3NyBpbnNlcnRpb25zKCspLCA5 MSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3ZpcnRpby92aXJ0aW9f bWRldi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9tZGV2X3ZmaW9fb3BzLmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L21kZXZfdmlydGlvX29wcy5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgc2FtcGxlcy92ZmlvLW1kZXYvbXZuZXQuYwoKLS0gCjIuMTkuMQoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1h aWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs