From mboxrd@z Thu Jan 1 00:00:00 1970 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 C3DFB3845BD for ; Fri, 12 Jun 2026 14:28:54 +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=1781274536; cv=none; b=QXnu6/GXYtHB+vWDWWd5NlQ3wrMwCJZB8Tp5k95XUi6ajuuaLmeNHOMPnkJZxqY7GaXo61GNpfTwFO5wM1AtXW9nqmmN1vFd9zByqIiBI+bR9y1nGbiCexUY+YEfSWX5ddNQAHJXEAKH3n/Eegwf1VjOVM9dmIQuD5Xiwd4a/NI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781274536; c=relaxed/simple; bh=vC7gffF3nph/f7RymsI38P5G/8V/ZI0hrB57Y33Oh98=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pJcWUKPsiFpgYF+Z7DImzfOzrCYptT2HSx/7lH8KteeiOMpbNY1WGV3HUuCJbs7MCSkIfmurvA+5nuhNhKAPQuV4FoATyNC+VRwG1Rh9kkr162i0R3EXF0VAOkBIdauHc5Gtf8IKk8Z1Z0WLGh3WerwkWUEhOBXridwxdR4Y0eE= 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=jS0PMIoc; 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="jS0PMIoc" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-490be29c1c5so10969745e9.2 for ; Fri, 12 Jun 2026 07:28:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781274533; x=1781879333; 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=eyKTqLVZ2GkXstSMIq5XRH7NFzj7gG6vhpUIFQhTa+U=; b=jS0PMIoc1Q2pWxVlSTpLSuUL5lz0R37odqre6Epg/QOPbAza2D/2fUa1p/OZFSP0gU RssVM+LvUU5ysGj3tJx3kbuxU0noLJUKA9J5HcZJpQv3L1GTD8UIVWeWeQ60scY7jQyu dBOyITszDNAqtrx+cM1p2WX/omzKHhwDaSnSzjlVK4oCgYUBIr7Q3X0Cv+mvBh9P6FWh fOmg6S+4m+J5NIHOwbBsxzIUdjWs+DykihhZjLWv0JGeqr8y4A29tm8sg011dYCx0dNU 2QtRKUyBvmJNhnYuBOS0XBJl/6ETex51OJs9ltzCfQ+oDV2XXifS3+afGrIHWTp4BCqn RRtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781274533; x=1781879333; 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=eyKTqLVZ2GkXstSMIq5XRH7NFzj7gG6vhpUIFQhTa+U=; b=V4LyH95mvTsV7Dp/S3dkazEK4qzKrA5NK9YoSPmC7frAAQDjemW8CJbw+SSeYXmytB kcW8tDzH7d8O/32LvVQch493xTZmqpqUrcsmJjCa6wjvGNbBMmgZKtjrF5MbIRjQjhIw Z6CG6sqHVkzBErpEfrPWeqd2BmMSJRPRtqdCx40HpKp3K5t/OCfRoqX7M9iEtiC4Sdcs rveCaZcQRqQlWeczsmBe+wgqfxwQVM2x1gszq5J30Y9H2vX+Zi4xoVT4iPDGD3FykQqr pjavYfvXPzkktAYu0OCA6jl/Lo5/fUqYEebhM2Fv9sH3yFY2hlcX1q/JkzqyZnpCffzg JT/Q== X-Forwarded-Encrypted: i=1; AFNElJ+rbV2aEE/xW3KSsT+4piuyo+mB0TBH6veCntMwwcWxy+/NrzU3I/n0kkTLv07Kh+64PUO25T8TBriTxYU=@vger.kernel.org X-Gm-Message-State: AOJu0YwTjC5kYeoSIkhzpfZw81igehKyiDMBGK9st7a9Xp5Dvk8PSqYF MmSwOT3TRJIaniopX7GD/SNUxbmMy+Jusea2SICrMSGuv3lhOout9Ge7 X-Gm-Gg: Acq92OGWSXNO03kDSqhZ4OX3IyTUZbQle4U1npladg0AYjbiLHP6B6/K/MOe8cevqkA gNtGNh3n2sLbaJs96WByQ515Jxk3HM9aDMaCeDFqBwKQ7I2wba5EuYDIgnq4hmR6rp6+ZkyyhRQ sTh6MkcKgomFGrOV+MMJ504pcCn0zFyg8fBkOSzUuqen8jUezXdct8C2UNAybTmZYsm6O64zYJT /tl1+XNinP0SP0SgyjTY79HtKeG5EU55JMNu2TQGWMI71IgphTiVaXbRJUI5mfKJGzE4d5MtCai xKgapc3cdGVFfAYyeiZDUwQz8qCqBaG4pacoHkFyKCkLzc0JeL+7Rx/BGDBptg8G2+naIuOc9nv 0gZ7tOios2FhVwCgjcbl5Z/q9dfd5ICqGbOxqrPx5cncFB+Asn+jJmKeUBp78RDEMc51Q3vmKSs YIt1F2mCcNaVqyvker0YQ7tXsz6A== X-Received: by 2002:a05:600c:314a:b0:490:da12:f1fa with SMTP id 5b1f17b1804b1-490ec503f0cmr38320045e9.31.1781274532909; Fri, 12 Jun 2026 07:28:52 -0700 (PDT) Received: from builder ([2001:9e8:f11c:fd16:be24:11ff:fe30:5d85]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490e2c0d360sm175410705e9.0.2026.06.12.07.28.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Jun 2026 07:28:52 -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 v10 1/2] net: sfp: apply I2C adapter quirks to limit block size Date: Fri, 12 Jun 2026 14:28:39 +0000 Message-ID: <20260612142840.462664-2-jelonek.jonas@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260612142840.462664-1-jelonek.jonas@gmail.com> References: <20260612142840.462664-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 Reviewed-by: Maxime Chevallier --- 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 18f2584dbe7b..3c232991faa1 100644 --- a/drivers/net/phy/sfp.c +++ b/drivers/net/phy/sfp.c @@ -810,21 +810,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