From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Williamson Subject: Re: [PATCH V8 3/6] mdev: introduce device specific ops Date: Tue, 5 Nov 2019 10:44:18 -0700 Message-ID: <20191105104418.1735d800@x1.home> References: <20191105093240.5135-1-jasowang@redhat.com> <20191105093240.5135-4-jasowang@redhat.com> <20191105175025.1a620844.cohuck@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=WINDOWS-1252 Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <20191105175025.1a620844.cohuck@redhat.com> Sender: netdev-owner@vger.kernel.org To: Cornelia Huck Cc: Jason Wang , 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, mst@redhat.com, tiwei.bie@intel.com, virtualization@lists.linux-foundation.org, netdev@vger.kernel.org, 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 List-Id: intel-gfx@lists.freedesktop.org On Tue, 5 Nov 2019 17:50:25 +0100 Cornelia Huck wrote: > On Tue, 5 Nov 2019 17:32:37 +0800 > Jason Wang wrote: >=20 > > Currently, except for the create and remove, the rest of > > mdev_parent_ops is designed for vfio-mdev driver only and may not help > > for kernel mdev driver. With the help of class id, this patch > > introduces device specific callbacks inside mdev_device > > structure. This allows different set of callback to be used by > > vfio-mdev and virtio-mdev. > >=20 > > Reviewed-by: Parav Pandit > > Signed-off-by: Jason Wang > > --- > > .../driver-api/vfio-mediated-device.rst | 35 +++++++++---- > > MAINTAINERS | 1 + > > drivers/gpu/drm/i915/gvt/kvmgt.c | 18 ++++--- > > drivers/s390/cio/vfio_ccw_ops.c | 18 ++++--- > > drivers/s390/crypto/vfio_ap_ops.c | 14 +++-- > > drivers/vfio/mdev/mdev_core.c | 24 ++++++++- > > drivers/vfio/mdev/mdev_private.h | 5 ++ > > drivers/vfio/mdev/vfio_mdev.c | 37 ++++++------- > > include/linux/mdev.h | 43 ++++----------- > > include/linux/mdev_vfio_ops.h | 52 +++++++++++++++++++ > > samples/vfio-mdev/mbochs.c | 20 ++++--- > > samples/vfio-mdev/mdpy.c | 20 ++++--- > > samples/vfio-mdev/mtty.c | 18 ++++--- > > 13 files changed, 206 insertions(+), 99 deletions(-) > > create mode 100644 include/linux/mdev_vfio_ops.h > > =20 >=20 > (...) >=20 > > @@ -172,10 +163,34 @@ that a driver should use to unregister itself wit= h the mdev core driver:: > > =20 > > =09extern void mdev_unregister_device(struct device *dev); > > =20 > > -It is also required to specify the class_id in create() callback throu= gh:: > > +As multiple types of mediated devices may be supported, class id needs > > +to be specified in the create callback(). This could be done =20 >=20 > The brackets should probably go behind 'create'? >=20 > > +explicitly for the device that does not use on mdev bus for its =20 >=20 > "for devices that do not use the mdev bus" ? >=20 > But why wouldn't they? I feel like I've missed some discussion here :/ The device ops provide a route through mdev-core for known callbacks, which is primarily useful when we have 1:N relation between mdev bus driver and vendor drivers. The obvious example here is vfio-mdev, where we have GVT-g, vfio-ap, vfio-ccw, NVIDIA GRID, and various sample drivers all advertising vfio-mdev support via their class id. However, if we have a tightly coupled vendor driver and mdev bus driver, as the mlx5 support that Parav is developing, the claim is that they prefer not to expose any device ops and intend to interact directly with the mdev device. At least that's my understanding. Thanks, Alex > > +operation through: > > =20 > > =09int mdev_set_class(struct mdev_device *mdev, u16 id); > > =20 > > +For the device that uses on the mdev bus for its operation, the class = =20 >=20 > "For devices that use the mdev bus..." >=20 > But same comment as above. >=20 > > +should provide helper function to set class id and device specific > > +ops. E.g for vfio-mdev devices, the function to be called is:: > > + > > +=09int mdev_set_vfio_ops(struct mdev_device *mdev, > > + const struct mdev_vfio_device_ops *vfio_= ops); > > + > > +The class id (set by this function to MDEV_CLASS_ID_VFIO) is used to > > +match a device with an mdev driver via its id table. The device > > +specific callbacks (specified in *vfio_ops) are obtainable via > > +mdev_get_vfio_ops() (for use by the mdev bus driver). A vfio-mdev > > +device (class id MDEV_CLASS_ID_VFIO) uses the following > > +device-specific ops: > > + > > +* open: open callback of vfio mediated device > > +* close: close callback of vfio mediated device > > +* ioctl: ioctl callback of vfio mediated device > > +* read : read emulation callback > > +* write: write emulation callback > > +* mmap: mmap emulation callback > > + > > Mediated Device Management Interface Through sysfs > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D =20 >=20 > Otherwise, looks good. 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=-3.7 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 63F6EC5DF60 for ; Tue, 5 Nov 2019 17:44:47 +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 4A9782087E for ; Tue, 5 Nov 2019 17:44:46 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4A9782087E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6D4F96EB31; Tue, 5 Nov 2019 17:44:43 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id D08866EB2E for ; Tue, 5 Nov 2019 17:44:41 +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-205-Fsp1fWk7MS6L-3vtqVbnMQ-1; Tue, 05 Nov 2019 12:44:36 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 9DEFC477; Tue, 5 Nov 2019 17:44:32 +0000 (UTC) Received: from x1.home (ovpn-116-110.phx2.redhat.com [10.3.116.110]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4D1385D9CD; Tue, 5 Nov 2019 17:44:19 +0000 (UTC) Date: Tue, 5 Nov 2019 10:44:18 -0700 From: Alex Williamson To: Cornelia Huck Message-ID: <20191105104418.1735d800@x1.home> In-Reply-To: <20191105175025.1a620844.cohuck@redhat.com> References: <20191105093240.5135-1-jasowang@redhat.com> <20191105093240.5135-4-jasowang@redhat.com> <20191105175025.1a620844.cohuck@redhat.com> Organization: Red Hat MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-MC-Unique: Fsp1fWk7MS6L-3vtqVbnMQ-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=1572975880; 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: in-reply-to:in-reply-to:references:references; bh=46u2l9L8Y05Qm2/MKUXXTgxpERoN9tnFQ6gH6kXcl6k=; b=VceUb5MQBplMp5ya6r8thW+i2Q4N1HGx2vsb6t8ZMd+zNPDuPCxXqC0iEOsqWUPR1G8boC jzT/H6zlofg2Kypm9gMh/j38lwMKpewHJ+5QHF+ZfYybPYq/X5tcyFg2nROnymTCb1Bw+x DcUkVUcLBo7wzFFo5sg9TQ764Y8/VYI= Subject: Re: [Intel-gfx] [PATCH V8 3/6] mdev: introduce device specific ops X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: stefanha@redhat.com, christophe.de.dinechin@gmail.com, kvm@vger.kernel.org, mst@redhat.com, airlied@linux.ie, Jason Wang , heiko.carstens@de.ibm.com, dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org, kwankhede@nvidia.com, rob.miller@broadcom.com, linux-s390@vger.kernel.org, sebott@linux.ibm.com, lulu@redhat.com, eperezma@redhat.com, pasic@linux.ibm.com, borntraeger@de.ibm.com, haotian.wang@sifive.com, intel-gfx@lists.freedesktop.org, farman@linux.ibm.com, idos@mellanox.com, gor@linux.ibm.com, cunming.liang@intel.com, xiao.w.wang@intel.com, freude@linux.ibm.com, parav@mellanox.com, zhihong.wang@intel.com, intel-gvt-dev@lists.freedesktop.org, akrowiak@linux.ibm.com, oberpar@linux.ibm.com, tiwei.bie@intel.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, maxime.coquelin@redhat.com, lingshan.zhu@intel.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" Message-ID: <20191105174418.mNkllSFZ-S1-uHjKzN4ei8_cOWRhC4AjXk2mPY7RDz0@z> T24gVHVlLCA1IE5vdiAyMDE5IDE3OjUwOjI1ICswMTAwCkNvcm5lbGlhIEh1Y2sgPGNvaHVja0By ZWRoYXQuY29tPiB3cm90ZToKCj4gT24gVHVlLCAgNSBOb3YgMjAxOSAxNzozMjozNyArMDgwMAo+ IEphc29uIFdhbmcgPGphc293YW5nQHJlZGhhdC5jb20+IHdyb3RlOgo+IAo+ID4gQ3VycmVudGx5 LCBleGNlcHQgZm9yIHRoZSBjcmVhdGUgYW5kIHJlbW92ZSwgdGhlIHJlc3Qgb2YKPiA+IG1kZXZf cGFyZW50X29wcyBpcyBkZXNpZ25lZCBmb3IgdmZpby1tZGV2IGRyaXZlciBvbmx5IGFuZCBtYXkg bm90IGhlbHAKPiA+IGZvciBrZXJuZWwgbWRldiBkcml2ZXIuIFdpdGggdGhlIGhlbHAgb2YgY2xh c3MgaWQsIHRoaXMgcGF0Y2gKPiA+IGludHJvZHVjZXMgZGV2aWNlIHNwZWNpZmljIGNhbGxiYWNr cyBpbnNpZGUgbWRldl9kZXZpY2UKPiA+IHN0cnVjdHVyZS4gVGhpcyBhbGxvd3MgZGlmZmVyZW50 IHNldCBvZiBjYWxsYmFjayB0byBiZSB1c2VkIGJ5Cj4gPiB2ZmlvLW1kZXYgYW5kIHZpcnRpby1t ZGV2Lgo+ID4gCj4gPiBSZXZpZXdlZC1ieTogUGFyYXYgUGFuZGl0IDxwYXJhdkBtZWxsYW5veC5j b20+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBKYXNvbiBXYW5nIDxqYXNvd2FuZ0ByZWRoYXQuY29tPgo+ ID4gLS0tCj4gPiAgLi4uL2RyaXZlci1hcGkvdmZpby1tZWRpYXRlZC1kZXZpY2UucnN0ICAgICAg IHwgMzUgKysrKysrKysrLS0tLQo+ID4gIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAxICsKPiA+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQva3ZtZ3Qu YyAgICAgICAgICAgICAgfCAxOCArKysrLS0tCj4gPiAgZHJpdmVycy9zMzkwL2Npby92ZmlvX2Nj d19vcHMuYyAgICAgICAgICAgICAgIHwgMTggKysrKy0tLQo+ID4gIGRyaXZlcnMvczM5MC9jcnlw dG8vdmZpb19hcF9vcHMuYyAgICAgICAgICAgICB8IDE0ICsrKy0tCj4gPiAgZHJpdmVycy92Zmlv L21kZXYvbWRldl9jb3JlLmMgICAgICAgICAgICAgICAgIHwgMjQgKysrKysrKystCj4gPiAgZHJp dmVycy92ZmlvL21kZXYvbWRldl9wcml2YXRlLmggICAgICAgICAgICAgIHwgIDUgKysKPiA+ICBk cml2ZXJzL3ZmaW8vbWRldi92ZmlvX21kZXYuYyAgICAgICAgICAgICAgICAgfCAzNyArKysrKyst LS0tLS0tCj4gPiAgaW5jbHVkZS9saW51eC9tZGV2LmggICAgICAgICAgICAgICAgICAgICAgICAg IHwgNDMgKysrKy0tLS0tLS0tLS0tCj4gPiAgaW5jbHVkZS9saW51eC9tZGV2X3ZmaW9fb3BzLmgg ICAgICAgICAgICAgICAgIHwgNTIgKysrKysrKysrKysrKysrKysrKwo+ID4gIHNhbXBsZXMvdmZp by1tZGV2L21ib2Nocy5jICAgICAgICAgICAgICAgICAgICB8IDIwICsrKystLS0KPiA+ICBzYW1w bGVzL3ZmaW8tbWRldi9tZHB5LmMgICAgICAgICAgICAgICAgICAgICAgfCAyMCArKysrLS0tCj4g PiAgc2FtcGxlcy92ZmlvLW1kZXYvbXR0eS5jICAgICAgICAgICAgICAgICAgICAgIHwgMTggKysr Ky0tLQo+ID4gIDEzIGZpbGVzIGNoYW5nZWQsIDIwNiBpbnNlcnRpb25zKCspLCA5OSBkZWxldGlv bnMoLSkKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9tZGV2X3ZmaW9fb3Bz LmgKPiA+ICAgCj4gCj4gKC4uLikKPiAKPiA+IEBAIC0xNzIsMTAgKzE2MywzNCBAQCB0aGF0IGEg ZHJpdmVyIHNob3VsZCB1c2UgdG8gdW5yZWdpc3RlciBpdHNlbGYgd2l0aCB0aGUgbWRldiBjb3Jl IGRyaXZlcjo6Cj4gPiAgCj4gPiAgCWV4dGVybiB2b2lkIG1kZXZfdW5yZWdpc3Rlcl9kZXZpY2Uo c3RydWN0IGRldmljZSAqZGV2KTsKPiA+ICAKPiA+IC1JdCBpcyBhbHNvIHJlcXVpcmVkIHRvIHNw ZWNpZnkgdGhlIGNsYXNzX2lkIGluIGNyZWF0ZSgpIGNhbGxiYWNrIHRocm91Z2g6Ogo+ID4gK0Fz IG11bHRpcGxlIHR5cGVzIG9mIG1lZGlhdGVkIGRldmljZXMgbWF5IGJlIHN1cHBvcnRlZCwgY2xh c3MgaWQgbmVlZHMKPiA+ICt0byBiZSBzcGVjaWZpZWQgaW4gdGhlIGNyZWF0ZSBjYWxsYmFjaygp LiBUaGlzIGNvdWxkIGJlIGRvbmUgIAo+IAo+IFRoZSBicmFja2V0cyBzaG91bGQgcHJvYmFibHkg Z28gYmVoaW5kICdjcmVhdGUnPwo+IAo+ID4gK2V4cGxpY2l0bHkgZm9yIHRoZSBkZXZpY2UgdGhh dCBkb2VzIG5vdCB1c2Ugb24gbWRldiBidXMgZm9yIGl0cyAgCj4gCj4gImZvciBkZXZpY2VzIHRo YXQgZG8gbm90IHVzZSB0aGUgbWRldiBidXMiID8KPiAKPiBCdXQgd2h5IHdvdWxkbid0IHRoZXk/ IEkgZmVlbCBsaWtlIEkndmUgbWlzc2VkIHNvbWUgZGlzY3Vzc2lvbiBoZXJlIDovCgpUaGUgZGV2 aWNlIG9wcyBwcm92aWRlIGEgcm91dGUgdGhyb3VnaCBtZGV2LWNvcmUgZm9yIGtub3duIGNhbGxi YWNrcywKd2hpY2ggaXMgcHJpbWFyaWx5IHVzZWZ1bCB3aGVuIHdlIGhhdmUgMTpOIHJlbGF0aW9u IGJldHdlZW4gbWRldiBidXMKZHJpdmVyIGFuZCB2ZW5kb3IgZHJpdmVycy4gIFRoZSBvYnZpb3Vz IGV4YW1wbGUgaGVyZSBpcyB2ZmlvLW1kZXYsCndoZXJlIHdlIGhhdmUgR1ZULWcsIHZmaW8tYXAs IHZmaW8tY2N3LCBOVklESUEgR1JJRCwgYW5kIHZhcmlvdXMgc2FtcGxlCmRyaXZlcnMgYWxsIGFk dmVydGlzaW5nIHZmaW8tbWRldiBzdXBwb3J0IHZpYSB0aGVpciBjbGFzcyBpZC4gIEhvd2V2ZXIs CmlmIHdlIGhhdmUgYSB0aWdodGx5IGNvdXBsZWQgdmVuZG9yIGRyaXZlciBhbmQgbWRldiBidXMg ZHJpdmVyLCBhcyB0aGUKbWx4NSBzdXBwb3J0IHRoYXQgUGFyYXYgaXMgZGV2ZWxvcGluZywgdGhl IGNsYWltIGlzIHRoYXQgdGhleSBwcmVmZXIKbm90IHRvIGV4cG9zZSBhbnkgZGV2aWNlIG9wcyBh bmQgaW50ZW5kIHRvIGludGVyYWN0IGRpcmVjdGx5IHdpdGggdGhlCm1kZXYgZGV2aWNlLiAgQXQg bGVhc3QgdGhhdCdzIG15IHVuZGVyc3RhbmRpbmcuICBUaGFua3MsCgpBbGV4Cgo+ID4gK29wZXJh dGlvbiB0aHJvdWdoOgo+ID4gIAo+ID4gIAlpbnQgbWRldl9zZXRfY2xhc3Moc3RydWN0IG1kZXZf ZGV2aWNlICptZGV2LCB1MTYgaWQpOwo+ID4gIAo+ID4gK0ZvciB0aGUgZGV2aWNlIHRoYXQgdXNl cyBvbiB0aGUgbWRldiBidXMgZm9yIGl0cyBvcGVyYXRpb24sIHRoZSBjbGFzcyAgCj4gCj4gIkZv ciBkZXZpY2VzIHRoYXQgdXNlIHRoZSBtZGV2IGJ1cy4uLiIKPiAKPiBCdXQgc2FtZSBjb21tZW50 IGFzIGFib3ZlLgo+IAo+ID4gK3Nob3VsZCBwcm92aWRlIGhlbHBlciBmdW5jdGlvbiB0byBzZXQg Y2xhc3MgaWQgYW5kIGRldmljZSBzcGVjaWZpYwo+ID4gK29wcy4gRS5nIGZvciB2ZmlvLW1kZXYg ZGV2aWNlcywgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBpczo6Cj4gPiArCj4gPiArCWludCBt ZGV2X3NldF92ZmlvX29wcyhzdHJ1Y3QgbWRldl9kZXZpY2UgKm1kZXYsCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG1kZXZfdmZpb19kZXZpY2Vfb3BzICp2 ZmlvX29wcyk7Cj4gPiArCj4gPiArVGhlIGNsYXNzIGlkIChzZXQgYnkgdGhpcyBmdW5jdGlvbiB0 byBNREVWX0NMQVNTX0lEX1ZGSU8pIGlzIHVzZWQgdG8KPiA+ICttYXRjaCBhIGRldmljZSB3aXRo IGFuIG1kZXYgZHJpdmVyIHZpYSBpdHMgaWQgdGFibGUuIFRoZSBkZXZpY2UKPiA+ICtzcGVjaWZp YyBjYWxsYmFja3MgKHNwZWNpZmllZCBpbiAqdmZpb19vcHMpIGFyZSBvYnRhaW5hYmxlIHZpYQo+ ID4gK21kZXZfZ2V0X3ZmaW9fb3BzKCkgKGZvciB1c2UgYnkgdGhlIG1kZXYgYnVzIGRyaXZlciku IEEgdmZpby1tZGV2Cj4gPiArZGV2aWNlIChjbGFzcyBpZCBNREVWX0NMQVNTX0lEX1ZGSU8pIHVz ZXMgdGhlIGZvbGxvd2luZwo+ID4gK2RldmljZS1zcGVjaWZpYyBvcHM6Cj4gPiArCj4gPiArKiBv cGVuOiBvcGVuIGNhbGxiYWNrIG9mIHZmaW8gbWVkaWF0ZWQgZGV2aWNlCj4gPiArKiBjbG9zZTog Y2xvc2UgY2FsbGJhY2sgb2YgdmZpbyBtZWRpYXRlZCBkZXZpY2UKPiA+ICsqIGlvY3RsOiBpb2N0 bCBjYWxsYmFjayBvZiB2ZmlvIG1lZGlhdGVkIGRldmljZQo+ID4gKyogcmVhZCA6IHJlYWQgZW11 bGF0aW9uIGNhbGxiYWNrCj4gPiArKiB3cml0ZTogd3JpdGUgZW11bGF0aW9uIGNhbGxiYWNrCj4g PiArKiBtbWFwOiBtbWFwIGVtdWxhdGlvbiBjYWxsYmFjawo+ID4gKwo+ID4gIE1lZGlhdGVkIERl dmljZSBNYW5hZ2VtZW50IEludGVyZmFjZSBUaHJvdWdoIHN5c2ZzCj4gPiAgPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIAo+IAo+IE90aGVyd2lzZSwg bG9va3MgZ29vZC4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eA==