From patchwork Wed May 7 12:19: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: 889264 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) (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 B7CB9205E16; Wed, 7 May 2025 12:19:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746620367; cv=none; b=jx6OglmNn9foxeI+bG00N9H97mUy0gIFBS6n4vhdAzVUM+6m3YoES/0RMwWZgcmNRJPzxCfAQkRJpvG5dQrSKGzUD6dZTC7mZRcdE6gGbYpdYYdMR6Y0/XsXTumz9LZQIj7U6NnbxpuGIkhqy+Jvz54B+N/jX2w/YPOC8COPkKQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746620367; c=relaxed/simple; bh=3gVF1lX7le6pC9qL/xludvguDPB/+59nmF22f1RsYfY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GUekNgoX0C5bNoLqPTgAt+t7QjU1eZf4WMCU9R8GZhrv9hc3i0stNOKUCnxmMBz9lwlVoFSNVo3PQozbD7niB1zCKv+vidILBJjF8olRPLL5IYKjjbu8xfRMXT6K6xPpMRyiK02fJpoKUJyeCkonCNv5d8mlrerPJmooA//fsfI= 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=EUCqFRiE; arc=none smtp.client-ip=209.85.208.48 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="EUCqFRiE" Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-5fbe7a65609so1820559a12.0; Wed, 07 May 2025 05:19:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746620364; x=1747225164; 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=kF54rRa/C7kGgfTGWwCwoyh8mPZsRmdNv74zpR8PhVs=; b=EUCqFRiETYfzrf+LaIf8kt7wr4aX0sM3VriZpGz6v05o7qKCNETgbcoJVNJ6QM6vz0 AJrfcPe31eZNayxbQCebd5IDQW8PqfF5z285w6EaxYg1n+9fA0NHou+elVB0moTSSMrc 7S4ur1/nork3cSws2q5ZFnQV0WgWWu7g9jrEfyudBvyM1bqlssU/c8fBaUYYcZRdeXI3 xPxKePDAK4/LCl+OBs+dv5uvHwDFN08zvoo8idswaZu7DWknshHZFxgvj4+FT0KquN3G viQvUfZ65wsg7fRXTK24eZbYdNspz7gbIWw+RInXVtayO4CpT42Iq4aZHML3N5UZnWHr pfgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746620364; x=1747225164; 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=kF54rRa/C7kGgfTGWwCwoyh8mPZsRmdNv74zpR8PhVs=; b=sIUM/+phIPaEpUQhDcJ0lnEeIQtrUx2jus0FnRVwZLQi4xE5DLnDHFkm8w0WCoKFjU 3hdKUKSnm5lNZI8JMecTinRAvYocEwVsbR6czau0VeUra9QbVuKlzMVpFTtjjROExBTB zkNPvglDboy/XKQhbBEzf9KpEt2VXnsQXyoQimEqyFgCmoz601SEEOJagt4cATjWgrPV clVSu0hsEeOEc7pPbB4gCU2x4ouKmg1FXrYWuT4jX7kvQS46UrffWT/DCPg3f1JWJ1q3 G90lsWoXWxsA/94CevtAKU9b+UoHX2J4zK3FtUw9Tj8iFwhCwbNXIDnueQwoPVB6B3O0 Wu6w== X-Forwarded-Encrypted: i=1; AJvYcCUJ9vAdXqHmH6qe/PcQl9TJwvgEGhB6LUr0Qs1vJ2iD8bWhtiAc9C3KJfM2mVFuVZNX+YZtX6wlXSo=@vger.kernel.org, AJvYcCVR6Qvk8DVRwQbcTciTcPv1S/tQOCydIq7k25l4SbvguthkKwE7My80o2flJx1uu4tkzNOd00JUE9dZGrlr@vger.kernel.org, AJvYcCXK6V6KikdROL2zYjZbOSHRWgvZKD+NVPp2UfLtt7AZ4yUWjTt6lnqr8NLOPo3eUKquAwl0jL1Kps15IUM=@vger.kernel.org X-Gm-Message-State: AOJu0Yzzw6Ma/Cj1KLfnT0TbFoUjXSEyzKZcmtA5KLu6p9dS05s2/Tpz 2E3ZH5Ju12y57QdRSqzSoNNPUBCoM18o7Ewu3vIVU98VzuFUQNRt X-Gm-Gg: ASbGncvaTMGg2jcC/wAnoxPxGIJZBjCDzUomNRfvVGvOVSRzKtI+JnhoOMOXLyk2jfs SDTwy9jFHa2yTIBVk/GX21cFTc08YMMNhJCHtM7+gxj3SV6GfNfwMkSB2DMrEed1S+jiIvvrsaX Mu5Q6OsVZunR5/2DprRWV1f4DiWU6C+PNXMoNM760S/5su2kNRvp+rxLduwjJ+qtLyzAmkmRIJ9 mO6C3mnb6kq9n+v67dd+ETNd4JmkaEI149QYWm2acgxEe6p0hJDgLlMf4Tl9DzGcZPClPo9cg9n F8KJj74e+GGQbUfK1KEDRCJi6eKD7XBKjLOsRhsmLCOyvlxjceMU X-Google-Smtp-Source: AGHT+IHHZ1UisxTWGw2gOjObSZUMxItcdcaL5HZ72vB3SnYFfsvgrS76Rn6kKlrNhzvngRLwVYn/Ew== X-Received: by 2002:a05:6402:13ce:b0:5f6:c4ed:e24e with SMTP id 4fb4d7f45d1cf-5fbe9f3c567mr2966906a12.27.1746620363835; Wed, 07 May 2025 05:19:23 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5fa777557b9sm9350002a12.10.2025.05.07.05.19.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 05:19:23 -0700 (PDT) From: Cosmin Tanislav To: Cc: Wolfram Sang , Tomi Valkeinen , Luca Ceresoli , 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 v5 1/9] i2c: atr: Fix lockdep for nested ATRs Date: Wed, 7 May 2025 15:19:07 +0300 Message-ID: <20250507121917.2364416-2-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507121917.2364416-1-demonsingur@gmail.com> References: <20250507121917.2364416-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-media@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 Wed May 7 12:19: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: 888402 Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.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 3896225E46A; Wed, 7 May 2025 12:19:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746620369; cv=none; b=H0DzN6teLDPvv87Gh5GA6kZwgn2tipz0j6dHfO6uirP8f65K8M2qhWlsCMG8QgKfo3IrB+RjRXAuNiAGqiVf8qeXrJHLoxjyVivy7dwrUzd6X5iGOIFKwWXSAPzy8oCekk4cqcEBqv7bVrt6N8Og34ZXu12JZpgCCWaLSDx9KYI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746620369; c=relaxed/simple; bh=Z+tVSftXwckDmiKqRv3bbROINZNt9Bt3KdI8yT1ZnpE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fMjxCqqxe8hFfeZd+nVjrFbqj7/tuhajSFsQd67bvI6vuXeRLrZmKq5srLloaSjXICDxZHGqTkSgGxacE720bvlARSwrxu6CIg+EAK04tIltqnRvhd5zVqHPbNSMfYipnmQZN9PwxTEJ2rYhApWNvjozqGDY5m028MlH4t86Or0= 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=fMNtY8eL; arc=none smtp.client-ip=209.85.208.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="fMNtY8eL" Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-5e5e0caa151so2568370a12.0; Wed, 07 May 2025 05:19:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746620365; x=1747225165; 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=5XbduvruUPEUAj/PBFNz8Mdx99O0o/ram7Wa9Kwv82c=; b=fMNtY8eL5XWvWvDTmya2DZORLdwftj+6+/RTfNNqQSkdqD0Vw69cXTh1kH3fNMh7TT uE/bWoGtK5w1xpZTAaCJ/4ulqFwAu1PDJx5PfQRPmtnbUexEMHANXycQHpEkopJ1/eEC gw+gcml8MvSZWZMMC4tB0PzXC57VrRN8tlvOg1ToFSU5ST6k1X7PU2hK02yGz8LAh1jP EMzSfcrrhLUxLxqZI0IRFI1f8hxYxzpN+krHtoLfRcwR3oCUuwjnszGUljPQzRDpQH/G G7TFvdEzfGyMdFWG9HsCxTI+Y/vRaGb2l0QrxsB+alzawi57cgzjxXieLBsDSWBr/hqa CTJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746620365; x=1747225165; 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=5XbduvruUPEUAj/PBFNz8Mdx99O0o/ram7Wa9Kwv82c=; b=Z3VQmhEW6nwVeYac77DZ3IUuJ2/kNm7kZs76Vs12/VnGUhMnxpxrLWTaHom19PvOSC 9UeKXdZKdh5CtAJcYBKsMtue3cAwEkisPT9QfBdSDdN+JqJMTTKLagjRq7O8ANT4wqyK QyyRogggttLrPSyvFdcIT+dOGdM5fRtgNNHmddwkWUk+0aFDvkUkiP6lLKbgGLX0KNX/ 1N6amb0aJfy+9oDOAmci2DOK0dOiXlkSWom+T/s7BCx2DNguuyV4nZzfJioAy0xsdK79 S/4jNGBaMHkU1JRtWbLICiSF8SrRTHgKcaJib7IQEb/V2rAseEl1akbTBtZ+50PWaZKt aRyA== X-Forwarded-Encrypted: i=1; AJvYcCUZJ0//CE/XBzUqIeH+iYYoFcTQ24wfCtRnpmlxo4FWG1SN+GYUnK2JeUJD6lRMrYRDp70qg+f1iSUAPmZs@vger.kernel.org, AJvYcCV7opDyomQg1Ryhcu27QuOivfM60UdkmFoOXP76t4R3+2Gq0HFHSrrb1rNDh23ayLyoNt1TkGltGlw=@vger.kernel.org, AJvYcCW760v7061vDE/XvSxndnE4v2J0V5C0JI+3rWfiWLhm1bm+5oMAKKt3HeUJpwF4h1GpUwQCgjJnpGP4a6Y=@vger.kernel.org X-Gm-Message-State: AOJu0Yw4MseXrcua2PDfTDZIniFsn6BTRcSdoj/Ur2C3+QaBPPJDJu7n TKeVW23+1cL4OmVkuKv5gD4vbuBHgOikIpDKEqxsMoX14WhHmE5v X-Gm-Gg: ASbGncuMwM9lhpmBVbYbHpilyhym5jSy4UZBwpq8RZMYqS8QPiK+H4XaOvwkWI9rikv 1fAm013DxS+4PEhByDtEKRuYlJcsSF2G1eZ66thMeg/BdwkHRONIqVe73N0bsoaYLlFpbSuTd5Z Fm62J5GSv/JR5WhW/GLbCmJ5cHLyq3qGlsypd5x93vrxB6LLp6uDtrhHRMk+fOYoraAqpBz2pzm x3ScmdwLE0MHUOzJen6SnNJ3ulTNnTkyRkjJXl4ZUinAqFxiTUUUrDKtgDstbbWc8lRSZwh+aLg xXsuwv7eXFQ8ni1Su4ZgbYExxa2mWyakMA8HHcQCsRyajkb+tF8d X-Google-Smtp-Source: AGHT+IEZpzoZE1uIN362rCbRLMB2kpdi6xmv0t+LFOroEHGSDg4Kxu1XEY+MtkIZr1FXwDzKReIDhA== X-Received: by 2002:a05:6402:1d54:b0:5f3:fad4:fa75 with SMTP id 4fb4d7f45d1cf-5fbe9f81559mr2971623a12.32.1746620365327; Wed, 07 May 2025 05:19:25 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5fa777557b9sm9350002a12.10.2025.05.07.05.19.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 05:19:24 -0700 (PDT) From: Cosmin Tanislav To: Cc: Wolfram Sang , Tomi Valkeinen , Luca Ceresoli , 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 v5 2/9] i2c: atr: find_mapping() -> get_mapping() Date: Wed, 7 May 2025 15:19:08 +0300 Message-ID: <20250507121917.2364416-3-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507121917.2364416-1-demonsingur@gmail.com> References: <20250507121917.2364416-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-media@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 Wed May 7 12:19: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: 889263 Received: from mail-ed1-f44.google.com (mail-ed1-f44.google.com [209.85.208.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 B2E5B25E830; Wed, 7 May 2025 12:19:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746620370; cv=none; b=dISbYWbgToWOg5qsLF3LnVB64aW1BJwrw4ktXNzik47ia6ytBpV4T1mlUzOL7+5uz3QMRUwxiRo0jKM3ioxd9MJ11llmGGbmkAq6j92ZXt+oA5+6CU1/HBo7UUCPSQzFKeeqruzhBJ2otWxqwano344KWB1jXFt7zpY8N7wldFs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746620370; c=relaxed/simple; bh=y31c164//hMoRMj4bwFFX6K1nZlMX0bLwVirQFOWUx8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OVjemuTvSqQXlYct2TWtAxay1QM7b8QbdvnCCe95p0r/Ch60d8jOY51wQVjJnYqdfQRVzdKxaRdcMgFNVI7m7fxEY1FdfrV24e2cpt8PydtAyYSlKMj2UN/adtq3fxThY3SWqbHdd9qbcamTwa8LBXlOKZEMR82lVSxRRrOLEvI= 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=U0N/H+w7; arc=none smtp.client-ip=209.85.208.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="U0N/H+w7" Received: by mail-ed1-f44.google.com with SMTP id 4fb4d7f45d1cf-5f63ac6ef0fso1775797a12.1; Wed, 07 May 2025 05:19:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746620367; x=1747225167; 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=mrRU6Pf/P1bThTd+6V5PvGeSOBGAjbmMmA+OOg2zIk8=; b=U0N/H+w7Bv0ym4jmZHPd2ndtlIWeFKciUmqqhebIowjyPA+1lG9yzk9FptY0OiY1H/ is5rN635pdtjfnMp9NBocRdwhFQG2XZ5H98+jYiwV2f36jKox4pZOlnx7ZxS8yXsxRt+ TjGA4QzTdCtFGmXrr19Z8XZZ/WAJg2yg8aCT7GY2FheFdK9qLFcycQuj2dthh9vfDRJC l6LiiCA+8Ib2RianoOqNGWOJOmy6zVu1GJXFWsHl4GDpFPxcrAMlWgAXOxvKlgK1sn20 RQNUVIL69YWWghvUuv5issg7+93PrMm3/RfKl4qGK17YOd68If2o5pj5KHWff2xsRN+a 74Zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746620367; x=1747225167; 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=mrRU6Pf/P1bThTd+6V5PvGeSOBGAjbmMmA+OOg2zIk8=; b=BKmH2vxFwoBU25WG3siyttoAr2PQ8GtN8rGV+5+srcBXGVujD1Hovmfw5NCAF3bNtt UJxY+Ifoko8iXcQFMzxaCwRB386Gd6cKIsQSA16e0RhrfdWUXNE88DhSPcRyy3WgEaTs wSFffiJ9bXq2Jb1VF1M4avqe15nW293Iz0foJF7JQ5s6y4E3YNza7dlsAwjf1U016A9M tXua6wDEc69AEk8YL3tdlE4gWVuhQTfTuLsAwBYJmfgiUk32s0ZW0yFFXTxnSedXtFSM KS8At/JVfFJvQpDz+5OQ4vyTGCzoTf/ZJSR+Ti/YXNty1OvBvoUodKhPkiIz3FEBJ3RL mzTw== X-Forwarded-Encrypted: i=1; AJvYcCU8B5qqz0k+kNTZwwEyIxJgXKtBhKGtzodxet8TcSY/BcjDqDa6gqMpyIBz2W7mBrvXsFzxENc+bhs=@vger.kernel.org, AJvYcCVQKZc8ypgYKF9Sj6vefmAtNwA3sjGKt+Lp6LK/toe6fAf1Xk0vVq35hsVKzXqXVKhDrDwaIAOFBGeJxQtE@vger.kernel.org, AJvYcCXSeRhrlKuWtrK3l2hx6RpaMB6NExAwFrcJD1ddun5MwyEPvuHgGGno+Od8mYtTt4QgUwcwi9iRY+GidO8=@vger.kernel.org X-Gm-Message-State: AOJu0Yw4hMy7NTUDsVrqE8f3wI+B9SvQ1vQqyWVJf+9IXMOy7F6qoD+k qejEZEmPD3S6hnrhBnJXtWFRtRw8kJ94nX6c1ikXSd44DPI6jydw X-Gm-Gg: ASbGncsCneEOVT0c9dNp4Xc2YNNYmYV2xBZcMS37gqaG+wp7hT3J/CEkga5e/TzNZzh effYxqrgLVZlwnZ29LwqWlabRPvCvoaGjQrMKoPrSKjkFrykraqZKY80NXrXAoS29I2SseOQW/5 oXntomi2RmUe7G379z1r4cBBwRZJo4zCCzR7hagx3WqaMsZaysKHuPt8E/OQ7anWycHsUCRleIf 28y9Mqb+2FAVfmcxKvSJFGy2rebCMA7f/nKNJAQJO8Zas2E3HdyS6xyO+qPVtDVF97mwsds6iJs 9T3Jz/0zPEBaTrktNNfB4v+wyR+cJhej9c3YlLgClsClOwMtkFcn X-Google-Smtp-Source: AGHT+IFIJc5xU1Unm+agSmBC+K37E72qe4SuokRlUVPAh6NESxpxRoYFKRESXNTMv2a66Z/L4gRzcw== X-Received: by 2002:a05:6402:34d5:b0:5fb:5be8:3e2c with SMTP id 4fb4d7f45d1cf-5fbe766e7abmr2764976a12.9.1746620366664; Wed, 07 May 2025 05:19:26 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5fa777557b9sm9350002a12.10.2025.05.07.05.19.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 05:19:26 -0700 (PDT) From: Cosmin Tanislav To: Cc: Wolfram Sang , Tomi Valkeinen , Luca Ceresoli , 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 v5 3/9] i2c: atr: split up i2c_atr_get_mapping_by_addr() Date: Wed, 7 May 2025 15:19:09 +0300 Message-ID: <20250507121917.2364416-4-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507121917.2364416-1-demonsingur@gmail.com> References: <20250507121917.2364416-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-media@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 | 122 +++++++++++++++++++++++++++++------------- 1 file changed, 84 insertions(+), 38 deletions(-) diff --git a/drivers/i2c/i2c-atr.c b/drivers/i2c/i2c-atr.c index 939fb95fe781..215b6773fe06 100644 --- a/drivers/i2c/i2c-atr.c +++ b/drivers/i2c/i2c-atr.c @@ -239,56 +239,40 @@ 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_create_mapping_by_addr(struct i2c_atr_chan *chan, u16 addr) { struct i2c_atr *atr = chan->atr; struct i2c_atr_alias_pair *c2a; - struct list_head *alias_pairs; - bool found = false; u16 alias; int ret; lockdep_assert_held(&chan->alias_pairs_lock); - alias_pairs = &chan->alias_pairs; - - list_for_each_entry(c2a, alias_pairs, node) { - if (c2a->addr == addr) - return c2a; - } - 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 +290,68 @@ i2c_atr_get_mapping_by_addr(struct i2c_atr_chan *chan, u16 addr) 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; + struct list_head *alias_pairs; + bool found = false; + u16 alias; + int ret; + + lockdep_assert_held(&chan->alias_pairs_lock); + + alias_pairs = &chan->alias_pairs; + + 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_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 Wed May 7 12:19: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: 888401 Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.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 A2EEE25F79C; Wed, 7 May 2025 12:19:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746620372; cv=none; b=OOmOGGQF4PXJ9STx9wLUzLjNMAJ5snNMBBYt48mF8wMoBWNxK9S1nTn0OHdtzKtYomBzQSGw1HqcWvJGZLmpBxP/0CuyZeFmo5NLuXyYkywsH9ogXkg10S1a9Cf8RBk9B6c2Irnshh9zpSGPpnCqUJT5iKvLGAIXp5bLkLr7mhc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746620372; c=relaxed/simple; bh=lctrcFQ6u0h5yUi4JGVq1rQdGkWFCwASe2sFOWRpklY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pilLPCHwj4E4R8nE/flXiqNP5QmkF6Ru7ykVHPAEJofhtSo0b/+hNEXLRadgfSBFPsh8wo8QMY+kYSnbIhoqjJeECJCjUErSlz2g9ZteU8znxfoouapCq/pbgFgLWRwHF4OsElWgl1e3oNzEAROqEuRf7KD5Rm7u5xyI/ROR9RY= 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=mUFJBmJ4; arc=none smtp.client-ip=209.85.208.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="mUFJBmJ4" Received: by mail-ed1-f42.google.com with SMTP id 4fb4d7f45d1cf-5fbda5a8561so1907612a12.2; Wed, 07 May 2025 05:19:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746620369; x=1747225169; 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=h9UBtmB9zYRXrNN2sqjqR5grKIOrEsHM+Wf3UFhuRp8=; b=mUFJBmJ4MR7E+qOnKpVXoSzLuQGpobi1y/TCQj5pPeGEAocnAY9rD4Lwj7nfZhQuGb t0lzc14Eo6BSc+xtpuHD/gFmP9s3dHn5hJbp6ngTkCxGkKMCGL98lz8gb5wX1uCl7fwU dLZRRpZM8LrWrjDA9SSWYBi/ajuJiKotntMPgZ91I7kzszVLb7o7MxTORCvVD9YC8LwR /tzXQcO3oTImyniRoxZXhklIrMp+zZX/ZXpi34AsbDtXQ8QUVraeWZc/KTd28k3RBWQq t8xxppHFzoz7MkjJhcu5mcQvCSvu+1galVvJfE2JS+cj0JJTasFunu2BdNfpOi3VRu2u nM1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746620369; x=1747225169; 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=h9UBtmB9zYRXrNN2sqjqR5grKIOrEsHM+Wf3UFhuRp8=; b=OxIt6DB3hBNhNEUm6Z2Ygqkz16MgIon1yVwKHSyjII/FfPhr5/F3mGQIrEkUhwpAyZ DBjek+iS5sSlnkfEJQ3cufzS40kxlqPCBbNl58GUGMhHVarEWGFBklEkFKHfyy3xJziq zA6LrUUvT9JChTFkRkY9brb9SvS+Tz1zGV8OOBomLMXw28eYhT5SeIpib78pdnprSIws /6n0uP8aaZIP3QCWLOBAgBHjx5kOqCdcNO81x+Ur3eJJZzXmFcKxMCkB4GbSbaG61A8h LwYahJkOW1BTXw/0o4zSV3hRC0LzM3mfFtNqnIxMI7O5MWQRIginu7gceWvARYD55GK2 IwXw== X-Forwarded-Encrypted: i=1; AJvYcCUs+N6+G3V+Z+bULwgy1o8T1ay6hDoRU68ipGivEpuTTTkLLje+rPzy+Aio1nZAxJyrb8I27dl6RiOo3JWc@vger.kernel.org, AJvYcCVDc/cwTMLNjyIiwVcWSn5BfFHz8/rdp18QRgCwtxISVTTu1+j2497jgPaDAIkAfGQz1B8bOAGB7zztKqc=@vger.kernel.org, AJvYcCVXKjK0wxsLaR2gQjBmkrMypLPLzMkUAW8M10zKkpdUdEW+IBMnaOA+JccD/1nWlaBh7GsCG9ntUCI=@vger.kernel.org X-Gm-Message-State: AOJu0Yxa081eEWUJM86W4oZduzjFeAjAxCoPQp9SZ8HckGcCaA1z9X47 WCH3/DvBYTA/sDE9QYa/ZfL2jsKR7K46PSxi7aM0xSvyLOp12CH0 X-Gm-Gg: ASbGncsB+jp2euOXsec3Rnjzm9pu/NQHq3m6kjnKWlgMgVTN2+vjX3lqYQMzqLau+O+ 6+U6/1A35hiYZL35Qiq3/9J5qfJHczalA3D1I4WSQhrdzc/KWrHi+rw0V7yEZi6E2feT35hfpuT p9Q7TcPKqXx1Kz6tSPkImqlaLD2UeZzcHaGlcAygnmYLtAFPm24FnTNY1IbawIMX1cjComV6m7H XB2onUFv8IcF4qZRx0cMy1+j6Ng0bb6GfCo6NOxJX/smrY7NvcjWtagNGgR1qTYuRKxBjHo6jjU U7q9XWHxeo+Tj+Qa8+EfXUc9jU7/8D4jlhTVT9ijvRmWG58L/8bx X-Google-Smtp-Source: AGHT+IHo8QlU181o7K8+pmDxKCcN0PlkDif/QNKIrYLyBMZRtuBLcy6gkM3KLxlckajlARtewvq33Q== X-Received: by 2002:a05:6402:4341:b0:5e7:5b30:3c4f with SMTP id 4fb4d7f45d1cf-5fbe9dfbeedmr2254052a12.14.1746620368727; Wed, 07 May 2025 05:19:28 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5fa777557b9sm9350002a12.10.2025.05.07.05.19.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 05:19:28 -0700 (PDT) From: Cosmin Tanislav To: Cc: Wolfram Sang , Tomi Valkeinen , Luca Ceresoli , 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 v5 4/9] i2c: atr: do not create mapping in detach_addr() Date: Wed, 7 May 2025 15:19:10 +0300 Message-ID: <20250507121917.2364416-5-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507121917.2364416-1-demonsingur@gmail.com> References: <20250507121917.2364416-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-media@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 215b6773fe06..178b203c8777 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 Wed May 7 12:19: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: 889262 Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.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 BED7625F996; Wed, 7 May 2025 12:19:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746620374; cv=none; b=RiKtWXsdsr7IYv5/X68xYmwjqhUH8bypFjcAcLpjsT5NUEGlXHkNEZ9NwNfo/EmMBsQ3sXzCeOumgIfkla5MnlG1+qP42EGVk0XSUvV7ozWPjSoWYhiLusEF53GvBmZaVFov6rvlyi7MRExZGvjJBuk+fWksrFvskCiOxLdDQ74= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746620374; c=relaxed/simple; bh=xdQ82gGemJr1IKvKrbJ2QMrqcxyvWLY/s332uTcfUmw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dPLwN82ainHiTvl0pRWgc2suvk6hHHz4eNUefUmRq6qsMneioRGBDlZGVzZEs4ddJ86v5RrR/Tj8+NJrrOjiE+sdyJQ4O76qqlAtB5r9DsZsxfYVZ/XJwF9e2fOsF5ydkAbYOrbAm5UVO7qa0VljjFBsxQHgkg/XX8wWLvBNC4g= 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=IQMgKwu1; arc=none smtp.client-ip=209.85.208.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="IQMgKwu1" Received: by mail-ed1-f42.google.com with SMTP id 4fb4d7f45d1cf-5f7ec0e4978so7767394a12.1; Wed, 07 May 2025 05:19:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746620371; x=1747225171; 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=bhvHD8kwauiST7C/SyOHrSilHwCFK0vC3xiPchPq8NA=; b=IQMgKwu1wGIY4j6LElUo5i7LpH7FM1JjIlx5ChwcuYfyfSTXjMJMuu35SrcnTSMRqM wlI6JXVMXcCeA9WAmkXK+uEM0+Z4/dzMpMpxF7j+lls16EFy+OzxZP0Bvq/ZA/B/N5TH Rie+wQ2Hw/6YNv+z0xL4fCz7+GWPuBrTvP07urRrngn+gR/cV52RST7thkdSC6khxFZq LfJEnM+CpOlwsb7TRexSnchz/Q47wTJE27huf5Bf/0LNwzKfAyCP2jMoIc5YR3xNYW+D 1Fgs2w3Qp8+ioZc4HG4MoF1thAzNqqzTwn6qFN5b/5zTP7qRgJo4rS+Ag36O73+p0A9T rQEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746620371; x=1747225171; 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=bhvHD8kwauiST7C/SyOHrSilHwCFK0vC3xiPchPq8NA=; b=Nb9EEz5auiOsllhtJC1sPR+nkrI6Vv0NDcf9oTsUGmxQViYZGiKzgczbpBgXWkEX8o d8qpLN7T8oQUHUd1b84p+kq5EcL8ob82AtHQoXOnKx2Euy/3YINvT4sjElHP9owSy685 q08S1kFJpgcT2LpsaeFP5ilrmKeaMUwPSCbzDbC3R7R5YpqvFHn0iNKXUl/iJOijF4E8 TSlBWjyD0KYS2M6iX5xwU4g1dp4pAFYPviJL1GxYoieiNZmoOinUyR+WNNoICRicalPR S3b5V56J1ObBqKua5sxo5a7/DCkKyByzMbTIoCPz5vOnkoWgF2DzobA2zstnxdKGIqrs ZENA== X-Forwarded-Encrypted: i=1; AJvYcCWPGo7GC1evq8I2gTKKJG4myw+b+NquAEXSTI9KINgtRZg9G9JlWZcwkR4ns2ggDgk107U9yCoLUyxIsz4=@vger.kernel.org, AJvYcCX+dmGLV5JUSfmqyX/f93HbSuJS1Ao2GjWjG0BhVX44H+YGW9S99OH4KV3VcW4LOrIHm7b5TtBBpQDkysl6@vger.kernel.org, AJvYcCXcwacX9rSKZCQjAkL/iqh99luwcLn3VzkGDFjm+5JFkiTUpxl3yseNP3ga6nGnYaWQ/nwxY5kgg5M=@vger.kernel.org X-Gm-Message-State: AOJu0Yw+bLTK7wO+ibvdDm7GZvF6lVCdXMCMFbmi78fa3JDfIXCYt18K bSNwu9ug+vPmhGx3+DP1tYrOGq9gXRB+3KorZB28oG7fPaBoqeoQI2LI8w== X-Gm-Gg: ASbGncvHmGr2cSlb7KW2fkcLnVWhLzc3IorumpGang73QRpxsfUOUGACn775g6rq90B pmPjx3LuTgbKcb09/a+VYk5qY4vplra4j0l7kZpyIhwR9kMDj3+33yOADEKrwdQuHoUvzc73oei yYG5w9b9H6nrsOwF1VSFlu38eyHbITepBaHKSTqUaP5O1yDGIbTLhpQT2rfpTthYJmMiseYoIAz qhsesU/XM6CANe7mntv0sgmX/oLnxrj/4hJ9deGNAHcxU93jxvlMr0eIFWctenjGjqASSNn3NHn hi6zYmJqqDT1eAgqg4yGvB8yaoiCsTy7PlwOalT4Pi25Osa47k6X X-Google-Smtp-Source: AGHT+IGGroLXZEK0/AsAn75xHrdlHzx76LtjWKt7DEFfQTsNpsDC7acgvYNZrfAmH5zGlgClKELL9A== X-Received: by 2002:a17:907:9814:b0:ad1:8dde:5b7a with SMTP id a640c23a62f3a-ad1e8d055a7mr283204266b.43.1746620370865; Wed, 07 May 2025 05:19:30 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5fa777557b9sm9350002a12.10.2025.05.07.05.19.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 05:19:29 -0700 (PDT) From: Cosmin Tanislav To: Cc: Wolfram Sang , Tomi Valkeinen , Luca Ceresoli , 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 v5 5/9] i2c: atr: deduplicate logic in attach_addr() Date: Wed, 7 May 2025 15:19:11 +0300 Message-ID: <20250507121917.2364416-6-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507121917.2364416-1-demonsingur@gmail.com> References: <20250507121917.2364416-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-media@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 Reviewed-by: Romain Gantois --- 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 178b203c8777..ae5c2ee629f0 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 Wed May 7 12:19: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: 888400 Received: from mail-ed1-f47.google.com (mail-ed1-f47.google.com [209.85.208.47]) (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 4665E261581; Wed, 7 May 2025 12:19:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746620375; cv=none; b=dKGTPnVK/KIjghe3ybKxa8veDjJ94d7lC6x7gqaU5SGtkRmMQDBUALPBcPCR9e1se8CzGwuXTX417hksCl650SQFAKVb19lONgzjruZBX6yatZyw4JVBS/ulIcq9ZLYQ665JVKs5wNDJiiFZ3rvxgVieOkTyuaWjGCclqgvYTGs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746620375; c=relaxed/simple; bh=X3YUS/ie8/5FFQjnr03A2xbiPiwtHC++WaH/577C/GM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RhYcAjjnKRExPatima43DAOW1Wmt/U79VY2hUd2YEvPBCCZcgcvrE1n/+xwwCUCJe0bxUHDLUkRWhJ/OCLkNKAxXKI5UPJ9Wj77mSa/FPThy47QQcjQ+h+XYqZNu6HQDho8x+fMpDYRdnD2vahWv7I3z6njRVzfJANVzFJz4hcc= 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=mShRjFcD; arc=none smtp.client-ip=209.85.208.47 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="mShRjFcD" Received: by mail-ed1-f47.google.com with SMTP id 4fb4d7f45d1cf-5fbf0324faaso996392a12.1; Wed, 07 May 2025 05:19:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746620373; x=1747225173; 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=Hum8qy+jd558PCIht5KO1+9qi0uHpfr5Dfjd1rYbB/s=; b=mShRjFcDo0ufBOioeu8rtm6Ypwxw3O/fs2e+9jajr++RmcVqwwcm6k+D9rWss0z9Yf xeKWTaLRZaZWqIvlcQcYZNMwlXe2vNyAFYWpEh/WD/X6W2oY/tvsiOMGU7QgpBJcTDGQ KgKdzmD/H9LLvux7fExkJxW/6diH3DG0SBx36WQdOI5NnQGnkJyoc4o32VMevaegInAh 96Qk0BtE2/SKP/NETn+2eWsOmFBcbWkMjJG9YadM3lh6RZOuk8vHd+ajoHq1uwGQ5ek8 KqHGeCpEGeQ71u5jQ6eVDOA3be3iDpKvAt29BURuLfMnpidMe3s2QTFw3XtGFuOS9PP/ Ib4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746620373; x=1747225173; 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=Hum8qy+jd558PCIht5KO1+9qi0uHpfr5Dfjd1rYbB/s=; b=Lr9Y5Ww8ODJ2PxnozhIHZ0JB0Zn3FAxh3aYFLNusaLHtHVDcfIOvSN041axAFv0lag mvFnsDpxNZi9xxvKpUuwF3I8olm2aTgYkIKNPYJ068z791srcZvxdXoY50VKj/7/QRHQ ASwwu85AY21ppXLji5z0KV1c5JYkv3A4xGWeSuc5jh8QeHB7yF8n1Q/1uj7B3EDAxLDn FZlXe/USlP3PF61ztvkBzMtjY2RalgX8P3HtDmEvTeWnsLvWpERL1reLpv+QG+b1R5+g fg+Q3we5S2FfGHIuoAf5WUTxkRE/3PN/ROJyIj0ZKOq48iaKniC4iKguyPiUUXYV9nhW RlkQ== X-Forwarded-Encrypted: i=1; AJvYcCU5K2//Pkdaj9Xi+0gByVs+Zwi1Krolm44bqs0/9dbRkD4bIVUR8C67rFCX+HdCQV5zm9tBUshgiPY=@vger.kernel.org, AJvYcCVrScP/Ny4s8JrbX9v81cVt13Fzm5JPvHywRi6zOPQMWmGkhZRF4pWINRYFiH12nYcLtMGc6MXT9FHFEQm6@vger.kernel.org, AJvYcCW57sJ+bci2KHLLs/LASCX9LLBYrcogcSpkynHezQhVQU4xChYieU7YCDiauOlFVFjzodtidM2YOzO6bWU=@vger.kernel.org X-Gm-Message-State: AOJu0Yyc7qaVX/x0aXd652SNPcbccWmjV8qBWmU6oYLtovnfDGS7b1xS NjMB2VLgYkiOpylSVSgKfzNXXyTzpr+pqeyE+awXGUwnNAho7k8UIIOwMw== X-Gm-Gg: ASbGncs0tp+g0LxbAuBo4zURcIU+49GSqiJRZ2I5ZZeKQIJ6Yp8eS6Pk2RhDUgu941S +qSpNJRGdx6mcytjWwyEZWQ8S+eE89T58xvfQqmtD0Y/R74K/cLBIpNF+hpdm6fLKIXsD1dmI06 Qjrc5OuXHdqyQIJiejRoCuPoVCVqIQdsZiPxDtbOe5c5iZAo1c2IsjU05FDSkh5ln04xg2UV+aI 7BtIX/534t18W5F8ssHItUi+jG42jWc5yYsTyhjQHu7zaisUCLvTDM+h/DSK8XOsA/3jjLihEnD 5/5E2yqXwSTEAlRFrQ1p/Lm+uu97myvJFcTZLFRQUJlMyE7QR97QmDnHs9T3VwY= X-Google-Smtp-Source: AGHT+IHgBSIVG7Xa9BXL9TdhQxQ6rHWVbK1V9hDshVe5yWBiKY4V4ani0CAqOqHy2aBB4ONpetAx7Q== X-Received: by 2002:a05:6402:3588:b0:5e6:17e6:9510 with SMTP id 4fb4d7f45d1cf-5fbe9d77c6dmr2625869a12.6.1746620372382; Wed, 07 May 2025 05:19:32 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5fa777557b9sm9350002a12.10.2025.05.07.05.19.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 05:19:32 -0700 (PDT) From: Cosmin Tanislav To: Cc: Wolfram Sang , Tomi Valkeinen , Luca Ceresoli , 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 v5 6/9] i2c: atr: allow replacing mappings in attach_addr() Date: Wed, 7 May 2025 15:19:12 +0300 Message-ID: <20250507121917.2364416-7-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507121917.2364416-1-demonsingur@gmail.com> References: <20250507121917.2364416-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-media@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 ae5c2ee629f0..91aabfb4379b 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 Wed May 7 12:19: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: 889261 Received: from mail-ed1-f51.google.com (mail-ed1-f51.google.com [209.85.208.51]) (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 176D2262FE1; Wed, 7 May 2025 12:19:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746620377; cv=none; b=WyhYA/E+WJVG83i2jLKt+NLOCrAjJSYBAE538AOkrclnwbDdd9TmueLoGk1axRnmJP6xYxuBJrvqNq15pweDToGyB9hYQwpsRb1VHXj9asvQzThUOEKpuVsvayr/ZKYsJZNaJCOakaKCQtitP0IBUJVcVeaJgXNURiI1RU0J2Jo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746620377; c=relaxed/simple; bh=HM6DuinZx2sh+jnebnCxT6tDq2JN3DjrUqzB8IGTLFM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=B+emsB1F+EX5Ix0zFrTK2LT42VNCQ4wR/f3uKlOm39SxAEvWvdqKuZ+Zxx373PaQbcDrtoQbUHP9qt03rG1z6bpluEk/E6RZuHc5l2aB8K+pA7z3aH+eHx0mXgvXvfTAjIrxk+2G1/gp+lBC/cf8MbbV18xwJXtUvW4xkvn9B6w= 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=TkzqlYwQ; arc=none smtp.client-ip=209.85.208.51 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="TkzqlYwQ" Received: by mail-ed1-f51.google.com with SMTP id 4fb4d7f45d1cf-5f6214f189bso12817539a12.2; Wed, 07 May 2025 05:19:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746620374; x=1747225174; 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=flOyTeGVhHyrcy5QyC0fGApva7GlKNGyqlIku/vedqo=; b=TkzqlYwQxFITD1QATy4TaSczSkk6e4BuLaiMbto5xQrQq3aIoOYT5+eIVfNTJVV3Lm BpMJp4oHYeVn1hcFxkGYy1/RBFqecGS0HLblJcAf1IvOyqrn+mQuIi6yjAYMIPhdn30a wX4JozuytDTrGarXGYHX7qhEL7uXQYYwaM5p6GTzmIbQx08lReMwO/sdnVDtZWjUK0/i tDae4ncsnHSs0xZS6Im/tQ/Jgau5ncaJsa5VrTNtxJTHzgvSqHWlPEJK777eH6M0tqZh uXA7270QlorSWVPYeHqg1PEZFXNO9jHvZ4uCNezbUQvHSKhhnq3J++b1Sf6nZ0AfXK6e g1jA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746620374; x=1747225174; 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=flOyTeGVhHyrcy5QyC0fGApva7GlKNGyqlIku/vedqo=; b=hN0qbT6ufKdj8BzdtstgCK1Sr2FWUGryoikMSR8SajCDFoDTS1uEtoJiCAOw576JxR 6uvaDeoPRsyyM31qrNoKnAemrPN/SrBEAlcs2tK+HvT0CCbC5F5bUQoYscQlNlchXLcF oNo5DJs72MwbQhXr9kI4XEXCT8ykzyPycm5+fDgnmPjn//F3HdRw5bdUInjgoHF/Qr1C bZnKWlX3w+Drvd0SzKZ3lF39zkzVME2cSDJKaQ8mIgkZNK1OCp3LBqrNFeyhT1076uM4 Y2sLBje5ZU4ridvFjHn/y2GS758hu4eOAULCWIoNhzTxX4LfLnDmCKxEqIVsi2vZ0Brn b1Yg== X-Forwarded-Encrypted: i=1; AJvYcCWU2k7k9DfutDzoi+4nWXRmNNRm49Sf5JvpDbFJsXHF2JqM/bwQR/r3FMSsEn8ndi2wL4StLHyDHOo=@vger.kernel.org, AJvYcCWd7UumGLBpgySdm7N4c+4NsyU/DnsYMwuzyQn+ghtmuxPMkRGO7/wJsd9IlG5j8qBa5rx7KeHnAW8rnE0=@vger.kernel.org, AJvYcCXXdcsxz5MQqpaZfEdylshu8KBpEmvzijVFUbOaZdA7RBoQ/PsotK1TZxfjUYiEcXLzgD34DlbD+R3be2xF@vger.kernel.org X-Gm-Message-State: AOJu0YyJK3RKYPkz1VSxxR25Ty/05ra7c9qxFVnb195EAaIJVwHKSlMp F7JnKrSsquWZ5H8lG5ZO8ylQ9JGGyl36IeHrLg/Qc6idcbyR1A6m X-Gm-Gg: ASbGncsqZbbClbFpzsq8ZiI3Or1zLeHf7AwwiL0bMWOgI0t63f62egozQW+Ph7iyuCP LrO7bqeMB/w5miPKdAx2CMhB7JXfSYrXOuPkviftQnD95n57lLYqHY0IzRzCloZ5NxLT9MWg5Hd cA4xRDi05Q57fUk07wu9u6FJ7PLOwesDFnEuYS5T7mAUIyoMwxjUPNKu1zBWNa6DXBQoqBxWIC1 uGJhkKlX/kMynwyN8SZPulDOP9g2ILkeVHJXBaerQ9CvbySwtt6DW9Ia1HATC3YCoobvup+6Tyl CQqoiLmhiy3KWM+3zBq7ykQq0BFwhnDFUPAf9dE9cZp6oo5KRs5g X-Google-Smtp-Source: AGHT+IFXxlV6jbXujbUAb2lsCzZuE2meSKGq3ePsN0BK3i/iCUSHX/XmMKa+JC7qeZBiNLyqyUxaEw== X-Received: by 2002:a05:6402:1941:b0:5fb:9f73:d0e3 with SMTP id 4fb4d7f45d1cf-5fbe9e29f20mr2446496a12.18.1746620374056; Wed, 07 May 2025 05:19:34 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5fa777557b9sm9350002a12.10.2025.05.07.05.19.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 05:19:33 -0700 (PDT) From: Cosmin Tanislav To: Cc: Wolfram Sang , Tomi Valkeinen , Luca Ceresoli , 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 v5 7/9] i2c: atr: add flags parameter to i2c_atr_new() Date: Wed, 7 May 2025 15:19:13 +0300 Message-ID: <20250507121917.2364416-8-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507121917.2364416-1-demonsingur@gmail.com> References: <20250507121917.2364416-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-media@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 Reviewed-by: Romain Gantois --- 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 91aabfb4379b..121cabbdb85d 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 Wed May 7 12:19: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: 888399 Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.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 70A1E263F43; Wed, 7 May 2025 12:19:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746620379; cv=none; b=Bs/FlHD212HgS4R2iqPHn5GxHjabbbp35ZujiS7y9g0k0KRpNrLzLKRo2zd/f7pYFLgXZ3/kQygUavFqemuIbRlSQN6S2BNCVxyBkGSFVUedYD8QVnPgUlptuvUOqop+xgJcGFga7jUUf53z6CpkKxBKBLih5ysz9o8aMIoANro= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746620379; c=relaxed/simple; bh=IncmGeBrDS5I/fgmp8yiaekm5sPKDwdxDosYXHlXQvc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SSC3hm0TRSAvz8mIqPO8PIjUemFHdL4cQH3HOMfPp3Lkca585NsahaaZocLqSPEipO6K7tZ445dRjgbmMKQsn1iJp3ND3CPwPE2WzkkRwvO+AWxxG+Jt+LAiauUzQvzZRsuoBpWrm7FPi4RuB7RG7YujJ6qimT+W4YPjH0cci5w= 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=ZUySwLQL; arc=none smtp.client-ip=209.85.208.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="ZUySwLQL" Received: by mail-ed1-f42.google.com with SMTP id 4fb4d7f45d1cf-5fbf007ea38so1190024a12.3; Wed, 07 May 2025 05:19:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746620376; x=1747225176; 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=Q2KJ26YIlL26ps6IFL0kVpu1NN+yB+jxrYA5HLOizf4=; b=ZUySwLQLfldzo6fd8idLe9U9HwPfReOYHrzB7jHS2HbrIHMlkkLFrl2Wzh/3xaUHWx z7KdjC14Usz74/gGqI1T/EOVLtDyFRUIs1hGxiXuze0sTHF75ZzwY2/ZVigAuYYzaoUx MQXq4i8GM3Oqt6FW4M4RfQnOIHQerUjKkStOYLH/1kNMbHtEXfKQAPZb8qer2rXC0C5B 95UaRPNmL48TjL9qOwKTJm9O488/ARb7CG3xCvg82GyVqt0Ik1jAoLOtQqmT+jg8GGlg EhJlgmXK7r19ypuyUcYFt/WsBkbjzrrYrmTNBt9YR0eJMdhtQwTmj9UpaO7m7l4EaHr1 v1cg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746620376; x=1747225176; 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=Q2KJ26YIlL26ps6IFL0kVpu1NN+yB+jxrYA5HLOizf4=; b=naDHX+JIe7IMsLirhM1rAA9qceoFn5NVTE4uWqbWiaDpRIaSRcpA9P+Ltr2N20XkeC 1MwpP/tk09fL0VT9i9gPSg5aDkeHueNDRcOqYzo/ywkIIvd2Sq2HmbxgI5mo0UekjkbT Jfy8U6abj7+gySV0jmHym5Rs0hHtwWuURJLeOj8UTt/sfexYgehGNEpPrkbDXLhCLv0f w3IS+cOQuJaQSk+eJ1jC1i3Oiu7dL5lI1j9/VtVa2fFTTCQo4DU5QI32jhaQawSih7+/ 0LLxS4DK4yS7ft/jHNDqeDUJWgUBc8qbf74kkxvobQKzQEsQJZhTwZ36640mCuMVI0xv FMvw== X-Forwarded-Encrypted: i=1; AJvYcCVB6HC5jjY/zkU+cQYM7yRSHPPYvmcliEGwlHgWgzTR4dXzvr4y3imBGFhq6Y39RqnwOxIz5d3/dc3vr0Y=@vger.kernel.org, AJvYcCW55V2Atdf7JtokIf+G9XqFT8pKuPtGLTp9+pBTerPsPNNYJ+JSMnphNla4dEFpJ3pWuIMgBPwiKhM=@vger.kernel.org, AJvYcCWytIJNremnxzsgzZBSzTzT1qYLPysaOgtEkTeJvXFehBWFIZSokedbt4is8Ab/mSy7ZfjaP89oSefSUUN+@vger.kernel.org X-Gm-Message-State: AOJu0Yxvz5wHhIaOyRutHVENWuNSGrF9PYvitPdsApRC2X9v7fINAusE 347gZcugZq1VjWFUHXPwuuyrB5MfgcYkTcNh8sE/DOcVZ8tj5+9U X-Gm-Gg: ASbGnct4k8mOznOWPC2u/gJ15JXkVam7A29C28k4yDYoSZTbkUFIKtrhBwFQSgLAaW+ FNJv29MxQ/YnmPksUCspTkOYTXp1e3mFNycFl1Z2Y1esW/16uu32JzY0YVUI01GAp5kYUUt0Hlo ACb3J295LmqQatdn/ZqKlc+t215nE9VeemlD5wRmVl1xgdUX2E/9aP3R1P2ZeSkHKNMRhceIAKh RtQ5sNxUajPLuChK+68W/HXl8jUTzbN8xXjQrfhcpCiTRS91/eY0u7aAzeSinbcUzOLor+nNyaF 5FutpcJJ0OwOSaFjdqZNmF/0R0v3Gtwtew2NFrkxBcbZAU3EolXQ X-Google-Smtp-Source: AGHT+IEvLotDHhdb7KPxeTvSHi1rKTMFXmu+F9vTFpZBRVBhkjY5JDO4yOcT8sqnDe3jtEEKcN3ozA== X-Received: by 2002:a05:6402:4307:b0:5fa:a495:6904 with SMTP id 4fb4d7f45d1cf-5fbe9f3c4d7mr2450261a12.23.1746620375615; Wed, 07 May 2025 05:19:35 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5fa777557b9sm9350002a12.10.2025.05.07.05.19.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 05:19:35 -0700 (PDT) From: Cosmin Tanislav To: Cc: Wolfram Sang , Tomi Valkeinen , Luca Ceresoli , 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 v5 8/9] i2c: atr: add static flag Date: Wed, 7 May 2025 15:19:14 +0300 Message-ID: <20250507121917.2364416-9-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507121917.2364416-1-demonsingur@gmail.com> References: <20250507121917.2364416-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-media@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. Mappings will only be added or removed as a result of devices being added or removed from a child bus. The ATR pool will have to be big enough to accomodate all devices expected to be added to the child buses. 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 | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/i2c/i2c-atr.c b/drivers/i2c/i2c-atr.c index 121cabbdb85d..76d70efdf190 100644 --- a/drivers/i2c/i2c-atr.c +++ b/drivers/i2c/i2c-atr.c @@ -341,12 +341,16 @@ i2c_atr_replace_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..5aaab1598084 100644 --- a/include/linux/i2c-atr.h +++ b/include/linux/i2c-atr.h @@ -20,8 +20,15 @@ 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. + * Mappings will only be added or removed as a result of + * devices being added or removed from a child bus. + * The ATR pool will have to be big enough to accomodate all + * devices expected to be added to the child buses. */ enum i2c_atr_flags { + I2C_ATR_F_STATIC = BIT(0), }; /** From patchwork Wed May 7 12:19:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Tanislav X-Patchwork-Id: 889260 Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.45]) (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 017B6266569; Wed, 7 May 2025 12:19:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746620381; cv=none; b=rhUS+VZJq2XZ5UL3SDAupkGyzcBvN+/k2/g/l3HjsMlD5ZH8LMm5gPIT1W0pD+7PfffbRzixHoRyoEfG56ew5Zn9ELbo1YzpVvqxGWhSTsxlq5+Z/VBRqlVrb0xUw5InvDUZxrmfFz+Nn6J7IuH/iIEUiRLeS5eq/wAT+rWDNT0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746620381; c=relaxed/simple; bh=3jljKQy3JilUwk5OeTWzq9vI3w85PUGJDm3mDHSbT8o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nMDzoUtxj50ptqGdN16vbI2gG/rMnRPQS4BUNuU3Yv8G61A1U7Xxbkh5K4AiFtPQhoHRCItT7i4jMOEnAQcazg/nEWvg7/POv4OGxaOKEKsk1uq0IBL4VPuhVwqZwTc5Fa8+dVG1rylsbPCRwEoTlOPPkjjAItMwP9S8juvCrMI= 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=EQWiZG9h; arc=none smtp.client-ip=209.85.218.45 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="EQWiZG9h" Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-ac2c663a3daso1369791866b.2; Wed, 07 May 2025 05:19:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746620378; x=1747225178; 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=ou6MOwGHqD731U9gMCJRk94Iq+LGR7LXnbZdgEjcxuk=; b=EQWiZG9h5D/duLWlAvxLI7EWqe8+Fpdou0w9enqahUiRr4GDD65nFRnZqGjAK7+vXe zFA8z/X6ZaHGCPeKukJv1t/IMK+GxXso9tobjOyLEG8o07SsakwIO1MYDdR/Ey/EMQNS eZ4Pg323rtvXdlGMQHhJo7J+FIqUS3WN3F/6SYpxyUp/JwDD3SDpR4X7/HEmIPVQreG/ OutK8FLGHq0uxcVoCVSkPM3Ee4ZGaxv+r1T6hX79qzZJTbps5YLCTVBiWs7O7Liq0Pb3 +UybsfXXvbjuLjj3PdtpDecjOvNJ8fvKuoRmqraGpXca+D73YcQjlfdBicn/w4PFSD/J 7iaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746620378; x=1747225178; 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=ou6MOwGHqD731U9gMCJRk94Iq+LGR7LXnbZdgEjcxuk=; b=nAZA6sWlTUP63fyJu5D8pfkBK7qJyBwToSU2lhN5NhyVmTD3uT7knq5h/lX1WM38AQ Ie+XKbEpUHRtK7C+krJy2TKcfZMF81cKVUct3RT1lglMeF1OOxJJwcwIHrpt0gYXuH1s +Qyby537JOwzMuC91wwE84dnxlBuXXvjinY2S3xmxN2iaNozrzXUWOAha1PucG5pta77 ZrDSbCSaKbSmH9NUTJp12AhYFV5Jp+ppLG86pztbAa+AOCvtNMODD9/UEeIirYj3JwUz RpdWYXJQpVwMpRUtx0x9RIUNnPLGUzh1Z+BHH2MFQemh17scHhWDgvgWxagffCsir+mc THdQ== X-Forwarded-Encrypted: i=1; AJvYcCU0S/YjkXCJJvCKlGOoNDPDDJIzYPlrWgvY9yW1Dqf3s93REX5QSBpTSgzwp0fZC8jfOs7dHO2BqW9v5TE=@vger.kernel.org, AJvYcCVndks3EntTDkbpcOH/F2Q6f0nyk2O38M7EMOsiKXzwMEmFe0OUOgbiCu81dW3snrBrxisRIcZulFhZ5sT7@vger.kernel.org, AJvYcCXr/iF44hGZR9NQLF2r/6KE0ss90oBI7j4tUeQ2F+8E7fk03etol5dU0Mrfb5y4LmcvaYmxE7oxuA8=@vger.kernel.org X-Gm-Message-State: AOJu0Yw4C8os3QoDCwHmN57BlDFyRFCWTgrY14iBOIkachj6R3xnAmEH nBxkOMqrYog2q2cfB1e+4JExzY1NC/IigscxnGAA6btP6aidJbhw X-Gm-Gg: ASbGncu4wecfRCPdyBUAv1r34VO/clI4TiO9bdYoYVEIbBT8THakaL0g4msN4/nKVsg h5yRxg8oflA3LODcuT68K6Twq1F3GqgkjN0jsOm0jXVEq8w7E9BwtBZxShDzHjXZVk5nq/V8wHf 6aO1XBlMMmFVoDaj/HTGQujOdLo0iG+Th4TXF+gWFYNdIj4H5lB3CEIAeu9HOCbqMHgmTHJ1bbV kM7Q2y80zsgdC55OoqECh2ZJxn1cLgHEwQfG0o656FeDetW00+UN1J3gjniN6CAiFXlmLQkVpJY SINpoa1cdwM5WCjfBr7FLA8M57swcMEd+XQ1WdAMksAXbOw/0eRk X-Google-Smtp-Source: AGHT+IF8d4mvPDamh8+NAYSDDhRH4GELbHrWX7qqTJyJjvKWNL1ITeDM9+p41l0nfll4OeRP/pke9w== X-Received: by 2002:a17:907:3f9b:b0:ac7:ecea:8472 with SMTP id a640c23a62f3a-ad1e8bf158emr308173866b.26.1746620378128; Wed, 07 May 2025 05:19:38 -0700 (PDT) Received: from demon-pc.localdomain ([188.27.128.5]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5fa777557b9sm9350002a12.10.2025.05.07.05.19.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 May 2025 05:19:37 -0700 (PDT) From: Cosmin Tanislav To: Cc: Wolfram Sang , Tomi Valkeinen , Luca Ceresoli , 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 v5 9/9] i2c: atr: add passthrough flag Date: Wed, 7 May 2025 15:19:15 +0300 Message-ID: <20250507121917.2364416-10-demonsingur@gmail.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250507121917.2364416-1-demonsingur@gmail.com> References: <20250507121917.2364416-1-demonsingur@gmail.com> Precedence: bulk X-Mailing-List: linux-media@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 Reviewed-by: Romain Gantois --- 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 76d70efdf190..be7d6d41e0b2 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 5aaab1598084..2bb54dc87c8e 100644 --- a/include/linux/i2c-atr.h +++ b/include/linux/i2c-atr.h @@ -26,9 +26,11 @@ struct i2c_atr; * devices being added or removed from a child bus. * The ATR pool will have to be big enough to accomodate all * devices expected to be added to the child buses. + * @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), }; /**