From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from relay3-d.mail.gandi.net (relay3-d.mail.gandi.net [217.70.183.195]) (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 0B66518E373 for ; Wed, 2 Oct 2024 07:49:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.195 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727855390; cv=none; b=nDNZ6tZoKIcOQOvs9j1k/FkqkZX+7Bqb9OOIzjnemrS+30P+o1t8Oqlsf7+DCgfPnKF4r9nr5RpmAzFhNgpqn2At9RHNcbbxn2UJrEmiGbZLOezEA1THBunu92CzcBpO8AG4R8a1Fj591CtPlbxrqCtox7N1QpH77jd/DbPx4ZM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1727855390; c=relaxed/simple; bh=zDypmlhgKNXGUVhJM1au38sVT9RyMMUwtY83nfkbj6I=; h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=JhOamX3UBlQRAjuEl46uWOdFLt6v5Hx9CIPqIBEJ/mIhptokcUOxcCt56rgMYbuGdLrgYhDYYQ2vozy1naeNJNSVL/DILet9IrWyaNd0BAjrmdE3EASFtF1jrXCXPQIrPH5JS0cmPGpNnrYp0MTvq8M39txlaBDpp9sz63r4Tuo= 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=X2XevZN2; arc=none smtp.client-ip=217.70.183.195 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="X2XevZN2" Received: by mail.gandi.net (Postfix) with ESMTPSA id 92AB060003; Wed, 2 Oct 2024 07:49:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1727855386; 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=VQuzEv53DXwXTjUws25SPYwCyjtC4EtFl20S+EvFVXY=; b=X2XevZN2I6w4A58T4JP3rdr7t9cc97h6c0Uig+ECNQKmzlya7dAguyl6IurOp/P+36kY4i bR7MwJAmi9IL1PIFYYpQutXol7ap4vG+C3f6G8jrVtLy2vs36o+qAlGDif22GXYityYkk4 p2sQGe3izMCox+BPCHbpZs9hTQtviNsc8YXp8HAh1e3HdjembQ4bifZRw+b8bVd17RuqQN 3bm3qMVL0Z07ReXspr/1ExJb6KSFuXH1wOzMJXXYWPbYoKvxJ2WWmWpWis9cp1DTPNY2U2 DpH0cFQwqo5p0r6Bq387PWyv5RkFiydIyM66/rBf4tIxXMthREbPQNl8FXKeQA== Date: Wed, 2 Oct 2024 09:49:44 +0200 From: Miquel Raynal To: Frank Li Cc: Alexandre Belloni , linux-i3c@lists.infradead.org, linux-kernel@vger.kernel.org, arnd@arndb.de, bbrezillon@kernel.org, boris.brezillon@collabora.com, conor.culhane@silvaco.com, gregkh@linuxfoundation.org, imx@lists.linux.dev, pthombar@cadence.com, ravindra.yashvant.shinde@nxp.com Subject: Re: [PATCH 2/3] i3c: master: Extend address status bit to 4 and add I3C_ADDR_SLOT_EXT_INIT Message-ID: <20241002094944.5c0c83c8@xps-13> In-Reply-To: <20241001-i3c_dts_assign-v1-2-6ba83dc15eb8@nxp.com> References: <20241001-i3c_dts_assign-v1-0-6ba83dc15eb8@nxp.com> <20241001-i3c_dts_assign-v1-2-6ba83dc15eb8@nxp.com> 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 Tue, 01 Oct 2024 13:08:21 -0400: > Extend the address status bit to 4 and introduce the I3C_ADDR_SLOT_EXT_IN= IT > macro to indicate that a device prefers a specific address. This is > generally set by the 'assigned-address' in the device tree source (dts) > file. >=20 > =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=AC=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=AC=E2=94=80=E2=94=80=E2=94=80=E2=94=AC=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=AC=E2=94=80=E2=94=80=E2=94=80=E2=94=90 > =E2=94=82S/Sr=E2=94=82 7'h7E RnW=3D0 =E2=94=82ACK=E2=94=82 ENTDAA =E2= =94=82 T =E2=94=9C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90 > =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=B4=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=B4=E2=94=80=E2=94=80=E2=94=80=E2=94=B4=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=B4=E2=94=80=E2=94=80=E2=94=80=E2=94=98 =E2=94=82 > =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=98 > =E2=94=82 =E2=94=8C=E2=94=80=E2=94=80=E2=94=AC=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=AC=E2=94=80=E2=94=80=E2=94=80=E2=94=AC=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=AC= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =AC=E2=94=80=E2=94=80=E2=94=80=E2=94=AC=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90 > =E2=94=94=E2=94=80=E2=96=BA=E2=94=82Sr=E2=94=827'h7E RnW=3D1 =E2=94=82A= CK=E2=94=8248bit UID BCR DCR=E2=94=82Assign 7bit Addr=E2=94=82PAR=E2=94=82 = ACK/NACK=E2=94=82 > =E2=94=94=E2=94=80=E2=94=80=E2=94=B4=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=B4=E2=94=80=E2=94=80=E2=94=80=E2=94=B4=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=B4=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=B4=E2=94= =80=E2=94=80=E2=94=80=E2=94=B4=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=98 >=20 > Some master controllers (such as HCI) need to prepare the entire above > transaction before sending it out to the I3C bus. This means that a 7-bit > dynamic address needs to be allocated before knowing the target device's > UID information. >=20 > However, some I3C targets want a specific address (called as > "init_dyn_addr"), which is typically specified by the DT's assigned-addre= ss > property. (Lower addresses have higher IBI priority, and the target can > adjust this by using the assigned-address property if using DT). The > function i3c_master_add_i3c_dev_locked() will switch to this > "init_dyn_addr" if it is not in use. >=20 > Therefore, i3c_bus_get_free_addr() should return a free address that has > not been claimed by any target devices as "init_dyn_addr" (indicated by > I3C_ADDR_SLOT_EXT_INIT). This allows the device with the "init_dyn_addr" > to switch to its "init_dyn_addr" when it hot-joins the I3C bus. Otherwise, > if the "init_dyn_addr" is already in use by another I3C device, the target > device will not be able to switch to its desired address. >=20 > If all of above address are already used, i3c_bus_get_free_addr() return > one from the claimed as init_dyn_addr and free address slot. This ensures > support devices as much as possible. >=20 > Signed-off-by: Frank Li > --- > change from v3 to v4 > - rewrite commit message and comment for i3c_bus_get_free_addr() > --- > drivers/i3c/master.c | 68 ++++++++++++++++++++++++++++++++++++++++= ------ > include/linux/i3c/master.h | 7 +++-- > 2 files changed, 64 insertions(+), 11 deletions(-) >=20 > diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c > index dcf8d23c5941a..a56cb281e6b6d 100644 > --- a/drivers/i3c/master.c > +++ b/drivers/i3c/master.c > @@ -345,7 +345,7 @@ const struct bus_type i3c_bus_type =3D { > EXPORT_SYMBOL_GPL(i3c_bus_type); > =20 > static enum i3c_addr_slot_status > -i3c_bus_get_addr_slot_status(struct i3c_bus *bus, u16 addr) > +i3c_bus_get_addr_slot_status_ext(struct i3c_bus *bus, u16 addr) > { > unsigned long status; > int bitpos =3D addr * I3C_ADDR_SLOT_STATUS_BITS; > @@ -356,11 +356,17 @@ i3c_bus_get_addr_slot_status(struct i3c_bus *bus, u= 16 addr) > status =3D bus->addrslots[bitpos / BITS_PER_LONG]; > status >>=3D bitpos % BITS_PER_LONG; > =20 > - return status & I3C_ADDR_SLOT_STATUS_MASK; > + return status & I3C_ADDR_SLOT_EXT_STATUS_MASK; > } > =20 > -static void i3c_bus_set_addr_slot_status(struct i3c_bus *bus, u16 addr, > - enum i3c_addr_slot_status status) > +static enum i3c_addr_slot_status > +i3c_bus_get_addr_slot_status(struct i3c_bus *bus, u16 addr) > +{ > + return i3c_bus_get_addr_slot_status_ext(bus, addr) & I3C_ADDR_SLOT_STAT= US_MASK; > +} > + > +static void i3c_bus_set_addr_slot_status_mask(struct i3c_bus *bus, u16 a= ddr, > + enum i3c_addr_slot_status status, int mask) > { > int bitpos =3D addr * I3C_ADDR_SLOT_STATUS_BITS; > unsigned long *ptr; > @@ -369,11 +375,22 @@ static void i3c_bus_set_addr_slot_status(struct i3c= _bus *bus, u16 addr, > return; > =20 > ptr =3D bus->addrslots + (bitpos / BITS_PER_LONG); > - *ptr &=3D ~((unsigned long)I3C_ADDR_SLOT_STATUS_MASK << > - (bitpos % BITS_PER_LONG)); > + *ptr &=3D ~((unsigned long)mask << (bitpos % BITS_PER_LONG)); > *ptr |=3D (unsigned long)status << (bitpos % BITS_PER_LONG); > } > =20 > +static void i3c_bus_set_addr_slot_status(struct i3c_bus *bus, u16 addr, > + enum i3c_addr_slot_status status) > +{ > + i3c_bus_set_addr_slot_status_mask(bus, addr, status, I3C_ADDR_SLOT_STAT= US_MASK); > +} > + > +static void i3c_bus_set_addr_slot_status_ext(struct i3c_bus *bus, u16 ad= dr, > + enum i3c_addr_slot_status status) > +{ > + i3c_bus_set_addr_slot_status_mask(bus, addr, status, I3C_ADDR_SLOT_EXT_= STATUS_MASK); > +} Can we drop this helper and instead modify the i3c_bus_set_addr_slot_status() prototype to get the mask from its parameters?=20 > + > static bool i3c_bus_dev_addr_is_avail(struct i3c_bus *bus, u8 addr) > { > enum i3c_addr_slot_status status; > @@ -383,11 +400,44 @@ static bool i3c_bus_dev_addr_is_avail(struct i3c_bu= s *bus, u8 addr) > return status =3D=3D I3C_ADDR_SLOT_FREE; > } > =20 > +/* > + * =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=AC=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=AC=E2=94=80=E2=94=80=E2=94=80=E2=94=AC=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=AC=E2=94=80=E2=94=80=E2=94=80=E2=94=90 > + * =E2=94=82S/Sr=E2=94=82 7'h7E RnW=3D0 =E2=94=82ACK=E2=94=82 ENTDAA = =E2=94=82 T =E2=94=9C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90 > + * =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=B4=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=B4=E2=94=80=E2=94=80=E2=94=80=E2=94=B4=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=B4=E2=94=80=E2=94=80=E2=94=80=E2=94=98 =E2=94=82 > + * =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=98 > + * =E2=94=82 =E2=94=8C=E2=94=80=E2=94=80=E2=94=AC=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=AC=E2=94=80=E2=94=80=E2=94=80=E2=94=AC=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =AC=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=AC=E2=94=80=E2=94=80=E2=94=80=E2=94=AC=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=90 > + * =E2=94=94=E2=94=80=E2=96=BA=E2=94=82Sr=E2=94=827'h7E RnW=3D1 =E2=94= =82ACK=E2=94=8248bit UID BCR DCR=E2=94=82Assign 7bit Addr=E2=94=82PAR=E2=94= =82 ACK/NACK=E2=94=82 > + * =E2=94=94=E2=94=80=E2=94=80=E2=94=B4=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=B4=E2=94=80=E2=94=80=E2=94=80=E2=94=B4=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2= =94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=B4=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80= =E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=B4=E2= =94=80=E2=94=80=E2=94=80=E2=94=B4=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94= =80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=98 > + * Some master controllers (such as HCI) need to prepare the entire abov= e transaction before > + * sending it out to the I3C bus. This means that a 7-bit dynamic addres= s needs to be allocated > + * before knowing the target device's UID information. > + * > + * However, some I3C targets want a specific address (called as "init_dy= n_addr"), which is may request specific addresses (called "init... > + * typically specified by the DT's assigned-address property. (Lower add= resses have higher IBI -'s > + * priority, and the target can adjust this by using the assigned-addres= s property if using DT). Can we remove the whole "( ... )" sentence, and replace it with: "... property, lower addresses having higher IBI priority." > + * The function i3c_master_add_i3c_dev_locked() will switch to this "ini= t_dyn_addr" if it is not > + * in use. if it is available. > + * > + * Therefore, i3c_bus_get_free_addr() should return a free address that = has not been claimed by any preferably return that is not in the list of desired addresses. > + * target devices as "init_dyn_addr". This allows the device with the "i= nit_dyn_addr" to switch to > + * its "init_dyn_addr" when it hot-joins the I3C bus. Otherwise, if the = "init_dyn_addr" is already > + * in use by another I3C device, the target device will not be able to s= witch to its desired > + * address. > + * > + * If all of above address are already used, i3c_bus_get_free_addr() ret= urn one from the claimed as > + * init_dyn_addr and free address slot. This ensures support devices as = much as possible. If the previous step fails, fallback returning one of the remaining unassigned address, regardless of its state in the desired list. > + */ Please update your commit message as well with these changes. > static int i3c_bus_get_free_addr(struct i3c_bus *bus, u8 start_addr) > { > enum i3c_addr_slot_status status; > u8 addr; > =20 > + for (addr =3D start_addr; addr < I3C_MAX_ADDR; addr++) { > + status =3D i3c_bus_get_addr_slot_status_ext(bus, addr); So here it could look like: status =3D ...get_addr_slot_status(bus, addr, ) > + if (status =3D=3D I3C_ADDR_SLOT_FREE) > + return addr; > + } > + > for (addr =3D start_addr; addr < I3C_MAX_ADDR; addr++) { > status =3D i3c_bus_get_addr_slot_status(bus, addr); > if (status =3D=3D I3C_ADDR_SLOT_FREE) > @@ -1918,9 +1968,9 @@ static int i3c_master_bus_init(struct i3c_master_co= ntroller *master) > goto err_rstdaa; > } > =20 > - i3c_bus_set_addr_slot_status(&master->bus, > - i3cboardinfo->init_dyn_addr, > - I3C_ADDR_SLOT_I3C_DEV); > + i3c_bus_set_addr_slot_status_ext(&master->bus, > + i3cboardinfo->init_dyn_addr, > + I3C_ADDR_SLOT_I3C_DEV | I3C_ADDR_SLOT_EXT_INIT); > =20 > /* > * Only try to create/attach devices that have a static > diff --git a/include/linux/i3c/master.h b/include/linux/i3c/master.h > index 2100547b2d8d2..57ad6044ac856 100644 > --- a/include/linux/i3c/master.h > +++ b/include/linux/i3c/master.h > @@ -298,7 +298,8 @@ enum i3c_open_drain_speed { > * @I3C_ADDR_SLOT_I2C_DEV: address is assigned to an I2C device > * @I3C_ADDR_SLOT_I3C_DEV: address is assigned to an I3C device > * @I3C_ADDR_SLOT_STATUS_MASK: address slot mask > - * > + * @I3C_ADDR_SLOT_EXT_INIT: the bitmask represents addresses that are pr= eferred by some devices, > + * such as the "assigned-address" property in a device tree source= (DTS). The naming could be improved, because "extended" does not mean much. I believe we should express the fact that this is a desired addressed, so what about: I3C_ADDR_SLOT_I3C_ASSIGNED/DESIRED > * On an I3C bus, addresses are assigned dynamically, and we need to kno= w which > * addresses are free to use and which ones are already assigned. > * > @@ -311,9 +312,11 @@ enum i3c_addr_slot_status { > I3C_ADDR_SLOT_I2C_DEV, > I3C_ADDR_SLOT_I3C_DEV, > I3C_ADDR_SLOT_STATUS_MASK =3D 3, > + I3C_ADDR_SLOT_EXT_STATUS_MASK =3D 7, > + I3C_ADDR_SLOT_EXT_INIT =3D BIT(2), > }; > =20 > -#define I3C_ADDR_SLOT_STATUS_BITS 2 > +#define I3C_ADDR_SLOT_STATUS_BITS 4 > =20 > /** > * struct i3c_bus - I3C bus object >=20 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 77A03CF319D for ; Wed, 2 Oct 2024 07:52:13 +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=DDRgG4pw3BKSNvIIsqzDTOI68MebNgd+Dm/2FXK89C4=; b=H6vDpE1/sxZAox 1oQZMT21QwpdY8QcMjOBw4DkrLzeNmLabfx7la4yxUW/7vpVUR9x9kAkL5jiHZBIWeWpeVGU7M5RW OeWU8zrTnXF5W9juO0CWSfGgcniLh9h1+1+aKjlc4gQWVU3Mn1fF9BHqDYNj9yOl9uOYWyu5P/so2 NGGzeDqgsv1N314ngUJPRQpUPwhrbtYuzOauizAc/uQ8QXO0owPFuryhIQ4Su+1Jnld9xcIij5jT7 xtkchue/HfCelsz8Csv3uLcNO0e7FancYX3+PmLHPJax4z2NCaaPQYLv5dlIHfmRlxDRBiKnC6da8 xsYxsdFezjQWcoSCLTAQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1svu9c-000000054us-475V; Wed, 02 Oct 2024 07:52:12 +0000 Received: from relay3-d.mail.gandi.net ([217.70.183.195]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1svu7J-000000054RS-1sLM for linux-i3c@lists.infradead.org; Wed, 02 Oct 2024 07:49:51 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 92AB060003; Wed, 2 Oct 2024 07:49:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1727855386; 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=VQuzEv53DXwXTjUws25SPYwCyjtC4EtFl20S+EvFVXY=; b=X2XevZN2I6w4A58T4JP3rdr7t9cc97h6c0Uig+ECNQKmzlya7dAguyl6IurOp/P+36kY4i bR7MwJAmi9IL1PIFYYpQutXol7ap4vG+C3f6G8jrVtLy2vs36o+qAlGDif22GXYityYkk4 p2sQGe3izMCox+BPCHbpZs9hTQtviNsc8YXp8HAh1e3HdjembQ4bifZRw+b8bVd17RuqQN 3bm3qMVL0Z07ReXspr/1ExJb6KSFuXH1wOzMJXXYWPbYoKvxJ2WWmWpWis9cp1DTPNY2U2 DpH0cFQwqo5p0r6Bq387PWyv5RkFiydIyM66/rBf4tIxXMthREbPQNl8FXKeQA== Date: Wed, 2 Oct 2024 09:49:44 +0200 From: Miquel Raynal To: Frank Li Cc: Alexandre Belloni , linux-i3c@lists.infradead.org, linux-kernel@vger.kernel.org, arnd@arndb.de, bbrezillon@kernel.org, boris.brezillon@collabora.com, conor.culhane@silvaco.com, gregkh@linuxfoundation.org, imx@lists.linux.dev, pthombar@cadence.com, ravindra.yashvant.shinde@nxp.com Subject: Re: [PATCH 2/3] i3c: master: Extend address status bit to 4 and add I3C_ADDR_SLOT_EXT_INIT Message-ID: <20241002094944.5c0c83c8@xps-13> In-Reply-To: <20241001-i3c_dts_assign-v1-2-6ba83dc15eb8@nxp.com> References: <20241001-i3c_dts_assign-v1-0-6ba83dc15eb8@nxp.com> <20241001-i3c_dts_assign-v1-2-6ba83dc15eb8@nxp.com> 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-20241002_004949_781684_A2193347 X-CRM114-Status: GOOD ( 37.02 ) 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 SGkgRnJhbmssCgpGcmFuay5MaUBueHAuY29tIHdyb3RlIG9uIFR1ZSwgMDEgT2N0IDIwMjQgMTM6 MDg6MjEgLTA0MDA6Cgo+IEV4dGVuZCB0aGUgYWRkcmVzcyBzdGF0dXMgYml0IHRvIDQgYW5kIGlu dHJvZHVjZSB0aGUgSTNDX0FERFJfU0xPVF9FWFRfSU5JVAo+IG1hY3JvIHRvIGluZGljYXRlIHRo YXQgYSBkZXZpY2UgcHJlZmVycyBhIHNwZWNpZmljIGFkZHJlc3MuIFRoaXMgaXMKPiBnZW5lcmFs bHkgc2V0IGJ5IHRoZSAnYXNzaWduZWQtYWRkcmVzcycgaW4gdGhlIGRldmljZSB0cmVlIHNvdXJj ZSAoZHRzKQo+IGZpbGUuCj4gCj4gIOKUjOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUrOKUgOKUgOKUgOKUkAo+ICDilIJTL1Ny4pSCIDcnaDdFIFJuVz0wIOKUgkFDS+KU giBFTlREQUEgIOKUgiBUIOKUnOKUgOKUgOKUgOKUgOKUkAo+ICDilJTilIDilIDilIDilIDilLTi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilLTilIDi lIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilJggICAg4pSCCj4gIOKUjOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUmAo+ICDilIIgIOKUjOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU kAo+ICDilJTilIDilrrilIJTcuKUgjcnaDdFIFJuVz0xICDilIJBQ0vilII0OGJpdCBVSUQgQkNS IERDUuKUgkFzc2lnbiA3Yml0IEFkZHLilIJQQVLilIIgQUNLL05BQ0vilIIKPiAgICAg4pSU4pSA 4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA 4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS0 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA 4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYCj4gCj4gU29tZSBtYXN0ZXIgY29u dHJvbGxlcnMgKHN1Y2ggYXMgSENJKSBuZWVkIHRvIHByZXBhcmUgdGhlIGVudGlyZSBhYm92ZQo+ IHRyYW5zYWN0aW9uIGJlZm9yZSBzZW5kaW5nIGl0IG91dCB0byB0aGUgSTNDIGJ1cy4gVGhpcyBt ZWFucyB0aGF0IGEgNy1iaXQKPiBkeW5hbWljIGFkZHJlc3MgbmVlZHMgdG8gYmUgYWxsb2NhdGVk IGJlZm9yZSBrbm93aW5nIHRoZSB0YXJnZXQgZGV2aWNlJ3MKPiBVSUQgaW5mb3JtYXRpb24uCj4g Cj4gSG93ZXZlciwgc29tZSBJM0MgdGFyZ2V0cyB3YW50IGEgc3BlY2lmaWMgYWRkcmVzcyAoY2Fs bGVkIGFzCj4gImluaXRfZHluX2FkZHIiKSwgd2hpY2ggaXMgdHlwaWNhbGx5IHNwZWNpZmllZCBi eSB0aGUgRFQncyBhc3NpZ25lZC1hZGRyZXNzCj4gcHJvcGVydHkuIChMb3dlciBhZGRyZXNzZXMg aGF2ZSBoaWdoZXIgSUJJIHByaW9yaXR5LCBhbmQgdGhlIHRhcmdldCBjYW4KPiBhZGp1c3QgdGhp cyBieSB1c2luZyB0aGUgYXNzaWduZWQtYWRkcmVzcyBwcm9wZXJ0eSBpZiB1c2luZyBEVCkuIFRo ZQo+IGZ1bmN0aW9uIGkzY19tYXN0ZXJfYWRkX2kzY19kZXZfbG9ja2VkKCkgd2lsbCBzd2l0Y2gg dG8gdGhpcwo+ICJpbml0X2R5bl9hZGRyIiBpZiBpdCBpcyBub3QgaW4gdXNlLgo+IAo+IFRoZXJl Zm9yZSwgaTNjX2J1c19nZXRfZnJlZV9hZGRyKCkgc2hvdWxkIHJldHVybiBhIGZyZWUgYWRkcmVz cyB0aGF0IGhhcwo+IG5vdCBiZWVuIGNsYWltZWQgYnkgYW55IHRhcmdldCBkZXZpY2VzIGFzICJp bml0X2R5bl9hZGRyIiAoaW5kaWNhdGVkIGJ5Cj4gSTNDX0FERFJfU0xPVF9FWFRfSU5JVCkuIFRo aXMgYWxsb3dzIHRoZSBkZXZpY2Ugd2l0aCB0aGUgImluaXRfZHluX2FkZHIiCj4gdG8gc3dpdGNo IHRvIGl0cyAiaW5pdF9keW5fYWRkciIgd2hlbiBpdCBob3Qtam9pbnMgdGhlIEkzQyBidXMuIE90 aGVyd2lzZSwKPiBpZiB0aGUgImluaXRfZHluX2FkZHIiIGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFu b3RoZXIgSTNDIGRldmljZSwgdGhlIHRhcmdldAo+IGRldmljZSB3aWxsIG5vdCBiZSBhYmxlIHRv IHN3aXRjaCB0byBpdHMgZGVzaXJlZCBhZGRyZXNzLgo+IAo+IElmIGFsbCBvZiBhYm92ZSBhZGRy ZXNzIGFyZSBhbHJlYWR5IHVzZWQsIGkzY19idXNfZ2V0X2ZyZWVfYWRkcigpIHJldHVybgo+IG9u ZSBmcm9tIHRoZSBjbGFpbWVkIGFzIGluaXRfZHluX2FkZHIgYW5kIGZyZWUgYWRkcmVzcyBzbG90 LiBUaGlzIGVuc3VyZXMKPiBzdXBwb3J0IGRldmljZXMgYXMgbXVjaCBhcyBwb3NzaWJsZS4KPiAK PiBTaWduZWQtb2ZmLWJ5OiBGcmFuayBMaSA8RnJhbmsuTGlAbnhwLmNvbT4KPiAtLS0KPiBjaGFu Z2UgZnJvbSB2MyB0byB2NAo+IC0gcmV3cml0ZSBjb21taXQgbWVzc2FnZSBhbmQgY29tbWVudCBm b3IgaTNjX2J1c19nZXRfZnJlZV9hZGRyKCkKPiAtLS0KPiAgZHJpdmVycy9pM2MvbWFzdGVyLmMg ICAgICAgfCA2OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0t Cj4gIGluY2x1ZGUvbGludXgvaTNjL21hc3Rlci5oIHwgIDcgKysrLS0KPiAgMiBmaWxlcyBjaGFu Z2VkLCA2NCBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9pM2MvbWFzdGVyLmMgYi9kcml2ZXJzL2kzYy9tYXN0ZXIuYwo+IGluZGV4IGRjZjhk MjNjNTk0MWEuLmE1NmNiMjgxZTZiNmQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9pM2MvbWFzdGVy LmMKPiArKysgYi9kcml2ZXJzL2kzYy9tYXN0ZXIuYwo+IEBAIC0zNDUsNyArMzQ1LDcgQEAgY29u c3Qgc3RydWN0IGJ1c190eXBlIGkzY19idXNfdHlwZSA9IHsKPiAgRVhQT1JUX1NZTUJPTF9HUEwo aTNjX2J1c190eXBlKTsKPiAgCj4gIHN0YXRpYyBlbnVtIGkzY19hZGRyX3Nsb3Rfc3RhdHVzCj4g LWkzY19idXNfZ2V0X2FkZHJfc2xvdF9zdGF0dXMoc3RydWN0IGkzY19idXMgKmJ1cywgdTE2IGFk ZHIpCj4gK2kzY19idXNfZ2V0X2FkZHJfc2xvdF9zdGF0dXNfZXh0KHN0cnVjdCBpM2NfYnVzICpi dXMsIHUxNiBhZGRyKQo+ICB7Cj4gIAl1bnNpZ25lZCBsb25nIHN0YXR1czsKPiAgCWludCBiaXRw b3MgPSBhZGRyICogSTNDX0FERFJfU0xPVF9TVEFUVVNfQklUUzsKPiBAQCAtMzU2LDExICszNTYs MTcgQEAgaTNjX2J1c19nZXRfYWRkcl9zbG90X3N0YXR1cyhzdHJ1Y3QgaTNjX2J1cyAqYnVzLCB1 MTYgYWRkcikKPiAgCXN0YXR1cyA9IGJ1cy0+YWRkcnNsb3RzW2JpdHBvcyAvIEJJVFNfUEVSX0xP TkddOwo+ICAJc3RhdHVzID4+PSBiaXRwb3MgJSBCSVRTX1BFUl9MT05HOwo+ICAKPiAtCXJldHVy biBzdGF0dXMgJiBJM0NfQUREUl9TTE9UX1NUQVRVU19NQVNLOwo+ICsJcmV0dXJuIHN0YXR1cyAm IEkzQ19BRERSX1NMT1RfRVhUX1NUQVRVU19NQVNLOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBp M2NfYnVzX3NldF9hZGRyX3Nsb3Rfc3RhdHVzKHN0cnVjdCBpM2NfYnVzICpidXMsIHUxNiBhZGRy LAo+IC0JCQkJCSBlbnVtIGkzY19hZGRyX3Nsb3Rfc3RhdHVzIHN0YXR1cykKPiArc3RhdGljIGVu dW0gaTNjX2FkZHJfc2xvdF9zdGF0dXMKPiAraTNjX2J1c19nZXRfYWRkcl9zbG90X3N0YXR1cyhz dHJ1Y3QgaTNjX2J1cyAqYnVzLCB1MTYgYWRkcikKPiArewo+ICsJcmV0dXJuIGkzY19idXNfZ2V0 X2FkZHJfc2xvdF9zdGF0dXNfZXh0KGJ1cywgYWRkcikgJiBJM0NfQUREUl9TTE9UX1NUQVRVU19N QVNLOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpM2NfYnVzX3NldF9hZGRyX3Nsb3Rfc3RhdHVz X21hc2soc3RydWN0IGkzY19idXMgKmJ1cywgdTE2IGFkZHIsCj4gKwkJCQkJICAgICAgZW51bSBp M2NfYWRkcl9zbG90X3N0YXR1cyBzdGF0dXMsIGludCBtYXNrKQo+ICB7Cj4gIAlpbnQgYml0cG9z ID0gYWRkciAqIEkzQ19BRERSX1NMT1RfU1RBVFVTX0JJVFM7Cj4gIAl1bnNpZ25lZCBsb25nICpw dHI7Cj4gQEAgLTM2OSwxMSArMzc1LDIyIEBAIHN0YXRpYyB2b2lkIGkzY19idXNfc2V0X2FkZHJf c2xvdF9zdGF0dXMoc3RydWN0IGkzY19idXMgKmJ1cywgdTE2IGFkZHIsCj4gIAkJcmV0dXJuOwo+ ICAKPiAgCXB0ciA9IGJ1cy0+YWRkcnNsb3RzICsgKGJpdHBvcyAvIEJJVFNfUEVSX0xPTkcpOwo+ IC0JKnB0ciAmPSB+KCh1bnNpZ25lZCBsb25nKUkzQ19BRERSX1NMT1RfU1RBVFVTX01BU0sgPDwK PiAtCQkJCQkJKGJpdHBvcyAlIEJJVFNfUEVSX0xPTkcpKTsKPiArCSpwdHIgJj0gfigodW5zaWdu ZWQgbG9uZyltYXNrIDw8IChiaXRwb3MgJSBCSVRTX1BFUl9MT05HKSk7Cj4gIAkqcHRyIHw9ICh1 bnNpZ25lZCBsb25nKXN0YXR1cyA8PCAoYml0cG9zICUgQklUU19QRVJfTE9ORyk7Cj4gIH0KPiAg Cj4gK3N0YXRpYyB2b2lkIGkzY19idXNfc2V0X2FkZHJfc2xvdF9zdGF0dXMoc3RydWN0IGkzY19i dXMgKmJ1cywgdTE2IGFkZHIsCj4gKwkJCQkJIGVudW0gaTNjX2FkZHJfc2xvdF9zdGF0dXMgc3Rh dHVzKQo+ICt7Cj4gKwlpM2NfYnVzX3NldF9hZGRyX3Nsb3Rfc3RhdHVzX21hc2soYnVzLCBhZGRy LCBzdGF0dXMsIEkzQ19BRERSX1NMT1RfU1RBVFVTX01BU0spOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBpM2NfYnVzX3NldF9hZGRyX3Nsb3Rfc3RhdHVzX2V4dChzdHJ1Y3QgaTNjX2J1cyAqYnVz LCB1MTYgYWRkciwKPiArCQkJCQkgICAgIGVudW0gaTNjX2FkZHJfc2xvdF9zdGF0dXMgc3RhdHVz KQo+ICt7Cj4gKwlpM2NfYnVzX3NldF9hZGRyX3Nsb3Rfc3RhdHVzX21hc2soYnVzLCBhZGRyLCBz dGF0dXMsIEkzQ19BRERSX1NMT1RfRVhUX1NUQVRVU19NQVNLKTsKPiArfQoKQ2FuIHdlIGRyb3Ag dGhpcyBoZWxwZXIgYW5kIGluc3RlYWQgbW9kaWZ5IHRoZQppM2NfYnVzX3NldF9hZGRyX3Nsb3Rf c3RhdHVzKCkgcHJvdG90eXBlIHRvIGdldCB0aGUgbWFzayBmcm9tIGl0cwpwYXJhbWV0ZXJzPyAK Cj4gKwo+ICBzdGF0aWMgYm9vbCBpM2NfYnVzX2Rldl9hZGRyX2lzX2F2YWlsKHN0cnVjdCBpM2Nf YnVzICpidXMsIHU4IGFkZHIpCj4gIHsKPiAgCWVudW0gaTNjX2FkZHJfc2xvdF9zdGF0dXMgc3Rh dHVzOwo+IEBAIC0zODMsMTEgKzQwMCw0NCBAQCBzdGF0aWMgYm9vbCBpM2NfYnVzX2Rldl9hZGRy X2lzX2F2YWlsKHN0cnVjdCBpM2NfYnVzICpidXMsIHU4IGFkZHIpCj4gIAlyZXR1cm4gc3RhdHVz ID09IEkzQ19BRERSX1NMT1RfRlJFRTsKPiAgfQo+ICAKPiArLyoKPiArICog4pSM4pSA4pSA4pSA 4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA 4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSQCj4gKyAqIOKUglMv U3LilIIgNydoN0UgUm5XPTAg4pSCQUNL4pSCIEVOVERBQSAg4pSCIFQg4pSc4pSA4pSA4pSA4pSA 4pSQCj4gKyAqIOKUlOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKU gOKUgOKUgOKUmCAgICDilIIKPiArICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYCj4gKyAqIOKUgiAg4pSM4pSA 4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA 4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA 4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQCj4gKyAqIOKUlOKUgOKWuuKUglNy 4pSCNydoN0UgUm5XPTEgIOKUgkFDS+KUgjQ4Yml0IFVJRCBCQ1IgRENS4pSCQXNzaWduIDdiaXQg QWRkcuKUglBBUuKUgiBBQ0svTkFDS+KUggo+ICsgKiAgICDilJTilIDilIDilLTilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilLTilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilLTilIDilIDilIDi lIDilIDilIDilIDilIDilIDilJgKPiArICogU29tZSBtYXN0ZXIgY29udHJvbGxlcnMgKHN1Y2gg YXMgSENJKSBuZWVkIHRvIHByZXBhcmUgdGhlIGVudGlyZSBhYm92ZSB0cmFuc2FjdGlvbiBiZWZv cmUKPiArICogc2VuZGluZyBpdCBvdXQgdG8gdGhlIEkzQyBidXMuIFRoaXMgbWVhbnMgdGhhdCBh IDctYml0IGR5bmFtaWMgYWRkcmVzcyBuZWVkcyB0byBiZSBhbGxvY2F0ZWQKPiArICogYmVmb3Jl IGtub3dpbmcgdGhlIHRhcmdldCBkZXZpY2UncyBVSUQgaW5mb3JtYXRpb24uCj4gKyAqCj4gKyAq IEhvd2V2ZXIsIHNvbWUgSTNDIHRhcmdldHMgd2FudCBhIHNwZWNpZmljIGFkZHJlc3MgKGNhbGxl ZCBhcyAiaW5pdF9keW5fYWRkciIpLCB3aGljaCBpcwoKCQkJCW1heSByZXF1ZXN0IHNwZWNpZmlj IGFkZHJlc3NlcyAoY2FsbGVkICJpbml0Li4uCgo+ICsgKiB0eXBpY2FsbHkgc3BlY2lmaWVkIGJ5 IHRoZSBEVCdzIGFzc2lnbmVkLWFkZHJlc3MgcHJvcGVydHkuIChMb3dlciBhZGRyZXNzZXMgaGF2 ZSBoaWdoZXIgSUJJCgoJCQkJICAgLSdzCgo+ICsgKiBwcmlvcml0eSwgYW5kIHRoZSB0YXJnZXQg Y2FuIGFkanVzdCB0aGlzIGJ5IHVzaW5nIHRoZSBhc3NpZ25lZC1hZGRyZXNzIHByb3BlcnR5IGlm IHVzaW5nIERUKS4KCkNhbiB3ZSByZW1vdmUgdGhlIHdob2xlICIoIC4uLiApIiBzZW50ZW5jZSwg YW5kIHJlcGxhY2UgaXQgd2l0aDoKCgkiLi4uIHByb3BlcnR5LCBsb3dlciBhZGRyZXNzZXMgaGF2 aW5nIGhpZ2hlciBJQkkgcHJpb3JpdHkuIgoKPiArICogVGhlIGZ1bmN0aW9uIGkzY19tYXN0ZXJf YWRkX2kzY19kZXZfbG9ja2VkKCkgd2lsbCBzd2l0Y2ggdG8gdGhpcyAiaW5pdF9keW5fYWRkciIg aWYgaXQgaXMgbm90Cj4gKyAqIGluIHVzZS4KCglpZiBpdCBpcyBhdmFpbGFibGUuCgo+ICsgKgo+ ICsgKiBUaGVyZWZvcmUsIGkzY19idXNfZ2V0X2ZyZWVfYWRkcigpIHNob3VsZCByZXR1cm4gYSBm cmVlIGFkZHJlc3MgdGhhdCBoYXMgbm90IGJlZW4gY2xhaW1lZCBieSBhbnkKCgkJCQkJcHJlZmVy YWJseSByZXR1cm4KCgl0aGF0IGlzIG5vdCBpbiB0aGUgbGlzdCBvZiBkZXNpcmVkIGFkZHJlc3Nl cy4KCj4gKyAqIHRhcmdldCBkZXZpY2VzIGFzICJpbml0X2R5bl9hZGRyIi4gVGhpcyBhbGxvd3Mg dGhlIGRldmljZSB3aXRoIHRoZSAiaW5pdF9keW5fYWRkciIgdG8gc3dpdGNoIHRvCj4gKyAqIGl0 cyAiaW5pdF9keW5fYWRkciIgd2hlbiBpdCBob3Qtam9pbnMgdGhlIEkzQyBidXMuIE90aGVyd2lz ZSwgaWYgdGhlICJpbml0X2R5bl9hZGRyIiBpcyBhbHJlYWR5Cj4gKyAqIGluIHVzZSBieSBhbm90 aGVyIEkzQyBkZXZpY2UsIHRoZSB0YXJnZXQgZGV2aWNlIHdpbGwgbm90IGJlIGFibGUgdG8gc3dp dGNoIHRvIGl0cyBkZXNpcmVkCj4gKyAqIGFkZHJlc3MuCj4gKyAqCj4gKyAqIElmIGFsbCBvZiBh Ym92ZSBhZGRyZXNzIGFyZSBhbHJlYWR5IHVzZWQsIGkzY19idXNfZ2V0X2ZyZWVfYWRkcigpIHJl dHVybiBvbmUgZnJvbSB0aGUgY2xhaW1lZCBhcwo+ICsgKiBpbml0X2R5bl9hZGRyIGFuZCBmcmVl IGFkZHJlc3Mgc2xvdC4gVGhpcyBlbnN1cmVzIHN1cHBvcnQgZGV2aWNlcyBhcyBtdWNoIGFzIHBv c3NpYmxlLgoKSWYgdGhlIHByZXZpb3VzIHN0ZXAgZmFpbHMsIGZhbGxiYWNrIHJldHVybmluZyBv bmUgb2YgdGhlIHJlbWFpbmluZwp1bmFzc2lnbmVkIGFkZHJlc3MsIHJlZ2FyZGxlc3Mgb2YgaXRz IHN0YXRlIGluIHRoZSBkZXNpcmVkIGxpc3QuCgo+ICsgKi8KClBsZWFzZSB1cGRhdGUgeW91ciBj b21taXQgbWVzc2FnZSBhcyB3ZWxsIHdpdGggdGhlc2UgY2hhbmdlcy4KCj4gIHN0YXRpYyBpbnQg aTNjX2J1c19nZXRfZnJlZV9hZGRyKHN0cnVjdCBpM2NfYnVzICpidXMsIHU4IHN0YXJ0X2FkZHIp Cj4gIHsKPiAgCWVudW0gaTNjX2FkZHJfc2xvdF9zdGF0dXMgc3RhdHVzOwo+ICAJdTggYWRkcjsK PiAgCj4gKwlmb3IgKGFkZHIgPSBzdGFydF9hZGRyOyBhZGRyIDwgSTNDX01BWF9BRERSOyBhZGRy KyspIHsKPiArCQlzdGF0dXMgPSBpM2NfYnVzX2dldF9hZGRyX3Nsb3Rfc3RhdHVzX2V4dChidXMs IGFkZHIpOwoKU28gaGVyZSBpdCBjb3VsZCBsb29rIGxpa2U6CgoJCXN0YXR1cyA9IC4uLmdldF9h ZGRyX3Nsb3Rfc3RhdHVzKGJ1cywgYWRkciwgPGV4dGVuZGVkPikKCj4gKwkJaWYgKHN0YXR1cyA9 PSBJM0NfQUREUl9TTE9UX0ZSRUUpCj4gKwkJCXJldHVybiBhZGRyOwo+ICsJfQo+ICsKPiAgCWZv ciAoYWRkciA9IHN0YXJ0X2FkZHI7IGFkZHIgPCBJM0NfTUFYX0FERFI7IGFkZHIrKykgewo+ICAJ CXN0YXR1cyA9IGkzY19idXNfZ2V0X2FkZHJfc2xvdF9zdGF0dXMoYnVzLCBhZGRyKTsKPiAgCQlp ZiAoc3RhdHVzID09IEkzQ19BRERSX1NMT1RfRlJFRSkKPiBAQCAtMTkxOCw5ICsxOTY4LDkgQEAg c3RhdGljIGludCBpM2NfbWFzdGVyX2J1c19pbml0KHN0cnVjdCBpM2NfbWFzdGVyX2NvbnRyb2xs ZXIgKm1hc3RlcikKPiAgCQkJZ290byBlcnJfcnN0ZGFhOwo+ICAJCX0KPiAgCj4gLQkJaTNjX2J1 c19zZXRfYWRkcl9zbG90X3N0YXR1cygmbWFzdGVyLT5idXMsCj4gLQkJCQkJICAgICBpM2Nib2Fy ZGluZm8tPmluaXRfZHluX2FkZHIsCj4gLQkJCQkJICAgICBJM0NfQUREUl9TTE9UX0kzQ19ERVYp Owo+ICsJCWkzY19idXNfc2V0X2FkZHJfc2xvdF9zdGF0dXNfZXh0KCZtYXN0ZXItPmJ1cywKPiAr CQkJCQkJIGkzY2JvYXJkaW5mby0+aW5pdF9keW5fYWRkciwKPiArCQkJCQkJIEkzQ19BRERSX1NM T1RfSTNDX0RFViB8IEkzQ19BRERSX1NMT1RfRVhUX0lOSVQpOwo+ICAKPiAgCQkvKgo+ICAJCSAq IE9ubHkgdHJ5IHRvIGNyZWF0ZS9hdHRhY2ggZGV2aWNlcyB0aGF0IGhhdmUgYSBzdGF0aWMKPiBk aWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pM2MvbWFzdGVyLmggYi9pbmNsdWRlL2xpbnV4L2kz Yy9tYXN0ZXIuaAo+IGluZGV4IDIxMDA1NDdiMmQ4ZDIuLjU3YWQ2MDQ0YWM4NTYgMTAwNjQ0Cj4g LS0tIGEvaW5jbHVkZS9saW51eC9pM2MvbWFzdGVyLmgKPiArKysgYi9pbmNsdWRlL2xpbnV4L2kz Yy9tYXN0ZXIuaAo+IEBAIC0yOTgsNyArMjk4LDggQEAgZW51bSBpM2Nfb3Blbl9kcmFpbl9zcGVl ZCB7Cj4gICAqIEBJM0NfQUREUl9TTE9UX0kyQ19ERVY6IGFkZHJlc3MgaXMgYXNzaWduZWQgdG8g YW4gSTJDIGRldmljZQo+ICAgKiBASTNDX0FERFJfU0xPVF9JM0NfREVWOiBhZGRyZXNzIGlzIGFz c2lnbmVkIHRvIGFuIEkzQyBkZXZpY2UKPiAgICogQEkzQ19BRERSX1NMT1RfU1RBVFVTX01BU0s6 IGFkZHJlc3Mgc2xvdCBtYXNrCj4gLSAqCj4gKyAqIEBJM0NfQUREUl9TTE9UX0VYVF9JTklUOiB0 aGUgYml0bWFzayByZXByZXNlbnRzIGFkZHJlc3NlcyB0aGF0IGFyZSBwcmVmZXJyZWQgYnkgc29t ZSBkZXZpY2VzLAo+ICsgKgkJCSAgICBzdWNoIGFzIHRoZSAiYXNzaWduZWQtYWRkcmVzcyIgcHJv cGVydHkgaW4gYSBkZXZpY2UgdHJlZSBzb3VyY2UgKERUUykuCgpUaGUgbmFtaW5nIGNvdWxkIGJl IGltcHJvdmVkLCBiZWNhdXNlICJleHRlbmRlZCIgZG9lcyBub3QgbWVhbiBtdWNoLiBJCmJlbGll dmUgd2Ugc2hvdWxkIGV4cHJlc3MgdGhlIGZhY3QgdGhhdCB0aGlzIGlzIGEgZGVzaXJlZCBhZGRy ZXNzZWQsIHNvCndoYXQgYWJvdXQ6CgoJSTNDX0FERFJfU0xPVF9JM0NfQVNTSUdORUQvREVTSVJF RAoKPiAgICogT24gYW4gSTNDIGJ1cywgYWRkcmVzc2VzIGFyZSBhc3NpZ25lZCBkeW5hbWljYWxs eSwgYW5kIHdlIG5lZWQgdG8ga25vdyB3aGljaAo+ICAgKiBhZGRyZXNzZXMgYXJlIGZyZWUgdG8g dXNlIGFuZCB3aGljaCBvbmVzIGFyZSBhbHJlYWR5IGFzc2lnbmVkLgo+ICAgKgo+IEBAIC0zMTEs OSArMzEyLDExIEBAIGVudW0gaTNjX2FkZHJfc2xvdF9zdGF0dXMgewo+ICAJSTNDX0FERFJfU0xP VF9JMkNfREVWLAo+ICAJSTNDX0FERFJfU0xPVF9JM0NfREVWLAo+ICAJSTNDX0FERFJfU0xPVF9T VEFUVVNfTUFTSyA9IDMsCj4gKwlJM0NfQUREUl9TTE9UX0VYVF9TVEFUVVNfTUFTSyA9IDcsCj4g KwlJM0NfQUREUl9TTE9UX0VYVF9JTklUID0gQklUKDIpLAo+ICB9Owo+ICAKPiAtI2RlZmluZSBJ M0NfQUREUl9TTE9UX1NUQVRVU19CSVRTIDIKPiArI2RlZmluZSBJM0NfQUREUl9TTE9UX1NUQVRV U19CSVRTIDQKPiAgCj4gIC8qKgo+ICAgKiBzdHJ1Y3QgaTNjX2J1cyAtIEkzQyBidXMgb2JqZWN0 Cj4gCgoKVGhhbmtzLApNaXF1w6hsCgotLSAKbGludXgtaTNjIG1haWxpbmcgbGlzdApsaW51eC1p M2NAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2xpbnV4LWkzYwo=