Received: by 2002:a05:7412:a9a2:b0:e2:908c:2ebd with SMTP id o34csp1312942rdh; Fri, 27 Oct 2023 10:18:19 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGuFonvShDyg6RWgl/nb4cWaEhaYccRcjqx9wHP/+YYjuZVBFwEPrQvkpF2/w2Dks5nQbOQ X-Received: by 2002:a05:6808:1382:b0:3af:b2bd:daba with SMTP id c2-20020a056808138200b003afb2bddabamr3474880oiw.56.1698427099354; Fri, 27 Oct 2023 10:18:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698427099; cv=none; d=google.com; s=arc-20160816; b=t5Ox0nbr33T1iJh7ZouWq3gtDb1pnHdcQj/fP815vYCSO4kAqt1AyXi6bUJcik1eZ8 NatY0T8l3SoXkw5zJY1kxerzTzSwmO6fSJskJDRE/G+NtL70/XRh/x2I7hagTuoqS5lT B9SQlXkCrk84bmo1gZddLXQ5sCyYbn2qS0AieknleVX9zZCzWSTnsPPDffesQOTI6887 dn6+bsvJy6uzpDd55BgYgZH0HOq9WsPWdpYJU/cIDMWy1bHiOr43VZDova5Gtu+TcMk9 UXy7Q0A+dP9Ipuc9PjXm+u0e0ZGa36Q3hja15WT20oANNwBVnPDxfILYcnDrtU20mvFt nLkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:autocrypt:from:references:cc:to :subject:user-agent:mime-version:date:message-id:dkim-signature; bh=qMCxOCCxQ6vyyQwxTexxs7WS45fPoaJBN4/MY6KWS6A=; fh=+oTMsp8AlQD3+AhiyuKBxm7ysnwK5iXi0Oha8xr+qoQ=; b=o93is6VUEjUq8pXIpBmchJG6jAG2tOUPz5vx+cHwInFdTnwDqkbya10JDXA8FohYwn Ik3Mda1Cv0jimFtgYuOZABreacrN+DBq0OWY2+3Y4u4KBoeFtzI5FuQAk74EyZ2MfZWn 1rmitmilzFCgy5sam1rOY4mSIIP+wUJKB332F0qv5mps+463psUuI5wEx/ewfdCpOkhi 6KTcpyFvhRNvacUSY/EO9uFnJg8lffYPlxm74Eowcd9AFilMAXJoak27EgONrGEPPR17 JyX48ApzHsskfMui1HU3/2amSFZrHfnusydVyIXx/67QtSA98/rEg3kXz3sj4Op09Ofi lHGA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@broadcom.com header.s=google header.b=WC60mED6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=broadcom.com Return-Path: Received: from fry.vger.email (fry.vger.email. [2620:137:e000::3:8]) by mx.google.com with ESMTPS id v75-20020a25c54e000000b00da0ca2b19aasi3008076ybe.475.2023.10.27.10.18.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Oct 2023 10:18:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) client-ip=2620:137:e000::3:8; Authentication-Results: mx.google.com; dkim=pass header.i=@broadcom.com header.s=google header.b=WC60mED6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:8 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=broadcom.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id CE9B583459C7; Fri, 27 Oct 2023 10:18:15 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346003AbjJ0RSD (ORCPT + 99 others); Fri, 27 Oct 2023 13:18:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35508 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232500AbjJ0RRx (ORCPT ); Fri, 27 Oct 2023 13:17:53 -0400 Received: from mail-pf1-x432.google.com (mail-pf1-x432.google.com [IPv6:2607:f8b0:4864:20::432]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9090D2114 for ; Fri, 27 Oct 2023 10:15:34 -0700 (PDT) Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-6b5af4662b7so2227050b3a.3 for ; Fri, 27 Oct 2023 10:15:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1698426934; x=1699031734; darn=vger.kernel.org; h=in-reply-to:autocrypt:from:references:cc:to:subject:user-agent :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=qMCxOCCxQ6vyyQwxTexxs7WS45fPoaJBN4/MY6KWS6A=; b=WC60mED6KnoFyACg3iPBjrQ0bt3EEN/nrgNBye/j2Ayod6WwUkw0KTo9RSCn1n/9Tq beQgLn0oRalZJ3rg7FbE8hzlQ7Xm3U9lgWdyTu2J6zn1WV5Hm/mSQTQFRhr8OIVQ67P4 5J8GGKBwiXdyj4SKfaJ3XqJJL8e7F3mo/wxYE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698426934; x=1699031734; h=in-reply-to:autocrypt:from:references:cc:to:subject:user-agent :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=qMCxOCCxQ6vyyQwxTexxs7WS45fPoaJBN4/MY6KWS6A=; b=LvleGJ5cSL0He9Tm8mkwEksEx/rckdEUAaB5PgCd04KmsuG0b1bmXljbs3vH6iVPg8 hE3mZ+SpynNpFHEWGGpATFol6QmkosCkQzS3girAmuRnQnfE8t5WY/SyFDwkL+yZ5bvM pXBwx72KVmzMYJHPY8I9NfAbdWeRxX3niQtetdUsHV7LheNjANGJ+ylBQERWH0ceYe+w tWRdO6qD7rCFSwME1RkkJL65peV0t10hVam2Xb3Tb8mjrd38Sfrg3qDmmcXVxFWXTod/ YbmSmPIGENT7cILHQSn8VIxaxIWnJydZe+hX0gQuNMUSxgQXrLhmGeFQ4yQ7uGBGXdwC VI0Q== X-Gm-Message-State: AOJu0YxweQtN5CxPobgd/sS7zF1Bd8iwIBspaNJyYl2CvDL9WMMwON3a lepOch2Eko5y6jc8Mj7gOg1oLQ== X-Received: by 2002:a05:6a20:4422:b0:13d:8876:4c97 with SMTP id ce34-20020a056a20442200b0013d88764c97mr4457854pzb.16.1698426933850; Fri, 27 Oct 2023 10:15:33 -0700 (PDT) Received: from [10.67.48.245] ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id h21-20020a056a00219500b006bf43e5619bsm1617580pfi.195.2023.10.27.10.15.29 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 27 Oct 2023 10:15:30 -0700 (PDT) Message-ID: <93abb8d0-40c6-4758-a8de-c79d7acce6bc@broadcom.com> Date: Fri, 27 Oct 2023 10:15:28 -0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH net-next v2 5/5] net: bcmgenet: Interrogate PHY for WAKE_FILTER programming To: Jacob Keller , netdev@vger.kernel.org Cc: Doug Berger , Broadcom internal kernel review list , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Andrew Lunn , Heiner Kallweit , Russell King , Vladimir Oltean , Tariq Toukan , Gal Pressman , Willem de Bruijn , Daniil Tatianin , Simon Horman , Justin Chen , Ratheesh Kannoth , Joe Damato , Vincent Mailhol , Jiri Pirko , open list References: <20231026224509.112353-1-florian.fainelli@broadcom.com> <20231026224509.112353-6-florian.fainelli@broadcom.com> <0a164b9b-4f9b-4886-b19e-48298cdcff8d@intel.com> <2eeb8e24-4122-450b-adf5-8c8a746db518@broadcom.com> <6456509b-9df7-47e3-b941-c307594a80d2@intel.com> From: Florian Fainelli Autocrypt: addr=florian.fainelli@broadcom.com; keydata= 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 In-Reply-To: <6456509b-9df7-47e3-b941-c307594a80d2@intel.com> Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="00000000000018c0dd0608b5d6ac" X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Fri, 27 Oct 2023 10:18:16 -0700 (PDT) --00000000000018c0dd0608b5d6ac Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 10/27/23 09:55, Jacob Keller wrote: > > > On 10/26/2023 4:52 PM, Florian Fainelli wrote: >> On 10/26/23 16:23, Jacob Keller wrote: >>> >>> >>> On 10/26/2023 3:45 PM, Florian Fainelli wrote: >>>> Determine whether the PHY can support waking up from the user programmed >>>> network filter, and if it can utilize it. >>>> >>> >>> Here, you're passing through to phy_ethtool_set_rxnfc, basically >>> allowing the lower device to program the wakeup filter if its supported. Ok. >>> >>> This almost feels like it would belong generally in the higher level >>> ethtool code rather than in the driver? >> >> Agreed, as Doug just pointed out to me, there is still an open question >> about reconciling the PHY and the MAC RXNFC spaces into a single >> ethtool_rxnfc structure. >> >> An ideal goal is to have zero modifications to neither the MAC or the >> PHY drivers such that they can both work in their own spaces as if they >> were alone, or combined. >> >> I suppose that if we get the number of supported rules from the MAC >> first, and then get the supported number of rules from the PHY next, we >> could do something like this: >> >> rule index >> | 0| >> | .| -> MAC rules >> |15| >> |16| -> PHY rule >> >> and each of the MAC or the PHY {get,set}_rxnfc() operate within a base >> rule number which is relative to their own space. So the MAC driver >> would continue to care about its (max..first) - base (0) range, and the >> PHY would care about (max..first) - base (16). >> >> Though then the issue is discoverability, how do you know which rule >> location is backed by which hardware block. We could create an >> intermediate and inert rule at index 16 for instance that acts as a >> delimiter? >> >> Or we could create yet another RX_CLS_LOC_* value that is "special" and >> can denote whether of the MAC or the PHY we should be targeting >> whichever is supported, but that does not usually lend itself to being >> logically ORed with the existing RX_CLS_LOC_* values. WDYT? >> >> pw-bot: cr > > Ah, yea there is a lot of complexity to consider here. Yes this is only the tip of iceberg! Here is hopefully a better description of our particular system where this is being requested (the fact there is a single one also makes me question the entire effort, but anyway). We have 2 distinct system sleep modes: - akin to ACPI S2 where the Ethernet PHY and MAC remain enabled and both can be used for Wake-on-LAN filtering, with the MAC being more capable than the PHY. System power consumption is just around 500mW at the wall. In that case it would make sense to leverage the MAC's capability because it is better and would lead to fewer false wake-ups - akin to ACPI S3 where the Ethernet PHY only remains enabled, the MAC is powered off (as is most of the SoC), but we have limited Wake-on-LAN capability in the form of network filter as we can only match on a custom MAC DA + mask. System power consumption is closer to 350mW at the wall. My users are not really willing to use the broad WAKE_MCAST because they want to match specifically on mDNS over IPv4 (or IPv6), so they prefer to program an exact match to limit the amount of false wake-ups. Arguably there will already be quite a lot in home network due to phones, IoT devices, and whatnot. From an user perspective they would know which system standby state is being entered so one could imagine that ahead of entry, we could configure either the MAC, or the PHY when targeting S2, or just the PHY when targeting S3. This implies that we can selectively target one entity, or the other. For the current time being, and knowing the use case of my users, directing all of the Wake-on-LAN configuration towards the PHY would be enough IMHO, even if that means we stop leveraging the MAC capabilities, hence this patch series. > > I'm not entirely sure what we should do here. What about extending with > another attribute entirely instead of another bit in RX_CLS_LOC? Yes possibly, or we just target different objects, right now we have visibility into the MACs via the net_device, it seems like we ought to be able to target some ethtool APIs towards PHY objects, which currently have no netlink representation. There is on-going work to bridge that gap: https://lore.kernel.org/netdev/ffc6ff4a-d1af-4643-a538-fd13e6be9e06@lunn.ch/T/ but I am not sure we will reach an agreement any time soon. Maybe I can convince my masters to wait for that to land and use WAKE_MCAST in the meantime. I would not necessary want to invent a new set of ethtool commands and kernel APIs such that we could do the below examples, though maybe this is not incompatible with the work being done by Maxime: # Target the Ethernet MAC ethtool -N eth0 flow-type ether dst 01:00:5e:00:00:fb loc 0 action -2 # Assumes MAC by default ethtool -N eth0 flow-type ether dst 01:00:5e:00:00:fb loc 0 action -2 target mac # Target the Ethernet PHY, if capable ethtool -N eth0 flow-type ether dst 01:00:5e:00:00:fb loc 0 action -2 target phy # Enable WAKE_FILTER at the MAC level ethtool -s eth0 wol f # assumes MAC by default ethtool -s eth0 wol f target mac # Enable WAKE_FILTER at the PHY level, if capable ethtool -s eth0 wol f target phy though maybe this is the much needed addition to ethtool so we can be more selective. After a bunch of candies on Tuesday I might reach a state of trance and figure which way to proceed :D -- Florian --00000000000018c0dd0608b5d6ac 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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 riBJ/K1AFUjRAjFhGV64l++td7dkmnq/X8ET75ti+w1s4FRpFqkD2m7pg5NxdsZphYIXAgMBAAGj QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSP8Et/qC5FJK5N UPpjmove4t0bvDANBgkqhkiG9w0BAQsFAAOCAQEAS0DbwFCq/sgM7/eWVEVJu5YACUGssxOGhigH M8pr5nS5ugAtrqQK0/Xx8Q+Kv3NnSoPHRHt44K9ubG8DKY4zOUXDjuS5V2yq/BKW7FPGLeQkbLmU Y/vcU2hnVj6DuM81IcPJaP7O2sJTqsyQiunwXUaMld16WCgaLx3ezQA3QY/tRG3XUyiXfvNnBB4V 14qWtNPeTCekTBtzc3b0F5nCH3oO4y0IrQocLP88q1UOD5F+NuvDV0m+4S4tfGCLw0FREyOdzvcy a5QBqJnnLDMfOjsl0oZAzjsshnjJYS8Uuu7bVW/fhO4FCU29KNhyztNiUGUe65KXgzHZs7XKR1g/ XzCCBVgwggRAoAMCAQICDBP8P9hKRVySg3Qv5DANBgkqhkiG9w0BAQsFADBbMQswCQYDVQQGEwJC RTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTExMC8GA1UEAxMoR2xvYmFsU2lnbiBHQ0MgUjMg UGVyc29uYWxTaWduIDIgQ0EgMjAyMDAeFw0yMjA5MTAxMjE4MTFaFw0yNTA5MTAxMjE4MTFaMIGW MQswCQYDVQQGEwJJTjESMBAGA1UECBMJS2FybmF0YWthMRIwEAYDVQQHEwlCYW5nYWxvcmUxFjAU BgNVBAoTDUJyb2FkY29tIEluYy4xGTAXBgNVBAMTEEZsb3JpYW4gRmFpbmVsbGkxLDAqBgkqhkiG 9w0BCQEWHWZsb3JpYW4uZmFpbmVsbGlAYnJvYWRjb20uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEA+oi3jMmHltY4LMUy8Up5+1zjd1iSgUBXhwCJLj1GJQF+GwP8InemBbk5rjlC UwbQDeIlOfb8xGqHoQFGSW8p9V1XUw+cthISLkycex0AJ09ufePshLZygRLREU0H4ecNPMejxCte KdtB4COST4uhBkUCo9BSy1gkl8DJ8j/BQ1KNUx6oYe0CntRag+EnHv9TM9BeXBBLfmMRnWNhvOSk nSmRX0J3d9/G2A3FIC6WY2XnLW7eAZCQPa1Tz3n2B5BGOxwqhwKLGLNu2SRCPHwOdD6e0drURF7/ Vax85/EqkVnFNlfxtZhS0ugx5gn2pta7bTdBm1IG4TX+A3B1G57rVwIDAQABo4IB3jCCAdowDgYD VR0PAQH/BAQDAgWgMIGjBggrBgEFBQcBAQSBljCBkzBOBggrBgEFBQcwAoZCaHR0cDovL3NlY3Vy ZS5nbG9iYWxzaWduLmNvbS9jYWNlcnQvZ3NnY2NyM3BlcnNvbmFsc2lnbjJjYTIwMjAuY3J0MEEG CCsGAQUFBzABhjVodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9nc2djY3IzcGVyc29uYWxzaWdu MmNhMjAyMDBNBgNVHSAERjBEMEIGCisGAQQBoDIBKAowNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93 d3cuZ2xvYmFsc2lnbi5jb20vcmVwb3NpdG9yeS8wCQYDVR0TBAIwADBJBgNVHR8EQjBAMD6gPKA6 hjhodHRwOi8vY3JsLmdsb2JhbHNpZ24uY29tL2dzZ2NjcjNwZXJzb25hbHNpZ24yY2EyMDIwLmNy bDAoBgNVHREEITAfgR1mbG9yaWFuLmZhaW5lbGxpQGJyb2FkY29tLmNvbTATBgNVHSUEDDAKBggr BgEFBQcDBDAfBgNVHSMEGDAWgBSWM9HmWBdbNHWKgVZk1b5I3qGPzzAdBgNVHQ4EFgQUUwwfJ6/F KL0fRdVROal/Lp4lAF0wDQYJKoZIhvcNAQELBQADggEBAKBgfteDc1mChZjKBY4xAplC6uXGyBrZ kNGap1mHJ+JngGzZCz+dDiHRQKGpXLxkHX0BvEDZLW6LGOJ83ImrW38YMOo3ZYnCYNHA9qDOakiw 2s1RH00JOkO5SkYdwCHj4DB9B7KEnLatJtD8MBorvt+QxTuSh4ze96Jz3kEIoHMvwGFkgObWblsc 3/YcLBmCgaWpZ3Ksev1vJPr5n8riG3/N4on8gO5qinmmr9Y7vGeuf5dmZrYMbnb+yCBalkUmZQwY NxADYvcRBA0ySL6sZpj8BIIhWiXiuusuBmt2Mak2eEv0xDbovE6Z6hYyl/ZnRadbgK/ClgbY3w+O AfUXEZ0xggJtMIICaQIBATBrMFsxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52 LXNhMTEwLwYDVQQDEyhHbG9iYWxTaWduIEdDQyBSMyBQZXJzb25hbFNpZ24gMiBDQSAyMDIwAgwT /D/YSkVckoN0L+QwDQYJYIZIAWUDBAIBBQCggdQwLwYJKoZIhvcNAQkEMSIEIOujcY/4YLri8WzS 2yAzrWq2teqHyoma/ewUl4RcBCkgMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcN AQkFMQ8XDTIzMTAyNzE3MTUzNFowaQYJKoZIhvcNAQkPMVwwWjALBglghkgBZQMEASowCwYJYIZI AWUDBAEWMAsGCWCGSAFlAwQBAjAKBggqhkiG9w0DBzALBgkqhkiG9w0BAQowCwYJKoZIhvcNAQEH MAsGCWCGSAFlAwQCATANBgkqhkiG9w0BAQEFAASCAQDsD9XrrDqJIzpkicHUjMnmQPP5B0zQRdRU GORZ2knPR/7Q2iCseF026q9fD0OVwvPtBtJZFM9aWILRSc3WfDSjBgo9Ip+r9hQhBXS+2fOzoZ5K XSNsPFJjLf8mTSKkpQFNBxhXR/214aaZFiWzzrKHF6YXIwQFL4OT+k55BBJsvp03v02h6utq4FDr n7wLH1nFxjFxs0Q8XxM2GtaEqyB3L+7W8VXi12OAj2hOQFJ2zNGpQ19rDo8SlPNJtbvkWA6QeKwn 1dC0/fm2mMWXzw7Eak+kwt40EaXUFtAqaCgFOe+hpL0upYqgP3iwMTfdB4L/U4V7mftGt19xZ73M D/rW --00000000000018c0dd0608b5d6ac--