From patchwork Mon Apr 28 10:25:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 885928 Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B893525F79E; Mon, 28 Apr 2025 10:25:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745835928; cv=none; b=DDdYR6PyuOc+ISK4JO8Q8kTi4fXWAHq4VD2AU26vxgOIJ+1prgqeFpIEOBAQW6T9h1+sNXs+WObbPlKElFKF8perR80JysuX4V2ul0gPzh3fWfRy+SmwAU9GdOU2i26dL48i3ls/i8+/AQKpGbqE1fnWSvDSC4v+9HxUVbnRnA4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745835928; c=relaxed/simple; bh=bciEHnVMQN7n9pavQjzBCHpZ3C4ZJHjeMR7GkAtGHHc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cD3o82T3zFCU4xOzHuz2hz6Lh7wI/HWYGdNGE/GMo8FMmlr3ajP4wR70ICI7oHaSkufcWyyrAiiD1FzIrCVGfp4HOUxj+oyHx4ycvdyfXDcX25kAAXVCTNMLDMOuE8XOVXua84GxesG5eJRT+aBqNFl0MKtJcmB4dKJN9lbYK7M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=QW4KEXGp; arc=none smtp.client-ip=209.85.221.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QW4KEXGp" Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-3913d129c1aso3015093f8f.0; Mon, 28 Apr 2025 03:25:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745835925; x=1746440725; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=CTziXyJk1+6IcSQIq/asb7LXfhFB4YPpQUcFiP0m77E=; b=QW4KEXGphOWuH+Qvk6UaxAiTWQ5Sf7MP84OeLaqo4Al69E6mLU4rF7liDWITpyaaJI FXdUdje8iGXV/d3ZbEB+3BTxT8sUlhQt5702SIixRjj1bFnanouN1mm909+2bfOCECvS xbufYo7a3CMDa3emSAMOivcjY+wXW0wAWK3z816F57kkSBrcmG4hfn8Cqxji2IV3iLVl jcihtoj4KL+8DGNT6MZCHSXtIatRDhcAHglQFcjbQdclKDhekW+dHpXYbIqn9fwtGuIk WP4s7sppaj5Rbuk39oDRg//yH/2O5PfxBQiWPDeZHquC0CEp3MH+CPaWz6JWoi92stv+ MtPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745835925; x=1746440725; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CTziXyJk1+6IcSQIq/asb7LXfhFB4YPpQUcFiP0m77E=; b=i0fFoWQDmnKyBvTbExboAKtC8vhJRaK6POkMGUbGXp8TNy5+GKpzF0JdirRx7fRYZs G2+hYSPRzAmOsVN4MXXLFiSz5VogMnmxbu3ahW+YTdmaVA2PRipjmkOSGQpokNknfUuA AJv71gsEYj7MMwYIovB4L99en6z8MnJi6hsnEPwD+CSfL+FAvQ1LkFli1XaFH0yfszHx I4dPwfmcDDqjp2ZzKjqR/cH59Wy400cfzr8RRm6j029JXHTns8XQwSMVXeTcus+ao97Q 9DLga7WDwJqA1jQSxv0ooEsMqSXfRhGWp8Jet8aE2nTLYgqfChpRP51dQncTtfeQOjL6 PJqQ== X-Forwarded-Encrypted: i=1; AJvYcCVt6vKBC8MWMXGwLGiLuwe6Z0MZBhf0vNH/8g6pHk1f76ISRY7htRIyZk9R6ZY4yuH3Q8kG7WiMUyB1Vho=@vger.kernel.org, AJvYcCXgcMFkRtEG8BxVrvc4bj57yoIB5Ze7MYUTGxQ+Qzt40/etHxMuqRXgoJMSw28ypCSccmj0Bh8QAcZc0fdi@vger.kernel.org, AJvYcCXqF4f/gbLohP93n555nploNowRvrfUyRbbbO+ofGcXWqJU9kMHHcD1l7aJGtSygOivYcd2aDhUvN0=@vger.kernel.org X-Gm-Message-State: AOJu0Ywn9EY9ecfqa6oJRZyPIMTdudwZmP0x4FosNFEvI5z8iLE10fV/ imI7pX2vYmQHuTXcPmYWtRjQ7kKM2W5Tdw60cluiRoCIy/nex3+8 X-Gm-Gg: ASbGncsPPUWNDwiZJtGIVRgUhJcg1SKeHN7cNhFcadCiJGfkPQoardcKfmZyPadzjHf OJSQFPJyf7hSNGpdTax9GD5U28P9v/g7uUL+yNSaxy/tLIiRha6OoLJnxj+P841BaIJChbzosHh xf2nIHEzCMKyURnQNs2/h4qOEHT10/yqJDLq1HaW0fEZhDnoKy1vlagpgpMBgsIUlBtf8hLf9ER wFeri+VlY1c40l1umaivukNsHy4Up4AawSuUj3VxR7I/ZiY/3q+r+eiO36LDeQ98+xjUFNmagpe 0Oj0Lo6a5jnYRB0E4XJDNCpNG7uulVx4U/43Ocy52lTvMhrsTHN2M5y7qyhR0MM= X-Google-Smtp-Source: AGHT+IGZRXorP+lkjBsTVAdqlnlmu7ZShKy4h6drsX/BP0ENqCmZxQoYonme6qDNDTmXnznvRM4L3A== X-Received: by 2002:a05:6000:188f:b0:39c:1258:d12c with SMTP id ffacd0b85a97d-3a06d6ffd55mr11140676f8f.28.1745835924724; Mon, 28 Apr 2025 03:25:24 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-440a5310ad2sm118825295e9.21.2025.04.28.03.25.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Apr 2025 03:25:24 -0700 (PDT) From: Cosmin Tanislav To: Cc: Tomi Valkeinen , Luca Ceresoli , Wolfram Sang , Mauro Carvalho Chehab , Romain Gantois , Arnd Bergmann , Greg Kroah-Hartman , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, Tomi Valkeinen Subject: [PATCH v4 1/9] i2c: atr: Fix lockdep for nested ATRs Date: Mon, 28 Apr 2025 13:25:06 +0300 Message-ID: <20250428102516.933571-2-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250428102516.933571-1-demonsingur@gmail.com> References: <20250428102516.933571-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-i2c@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Tomi Valkeinen When we have an ATR, and another ATR as a subdevice of the first ATR, we get lockdep warnings for the i2c_atr.lock and i2c_atr_chan.orig_addrs_lock. This is because lockdep uses a static key for the locks, and doesn't see the locks of the separate ATR instances as separate. Fix this by generating a dynamic lock key per lock instance. Signed-off-by: Tomi Valkeinen Reviewed-by: Luca Ceresoli --- drivers/i2c/i2c-atr.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/drivers/i2c/i2c-atr.c b/drivers/i2c/i2c-atr.c index 1aeaecacc26c..a79ca87e8bbd 100644 --- a/drivers/i2c/i2c-atr.c +++ b/drivers/i2c/i2c-atr.c @@ -68,11 +68,13 @@ struct i2c_atr_alias_pool { * @atr: The parent I2C ATR * @chan_id: The ID of this channel * @alias_pairs_lock: Mutex protecting @alias_pairs + * @alias_pairs_lock_key: Lock key for @alias_pairs_lock * @alias_pairs: List of @struct i2c_atr_alias_pair containing the * assigned aliases * @alias_pool: Pool of available client aliases * * @orig_addrs_lock: Mutex protecting @orig_addrs + * @orig_addrs_lock_key: Lock key for @orig_addrs_lock * @orig_addrs: Buffer used to store the original addresses during transmit * @orig_addrs_size: Size of @orig_addrs */ @@ -83,11 +85,13 @@ struct i2c_atr_chan { /* Lock alias_pairs during attach/detach */ struct mutex alias_pairs_lock; + struct lock_class_key alias_pairs_lock_key; struct list_head alias_pairs; struct i2c_atr_alias_pool *alias_pool; /* Lock orig_addrs during xfer */ struct mutex orig_addrs_lock; + struct lock_class_key orig_addrs_lock_key; u16 *orig_addrs; unsigned int orig_addrs_size; }; @@ -100,6 +104,7 @@ struct i2c_atr_chan { * @priv: Private driver data, set with i2c_atr_set_driver_data() * @algo: The &struct i2c_algorithm for adapters * @lock: Lock for the I2C bus segment (see &struct i2c_lock_operations) + * @lock_key: Lock key for @lock * @max_adapters: Maximum number of adapters this I2C ATR can have * @alias_pool: Optional common pool of available client aliases * @i2c_nb: Notifier for remote client add & del events @@ -115,6 +120,7 @@ struct i2c_atr { struct i2c_algorithm algo; /* lock for the I2C bus segment (see struct i2c_lock_operations) */ struct mutex lock; + struct lock_class_key lock_key; int max_adapters; struct i2c_atr_alias_pool *alias_pool; @@ -683,7 +689,8 @@ struct i2c_atr *i2c_atr_new(struct i2c_adapter *parent, struct device *dev, if (!atr) return ERR_PTR(-ENOMEM); - mutex_init(&atr->lock); + lockdep_register_key(&atr->lock_key); + mutex_init_with_key(&atr->lock, &atr->lock_key); atr->parent = parent; atr->dev = dev; @@ -711,6 +718,7 @@ struct i2c_atr *i2c_atr_new(struct i2c_adapter *parent, struct device *dev, i2c_atr_free_alias_pool(atr->alias_pool); err_destroy_mutex: mutex_destroy(&atr->lock); + lockdep_unregister_key(&atr->lock_key); kfree(atr); return ERR_PTR(ret); @@ -727,6 +735,7 @@ void i2c_atr_delete(struct i2c_atr *atr) bus_unregister_notifier(&i2c_bus_type, &atr->i2c_nb); i2c_atr_free_alias_pool(atr->alias_pool); mutex_destroy(&atr->lock); + lockdep_unregister_key(&atr->lock_key); kfree(atr); } EXPORT_SYMBOL_NS_GPL(i2c_atr_delete, "I2C_ATR"); @@ -761,8 +770,10 @@ int i2c_atr_add_adapter(struct i2c_atr *atr, struct i2c_atr_adap_desc *desc) chan->atr = atr; chan->chan_id = chan_id; INIT_LIST_HEAD(&chan->alias_pairs); - mutex_init(&chan->alias_pairs_lock); - mutex_init(&chan->orig_addrs_lock); + lockdep_register_key(&chan->alias_pairs_lock_key); + lockdep_register_key(&chan->orig_addrs_lock_key); + mutex_init_with_key(&chan->alias_pairs_lock, &chan->alias_pairs_lock_key); + mutex_init_with_key(&chan->orig_addrs_lock, &chan->orig_addrs_lock_key); snprintf(chan->adap.name, sizeof(chan->adap.name), "i2c-%d-atr-%d", i2c_adapter_id(parent), chan_id); @@ -839,6 +850,8 @@ int i2c_atr_add_adapter(struct i2c_atr *atr, struct i2c_atr_adap_desc *desc) fwnode_handle_put(dev_fwnode(&chan->adap.dev)); mutex_destroy(&chan->orig_addrs_lock); mutex_destroy(&chan->alias_pairs_lock); + lockdep_unregister_key(&chan->orig_addrs_lock_key); + lockdep_unregister_key(&chan->alias_pairs_lock_key); kfree(chan); return ret; } @@ -876,6 +889,8 @@ void i2c_atr_del_adapter(struct i2c_atr *atr, u32 chan_id) fwnode_handle_put(fwnode); mutex_destroy(&chan->orig_addrs_lock); mutex_destroy(&chan->alias_pairs_lock); + lockdep_unregister_key(&chan->orig_addrs_lock_key); + lockdep_unregister_key(&chan->alias_pairs_lock_key); kfree(chan->orig_addrs); kfree(chan); } From patchwork Mon Apr 28 10:25:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 885605 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1D27426159B; Mon, 28 Apr 2025 10:25:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745835930; cv=none; b=LchptBlsqgPg+mhmIUCU8xQP+bYb+u09BVaYaWtPY0jrlKZqXruT6nf3vfZk9jyDiVICrcGssQNZd8A/mW6Z74naV2lLtgFsiRf5TLymyoELSDB6wV9Xikno2yHwVrvZW9UuVWk8FsKtxYT1Znplf372XltuexJOUTUk5SJ0/P8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745835930; c=relaxed/simple; bh=+AQ0SV4y9SOynEjrUKoCWXryMwMdnBPwBDQOwExX91w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LzUWFw2Nd4Q6gJsS8ttbmAq4uKNbcb2ebC+RSrbnQPrj5fmPW82lsQDr1ntXmNmWYt2pgqkBATwu6Qj2KKGJjNDGGYBz25ZPCX+hHaAB0NXf2nAp+SJ4LbCoNryYsWHYmryui3XS/8wWFT/dKDukPW2GPp6oIa9jj2ji48EQjiA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=AvpAt4pj; arc=none smtp.client-ip=209.85.128.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AvpAt4pj" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-43d0618746bso33051265e9.2; Mon, 28 Apr 2025 03:25:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745835927; x=1746440727; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=64HdmDgSJzT3obYsv1Sc9fPDQRvmKtwbW3ohFuTxJ+w=; b=AvpAt4pjSw8bjkRZ+sFacm0tJsAw7WKvlmYJkM6hfkgK8WiQTy46TluXYFXT/rsDti ZwA1SG+UHlH520BnDQ/WSrXmH99lmObdvafzrmN0a4pip22RDgNeCgVSKvc/xupo6WQo uAyGv7UQbqU9bFENSK6tIuKzkM2NFkRzxYZBmIMeoevITUBTiBpcSgdLvdjTI98cFuqh et37rPZh+z/e8EaSkDUwsUK1reOxtkzqcFQ8CNYGGdLQYu+X5MM7faEpEUdXZk6sxrZA 6d+5M71kjpboo7ZAaqdcZxnEkOe5wJzi0GPXeZwJiEpxHpHP2rAaethfdtnhhmFq4a8g mNRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745835927; x=1746440727; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=64HdmDgSJzT3obYsv1Sc9fPDQRvmKtwbW3ohFuTxJ+w=; b=OAFtccmSsIuqCobIpqupQfw80vZ4dyraSRI+MHcXHX/AkroB92bojT8XhkIy8kVJuC WLows3c4ZpBCdiF9MHKHYFOvVOMZmBJByVLzqj/wUSSfZ8VukZIl/b/SMYes7CeWqdws ZTwSBGs+G+5TSahd/0Ryrh28o1FWCg/Rf8lBfDLyA3yECBxD9xJP/zG2AAgQtFTTzfP5 O2IKuneT9Hxa8680rSVxQumG6RhwjH1rey/bY6OHzN01QqpHuUZkFMxenBUvv+WwGEBt YKLziV//vQgo120Phf+JhgrjLfgDnyCDIz+Quj3rH3huFb6KoiZbpiA2wJ4Pg8H08eHO ePOQ== X-Forwarded-Encrypted: i=1; AJvYcCUDrMG7EI0IMppEgn8j4REBrY4Zs1fh/Tuene7jsSNFLFnaeNDSMyhRYmSp4K1deYehGJViQl5l8v3zfj8=@vger.kernel.org, AJvYcCWd6VCOcgXeBVUpDRcWFaEPMUNGDZyYGWVb8rzDGKmUvDNR0LxfXX9iW8XsQGw0AgLHdo2fYcTxk/TUdY65@vger.kernel.org, AJvYcCWjSkzPQx6jK54/8/PK1HAWdxLRJn9EmZBXTPKJi5sRBIle74vwjjHYjYQOlBKfel0tRoAX6k2wkZE=@vger.kernel.org X-Gm-Message-State: AOJu0Ywun5oQOR3v6u2HKM7koKs/GhkIvus6Ns6GbShuR7Mof/xm1D7+ cqdVEVaK5Bp0dstYQQMTAHoV7ZyTkcWZEGL6XXx4nQcezG2sPDoF0Z1EZA== X-Gm-Gg: ASbGncvoL0I8gCcf/5Ise3axBA+FFU463/8JSWet42cNIHVIEotU8d7ikA8DUoBcwS3 zGzbTOckfHFewOroZrJSsHRJqe5nuuyaAGMz8XWFHU81g1zxQpscH3eO/yjCXmikBHm8WWnK/D7 NoCzRtCbR62iKrR1FqxGdIU7iNqUle1n5GO07E5Lk1Z37tnCdMC2AwnAKJj+o8SifL+nxMWxRul DxNON7VmraOJwh3pBdA/oM4yV+EyBK3U8K1SOZH6yWJVQz9KdadK8698ERevuEMVQfflx5ukniX wtZuPy3jOrmFGhnwA/YW6mQ30UKIMtFjngct1R856CRm0muW1mTI X-Google-Smtp-Source: AGHT+IH7c9EYNf2PsbHIDdFvLQS3jair3TtOnzOUM1G1gWQjTFtEtlVk0ndSqjG9bgLstniU3NGWPA== X-Received: by 2002:a05:600c:1d20:b0:43d:ea:51d2 with SMTP id 5b1f17b1804b1-440ab7b279fmr71033455e9.14.1745835927104; Mon, 28 Apr 2025 03:25:27 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-440a5310ad2sm118825295e9.21.2025.04.28.03.25.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Apr 2025 03:25:26 -0700 (PDT) From: Cosmin Tanislav To: Cc: Tomi Valkeinen , Luca Ceresoli , Wolfram Sang , Mauro Carvalho Chehab , Romain Gantois , Arnd Bergmann , Greg Kroah-Hartman , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, Cosmin Tanislav Subject: [PATCH v4 2/9] i2c: atr: find_mapping() -> get_mapping() Date: Mon, 28 Apr 2025 13:25:07 +0300 Message-ID: <20250428102516.933571-3-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250428102516.933571-1-demonsingur@gmail.com> References: <20250428102516.933571-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-i2c@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 A find operation implies that a null result is not an error. Use get naming to clarify things and to prepare for splitting up the logic inside this function. Signed-off-by: Cosmin Tanislav Reviewed-by: Luca Ceresoli --- drivers/i2c/i2c-atr.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/i2c/i2c-atr.c b/drivers/i2c/i2c-atr.c index a79ca87e8bbd..939fb95fe781 100644 --- a/drivers/i2c/i2c-atr.c +++ b/drivers/i2c/i2c-atr.c @@ -241,7 +241,7 @@ static void i2c_atr_release_alias(struct i2c_atr_alias_pool *alias_pool, u16 ali /* Must be called with alias_pairs_lock held */ static struct i2c_atr_alias_pair * -i2c_atr_find_mapping_by_addr(struct i2c_atr_chan *chan, u16 addr) +i2c_atr_get_mapping_by_addr(struct i2c_atr_chan *chan, u16 addr) { struct i2c_atr *atr = chan->atr; struct i2c_atr_alias_pair *c2a; @@ -339,7 +339,7 @@ static int i2c_atr_map_msgs(struct i2c_atr_chan *chan, struct i2c_msg *msgs, for (i = 0; i < num; i++) { chan->orig_addrs[i] = msgs[i].addr; - c2a = i2c_atr_find_mapping_by_addr(chan, msgs[i].addr); + c2a = i2c_atr_get_mapping_by_addr(chan, msgs[i].addr); if (!c2a) { dev_err(atr->dev, "client 0x%02x not mapped!\n", @@ -432,7 +432,7 @@ static int i2c_atr_smbus_xfer(struct i2c_adapter *adap, u16 addr, mutex_lock(&chan->alias_pairs_lock); - c2a = i2c_atr_find_mapping_by_addr(chan, addr); + c2a = i2c_atr_get_mapping_by_addr(chan, addr); if (!c2a) { dev_err(atr->dev, "client 0x%02x not mapped!\n", addr); @@ -540,7 +540,7 @@ static void i2c_atr_detach_addr(struct i2c_adapter *adapter, mutex_lock(&chan->alias_pairs_lock); - c2a = i2c_atr_find_mapping_by_addr(chan, addr); + c2a = i2c_atr_get_mapping_by_addr(chan, addr); if (!c2a) { /* This should never happen */ dev_warn(atr->dev, "Unable to find address mapping\n"); From patchwork Mon Apr 28 10:25:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 885927 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 71320262FC5; Mon, 28 Apr 2025 10:25:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745835932; cv=none; b=YSvQ/zItGwSRaBw66hCMk7xJOk+MpXxRa+3MvxEeLT3HE9MttwCTys+Ml1RDx2aW+EdPe6+rpARLMbU9R7mo2JwSRC36XdTsLgY0MPzxjE0p0pmgC0UI0+hJUIOfy0tEw36pz0LDAxDoPTzl3zMQx2VYTLnMv8gJ7gGvfj1ayK4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745835932; c=relaxed/simple; bh=a03NI+MuNzuVZP8v4sBl/eM/Sl6EwDBIkZ7zxPYoFZc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=P+ExXsKgjp83X3MkJ1zht4zAGnEklKu+D2yg9FmdqJHrdFGAo/Fd3rIrXD5H6bw6RtCp4Egrd0AvyUMGv6tFD6EGE5a+iwrAPzuFXYDqNifwl0oXQAFGlzzGrVNGBbi7e1WDuDwrqh8g+f7rS3XY02i/Pj57cTvkrRVikG4X3d4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Ddm5iH+f; arc=none smtp.client-ip=209.85.128.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Ddm5iH+f" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-43cf257158fso26005535e9.2; Mon, 28 Apr 2025 03:25:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745835929; x=1746440729; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=t2f2rJOutKW7X6JUjBl+o0IcmFLA8VTw6r7e8yFew5Y=; b=Ddm5iH+faNr0lzKEQvBNahcrLdBDi4ms4WJAcqi3jw51PeVrZxvuRcBEXn0JIzz95E 8vJUTPn11qr2KhYaH4pYnYLy4m2I9TnGFFjJW04FGXQ/IMGT8Q3LSjYE+Gk/GR4xsDMd w40LyGTK0Fet8QQ6tqtzZ+QPi3QJGTYwK7RkpDFiw0aWpx+pVfPf0ny+G1Phixk2iJXq /QcTYmbe0alDI99/EelOjBVt+y8lXVXBcYp0C4w+SAoORCSnNHEAYHcad2NOL7O7/I2N b3jEBiiqCaKjLVWDDMP8lso2mQkE0CWuXwo837HAYa3FJM+3MA/iUmp6Q9ZUWWC9CrU7 esgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745835929; x=1746440729; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=t2f2rJOutKW7X6JUjBl+o0IcmFLA8VTw6r7e8yFew5Y=; b=fJxqv4uGuO1uh/NRecz68e5adweP11Mko1ISZEJQKH8CYHKRbwoCPr2/zE0KTYOr8M flTwZ21OHMzk/RBmTUBJDQMGAyyUoX02ocRY+AaqRyYoduecKYIyEx/gIqAuZoyRQ7RB z45yTNd/3bLGFwnZKk9y9+V8lPbWrZGHuTx8RDFJfB2yIAZf6COInJ6nIBe2MgwGDdPa PlA04fp0+ielZMj6v+h5y7f3GctQo7D4OOzrYZGPxVWf1jOsN0mX5NnDy8d3EG0gmG3R GnSuZY4C89csw7oMPr5iCQaCkeuZnmplRSN1F2SvO34LKWq5v+heGnBhXS1b8/qUp9Ok cAUA== X-Forwarded-Encrypted: i=1; AJvYcCXLH5aBaA/b7W4j0JpBTMR0vG6Q6HTY+9OCHZwLklLA50bMfIFOrblrxnarfphvfcBSMy1wfvc/vtHVs8c=@vger.kernel.org, AJvYcCXeH5R9LpyiiPChVSM2wj0ojUTkYcUqqCKGTVbRsEdfNZyrKOFkCzVJHQ7iaqG0D4QuqmtB6qCjR9fWBSl4@vger.kernel.org, AJvYcCXeqOS5XV4uGx4dY9BYWeCP1EFP86Of+bK/gbiXDftYEtieO30rw64J1U0C3u3bAR9l7X/UDIDMAp4=@vger.kernel.org X-Gm-Message-State: AOJu0YyOYPav2ZxtgJA5IEsN9oLEgxcWqZNIo5ebzXu1siAKJ9LTcR7i M3j/EJT5AqNuOLhHzwkRoHOTp94gRRTbx14wtPA2FQaBde+SZ8G1 X-Gm-Gg: ASbGncseiUUFhHrc/6T8vunEiwOXjKfoxfEQbWQHbKac/zjVnv6b6v8x8nOsuJ+EQs/ F4a9yKvXlWjfud6VFJ4G7AjBn+34ZTSVe/4Fy8GLG9WQYO/QxCQyK9laAPVlBojX6qyHqPo/8Q7 tHZfz7UMt6tnRToMqqZXUStn4eHdyA5hNfo0l4h0QcF7rSk4z67sNtL4Z9UK4rIcTbRcl53w1zx kaWsqLtre6GUg7A0nCVRyseksZYs4SlOts+BCwy9COzR9SlJhXcIltU2p7Q22eprPNyLX/CSn5I AbWTWwWWAINiytnGZmF76YjhK1oq0NmuhbQycfCs/nWfD57ZkaYx X-Google-Smtp-Source: AGHT+IEgRKX+oyGpIsnDWhFvqxcCziTobqDn3/PrRCiAKcBkYfTRfJ6anJjN3N2XsbwH0jJcI/Ef6g== X-Received: by 2002:a05:600d:113:b0:43d:4e9:27ff with SMTP id 5b1f17b1804b1-441ab3e0330mr1733975e9.7.1745835928683; Mon, 28 Apr 2025 03:25:28 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-440a5310ad2sm118825295e9.21.2025.04.28.03.25.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Apr 2025 03:25:28 -0700 (PDT) From: Cosmin Tanislav To: Cc: Tomi Valkeinen , Luca Ceresoli , Wolfram Sang , Mauro Carvalho Chehab , Romain Gantois , Arnd Bergmann , Greg Kroah-Hartman , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, Cosmin Tanislav Subject: [PATCH v4 3/9] i2c: atr: split up i2c_atr_get_mapping_by_addr() Date: Mon, 28 Apr 2025 13:25:08 +0300 Message-ID: <20250428102516.933571-4-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250428102516.933571-1-demonsingur@gmail.com> References: <20250428102516.933571-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-i2c@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 The i2c_atr_get_mapping_by_addr() function handles three separate usecases: finding an existing mapping, creating a new mapping, or replacing an existing mapping if a new mapping cannot be created because there aren't enough aliases available. Split up the function into three different functions handling its individual usecases to prepare for better usage of each one. Signed-off-by: Cosmin Tanislav --- drivers/i2c/i2c-atr.c | 110 ++++++++++++++++++++++++++++++------------ 1 file changed, 78 insertions(+), 32 deletions(-) diff --git a/drivers/i2c/i2c-atr.c b/drivers/i2c/i2c-atr.c index 939fb95fe781..184c57c31e60 100644 --- a/drivers/i2c/i2c-atr.c +++ b/drivers/i2c/i2c-atr.c @@ -239,9 +239,23 @@ static void i2c_atr_release_alias(struct i2c_atr_alias_pool *alias_pool, u16 ali spin_unlock(&alias_pool->lock); } -/* Must be called with alias_pairs_lock held */ static struct i2c_atr_alias_pair * -i2c_atr_get_mapping_by_addr(struct i2c_atr_chan *chan, u16 addr) +i2c_atr_find_mapping_by_addr(struct i2c_atr_chan *chan, u16 addr) +{ + struct i2c_atr_alias_pair *c2a; + + lockdep_assert_held(&chan->alias_pairs_lock); + + list_for_each_entry(c2a, &chan->alias_pairs, node) { + if (c2a->addr == addr) + return c2a; + } + + return NULL; +} + +static struct i2c_atr_alias_pair * +i2c_atr_replace_mapping_by_addr(struct i2c_atr_chan *chan, u16 addr) { struct i2c_atr *atr = chan->atr; struct i2c_atr_alias_pair *c2a; @@ -254,41 +268,57 @@ i2c_atr_get_mapping_by_addr(struct i2c_atr_chan *chan, u16 addr) alias_pairs = &chan->alias_pairs; - list_for_each_entry(c2a, alias_pairs, node) { - if (c2a->addr == addr) - return c2a; + if (unlikely(list_empty(alias_pairs))) + return NULL; + + list_for_each_entry_reverse(c2a, alias_pairs, node) { + if (!c2a->fixed) { + found = true; + break; + } } + if (!found) + return NULL; + + atr->ops->detach_addr(atr, chan->chan_id, c2a->addr); + c2a->addr = addr; + + list_move(&c2a->node, alias_pairs); + + alias = c2a->alias; + + ret = atr->ops->attach_addr(atr, chan->chan_id, c2a->addr, c2a->alias); + if (ret) { + dev_err(atr->dev, "failed to attach 0x%02x on channel %d: err %d\n", + addr, chan->chan_id, ret); + i2c_atr_destroy_c2a(&c2a); + i2c_atr_release_alias(chan->alias_pool, alias); + return NULL; + } + + return c2a; +} + +static struct i2c_atr_alias_pair * +i2c_atr_create_mapping_by_addr(struct i2c_atr_chan *chan, u16 addr) +{ + struct i2c_atr *atr = chan->atr; + struct i2c_atr_alias_pair *c2a; + u16 alias; + int ret; + + lockdep_assert_held(&chan->alias_pairs_lock); + ret = i2c_atr_reserve_alias(chan->alias_pool); - if (ret < 0) { - // If no free aliases are left, replace an existing one - if (unlikely(list_empty(alias_pairs))) - return NULL; + if (ret < 0) + return NULL; - list_for_each_entry_reverse(c2a, alias_pairs, node) { - if (!c2a->fixed) { - found = true; - break; - } - } + alias = ret; - if (!found) - return NULL; - - atr->ops->detach_addr(atr, chan->chan_id, c2a->addr); - c2a->addr = addr; - - // Move updated entry to beginning of list - list_move(&c2a->node, alias_pairs); - - alias = c2a->alias; - } else { - alias = ret; - - c2a = i2c_atr_create_c2a(chan, alias, addr); - if (!c2a) - goto err_release_alias; - } + c2a = i2c_atr_create_c2a(chan, alias, addr); + if (!c2a) + goto err_release_alias; ret = atr->ops->attach_addr(atr, chan->chan_id, c2a->addr, c2a->alias); if (ret) { @@ -306,6 +336,22 @@ i2c_atr_get_mapping_by_addr(struct i2c_atr_chan *chan, u16 addr) return NULL; } +static struct i2c_atr_alias_pair * +i2c_atr_get_mapping_by_addr(struct i2c_atr_chan *chan, u16 addr) +{ + struct i2c_atr_alias_pair *c2a; + + c2a = i2c_atr_find_mapping_by_addr(chan, addr); + if (c2a) + return c2a; + + c2a = i2c_atr_create_mapping_by_addr(chan, addr); + if (c2a) + return c2a; + + return i2c_atr_replace_mapping_by_addr(chan, addr); +} + /* * Replace all message addresses with their aliases, saving the original * addresses. From patchwork Mon Apr 28 10:25:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 885604 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EBE8C26388C; Mon, 28 Apr 2025 10:25:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745835933; cv=none; b=fPUO4MTluXMgukpODZCtJ03p322Oj2kVvqq1P3B7Q2r+tZc7HLXj0r8z5pSINXWxFi+uiPMArbPNFR2pbMvc94oBqSisODFBS0eTUkaOy408J2B6e2AFdRcJdud1/yBZuVs3/6x39C36OF7siSlOtVbHMPtZ4gPonyJab9mphhM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745835933; c=relaxed/simple; bh=0kcbAxwd8E1vqD0enMwHz5quvSlqwAaIoFmQEO7bxhQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EFZkqEsWam0DF70Wle2kP1FPtJkRKiAsnNU9k80Zoz3j0dVh5o/LwagPi5iYF15MkjjJlBYBtqIb4DunVwJupZpr8c5C9PHlt78xVzAmGOJttzB8LfmsCCOyvZCa1mKQI9sQMwjFvn0etwC9RTr4L1nsaiSTTsH2B5dvEnmfykM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=jOCw92Ph; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="jOCw92Ph" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-43cef035a3bso32300525e9.1; Mon, 28 Apr 2025 03:25:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745835930; x=1746440730; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=yzQhB6yv6bflyojSC8ndRi8NdMdA/83LHNB2aBviQgU=; b=jOCw92PhRasXvZkWW77tbcQWJh6UbGO5k8HqqDxvEEN0r90WNv5DmPjhKrIVFFdqm2 dE2MsxFH4LUuwO+tH2m26ij+GSm63gCmrw/rOowiyociGHu84oMNlE0kkYP5UvPpqJUq KupEuwSPbXKjS4lGuOeIssO7/MoUYK938Qj3B2r6TULbRP+lvhdwD+YpG4/jBsiK6bfH bEH6KhPQL/E3phZix/8mmeBKn51303ngDZeQwFPkMH0wlkDEfSX1IPKcLOcbOM7FEETe taIFosXOZlDp8rIRZC1nSRCx86OKopJR8eAihysaxpoRWKNDVGk8thAyfXbwSJOTRmwi YfGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745835930; x=1746440730; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=yzQhB6yv6bflyojSC8ndRi8NdMdA/83LHNB2aBviQgU=; b=SFrGfE9BXweYcMZoP6OLWJh4wSLVvMSLA4DqXXAefAdkBTynu8lNdRafVztGNTfmcV Rqr0iJJStLp4ClYV54sx4cI4AluI0+dl2m2JAyeJQSK1R0jGTPNc+qr5oN2MCvh8KFFQ uC7/6dGdOKPmKpGvc2QkrstArziBkTvYBne4yLOYXnaaJk+xB8Y0T8Eo0tDlhEq/sAH2 0KgiMlCnYu1sdbEGTfZn8RUsTX0O/1zGPO8rnkfPox6uM3tqRDHxkGx2+2S2QW8PWFhx I3dTOmncbjHlz7jigW2fD6QQFHoe921lC4M8n+IVVjIkjurdNN7GXrGzyJYzTBx9VQLN EDzw== X-Forwarded-Encrypted: i=1; AJvYcCU1WmmoeQMy5EbznNB7YEtpbU5iAMhJuxxoBBIw3AZ/Fel57SNereudTcwL0d9LjRAHGEBpiyZKyQn3NIs=@vger.kernel.org, AJvYcCVTF+lAI096CXOKvQYdU4vgzEYHsC3Y+c/QKDpJ8Si3rXildTkDpPf7ypuZJaceemO/n5iVXFAXZGfeJ2SM@vger.kernel.org, AJvYcCWP7JqFC+FaA8NrNT9NpaB53bzgWFKMkiSqG+w0/HELiUcr96O+TkVALpXVNn4Vpbxx40veANcLHnA=@vger.kernel.org X-Gm-Message-State: AOJu0YwPvkryRGvlukBmjBwcF48Ma+6oTdITRgkYIg+UMRChkolmyjgB 0Mh7SumRn6oppKrBiMWsbFXWxS58Hm2i4/zmKyRxdXbZ8wvWZw2dbEns7g== X-Gm-Gg: ASbGnctcy+0wwp6wPoEM6aTerulDNREUZjEIFx7wA7+zjbTWJYqDLLFf7GGKI1Lru7U 60Dle/I6N39hLTixVQpzJOKMck4mNk4LXia3PyWbDSUmOewqNSR8nnPZqqytXGDIFFCyon9l+Is aDbX+2GBtSSPRdl+w929X0cwM6FHEpnuBJ/vSPg3BHChZ/VCREgi/Q0LyB1jhJYjqbx2e18Ic6d ZAzpOhw4ycehcWsxCBeqD/hgG9ZY97k/+c4+cmYUirn5OPJh/YzVEGb9bBzHfxfwDCDTdUDm5rF +vx87SlbstW3E8Vta17iU5ueBvxj9OaO3mx5WJ83u/ykprqcFsZ9 X-Google-Smtp-Source: AGHT+IFdb8kKclIXB9d1ll1/iIMloEUIy56Z99b90c4Kas/qik58m139GAAOK9qNBmOST//eRVq8AA== X-Received: by 2002:a05:600c:1e04:b0:43c:eeee:b70a with SMTP id 5b1f17b1804b1-440ab846cecmr64922305e9.22.1745835930203; Mon, 28 Apr 2025 03:25:30 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-440a5310ad2sm118825295e9.21.2025.04.28.03.25.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Apr 2025 03:25:29 -0700 (PDT) From: Cosmin Tanislav To: Cc: Tomi Valkeinen , Luca Ceresoli , Wolfram Sang , Mauro Carvalho Chehab , Romain Gantois , Arnd Bergmann , Greg Kroah-Hartman , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, Cosmin Tanislav Subject: [PATCH v4 4/9] i2c: atr: do not create mapping in detach_addr() Date: Mon, 28 Apr 2025 13:25:09 +0300 Message-ID: <20250428102516.933571-5-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250428102516.933571-1-demonsingur@gmail.com> References: <20250428102516.933571-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-i2c@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 It is useless to create a new mapping just to detach it immediately. Use the newly added i2c_atr_find_mapping_by_addr() function to avoid it, and exit without logging an error if not found. Signed-off-by: Cosmin Tanislav Reviewed-by: Luca Ceresoli --- drivers/i2c/i2c-atr.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/i2c/i2c-atr.c b/drivers/i2c/i2c-atr.c index 184c57c31e60..42f433846f63 100644 --- a/drivers/i2c/i2c-atr.c +++ b/drivers/i2c/i2c-atr.c @@ -586,10 +586,8 @@ static void i2c_atr_detach_addr(struct i2c_adapter *adapter, mutex_lock(&chan->alias_pairs_lock); - c2a = i2c_atr_get_mapping_by_addr(chan, addr); + c2a = i2c_atr_find_mapping_by_addr(chan, addr); if (!c2a) { - /* This should never happen */ - dev_warn(atr->dev, "Unable to find address mapping\n"); mutex_unlock(&chan->alias_pairs_lock); return; } From patchwork Mon Apr 28 10:25:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 885926 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9E289264609; Mon, 28 Apr 2025 10:25:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745835935; cv=none; b=neeC8P+uknB2eBew4PqwF+4qnJa023QDzU+Q2Z9YLBd4C3GIOLqfH2jZx8SrFh6CeuyMEGqtf8If4UYevM6fxRssC/N9SEK9shCrjo3JBw6YT1Cg/OMGh50djfX5Tp7tnJ3rTQ3qdEAobPlLfWODDg6H+5xFmKfaxOoC/xf0zP0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745835935; c=relaxed/simple; bh=RZX3RZwJhM68tlxBvq0gT7tyXmfW8XV9yVFzxV/fu3Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tpeCl+Up3A/NZ7XDw4uFj8UHnLxBYrvyf4bfonHvCE0CZCn8H79smCewtSj4tUutJ5P7dwNUj32Qq8lNutpLxK2xDqmipEmcBi67n3KcJZ5OwBhqgl2Wd2Och9gd66FHslsnRu57m8fLoeTXXxysbJGKrCYGP5O8tm3n2nRGcFE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=TAD5Z2Ke; arc=none smtp.client-ip=209.85.128.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TAD5Z2Ke" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-4394a0c65fcso44657725e9.1; Mon, 28 Apr 2025 03:25:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745835932; x=1746440732; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=3XZd2mLuh5yTdiZFrVrElau3tY1YQ8clmk2R66DBv1c=; b=TAD5Z2Keya6IIdDAv4vOefpo8G/Cx6n1KUlLQuxbrxW/eeeJDQjyIA/dTcXFTd/pvo LssvMZwFLnP9OccZ4yjln9Q5bo4O6LHLgKJX3GMQMJjB3eTV2d+MjIIlCBGZ+SsWuJui 5eTmpp3BuAgaphYNXeTf/UsPw1YRCN0zZBatRaX8b6psQU4efBrD1V1B36x9+k+H2EyB 9nUyNaCCuJimXHj/SqHd74mk4jz6Ty/gk5Bv4M8rcUuGRD3XhVNdLKIY3T/rFBBkWEj4 Anp+TYe1QCIgZ5dyQGorEA99MwL0ws1AMAQikHPY09sMASsGv3g/rCnvTxRSURWR0UV8 MDLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745835932; x=1746440732; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3XZd2mLuh5yTdiZFrVrElau3tY1YQ8clmk2R66DBv1c=; b=PQYuROpOfMpktIRAhHyhSdrmddLwzxew7wLvDX4sZaXWOk2pw79/AKTnH3zjbwD3Rj +Y2yeuei+HoU9KUU/BqvSnTLMTbGlgWqNG3Jd9//WaTPN/Hrj5+ZhqydAVlzobdd8nNw ImxvAUWdSFgghaVTKLR0znAKPjrmvmko9XDXJZtvWiO6olbenLCV/F+dpB9cyVh0OdA+ RtxTiFGqpMWzzERA5HRekaK9+Z0rCkYDiI6FNkFjlrYYjE0N25I2NdbTsdy32xWkfZeB iOY4nAT93i+SpoPY3UQKn7Uurb8Gr82uV0dniQkBuBofnSQVWut5tDX0iyyKO0Dx1GYr /n7g== X-Forwarded-Encrypted: i=1; AJvYcCUyuRnJlyJDRiKD9Iip+pU8qHL3Wdss3iT+5xTduZBashdVsRrq3AbTDRD3NqCnIGLGVKFAXRqiafWoj88=@vger.kernel.org, AJvYcCV47pjR4gGdR1VBef7jpUsgjODvpSTxz6XzowPtg2zwBJonUmPjVueu28Mn2Yqjaw8qVo35hLNOXw2lCTsn@vger.kernel.org, AJvYcCW5WAd7OBHHl214aVHz0GM2n68SsWZVEoQ1Xyt2978acaA8Nnapv9BXw+V06d0hU4Jmd9PP0aitTtw=@vger.kernel.org X-Gm-Message-State: AOJu0YxDFDr1z+N/GdNvl3oQsajFPc/wLFaPk3x5bGqekmLbd5hHw4/e 2Sn1n1E1YKWLN7UkX2gZYRFTQL37SATms1J+P3P9f8X+PL8YBQeC X-Gm-Gg: ASbGncvbmQNHvLt/UAj2pZVsztiAgLifOSBo4GIxPc7zwoA+wQFpbn/4Q+vaVV5MG90 OMxQjoB2ZQH6ZX+48QVkW0mOY2EGr+xFUnIDcfdN1NRAmYFdKSv3HwHZRtFfTLyYyFBG5jw+3Gd Sww5ZajdywUKG9jfARSAvKVfL5NRfkoXRjxCcV1lG7rrNVA+gaOQmRhikYNdlIsSqx5n+E4Zxsk mEXOGsF7ddjHyBgKbjWgXZwIFplCN84Rg0Zc2MymgFTXiYvjf9tfoeitiV0Q4Ntf5Dw2msGbOM/ gSD9m8GoZrf8c7x5UZozLGm4gjXqlF6GKV2n08TdKCY3RAUNBWzc X-Google-Smtp-Source: AGHT+IHpbLSsWgVx50ME0I8RLI4raoVxE5AMCwfcymKj6lni4Mmyq4NCjB2u9e33xu4qS1vXxU3AfQ== X-Received: by 2002:a05:600c:1d06:b0:43d:1f1:8cd with SMTP id 5b1f17b1804b1-440ab84518bmr55477265e9.24.1745835931856; Mon, 28 Apr 2025 03:25:31 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-440a5310ad2sm118825295e9.21.2025.04.28.03.25.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Apr 2025 03:25:31 -0700 (PDT) From: Cosmin Tanislav To: Cc: Tomi Valkeinen , Luca Ceresoli , Wolfram Sang , Mauro Carvalho Chehab , Romain Gantois , Arnd Bergmann , Greg Kroah-Hartman , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, Cosmin Tanislav Subject: [PATCH v4 5/9] i2c: atr: deduplicate logic in attach_addr() Date: Mon, 28 Apr 2025 13:25:10 +0300 Message-ID: <20250428102516.933571-6-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250428102516.933571-1-demonsingur@gmail.com> References: <20250428102516.933571-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-i2c@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 This is the same logic as in i2c_atr_create_mapping_by_addr(). Signed-off-by: Cosmin Tanislav Reviewed-by: Luca Ceresoli --- drivers/i2c/i2c-atr.c | 30 ++++++------------------------ 1 file changed, 6 insertions(+), 24 deletions(-) diff --git a/drivers/i2c/i2c-atr.c b/drivers/i2c/i2c-atr.c index 42f433846f63..bf7b2ac5e9cf 100644 --- a/drivers/i2c/i2c-atr.c +++ b/drivers/i2c/i2c-atr.c @@ -538,38 +538,20 @@ static int i2c_atr_attach_addr(struct i2c_adapter *adapter, struct i2c_atr_chan *chan = adapter->algo_data; struct i2c_atr *atr = chan->atr; struct i2c_atr_alias_pair *c2a; - u16 alias; - int ret; - - ret = i2c_atr_reserve_alias(chan->alias_pool); - if (ret < 0) { - dev_err(atr->dev, "failed to find a free alias\n"); - return ret; - } - - alias = ret; + int ret = 0; mutex_lock(&chan->alias_pairs_lock); - c2a = i2c_atr_create_c2a(chan, alias, addr); + c2a = i2c_atr_create_mapping_by_addr(chan, addr); if (!c2a) { - ret = -ENOMEM; - goto err_release_alias; + dev_err(atr->dev, "failed to find a free alias\n"); + ret = -EBUSY; + goto out_unlock; } - ret = atr->ops->attach_addr(atr, chan->chan_id, addr, alias); - if (ret) - goto err_del_c2a; - dev_dbg(atr->dev, "chan%u: using alias 0x%02x for addr 0x%02x\n", - chan->chan_id, alias, addr); + chan->chan_id, c2a->alias, addr); - goto out_unlock; - -err_del_c2a: - i2c_atr_destroy_c2a(&c2a); -err_release_alias: - i2c_atr_release_alias(chan->alias_pool, alias); out_unlock: mutex_unlock(&chan->alias_pairs_lock); return ret; From patchwork Mon Apr 28 10:25:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 885603 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C7848266B51; Mon, 28 Apr 2025 10:25:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745835937; cv=none; b=riJzlBr3HLRPaN3qSxyrJof2ww5lLhsQnhBkBLlgzUE63oCH/RztaAgGxgWrMS8JXbjSZzgBEAZzLb0Be3IHmpJ9fSQP7g5moz63O/oas4OcwKfSSxlPF/N0GwzyvR72yH2dX/4RoK2lk94NLrlAexojE7KjI/uvcjLRgy0A4Pw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745835937; c=relaxed/simple; bh=lwACmgXhQD+tzgJ0hc6gipEhe/kru3W3qwZuI/ILClo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nnJRrMfyB3NWsv8Z9IsSFMPibQYJvHPOrkXcr3/V7imFp+D2IuHQL+R0NbkLqs0olwAQBtU0pXbfG0/E6kFdcfAWfsNP96hPavDhdCujKTRkdoUKchN8ZewFJSx1rLdNvXBloi0HyyMLji8rKl6q/STzRrseJZ88wjKtCFMznAE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=M/fXyNrp; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="M/fXyNrp" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-440685d6afcso45486235e9.0; Mon, 28 Apr 2025 03:25:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745835934; x=1746440734; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=sbTF6ua32Y722MNUPKroCHG5m/IpTQogIDHP4rO2RZw=; b=M/fXyNrpNG5nojuqINyfPCjUJLGjs3kas4+M3/cJFdGXu0xFqktnB3uxBeXPKonm4d xIlHzATy9WboLQYCdO5VRL+rUi13MM5jbfe+XmvX/glj0nLslq/U0D++3gxqdO/pWE76 uf1S1B8o73q9ugEZvh8t0kf2srG9zsq8l2OzuJ9XIqXdTorAPChxZTESYw78OrHle8gP MBu3mTLJJ8X8lZVYCE4xGn6ByPAccnEHVqPduPs8EzWV/rPGAfPw9SyTcdJAvlQpIn6w OsCCZmy4DodqeWT2Fxp8tM8dQM7JKfMs17ir1yZFMetlWoPDvq7GeM7B/3XV62h6pVwl WGsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745835934; x=1746440734; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sbTF6ua32Y722MNUPKroCHG5m/IpTQogIDHP4rO2RZw=; b=Z9AJ7/0H+6hqqZZHpE4QDbQKCFaK1KppehRBw/m+1dlAu0sYVIJQs67HLJ4A2q9s4S g8knMyM0dowi0t+WsH2po4XIZXFgbsdCq8pLzWVJ9+mvCrEl9KUuoqWWAcSZAsEA74Oj IHW1lWficLGOcF+YmBGLjV+h9nSrHnjreUtSHlU74dhgp5CJO3VBMYz/Ou3U9/D5Pt30 Syv+sbUIWBdMlmKXWZcG3N9ru0N8MzjMN0fFqy/PwJhlVN7zVpDXwfn9FVpGsZ3j7UFz PYrLcOkDEkgpo21t8ppHTC7XLL01A5b/4BLCJgM4epRu8NS/5QBIB0rTBngfSKHdwbzu OKRQ== X-Forwarded-Encrypted: i=1; AJvYcCUrO5XN7FTQbCLdR5FIoHiiBmsQ68TNjjg9PByACIe0kLCWuUaREYS5qwTiTmecUIQPmZ3wyIf2NGc9nT4=@vger.kernel.org, AJvYcCUu85x7jEheUkQcvW59Wq8lS+DbwKgtgck1s2qM+2NIKYutlB8Dx1xuMGzPZTNVaYVkcaJHDAEg3Pk=@vger.kernel.org, AJvYcCWhN9dPr3ODb5shseX0TTO/BCSK1Z+80cKXvJE+BhzS3SmGjHMIBQpCwqrw6p99BKBUQFpCdZFXBwK01dfV@vger.kernel.org X-Gm-Message-State: AOJu0YwdrhRoLjlogoVG610xnbufTmFdQJB01cfPgM3VGTs75I/8vChN oL5JyYDf7EhFt0AYp8jKIs8wny5D4/s161g6ji1+RRPLveEMvchh X-Gm-Gg: ASbGncsXxfUHyTnaHTrzehnr9biFbc3u+X8bmy1HHs9zSixbo+7BiN79rdLwD5ui5sq +5IY4HpFnGV3na+jgUH6+49WvhvMwmZqSj38xzpszzsknar20mCIeMkQsvoAIUgTNATuwf2v1J4 CYmMabgUXIX1nEeMsug/TKPS7RVj6ZAagspxqIfAzSNhmddeB6aOdTWNUQ0MMFBfvRPsdeq3mO2 +zfjfde21kJ1/uwiR8ioFdjtd21UY7qpGN/o+ClEGkRSQ860sqwvN6N38TaJZ3bqcDowFDFMkT5 RSHu7CYb+610VXPjuQyhpLWR4TzIdc5cACpeVZPrlKu5tZz33ffj X-Google-Smtp-Source: AGHT+IFEAJ/VB+ejxYIPdRRIC1nA3G1qjQfI79CFFUukorfMXL1K4EJe/ml/69E45V+o8vhZOPPJMA== X-Received: by 2002:a05:600c:4590:b0:43d:fa59:be39 with SMTP id 5b1f17b1804b1-440ab87d118mr63426845e9.33.1745835934049; Mon, 28 Apr 2025 03:25:34 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-440a5310ad2sm118825295e9.21.2025.04.28.03.25.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Apr 2025 03:25:33 -0700 (PDT) From: Cosmin Tanislav To: Cc: Tomi Valkeinen , Luca Ceresoli , Wolfram Sang , Mauro Carvalho Chehab , Romain Gantois , Arnd Bergmann , Greg Kroah-Hartman , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, Cosmin Tanislav Subject: [PATCH v4 6/9] i2c: atr: allow replacing mappings in attach_addr() Date: Mon, 28 Apr 2025 13:25:11 +0300 Message-ID: <20250428102516.933571-7-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250428102516.933571-1-demonsingur@gmail.com> References: <20250428102516.933571-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-i2c@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 It is possible for aliases to be exhausted while we are still attaching children. Allow replacing mapping on attach by calling i2c_atr_replace_mapping_by_addr() if i2c_atr_create_mapping_by_addr() fails. Signed-off-by: Cosmin Tanislav --- drivers/i2c/i2c-atr.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/i2c/i2c-atr.c b/drivers/i2c/i2c-atr.c index bf7b2ac5e9cf..7214a59ddf15 100644 --- a/drivers/i2c/i2c-atr.c +++ b/drivers/i2c/i2c-atr.c @@ -543,6 +543,9 @@ static int i2c_atr_attach_addr(struct i2c_adapter *adapter, mutex_lock(&chan->alias_pairs_lock); c2a = i2c_atr_create_mapping_by_addr(chan, addr); + if (!c2a) + c2a = i2c_atr_replace_mapping_by_addr(chan, addr); + if (!c2a) { dev_err(atr->dev, "failed to find a free alias\n"); ret = -EBUSY; From patchwork Mon Apr 28 10:25:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 885925 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 829DB266F01; Mon, 28 Apr 2025 10:25:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745835939; cv=none; b=GokPLLLSkT3nazUpHPAZ/GVcxzSeN/wFDSWZZEYw4J6rnoxawOJLoHV8V5ron8wCeefUlO8XQNOz0s/j9KOy376ceIbrbTb9N6UEpCxUUkIuIz2jyDpz/N9qyxO1RGIqtZxHNql526ew2QImKEoMtTBiYzgpfCSofT7SeGFu5zk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745835939; c=relaxed/simple; bh=Yd2vMpYi0+0z4E9zqttUfGUuVEr/75KkabGIZyNs+a4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=vC3qAD+q8mo/+xykih53YJlI91E82ovdY+hGFb/iGVjUTFw4QAQ1DuzCDF+MdCbPb0ql5peydQc4R96vxlYNriM8+HV/k4ajUSOzzmRzY+e7odl05/u23aMlwCQGa7PfjHJUJ+mctCzC6EVaCM8p0Ex+JOQjXh0fp/5EOUwYLtI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=DimRz8HA; arc=none smtp.client-ip=209.85.128.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DimRz8HA" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-43edecbfb94so43940415e9.1; Mon, 28 Apr 2025 03:25:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745835936; x=1746440736; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jPp64yHTXuxSiEPljoQLCKKjc0l5YBL7EmvCMv5vIpY=; b=DimRz8HA12d7WlNR9vJ8OD1d/umChhO+uY0Q8YkbfQlMquxJnPX1+Zo/4qjdO7ErXP irm4L/MSHKKt2KTiTtFB7u+FXfJFlPfVnq2f2y1GJ7u0YwSQXcPdmcJDieIPwv62majV pxl2GzxGDsEPwgFi67ujClGWyHmfSkH1k4Yo7nf/XU0zfyWl4JiMvRdD69+wxBjbG0My 0r0cJBZUKAioHUWd6WOsSLFPq4MILD2z1CbGp0LJSzfY0kynGHi7GdM1ZGgYz0bDwVtt 3jFKz1L3bihugbA0ncz204Jlbr+hBNi8DMto7Vr74gI0nddNODEBBSUcY6Nw7OYcAyo2 kFkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745835936; x=1746440736; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jPp64yHTXuxSiEPljoQLCKKjc0l5YBL7EmvCMv5vIpY=; b=oLRKb+VahgLkIPhCGIFXoGIi0+eJanHVNk2xUNqkInGOkEIon9fmrH/zj9acdBdwTp h0Fvibzn341z3XmT4olvWUlhAkTBqIrpJ1Aic7ghdqBzzQ6gPpDbyaWYHlM4B0FIU+vL INozKghZUt70eqHI+3V8ULmoElsU1oTj3IAN8Y7p8GpgDqwLQ0Wf/ucNoUvTOISxPMEm VEI/mkAbqrsGzjAZLol8tDzpF4JO9E5b9MxK+LIVVB4QbpdLMf+/iUvmALKrhW9ZoH9N YI/h4DbrOvrRCWvRZImu4b4ZDo6RsPLHknJhbJMUXGveTQEV0uheBNQcIhIF8hA/0aE/ akmQ== X-Forwarded-Encrypted: i=1; AJvYcCVfOLCrIQFFSdjNnrTxTlRdd2Ed0kWYFLIhUesFSbkduin4XMvQlE12lx8VlvzRqMsFhhFnSLpyCcQ=@vger.kernel.org, AJvYcCWeFvfyTlqKJZt1bqMEiv84Skcsb79Q/9jeVfvGCj8LpJTf9sHTSwpR7if/FK9TqAYca8OU/01yxhR3TnRZ@vger.kernel.org, AJvYcCXIHHYX5E1Euz+eInTtc9pAGH6Qot4wUBNA0qZqPhFh6Oh1GeGOuXHeIOwqQovUfbdJEAB4+L2lzPoafOE=@vger.kernel.org X-Gm-Message-State: AOJu0Yx9MnLvrFABpF6LaXzYM1e6MbQ4E86HF0ISW1WIhkBGYNgVo0pj /bSLOW+7I/WeseYpC6XZmBUodzFDGq0nCzw52tgIk+1rISAhTh0g X-Gm-Gg: ASbGncvFMSChJQxT3eCLJ5UEHUgal4i6s4x6g8S50M3NEpIbltouEi7kKvXyyMwcz9y tfNBZIHTFSpiCX/V2CfwDKqlq7+A0V+LJTdzxOzO6ttqWgnwDXIFSF0HPZQQO4SVT5uiWM581JG 2Zxo+QEomiTDT0OKbej39mPzQZ2Hdl8UwNfFVhF94G6Auh2fkD1lAMylfWwzZAQot9A2VKj6Wfb DMw6Li9UwIczQ3kDwna560wqlYisGcvV2z3njL6tBH69DPz/XaHxD8RlkdS87aubsEWBtFteyHl mCU7chO1SJi9bSBpIWQcn79U47U5dOZqIuqPlSt9klXngHgxls12 X-Google-Smtp-Source: AGHT+IEpAHMq+MFTC1tThZUM3+JYaCNjx4gCIRGGoBaWPaCDm2GpqjOAR6SQcGlHnG8dbYro9yY5/w== X-Received: by 2002:a05:600c:1f82:b0:43d:ac5:11e8 with SMTP id 5b1f17b1804b1-440a66aae34mr84858505e9.21.1745835935597; Mon, 28 Apr 2025 03:25:35 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-440a5310ad2sm118825295e9.21.2025.04.28.03.25.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Apr 2025 03:25:35 -0700 (PDT) From: Cosmin Tanislav To: Cc: Tomi Valkeinen , Luca Ceresoli , Wolfram Sang , Mauro Carvalho Chehab , Romain Gantois , Arnd Bergmann , Greg Kroah-Hartman , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, Cosmin Tanislav Subject: [PATCH v4 7/9] i2c: atr: add flags parameter to i2c_atr_new() Date: Mon, 28 Apr 2025 13:25:12 +0300 Message-ID: <20250428102516.933571-8-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250428102516.933571-1-demonsingur@gmail.com> References: <20250428102516.933571-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-i2c@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 In preparation for adding multiple flags that change the behavior, add a flags parameter to i2c_atr_new() and an i2c_atr_flags enum. Signed-off-by: Cosmin Tanislav Reviewed-by: Luca Ceresoli --- drivers/i2c/i2c-atr.c | 6 +++++- drivers/media/i2c/ds90ub960.c | 2 +- drivers/misc/ti_fpc202.c | 2 +- include/linux/i2c-atr.h | 10 +++++++++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/drivers/i2c/i2c-atr.c b/drivers/i2c/i2c-atr.c index 7214a59ddf15..e2350fcf3d68 100644 --- a/drivers/i2c/i2c-atr.c +++ b/drivers/i2c/i2c-atr.c @@ -106,6 +106,7 @@ struct i2c_atr_chan { * @lock: Lock for the I2C bus segment (see &struct i2c_lock_operations) * @lock_key: Lock key for @lock * @max_adapters: Maximum number of adapters this I2C ATR can have + * @flags: Flags for ATR * @alias_pool: Optional common pool of available client aliases * @i2c_nb: Notifier for remote client add & del events * @adapter: Array of adapters @@ -122,6 +123,7 @@ struct i2c_atr { struct mutex lock; struct lock_class_key lock_key; int max_adapters; + u32 flags; struct i2c_atr_alias_pool *alias_pool; @@ -703,7 +705,8 @@ static int i2c_atr_parse_alias_pool(struct i2c_atr *atr) } struct i2c_atr *i2c_atr_new(struct i2c_adapter *parent, struct device *dev, - const struct i2c_atr_ops *ops, int max_adapters) + const struct i2c_atr_ops *ops, int max_adapters, + u32 flags) { struct i2c_atr *atr; int ret; @@ -725,6 +728,7 @@ struct i2c_atr *i2c_atr_new(struct i2c_adapter *parent, struct device *dev, atr->dev = dev; atr->ops = ops; atr->max_adapters = max_adapters; + atr->flags = flags; if (parent->algo->master_xfer) atr->algo.master_xfer = i2c_atr_master_xfer; diff --git a/drivers/media/i2c/ds90ub960.c b/drivers/media/i2c/ds90ub960.c index 869e32bd07e8..6f475bae94b3 100644 --- a/drivers/media/i2c/ds90ub960.c +++ b/drivers/media/i2c/ds90ub960.c @@ -1122,7 +1122,7 @@ static int ub960_init_atr(struct ub960_data *priv) struct i2c_adapter *parent_adap = priv->client->adapter; priv->atr = i2c_atr_new(parent_adap, dev, &ub960_atr_ops, - priv->hw_data->num_rxports); + priv->hw_data->num_rxports, 0); if (IS_ERR(priv->atr)) return PTR_ERR(priv->atr); diff --git a/drivers/misc/ti_fpc202.c b/drivers/misc/ti_fpc202.c index b9c9ee4bfc4e..f7cde245ac95 100644 --- a/drivers/misc/ti_fpc202.c +++ b/drivers/misc/ti_fpc202.c @@ -349,7 +349,7 @@ static int fpc202_probe(struct i2c_client *client) goto disable_gpio; } - priv->atr = i2c_atr_new(client->adapter, dev, &fpc202_atr_ops, 2); + priv->atr = i2c_atr_new(client->adapter, dev, &fpc202_atr_ops, 2, 0); if (IS_ERR(priv->atr)) { ret = PTR_ERR(priv->atr); dev_err(dev, "failed to create i2c atr err %d\n", ret); diff --git a/include/linux/i2c-atr.h b/include/linux/i2c-atr.h index 1c3a5bcd939f..5082f4dd0e23 100644 --- a/include/linux/i2c-atr.h +++ b/include/linux/i2c-atr.h @@ -18,6 +18,12 @@ struct device; struct fwnode_handle; struct i2c_atr; +/** + * enum i2c_atr_flags - Flags for an I2C ATR driver + */ +enum i2c_atr_flags { +}; + /** * struct i2c_atr_ops - Callbacks from ATR to the device driver. * @attach_addr: Notify the driver of a new device connected on a child @@ -65,6 +71,7 @@ struct i2c_atr_adap_desc { * @dev: The device acting as an ATR * @ops: Driver-specific callbacks * @max_adapters: Maximum number of child adapters + * @flags: Flags for ATR * * The new ATR helper is connected to the parent adapter but has no child * adapters. Call i2c_atr_add_adapter() to add some. @@ -74,7 +81,8 @@ struct i2c_atr_adap_desc { * Return: pointer to the new ATR helper object, or ERR_PTR */ struct i2c_atr *i2c_atr_new(struct i2c_adapter *parent, struct device *dev, - const struct i2c_atr_ops *ops, int max_adapters); + const struct i2c_atr_ops *ops, int max_adapters, + u32 flags); /** * i2c_atr_delete - Delete an I2C ATR helper. From patchwork Mon Apr 28 10:25:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 885602 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E47922676CF; Mon, 28 Apr 2025 10:25:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745835940; cv=none; b=hbEiMOmLX+flApm6vc2oLWL2jGEGzgoSJ3dLxRPQBdfgXr2t+lWaDBXInETDPZJRDK27hUnO+W1wjxthAp1bhKMeCAVjPVzKV7kzj0ljpY4aWMnCZ0tDmOBibSCbY6Puf+6F7ooWNMpzEiYAUtM2VNItrpUwsMD+kVfT7U2lc4M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745835940; c=relaxed/simple; bh=5f3lIdzZo5QBxN2OkhODVNYCc7xZacb7TJSK4Zl4+GY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nLw5eKDu7q9K8Aj7qapiOCO0FgAJalnrTivw6XCEO4WutbMg7KrP36wkDITOzzqdShKkxS4GaHzil4J+xlsQxUTQXe/CizjU9LH0zo/qLMa+KrnRyeO2DBGm4JhNlUwAQI364Iz4a1BLgAzXJypuDVFOafwGFpVlVfQomgrH3jQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Yld4XMe2; arc=none smtp.client-ip=209.85.128.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Yld4XMe2" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-43cf06eabdaso41099995e9.2; Mon, 28 Apr 2025 03:25:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745835937; x=1746440737; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=sR+4IcQa19Yw7axS7f98CW/quiDY/S4+FIxh+Zej2/I=; b=Yld4XMe2EiFLeV7W+RsquZlvt32ghgs8dMN43zE5vV5VfWE3+srG68Ef1lAvW18kfx 2llRqkB8yGngAYiyD3+NvnGwj258kn2Pm5IYE2ZiSCnTASwbZ5MgVpdiIyeOEQ6cxNyp Hu3+aFHJ+uYMy9xo1whsstyAWYBI2yELUprHQzZiFAZkBWGKrj3T8xjnrWx2MM1Ns+AJ aQR7B6MFJITNl9JYGCCB7cLHrFX3XLb9iY+zlLwyVAJ8JEPinOBFiw3v4ha2P144eLgR GywQsIo48K67/dMlQoR4BxGARAVfq9i66hZ40O08TY8qcwUtAiFfSHBOD34SiqpBcF8Y N+vg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745835937; x=1746440737; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sR+4IcQa19Yw7axS7f98CW/quiDY/S4+FIxh+Zej2/I=; b=ZbQ5ec8MfV6B5L7XGYICQPmuqnnOW7u65Gvv8GlRTBGhkoSAm6X/Ig93QvdcMCysjI vHJJ56D1WPndxa3i4DmoI09g5Wjc8BPNatDQF3cijWVseXcGBobBGV6pp/2VKcPyPuTJ Llyq+aagYQVqFq/ePmJcW97VjvA5++uxUiuYRpCKwVHK0KRLS4JOU3xKwAOAnFJ+Qp/P BN5tkDBPm2Mh3JAAhCt7IqREh5y7b7ccevFu7SosE3hjAWDzCTadO86EHdTcSll4j3eo 7nIPhy3vHqXBXXpVICyhUV3QWyj7Zw8uMGS/M33xHq+KagN9en3ZJ8E4mW8sWaF3wsto Yw0A== X-Forwarded-Encrypted: i=1; AJvYcCU9IzHlTQp2/Z2yt8E2ACl0TXIs7SVp2II9c6zOT2lHo0K9Q0Y1wvWYcYoAJtANt6aejZA4wEXJBKw=@vger.kernel.org, AJvYcCV4FCN2Ed00phZvXafgZiOweRcF4ZrJeSRpUztoUifb4x/76C6rRufFTOqFUJSezf0jb08Kjapp8drnAGk=@vger.kernel.org, AJvYcCX72MucFtprT6T3yzxzfDWDMfPWglB0z7ofvu3gQCTZrzO/uB9AQ4yIziH06Eoa2TiZRxCk2XUGpv4e/0a2@vger.kernel.org X-Gm-Message-State: AOJu0YxshrOXVxhLuPblbXiCzljndtP8+Fb2msKWrC9zpxQKvuSdvmgs 6CmnR9621hVRj3/6VZ7t6sC8ZvXbhbAQVStYn2JOzEk4RzqjkwFx X-Gm-Gg: ASbGncud2f0QvSzYWJ/vy0UkhsYI7HVu4VzyYvyK5He+agdg1/UPntC+96rorUQTjs3 1ZY7arVw/Fd5dkzHD1MFqe996/6o7Q9se5N5QQ7PEiNl3p3qUSUy+Ck+JBT/8VwyfbzClXUEnA3 nrwQvZrgjLSD6hhErB76TnIfA+IAV5lAjjO+WpijebzvXdBKClLLPRE4VaAvUR8f6Gs0pd2rK9X v5gHggn9S3j3EDDX0LH8McddcbN03cCdMSwG+4R4dxPwa/xPEoNldOHK2jgUVMEjcrJ70wWXyYp 151IBt4zKMC2MrVALBCPeCDcSkwXAxCcXhAuagaSLYc4b1qCswDG X-Google-Smtp-Source: AGHT+IEFNbcnZf3R8IkyRTJKxfZ19fo6znhbgZ6oXmeQ/PdJfLfA9dofuZxxW6koajZc6kojtKVT6w== X-Received: by 2002:a05:600c:4e51:b0:43c:ec28:d31b with SMTP id 5b1f17b1804b1-440ab79f582mr89351575e9.10.1745835937187; Mon, 28 Apr 2025 03:25:37 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-440a5310ad2sm118825295e9.21.2025.04.28.03.25.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Apr 2025 03:25:36 -0700 (PDT) From: Cosmin Tanislav To: Cc: Tomi Valkeinen , Luca Ceresoli , Wolfram Sang , Mauro Carvalho Chehab , Romain Gantois , Arnd Bergmann , Greg Kroah-Hartman , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, Cosmin Tanislav Subject: [PATCH v4 8/9] i2c: atr: add static flag Date: Mon, 28 Apr 2025 13:25:13 +0300 Message-ID: <20250428102516.933571-9-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250428102516.933571-1-demonsingur@gmail.com> References: <20250428102516.933571-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-i2c@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Some I2C ATRs do not support dynamic remapping, only static mapping of direct children. Add a new flag that prevents old mappings to be replaced or new mappings to be created in the alias finding code paths. Signed-off-by: Cosmin Tanislav --- drivers/i2c/i2c-atr.c | 6 +++++- include/linux/i2c-atr.h | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/i2c/i2c-atr.c b/drivers/i2c/i2c-atr.c index e2350fcf3d68..721dd680f2ac 100644 --- a/drivers/i2c/i2c-atr.c +++ b/drivers/i2c/i2c-atr.c @@ -341,12 +341,16 @@ i2c_atr_create_mapping_by_addr(struct i2c_atr_chan *chan, u16 addr) static struct i2c_atr_alias_pair * i2c_atr_get_mapping_by_addr(struct i2c_atr_chan *chan, u16 addr) { + struct i2c_atr *atr = chan->atr; struct i2c_atr_alias_pair *c2a; c2a = i2c_atr_find_mapping_by_addr(chan, addr); if (c2a) return c2a; + if (atr->flags & I2C_ATR_F_STATIC) + return NULL; + c2a = i2c_atr_create_mapping_by_addr(chan, addr); if (c2a) return c2a; @@ -545,7 +549,7 @@ static int i2c_atr_attach_addr(struct i2c_adapter *adapter, mutex_lock(&chan->alias_pairs_lock); c2a = i2c_atr_create_mapping_by_addr(chan, addr); - if (!c2a) + if (!c2a && !(atr->flags & I2C_ATR_F_STATIC)) c2a = i2c_atr_replace_mapping_by_addr(chan, addr); if (!c2a) { diff --git a/include/linux/i2c-atr.h b/include/linux/i2c-atr.h index 5082f4dd0e23..7c6a9627191d 100644 --- a/include/linux/i2c-atr.h +++ b/include/linux/i2c-atr.h @@ -20,8 +20,11 @@ struct i2c_atr; /** * enum i2c_atr_flags - Flags for an I2C ATR driver + * + * @I2C_ATR_F_STATIC: ATR does not support dynamic mapping, use static mapping */ enum i2c_atr_flags { + I2C_ATR_F_STATIC = BIT(0), }; /** From patchwork Mon Apr 28 10:25:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 885924 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2BF1E26772D; Mon, 28 Apr 2025 10:25:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745835941; cv=none; b=mOQhSAI5EdmdxQA61hd0Sb9DUC2VF56cFS+pvINGZ0Byv7Pr44eq0hwFTf9BgeBsf2mze4lUNQHcmIxSJO1sVWFbCvJ9R9JeZfZKdzFU2hXM7y/r755mkkFWCEo7dOQKc0ClARXBYU5FV4p8IyxOJeNVRA2BrJ+syMJ0/slXT7A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745835941; c=relaxed/simple; bh=kS2ojk5mFcuTEOL5Av4Vkzo/0K2ukqo/hTTjuCtnp6A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YiUWyDVyGimqZdWyRYB97A+ZwgN1f8dz645nxvRkTN+LWVZ/6lXbMq8un4oiwn8m/1fKhxjoNSG+guGbHBnIK7xG24nzUY2D40iZ472ywZah2xyA4Y2oBjHZs2QlCm4P0CczJ25sQNEiO548jQVO8WsNoCtNFY0yOk+n66iVeIw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=CIjoUvrO; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CIjoUvrO" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-43d0618746bso33052345e9.2; Mon, 28 Apr 2025 03:25:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1745835939; x=1746440739; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=cjAprgRPYSxAxvUhwkUwVVhY0k0mTTyvi9RIp/BHqvw=; b=CIjoUvrOH0DVkDgM5KcM/jTWFjW0kqE2YYBjpmrlyvNIdIW+YNfj6MzjbzeI8CAgqf qLtcxnN2RsyPRq0pYdweAZxtol7ivEjugxBMnHyuvhRmaKd0JkW8XPpOx/VrphlrQwkO CGsBNx5m71r/cQPmxfHC/8Et6Y4a91xhytzvh8wApAmdA7e7sK9Wa3XDVL0mmqsISEI5 UbIK2oWaoPj8qvoFmN6lgZVH/6Z1pCfqWrRbbhhQbpHD9C1B29cqVEQX+e7OdqZlOUMz DLQLwnXInjK52//enYOPvAFgbrCSjDI6FxhcQ0qv9tedl21othXNh5TsGzPb6D7Ki3OM al6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745835939; x=1746440739; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cjAprgRPYSxAxvUhwkUwVVhY0k0mTTyvi9RIp/BHqvw=; b=tMdGgG7xFpOxlIg22YseQVqxgwt3Xz8uy8MLP1S4Z8Pb3LQQOEoOuydSDOrl6DJ7ob vkBy1B276PQ6HrNd08aYeEd6/Wl/RCv0A6TyLyudEbGYWNUZK6qxnBAYCJTIWSOyK4zK JogUVX2mdt4pm2zf2/P2xERe/fvzsLF/FvHuIAoZiSGjyFPLGTCXpbeXZYsp9ezNbQ9h umX5KT+xuUh8lvBYzMN160Tl+CngwxFj0W9AN5D7MxQ9YpGQ0G56hvJHEw+SzyDq5SNr golX1Ob/5BgokxQOktQil50wuNY+DGXJTgKPVuMF72MGazIhCPj1j/6sRbP+VDIDAIfC SpuQ== X-Forwarded-Encrypted: i=1; AJvYcCWRyddcg+q19T/EhmRpxi1BOW+xb0U2iMKUavU3tlnh9zdZ7WV6uLerMawM6do7HSu4xDgNWWv40KcIjnM=@vger.kernel.org, AJvYcCWg41IQ1juUKxc5ie8Ypn8ZSrnRQMZ4v4BT04qPZ0TPo4/cI86O1QhIFIby1zgRuQo7gHfts4ZSw0Y=@vger.kernel.org, AJvYcCXosWw080p3RokKwlInU07p3SwMGeM1txFSZkJmWvfFLQmND1JWKTRWWoXZxYCPwYs+/OlHhkyS00OAxZcs@vger.kernel.org X-Gm-Message-State: AOJu0YySCZmYTTdDNyjLJl20C6OnsNgEl9+zLv4BNhfrV48O4Ym/TPh7 ZbhiX52X7ZPNTHJ2PuD1z/e1vT5kJLCqpoYTnZcta1r/WLxlJt2j X-Gm-Gg: ASbGncu+x9C31mqnUVFSMWrV+k5NZ25o3O0kKm1/oBzY22nXJ3Ca6tuLU87JZk9vFzf RlWnQz3ggn/4rL1v0HRY4mCyTnpzPCor3pOdZ0z9rR5ivo9t6KFZBys2hQ5POTomEYA7hzHaMUi MDv5pYdbJwGEfi3qKLTaFRsWd8FksuiWlkqOeMGyELsNOf9GKhEBNNAO8j4iXBJkbbnOdo4/emk Q5W3k4SLqmaPLuO+cpOClDmVuAbuWjjd0wqinkRC9Xyi2HEcdAL6GD5klFJg02s4n3UAoKOFPaY /0TeBW6uUlcRhfZfWPiiHeszgd3jmV2UM33Uud3Gh0xBH/BfhVJn X-Google-Smtp-Source: AGHT+IGf803XhAxyWvzPOPB67XfZ8fR9gRzbDLwOjSE9C/XNYZFv05wocFOc4tpdshofY79Pu6jGbQ== X-Received: by 2002:a05:600c:1f91:b0:440:9b1a:cd78 with SMTP id 5b1f17b1804b1-440ab7b7969mr86232935e9.10.1745835938636; Mon, 28 Apr 2025 03:25:38 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-440a5310ad2sm118825295e9.21.2025.04.28.03.25.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Apr 2025 03:25:38 -0700 (PDT) From: Cosmin Tanislav To: Cc: Tomi Valkeinen , Luca Ceresoli , Wolfram Sang , Mauro Carvalho Chehab , Romain Gantois , Arnd Bergmann , Greg Kroah-Hartman , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, Cosmin Tanislav Subject: [PATCH v4 9/9] i2c: atr: add passthrough flag Date: Mon, 28 Apr 2025 13:25:14 +0300 Message-ID: <20250428102516.933571-10-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250428102516.933571-1-demonsingur@gmail.com> References: <20250428102516.933571-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-i2c@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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 Reviewed-by: Luca Ceresoli --- drivers/i2c/i2c-atr.c | 7 +++++-- include/linux/i2c-atr.h | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/i2c/i2c-atr.c b/drivers/i2c/i2c-atr.c index 721dd680f2ac..eccb85c34609 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_F_PASSTHROUGH) + continue; + dev_err(atr->dev, "client 0x%02x not mapped!\n", msgs[i].addr); @@ -486,13 +489,13 @@ static int i2c_atr_smbus_xfer(struct i2c_adapter *adap, u16 addr, c2a = i2c_atr_get_mapping_by_addr(chan, addr); - if (!c2a) { + if (!c2a && !(atr->flags & I2C_ATR_F_PASSTHROUGH)) { dev_err(atr->dev, "client 0x%02x not mapped!\n", addr); mutex_unlock(&chan->alias_pairs_lock); return -ENXIO; } - alias = c2a->alias; + alias = c2a ? c2a->alias : addr; mutex_unlock(&chan->alias_pairs_lock); diff --git a/include/linux/i2c-atr.h b/include/linux/i2c-atr.h index 7c6a9627191d..f979b931ca05 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_F_STATIC: ATR does not support dynamic mapping, use static mapping + * @I2C_ATR_F_PASSTHROUGH: Allow unmapped incoming addresses to pass through */ enum i2c_atr_flags { I2C_ATR_F_STATIC = BIT(0), + I2C_ATR_F_PASSTHROUGH = BIT(1), }; /**