From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9ACBEC43219 for ; Tue, 2 Nov 2021 18:15:46 +0000 (UTC) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DDD4660EBB for ; Tue, 2 Nov 2021 18:15:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org DDD4660EBB Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=lists.denx.de Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id A3F3683383; Tue, 2 Nov 2021 19:15:43 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="V0SsoHSy"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id C6F3183383; Tue, 2 Nov 2021 19:15:41 +0100 (CET) Received: from mail-lf1-x135.google.com (mail-lf1-x135.google.com [IPv6:2a00:1450:4864:20::135]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 5FA648325E for ; Tue, 2 Nov 2021 19:15:37 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: phobos.denx.de; spf=fail smtp.mailfrom=roman.bacik@broadcom.com Received: by mail-lf1-x135.google.com with SMTP id l13so330326lfg.6 for ; Tue, 02 Nov 2021 11:15:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:references:in-reply-to:mime-version:thread-index:date :message-id:subject:to:cc; bh=PfCT4FmzK5QOCdU3CjSkffaFF3hLcfzPuSQ+k/n6DeY=; b=V0SsoHSyihD+mJk1F20gTB4d5C03WLxUcF2CEK9mSNJ2wlgvBO6l3cCV6gcwiS1SSU 8r+fOefpJh8a4rYsAn3JYg/8fG7Ga2RMRjZRCht8nAKb7nAtWMo7E2OtwFWn+bZoEIL8 oi02Q/cCJqlrBo8+4e10rYtVGjcPS6yV/j7/c= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:references:in-reply-to:mime-version :thread-index:date:message-id:subject:to:cc; bh=PfCT4FmzK5QOCdU3CjSkffaFF3hLcfzPuSQ+k/n6DeY=; b=Xd3hePyRxqdXX2SWDqUsFoxrGwDzTszvVDkzEEzVlEv2+V95zomvegJiVOKT1bpeni KAeA2QcQhTUDkVmWrGQbNqjhkq/mi0mQrcIKG/fOXuvQEaQy6qve40eRf4JzJOxqpdIy MZLDbLNxUivEViAhccZR+a+aWOJLw48jw0AOnWkZsBuffuVsZ9lLfw61JJu9RLM1pT4M h5Dr/FlMUyB7DR9iG4yduPOFLurnlx6KhvbSeVTrP8U+PIlwIrh3UX6PvXXUHXnx62hz 7o0dM3B2LCD05TkSqTiBMqVN/HaxwbafjCmVEybVuTNgD71YJrwga2aJVJSE8RK/YZbH BMjQ== X-Gm-Message-State: AOAM532goPBS7rJk3TEClvM4TtLtqERIXzNl5e2h8sVr0SOO8RpHP/qx kGTu/JquUOmMbJSyEo1bf4e2iIxIf7/UNx/i/LXcpcEPWwCw7wFxa/udfdrOlQxsqS0+bN25pVH BUEcfbrDZTHSX3ci2R6/F X-Google-Smtp-Source: ABdhPJy/HgTMlZpEUSXb39C90e0sehtaTB9qRoNYwnNYXEBa9mGctHdScN2VWqRePj9/0TaFMuQ4hopkFSPTlT5ko+w= X-Received: by 2002:a05:6512:2344:: with SMTP id p4mr5581175lfu.424.1635876936310; Tue, 02 Nov 2021 11:15:36 -0700 (PDT) From: Roman Bacik References: <20211101202145.26318-1-roman.bacik@broadcom.com> <20211102130700.1ce19d24@thinkpad> In-Reply-To: <20211102130700.1ce19d24@thinkpad> MIME-Version: 1.0 X-Mailer: Microsoft Outlook 16.0 Thread-Index: AQLJUgcwkfoxhev7tObkmdfGzE+ZuwKPEbWHqfkOKYA= Date: Tue, 2 Nov 2021 11:15:27 -0700 Message-ID: <8ad5c59458d41d3a26dc96cdccf1e577@mail.gmail.com> Subject: RE: [PATCH v5 1/2] net: brcm: netXtreme driver To: =?UTF-8?B?TWFyZWsgQmVow7pu?= Cc: U-Boot Mailing List , Bharat Gooty , Joe Hershberger , Ramon Fried Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="000000000000b7348605cfd247d5" X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.2 at phobos.denx.de X-Virus-Status: Clean --000000000000b7348605cfd247d5 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Marek, > -----Original Message----- > From: Marek Beh=C3=BAn > Sent: Tuesday, November 2, 2021 5:07 AM > To: Roman Bacik > Cc: U-Boot Mailing List ; Bharat Gooty > ; Joe Hershberger > ; Ramon Fried > Subject: Re: [PATCH v5 1/2] net: brcm: netXtreme driver > > On Mon, 1 Nov 2021 13:21:44 -0700 > Roman Bacik wrote: > > > +static int set_phy_speed(struct bnxt *bp) > > +{ > > + char name[20]; > > + char name1[30]; > > + u16 flag =3D PHY_STATUS | PHY_SPEED | DETECT_MEDIA; > > + > > + /* Query Link Status */ > > + if (bnxt_hwrm_port_phy_qcfg(bp, flag) !=3D STATUS_SUCCESS) > > + return STATUS_FAILURE; > > + > > + switch (bp->current_link_speed) { > > + case PORT_PHY_QCFG_RESP_LINK_SPEED_100GB: > > + sprintf(name, "%s %s", str_100, str_gbps); > > + break; > > + case PORT_PHY_QCFG_RESP_LINK_SPEED_50GB: > > + sprintf(name, "%s %s", str_50, str_gbps); > > + break; > > + case PORT_PHY_QCFG_RESP_LINK_SPEED_40GB: > > + sprintf(name, "%s %s", str_40, str_gbps); > > + break; > > + case PORT_PHY_QCFG_RESP_LINK_SPEED_25GB: > > + sprintf(name, "%s %s", str_25, str_gbps); > > + break; > > + case PORT_PHY_QCFG_RESP_LINK_SPEED_20GB: > > + sprintf(name, "%s %s", str_20, str_gbps); > > + break; > > + case PORT_PHY_QCFG_RESP_LINK_SPEED_10GB: > > + sprintf(name, "%s %s", str_10, str_gbps); > > + break; > > + case PORT_PHY_QCFG_RESP_LINK_SPEED_2_5GB: > > + sprintf(name, "%s %s", str_2_5, str_gbps); > > + break; > > + case PORT_PHY_QCFG_RESP_LINK_SPEED_2GB: > > + sprintf(name, "%s %s", str_2, str_gbps); > > + break; > > + case PORT_PHY_QCFG_RESP_LINK_SPEED_1GB: > > + sprintf(name, "%s %s", str_1, str_gbps); > > + break; > > + case PORT_PHY_QCFG_RESP_LINK_SPEED_100MB: > > + sprintf(name, "%s %s", str_100, str_mbps); > > + break; > > + case PORT_PHY_QCFG_RESP_LINK_SPEED_10MB: > > + sprintf(name, "%s %s", str_10, str_mbps); > > + break; > > + default: > > + sprintf(name, "%s %x", str_unknown, bp- > >current_link_speed); > > + } > > + > > + sprintf(name1, "bnxt_eth%u_phy_speed", bp->cardnum); > > + env_set(name1, name); > > + dbg_phy_speed(bp, name); > > + > > + return STATUS_SUCCESS; > > +} > > + > > +static int set_phy_link(struct bnxt *bp, u32 tmo) > > +{ > > + char name[32]; > > + int ret; > > + > > + set_phy_speed(bp); > > + dbg_link_status(bp); > > + if (bp->link_status =3D=3D STATUS_LINK_ACTIVE) { > > + dbg_link_state(bp, tmo); > > + sprintf(name, "bnxt_eth%u_link", bp->cardnum); > > + env_set(name, "up"); > > + sprintf(name, "bnxt_eth%u_media", bp->cardnum); > > + env_set(name, "connected"); > > + ret =3D STATUS_SUCCESS; > > + } else { > > + sprintf(name, "bnxt_eth%u_link", bp->cardnum); > > + env_set(name, "down"); > > + sprintf(name, "bnxt_eth%u_media", bp->cardnum); > > + env_set(name, "disconnected"); > > + ret =3D STATUS_FAILURE; > > + } > > + > > + return ret; > > +} > > Hi Roman, > > your proposal still contains non-standard and unneeded setting of > environment variables. An ethernet driver should never do this. In fact > no driver besides board code or sysinfo driver should do this directly. > > There are other mechanisms for reporting PHY connection information in > U-Boot, please use those if you need them (e.g. implement a PHY > driver), but remove all env_set() calls from your ethernet driver. > > Rationale: historically, many times things were solved with ad-hoc code > in U-Boot, which did this kind of thing and similar. It got out of hand > pretty fast, and it was horrible. So some people dedided to fix it, > proposing APIs, unifying code, deduplicating code and so on. This is > still, in fact, going on. For your driver to have it's own mechanism > for reporting link status, by setting env variables, is going against > this whole work. > > I suggest for now just to remove these calls. When the driver is > merged, we can work on extending support for passing link information > to U-Boot via ethernet PHY API, if you need it. > > Marek We will remove env_set() calls in v6 as requested. Thanks, Roman --=20 This electronic communication and the information and any files transmitted= =20 with it, or attached to it, are confidential and are intended solely for=20 the use of the individual or entity to whom it is addressed and may contain= =20 information that is confidential, legally privileged, protected by privacy= =20 laws, or otherwise restricted from disclosure to anyone else. If you are=20 not the intended recipient or the person responsible for delivering the=20 e-mail to the intended recipient, you are hereby notified that any use,=20 copying, distributing, dissemination, forwarding, printing, or copying of= =20 this e-mail is strictly prohibited. If you received this e-mail in error,= =20 please return the e-mail to the sender, delete it from your computer, and= =20 destroy any printed copy of it. --000000000000b7348605cfd247d5 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature 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 6kRRYRlzjF1rVR3PZvtVpwKTcWvwqez9YnB5W7zFh0J6WXsQJsLKZoRNvv4VXAk2vycIsWR+aeNb l0x6vipMzcE90s2JZ/wqJlxX8dutql3gueCzZ2SxAgMBAAGjggHZMIIB1TAOBgNVHQ8BAf8EBAMC BaAwgaMGCCsGAQUFBwEBBIGWMIGTME4GCCsGAQUFBzAChkJodHRwOi8vc2VjdXJlLmdsb2JhbHNp Z24uY29tL2NhY2VydC9nc2djY3IzcGVyc29uYWxzaWduMmNhMjAyMC5jcnQwQQYIKwYBBQUHMAGG NWh0dHA6Ly9vY3NwLmdsb2JhbHNpZ24uY29tL2dzZ2NjcjNwZXJzb25hbHNpZ24yY2EyMDIwME0G A1UdIARGMEQwQgYKKwYBBAGgMgEoCjA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxz aWduLmNvbS9yZXBvc2l0b3J5LzAJBgNVHRMEAjAAMEkGA1UdHwRCMEAwPqA8oDqGOGh0dHA6Ly9j cmwuZ2xvYmFsc2lnbi5jb20vZ3NnY2NyM3BlcnNvbmFsc2lnbjJjYTIwMjAuY3JsMCMGA1UdEQQc MBqBGHJvbWFuLmJhY2lrQGJyb2FkY29tLmNvbTATBgNVHSUEDDAKBggrBgEFBQcDBDAfBgNVHSME GDAWgBSWM9HmWBdbNHWKgVZk1b5I3qGPzzAdBgNVHQ4EFgQUFIRMHHEZDi127CpeMcPLPgCva8Aw DQYJKoZIhvcNAQELBQADggEBAJ3AlGS8SnTzvdaHc1sGWw7/pdUpzU59NLy5p827v5YbcxopZQPL v2q6YbcQTpQnxVa++htLqp+WyOb3PTzydNsHb5B++mR/jz9/+mJsa7yvtLkcDDcQrOfrZus6usQs oGwMj7g7D2OvJHuBtBRpqnKDRO4Wi7MHuGDfW6Wm+YJ3iibIl8OPWiqXlfOlkYxAaZcAAW84IeeM umNUQbWNMoBfa5qSHxe3ZWGNFZWnpTN7vp4rmu8Z1qrZGrSVc9IO3z+3/AD9GdYdelj8miFNczvR 0iiTaHiP8f5hiC8LUlKosTub10tap8TP0SCcuXM5RgS1q9QJ/zmwbg1zPbTTGkgxggJtMIICaQIB ATBrMFsxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTEwLwYDVQQDEyhH bG9iYWxTaWduIEdDQyBSMyBQZXJzb25hbFNpZ24gMiBDQSAyMDIwAgwhRMMZKMaVhUl0DO8wDQYJ YIZIAWUDBAIBBQCggdQwLwYJKoZIhvcNAQkEMSIEIAfeEAfkowkCvqh2RZY4SJECUpuDZne7jNq0 VhA8axC8MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTIxMTEwMjE4 MTUzNlowaQYJKoZIhvcNAQkPMVwwWjALBglghkgBZQMEASowCwYJYIZIAWUDBAEWMAsGCWCGSAFl AwQBAjAKBggqhkiG9w0DBzALBgkqhkiG9w0BAQowCwYJKoZIhvcNAQEHMAsGCWCGSAFlAwQCATAN BgkqhkiG9w0BAQEFAASCAQA+6PNRZCa06j42LseqibbFU0gcUt1wFQopqCR4l4hwhQg3XDdntEcd ltu9zaktDBbH6T+dQ3j+aBOocB3wEr8JSqdzDabuJoLs3hTdE6xJmKSJF0BcOgSHJteUE7sFMr2C 1n5zeUBtPe4tHILKhbsPAV02cX/0Ga7rCOOeq6KJ5Q3TlpudwN+Kv8fmBiCUdkUD9Or7QrjMw1eD tYRWMzRgE+wTCWZH2MoGok/xnlhkyORAo5B4SBlanLYiZI0Q+Vt5aW3+GdFMqUYcnpnAmgWTStjV 77ZmxyJGkqdtjAbaneaJnqhVvmXTpzgyYZ3lxpMEo+MDXnqskyXhZxtZgab+ --000000000000b7348605cfd247d5--