From mboxrd@z Thu Jan 1 00:00:00 1970 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 77F442F549F for ; Thu, 28 May 2026 20:52:51 +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=1780001574; cv=none; b=pvB6ypNPZfaBX4kELdCPiYnUPWI4dqZWTRNrG6xSM6tutJU/sZnYpYUwOiRKswk3XtX/oaMti4HjTRfgxUWS90yVCAtm6WcKiwlnwiulFCEdhxYu9DexQ227OVRpeNtxqLcvElWlYh72TVn4EG1ngUkZC4uERtmAUg5WnL67pWA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780001574; c=relaxed/simple; bh=1/q8glwu4s5w4FUKk4jEc8qnkNSxpoqlZxeBCfbPbdI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VfdFAQcPOYrfXXFkNsw0eMxPhvFxwfnCW0d6dZTaKDrPrsztFMGOdxsFWwHia8NaQ9U9iyxRlsgO7MgFoyB1emF+MSBmmeX2pYtYU3IDugDXXKf1+32GiuGyeqj9OMvhyyMK1xBLfhAl/7RINtFidPmbxnA3biWOe/tSTyh/bFc= 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=CHlJ6Vo6; 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="CHlJ6Vo6" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-4906869f0cbso52627785e9.1 for ; Thu, 28 May 2026 13:52:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1780001570; x=1780606370; 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=efI/0Pq3FRsEo7Ip3A6gRAbN3ndW+5SuWmktEx7XnSs=; b=CHlJ6Vo6vL7ySZUXqEIr65KX2jCY66mmlgHnvcJU6CZurkWgSi7TEY0m0DZiwVRKP2 t/xXpVa+ADpK2LJ4n7PbYnpImI6BMpcDG4KXlS4VuOTV2Ta9Ox8+TIOyjU/ujAxmnZsF VHAQR2Png5EWHkD1zew8bBAhL4pMowA26UC5LWlLMqZcj441lPTKwJnPinQn1PPrZhGn eeHeQ+D+1rHO09rM6wKihD3smEqqO/wVXzSKbTddpOuY+CPw3560gFX87v4H7k6OvIwC s1LBCsI/L6q+HZWE2lKeGXDRVLVvQBbRpmboFMfGlawrmZ6ALULszsPpTuESIyZD9/L4 MEWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780001570; x=1780606370; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=efI/0Pq3FRsEo7Ip3A6gRAbN3ndW+5SuWmktEx7XnSs=; b=e5jplQ719Bi7trsOrCIrjymuSCs7TM9Nvq7hpIUS2j5Exeg6iGsr5hCmHscKh+TA9A tU+ZNjIIO7OKkGFiw4AdIaibICtu/MWv7Nbyv5H52FCTaelw9XthKnePXN3JJMqkuI1q 1b5h9GB4WmTjCerU7UWjDBmCupKrQm+NkUfaQ26Wj4xok0l7vBtUC+Lv3RjkxCDLxwr2 j20w8uChhRpdeTFrbGe9NDhbI+EXmUbFGBVYAgGCvnn9N47qJ1vG27y+oOWq2lTit6aQ T2CFVn5w9SvYE+FsoRYmvLbuqNkDKgusYwZTc5HncFylpysAqOOxOMkPfT4i3MDtHVCP eHlw== X-Forwarded-Encrypted: i=1; AFNElJ+osLb73WRoh45Tuw8eIbTeWbwamr0YFX4ptKvquIqf/83VRJl4NPEGFXYcWozVgZ9eqT6Grq0QgsB6doI=@vger.kernel.org X-Gm-Message-State: AOJu0YyjikWGvNpsnxSELSQde6Cd8Hm6nfoymHcnuXsOYw2rNeOzHp2N lxZQaawwg3vTF4DHPeH9e9cX/+CGZykjPZhRaEAYIVp3bZpm+M+d4SUG X-Gm-Gg: Acq92OFa7fJ1sGkFhY7+qYMpn9Uw7lUg/2A2qsquue5Dar3tmE7QSOap05Vlq0in8Wj 50Fn/aM3NXyc6WvWRBrm729SXUEyfBmc1qt9BIAd08Xy8yh80gwF6/APQZXZoo6S4E4ZVyTVNJN P8SpA4NWj9IFCgAQn765WQ9kTABVotN8gjq6sOxNDPHI3GFc32NUzS4zMOEdrtSjdVqz4O84/vh EdaMYG8J3775imujEZQPQNFDiYcet3V7/6tK+JPBiSMdr8dp7oRnC8L5nujMevRiMJJ5plQiWVZ RCrb3oBxnilKc2qWgYGVXHJOjLyCSBEubUwyHmLKRKxPIwKXNeKCTKwlO0nx7PXubjMjO0LwP0X dSNyyGsJCsqBo/LnZ8D8Ohxj5ZquCqiUYi4syf5vhjN8SivFq/ZMzgLY6iw4+KVxJtGkaDP9Xbu rlbzoHG/sxorsQTpfmontQrTygpyKI8B+lLrsV X-Received: by 2002:a05:600c:6287:b0:48a:7676:30bc with SMTP id 5b1f17b1804b1-4909c08cd89mr1988945e9.14.1780001569686; Thu, 28 May 2026 13:52:49 -0700 (PDT) Received: from builder ([2001:9e8:f104:6516:be24:11ff:fe30:5d85]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-45ee5a84e92sm7104028f8f.35.2026.05.28.13.52.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 May 2026 13:52:49 -0700 (PDT) From: Jonas Jelonek To: Russell King , Andrew Lunn , Heiner Kallweit , "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Maxime Chevallier Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Bj=C3=B8rn=20Mork?= , Simon Horman , Jonas Jelonek Subject: [PATCH net-next v9 2/3] net: sfp: apply I2C adapter quirks to limit block size Date: Thu, 28 May 2026 20:52:41 +0000 Message-ID: <20260528205242.971410-3-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260528205242.971410-1-jelonek.jonas@gmail.com> References: <20260528205242.971410-1-jelonek.jonas@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit The SFP driver assumes all I2C adapters support reading and writing the pre-defined block size SFP_EEPROM_BLOCK_SIZE of 16 bytes. This constant was probably chosen based on good guesses and known limitations of a range of I2C adapters and SFP modules. However, I2C adapters may even support less and usually need to specify this via I2C quirks. Theoretically, such an adapter may provide full functionality but only support a read and write length of e.g. 8 bytes. Currently, the SFP driver doesn't account for that. Add handling for I2C quirks in SFP I2C configuration taking the fields max_read_len and max_write_len in struct i2c_adapter_quirks into account to further limit the maximum block size if needed. Signed-off-by: Jonas Jelonek --- drivers/net/phy/sfp.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/net/phy/sfp.c b/drivers/net/phy/sfp.c index 376f7232f9ee..60f36cba3d83 100644 --- a/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c @@ -809,21 +809,29 @@ static int sfp_smbus_byte_write(struct sfp *sfp, bool a2, u8 dev_addr, static int sfp_i2c_configure(struct sfp *sfp, struct i2c_adapter *i2c) { + size_t max_block_size; + sfp->i2c = i2c; if (i2c_check_functionality(i2c, I2C_FUNC_I2C)) { sfp->read = sfp_i2c_read; sfp->write = sfp_i2c_write; - sfp->i2c_max_block_size = SFP_EEPROM_BLOCK_SIZE; + max_block_size = SFP_EEPROM_BLOCK_SIZE; } else if (i2c_check_functionality(i2c, I2C_FUNC_SMBUS_BYTE_DATA)) { sfp->read = sfp_smbus_byte_read; sfp->write = sfp_smbus_byte_write; - sfp->i2c_max_block_size = 1; + max_block_size = 1; } else { sfp->i2c = NULL; return -EINVAL; } + if (i2c->quirks && i2c->quirks->max_read_len) + max_block_size = min(max_block_size, i2c->quirks->max_read_len); + if (i2c->quirks && i2c->quirks->max_write_len) + max_block_size = min(max_block_size, i2c->quirks->max_write_len); + + sfp->i2c_max_block_size = max_block_size; sfp->i2c_block_size = sfp->i2c_max_block_size; return 0; } -- 2.51.0