Received: by 2002:a25:e74b:0:0:0:0:0 with SMTP id e72csp914563ybh; Wed, 15 Jul 2020 20:11:56 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyPLuhuhtU1XHj0HqqS4sfQf+xg7Y7G7fvy1PerQVxfDeU3e1KRMvT7/4o0RG/cCMreCItT X-Received: by 2002:a50:e801:: with SMTP id e1mr2425323edn.251.1594869116453; Wed, 15 Jul 2020 20:11:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594869116; cv=none; d=google.com; s=arc-20160816; b=m9LYDUq/WK+TuLE51eERcuWV/kfA/osTG0GxtCjVLqsbmOr4J3ESSvwCAh8f6en4RQ BD88o7JWYjubM92Wd6NLS7c2urPGNB5R4toDIru56s53aA8lBcct7yARKa34Iun+YxC7 PYTir6mGiLFCFFfIwIk3/N4fTrQ1C3AM4p4foifC6PU1IwpM4itvfAZWHzmWGGJUgGyT 1kyxp2Z1bMg7abcWjElzkAh7b99rxYJ7vieCjhACbTtiL/c9NlEzsdcOunq6Htpc9dkb tOaklqKXenNr397J6dxs/g5O6EtRP942b8WOsv+5pj1e9F+VHgS3Tw4UJaZScPvIyOm9 UxNg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:to:subject:dkim-signature; bh=mAY+Yg/BGbcuxtFd8UR66g4d55garWGwVyThP8xJg58=; b=U+ZS0HqNbsFFq0JUcFUBh3X2rQDn8TmjMC2HgMtP8sBNif9E21X6RrfcaOcSzXZ+IB /O+ahoOBtzwP8ak+q33JK13UqzqQFmTQy9BOxlL+j22cWAO/0t1+UdZf20Rywbh6blaj WeXmAy8FVAScQUq/uNZextTts2p7cLkv+2yzHf+a6VlDKK4GX085yUvZM1/0kqN6uevP paFQryUUuRNm0jzPr9s94DfuTITDBp26GCla8hV1Dxrdz9rsH7MNs1GL89aHdjJVt4WI RyQj7Q+mGD2WaEbPC7ahuuaJqAjrtUvOauVRCrDJVHPy5OU8xKqYM0BFmreuQsX3DN9g Qeqw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=LHo7yXHc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id oz40si2331954ejb.432.2020.07.15.20.11.33; Wed, 15 Jul 2020 20:11:56 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=LHo7yXHc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727942AbgGPDLB (ORCPT + 99 others); Wed, 15 Jul 2020 23:11:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55760 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726770AbgGPDLA (ORCPT ); Wed, 15 Jul 2020 23:11:00 -0400 Received: from mail-ej1-x644.google.com (mail-ej1-x644.google.com [IPv6:2a00:1450:4864:20::644]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4FF61C061755; Wed, 15 Jul 2020 20:11:00 -0700 (PDT) Received: by mail-ej1-x644.google.com with SMTP id lx13so4915381ejb.4; Wed, 15 Jul 2020 20:11:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=mAY+Yg/BGbcuxtFd8UR66g4d55garWGwVyThP8xJg58=; b=LHo7yXHcb87a/RUz8wFKaintchDJTIf+sVGZiljV3n2hSdPH+T1fs1sbSzN3ckLMak RZTFT2KLYiNpTZr3dZpc3z1Hx6zSBehgH/zFPHiYJdXnHVyX8sgvPkD3FFqT7QtHQocp /CrZ/2sTu7qOs06yZWzHfDS4jhrKmIIuU15h8PNyb+Y1Bf4SaBHJJ6q8t+Qyo6wsywUD HBVTAM1XzW6jjDevE0uvEnRZBYvlvpfzqd3SZgGVGnP3pXbQLaYJel0JKU9JUvrglceQ cJTL7QLvX/YmBLgdJcLGUSHbnM0v0wYjwThnu2fKDXbxfeSq1Vids1jhuKRPMhdwHKEv PZGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=mAY+Yg/BGbcuxtFd8UR66g4d55garWGwVyThP8xJg58=; b=MLig3sbYqFTjteg7jS9gj+FxDaOTJMoZpw5MZEL3L1+DdJ8r6h6VBG+qWHSRO1E4V+ 5AiLcRsSZOgvab7lHadzlPf07QxqbJKNIKunVIfM66c20WNOcVUgBajwPl789KTeQI7u 1bzDM3ff2u3YDFEaxP1VpeViKftkYrH2RTQUH4zX8Llst3Wv5bdlDxNHchTETXutFgEg ArQvNJkbYj664YdCiTIwe4pfk+gtm5SYgqmBqnsdo44cTBjcQfmneEKLQdT89fCOS8QC OsPfSws3wKsnSW1CU/i64/qOZgJ/G39ppAG7XzkkVeDRwucAtjXQayh14fLbySRfKK/z r5Kg== X-Gm-Message-State: AOAM530It9a/dHdLsLa99/6SH5qAlRqjFQ2334MJVpwgor6g5rGVBnGc aA9KeeIVA2lfbT9gpVTuesto1j7i X-Received: by 2002:a17:906:e0c7:: with SMTP id gl7mr1766447ejb.264.1594869058762; Wed, 15 Jul 2020 20:10:58 -0700 (PDT) Received: from [192.168.1.3] (ip68-111-84-250.oc.oc.cox.net. [68.111.84.250]) by smtp.gmail.com with ESMTPSA id s18sm3947220ejm.16.2020.07.15.20.10.56 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 15 Jul 2020 20:10:58 -0700 (PDT) Subject: Re: [PATCH net-next] net: phy: sfp: Cotsworks SFF module EEPROM fixup To: Chris Healy , linux@armlinux.org.uk, andrew@lunn.ch, hkallweit1@gmail.com, davem@davemloft.net, kuba@kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org References: <20200714175910.1358-1-cphealy@gmail.com> From: Florian Fainelli Message-ID: Date: Wed, 15 Jul 2020 20:10:54 -0700 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <20200714175910.1358-1-cphealy@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 7/14/2020 10:59 AM, Chris Healy wrote: > Some Cotsworks SFF have invalid data in the first few bytes of the > module EEPROM. This results in these modules not being detected as > valid modules. > > Address this by poking the correct EEPROM values into the module > EEPROM when the model/PN match and the existing module EEPROM contents > are not correct. > > Signed-off-by: Chris Healy > --- > drivers/net/phy/sfp.c | 44 +++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 44 insertions(+) > > diff --git a/drivers/net/phy/sfp.c b/drivers/net/phy/sfp.c > index 73c2969f11a4..2737d9b6b0ae 100644 > --- a/drivers/net/phy/sfp.c > +++ b/drivers/net/phy/sfp.c > @@ -1632,10 +1632,43 @@ static int sfp_sm_mod_hpower(struct sfp *sfp, bool enable) > return 0; > } > > +static int sfp_cotsworks_fixup_check(struct sfp *sfp, struct sfp_eeprom_id *id) > +{ > + u8 check; > + int err; > + > + if (id->base.phys_id != SFF8024_ID_SFF_8472 || > + id->base.phys_ext_id != SFP_PHYS_EXT_ID_SFP || > + id->base.connector != SFF8024_CONNECTOR_LC) { > + dev_warn(sfp->dev, "Rewriting fiber module EEPROM with corrected values\n"); > + id->base.phys_id = SFF8024_ID_SFF_8472; > + id->base.phys_ext_id = SFP_PHYS_EXT_ID_SFP; > + id->base.connector = SFF8024_CONNECTOR_LC; > + err = sfp_write(sfp, false, SFP_PHYS_ID, &id->base, 3); > + if (err != 3) { > + dev_err(sfp->dev, "Failed to rewrite module EEPROM: %d\n", err); > + return err; > + } > + > + /* Cotsworks modules have been found to require a delay between write operations. */ > + mdelay(50); > + > + /* Update base structure checksum */ > + check = sfp_check(&id->base, sizeof(id->base) - 1); > + err = sfp_write(sfp, false, SFP_CC_BASE, &check, 1); > + if (err != 1) { > + dev_err(sfp->dev, "Failed to update base structure checksum in fiber module EEPROM: %d\n", err); > + return err; > + } > + } > + return 0; > +} > + > static int sfp_sm_mod_probe(struct sfp *sfp, bool report) > { > /* SFP module inserted - read I2C data */ > struct sfp_eeprom_id id; > + bool cotsworks_sfbg; > bool cotsworks; > u8 check; > int ret; > @@ -1657,6 +1690,17 @@ static int sfp_sm_mod_probe(struct sfp *sfp, bool report) > * serial number and date code. > */ > cotsworks = !memcmp(id.base.vendor_name, "COTSWORKS ", 16); > + cotsworks_sfbg = !memcmp(id.base.vendor_pn, "SFBG", 4); > + > + /* Cotsworks SFF module EEPROM do not always have valid phys_id, > + * phys_ext_id, and connector bytes. Rewrite SFF EEPROM bytes if > + * Cotsworks PN matches and bytes are not correct. > + */ > + if (cotsworks && cotsworks_sfbg) { > + ret = sfp_cotsworks_fixup_check(sfp, &id); > + if (ret < 0) > + return ret; > + } So with the fixup you introduce, should we ever go into a situation where: EPROM extended structure checksum failure is printed? -- Florian