From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net [217.70.183.201]) (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 77703195809 for ; Mon, 26 Aug 2024 16:49:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724690969; cv=none; b=nW1HTVOnf53enVjPHZEfk2GNP4VSSSU/nylNGP+MQ6bA/f7m4Nlwjb65cwcEP79dsZL3o0WA3Xb/orxhUEQoqYj04LGtyQZ1uXAqm7k+vI1ogXuEuf2bbid00jxVE+CHIhS1UZ9BC6nHUpq6Dk2GV8dNxisxC1PMRXI2P5+JEBY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1724690969; c=relaxed/simple; bh=9RSKHY8JbH28EoEm+lorkKgJk2cKAVL75gA4qL79VwU=; h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=gY7TtE6EXdAElhybNAsvh2uBqAaMQb56/GqRGTvzNXJbQ9+X7LPnlCn7OCEsw7ZD4V6/8Ozycb7EhqnGuRvUj0U05J4wFD6VYHElpEpv9I0l64MwMhwgBtkjEPfP6vTEQnIK8s3zdY2frJJpKl3jxzzpq0lACRPsTO8rxWemSL4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=Sk7Ar+v6; arc=none smtp.client-ip=217.70.183.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="Sk7Ar+v6" Received: by mail.gandi.net (Postfix) with ESMTPSA id E32371BF205; Mon, 26 Aug 2024 16:49:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1724690965; 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=xb7NN4dIVxALfBJ3uh32jtsuXIAT1jz8saqQJe2YaLw=; b=Sk7Ar+v6x2luniJW3LSxrLXYH0SxyKzHyH1rd9gMiU957GbEICPB3kJ6/MKs9PAolEqC3S CQ54J6ROyzNE+mvYQYZBKwvMV8uFPEhs24yWwM+0e5RO1OdLpyBEsl6kFRddtYMH4GkY6S /okZI6iCKxQRbdiAo5MDO2QOCbQKlEfD7oVcIH8CyQR1fmngx1dJ3CaVBr2Z/i77qiPits BS5Mt+i0Zxnz6iK2Y1fFuD6SZItsu2iEleQOCpw4lgDhJLiS4x/3vymH8Cs/ILbQsEnoGm jaLv1mGwWuupSpi2+AUE976/ayJB6HzAMouLb41E6cowPugcJuuP+hzMoOV96g== Date: Mon, 26 Aug 2024 18:49:24 +0200 From: Miquel Raynal To: Frank Li Cc: Alexandre Belloni , Boris Brezillon , Parshuram Thombare , Greg Kroah-Hartman , Boris Brezillon , Arnd Bergmann , Conor Culhane , linux-i3c@lists.infradead.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev Subject: Re: [PATCH v3 03/11] i3c: master: Extend address status bit to 4 and add I3C_ADDR_SLOT_EXT_INIT Message-ID: <20240826184924.53b48861@xps-13> In-Reply-To: References: <20240819-i3c_fix-v3-0-7d69f7b0a05e@nxp.com> <20240819-i3c_fix-v3-3-7d69f7b0a05e@nxp.com> <20240823180426.056ac093@xps-13> <20240826100430.33194702@xps-13> Organization: Bootlin X-Mailer: Claws Mail 4.2.0 (GTK 3.24.41; x86_64-pc-linux-gnu) Precedence: bulk X-Mailing-List: imx@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-GND-Sasl: miquel.raynal@bootlin.com Hi Frank, Frank.li@nxp.com wrote on Mon, 26 Aug 2024 11:56:57 -0400: > On Mon, Aug 26, 2024 at 10:04:30AM +0200, Miquel Raynal wrote: > > Hi Frank, > > > > Frank.li@nxp.com wrote on Fri, 23 Aug 2024 13:55:15 -0400: > > =20 > > > On Fri, Aug 23, 2024 at 06:04:26PM +0200, Miquel Raynal wrote: =20 > > > > Hi Frank, > > > > > > > > =20 > > > > > static bool i3c_bus_dev_addr_is_avail(struct i3c_bus *bus, u8 ad= dr) > > > > > { > > > > > enum i3c_addr_slot_status status; > > > > > @@ -388,6 +405,14 @@ static int i3c_bus_get_free_addr(struct i3c_= bus *bus, u8 start_addr) > > > > > enum i3c_addr_slot_status status; > > > > > u8 addr; > > > > > > > > > > + /* try find an address, which have not pre-allocated by assigne= d-address */ =20 > > > > > > > > Try to find has been > > > > > > > > pre-allocated? > > > > =20 > > > > > + for (addr =3D start_addr; addr < I3C_MAX_ADDR; addr++) { > > > > > + status =3D i3c_bus_get_addr_slot_status_ext(bus, addr); > > > > > + if (status =3D=3D I3C_ADDR_SLOT_FREE) > > > > > + return addr; > > > > > + } > > > > > + > > > > > + /* use pre-allocoated by assigned-address because such device w= as removed at bus*/ =20 > > > > > > > > Use allocated > > > > > > > > pre-allocated or assigned? > > > > > > > > I guess the logic should be: > > > > - try the assigned-address > > > > - look for a free slot > > > > - look for an already in use slot that must concern a disconnected > > > > device > > > > > > > > But the comments are not precise enough IMHO. Can you rephrase them= ? =20 > > > > > > How about: > > > > > > Follow the steps below to obtain the I3C dynamic address: > > > > > > 1. Retrieve the assigned-address from the device tree (DT). =20 > > > > I guess here you mean that you try to pick that address, unless if > > already in use on the bus, right? > > =20 >=20 > Sorry, It should be typo. See below >=20 >=20 > > > 2. Look for an available slot address. =20 > > > > "available address slot"? > > =20 > > > 3. Look for an address that is pre-reserved by another device with > > > assigned-address in DT, but where the device is currently offline. =20 > > > > I don't think this part is precise enough. You don't look for addresses > > "pre-reserved" but rather more for busy address slots, which might no > > longer be in-use because the device is currently offline. The fact that > > the slot might have been pre-reserved in the DT is a detail that may, > > in some cases, not be true. And as far as I understand your changes, > > you're not checking the DT addresses but rather more the addresses that > > have been allocated live (which is anyway better, because i3c might > > very well be used on a !OF platform). > > > > Once we settle on a description, maybe this can be part of the kdoc for > > the main function searching for the best dynamic address? =20 >=20 > I am not sure I understand what's your means here. The current framework > is >=20 > 1. Get a free address first, the get more infromation from devices, like > BCR, DCR ... > 2. Check if it is old device, or dt node have assigned-address property. > 3. if it is old device, switch to use old address (if old address is free) > according to i3c spec. If dt pre-reserved address is free, switch to use > dt pre-reserved address. >=20 > To match 3's requirement as much as possible, when 1 return address, which > should avoid return dt's assigned-address. >=20 >=20 > /* > * I3C Framework Address Assignment Flow: f a a f > * 1 Initial Address Assignment: Attempt to obtain a free address first, 1. a a > then gather additional information such as PID, BCR, and DRCR > * 2 Address switch: 2. > - 2a: Check if this target device is appeared before. Switch > to use prevous address of this device. the previous for > * - 2b: Check if this target device have assigned-address property i= n dt, has a preferred address based on firmware data (DT). Switch to it if it is the case and the address is free. Today it's the DT, maybe not tomorrow. You take these values from the firmware on the board, that feels more generic than talking about a DT property name. > switch to this address if it is free. > * > In step 1, i3c_bus_get_free_addr() is called. To optimize for step 2b, th= is > function should return an address that is not pre-reserved by any target > device with an assigned address in the device tree (DT). This does not make sense, if you want to optimize for 2b, why not selecting the assigned-address property in the first place if it's available? Also, I don't understand why you would care to specifically *not* return an address that might be the default one for another device in the first place. Changing to a free slot (if possible) not reserved by another device might be done in 2b, which makes operation 1 much more simple, so you put all the complexity at the same time. Even if you are proceeding with two devices asking the DAA at the same time, the procedure should work in a way which does not impact the fact that the second device will get its desired address if the first can take another one. > If no such address > is available, it can return an address that was pre-reserved by a target > device that is currently offline. Thanks, Miqu=C3=A8l 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 D293FC5321D for ; Mon, 26 Aug 2024 16:49:32 +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:References:In-Reply-To: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=lg8V4eePhtutNEw446ygSesZqBQOQBfvev8JSedzEn8=; b=dLGl6hZamxiMCX nGA8lmq9uVM0kEdG+R+W3km4uX1BAuvQXYJMtdXxTwY5ssjYt1xxu9bxOLSWrrAJh8N2+4qUA8+I2 5/IjzDkmUQ8A8WEC4sMNv7JoC8Z+v1e1IlB8UaN6XYcutD1GEbnsY4nKZsJE39+s5xyGOILRHau94 6S9qgBN1AyEP0reBj4Urtd+jSAHcjk9N513l/hH3az3Iy+w7LdOM4Xwl3sti/JH0TnWh013Nq997k Na2OAXnGzoZANIwpl0etO8l7wK5u8erBli5yi3NB+uVRZXkBYPyqjwNocdP3GxPGpAjCeLHyM0vnE nkOoHX/WA1+P6CdRFMlA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sicuK-000000085B0-1k7U; Mon, 26 Aug 2024 16:49:32 +0000 Received: from relay8-d.mail.gandi.net ([217.70.183.201]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sicuG-000000085A3-1Pyi for linux-i3c@lists.infradead.org; Mon, 26 Aug 2024 16:49:30 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id E32371BF205; Mon, 26 Aug 2024 16:49:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1724690965; 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=xb7NN4dIVxALfBJ3uh32jtsuXIAT1jz8saqQJe2YaLw=; b=Sk7Ar+v6x2luniJW3LSxrLXYH0SxyKzHyH1rd9gMiU957GbEICPB3kJ6/MKs9PAolEqC3S CQ54J6ROyzNE+mvYQYZBKwvMV8uFPEhs24yWwM+0e5RO1OdLpyBEsl6kFRddtYMH4GkY6S /okZI6iCKxQRbdiAo5MDO2QOCbQKlEfD7oVcIH8CyQR1fmngx1dJ3CaVBr2Z/i77qiPits BS5Mt+i0Zxnz6iK2Y1fFuD6SZItsu2iEleQOCpw4lgDhJLiS4x/3vymH8Cs/ILbQsEnoGm jaLv1mGwWuupSpi2+AUE976/ayJB6HzAMouLb41E6cowPugcJuuP+hzMoOV96g== Date: Mon, 26 Aug 2024 18:49:24 +0200 From: Miquel Raynal To: Frank Li Cc: Alexandre Belloni , Boris Brezillon , Parshuram Thombare , Greg Kroah-Hartman , Boris Brezillon , Arnd Bergmann , Conor Culhane , linux-i3c@lists.infradead.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev Subject: Re: [PATCH v3 03/11] i3c: master: Extend address status bit to 4 and add I3C_ADDR_SLOT_EXT_INIT Message-ID: <20240826184924.53b48861@xps-13> In-Reply-To: References: <20240819-i3c_fix-v3-0-7d69f7b0a05e@nxp.com> <20240819-i3c_fix-v3-3-7d69f7b0a05e@nxp.com> <20240823180426.056ac093@xps-13> <20240826100430.33194702@xps-13> Organization: Bootlin X-Mailer: Claws Mail 4.2.0 (GTK 3.24.41; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-GND-Sasl: miquel.raynal@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240826_094929_277478_3055753A X-CRM114-Status: GOOD ( 46.60 ) X-BeenThere: linux-i3c@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-i3c" Errors-To: linux-i3c-bounces+linux-i3c=archiver.kernel.org@lists.infradead.org SGkgRnJhbmssCgpGcmFuay5saUBueHAuY29tIHdyb3RlIG9uIE1vbiwgMjYgQXVnIDIwMjQgMTE6 NTY6NTcgLTA0MDA6Cgo+IE9uIE1vbiwgQXVnIDI2LCAyMDI0IGF0IDEwOjA0OjMwQU0gKzAyMDAs IE1pcXVlbCBSYXluYWwgd3JvdGU6Cj4gPiBIaSBGcmFuaywKPiA+Cj4gPiBGcmFuay5saUBueHAu Y29tIHdyb3RlIG9uIEZyaSwgMjMgQXVnIDIwMjQgMTM6NTU6MTUgLTA0MDA6Cj4gPiAgCj4gPiA+ IE9uIEZyaSwgQXVnIDIzLCAyMDI0IGF0IDA2OjA0OjI2UE0gKzAyMDAsIE1pcXVlbCBSYXluYWwg d3JvdGU6ICAKPiA+ID4gPiBIaSBGcmFuaywKPiA+ID4gPgo+ID4gPiA+ICAKPiA+ID4gPiA+ICBz dGF0aWMgYm9vbCBpM2NfYnVzX2Rldl9hZGRyX2lzX2F2YWlsKHN0cnVjdCBpM2NfYnVzICpidXMs IHU4IGFkZHIpCj4gPiA+ID4gPiAgewo+ID4gPiA+ID4gIAllbnVtIGkzY19hZGRyX3Nsb3Rfc3Rh dHVzIHN0YXR1czsKPiA+ID4gPiA+IEBAIC0zODgsNiArNDA1LDE0IEBAIHN0YXRpYyBpbnQgaTNj X2J1c19nZXRfZnJlZV9hZGRyKHN0cnVjdCBpM2NfYnVzICpidXMsIHU4IHN0YXJ0X2FkZHIpCj4g PiA+ID4gPiAgCWVudW0gaTNjX2FkZHJfc2xvdF9zdGF0dXMgc3RhdHVzOwo+ID4gPiA+ID4gIAl1 OCBhZGRyOwo+ID4gPiA+ID4KPiA+ID4gPiA+ICsJLyogdHJ5IGZpbmQgYW4gYWRkcmVzcywgd2hp Y2ggaGF2ZSBub3QgcHJlLWFsbG9jYXRlZCBieSBhc3NpZ25lZC1hZGRyZXNzICovICAKPiA+ID4g Pgo+ID4gPiA+IAlUcnkJdG8gZmluZAkJCWhhcyAgIGJlZW4KPiA+ID4gPgo+ID4gPiA+IHByZS1h bGxvY2F0ZWQ/Cj4gPiA+ID4gIAo+ID4gPiA+ID4gKwlmb3IgKGFkZHIgPSBzdGFydF9hZGRyOyBh ZGRyIDwgSTNDX01BWF9BRERSOyBhZGRyKyspIHsKPiA+ID4gPiA+ICsJCXN0YXR1cyA9IGkzY19i dXNfZ2V0X2FkZHJfc2xvdF9zdGF0dXNfZXh0KGJ1cywgYWRkcik7Cj4gPiA+ID4gPiArCQlpZiAo c3RhdHVzID09IEkzQ19BRERSX1NMT1RfRlJFRSkKPiA+ID4gPiA+ICsJCQlyZXR1cm4gYWRkcjsK PiA+ID4gPiA+ICsJfQo+ID4gPiA+ID4gKwo+ID4gPiA+ID4gKwkvKiB1c2UgcHJlLWFsbG9jb2F0 ZWQgYnkgYXNzaWduZWQtYWRkcmVzcyBiZWNhdXNlIHN1Y2ggZGV2aWNlIHdhcyByZW1vdmVkIGF0 IGJ1cyovICAKPiA+ID4gPgo+ID4gPiA+IAkgIFVzZSAgICAgIGFsbG9jYXRlZAo+ID4gPiA+Cj4g PiA+ID4gcHJlLWFsbG9jYXRlZCBvciBhc3NpZ25lZD8KPiA+ID4gPgo+ID4gPiA+IEkgZ3Vlc3Mg dGhlIGxvZ2ljIHNob3VsZCBiZToKPiA+ID4gPiAtIHRyeSB0aGUgYXNzaWduZWQtYWRkcmVzcwo+ ID4gPiA+IC0gbG9vayBmb3IgYSBmcmVlIHNsb3QKPiA+ID4gPiAtIGxvb2sgZm9yIGFuIGFscmVh ZHkgaW4gdXNlIHNsb3QgdGhhdCBtdXN0IGNvbmNlcm4gYSBkaXNjb25uZWN0ZWQKPiA+ID4gPiAg IGRldmljZQo+ID4gPiA+Cj4gPiA+ID4gQnV0IHRoZSBjb21tZW50cyBhcmUgbm90IHByZWNpc2Ug ZW5vdWdoIElNSE8uIENhbiB5b3UgcmVwaHJhc2UgdGhlbT8gIAo+ID4gPgo+ID4gPiBIb3cgYWJv dXQ6Cj4gPiA+Cj4gPiA+IEZvbGxvdyB0aGUgc3RlcHMgYmVsb3cgdG8gb2J0YWluIHRoZSBJM0Mg ZHluYW1pYyBhZGRyZXNzOgo+ID4gPgo+ID4gPiAxLiBSZXRyaWV2ZSB0aGUgYXNzaWduZWQtYWRk cmVzcyBmcm9tIHRoZSBkZXZpY2UgdHJlZSAoRFQpLiAgCj4gPgo+ID4gSSBndWVzcyBoZXJlIHlv dSBtZWFuIHRoYXQgeW91IHRyeSB0byBwaWNrIHRoYXQgYWRkcmVzcywgdW5sZXNzIGlmCj4gPiBh bHJlYWR5IGluIHVzZSBvbiB0aGUgYnVzLCByaWdodD8KPiA+ICAKPiAKPiBTb3JyeSwgSXQgc2hv dWxkIGJlIHR5cG8uIFNlZSBiZWxvdwo+IAo+IAo+ID4gPiAyLiBMb29rIGZvciBhbiBhdmFpbGFi bGUgc2xvdCBhZGRyZXNzLiAgCj4gPgo+ID4gImF2YWlsYWJsZSBhZGRyZXNzIHNsb3QiPwo+ID4g IAo+ID4gPiAzLiBMb29rIGZvciBhbiBhZGRyZXNzIHRoYXQgaXMgcHJlLXJlc2VydmVkIGJ5IGFu b3RoZXIgZGV2aWNlIHdpdGgKPiA+ID4gYXNzaWduZWQtYWRkcmVzcyBpbiBEVCwgYnV0IHdoZXJl IHRoZSBkZXZpY2UgaXMgY3VycmVudGx5IG9mZmxpbmUuICAKPiA+Cj4gPiBJIGRvbid0IHRoaW5r IHRoaXMgcGFydCBpcyBwcmVjaXNlIGVub3VnaC4gWW91IGRvbid0IGxvb2sgZm9yIGFkZHJlc3Nl cwo+ID4gInByZS1yZXNlcnZlZCIgYnV0IHJhdGhlciBtb3JlIGZvciBidXN5IGFkZHJlc3Mgc2xv dHMsIHdoaWNoIG1pZ2h0IG5vCj4gPiBsb25nZXIgYmUgaW4tdXNlIGJlY2F1c2UgdGhlIGRldmlj ZSBpcyBjdXJyZW50bHkgb2ZmbGluZS4gVGhlIGZhY3QgdGhhdAo+ID4gdGhlIHNsb3QgbWlnaHQg aGF2ZSBiZWVuIHByZS1yZXNlcnZlZCBpbiB0aGUgRFQgaXMgYSBkZXRhaWwgdGhhdCBtYXksCj4g PiBpbiBzb21lIGNhc2VzLCBub3QgYmUgdHJ1ZS4gQW5kIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQg eW91ciBjaGFuZ2VzLAo+ID4geW91J3JlIG5vdCBjaGVja2luZyB0aGUgRFQgYWRkcmVzc2VzIGJ1 dCByYXRoZXIgbW9yZSB0aGUgYWRkcmVzc2VzIHRoYXQKPiA+IGhhdmUgYmVlbiBhbGxvY2F0ZWQg bGl2ZSAod2hpY2ggaXMgYW55d2F5IGJldHRlciwgYmVjYXVzZSBpM2MgbWlnaHQKPiA+IHZlcnkg d2VsbCBiZSB1c2VkIG9uIGEgIU9GIHBsYXRmb3JtKS4KPiA+Cj4gPiBPbmNlIHdlIHNldHRsZSBv biBhIGRlc2NyaXB0aW9uLCBtYXliZSB0aGlzIGNhbiBiZSBwYXJ0IG9mIHRoZSBrZG9jIGZvcgo+ ID4gdGhlIG1haW4gZnVuY3Rpb24gc2VhcmNoaW5nIGZvciB0aGUgYmVzdCBkeW5hbWljIGFkZHJl c3M/ICAKPiAKPiBJIGFtIG5vdCBzdXJlIEkgdW5kZXJzdGFuZCB3aGF0J3MgeW91ciBtZWFucyBo ZXJlLiBUaGUgY3VycmVudCBmcmFtZXdvcmsKPiBpcwo+IAo+IDEuIEdldCBhIGZyZWUgYWRkcmVz cyBmaXJzdCwgdGhlIGdldCBtb3JlIGluZnJvbWF0aW9uIGZyb20gZGV2aWNlcywgbGlrZQo+IEJD UiwgRENSIC4uLgo+IDIuIENoZWNrIGlmIGl0IGlzIG9sZCBkZXZpY2UsIG9yIGR0IG5vZGUgaGF2 ZSBhc3NpZ25lZC1hZGRyZXNzIHByb3BlcnR5Lgo+IDMuIGlmIGl0IGlzIG9sZCBkZXZpY2UsIHN3 aXRjaCB0byB1c2Ugb2xkIGFkZHJlc3MgKGlmIG9sZCBhZGRyZXNzIGlzIGZyZWUpCj4gYWNjb3Jk aW5nIHRvIGkzYyBzcGVjLiBJZiBkdCBwcmUtcmVzZXJ2ZWQgYWRkcmVzcyBpcyBmcmVlLCBzd2l0 Y2ggdG8gdXNlCj4gZHQgcHJlLXJlc2VydmVkIGFkZHJlc3MuCj4gCj4gVG8gbWF0Y2ggMydzIHJl cXVpcmVtZW50IGFzIG11Y2ggYXMgcG9zc2libGUsIHdoZW4gMSByZXR1cm4gYWRkcmVzcywgd2hp Y2gKPiBzaG91bGQgYXZvaWQgcmV0dXJuIGR0J3MgYXNzaWduZWQtYWRkcmVzcy4KPiAKPiAKPiAv Kgo+ICAqIEkzQyBGcmFtZXdvcmsgQWRkcmVzcyBBc3NpZ25tZW50IEZsb3c6CgoJIGYJICAgYQkg ICBhCSAgICAgIGYKCj4gICogMSBJbml0aWFsIEFkZHJlc3MgQXNzaWdubWVudDogQXR0ZW1wdCB0 byBvYnRhaW4gYSBmcmVlIGFkZHJlc3MgZmlyc3QsCgogICAgIDEuCSAgICAgICBhICAgICAgIGEK Cj4gdGhlbiBnYXRoZXIgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBzdWNoIGFzIFBJRCwgQkNSLCBh bmQgRFJDUgo+ICAqIDIgQWRkcmVzcyBzd2l0Y2g6CgogICAgIDIuCgo+ICAgICAgICAtIDJhOiBD aGVjayBpZiB0aGlzIHRhcmdldCBkZXZpY2UgaXMgYXBwZWFyZWQgYmVmb3JlLiBTd2l0Y2gKPiB0 byB1c2UgcHJldm91cyBhZGRyZXNzIG9mIHRoaXMgZGV2aWNlLgoKCSB0aGUgcHJldmlvdXMJZm9y Cgo+ICAqICAgICAtIDJiOiBDaGVjayBpZiB0aGlzIHRhcmdldCBkZXZpY2UgaGF2ZSBhc3NpZ25l ZC1hZGRyZXNzIHByb3BlcnR5IGluIGR0LAoKCQkJCSAgICBoYXMgYSBwcmVmZXJyZWQgYWRkcmVz cyBiYXNlZCBvbgoJCQkJICAgIGZpcm13YXJlIGRhdGEgKERUKS4gU3dpdGNoIHRvIGl0IGlmCgkJ CQkgICAgaXQgaXMgdGhlIGNhc2UgYW5kIHRoZSBhZGRyZXNzIGlzCgkJCQkgICAgZnJlZS4KClRv ZGF5IGl0J3MgdGhlIERULCBtYXliZSBub3QgdG9tb3Jyb3cuIFlvdSB0YWtlIHRoZXNlIHZhbHVl cyBmcm9tIHRoZQpmaXJtd2FyZSBvbiB0aGUgYm9hcmQsIHRoYXQgZmVlbHMgbW9yZSBnZW5lcmlj IHRoYW4gdGFsa2luZyBhYm91dCBhIERUCnByb3BlcnR5IG5hbWUuCgo+IHN3aXRjaCB0byB0aGlz IGFkZHJlc3MgaWYgaXQgaXMgZnJlZS4KPiAgKgo+IEluIHN0ZXAgMSwgaTNjX2J1c19nZXRfZnJl ZV9hZGRyKCkgaXMgY2FsbGVkLiBUbyBvcHRpbWl6ZSBmb3Igc3RlcCAyYiwgdGhpcwo+IGZ1bmN0 aW9uIHNob3VsZCByZXR1cm4gYW4gYWRkcmVzcyB0aGF0IGlzIG5vdCBwcmUtcmVzZXJ2ZWQgYnkg YW55IHRhcmdldAo+IGRldmljZSB3aXRoIGFuIGFzc2lnbmVkIGFkZHJlc3MgaW4gdGhlIGRldmlj ZSB0cmVlIChEVCkuCgpUaGlzIGRvZXMgbm90IG1ha2Ugc2Vuc2UsIGlmIHlvdSB3YW50IHRvIG9w dGltaXplIGZvciAyYiwgd2h5IG5vdApzZWxlY3RpbmcgdGhlIGFzc2lnbmVkLWFkZHJlc3MgcHJv cGVydHkgaW4gdGhlIGZpcnN0IHBsYWNlIGlmIGl0J3MKYXZhaWxhYmxlPyBBbHNvLCBJIGRvbid0 IHVuZGVyc3RhbmQgd2h5IHlvdSB3b3VsZCBjYXJlIHRvIHNwZWNpZmljYWxseQoqbm90KiByZXR1 cm4gYW4gYWRkcmVzcyB0aGF0IG1pZ2h0IGJlIHRoZSBkZWZhdWx0IG9uZSBmb3IgYW5vdGhlcgpk ZXZpY2UgaW4gdGhlIGZpcnN0IHBsYWNlLiBDaGFuZ2luZyB0byBhIGZyZWUgc2xvdCAoaWYgcG9z c2libGUpIG5vdApyZXNlcnZlZCBieSBhbm90aGVyIGRldmljZSBtaWdodCBiZSBkb25lIGluIDJi LCB3aGljaCBtYWtlcyBvcGVyYXRpb24gMQptdWNoIG1vcmUgc2ltcGxlLCBzbyB5b3UgcHV0IGFs bCB0aGUgY29tcGxleGl0eSBhdCB0aGUgc2FtZSB0aW1lLiBFdmVuCmlmIHlvdSBhcmUgcHJvY2Vl ZGluZyB3aXRoIHR3byBkZXZpY2VzIGFza2luZyB0aGUgREFBIGF0IHRoZSBzYW1lIHRpbWUsCnRo ZSBwcm9jZWR1cmUgc2hvdWxkIHdvcmsgaW4gYSB3YXkgd2hpY2ggZG9lcyBub3QgaW1wYWN0IHRo ZSBmYWN0IHRoYXQKdGhlIHNlY29uZCBkZXZpY2Ugd2lsbCBnZXQgaXRzIGRlc2lyZWQgYWRkcmVz cyBpZiB0aGUgZmlyc3QgY2FuIHRha2UKYW5vdGhlciBvbmUuCgo+IElmIG5vIHN1Y2ggYWRkcmVz cwo+IGlzIGF2YWlsYWJsZSwgaXQgY2FuIHJldHVybiBhbiBhZGRyZXNzIHRoYXQgd2FzIHByZS1y ZXNlcnZlZCBieSBhIHRhcmdldAo+IGRldmljZSB0aGF0IGlzIGN1cnJlbnRseSBvZmZsaW5lLgoK VGhhbmtzLApNaXF1w6hsCgotLSAKbGludXgtaTNjIG1haWxpbmcgbGlzdApsaW51eC1pM2NAbGlz dHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LWkzYwo=