On mardi 25 février 2025 12:39:37 heure normale d’Europe centrale Cosmin Tanislav wrote: > Some I2C ATRs can have other I2C ATRs as children. The I2C messages of > the child ATRs need to be forwarded as-is if the parent I2C ATR can > only do static mapping. > > In the case of GMSL, the deserializer I2C ATR actually doesn't have I2C > address remapping hardware capabilities, but it is able to select which > GMSL link to talk to, allowing it to change the address of the > serializer. > > The child ATRs need to have their alias pools defined in such a way to > prevent overlapping addresses between them, but there's no way around > this without orchestration between multiple ATR instances. > > To allow for this use-case, add a flag that allows unmapped addresses > to be passed through, since they are already remapped by the child ATRs. > > There's no case where an address that has not been remapped by the child > ATR will hit the parent ATR. > > Signed-off-by: Cosmin Tanislav <demonsingur@xxxxxxxxx> > --- > drivers/i2c/i2c-atr.c | 3 +++ > include/linux/i2c-atr.h | 2 ++ > 2 files changed, 5 insertions(+) > > diff --git a/drivers/i2c/i2c-atr.c b/drivers/i2c/i2c-atr.c > index f7b853f55630..1986fa055f20 100644 > --- a/drivers/i2c/i2c-atr.c > +++ b/drivers/i2c/i2c-atr.c > @@ -394,6 +394,9 @@ static int i2c_atr_map_msgs(struct i2c_atr_chan *chan, > struct i2c_msg *msgs, c2a = i2c_atr_get_mapping_by_addr(chan, > msgs[i].addr); > > if (!c2a) { > + if (atr->flags & I2C_ATR_PASSTHROUGH) > + continue; Shouldn't this check also be added to i2c_atr_smbus_xfer? > + > dev_err(atr->dev, "client 0x%02x not mapped!\n", > msgs[i].addr); > > diff --git a/include/linux/i2c-atr.h b/include/linux/i2c-atr.h > index 2f79d0d9140f..b3797a930a7a 100644 > --- a/include/linux/i2c-atr.h > +++ b/include/linux/i2c-atr.h > @@ -22,9 +22,11 @@ struct i2c_atr; > * enum i2c_atr_flags - Flags for an I2C ATR driver > * > * @I2C_ATR_STATIC: ATR does not support dynamic mapping, use static > mapping + * @I2C_ATR_PASSTHROUGH: Allow unmapped incoming addresses to pass > through */ > enum i2c_atr_flags { > I2C_ATR_STATIC = BIT(0), > + I2C_ATR_PASSTHROUGH = BIT(1), As stated for the previous patch, I'd prefer the "I2C_ATR_F_*" naming convention. Thanks, -- Romain Gantois, Bootlin Embedded Linux and Kernel engineering https://bootlin.com
Attachment:
signature.asc
Description: This is a digitally signed message part.