From patchwork Mon Oct 17 20:22:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 3709 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp1629676wrs; Mon, 17 Oct 2022 13:30:00 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5QeXNrixctMF+Ki3jqsbYhVj18tq+jWDj0BQDjOum/xzTFyBikjbopHzIyVlpx62CoH/zo X-Received: by 2002:a05:6402:1393:b0:457:ea9e:ba20 with SMTP id b19-20020a056402139300b00457ea9eba20mr12083451edv.109.1666038600569; Mon, 17 Oct 2022 13:30:00 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1666038600; cv=pass; d=google.com; s=arc-20160816; b=RcpDH3zFoYRfWWdKLCt3TL/Hb5A4QcSi1nGEqC/HQra6onFkrBIoKi8yFCCkWlIS6z lYso+SVSBkG9qvT6SEEYgeh4zx3qdxeECIqEII9h2w/SlVs1Kgtm06l8xEQqgv9iz+Ge tsJUC2BemfofObE5jWWxYk64BtBF/VNPEPIlDCrGN1uwn2+v8l+y7csPki1ojaAekXQA uM4bjwSWhUz24HgpNk6WUYtf0JXvEtGlOLEZAGXDKU6ImB6zVW3FG+VXWB81JmRfsoRR K8bB+W8G39VusUszjwhLwr+gcmDpFyGPvBg86C+hiqfEm9OpSY+4A/lbLMRIxOgD5ITi GS0A== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=5C2mgYaqyU3zLTMSIkqkhNLz06t8lV/qE5qd5Sc4rGs=; b=FTxwDvvwdXZ5PK01LU5e0B2X1Rcf3DjF4ziu+ofPPWlVpx0cTPC2EvKR4vdFzyjBlU tDiZMGfNIV0TdqwZpBH+PJZTYMvfhal9/UHL3/yHoX7K6r540fD2b58/QDE5p+ypQLkN MXhrmuMm5F0fclz6dSEi1m9H4Oz54u+qwxgjpfNvLCSuafCRPFm+pd2uPDL90XJH72a6 A004oaVRJ3GHGJPRH6PrU78gYlDooHe4gAP+cPZ/CuFn99rbVSSck8aZsi8hqmERLz1H UPMeo5m9mB1ohldbh2AyEGuXavswipgfMJTFIa7+wV/ancTcd/4pvl6Cbx7dcFhN7rwc g9yg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@seco.com header.s=selector1 header.b=JFhiEQHB; arc=pass (i=1 spf=pass spfdomain=seco.com dkim=pass dkdomain=seco.com dmarc=pass fromdomain=seco.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=seco.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id bq3-20020a056402214300b0044f2eb2de9asi8741176edb.444.2022.10.17.13.29.32; Mon, 17 Oct 2022 13:30:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@seco.com header.s=selector1 header.b=JFhiEQHB; arc=pass (i=1 spf=pass spfdomain=seco.com dkim=pass dkdomain=seco.com dmarc=pass fromdomain=seco.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=seco.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230253AbiJQUXX (ORCPT + 99 others); Mon, 17 Oct 2022 16:23:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52492 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229928AbiJQUXJ (ORCPT ); Mon, 17 Oct 2022 16:23:09 -0400 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2066.outbound.protection.outlook.com [40.107.22.66]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E3EA912629; Mon, 17 Oct 2022 13:23:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nnha654+c2wg3FVpcB7pOr3BHcmSKe5ueGeYctt45EcbfKkgGV6Xu8bjOxqT023rFOOCu8zJb/Pno6lh/htO0Hrvy8QWkK4ea2sHVGC7rgRZFoYL9lnWXK1YKV4Z5gMu36hmnfiAH9A7dI5lvD38JjyTiyMz0rMPaCfQ2rsCx6fsKlEwj1iX6JUcmOE4qs4IsXukKI7TpQTlnazZMhhokL2oCy82qryZmQO2io/ex95faVTMq1VwfhHGQ1bgr/pu+jMryDIBGYSsSiz3AEkihbDnU8qEamAe+K6SBcDxLLtlLuAf2lTI55QgnRFEU1Egdhah7ankVz1GgxbwGnGZ7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=5C2mgYaqyU3zLTMSIkqkhNLz06t8lV/qE5qd5Sc4rGs=; b=RZPgiqiWjGznsuHbYdvbakLgSXvOMSDITjw4uuOtQKvAnWYuxPn79sHdeo6Pru/r5Y+IifjGdVP7ySyVrCUtCAj9D3F6uoWM5fure2Ky7hGIkkxJalhbRXO3VZUQ7dOeb1eQpJ1ehrBWhp/O0wJfnnDrU0aG7aMY+l94pbdmqGpxahzOceydntBIwljuDylcCKoEoH0yKFDpkpPTU77SB5e+b+nbGBbqS7TarDtHg/FKvG7vFBUTW4mdC/muP8JLIErbVCAmTzi54L1oyxDm26rPfWhOWp4pD+8+xpuU4EdpYoLqI/HGmFyjvaiZaDRQoP41OJNo0BA8RymTsnAsbA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=seco.com; dmarc=pass action=none header.from=seco.com; dkim=pass header.d=seco.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=seco.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5C2mgYaqyU3zLTMSIkqkhNLz06t8lV/qE5qd5Sc4rGs=; b=JFhiEQHB/N9gTLjQcJk2rWykLxpOuNLY381zuXmfT/SMICuRu7duiO7jCGZd/agQsv3HbsHrD0T5GTZYBoiK8O0+2xE4PfaafyJ4VSPkhExVM9XD6NpiXYLG+erkEhHLNo2o6jiGPwgTuH55kBommu8J+qkcGYeeo2DT5m46hi3IIqb8WMLI1uPdhspxCtsJ9mKrRo6fvP3tuqj6gVwuBPPlHk2X1ZLHyZYcT6SpmgYCDKo1PtJvMiOPpDof+sLjtxuH0J+ExdUrD+QcmMyP2h9TfOCrDQKTANShfF9ADWWHETf5XMd1lAQ1PcavoUsfweATNwiSdaQWl2nXjMzo7w== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=seco.com; Received: from DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) by AS8PR03MB9510.eurprd03.prod.outlook.com (2603:10a6:20b:5a5::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.32; Mon, 17 Oct 2022 20:23:05 +0000 Received: from DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::204a:de22:b651:f86d]) by DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::204a:de22:b651:f86d%6]) with mapi id 15.20.5723.033; Mon, 17 Oct 2022 20:23:05 +0000 From: Sean Anderson To: "David S . Miller" , Jakub Kicinski , Madalin Bucur , Camelia Alexandra Groza , netdev@vger.kernel.org Cc: Eric Dumazet , "linuxppc-dev @ lists . ozlabs . org" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Russell King , Paolo Abeni , Sean Anderson , Rob Herring , Krzysztof Kozlowski , Rob Herring , devicetree@vger.kernel.org Subject: [PATCH net-next v7 01/10] dt-bindings: net: Expand pcs-handle to an array Date: Mon, 17 Oct 2022 16:22:32 -0400 Message-Id: <20221017202241.1741671-2-sean.anderson@seco.com> X-Mailer: git-send-email 2.35.1.1320.gc452695387.dirty In-Reply-To: <20221017202241.1741671-1-sean.anderson@seco.com> References: <20221017202241.1741671-1-sean.anderson@seco.com> X-ClientProxiedBy: SJ0PR03CA0251.namprd03.prod.outlook.com (2603:10b6:a03:3a0::16) To DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB7PR03MB4972:EE_|AS8PR03MB9510:EE_ X-MS-Office365-Filtering-Correlation-Id: 48e59519-1cbd-4552-0733-08dab07d658a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zKD4eIR3RAx+OPP2JJEs1fj1p+AM3vLiP3wwqRMBhY8qvDvWgC8esn72SSo1rFRb3khB91lyYKC6pSRhwTjhNz01Q9voyDMT4+j4rYb7/0WwgG9sFzJz8iNEfJwGz1A44jfMVOt5KLuGQ0pJPzVzbOni7tiRWVBnrnT2hhJyR4VV3zvh7+J0sTCLbH29BPBJTH64NbI8iD+JXdmWS8AozOkKKwPWJ+Imz+YvWRSNtKavLwD+CpVeh+GrdM84LN1F6+9f8fD3ar+iJ1HZ/LBb5zmjByyJucLhuetggm96guZEIpRn9giWEsktcoQpCaeSJWJOZ+fpmF0GoRvXdEvZpBoU9Q/zma9f0q5rVUpHOXBy0+lFtZsC1vXYKstI7iZL7ZnIamNI3bE7fAL6mM2nx2uhstzdFX3+Pp17hZTIBFcbBWwWMGN2La0XamEVRuPIYCZGoKytDT1e1kXKq9D48rznmC1MoUfqaxEQT7Ti0ePKUWMHTc0KSi00Oz9aMxDJZDdJ6FJPnFVHL361Ut09JVDIdB415fRZfiiC06gdEj4eHrOHLeakQO4rpX+1/ajyHLlG154BO71i17HOV4L4zeS3wyOaFN629R1Gppklocw8tidW6qEp7D2B+tihjditxD7WcCtf8ALhwq9TVBl152VLe0tnZ6kIjeog5VbTvTuDQfJNCeDauA5MnM9GoGXsLqUIn/3x7y9Dn8hEmWxUq0HNbIhcWo1z7wgxi+uIo4iefEKiawvdbPVoAZGqqBAASKY3vtVowJLaMubaeTHcQ5COgT2IoxHNAg9mHmo4E9s= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB7PR03MB4972.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(366004)(39850400004)(346002)(376002)(396003)(136003)(451199015)(4326008)(66946007)(86362001)(8936002)(5660300002)(8676002)(38100700002)(66556008)(66476007)(83380400001)(110136005)(54906003)(1076003)(2616005)(2906002)(316002)(6506007)(36756003)(26005)(6512007)(186003)(7416002)(6666004)(38350700002)(44832011)(966005)(478600001)(41300700001)(6486002)(52116002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 1VDP1KvSZF/x8CBwp5VimAINxh2yYFy8qAhXu6mQvt/1B0/c4m/9O29RBVihF6js4iKWDOF+VHLSum6JCKdMzvWt6/qHUAbVoXqm75B3zyyaaW8Z0B1THV+Rw88Ki3fZTaz/N4LilggMIacnmDFvQ04lurpdZYtGVxRTOryWn4AeCzMQZOHY6I2AjF/d9q1WafU7uwEX27rwEl9hjWe4UeawZMKmj/oyU8cJ+i8MAMH4emX64o2ZS2QGOQTxkDSFskBuvmkEPYEhaHnEoL40+j2msr396d6hs6WpMwzmU7jLIFuGr6vK3FzznXbHbHMkQIgdUXUhipvy0j8KA7gE3WQHOSGu/vYZ2rlOw0BEyWXqlq8be4VE9+k6M8fpz2YD2mLJ4Oifu77Lw8QYaGk8Zt0k+P9d1HLwPz8bi+eF3u1LaM/Zmq/V8uSrxMmnOZii9tj0+d+sQGZbVsL7ixh8kzz0DWLz+2h+1ECRUfUiW2Xcf5JEICQUBdhwT0U2zUNgjGpa19iQlos6YmbfpP8swt2RZ8gEKowORMhnlvehNFwiAG/j3ujNZuzj8ur+r9dxrG9C6ljghrS0gmsmpxZubRIOAb8tQpwLswCHjbP/ohuRg58MLLJvi67A2zXLhTjSPEg6PVyrmHj3QKYRZOWux1E9mIbRfakBVJ+7cwb3dr9ZMpBbKheQs7mEwLtdUYFR27NcXLhiTqB+UnVQlhYqhUBbaNIwcmnZs+YEKHfZFuvAH5Aoj2KqOHYQ4H3WA92N021FCRrSayFm2668qxMP5fWRRR3C1nKxun2OT5gayOrKg2MUM7v4s4gPnEr+NoKaO0SZUiXnlSrrXS3r1RbPgrU/eo6fgfLQhPVD7iI9jHMxWXwg10D1CPt5yrn5R8v72DccPK+TauM+nk+mGXi1e/DduIbetDZ8jNP+dZlGBicRD1rY+00cO1qOBHQCfb2ZJ5sXdlpBOde/ykJIrbwmZiUShV7zDi5iCxV1bSJc6vwsGv32ncJC0Jvd1M/ZGs6wfMLS/HEwsR0e9IRaUOaMvkH5eElHvSYAhJp8x9quwW6N37jHviYQwbhbyU5kFH3AW+G3qhWYPMLqcmzeuRSSe1pj+MeOn+4z70jhkvCB+DCZyUipBfD+X2y77mVWjaQ+vdei/H5uvM1WZx4qSyLiu2WSrbPU6WXFyEprw5SO1refL8hVSHNZyRXYSEPHtlBc1nb1WFLFc7fZUU9bcL3dlgIYPYFk9AHmhlSh8ojt+Zu93OmtA1UCY48zDIw713CvVnOl5q9O/pcXvNrAMSMgKLL7ub34Ec0CyHCsgAyNvVMVK7yOJ2SSHqRzSMN/lS0ckLubGU/iKBozMeyT6Xq/UR+Srg/UcTmCI7yha686hzpQQQP108JxdIzG/epvyETwjgWp3C23LNf5KU8YBYqN2uxQ4TgusnF2+0uGuhnCMkorM1AEp+6gJYKteje/nmSWHP3LKStJro2ZM/J5A2uFj5gTGYuRE2aL5WF7M3H0AT7xTzbfyGVCmamrFWrD7JCfMoymrxaiMCPIqaSBCokqI8BldWcXVowIFhqTp9I/7lA17eAnY2VQ5NzWpv4ewnX60O3OQ6kq4T3icMD3M3aj9A== X-OriginatorOrg: seco.com X-MS-Exchange-CrossTenant-Network-Message-Id: 48e59519-1cbd-4552-0733-08dab07d658a X-MS-Exchange-CrossTenant-AuthSource: DB7PR03MB4972.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2022 20:23:04.9479 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bebe97c3-6438-442e-ade3-ff17aa50e733 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ZWmesjVTTh9QNDhOdujVyUAUr8+CHSJ/bcoIxRCeT1+kvu3J5P03bW8/mr8HA0xUIKDJ1SyQW+awjZIg1s7O0g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR03MB9510 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1746968091247971039?= X-GMAIL-MSGID: =?utf-8?q?1746968091247971039?= This allows multiple phandles to be specified for pcs-handle, such as when multiple PCSs are present for a single MAC. To differentiate between them, also add a pcs-handle-names property. Signed-off-by: Sean Anderson Reviewed-by: Rob Herring --- This was previously submitted as [1]. I expect to update this series more, so I have moved it here. Changes from that version include: - Add maxItems to existing bindings - Add a dependency from pcs-names to pcs-handle. [1] https://lore.kernel.org/netdev/20220711160519.741990-3-sean.anderson@seco.com/ (no changes since v6) Changes in v6: - Remove unnecessary $ref from renesas,rzn1-a5psw - Remove unnecessary type from pcs-handle-names - Add maxItems to pcs-handle Changes in v4: - Use pcs-handle-names instead of pcs-names, as discussed Changes in v3: - New .../bindings/net/dsa/renesas,rzn1-a5psw.yaml | 2 +- .../devicetree/bindings/net/ethernet-controller.yaml | 11 ++++++++++- .../devicetree/bindings/net/fsl,qoriq-mc-dpmac.yaml | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/net/dsa/renesas,rzn1-a5psw.yaml b/Documentation/devicetree/bindings/net/dsa/renesas,rzn1-a5psw.yaml index 7ca9c19a157c..0a0d62b6c00e 100644 --- a/Documentation/devicetree/bindings/net/dsa/renesas,rzn1-a5psw.yaml +++ b/Documentation/devicetree/bindings/net/dsa/renesas,rzn1-a5psw.yaml @@ -74,10 +74,10 @@ properties: properties: pcs-handle: + maxItems: 1 description: phandle pointing to a PCS sub-node compatible with renesas,rzn1-miic.yaml# - $ref: /schemas/types.yaml#/definitions/phandle unevaluatedProperties: false diff --git a/Documentation/devicetree/bindings/net/ethernet-controller.yaml b/Documentation/devicetree/bindings/net/ethernet-controller.yaml index 4b3c590fcebf..3aef506fa158 100644 --- a/Documentation/devicetree/bindings/net/ethernet-controller.yaml +++ b/Documentation/devicetree/bindings/net/ethernet-controller.yaml @@ -108,11 +108,17 @@ properties: $ref: "#/properties/phy-connection-type" pcs-handle: - $ref: /schemas/types.yaml#/definitions/phandle + $ref: /schemas/types.yaml#/definitions/phandle-array + items: + maxItems: 1 description: Specifies a reference to a node representing a PCS PHY device on a MDIO bus to link with an external PHY (phy-handle) if exists. + pcs-handle-names: + description: + The name of each PCS in pcs-handle. + phy-handle: $ref: /schemas/types.yaml#/definitions/phandle description: @@ -216,6 +222,9 @@ properties: required: - speed +dependencies: + pcs-handle-names: [pcs-handle] + allOf: - if: properties: diff --git a/Documentation/devicetree/bindings/net/fsl,qoriq-mc-dpmac.yaml b/Documentation/devicetree/bindings/net/fsl,qoriq-mc-dpmac.yaml index 7f620a71a972..600240281e8c 100644 --- a/Documentation/devicetree/bindings/net/fsl,qoriq-mc-dpmac.yaml +++ b/Documentation/devicetree/bindings/net/fsl,qoriq-mc-dpmac.yaml @@ -31,7 +31,7 @@ properties: phy-mode: true pcs-handle: - $ref: /schemas/types.yaml#/definitions/phandle + maxItems: 1 description: A reference to a node representing a PCS PHY device found on the internal MDIO bus. From patchwork Mon Oct 17 20:22:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 3697 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp1629067wrs; Mon, 17 Oct 2022 13:27:51 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6MlAwSVavRa3VBnxnpdLCgM9CipXVr35g7h++oZIu5j7CQ/dAVdnSuA3kJiSo5Yb/aYYCj X-Received: by 2002:a17:907:6095:b0:78d:bb0b:c34d with SMTP id ht21-20020a170907609500b0078dbb0bc34dmr9909557ejc.662.1666038471759; Mon, 17 Oct 2022 13:27:51 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1666038471; cv=pass; d=google.com; s=arc-20160816; b=x38IeHp6rlMxys3gjL+6bxNpWn2Z+XlTGeuNYlq3xsqg2Vfbx2hpqEiObPifByiW7m hUz6neucypYLrDirMwx83FwmeJWRSKJs7+iHMzlYWOf3BPgyMwYYACFAsuK/brnlEnpH mR1BCNfg1L5f76Lo9LezJu93v3IsGFIso2q29euqpVF56mSGIpI8cFceULTZivVBnoW+ wkJEKT3Kr5+Q8PxKamYGEAUbidbz8yqlwH/ellD3M4aD32h9jqJOss69Sdrwwaut8dM8 4RZxTgAxyENWsVI506ILjPyx2nBYX285w8TR5WOQ8VRB1JuOOcd7lMP38y4eBwzhUd1s 0gRg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=OiB6zoWB32H0EkrMl3eZ7akSCrZvMfmnm7jIt71Dpkw=; b=WplFFuspCnOBjM8JuvnTmjALNUaWPf8lWPWEPFuHI/AUyykYUCniuw/KKPciyq9s/p cP8bBeIn1j/inHuyoWjNBr779qdySy0e9gNk/5PmP2XIQoGIKbqBGXZlwN4607OQALga 8GWMDo4Xp9qDWmBiyl8HLfuiQwpqMRQwbYEgc3/aVn1nJ5nJcPB2fVrv+zZ232Y6V38X yFKJtBtw9nUv0gYMUqpeRsqBzUyejuldSstQ80VAlbHV+/b1eoBbuNWZYUWY1A0R2v9+ VU99PdzQdIFJwzgYN1AHnKhRDb6d8TjeHIuJlqwvzAa1oWCQCzakF65wMwCgmUyyxv8X IVDQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@seco.com header.s=selector1 header.b=VbPTxe6b; arc=pass (i=1 spf=pass spfdomain=seco.com dkim=pass dkdomain=seco.com dmarc=pass fromdomain=seco.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=seco.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id hr22-20020a1709073f9600b0073da4a0f01csi9510467ejc.743.2022.10.17.13.27.18; Mon, 17 Oct 2022 13:27:51 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@seco.com header.s=selector1 header.b=VbPTxe6b; arc=pass (i=1 spf=pass spfdomain=seco.com dkim=pass dkdomain=seco.com dmarc=pass fromdomain=seco.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=seco.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230185AbiJQUXq (ORCPT + 99 others); Mon, 17 Oct 2022 16:23:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52798 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230433AbiJQUXW (ORCPT ); Mon, 17 Oct 2022 16:23:22 -0400 Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02on2062d.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe12::62d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EA3734F678; Mon, 17 Oct 2022 13:23:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cGbOp+XhqiflH6ryfLNnSoaycNYCkB5XMlF12XZQg9x+yiy/9PmiEadmVsuV+kSlDkNIKxFwS4IXJXSBVqHixuOrkFEjHU+eeb26/zwN1MWqAD4or52r/9UUmaZRw01vRzh/Gu80uq3tqxfjyoj4TkQWOqPf6rfUoeeq3BG4wPwLPqd9qogyCFNYbXpfVo9lpbOeqed4MBNBGIMaZsW2Yu6ORudYCZKZqe009awEWR0wMpxFeJwSAeSFgdzrbnxuA9shlVSjhtSjr56ulHBrZyr4i0V6P4frXSAUUPIlhBSvjFKvCbqN2czyVK7I8Xiw2RmvFcrn7OurueUnp+49Gw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=OiB6zoWB32H0EkrMl3eZ7akSCrZvMfmnm7jIt71Dpkw=; b=Viwx6orPvQEFFgtskKZuVWkzj9+QzNUbwYSJbtzwZqbv5ORzCqqvLM2S9RAFjwyVsfa8GEto8WaaSLnonVv/hOjNO2pVOs9zbGGHL5bXuLoReY3v61apnQwdTyvMBNeYMHzGCsIjIMMN/MjHBu89K/OX3Tq6j65EVNYXqMyBcOUXfpbw9LeEp7Xls4V2sEtBY64wqpIcHYVDCbQ8Wpjuc/7UXx8EsZFm85r1lNz/+EPK1fB/gjL3ImUycw8gkgxU612sD5A/nz/IP8xVaRoCKzIWzJJsXSDZrGU48ggpyHZ9UU92SSntkuVnlUIGNvKt4SQ0RDdiH6367T4CoyTbgg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=seco.com; dmarc=pass action=none header.from=seco.com; dkim=pass header.d=seco.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=seco.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OiB6zoWB32H0EkrMl3eZ7akSCrZvMfmnm7jIt71Dpkw=; b=VbPTxe6bddIsDUjW7PCFLYY+Vz7SlZO3kctIbrGJLR1NJyop47bfdCS4y8D4XIw6hFyH9NguE1ORtqLXOlnsbpxKxuGmZRhL0jsmeAixg7mLqXnE+fsPI8NC5I4zPkdU/MyCyhIo/lE6cRE3a1hujW9Bee3MDFzRvuM41xTXfIeickFrNsh0VKZ7hMViGwxZOOiFpedPxxjjLO7vV6QvUKd9f6RxdDgzigusV2L7+yrvTjPN17WJ1m1F36byjhh88yHm7ZQIOtkqZ1BRfqF8OG13RHIhXjkPEybxX1H9EdLyCLy/Ylst3wsxoly1feKjP9vEjKtU3UU5nkc6mLoTNg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=seco.com; Received: from DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) by DBBPR03MB6761.eurprd03.prod.outlook.com (2603:10a6:10:1f4::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.32; Mon, 17 Oct 2022 20:23:09 +0000 Received: from DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::204a:de22:b651:f86d]) by DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::204a:de22:b651:f86d%6]) with mapi id 15.20.5723.033; Mon, 17 Oct 2022 20:23:09 +0000 From: Sean Anderson To: "David S . Miller" , Jakub Kicinski , Madalin Bucur , Camelia Alexandra Groza , netdev@vger.kernel.org Cc: Eric Dumazet , "linuxppc-dev @ lists . ozlabs . org" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Russell King , Paolo Abeni , Sean Anderson , Rob Herring , Ioana Ciornei , Krzysztof Kozlowski , Rob Herring , devicetree@vger.kernel.org Subject: [PATCH net-next v7 02/10] dt-bindings: net: Add Lynx PCS binding Date: Mon, 17 Oct 2022 16:22:33 -0400 Message-Id: <20221017202241.1741671-3-sean.anderson@seco.com> X-Mailer: git-send-email 2.35.1.1320.gc452695387.dirty In-Reply-To: <20221017202241.1741671-1-sean.anderson@seco.com> References: <20221017202241.1741671-1-sean.anderson@seco.com> X-ClientProxiedBy: SJ0PR03CA0251.namprd03.prod.outlook.com (2603:10b6:a03:3a0::16) To DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB7PR03MB4972:EE_|DBBPR03MB6761:EE_ X-MS-Office365-Filtering-Correlation-Id: e31ec7b4-e7c5-4363-ee57-08dab07d6846 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ONfDpIFwvOSb5ZPvz/rb30m/7vwIciGXP6KjYCMcHKn5DQCZ065vgTtA7J+WwEiVCeYpSaplEMPud1B4HrEz7egV27uPhaCAcIc1Pa/ylsA791xCSajb9JncMBz+sPz0Z/cANwaP1YxUR4ShkXlZeHwp3j1iR6nA2yt3LvefI9hcbvVSsCfImHijsfnKEsyLcrkMYsAl9YsmOUviRcE/rHCl2ikFXitICxKZ2rwpxJn0k7lER2PtDjpOd7iNwUmAKV7cwJICgYALfqk0Elk0syOQPics37rnTKZ3Sz7bgAdeM1Se+3+TWSKtJ3N+mLwA0L+f0jNqyY1mdNo3Mv0LWIAPl86JGp+DL5yJFBPlP7ayGVCJXS0HPAayh8MyZ4d1Crgi+djL1x6PTJN8ChELB+viGYieAEU5p+ffVCxY+bFr6wgTmQv+MUlPfQQL0OUyDKBYkAQYFUVRtbR1yFSd1/zn0qGuGEF3pdnsHw787mEi9+QPLhTXEsk6VFAiQ4iqDme2tmjm+cbMOXONfK66kqmLjFwxkIJW7vzzCnWzMbCZk24rFAKHdlRu7v5cWBBD9M2d2wau4wTML7b666m37aPVrmOblcrYTp74NR2wpBirW0awqJkOxpD15MW/L/wEeyPbHDcpu981/tTAZcfeUCb+7TOiI8uiBoTEVw6HoKrE1wPpVKpcdrynM86gNV/3hEhK6RwooiEPb1CiOhowFp+RL7UzjmbPXCMfvpr30mS321j+X5KpUR06PZ27EaWwoRJasaccbOLJxR+zedff2Cmgf98MAOwNWgxsNoYDKY8= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB7PR03MB4972.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(136003)(366004)(396003)(39850400004)(376002)(346002)(451199015)(2906002)(5660300002)(7416002)(66946007)(66556008)(4326008)(110136005)(54906003)(8676002)(316002)(36756003)(478600001)(6666004)(966005)(6506007)(8936002)(41300700001)(6486002)(38350700002)(6512007)(83380400001)(26005)(44832011)(52116002)(66476007)(38100700002)(1076003)(186003)(86362001)(2616005);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: sZj8JCyzj4r2ufVpHwQYUCRBMaZbDUHGlE9K9znQ40wM7buZFHGqtZTw1E2ijZEcNGADUjyQKLBchN0KSEVDQbIDTdMv/S6m+et/aQgwHuh+NlpeiwX34yYPlZ+7Dj3ZwefwRIk44avaDVLI400S8VM37fwvNY++1JhZWT9ulvQuHrcbJM9Vgqj5sCCLgI1Y3Z0ayhKiO3PKhU1NlnPXrsKO9MI83Zw/tzu6u20mnof3eKEZkyhNsGwPZExtTfcDSmZnKQYUyB27fTN3Gtmhf2QjC14G19RbG8Hep5KBraEI6T10uj2QmnoiV1tf8clZYdg2Y9V2cyA1P3iIjrvvRuvRebxUQisWLytvm/ZtR5OdS3aJnqD4IdPsKimvY3mozxSb0ARSUItMseSWYn6pLrav9bg8RmG0Ydb9EnXnB5Np8krOKG+aU3htc0yt4qzY2MxJdyxUjaSklzmfvcmhB29h4mqxbUv4Ldk7D9qB7fVjnD87ay0JJXF4cmYv+3h35aso7ldByMsFA9oeAjhnKnqsQ53wvZPh/9U1Xuix9C39ezAF/TdRwDqqqazZvwmiztmZp9UySJGnoyEyeGSX3QRqKQRK5aXV6A+ht9xcnvcIqK8BqYH+L3g90rwlfEv0Tf7b8wqTY7e+NuBnEfsbtFKWXMVRmLoATOxVesik8ORtpS2Y4AS8qejfr55NCN171L++17jyKDqn13iW/7X78zvoMhv7p1L+SRXYzqpK0PVe6tWa0AJxgtwk2EJg0hSJxFwaXZKw6H2+/DyipZqRmW8qdYXrWWiFJEBqUJQ4jQPMAXEWhmiHsD7Pb6l9EblQ8RJRePbonqagElHrb1773nger0uhynq8JrBJqOEJaNm9UoftYGzuCPhijFMp/EBgFHK/c8AKPZtacTyiutl36B8Wuza1bacziHuH5fbSw6Sw2ePs43/lzEn/xykA9976fINKnMdOWHrh1vArAQ65IyFHMm5tyVEiZx1Qt97+xMsPrUlEpxRXSSoIU6UXSwa40HgpbYrO5z78HuoboiIzZdKz/iY84fmIXsNG0EQ7G6GhGkkUEQBU0U551zmjnsxCQ2QyXJlCpaB1ms22eUQ7Frm+NWxhvXKkV9PZRi5D2WIpidghqFIb3veA3HB6Tpql6RE025XIKEUNLwsBAvIkB0HrhG4/V/X5wfb1h/hqn/p+sLEpRKipUocPdTO3l69E0DN0hNyzWVX7NATq2hUNS+mlYEOjT5UsI8twvQmQftf9AzE1D4aEprJ2da5Ek4YFhfp+ouuG5u56K6CmpzPrcOhJapTRaskk1LtUiftFpuq6ng1A0u2jkOY/AoZkZNc3QafNo7yc9j8kNwzGCJgoJUSLr7Svz3D+xRNmSf+r9oBGzuMfu1fqnhMmcdExHjxY3pYpRtdDwMDDlCJVN7HlFc1ktkMAw7037VIXqlOovU7KUEtm9ruE2bNXRLXakuc7o8rajkN7VRB3ThQsKsODxWFY1UGydz+E0sNxeLZ6feaNg+LZwmLs6na0eIk/smF0vVSmN008Leuaz1WdC5Nsm/UZaK3XZjSqUQnewamAzG3jtZJn/S1BFCLvONSKdAisoK5SGJiuMaTSYxcmCFUaig== X-OriginatorOrg: seco.com X-MS-Exchange-CrossTenant-Network-Message-Id: e31ec7b4-e7c5-4363-ee57-08dab07d6846 X-MS-Exchange-CrossTenant-AuthSource: DB7PR03MB4972.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2022 20:23:09.4944 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bebe97c3-6438-442e-ade3-ff17aa50e733 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: jzqSBp8TU79w3S3cEHtQWAmlgLyaeskk+rdx1iD8uSHghvDKWk3bFzR6EyEoNSls0k4qv0LjxzAw/a3u/SZvLg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR03MB6761 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1746967956593115036?= X-GMAIL-MSGID: =?utf-8?q?1746967956593115036?= This binding is fairly bare-bones for now, since the Lynx driver doesn't parse any properties (or match based on the compatible). We just need it in order to prevent the PCS nodes from having phy devices attached to them. This is not really a problem, but it is a bit inefficient. This binding is really for three separate PCSs (SGMII, QSGMII, and XFI). However, the driver treats all of them the same. This works because the SGMII and XFI devices typically use the same address, and the SerDes driver (or RCW) muxes between them. The QSGMII PCSs have the same register layout as the SGMII PCSs. To do things properly, we'd probably do something like ethernet-pcs@0 { #pcs-cells = <1>; compatible = "fsl,lynx-pcs"; reg = <0>, <1>, <2>, <3>; }; but that would add complexity, and we can describe the hardware just fine using separate PCSs for now. Signed-off-by: Sean Anderson Reviewed-by: Rob Herring --- (no changes since v5) Changes in v5: - New .../bindings/net/pcs/fsl,lynx-pcs.yaml | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Documentation/devicetree/bindings/net/pcs/fsl,lynx-pcs.yaml diff --git a/Documentation/devicetree/bindings/net/pcs/fsl,lynx-pcs.yaml b/Documentation/devicetree/bindings/net/pcs/fsl,lynx-pcs.yaml new file mode 100644 index 000000000000..fbedf696c555 --- /dev/null +++ b/Documentation/devicetree/bindings/net/pcs/fsl,lynx-pcs.yaml @@ -0,0 +1,40 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/net/pcs/fsl,lynx-pcs.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: NXP Lynx PCS + +maintainers: + - Ioana Ciornei + +description: | + NXP Lynx 10G and 28G SerDes have Ethernet PCS devices which can be used as + protocol controllers. They are accessible over the Ethernet interface's MDIO + bus. + +properties: + compatible: + const: fsl,lynx-pcs + + reg: + maxItems: 1 + +required: + - compatible + - reg + +additionalProperties: false + +examples: + - | + mdio-bus { + #address-cells = <1>; + #size-cells = <0>; + + qsgmii_pcs1: ethernet-pcs@1 { + compatible = "fsl,lynx-pcs"; + reg = <1>; + }; + }; From patchwork Mon Oct 17 20:22:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 3703 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp1629204wrs; Mon, 17 Oct 2022 13:28:17 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6RP1OB0qjLtBtzDJqCr7af82TvhU0mjgwciJ4YSTz9x5ByIYUHuiZlzYIrIsE9ETBVYOVm X-Received: by 2002:a05:6402:170f:b0:458:9653:6466 with SMTP id y15-20020a056402170f00b0045896536466mr11938775edu.181.1666038497052; Mon, 17 Oct 2022 13:28:17 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1666038497; cv=pass; d=google.com; s=arc-20160816; b=iCG9a/on9oZ7qMD/0bycCvzC7W2g9xRWo7iNoLrYJKpE9Ve777VFt3tL4Fovb625vJ XTGWilzS5+8STpDhOd3JtCllq0U++rtwFFs3VFokIGPPw8GYAWetIyucQIUKatkHWjnY 4/4WMwA/zRNyJLMaOojjwK8C6hzatYo9sIf4HEdZyktuKrnJ0UuLl0hEJFha83Nrtv9V h5GOL3i3TZaICxxWxeWXcd65JElqVu9fDlJpW9wJnE9xqJvZDF9njUqoY/Zr4ZgpfLiS qHsS9uVA4jpNm/JH7XDxXRX/zqc4/YzaAfY8tLUDDqi5K4u8Wz9Tn7kKBuzPksJdjbhZ vJUw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=tjABrl/nqtklpdfa6OE0UzmntYkgGRDZDSkLSpYm2PA=; b=amncc3sMkgyCpxf7LEbENexXKhTKedItVnGTeno4Yv0jY8B/jiswFY5yRlR7aW8ale cVwz2uPi7rjcnJNI62NrZOWnGVztzLNGxLjGKJoPA5E8IhaIQZffv6Ie9xAZMDb1MNHx M4pghtWZfkO3Qw/sVGg+KBdrshY9LqhdAulc2oyQZp2BiQTn7acPj5KSlnIT2+726d/s QLod/SJUdx+mRhrTYJrrZSTN19nx0ya8J4B7dAc3P5LIHWZZJuqLAwZ/7o49/nK5uA2Y sAi64UryhQ7lNWIql/5JJds6GSr1F2PBEFc40JG2RjVJ84Ajc2XiEB7FbvacxDTjBSZ3 z9ew== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@seco.com header.s=selector1 header.b=wntb8Brw; arc=pass (i=1 spf=pass spfdomain=seco.com dkim=pass dkdomain=seco.com dmarc=pass fromdomain=seco.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=seco.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ds4-20020a170907724400b0078e13cf5b1fsi11339080ejc.34.2022.10.17.13.27.47; Mon, 17 Oct 2022 13:28:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@seco.com header.s=selector1 header.b=wntb8Brw; arc=pass (i=1 spf=pass spfdomain=seco.com dkim=pass dkdomain=seco.com dmarc=pass fromdomain=seco.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=seco.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231312AbiJQUXg (ORCPT + 99 others); Mon, 17 Oct 2022 16:23:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52844 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230434AbiJQUXW (ORCPT ); Mon, 17 Oct 2022 16:23:22 -0400 Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02on2062d.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe12::62d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6D11B5073A; Mon, 17 Oct 2022 13:23:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=D3W5a2OH2pYsLjvUTu0NDClvuZmOuGrzKiGaMlFQWvEXXCGO6GTsrhLBMV4BUkWLJdtjLzrI2obuetCLtsrDGWpAhSFoqXZOE9512ykjLNvqTpQY756KCya9wkqtxtF92MxYSrRxRRO2b9TtZs9v+5kdWbA7Q5N3XuZW0Gcmgh7zeoA1OECeglYWNqYl/eyGz9oKQZ1D/xGzf9rsgsLoiBGnsBKw7/UM98vp5lAZ1NfHLtbkHnG8D2LVGqrJviFJhN1BFXOa5luNIH9UtuDg1Bb6om2HWBpoW+zie2tGVdFltf2FUmuDURiy6zJPiT5+5vwYP7J3ujH3iwZd9yxaeQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=tjABrl/nqtklpdfa6OE0UzmntYkgGRDZDSkLSpYm2PA=; b=A4j89Qn347bBXhBMpYtb4N8X/pEQZr0KsNSOi0My83howoVKz8rhqlZrig151UE9WJsY6dilhhPdQUdhN2moWU/LdS4HRl39RYfG+mcMSukrcXcf5s+InSvJrnz00vnVrGJDMhwBoRvHaExGlapBoVqRrI/aXeIGnFhzaNxwUJwjPauitWzkogAFv3oFOq6/9QwgclMxtbrG9liEe8TVfdWndConc5pHhyMWYgvp91Dvr7GuscJYT2OyOo43koFOd9x4vNdX314aDDM8NS065AMfnOOC4ackjmwqeRBEgOTO4rh7seSCi0EXri2PSRWgsUAOs53eE6ri9cKq662neA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=seco.com; dmarc=pass action=none header.from=seco.com; dkim=pass header.d=seco.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=seco.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tjABrl/nqtklpdfa6OE0UzmntYkgGRDZDSkLSpYm2PA=; b=wntb8BrwK8Ao57WbBjfY0Um1KtExsIp8uCT4i3qM1UbGBBwVaM6FUav5swSItjkDOLyJYy1V8XJwi8YSMbgJR8MnepvVL55RdhUC4FNAibNoc7SJUmSe2SG1uujVDmUivCdyTjW0qZjs6K9ySOG8veS9yvcriX4jQswaF2GI3kdq/IGYMUPh6RFxb1PllFlA/Z/ka6uEw2YkIKoecti3VgNllpV1TIWn5uI/uH3l75piNfy+1NNwAPB/O+2cgsBpHcJQWCYexpsaoRWMK845FUJpdYQGAUMhGztBKIK6odzoLFTQC9ytBQ++QfC91c2x/G+p4YMdO/9rZeVywc7s/Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=seco.com; Received: from DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) by DBBPR03MB6761.eurprd03.prod.outlook.com (2603:10a6:10:1f4::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.32; Mon, 17 Oct 2022 20:23:14 +0000 Received: from DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::204a:de22:b651:f86d]) by DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::204a:de22:b651:f86d%6]) with mapi id 15.20.5723.033; Mon, 17 Oct 2022 20:23:14 +0000 From: Sean Anderson To: "David S . Miller" , Jakub Kicinski , Madalin Bucur , Camelia Alexandra Groza , netdev@vger.kernel.org Cc: Eric Dumazet , "linuxppc-dev @ lists . ozlabs . org" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Russell King , Paolo Abeni , Sean Anderson , Rob Herring , Krzysztof Kozlowski , Rob Herring , devicetree@vger.kernel.org Subject: [PATCH net-next v7 03/10] dt-bindings: net: fman: Add additional interface properties Date: Mon, 17 Oct 2022 16:22:34 -0400 Message-Id: <20221017202241.1741671-4-sean.anderson@seco.com> X-Mailer: git-send-email 2.35.1.1320.gc452695387.dirty In-Reply-To: <20221017202241.1741671-1-sean.anderson@seco.com> References: <20221017202241.1741671-1-sean.anderson@seco.com> X-ClientProxiedBy: SJ0PR03CA0251.namprd03.prod.outlook.com (2603:10b6:a03:3a0::16) To DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB7PR03MB4972:EE_|DBBPR03MB6761:EE_ X-MS-Office365-Filtering-Correlation-Id: 34f8d1d0-17ca-4d38-12c9-08dab07d6ae0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: mt/ulac9ApGfdPlEmGcSsCU68lwMT3NrwjpR6Yld5kN+u+jVZbr5CO2Jz/mafkPKOg0c+epdwa/jhLvOqCYmAXbziZQLq/t8McVBpyj0mk87sKgdvDSd6R+It3K5IDF45hsu4OpgHF2JBomH3myVx1weCfly7Zff9rOpP60NXKgmfxeLsk6rf4FJcLzC0fTmUxhs/UFDH8H0HS8IT4tssB9i+FwTZJLX3V3SVJ1g7mzvTK7ZGr7/Q1Jeo3WFe2Io+p3W9LwKFpCZFtCc0sjanKaOpTuatLPPaUxNY5WaXHjDnkVmJPm0sJpiVB42wOpKu7ei4/4ZBa6+YPX88DfUu9t0/PeXRGfnGB5bT23TzSk4Fosifp8jC9/iS63PmnO90/G/xCyw3Gig2MB09fGf7H0/I1PT6pgm25x3NfLyhIwqN/7XquuRxoF7tbzA1v77T0GvgM4r4CCFTVryGdaaRKPG+QGdsLh4m7kh7+76fPrGyqbvWPO4+EcfvZZsrZFEIXaCGJ1Mj9m/gxIYSiHIdfEsOS+gQQlI+q0XPH9o9HwViq6cUHww2dqtBeK6I3SenDIYSB5h1ioEomKDIGUwyj4JpnCaqZJd+eBTiXDJPbvEp7x2dMbZosk/SdVIwYXIofaQiBPuxI2K8/envSXi+/KE0jIm2OHr1PmfK2MMnO3nVpVjVmIXPRxi/O6MbEAZntVhcSSwGJVwPy7T3n2iIQluV2ejpJ/1kKf4JbXKvCODIWzyOH7SWqM++/eh/RlvrFreOXi7qPRbFaPuufwCQA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB7PR03MB4972.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(136003)(366004)(396003)(39850400004)(376002)(346002)(451199015)(2906002)(5660300002)(7416002)(66946007)(66556008)(4326008)(110136005)(54906003)(8676002)(316002)(36756003)(478600001)(6666004)(6506007)(8936002)(41300700001)(6486002)(38350700002)(6512007)(83380400001)(26005)(44832011)(52116002)(66476007)(38100700002)(1076003)(186003)(86362001)(2616005);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: D5RShH1NvMCM870ktyi8RggFgxqlVWz65Rc0IVJMvAc/nPYPy/BERglrqVo/hwspsHZDrDCx6ZGX3kPOOTcnCwJTpzmAavBg4gNIpsL5EGQCxqSJoZcZoHrS+h9rmNNYuM7xCUskp3nOzaHRSCCX7UjoMkbfB1LJd6H3Eyirt0R7pZuNyj8Dl4Xt4yXkSqTWZVzu4ZlkyG2IJnpCKjpqobEsn8jtqW05o9PHFoU7RN2sdgR7E2ntdXqUQgr820lEDdMq+qMh8zbcn5QvgVFAWGb90zDLtbe3qy33WPgci89ght2OsyMXlp6qFZvfsyBcFL6rpmRA69hpgl21JSg0IikkktsOZBOHYP60Qb5u3lrmM0tvxWRjdCyh5gD74/0l64eLk4VQxmcesB/iUw51dXU+nuNz8tsHvf4NCXWVJ1bZnLc45BA5sW4dbIAMIDYTP8VpFsrh+VQl8gBSDoHclvGMqeogznPcEVkRhivlP5HwmL1BhaYexZLJsdBchOnCh6nkhR2TeOe0E5rd9PztYkQHl0GcNKWRMB+9CVQDkNYJncEbDLaAwAAosJZtBozShcpPyUpD4O3Vv7daHUMY/Gk8GTpdzt7eyclPh+/dfPh3sIzMXxcWVpTw0ARXkB0l6JcXHA3Nt4HF/qVTgN6AI0MpHftA0w1EW6FW5qgi0AqNnCdKhnxPgpKzG1VVUbnJXwrsGlSKsmmgnDMeELO5Zg/rF3pmNg0U4xb+QhF2/AkQjzYfI0uzXVQpn62TKo7xfd55md3z6XLHvGDA+Exsi8PP1jtu6PXJ+HkimGckpaCBCYvHCoXaYSMs5iYVc88bfYzHtShCRNUCy8OkvxPk7djdHf3Bfhl1WkJNVVT0gJbk631x2os6gBMeVz3gtVKElNyUfn00SA23KcnDCwot8mtXhgGmmxg+jZXUBcu2geB00U5rQEo2zi5TkdVaPYGCyCA/J2NeYfUG90CAIKa0pJZZfxwiRYos3Zmo4QOEo/kKWAidMYulgc32YMK93zgEYY5V7uTpFp9yCEoGv7MIG15S6f+lRXjmJRHstuaLvAssVfRoCorbdflfpc3gtyyIiFkLAxtI2++Ghzegs4F3z64+HVP8xdQRwrbQRi0KPSn/aumleIa0oYuIB1G3Vm98GchIRuFXCO9+6963D0/eShK8kUwCk2ivzPzDOjSs19qcTDov45dvXiVlIxhSID6TTGSHVTmRo1mbvFYVfrvAJrOm76Q1A3yzYBEiXsGy6atfdYEznGHOJW26enjAVY/RNRrqtrX2MMiD6yy5tbrdhn8wn6pRX8pVDVzs1kP9V7dJ1XkM0YNC0WdKGpxfuttxF1tFVXIHltF5EsSnnM6Y4OdQYQ4rUJvzCG/AyGd1b4fLdvCERVZhNmk+GNQZ+9F84e++7LEMjNYeTpW0/B2qnKncCioQaL3ZXx8LaYQ74hL2QQQH6hskbGqZtzoBr2y77kR9N9XvjuiiwY6WheHRSbFc0qdO/9xVFNaGO4vcKg6cySXcaigLCN0oRqYQvQXAdhynlFCn+tXxvMYocrROzKqSXn/yifiEwSb1DSlrVOtrg9Ut7xHyrF/oh86aMru16kjqKswAeZu5Wsaw3wPCBQ== X-OriginatorOrg: seco.com X-MS-Exchange-CrossTenant-Network-Message-Id: 34f8d1d0-17ca-4d38-12c9-08dab07d6ae0 X-MS-Exchange-CrossTenant-AuthSource: DB7PR03MB4972.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2022 20:23:13.9785 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bebe97c3-6438-442e-ade3-ff17aa50e733 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: V9RundkvJ42wK/qcrkNfj/hpk7n8CR4TXYwVOwLCL0BJ8LThBbulQAWp+JNGZruwoNbGSrPyDF32vFkY6M+IZw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR03MB6761 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1746967982863500201?= X-GMAIL-MSGID: =?utf-8?q?1746967982863500201?= At the moment, mEMACs are configured almost completely based on the phy-connection-type. That is, if the phy interface is RGMII, it assumed that RGMII is supported. For some interfaces, it is assumed that the RCW/bootloader has set up the SerDes properly. This is generally OK, but restricts runtime reconfiguration. The actual link state is never reported. To address these shortcomings, the driver will need additional information. First, it needs to know how to access the PCS/PMAs (in order to configure them and get the link status). The SGMII PCS/PMA is the only currently-described PCS/PMA. Add the XFI and QSGMII PCS/PMAs as well. The XFI (and 10GBASE-KR) PCS/PMA is a c45 "phy" which sits on the same MDIO bus as SGMII PCS/PMA. By default they will have conflicting addresses, but they are also not enabled at the same time by default. Therefore, we can let the XFI PCS/PMA be the default when phy-connection-type is xgmii. This will allow for backwards-compatibility. QSGMII, however, cannot work with the current binding. This is because the QSGMII PCS/PMAs are only present on one MAC's MDIO bus. At the moment this is worked around by having every MAC write to the PCS/PMA addresses (without checking if they are present). This only works if each MAC has the same configuration, and only if we don't need to know the status. Because the QSGMII PCS/PMA will typically be located on a different MDIO bus than the MAC's SGMII PCS/PMA, there is no fallback for the QSGMII PCS/PMA. Signed-off-by: Sean Anderson Reviewed-by: Rob Herring --- (no changes since v3) Changes in v3: - Add vendor prefix 'fsl,' to rgmii and mii properties. - Set maxItems for pcs-names - Remove phy-* properties from example because dt-schema complains and I can't be bothered to figure out how to make it work. - Add pcs-handle as a preferred version of pcsphy-handle - Deprecate pcsphy-handle - Remove mii/rmii properties Changes in v2: - Better document how we select which PCS to use in the default case .../bindings/net/fsl,fman-dtsec.yaml | 53 ++++++++++++++----- .../devicetree/bindings/net/fsl-fman.txt | 5 +- 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/Documentation/devicetree/bindings/net/fsl,fman-dtsec.yaml b/Documentation/devicetree/bindings/net/fsl,fman-dtsec.yaml index 3a35ac1c260d..c80c880a9dab 100644 --- a/Documentation/devicetree/bindings/net/fsl,fman-dtsec.yaml +++ b/Documentation/devicetree/bindings/net/fsl,fman-dtsec.yaml @@ -85,9 +85,39 @@ properties: $ref: /schemas/types.yaml#/definitions/phandle description: A reference to the IEEE1588 timer + phys: + description: A reference to the SerDes lane(s) + maxItems: 1 + + phy-names: + items: + - const: serdes + pcsphy-handle: - $ref: /schemas/types.yaml#/definitions/phandle - description: A reference to the PCS (typically found on the SerDes) + $ref: /schemas/types.yaml#/definitions/phandle-array + minItems: 1 + maxItems: 3 + deprecated: true + description: See pcs-handle. + + pcs-handle: + minItems: 1 + maxItems: 3 + description: | + A reference to the various PCSs (typically found on the SerDes). If + pcs-handle-names is absent, and phy-connection-type is "xgmii", then the first + reference will be assumed to be for "xfi". Otherwise, if pcs-handle-names is + absent, then the first reference will be assumed to be for "sgmii". + + pcs-handle-names: + minItems: 1 + maxItems: 3 + items: + enum: + - sgmii + - qsgmii + - xfi + description: The type of each PCS in pcsphy-handle. tbi-handle: $ref: /schemas/types.yaml#/definitions/phandle @@ -100,6 +130,10 @@ required: - fsl,fman-ports - ptp-timer +dependencies: + pcs-handle-names: + - pcs-handle + allOf: - $ref: ethernet-controller.yaml# - if: @@ -110,14 +144,6 @@ allOf: then: required: - tbi-handle - - if: - properties: - compatible: - contains: - const: fsl,fman-memac - then: - required: - - pcsphy-handle unevaluatedProperties: false @@ -138,8 +164,9 @@ examples: reg = <0xe8000 0x1000>; fsl,fman-ports = <&fman0_rx_0x0c &fman0_tx_0x2c>; ptp-timer = <&ptp_timer0>; - pcsphy-handle = <&pcsphy4>; - phy-handle = <&sgmii_phy1>; - phy-connection-type = "sgmii"; + pcs-handle = <&pcsphy4>, <&qsgmiib_pcs1>; + pcs-handle-names = "sgmii", "qsgmii"; + phys = <&serdes1 1>; + phy-names = "serdes"; }; ... diff --git a/Documentation/devicetree/bindings/net/fsl-fman.txt b/Documentation/devicetree/bindings/net/fsl-fman.txt index b9055335db3b..bda4b41af074 100644 --- a/Documentation/devicetree/bindings/net/fsl-fman.txt +++ b/Documentation/devicetree/bindings/net/fsl-fman.txt @@ -320,8 +320,9 @@ For internal PHY device on internal mdio bus, a PHY node should be created. See the definition of the PHY node in booting-without-of.txt for an example of how to define a PHY (Internal PHY has no interrupt line). - For "fsl,fman-mdio" compatible internal mdio bus, the PHY is TBI PHY. -- For "fsl,fman-memac-mdio" compatible internal mdio bus, the PHY is PCS PHY, - PCS PHY addr must be '0'. +- For "fsl,fman-memac-mdio" compatible internal mdio bus, the PHY is PCS PHY. + The PCS PHY address should correspond to the value of the appropriate + MDEV_PORT. EXAMPLE From patchwork Mon Oct 17 20:22:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 3710 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp1629674wrs; Mon, 17 Oct 2022 13:30:00 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4iY4zvLk5JZwDvBuJ3qCXM32BHkJH+Mq4ZCINOLLE4uI3M/lSDyuxNgGqmogJZ2EQ3hfdA X-Received: by 2002:a17:907:1c98:b0:78d:3b06:dc8f with SMTP id nb24-20020a1709071c9800b0078d3b06dc8fmr9787214ejc.58.1666038600573; Mon, 17 Oct 2022 13:30:00 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1666038600; cv=pass; d=google.com; s=arc-20160816; b=wde6XnYOHO0tF1svin9O5WZFI3TFYa/I2QiIlmm0c9YdPXaNA2xvHPWRb7fKF34qvP g7IwJAoOXSK6r1/xqlUOQ+gfQtjmPnQR/8vjG/O3YQklbHRstAW7dMYRT4Sb8E9BBBMF L/zrl2nNuhvM2JMpYx+g7L8xxmpMGzFpAwb6SuWGPkP9RrjTr8NqmTPYoJ4uAV8Xv7Ej 5nQE/x7Yg5sYCTq5in+Wt+bLiA3ry2eGVuVq5qMUS2VLoyc8olw4FLDU84Q4U0LBOOHJ g5+BpN18CQQagTvlypyuNK0fk1aHppsIF4fuUyCffapzR7dQwycASCnvX9FIR/3S8yHS QjOw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=MuTitHhPg0b12Qp2wrCx+kHRxCvPDQhgJzaOtmPQ0DY=; b=uT0+x5CqRQCZ8ph9HNcps/xK7n2cbXJ27GlQ/aXbsFreZ+0TwWNpBDRq1kTdEcgqLI M8A2vLHGTWq2VNYX5L2+1Jg+PNdb+9LNNeg6sVUN0qV5CDQxZ9iEFrgmhnCUUvs7h31l SvOimR3Wn+YsqszzVx+BgiuhmnTwW2Eu0MpfgMpalbz7PZpYdVKqZKEaMbgItlLchNk2 RfAQ4C4vLxlaNQEeyRQOC5xb4GzByozsKVJzxJN2MSaPGItbhHfmgmSmPYYMvk5uBm6c zVZ0jekPqp7kQ/7gazs6gGFcnd3xlbhbR3LCxfXz1OJ8mBoaQ3QTrb8ARkdq7vPZFg4I 6sUQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@seco.com header.s=selector1 header.b=jSiDNzQu; arc=pass (i=1 spf=pass spfdomain=seco.com dkim=pass dkdomain=seco.com dmarc=pass fromdomain=seco.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=seco.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id y66-20020a50bb48000000b00458ea8cbfb2si9607006ede.505.2022.10.17.13.29.32; Mon, 17 Oct 2022 13:30:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@seco.com header.s=selector1 header.b=jSiDNzQu; arc=pass (i=1 spf=pass spfdomain=seco.com dkim=pass dkdomain=seco.com dmarc=pass fromdomain=seco.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=seco.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230452AbiJQUXy (ORCPT + 99 others); Mon, 17 Oct 2022 16:23:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52874 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230501AbiJQUXX (ORCPT ); Mon, 17 Oct 2022 16:23:23 -0400 Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02on2062d.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe12::62d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C32A656B96; Mon, 17 Oct 2022 13:23:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cWbDFU6mdUkOUh6sJZig9DhOfUU1JgUWFdAH7VGK3a2zovTqP0fHsK0v9HTmF1nfBtFstJ/1nxn/x54p6DSS00BO3H0EGV0MNWe7J4/KfAXiwry8/1gWa6FQ0S7H6nBLnNwK+aqJcJGsrl04EzfZamn1Qc/YgDrbIDBLRuXBATlsSrt9vnBOp6frTcFW1R+9P43Je51MwviPGDWfjjQ9o2KmVIZlIrFU0xq/cfn9uaXsoGGr0I4jZ0Rj1qTfgHw/oFWcTjSqixp9garFH6ZyHQSpJ76KnzwBPhCJSapEfrRLuaTHWPXQXS5S+4Q5QnWpZ36xTzUURbaQOsDD/BgT9w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=MuTitHhPg0b12Qp2wrCx+kHRxCvPDQhgJzaOtmPQ0DY=; b=mf/GvmyW4igb/kddnQoTfCgLnCMPh7WmvivLvno/S+zFOz7BByg5G5zjeMaUPnowGJlPIRDHlEydZJ72+CPwYceNe5a5bVR4FIkrtBjUl+yvsKpMEpTHhSy2sVwXs89/b/bgdAX9lLNdgd9Fu0SeGd8nOAmp9QK4FkXElrGDb0bS0mKvwNCU1Oz98fu3XVPpreQc+ziggfDiXoaGURgepk9/SUrYCvVKME6GBMGPnMcgXzF2FjWGUyGi9g+ScOdWhH97O4nzmNL6sALatS6ZS9qteYoEPQcRw0oiQp2I3h9ACKLSUzC7ywQeGd8jLeVDCQUvvfNX4FqE7Vh1U4Qc8A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=seco.com; dmarc=pass action=none header.from=seco.com; dkim=pass header.d=seco.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=seco.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MuTitHhPg0b12Qp2wrCx+kHRxCvPDQhgJzaOtmPQ0DY=; b=jSiDNzQuQjuAr03DuaqyS5axLgavlJ6+1JdBzLG9ES2WhRPSuxtHMFubLJxkdFhKiVNIkvOGaNP2ozNfsY32wQAGZtUUQ1vmP8ZnwWxDLlNzjN9BEexzUBtqLsl3Uh4/mlM8LxQJZLmUY4cesJdeQDidoLr27tWG56cMLkLWafQTqAck9A4fhxrlz0RMp/MlIsBa5pv2f8/5FzhNSaVnSZzSLN9QD+0Ec/6HbW4icrOTpr2P1fPpmWxJrglQQeH4IUD5LLztmCpN+iRmxUYm8LEceynHWeZm4OSGvjyD+D27SDXHXoS+WgT7w/PjWE0tMag0QwpdsLaMWmrBt3fEtw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=seco.com; Received: from DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) by DBBPR03MB6761.eurprd03.prod.outlook.com (2603:10a6:10:1f4::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.32; Mon, 17 Oct 2022 20:23:17 +0000 Received: from DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::204a:de22:b651:f86d]) by DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::204a:de22:b651:f86d%6]) with mapi id 15.20.5723.033; Mon, 17 Oct 2022 20:23:17 +0000 From: Sean Anderson To: "David S . Miller" , Jakub Kicinski , Madalin Bucur , Camelia Alexandra Groza , netdev@vger.kernel.org Cc: Eric Dumazet , "linuxppc-dev @ lists . ozlabs . org" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Russell King , Paolo Abeni , "Russell King (Oracle)" , Sean Anderson Subject: [PATCH net-next v7 04/10] net: phylink: provide phylink_validate_mask_caps() helper Date: Mon, 17 Oct 2022 16:22:35 -0400 Message-Id: <20221017202241.1741671-5-sean.anderson@seco.com> X-Mailer: git-send-email 2.35.1.1320.gc452695387.dirty In-Reply-To: <20221017202241.1741671-1-sean.anderson@seco.com> References: <20221017202241.1741671-1-sean.anderson@seco.com> X-ClientProxiedBy: SJ0PR03CA0251.namprd03.prod.outlook.com (2603:10b6:a03:3a0::16) To DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB7PR03MB4972:EE_|DBBPR03MB6761:EE_ X-MS-Office365-Filtering-Correlation-Id: 549a1767-1d88-45cb-6610-08dab07d6d04 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DeoEVqk5Ejtic5ETrncWESQG4r1yMtrpInckaSLnNxLr8QPwgFit13Ym9LtzZumV+IVjIdPqsITWCq/8DWdQ5dvFnraBZztIweDzMknAUK8l0NpnnjQlkqr/On4RGMPVAIxmD2b9vQ9SUTToZZI5mklfGWDgxc53K8yq3fPKsOb/HdslZqG+kB+VqJW38bWBr+zfT/y/sTPdX/0j11E0Q8A4lXtzX4/1orB3EDvddl3QNMFnEpURFgCXC2NOGGMpNNAUgNdwDh8P6Kmmbs1crwcB8rqdznrIntk8CdqAGnYkFPz3wP9BbYLKuanFTxMsX4FoK7/SV5BmV33wIGQigYVr9j4J6Uh1ch0ST+V+1woZ6igdYV93q716WTJPdfzFHITwwWIMpvEGQGXVA+NeZPRp8bZqUMon2rTiJQNEJQSY1FxnGU+QIkxqpoeciA5sZgH9zhSesRaqsWiytgiP14AI6hDF4J0Sl3LHNlDfjRGw11rtTpYLyHmyo3dOf4qsUe5qlxFxLIMcWgWRbwJr8j9ItukD1Hw2DXP54JT63fcxZJ8+2w0UZUaMLWPQNHAmm5FS6J5sv1Ojno4+iV582HN4UyzazYkmPS/adLrah7aN7T8MmqszIPCCCTv/Ncoet7P9ATGZXjBA50QjoRYAtSO27RigRRt/kvvEhr94+/QJ/4XWjlnCG7mfsLXaRVJzFzwYdL22D8V4MqZrX/TESSgY1Nl3sxtBWTuWE5mI5FR2erkZvNbSpcx4QeuD8JXBo3uXHRJ6tNhoEvLPzF9esA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB7PR03MB4972.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(136003)(366004)(396003)(39850400004)(376002)(346002)(451199015)(2906002)(5660300002)(7416002)(66946007)(66556008)(4326008)(110136005)(54906003)(8676002)(316002)(36756003)(478600001)(107886003)(6666004)(6506007)(8936002)(41300700001)(6486002)(38350700002)(6512007)(83380400001)(26005)(44832011)(52116002)(66476007)(38100700002)(1076003)(186003)(86362001)(2616005);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: n58S0iGIB+J5sPCXhBmsubKF7xalmF+Yx46TcohpHszRMjbPG5Q5k1EmGa25fFqeV63rSIMHLU9xPGQ7vWpGOY/2Hiyf4Y0fJC1Nk0vtM1BE93ODtTsL4Vo9jN/5vjZQEhu3STCNpL2D8Rze6DWgn9YX6KY2NZkBElxnvjMCrCX8ljK60P7u/CEORpUOr4gMFPx+ie8vTdNgULCKmi45BHdXMlJo84JgZA0Z0O/SR2cTl7WMu1L/aZygMjaOxkyNW10dhrlJPWdHytCBE11LVJZrsL/c05kEKm3lwDRYyKoUS4PMHGUwulSuFyImCjtFUxYwYtrdmh9K2cFJIH1j2AENqG2cfQf6L0DuGnkdt1G1yYbZC+KVgnoQSTCJj5hssw1dpRksFORdP7+KY4YHCDjJMUBnFqZtSGrtHYYJrroqNkvpgiYKEdY5FH5hknM0ZezZK719T/ghOJzKn9naAG2PywWrNjWKKsbJNWBiQv8rPuz4WySVIcknlQoB3tD4s4pu7F+gz855OkSXC87Fjj9u1EnXgAUYFbxUkDZ19qpTfaydP2FtYTeXsDNOYluKa8ahfXyqcE5CpBnhe4xjagXLCD2NBkklPIuANeKHMVjqL8JSuyOimKw8ef5wb2DsOHmbTivDHq68x2+7b6DTw+tvmA7/qv6VDYbz0E2CwYizhd2IVwjPdtwSjlR6gkl4HcWA3OWEWL5I3Ui7PvkxuHZixJBN/TBomVcdZ9zc3drfuxsGxpQinvpkigtWLkLZvPTT2JwZlhBQDA9n+XykZA89+fEGMnMycgsVEmv/Hgj+bgkdZDzL47FQD5lzQMZYj9/wsOiVOZ2+YyJoKVCLovoLKZeIr335nb07khvVkFX/QDxuczBbX4HRTYyDT7UdkdbV5MHxLTGIK2KImJ7/7E5k3SMY4j9jr6TQ0FXdRu7xTGxi+Ey0932OiQl5xROPm8EwBhQLjMECEdQKA0JjWLIBa5BIStT06hL0H6hLdWL+vUpFL6zdgWG6Xh8k5gV0GF1bWDUjrlzNQgMJMew0xzvcFWbQkre5rFIKwjmHMZhpf6GaeUXVK162z1vwavg5YlCE1uu2+hFTf/vpKOeuNHh2m/48/VUoY3Y9RMLTLL80Kl84/TWDMJjnNEJyQuI5/XAL4gtk8TqcpYNTpXZBXM1KluWj/DaLOBUTmjBMe+XK4qzhTWpEW9V0qRu66obnlHEGyzh97snyjLSZKuYPBTaVn3SX5SVpTxxIolZLycHO9GxyKziWM/w2Jo0qRXbC9y3O5bZUzQ7vFJpadlRNhc0aVUaNM6HBd4w1trs4xFFHrJfniNB7/7Z7UdimRwomBtWI8ocVHjIW759NQqrGX8plGakmgbAcPAdh5nz/j5uy9tGHkN7elGwah6VOkDZ+MaYkE+GAhSr4FNYQAhTUi0cVLGUw3HD97wnaJGTh7HG4cijQ+YcjzSG6n7fsKRZWriwNU+6Jo3rJXrGzpjAc4Y16NTwByncQsVpPk+QGZnetlImpFP25rK268aH+PHSVpf6FR71gD4caJCEJtm1EBtZXx++d1lkcPC4mVVfVH4jHQMlrbzj+C4caqKwTE+9SeUk2hxeAyASOy6g/7nPEQg== X-OriginatorOrg: seco.com X-MS-Exchange-CrossTenant-Network-Message-Id: 549a1767-1d88-45cb-6610-08dab07d6d04 X-MS-Exchange-CrossTenant-AuthSource: DB7PR03MB4972.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2022 20:23:17.4314 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bebe97c3-6438-442e-ade3-ff17aa50e733 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: v5LRAz6/A9TlyipcJI2CvcvXYBGBIr0I94aoS1OPkWfGh5Z90ibilbDYwFA6quEBdDb1ZU5KXbwIr8/L6+laFg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR03MB6761 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1746968091537084080?= X-GMAIL-MSGID: =?utf-8?q?1746968091537084080?= From: "Russell King (Oracle)" Provide a helper that restricts the link modes according to the phylink capabilities. Signed-off-by: Russell King (Oracle) [rebased on net-next/master and added documentation] Signed-off-by: Sean Anderson --- Changes in v7: - New drivers/net/phy/phylink.c | 43 +++++++++++++++++++++++++++------------ include/linux/phylink.h | 3 +++ 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c index 75464df191ef..ef10f5a70e5a 100644 --- a/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c @@ -561,6 +561,35 @@ unsigned long phylink_get_capabilities(phy_interface_t interface, } EXPORT_SYMBOL_GPL(phylink_get_capabilities); +/** + * phylink_validate_mask_caps() - Restrict link modes based on caps + * @supported: ethtool bitmask for supported link modes. + * @state: an (optional) pointer to a &struct phylink_link_state. + * @mac_capabilities: bitmask of MAC capabilities + * + * Calculate the supported link modes based on @mac_capabilities, and restrict + * @supported and @state based on that. Use this function if your capabiliies + * aren't constant, such as if they vary depending on the interface. + */ +void phylink_validate_mask_caps(unsigned long *supported, + struct phylink_link_state *state, + unsigned long mac_capabilities) +{ + __ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, }; + unsigned long caps; + + phylink_set_port_modes(mask); + phylink_set(mask, Autoneg); + caps = phylink_get_capabilities(state->interface, mac_capabilities, + state->rate_matching); + phylink_caps_to_linkmodes(mask, caps); + + linkmode_and(supported, supported, mask); + if (state) + linkmode_and(state->advertising, state->advertising, mask); +} +EXPORT_SYMBOL_GPL(phylink_validate_mask_caps); + /** * phylink_generic_validate() - generic validate() callback implementation * @config: a pointer to a &struct phylink_config. @@ -569,24 +598,12 @@ EXPORT_SYMBOL_GPL(phylink_get_capabilities); * * Generic implementation of the validate() callback that MAC drivers can * use when they pass the range of supported interfaces and MAC capabilities. - * This makes use of phylink_get_linkmodes(). */ void phylink_generic_validate(struct phylink_config *config, unsigned long *supported, struct phylink_link_state *state) { - __ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, }; - unsigned long caps; - - phylink_set_port_modes(mask); - phylink_set(mask, Autoneg); - caps = phylink_get_capabilities(state->interface, - config->mac_capabilities, - state->rate_matching); - phylink_caps_to_linkmodes(mask, caps); - - linkmode_and(supported, supported, mask); - linkmode_and(state->advertising, state->advertising, mask); + phylink_validate_mask_caps(supported, state, config->mac_capabilities); } EXPORT_SYMBOL_GPL(phylink_generic_validate); diff --git a/include/linux/phylink.h b/include/linux/phylink.h index 664dd409feb9..c29c3f174972 100644 --- a/include/linux/phylink.h +++ b/include/linux/phylink.h @@ -556,6 +556,9 @@ void phylink_caps_to_linkmodes(unsigned long *linkmodes, unsigned long caps); unsigned long phylink_get_capabilities(phy_interface_t interface, unsigned long mac_capabilities, int rate_matching); +void phylink_validate_mask_caps(unsigned long *supported, + struct phylink_link_state *state, + unsigned long caps); void phylink_generic_validate(struct phylink_config *config, unsigned long *supported, struct phylink_link_state *state); From patchwork Mon Oct 17 20:22:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 3698 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp1629066wrs; Mon, 17 Oct 2022 13:27:51 -0700 (PDT) X-Google-Smtp-Source: AMsMyM41c/gyrmluZw60p3kF9xYybVOGUIMA9loiBXqIkzmkzBsliNLHsMG4j9R1D7NxiNmmgb/b X-Received: by 2002:a17:907:6d9b:b0:78d:f24b:e358 with SMTP id sb27-20020a1709076d9b00b0078df24be358mr9972622ejc.714.1666038471748; Mon, 17 Oct 2022 13:27:51 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1666038471; cv=pass; d=google.com; s=arc-20160816; b=BbvifKEMkaLt3TdrRTB8ZAxi1Bq6fBAjsYAJrqb1UVwgEIusIc2F981fgt25XoFyHN PclonmOIj0JI61rtXN/KKwDdWxsDw1bY/PIlWcfiA4H2bo1Kjblx1unavn5rXy9g9Dpb RErFdLrVd94tQxLUp3fNBb4SzYdhWVd7S4RBq3cXckULscpqk+cJWL+ABNuk0zVSA8MB K6rkKZ3+CJO8cb4SgKXh9xDr0SxT+KbAJ0fJjMt+ZLoOe7CDRfj+82gLIAcy5ZekPNo5 KRm0V7LqJoUsPzPeXttIFesd+R0FMKFdDt3oiegZEKeQlgFNaVZnGYJQVoL9pc8w/97U vdzQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=yhWiPukeqtRGphejfz5xbInCPQvZjgcBGiv0ermy4sw=; b=tw7dDdxvY6sS4+JxPhar+WAlJNGGypzCZFLHtVF6CqqrMDNKdve8lgLxImirmygy8e nSZ4BUkowQAL069djrReiNTYia9ZAjrCi0UYVpj1MsWkt7q7ZZmL5GzVj7UpWjd9X9Gz bdNejyLpTsF4kkuH49GFnOuMxGs77ZfMq3rcTDg66Th37P4TYauVwLT7TqZ5GaLBD3J3 +cGMZzzAXcPHtt9OR9+I2L9MoqGhpBMae9lSu33r5QhLjXdMpG5LyqN99qLEefu/31In wMoUH+9Sxm3MfgMbIfD1Ko2rkAU+wfuKXsljAbkOnj82YuSPN81XLhvvGlIqh0XhtWCG YeYA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@seco.com header.s=selector1 header.b=KLe14F9i; arc=pass (i=1 spf=pass spfdomain=seco.com dkim=pass dkdomain=seco.com dmarc=pass fromdomain=seco.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=seco.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id r5-20020a056402034500b00459681caecdsi8547005edw.286.2022.10.17.13.27.22; Mon, 17 Oct 2022 13:27:51 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@seco.com header.s=selector1 header.b=KLe14F9i; arc=pass (i=1 spf=pass spfdomain=seco.com dkim=pass dkdomain=seco.com dmarc=pass fromdomain=seco.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=seco.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230503AbiJQUX6 (ORCPT + 99 others); Mon, 17 Oct 2022 16:23:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52908 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230337AbiJQUXY (ORCPT ); Mon, 17 Oct 2022 16:23:24 -0400 Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02on2088.outbound.protection.outlook.com [40.107.249.88]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E59BA46DBE; Mon, 17 Oct 2022 13:23:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=F+r/o1134LtF84gI51TXzw0/eAOUPCoH7lLfx7ymETQGvh5OLrrW1pO3+atYqZPiRyLimIxVHwBDchF/NNEu47OQuchp3qXXJUnejyBpkSn+Hug7GW5oJepHlRO7eIEfcDsuc1E4G92dfdecsuST2cLEwiJzhn6Amn3eV3gVL5u3MBvE7yX3itEsFCHVO2UJabouvbC8f05/5N06GVjGLOvY2bjcGiqMy9vCIFYqGKWoD8lpj0etr+PiASf8qJERYEHHN0rg6Evbgm0yp0ir991PX/Vlw8+TxJpntE9v/6cte/KHIKfp+KnNnUzYJS40Z+u1cXQaJVFMABVPg+5aVA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=yhWiPukeqtRGphejfz5xbInCPQvZjgcBGiv0ermy4sw=; b=jQv/GAMfOWs6Gdpwl73XHffuYUzdA/WfATZcqUYCaM00mH4V+TVavbwonJSWb/aIf4AVEOr2V54BWsdoe9BGHSWNQt4nNgjfMmPjs5FMMjM7Dez/pEQdrto/KQuSzpYDq04lRdbCm3wutHhnAas4ZdQ/jgsDO1rfmW8aXZFKr+cuJ50v2N0I/T5cqElMQKDcG5PH8nibymH5GSKKX/fuZtAxcMV13S4HaPM5rR4+etMYvh0d5tPiSFnQ+MlBmtl+flYla6b5jv3VBoT17J0ThO6ernOYwJ+JRROU7YNWNMpwK33mW0t9R3fcwCKXtZkmSp33/rkD4QZWfLm8dWA+pw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=seco.com; dmarc=pass action=none header.from=seco.com; dkim=pass header.d=seco.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=seco.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yhWiPukeqtRGphejfz5xbInCPQvZjgcBGiv0ermy4sw=; b=KLe14F9iO/1bmwqbZEBHYhdlXULq6oYpXF6nMI6U28ZATPQMXXS+HlGtceF+aiU684U9Bim2b/nuWi9X7+kX+7YAQ4fDCsmBcYNPuCCc3m4XiKzTuJuML+boJu4YfFXVx5TJA8/gPzToqGEafFJ9jIdLizK1dLb+AJNarRPPpPMPPwdPjYC6P4InmagYe4cfIUwjkBDZkbBtPKeLwfcXE/gCAiusSO021WdSX++KDy4wUdRbqaDtRkYD9QLfbix91LAjHu53fjCcgE1kaSA4shOeCQXkfKXTW9wH/lkcXmQwAdeJgXshKQImARHIdvH0ASxa+GMQ+Au/89Vm/qr96w== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=seco.com; Received: from DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) by DBBPR03MB6761.eurprd03.prod.outlook.com (2603:10a6:10:1f4::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.32; Mon, 17 Oct 2022 20:23:21 +0000 Received: from DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::204a:de22:b651:f86d]) by DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::204a:de22:b651:f86d%6]) with mapi id 15.20.5723.033; Mon, 17 Oct 2022 20:23:21 +0000 From: Sean Anderson To: "David S . Miller" , Jakub Kicinski , Madalin Bucur , Camelia Alexandra Groza , netdev@vger.kernel.org Cc: Eric Dumazet , "linuxppc-dev @ lists . ozlabs . org" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Russell King , Paolo Abeni , Sean Anderson Subject: [PATCH net-next v7 05/10] net: fman: memac: Add serdes support Date: Mon, 17 Oct 2022 16:22:36 -0400 Message-Id: <20221017202241.1741671-6-sean.anderson@seco.com> X-Mailer: git-send-email 2.35.1.1320.gc452695387.dirty In-Reply-To: <20221017202241.1741671-1-sean.anderson@seco.com> References: <20221017202241.1741671-1-sean.anderson@seco.com> X-ClientProxiedBy: SJ0PR03CA0251.namprd03.prod.outlook.com (2603:10b6:a03:3a0::16) To DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB7PR03MB4972:EE_|DBBPR03MB6761:EE_ X-MS-Office365-Filtering-Correlation-Id: 20518067-ea49-4c6f-f4b4-08dab07d6f23 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DQNtnl29yMI4ZzmnFvZTbjq8uWgIRDfZnFIsswQ8+UELZrd5DY+SZvG1Ucj/UgpDv9b+hNiMKT8gdqFI+xKet5QVXOYRkoVPorfx8vo/r0IPmadyS/GD64E7aTGCkkypK55CVgykYWHuOuLPe/nVo87wciYrWAEADe5k/1kdruBpuCM6s4kvJlyKnmH2MaCvJRIfrz5ITGAs8TUECmBkqS3FrZKz3hDfZBOdBetx1KO5bBluCGq3Nla89m43E1Vt6WZPoNZrivrD827KXH2kv6dfsynef6++GyWRcrmt3S0eqhOfpBvMzSb31FtlcYQzwQ3AyFhYgxV0jq7S9kThxG6GgHZs9H1G4j6iy4QEQaQbsVLi+LBAJUCOAukixSiGqIMR8R3pQfj1UfPOJHKtE9gIqRmpsQrP0Y6Y3Pv/HQt1/COeSDE/Pz8PyFsAUbFgVTUBlGVnq5GFmVi2obnMITSMCyDJ2TZLrCq3lhfTRsSbyqx3ZtcOcRW7kPC7w7drr44nUD/VRoA3ylZ5DvVFF+apr2MDvrGxJvLLtxwWk4B02W1YJM60dVmOZ1mLoV0hf6hqVZFrcDHdz25KThprmvWgcnmx1+4tQUueCKoK0S3g29eJXg5m7Qn/6hc5ZJrG2m6OCbXUj9ktuvHV/6jmhra1WEFpOah8mIHaAPDpEQvbGIIk5NWhNlcdfOQ2Du3x4DP2iDyi0LD12E2FhM3WaNwQKh/lHCWZn5K5Y1G7+qzGQl3EmO+2K9Im3z2oMn+OhndTDMW76LMFID06+6iJsw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB7PR03MB4972.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(136003)(366004)(396003)(39850400004)(376002)(346002)(451199015)(2906002)(5660300002)(7416002)(66946007)(66556008)(4326008)(110136005)(54906003)(8676002)(316002)(36756003)(478600001)(107886003)(6666004)(6506007)(8936002)(41300700001)(6486002)(38350700002)(6512007)(83380400001)(26005)(44832011)(52116002)(66476007)(38100700002)(1076003)(186003)(86362001)(2616005);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: l8iEFqvpq9WLcKQl1EfV3s4tqIRUvLxAIgUfhwvXa4alRZXcDK39Tu1226kiXlHfjrlfyOP0gLJBGG6js1HbCz8Pd5dvN47s/0RbUoNaDEwrtKw9SDNxXey3FBZ3BBn9sI1Whb3skMbyNnohd88n6i+W8N3J+2gQHbM1eBv5ennHazAdU5UuSmJ7tEJ26OgIlMSZCBnzlDWAs7OJo/jrrvoHnux3uccwKhBfPtmONerQQdaQQj0E8/NkXjP9JmvABxuXwaWOukNs6Q7d5shjaRyL4ugf0NvNFK4fOUcYnEaS5Tl3Cbac413EOpaudp0oZuBAnCCCr2mfxTAUmENtGAZzIK2kSIqEJ8skz2ct3XvCkjLnQh2vhgkcgX2D5OdomX1HjPkq1cOSvZSByspawXGL1ug4hj9IhfChnmgu0JBBhO20k9HL+0y4/bANkcKpGyCicI7hVVcH9zNsCNEpRa2cZxLLv6Ug/6sjCjBNUX4t5JBOi3j4FIMmxToPQPCMeKsNGvoD6ZJykba5Y+V+tQcRv+LvMJ8on/G/WkGLr9QCc8g81iTGCMAovGpR7YVrcsaSqNkOqITV+kuoBWYc8suKBIvBghtYuHKzDWWoXC32Xl3bWGDl/hQ0YonRbYjGSQuV/EGyKLHiajbFKnZMVCobhCGeXYBtEwkmuXI9pwYSKFOLpUZZ5aIDo6XMhEaDGj9vqTodbQSvRJz4SALKIuLtryxYxs2s7Se5DHydbzJUE78ye9ecdmhvmtbRxoYfksG7lHx6Glr6TSfpO/58w27AnxK63+SL4KqnYMwiZFB4Lhyrk3NKFa/pQx+AzlF7MRPIiC6D6WYkOt2kA68l0xA4vuiwm0in59LxbdOE16T04SIP3gFpEkD5xajXuxFQYYTOizYmNne7Eon4FPWqVfd7V34IkL2xZ8BZyuorQNZmTvKx6WcTjyZghwb0wPbRIsW/Tfvm7q29WqKUcB7bd5TjF7FY8sCRcy6iXXw/GeU73vOj3mxLC4bhP1WfFyleOEFUEkGW/GQk0LrcbO1LkYdd+UKDntue3HdWqfHdmzJHogiJrZhhdLcQo+2M0RAZCQJpvpqeSUJVjmZta5KR+12nzDK8dPsNNJ8wrjg2Se2tfL2DS5Y3eeXhYiIYx08aMWJgdIkyBif9RKLDys21P87/crBdBw62bDArwUDwZ4w+ZwRaoXXPFsA3Nm+U5YE+lVQjHOyOpcDo+7O0mNIcNKnuyKLWP3J4fQi8YefHW7FKPkG4dccumF2IEheC6Ge1l1BSfHMHPPXhh9B6EwqA9fHIQoE6Fz0Y0zaFC34+fgg4oyC5x89+IhKWSj4v8I3fp39UOHktXsi/9VH28u1vm50wha5hxjjiUHSHZva7zWV9Ibvsun9RzqDKKEkhL0HyDYS+m/31ls/NicAW4SQWRelFexlU222DD3y4zdp+Pi8hd2/+X2E+hzlIh3YesvMp/gJcPWwIRttgJXEXZBArs5xsM03UmB6GBD/oP0T4/vy0XExkmDyz1F+ELdYSEU1FCYrwp1yALdKKt6b3QdzacNqu2DkX9IcMuWKoNgtlYl+q3urBFlbcfifalxRk9CJGo8lwe8DX3LVX8YTK0//TgA== X-OriginatorOrg: seco.com X-MS-Exchange-CrossTenant-Network-Message-Id: 20518067-ea49-4c6f-f4b4-08dab07d6f23 X-MS-Exchange-CrossTenant-AuthSource: DB7PR03MB4972.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2022 20:23:21.1030 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bebe97c3-6438-442e-ade3-ff17aa50e733 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: yMvU89I5Y6ELcX4hHSQqBgfrFrLBzIMXlZYCaNiBNCAH5CzkYZu4xbs8niouw6cLS5bfS8TKPdLXj52lIikxWQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR03MB6761 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1746967956730022337?= X-GMAIL-MSGID: =?utf-8?q?1746967956730022337?= This adds support for using a serdes which has to be configured. This is primarly in preparation for phylink conversion, which will then change the serdes mode dynamically. Signed-off-by: Sean Anderson --- (no changes since v4) Changes in v4: - Don't fail if phy support was not compiled in .../net/ethernet/freescale/fman/fman_memac.c | 49 ++++++++++++++++++- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/freescale/fman/fman_memac.c b/drivers/net/ethernet/freescale/fman/fman_memac.c index 32d26cf17843..56a29f505590 100644 --- a/drivers/net/ethernet/freescale/fman/fman_memac.c +++ b/drivers/net/ethernet/freescale/fman/fman_memac.c @@ -13,6 +13,7 @@ #include #include #include +#include #include /* PCS registers */ @@ -324,6 +325,7 @@ struct fman_mac { void *fm; struct fman_rev_info fm_rev_info; bool basex_if; + struct phy *serdes; struct phy_device *pcsphy; bool allmulti_enabled; }; @@ -1203,17 +1205,56 @@ int memac_initialization(struct mac_device *mac_dev, } } + memac->serdes = devm_of_phy_get(mac_dev->dev, mac_node, "serdes"); + err = PTR_ERR(memac->serdes); + if (err == -ENODEV || err == -ENOSYS) { + dev_dbg(mac_dev->dev, "could not get (optional) serdes\n"); + memac->serdes = NULL; + } else if (IS_ERR(memac->serdes)) { + dev_err_probe(mac_dev->dev, err, "could not get serdes\n"); + goto _return_fm_mac_free; + } else { + err = phy_init(memac->serdes); + if (err) { + dev_err_probe(mac_dev->dev, err, + "could not initialize serdes\n"); + goto _return_fm_mac_free; + } + + err = phy_power_on(memac->serdes); + if (err) { + dev_err_probe(mac_dev->dev, err, + "could not power on serdes\n"); + goto _return_phy_exit; + } + + if (memac->phy_if == PHY_INTERFACE_MODE_SGMII || + memac->phy_if == PHY_INTERFACE_MODE_1000BASEX || + memac->phy_if == PHY_INTERFACE_MODE_2500BASEX || + memac->phy_if == PHY_INTERFACE_MODE_QSGMII || + memac->phy_if == PHY_INTERFACE_MODE_XGMII) { + err = phy_set_mode_ext(memac->serdes, PHY_MODE_ETHERNET, + memac->phy_if); + if (err) { + dev_err_probe(mac_dev->dev, err, + "could not set serdes mode to %s\n", + phy_modes(memac->phy_if)); + goto _return_phy_power_off; + } + } + } + if (!mac_dev->phy_node && of_phy_is_fixed_link(mac_node)) { struct phy_device *phy; err = of_phy_register_fixed_link(mac_node); if (err) - goto _return_fm_mac_free; + goto _return_phy_power_off; fixed_link = kzalloc(sizeof(*fixed_link), GFP_KERNEL); if (!fixed_link) { err = -ENOMEM; - goto _return_fm_mac_free; + goto _return_phy_power_off; } mac_dev->phy_node = of_node_get(mac_node); @@ -1242,6 +1283,10 @@ int memac_initialization(struct mac_device *mac_dev, goto _return; +_return_phy_power_off: + phy_power_off(memac->serdes); +_return_phy_exit: + phy_exit(memac->serdes); _return_fixed_link_free: kfree(fixed_link); _return_fm_mac_free: From patchwork Mon Oct 17 20:22:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 3699 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp1629070wrs; Mon, 17 Oct 2022 13:27:52 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5fAMM7IPHrBXveM/Aca5Vr5P0mldcuzjSb41AgosnFkqJ40j7EIySXVEMoAn6Gq+wwGqPF X-Received: by 2002:a05:6402:ea0:b0:454:38bf:aa3d with SMTP id h32-20020a0564020ea000b0045438bfaa3dmr11945018eda.291.1666038471892; Mon, 17 Oct 2022 13:27:51 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1666038471; cv=pass; d=google.com; s=arc-20160816; b=XF4blygFdVv5t4yp/vRkgla/7Uus1QptU4gO4GVwGJCXc8KBwkQT0Xx9dTptDCMgc4 7wB+IrvDoZRmOztVN+A5whTRcSgo9cR5ZbUccKrXWbUo2SLm5vnA72OnQ68kR2HWTKOd tT2W2DUhigCC4GWP0bchjskfPG4ASoQdOieLP77V/G9bqCRARNbSGXPJ1WbLX9/JeEVI wcUHcvXjDr+GjBTm8n9K73hW+WwDa168lml13qyMmPsX8zNjomB19PIUi/a2VAhT8FpI Z/SsMggvHwa6/SUk8T/d/Z79dkMv7MKbNdXFbQReCN8D7Qy4XQ/sBavTVu8tgj38SsvD 9TRw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=0ToGFumyXaTeCIX2Hj+aHE0WG0pqor0zNtySve3aq7g=; b=It2jRK+kmv2771d7GYDVSqaSx8VVdSuPhwgjDqOFq9/8jYjMsINIytms11TN90AP4s iLvFqKZiKYw630l08q7Ujs3yiMCTV5qWq5hkgqAtbdC3eagOyFoUBYOm4TJEXji2l8+w X3uPqEJSjaO7aEZsvhqA75h+RQrWmPJpK2CK9MPg4+9TOmyfF3LiA0m1vrlCOKaF09dd L2oUz8bk0z+uou9UjfA8I13g3kay56rf4OvOERK4buLnTrBUI5x0kzNRjh/CFPxw3Q2K jDTVC+HXyl40fCLZpuGKTJflebcITAfULkRTRIOJhfg2TYagfiYG+/+8LFk5A4UoHuXN fdxA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@seco.com header.s=selector1 header.b=YPHRn18T; arc=pass (i=1 spf=pass spfdomain=seco.com dkim=pass dkdomain=seco.com dmarc=pass fromdomain=seco.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=seco.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id gn41-20020a1709070d2900b0077cfdda438csi10306091ejc.35.2022.10.17.13.27.24; Mon, 17 Oct 2022 13:27:51 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@seco.com header.s=selector1 header.b=YPHRn18T; arc=pass (i=1 spf=pass spfdomain=seco.com dkim=pass dkdomain=seco.com dmarc=pass fromdomain=seco.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=seco.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229808AbiJQUYE (ORCPT + 99 others); Mon, 17 Oct 2022 16:24:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53202 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231277AbiJQUXe (ORCPT ); Mon, 17 Oct 2022 16:23:34 -0400 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2072.outbound.protection.outlook.com [40.107.22.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E82B075CD0; Mon, 17 Oct 2022 13:23:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=h8kQSCREehqH3FruOlayOEX3lPUZ+xY0WNapnG2iPk/Ym0Sdo5IBwQtKnsbHoRoTjcMCWop3NwW7kqFzCzMJLnTiX+aFK179SGYbIZSKbFxnhj3M1bbZC3qSbKF44eR0x1MvchLKFewh6iA+aMd0+qs+YtmCxH/MsMwazYOaael8XbyRkUqbCgEK2obQO/JEA3NvHQJ/AHCXhIcjOUxPon6eZ2a6ew7E0AesTzcDSe1aKCQYBabetMgT9GHK9e42SZAQ/jeVJ3RHtNdAMyI26rxH3s+F9CfuhGAXqOrHvgS2o6hi/oknhf64ndCM7nA0IyuSogVH3fjYAA7GRakv7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=0ToGFumyXaTeCIX2Hj+aHE0WG0pqor0zNtySve3aq7g=; b=Kz8LZTOPgJpQBXZGOHCCIcxt4WfKOGpj0ImXxS8PRXB6UJQRGHRsGukfnlU7H4y6HsyT4v/qPO0kOp8sXI3UzVyZa4GddbyHIZLW01d7GTB+Ms6bJEzhwtxY3jrWQu0m3BcZ447sO+FPUFPgxktYgIJv7EmGwsS/D7pODtTYcfVzyXfRmvahyzFIpc/+oVyzHVxm4rTZgNQz9NzKC8PVbWH6dHg7FfCIhGTJGVYnztfAHgZpKEapqsmewdgPcCTRjXsvi3TbcYaE924ZZe/r2e9SlJTGqhmHUD2QhR4MKBbxSYtc2Z8Obg313rVAc5nLISpRYnS0KTAs+lMitsbzGw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=seco.com; dmarc=pass action=none header.from=seco.com; dkim=pass header.d=seco.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=seco.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0ToGFumyXaTeCIX2Hj+aHE0WG0pqor0zNtySve3aq7g=; b=YPHRn18T9Ne4xKTaUwYSLshaQWtX9X5PqIyp5+PJScj4eF9Pmde2S+TohIjALCKFTTafS/ZyJMnPLgMSRMgL4DigmLYTBkRlNZGiMJYwMvNaqdls1CoQLxCYDC2DmMMp8/t1a4TcdT449Sl5RgmiNctEGv+aLx0VPCYK23dbUyVKKPw/WGrl0Z0RfaKNvTOmsOCQZQl3t2jTVQvkUFAwpwk1wkenARj7Fd7W9LVx+V7yVpYXicpKrGdTiFWpgAQ22cDDft3yUKlELx4O9m7OHPwjDq/MZxvyAbGo1H3e9v61EYq+2budq5mUogNzVg7cWbfHr4I6lyOXZhwvnYrwzA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=seco.com; Received: from DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) by DB4PR03MB8635.eurprd03.prod.outlook.com (2603:10a6:10:385::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.28; Mon, 17 Oct 2022 20:23:24 +0000 Received: from DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::204a:de22:b651:f86d]) by DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::204a:de22:b651:f86d%6]) with mapi id 15.20.5723.033; Mon, 17 Oct 2022 20:23:24 +0000 From: Sean Anderson To: "David S . Miller" , Jakub Kicinski , Madalin Bucur , Camelia Alexandra Groza , netdev@vger.kernel.org Cc: Eric Dumazet , "linuxppc-dev @ lists . ozlabs . org" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Russell King , Paolo Abeni , Sean Anderson Subject: [PATCH net-next v7 06/10] net: fman: memac: Use lynx pcs driver Date: Mon, 17 Oct 2022 16:22:37 -0400 Message-Id: <20221017202241.1741671-7-sean.anderson@seco.com> X-Mailer: git-send-email 2.35.1.1320.gc452695387.dirty In-Reply-To: <20221017202241.1741671-1-sean.anderson@seco.com> References: <20221017202241.1741671-1-sean.anderson@seco.com> X-ClientProxiedBy: SJ0PR03CA0251.namprd03.prod.outlook.com (2603:10b6:a03:3a0::16) To DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB7PR03MB4972:EE_|DB4PR03MB8635:EE_ X-MS-Office365-Filtering-Correlation-Id: 69d3a497-bba0-4ab8-e7a5-08dab07d7126 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: GHpxuAdMaOPCR4zLKD2QNT7gEJQwZhZjJOL3tcuvEi9gOpG2cQ1oQmD0SvphuqyifURk8PpFAZ4Rrf0ID6zG0edAS/x1a7XKLT58uH16FMNw/GiBsNBuJ3/bxEKMoXtCpgdSa6osE1UvlAhm3hMnVyYmlHqXXU+g0/XzdmRj0RL1oOUHwQXvGyZQIRdnDdrIkXZyyUcopg+jIb5gF//Tt1Kh+xEmCVH39itKn/16AAg87ydOamWQbIGLBKsTD+AStejaBvNS8GR7Os8e00DaDqjfDHau/yct01/aNgrF8piqjEH97ej0nT8Dw3LzRGbJHlwk62sN7GT5sJee4Xc+mK1PQ7x0209ufXMzsaS6cL81eifV6QvudLIni4x7dhUimLjPiTvem7pWhVG9kDvWSo0q4Bd/lMr3qWAoF+qDrHDNMmgu/Zzc2Wq5mTJWbFv/f7LBY1YhWWiPBgtrPRt4IFEsLbhm8KaEAfn0XgTgPNroQ3NmMBnNM86ju0nRY6pYhAooA3M6tY/ZDg1k6cFzoIU8tCD4S51TFs0KLkcXHXHBskgs/mBMxfFN75HY/hYzYPRNcnEsfJV7UfZhdi146o70jZq0jtGrCJs8Uth0ztQFOr9hC+gf7tg7am0nfk5Fe+qNdrKKo7yST3XfGtunfxekPEYHhJ5K6XSA8RqLcl6tuQRRPVt6WLieSs0ZzZk+E7iHj4lumSg0wwb8pKdSVPVNy3hLXI754a6rAasiFg247NSQLGexb5AUnxhT09Y6JPOgGP0oSDgCtyToxbUK+Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB7PR03MB4972.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(136003)(39840400004)(366004)(346002)(376002)(396003)(451199015)(36756003)(86362001)(30864003)(7416002)(38100700002)(44832011)(2906002)(5660300002)(38350700002)(2616005)(186003)(1076003)(83380400001)(52116002)(6506007)(316002)(478600001)(26005)(6512007)(110136005)(6486002)(54906003)(66946007)(66556008)(66476007)(41300700001)(4326008)(8936002)(6666004)(107886003)(8676002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: YN5h/jso7SK3qi+sQkJ1+uz9HpEZA8rOeNrDQL+HtRQOYsLig42fbZZEpzuwRKTqnp1Dc2ah5tKJQEDAV4xtf9k6+OqSOrgc3CDNsAcH0q7Dw+moB18OsBl/2o6wr1O0JXsPzEkZN4I3uZC7Nuv7to4CTYt5E3uMxiEaVOsuo7BSGgiqh+KmbS3UqxQIO8OIkkQlbp4dBMe2vw8JOCEfwqsz3b3H4ttahMyFMOKENkUuqgsEDjEMFyAxWOf9xMWXWff1u+cO2SuqbExBw3JnheJDqXwtUMpHVgRmjPG3l4wMU86sXotT0sGf1sWCj9kajm9HU+KJn3briWs6QECtXqhNtben8OkBEYFJnkROFn/gDAkeG0pHh51f4y53gMNihlZfLA4vFgr1kyVKAh4ct/cMnDdjV+CN+WwzJ3rn9JTGp03nlDAnfY7Yeb6EjdFG/0xSnm5ciCIQavJukpBYaZxIjO84NSmKs1Cd2z/DqkzFfpOt+U7PQqWMldaI74Mbt+fWNzJOz/gcKaRZpmwvSJbcZb6N7qQM30zzbzl2UOTgMd7VO8E0cKQe4eAuQOTaBNaIGK51X7xyWvM3e6UV5+Fsb8UMvvEBjvzuFGoAR3l3sijGIr7na+7uXfwn91p6fXx6otuTWCXneKNUc/uLlqiaEdIchBkZR+uThqkN5bhIkvFqmPyeuTBqjAI3MrkKA5+yuDSus7/7KwS/GPkXKxhAlzOAi5Tb6Zg6ZZrd2gByfzZ2t1Kyvuw0iMFaBAFpbXWdVcKS7w2kAgzzjSAeVZtjLJL7sZmV/wrf08kckCrAVyBa5qzvYVoKx49XNlV6jcJhJsYeLesaXnWjdVmW7T40Y7ZASTMqQfhMqk1VJOiVpbFsvXCLX5SQnnrbB4jElQQLK0M0yyFFziKPdia34ROlIwx7vniA4fNKMHnfqV4FZPgl6pG/y2PscrjwNcpCSIioy+tIOYSJi4e2AKLxpQN1S3IWGETMsyLu/dwcmQ5N0cK0Nj6kgnw6VR4FU2NnqwdT4ZFXNcxF04pKdeF95zE7WbraKrQXtHmk6bIN6xqcnEZcaG/8DwYj7xl/zMyhj0wLMQcTASesXL2vTf2Ltp4blpAJGVugzo7UNT0/YHkkejZJjRXJqaGPX3Fq6mGYpraic8SPgwt28LYz1ypyzfJHb9flXHRS8KoP/dcIYHAm3+Tas3CQF/y9CHfW2L1WyzOZ84tbAQisSS1yb2wkRBlpqxr0q/gW+6l8Xd0E2RiuRScI4YzxpfuNfGjNk/H+8ZXr6Qwq9osWWk/5wjhYDn0LpNYbIsLYNRARX1WWIkN7iF5/aCTQJPi/axPqUSns9RzYq6fBkzQFSWkhRRSoqMFx36TQev+V038oLYvw0i/xJgUN9PPbZPUh/0/f6klaETwHLVRMSJC4uAbrrzaDt9GcyfpS/t57OCInQqykdKv55MaUN1Yht8dZuqYhzpuTI2HVbUEb5XkEMC1U8LDm3N0Za87lIA7qv/w5EaNs/qY5ZBPfY/QPJnVS9DhPpOruglWtd9iqbwfoRrxMg4nTUQ7pVLBkRDjXui1XwNOlBP5w4i7eq4o8ZNpPCxVYvf5bG6GbxlDYdCAiS5j9D6DpKw== X-OriginatorOrg: seco.com X-MS-Exchange-CrossTenant-Network-Message-Id: 69d3a497-bba0-4ab8-e7a5-08dab07d7126 X-MS-Exchange-CrossTenant-AuthSource: DB7PR03MB4972.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2022 20:23:24.6028 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bebe97c3-6438-442e-ade3-ff17aa50e733 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: F47kHnxVHpPL3cpyRzIig3+dMwfIucAZaWziDW0HwWu8HkzTWjn348pIyjhGHBMdvM7pnxeQfF55Qv57dWi6ug== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR03MB8635 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1746967956830766859?= X-GMAIL-MSGID: =?utf-8?q?1746967956830766859?= Although not stated in the datasheet, as far as I can tell PCS for mEMACs is a "Lynx." By reusing the existing driver, we can remove the PCS management code from the memac driver. This requires calling some PCS functions manually which phylink would usually do for us, but we will let it do that soon. One problem is that we don't actually have a PCS for QSGMII. We pretend that each mEMAC's MDIO bus has four QSGMII PCSs, but this is not the case. Only the "base" mEMAC's MDIO bus has the four QSGMII PCSs. This is not an issue yet, because we never get the PCS state. However, it will be once the conversion to phylink is complete, since the links will appear to never come up. To get around this, we allow specifying multiple PCSs in pcsphy. This breaks backwards compatibility with old device trees, but only for QSGMII. IMO this is the only reasonable way to figure out what the actual QSGMII PCS is. Additionally, we now also support a separate XFI PCS. This can allow the SerDes driver to set different addresses for the SGMII and XFI PCSs so they can be accessed at the same time. Signed-off-by: Sean Anderson --- Changes in v7: - Fix oops if memac_pcs_create returned -EPROBE_DEFER - Fix using pcs-names instead of pcs-handle-names - Fix not checking for -ENODATA when looking for sgmii pcs Changes in v6: - Fix 81-character line Changes in v3: - Put the PCS mdiodev only after we are done with it (since the PCS does not perform a get itself). Changes in v2: - Move PCS_LYNX dependency to fman Kconfig drivers/net/ethernet/freescale/fman/Kconfig | 3 + .../net/ethernet/freescale/fman/fman_memac.c | 258 +++++++----------- 2 files changed, 105 insertions(+), 156 deletions(-) diff --git a/drivers/net/ethernet/freescale/fman/Kconfig b/drivers/net/ethernet/freescale/fman/Kconfig index 48bf8088795d..8f5637db41dd 100644 --- a/drivers/net/ethernet/freescale/fman/Kconfig +++ b/drivers/net/ethernet/freescale/fman/Kconfig @@ -4,6 +4,9 @@ config FSL_FMAN depends on FSL_SOC || ARCH_LAYERSCAPE || COMPILE_TEST select GENERIC_ALLOCATOR select PHYLIB + select PHYLINK + select PCS + select PCS_LYNX select CRC32 default n help diff --git a/drivers/net/ethernet/freescale/fman/fman_memac.c b/drivers/net/ethernet/freescale/fman/fman_memac.c index 56a29f505590..43584946cae2 100644 --- a/drivers/net/ethernet/freescale/fman/fman_memac.c +++ b/drivers/net/ethernet/freescale/fman/fman_memac.c @@ -11,43 +11,12 @@ #include #include +#include #include #include #include #include -/* PCS registers */ -#define MDIO_SGMII_CR 0x00 -#define MDIO_SGMII_DEV_ABIL_SGMII 0x04 -#define MDIO_SGMII_LINK_TMR_L 0x12 -#define MDIO_SGMII_LINK_TMR_H 0x13 -#define MDIO_SGMII_IF_MODE 0x14 - -/* SGMII Control defines */ -#define SGMII_CR_AN_EN 0x1000 -#define SGMII_CR_RESTART_AN 0x0200 -#define SGMII_CR_FD 0x0100 -#define SGMII_CR_SPEED_SEL1_1G 0x0040 -#define SGMII_CR_DEF_VAL (SGMII_CR_AN_EN | SGMII_CR_FD | \ - SGMII_CR_SPEED_SEL1_1G) - -/* SGMII Device Ability for SGMII defines */ -#define MDIO_SGMII_DEV_ABIL_SGMII_MODE 0x4001 -#define MDIO_SGMII_DEV_ABIL_BASEX_MODE 0x01A0 - -/* Link timer define */ -#define LINK_TMR_L 0xa120 -#define LINK_TMR_H 0x0007 -#define LINK_TMR_L_BASEX 0xaf08 -#define LINK_TMR_H_BASEX 0x002f - -/* SGMII IF Mode defines */ -#define IF_MODE_USE_SGMII_AN 0x0002 -#define IF_MODE_SGMII_EN 0x0001 -#define IF_MODE_SGMII_SPEED_100M 0x0004 -#define IF_MODE_SGMII_SPEED_1G 0x0008 -#define IF_MODE_SGMII_DUPLEX_HALF 0x0010 - /* Num of additional exact match MAC adr regs */ #define MEMAC_NUM_OF_PADDRS 7 @@ -326,7 +295,9 @@ struct fman_mac { struct fman_rev_info fm_rev_info; bool basex_if; struct phy *serdes; - struct phy_device *pcsphy; + struct phylink_pcs *sgmii_pcs; + struct phylink_pcs *qsgmii_pcs; + struct phylink_pcs *xfi_pcs; bool allmulti_enabled; }; @@ -487,91 +458,22 @@ static u32 get_mac_addr_hash_code(u64 eth_addr) return xor_val; } -static void setup_sgmii_internal_phy(struct fman_mac *memac, - struct fixed_phy_status *fixed_link) +static void setup_sgmii_internal(struct fman_mac *memac, + struct phylink_pcs *pcs, + struct fixed_phy_status *fixed_link) { - u16 tmp_reg16; - - if (WARN_ON(!memac->pcsphy)) - return; - - /* SGMII mode */ - tmp_reg16 = IF_MODE_SGMII_EN; - if (!fixed_link) - /* AN enable */ - tmp_reg16 |= IF_MODE_USE_SGMII_AN; - else { - switch (fixed_link->speed) { - case 10: - /* For 10M: IF_MODE[SPEED_10M] = 0 */ - break; - case 100: - tmp_reg16 |= IF_MODE_SGMII_SPEED_100M; - break; - case 1000: - default: - tmp_reg16 |= IF_MODE_SGMII_SPEED_1G; - break; - } - if (!fixed_link->duplex) - tmp_reg16 |= IF_MODE_SGMII_DUPLEX_HALF; - } - phy_write(memac->pcsphy, MDIO_SGMII_IF_MODE, tmp_reg16); - - /* Device ability according to SGMII specification */ - tmp_reg16 = MDIO_SGMII_DEV_ABIL_SGMII_MODE; - phy_write(memac->pcsphy, MDIO_SGMII_DEV_ABIL_SGMII, tmp_reg16); - - /* Adjust link timer for SGMII - - * According to Cisco SGMII specification the timer should be 1.6 ms. - * The link_timer register is configured in units of the clock. - * - When running as 1G SGMII, Serdes clock is 125 MHz, so - * unit = 1 / (125*10^6 Hz) = 8 ns. - * 1.6 ms in units of 8 ns = 1.6ms / 8ns = 2*10^5 = 0x30d40 - * - When running as 2.5G SGMII, Serdes clock is 312.5 MHz, so - * unit = 1 / (312.5*10^6 Hz) = 3.2 ns. - * 1.6 ms in units of 3.2 ns = 1.6ms / 3.2ns = 5*10^5 = 0x7a120. - * Since link_timer value of 1G SGMII will be too short for 2.5 SGMII, - * we always set up here a value of 2.5 SGMII. - */ - phy_write(memac->pcsphy, MDIO_SGMII_LINK_TMR_H, LINK_TMR_H); - phy_write(memac->pcsphy, MDIO_SGMII_LINK_TMR_L, LINK_TMR_L); - - if (!fixed_link) - /* Restart AN */ - tmp_reg16 = SGMII_CR_DEF_VAL | SGMII_CR_RESTART_AN; + __ETHTOOL_DECLARE_LINK_MODE_MASK(advertising); + phy_interface_t iface = memac->basex_if ? PHY_INTERFACE_MODE_1000BASEX : + PHY_INTERFACE_MODE_SGMII; + unsigned int mode = fixed_link ? MLO_AN_FIXED : MLO_AN_INBAND; + + linkmode_set_pause(advertising, true, true); + pcs->ops->pcs_config(pcs, mode, iface, advertising, true); + if (fixed_link) + pcs->ops->pcs_link_up(pcs, mode, iface, fixed_link->speed, + fixed_link->duplex); else - /* AN disabled */ - tmp_reg16 = SGMII_CR_DEF_VAL & ~SGMII_CR_AN_EN; - phy_write(memac->pcsphy, 0x0, tmp_reg16); -} - -static void setup_sgmii_internal_phy_base_x(struct fman_mac *memac) -{ - u16 tmp_reg16; - - /* AN Device capability */ - tmp_reg16 = MDIO_SGMII_DEV_ABIL_BASEX_MODE; - phy_write(memac->pcsphy, MDIO_SGMII_DEV_ABIL_SGMII, tmp_reg16); - - /* Adjust link timer for SGMII - - * For Serdes 1000BaseX auto-negotiation the timer should be 10 ms. - * The link_timer register is configured in units of the clock. - * - When running as 1G SGMII, Serdes clock is 125 MHz, so - * unit = 1 / (125*10^6 Hz) = 8 ns. - * 10 ms in units of 8 ns = 10ms / 8ns = 1250000 = 0x1312d0 - * - When running as 2.5G SGMII, Serdes clock is 312.5 MHz, so - * unit = 1 / (312.5*10^6 Hz) = 3.2 ns. - * 10 ms in units of 3.2 ns = 10ms / 3.2ns = 3125000 = 0x2faf08. - * Since link_timer value of 1G SGMII will be too short for 2.5 SGMII, - * we always set up here a value of 2.5 SGMII. - */ - phy_write(memac->pcsphy, MDIO_SGMII_LINK_TMR_H, LINK_TMR_H_BASEX); - phy_write(memac->pcsphy, MDIO_SGMII_LINK_TMR_L, LINK_TMR_L_BASEX); - - /* Restart AN */ - tmp_reg16 = SGMII_CR_DEF_VAL | SGMII_CR_RESTART_AN; - phy_write(memac->pcsphy, 0x0, tmp_reg16); + pcs->ops->pcs_an_restart(pcs); } static int check_init_parameters(struct fman_mac *memac) @@ -983,7 +885,6 @@ static int memac_set_exception(struct fman_mac *memac, static int memac_init(struct fman_mac *memac) { struct memac_cfg *memac_drv_param; - u8 i; enet_addr_t eth_addr; bool slow_10g_if = false; struct fixed_phy_status *fixed_link = NULL; @@ -1036,32 +937,10 @@ static int memac_init(struct fman_mac *memac) iowrite32be(reg32, &memac->regs->command_config); } - if (memac->phy_if == PHY_INTERFACE_MODE_SGMII) { - /* Configure internal SGMII PHY */ - if (memac->basex_if) - setup_sgmii_internal_phy_base_x(memac); - else - setup_sgmii_internal_phy(memac, fixed_link); - } else if (memac->phy_if == PHY_INTERFACE_MODE_QSGMII) { - /* Configure 4 internal SGMII PHYs */ - for (i = 0; i < 4; i++) { - u8 qsmgii_phy_addr, phy_addr; - /* QSGMII PHY address occupies 3 upper bits of 5-bit - * phy_address; the lower 2 bits are used to extend - * register address space and access each one of 4 - * ports inside QSGMII. - */ - phy_addr = memac->pcsphy->mdio.addr; - qsmgii_phy_addr = (u8)((phy_addr << 2) | i); - memac->pcsphy->mdio.addr = qsmgii_phy_addr; - if (memac->basex_if) - setup_sgmii_internal_phy_base_x(memac); - else - setup_sgmii_internal_phy(memac, fixed_link); - - memac->pcsphy->mdio.addr = phy_addr; - } - } + if (memac->phy_if == PHY_INTERFACE_MODE_SGMII) + setup_sgmii_internal(memac, memac->sgmii_pcs, fixed_link); + else if (memac->phy_if == PHY_INTERFACE_MODE_QSGMII) + setup_sgmii_internal(memac, memac->qsgmii_pcs, fixed_link); /* Max Frame Length */ err = fman_set_mac_max_frame(memac->fm, memac->mac_id, @@ -1097,12 +976,25 @@ static int memac_init(struct fman_mac *memac) return 0; } +static void pcs_put(struct phylink_pcs *pcs) +{ + struct mdio_device *mdiodev; + + if (IS_ERR_OR_NULL(pcs)) + return; + + mdiodev = lynx_get_mdio_device(pcs); + lynx_pcs_destroy(pcs); + mdio_device_free(mdiodev); +} + static int memac_free(struct fman_mac *memac) { free_init_resources(memac); - if (memac->pcsphy) - put_device(&memac->pcsphy->mdio.dev); + pcs_put(memac->sgmii_pcs); + pcs_put(memac->qsgmii_pcs); + pcs_put(memac->xfi_pcs); kfree(memac->memac_drv_param); kfree(memac); @@ -1153,12 +1045,31 @@ static struct fman_mac *memac_config(struct mac_device *mac_dev, return memac; } +static struct phylink_pcs *memac_pcs_create(struct device_node *mac_node, + int index) +{ + struct device_node *node; + struct mdio_device *mdiodev = NULL; + struct phylink_pcs *pcs; + + node = of_parse_phandle(mac_node, "pcsphy-handle", index); + if (node && of_device_is_available(node)) + mdiodev = of_mdio_find_device(node); + of_node_put(node); + + if (!mdiodev) + return ERR_PTR(-EPROBE_DEFER); + + pcs = lynx_pcs_create(mdiodev); + return pcs; +} + int memac_initialization(struct mac_device *mac_dev, struct device_node *mac_node, struct fman_mac_params *params) { int err; - struct device_node *phy_node; + struct phylink_pcs *pcs; struct fixed_phy_status *fixed_link; struct fman_mac *memac; @@ -1188,23 +1099,58 @@ int memac_initialization(struct mac_device *mac_dev, memac = mac_dev->fman_mac; memac->memac_drv_param->max_frame_length = fman_get_max_frm(); memac->memac_drv_param->reset_on_init = true; - if (memac->phy_if == PHY_INTERFACE_MODE_SGMII || - memac->phy_if == PHY_INTERFACE_MODE_QSGMII) { - phy_node = of_parse_phandle(mac_node, "pcsphy-handle", 0); - if (!phy_node) { - pr_err("PCS PHY node is not available\n"); - err = -EINVAL; + + err = of_property_match_string(mac_node, "pcs-handle-names", "xfi"); + if (err >= 0) { + memac->xfi_pcs = memac_pcs_create(mac_node, err); + if (IS_ERR(memac->xfi_pcs)) { + err = PTR_ERR(memac->xfi_pcs); + dev_err_probe(mac_dev->dev, err, "missing xfi pcs\n"); goto _return_fm_mac_free; } + } else if (err != -EINVAL && err != -ENODATA) { + goto _return_fm_mac_free; + } - memac->pcsphy = of_phy_find_device(phy_node); - if (!memac->pcsphy) { - pr_err("of_phy_find_device (PCS PHY) failed\n"); - err = -EINVAL; + err = of_property_match_string(mac_node, "pcs-handle-names", "qsgmii"); + if (err >= 0) { + memac->qsgmii_pcs = memac_pcs_create(mac_node, err); + if (IS_ERR(memac->qsgmii_pcs)) { + err = PTR_ERR(memac->qsgmii_pcs); + dev_err_probe(mac_dev->dev, err, + "missing qsgmii pcs\n"); goto _return_fm_mac_free; } + } else if (err != -EINVAL && err != -ENODATA) { + goto _return_fm_mac_free; + } + + /* For compatibility, if pcs-handle-names is missing, we assume this + * phy is the first one in pcsphy-handle + */ + err = of_property_match_string(mac_node, "pcs-handle-names", "sgmii"); + if (err == -EINVAL || err == -ENODATA) + pcs = memac_pcs_create(mac_node, 0); + else if (err < 0) + goto _return_fm_mac_free; + else + pcs = memac_pcs_create(mac_node, err); + + if (!pcs) { + dev_err(mac_dev->dev, "missing pcs\n"); + err = -ENOENT; + goto _return_fm_mac_free; } + /* If err is set here, it means that pcs-handle-names was missing above + * (and therefore that xfi_pcs cannot be set). If we are defaulting to + * XGMII, assume this is for XFI. Otherwise, assume it is for SGMII. + */ + if (err && mac_dev->phy_if == PHY_INTERFACE_MODE_XGMII) + memac->xfi_pcs = pcs; + else + memac->sgmii_pcs = pcs; + memac->serdes = devm_of_phy_get(mac_dev->dev, mac_node, "serdes"); err = PTR_ERR(memac->serdes); if (err == -ENODEV || err == -ENOSYS) { From patchwork Mon Oct 17 20:22:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 3700 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp1629071wrs; Mon, 17 Oct 2022 13:27:52 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5tSLtnhnFjJu/mQgJGI7CKcvXPYNNIoZV6Jm4atRVNbkjKLHJ7VY6llWAHazIB1pJ1PAzO X-Received: by 2002:a17:907:746:b0:741:4a1b:cb1f with SMTP id xc6-20020a170907074600b007414a1bcb1fmr9758894ejb.370.1666038472169; Mon, 17 Oct 2022 13:27:52 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1666038472; cv=pass; d=google.com; s=arc-20160816; b=NRW2ZIEX1ygsIPAiksm/SdMDOBZCaqYZyUTXYtttk5g6sxWv6J8xDtF7+2RvMqbuCN anYPHJXOOcYxTQryfwk2FzumuRUC+ru07jJv9Bq7f9vw/js/NW7DRLqy/ap7DmBiG+GA 4l0UFUKP8R2edCFOX4j70lRA0VFq3Atoe9mEm1DhM5cdvpinOIwAXiLk6vrMH+WuyW05 f6DfAw+Pk+fapM38gsVswNUfqh3AdKoghrEKySRZ2AjnDumcZ9XR38tmfIkFERxaUOBQ KNQeCHfd9Di7GhrRA82ZzHc4kqvSOxGLXGQIUCJpBurV+vRWsO7ZaWOUlGMWa0ZC43CJ 2KZQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=igNL46iR5rGyU/vb24uTi/Kfh2wSN7fV1PFYhL3Mok8=; b=yQ7AC5Rcv+kKmibnh7r55IC8u8VeMwDxciG9Rfimi/JPXdKPUwBdnrPKGlv+nehI0y Xau8qyaD2pcN2WJ2NFEJTWQMn6xm84XgJejZ2RvjTSGu0BTeH/3QUUTcuKjulvtICMdh HENI/1AoXF2LjY36cH2wdLP+/PD/It8iqYTITPjj6PgnomQLEpUwUeaZs8LELjt/OBVm H40aI+ynEFfTmca7OB7m3W9xVX83TqFA1cEnRVcQW15q0xoDXasfG7OhtcJjU7yyVnyG y5QJ0O3e7P5Sco67l3h4JUJ326si5hZebNtB3YuP2CRtD1GRneY+EMxXqocjAHeuf6CE RsRw== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@seco.com header.s=selector1 header.b=dIvFaPli; arc=pass (i=1 spf=pass spfdomain=seco.com dkim=pass dkdomain=seco.com dmarc=pass fromdomain=seco.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=seco.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i9-20020a1709063c4900b0078db79317bbsi8709992ejg.689.2022.10.17.13.27.23; Mon, 17 Oct 2022 13:27:52 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@seco.com header.s=selector1 header.b=dIvFaPli; arc=pass (i=1 spf=pass spfdomain=seco.com dkim=pass dkdomain=seco.com dmarc=pass fromdomain=seco.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=seco.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230238AbiJQUYK (ORCPT + 99 others); Mon, 17 Oct 2022 16:24:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52906 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231362AbiJQUXi (ORCPT ); Mon, 17 Oct 2022 16:23:38 -0400 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60071.outbound.protection.outlook.com [40.107.6.71]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2FC9E5073A; Mon, 17 Oct 2022 13:23:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HMAaNV2DYK+jP826XXLEizLCbEBXCZ4BH+SKUYOSV9JK6nDoUPCScqglorKRC65Hi6aJUHy7uF/vr4HDbras9qfpil5DHDlpZBp4ySYBARnR+52qx76rPHR2YPD1qZA6aEdZ6yp8BY99mB+5yA+rTHqrU7NAu8+ATACvP99P6GqqcdVQpx+sb0CXidnJDUullqw3UhTxDgxaw9h9HvACfqgtW8nXROSm2+hPebhBxZztuhEWzg20h+Xjd9xPYdHji7Oolz1gpklCGtYt4TV6K5o+nO3XIALsH4lDpLXQhKoNyMSpiZGKkoICu0PRnlYdWY3TWNLpjSfijZdXPJuQKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=igNL46iR5rGyU/vb24uTi/Kfh2wSN7fV1PFYhL3Mok8=; b=H8kUjM59bPiYFtKRulpWfmeljAOwk5DynNC/Euc3YRJXQz8hOM0SXWF06YCH6+gMronXUTfEcuZvaJ0PKJIaXKrLPW3au+cplBO0jhyIlBRNZ7Zmn2wTT7ecq0OSFeJIk6ev0JYlfZEJFXDJFSrCyjhn0SiLNS4+J9AfSZ/62+iGzPRQunpNsc/l1Ohm+nxSj3PsfhrVPPGouTVAzoZSA+0aXCbFehVauwVZwf2V8GFx5rrYjIdQOWGV/KiVl2T7qHIob6evL4sRMFJ9xfhtc81bE9JxLhmSa2/LU3HL6wCuLiN9YazqhvXWjCVQT3LaR6CgQM1oVnZGYhCvsg/MWg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=seco.com; dmarc=pass action=none header.from=seco.com; dkim=pass header.d=seco.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=seco.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=igNL46iR5rGyU/vb24uTi/Kfh2wSN7fV1PFYhL3Mok8=; b=dIvFaPli8ZvkjZ46r/LRmxOFpRqgqrfPJcxxff9ZWfK5CMjHMcl4N9KZitRFlsl2b3xMYlq/hxh7WbXKbRpLb+IdWfOfJtP1fne9fAWSqBAv0oW/bs8XHxrTvtlzafqJyUem+0jAGx4Zgn3q98wPKM3pO2JisTvMPZW5Z0bOLCPCXbpPRaaCx8XdfP6JCwDyYtL0oehoSnehmv58ocOG5FfKTsOOeykwS4tUYl9f2QCXE3K5lSJ87YMj9P4gCbkbSOcratE6PKpRSZd2tlotwvq/u01OtR/cQNvjaFRm7+3+J6EbJfLn2sSvT0z/g+s4XZCaj6giBKSQnQyvVkYd0A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=seco.com; Received: from DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) by GV1PR03MB8406.eurprd03.prod.outlook.com (2603:10a6:150:55::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.26; Mon, 17 Oct 2022 20:23:28 +0000 Received: from DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::204a:de22:b651:f86d]) by DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::204a:de22:b651:f86d%6]) with mapi id 15.20.5723.033; Mon, 17 Oct 2022 20:23:28 +0000 From: Sean Anderson To: "David S . Miller" , Jakub Kicinski , Madalin Bucur , Camelia Alexandra Groza , netdev@vger.kernel.org Cc: Eric Dumazet , "linuxppc-dev @ lists . ozlabs . org" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Russell King , Paolo Abeni , Sean Anderson Subject: [PATCH net-next v7 07/10] net: dpaa: Convert to phylink Date: Mon, 17 Oct 2022 16:22:38 -0400 Message-Id: <20221017202241.1741671-8-sean.anderson@seco.com> X-Mailer: git-send-email 2.35.1.1320.gc452695387.dirty In-Reply-To: <20221017202241.1741671-1-sean.anderson@seco.com> References: <20221017202241.1741671-1-sean.anderson@seco.com> X-ClientProxiedBy: SJ0PR03CA0251.namprd03.prod.outlook.com (2603:10b6:a03:3a0::16) To DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB7PR03MB4972:EE_|GV1PR03MB8406:EE_ X-MS-Office365-Filtering-Correlation-Id: 0860476f-9944-45f9-8ada-08dab07d733a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Kn9UtdPzuh6pB43mYmLdSWf1a27KXnaLc8xzMxJxx1iLExtCe+9ctfuHVHt8VG6u6LBb+XB0aHLSRxjC976WhIN79pT24ZkrvR6KGqNQrGzcthVvNebKAY7KpE21zFQmK2eJlSZqg1f9dSl6QvbmNpC2gozKh5a0m1b2TfYA7Ak14L6mSKtiHHeQKLJvNDPilCmE+7TF6BCXcWS5YqtcG289B3Ih2yJirfTOTzfKaIow9sp71wcId7b5l3yI5K5IdKl63kgQKIl1kNJU3M6EHebDnNm1lkHgcfHELJtIPGLftH3YnmNmbE0YwLrvBWntKXrkCtrXcKzIZgq0Ge9kohFgbvcbVYk3KsNKE4xG+AMWy3EYPbpA47SMz43UDKdsPOFucRfx9bt1U27ge5dvK3kGBLQD31jCKD0untFhGcxECUp7wwocydIpUFoWtUT/s2BUmKk0XygLJar1VMhgsvAidbMhqJ1S03MSyZ0kXrUgm5Pv2U6kdnPu8QhbKxHrFprQa1HjvKzE9BW28h6HFtXiTTiBuV+wGx7ifKEk+FavAMdTYETGjU2kRd1MTsZcIfYhksBcJK2YMPGFxVeYvumdVn8CZD7rLM6OqGxU1u0QjAoaTwt8NPDB1IUOnUVH7uHWHqnoxtakPkgRj1M4T76a47ev5ixqlDttt4lYnDx1MiuegacMmq/9DACcUU/U8qOQ9n8zPa5qgy7ATa0VoQ4ynFUgkZd6oMN45NeEgF+5a7orF+ttNTi5TrlIIPMeO3WJKMivEWHqrY6uGaVcCVDMlF5s2f07RKAyo8Q+fP4= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB7PR03MB4972.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(39850400004)(396003)(366004)(136003)(346002)(376002)(451199015)(36756003)(38350700002)(38100700002)(8936002)(5660300002)(30864003)(44832011)(83380400001)(86362001)(26005)(6512007)(110136005)(54906003)(6666004)(107886003)(186003)(2616005)(1076003)(478600001)(6486002)(316002)(66476007)(66946007)(66556008)(4326008)(8676002)(41300700001)(52116002)(6506007)(2906002)(7416002)(559001)(579004)(309714004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: WsQr8uKCRmPsd6tJ8XcCyhinnlcRDisbreP8pp2T5nyG38XbKo59sPYLMiX9M4/c2fe4D05cnqBsGcHPtuHKO5BV9oqfahstj+AvfqnWqZFwjvIvFGTfIgMbXxEeXWQwcx5CQ/DRLu1rfrApDKXRLQrslUgGeDJ0Fh4N0EKmETfyvVKayJg3qG2vS8HSSq9zg/364I8AZ+gno0lrmpHFKmj6fHbZHk938X20aTqY5aSxQjcF7/fMAscJD5XIy7xXYqaiWl8m512mgyaVtALv7+TEZ9AJxbd7qVMez2Qw6zPZE8xLQjsJfGeKBwzxlD8VS76ZLVTr7Y4T51HDwNuV0KYo2B28SW4qU/j8BhZpv21ZLO3pa6Zz6egkMqPKwtR4XE9VphE51KHr/Sx8AI3A5SIDh0UMj4Iaed5sFMGvubteyg2KfF5XRh3Xzd8jZZSM0TUVg26YaFv7gDnWdjNFsFkzU5qRKnVhzWsOwCtgYgczOGdHHxIwDIfwHSU/1UPn/qSzmqhe03kpyZxpcjG9Di2zHttGAAykL++FUQtF6XVTV08WNBYBggUJ/UZUTXjhd5+UoM6d0rkHT6bDLdAiQn3N61k4YavFiGvBn1ZC2YNAKfaB96V8r4fXObnMnutDGOluzzYbyMN7WT4t7Ff7qakgwDUmEii08UAf3l5uAEz2P+ukZ9PO/r1Q0WboNw/FbTY80/hJsLJbSspD/UP5BHzyFeZ9c9y1nE//MZQxL+JGQJQu3DDvZfK8GbX/0oPsjsbZ365Jpq6iEFEG8R7E3eONkjt7lZ/BGmQh8GKEaBkt2CayihJkiiGZWR88NiCa7iSDBx94v2ri28do36CBMNY20zaTNQyLc67LLL/YkfvUlle+xWAMZ8newjpY6X2O1K5IRKOVsivi9uJBnM5xMI7tmn8g6rfnkq7dUNz2Q97OoMhBEHWcPvVnczOHSTINenG9QCeGfuFQanCOsYZmf0RbWmzQjgdlXi5ukcYG/SKizk3Y7J5M/Sylg7QtnCJ5UKo4Io5BOUqpCAsIRiolyRPFUVldniLBKD6FxDwezHDJvbqr2ViwlNGCQNQwoJ5qxWnyGIvfMgNY4bYqulZkW8h8IBaVWOqL3RtUAKxgTuup75fZGhp8zPCBrkuaHagVTwg0JDBSc2nAOOUZykrCJf/SEqN2e/MVUw+0eneUFYJbmiY/NM5GToiamVksfKSBXl4LHUgG6ygR1HiPLlICWcRbAkDWjAe5DpcBi0Y+/M8mRIf5Rh6jujiZp21X4iKN0tzHesqu+aCYoeQpSOUIfTrW9Pi9KtpfnjpVuybbTimUHdiXyqRZSgb2DwqpKxn3EQJK7y5Q8sqYSNAYlCRzA1P43sBW9qwirpIcKyC4RIUr5LXF+VzBuyqun81BV+u5EAmslTX1Nt2BvM5MRofRFvOoilZC4nRvvus+2w2mdT6ik3hyLFK+XrxkvmhgtT2hk5mDlIQDmK03PHrtNQ3rAHfCG8laie6fqdD8OthRfM/P5MNdxXWxga8q+NYuRHK4IMyt+xMxrgVqqE3POUacqihxwvN8dHz5xRQup2xk5yzqFwfZjSxyd8Se28QNnO42aJf1FNHGthopJNAwRCGk7Q== X-OriginatorOrg: seco.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0860476f-9944-45f9-8ada-08dab07d733a X-MS-Exchange-CrossTenant-AuthSource: DB7PR03MB4972.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2022 20:23:28.6181 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bebe97c3-6438-442e-ade3-ff17aa50e733 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: fXnauBoGHbTgBFAn27z6WVENDe/+1yCi9uLeB8gLPViwCbpoqZrMqfUf6Doyfp+LEYIYANdHroO/UX+u060d/g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR03MB8406 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1746967956982393212?= X-GMAIL-MSGID: =?utf-8?q?1746967956982393212?= This converts DPAA to phylink. All macs are converted. This should work with no device tree modifications (including those made in this series), except for QSGMII (as noted previously). The mEMAC configuration is one of the tricker areas. I have tried to capture all the restrictions across the various models. Most of the time, we assume that if the serdes supports a mode or the phy-interface-mode specifies it, then we support it. The only place we can't do this is (RG)MII, since there's no serdes. In that case, we rely on a (new) devicetree property. There are also several cases where half-duplex is broken. Unfortunately, only a single compatible is used for the MAC, so we have to use the board compatible instead. The 10GEC conversion is very straightforward, since it only supports XAUI. There is generally nothing to configure. The dTSEC conversion is broadly similar to mEMAC, but is simpler because we don't support configuring the SerDes (though this can be easily added) and we don't have multiple PCSs. From what I can tell, there's nothing different in the driver or documentation between SGMII and 1000BASE-X except for the advertising. Similarly, I couldn't find anything about 2500BASE-X. In both cases, I treat them like SGMII. These modes aren't used by any in-tree boards. Similarly, despite being mentioned in the driver, I couldn't find any documented SoCs which supported QSGMII. I have left it unimplemented for now. Signed-off-by: Sean Anderson --- This has been tested on an LS1046ARDB. With managed=phy, I was unable to get the interfaces to come up at all, hence the default to in-band. 10GEC and dTSEC have not been tested at all. I would greatly appreciate if someone could try them out. Changes in v7: - Fix 81-character line - Simplify memac_validate with phylink_validate_mask_caps Changes in v6: - Fix uninitialized variable in dtsec_mac_config Changes in v3: - Remove _return label from memac_initialization in favor of returning directly - Fix grabbing the default PCS not checking for -ENODATA from of_property_match_string - Set DTSEC_ECNTRL_R100M in dtsec_link_up instead of dtsec_mac_config - Remove rmii/mii properties Changes in v2: - Remove unused variable slow_10g_if - Restrict valid link modes based on the phy interface. This is easier to set up, and mostly captures what I intended to do the first time. We now have a custom validate which restricts half-duplex for some SoCs for RGMII, but generally just uses the default phylink validate. - Configure the SerDes in enable/disable - Properly implement all ethtool ops and ioctls. These were mostly stubbed out just enough to compile last time. - Convert 10GEC and dTSEC as well drivers/net/ethernet/freescale/dpaa/Kconfig | 4 +- .../net/ethernet/freescale/dpaa/dpaa_eth.c | 89 +-- .../ethernet/freescale/dpaa/dpaa_ethtool.c | 90 +-- drivers/net/ethernet/freescale/fman/Kconfig | 1 - .../net/ethernet/freescale/fman/fman_dtsec.c | 460 +++++++------- .../net/ethernet/freescale/fman/fman_mac.h | 10 - .../net/ethernet/freescale/fman/fman_memac.c | 559 +++++++++--------- .../net/ethernet/freescale/fman/fman_tgec.c | 131 ++-- drivers/net/ethernet/freescale/fman/mac.c | 168 +----- drivers/net/ethernet/freescale/fman/mac.h | 23 +- 10 files changed, 619 insertions(+), 916 deletions(-) diff --git a/drivers/net/ethernet/freescale/dpaa/Kconfig b/drivers/net/ethernet/freescale/dpaa/Kconfig index 0e1439fd00bd..2b560661c82a 100644 --- a/drivers/net/ethernet/freescale/dpaa/Kconfig +++ b/drivers/net/ethernet/freescale/dpaa/Kconfig @@ -2,8 +2,8 @@ menuconfig FSL_DPAA_ETH tristate "DPAA Ethernet" depends on FSL_DPAA && FSL_FMAN - select PHYLIB - select FIXED_PHY + select PHYLINK + select PCS_LYNX help Data Path Acceleration Architecture Ethernet driver, supporting the Freescale QorIQ chips. diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c index 31cfa121333d..021ba999d86d 100644 --- a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c +++ b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c @@ -264,8 +264,19 @@ static int dpaa_netdev_init(struct net_device *net_dev, net_dev->needed_headroom = priv->tx_headroom; net_dev->watchdog_timeo = msecs_to_jiffies(tx_timeout); - mac_dev->net_dev = net_dev; + /* The rest of the config is filled in by the mac device already */ + mac_dev->phylink_config.dev = &net_dev->dev; + mac_dev->phylink_config.type = PHYLINK_NETDEV; mac_dev->update_speed = dpaa_eth_cgr_set_speed; + mac_dev->phylink = phylink_create(&mac_dev->phylink_config, + dev_fwnode(mac_dev->dev), + mac_dev->phy_if, + mac_dev->phylink_ops); + if (IS_ERR(mac_dev->phylink)) { + err = PTR_ERR(mac_dev->phylink); + dev_err_probe(dev, err, "Could not create phylink\n"); + return err; + } /* start without the RUNNING flag, phylib controls it later */ netif_carrier_off(net_dev); @@ -273,6 +284,7 @@ static int dpaa_netdev_init(struct net_device *net_dev, err = register_netdev(net_dev); if (err < 0) { dev_err(dev, "register_netdev() = %d\n", err); + phylink_destroy(mac_dev->phylink); return err; } @@ -294,8 +306,7 @@ static int dpaa_stop(struct net_device *net_dev) */ msleep(200); - if (mac_dev->phy_dev) - phy_stop(mac_dev->phy_dev); + phylink_stop(mac_dev->phylink); mac_dev->disable(mac_dev->fman_mac); for (i = 0; i < ARRAY_SIZE(mac_dev->port); i++) { @@ -304,8 +315,7 @@ static int dpaa_stop(struct net_device *net_dev) err = error; } - if (net_dev->phydev) - phy_disconnect(net_dev->phydev); + phylink_disconnect_phy(mac_dev->phylink); net_dev->phydev = NULL; msleep(200); @@ -833,10 +843,10 @@ static int dpaa_eth_cgr_init(struct dpaa_priv *priv) /* Set different thresholds based on the configured MAC speed. * This may turn suboptimal if the MAC is reconfigured at another - * speed, so MACs must call dpaa_eth_cgr_set_speed in their adjust_link + * speed, so MACs must call dpaa_eth_cgr_set_speed in their link_up * callback. */ - if (priv->mac_dev->if_support & SUPPORTED_10000baseT_Full) + if (priv->mac_dev->phylink_config.mac_capabilities & MAC_10000FD) cs_th = DPAA_CS_THRESHOLD_10G; else cs_th = DPAA_CS_THRESHOLD_1G; @@ -865,7 +875,7 @@ static int dpaa_eth_cgr_init(struct dpaa_priv *priv) static void dpaa_eth_cgr_set_speed(struct mac_device *mac_dev, int speed) { - struct net_device *net_dev = mac_dev->net_dev; + struct net_device *net_dev = to_net_dev(mac_dev->phylink_config.dev); struct dpaa_priv *priv = netdev_priv(net_dev); struct qm_mcc_initcgr opts = { }; u32 cs_th; @@ -2904,58 +2914,6 @@ static void dpaa_eth_napi_disable(struct dpaa_priv *priv) } } -static void dpaa_adjust_link(struct net_device *net_dev) -{ - struct mac_device *mac_dev; - struct dpaa_priv *priv; - - priv = netdev_priv(net_dev); - mac_dev = priv->mac_dev; - mac_dev->adjust_link(mac_dev); -} - -/* The Aquantia PHYs are capable of performing rate adaptation */ -#define PHY_VEND_AQUANTIA 0x03a1b400 -#define PHY_VEND_AQUANTIA2 0x31c31c00 - -static int dpaa_phy_init(struct net_device *net_dev) -{ - __ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, }; - struct mac_device *mac_dev; - struct phy_device *phy_dev; - struct dpaa_priv *priv; - u32 phy_vendor; - - priv = netdev_priv(net_dev); - mac_dev = priv->mac_dev; - - phy_dev = of_phy_connect(net_dev, mac_dev->phy_node, - &dpaa_adjust_link, 0, - mac_dev->phy_if); - if (!phy_dev) { - netif_err(priv, ifup, net_dev, "init_phy() failed\n"); - return -ENODEV; - } - - phy_vendor = phy_dev->drv->phy_id & GENMASK(31, 10); - /* Unless the PHY is capable of rate adaptation */ - if (mac_dev->phy_if != PHY_INTERFACE_MODE_XGMII || - (phy_vendor != PHY_VEND_AQUANTIA && - phy_vendor != PHY_VEND_AQUANTIA2)) { - /* remove any features not supported by the controller */ - ethtool_convert_legacy_u32_to_link_mode(mask, - mac_dev->if_support); - linkmode_and(phy_dev->supported, phy_dev->supported, mask); - } - - phy_support_asym_pause(phy_dev); - - mac_dev->phy_dev = phy_dev; - net_dev->phydev = phy_dev; - - return 0; -} - static int dpaa_open(struct net_device *net_dev) { struct mac_device *mac_dev; @@ -2966,7 +2924,8 @@ static int dpaa_open(struct net_device *net_dev) mac_dev = priv->mac_dev; dpaa_eth_napi_enable(priv); - err = dpaa_phy_init(net_dev); + err = phylink_of_phy_connect(mac_dev->phylink, + mac_dev->dev->of_node, 0); if (err) goto phy_init_failed; @@ -2981,7 +2940,7 @@ static int dpaa_open(struct net_device *net_dev) netif_err(priv, ifup, net_dev, "mac_dev->enable() = %d\n", err); goto mac_start_failed; } - phy_start(priv->mac_dev->phy_dev); + phylink_start(mac_dev->phylink); netif_tx_start_all_queues(net_dev); @@ -2990,6 +2949,7 @@ static int dpaa_open(struct net_device *net_dev) mac_start_failed: for (i = 0; i < ARRAY_SIZE(mac_dev->port); i++) fman_port_disable(mac_dev->port[i]); + phylink_disconnect_phy(mac_dev->phylink); phy_init_failed: dpaa_eth_napi_disable(priv); @@ -3145,10 +3105,12 @@ static int dpaa_ts_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) static int dpaa_ioctl(struct net_device *net_dev, struct ifreq *rq, int cmd) { int ret = -EINVAL; + struct dpaa_priv *priv = netdev_priv(net_dev); if (cmd == SIOCGMIIREG) { if (net_dev->phydev) - return phy_mii_ioctl(net_dev->phydev, rq, cmd); + return phylink_mii_ioctl(priv->mac_dev->phylink, rq, + cmd); } if (cmd == SIOCSHWTSTAMP) @@ -3551,6 +3513,7 @@ static int dpaa_remove(struct platform_device *pdev) dev_set_drvdata(dev, NULL); unregister_netdev(net_dev); + phylink_destroy(priv->mac_dev->phylink); err = dpaa_fq_free(dev, &priv->dpaa_fq_list); diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c b/drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c index 769e936a263c..9c71cbbb13d8 100644 --- a/drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c +++ b/drivers/net/ethernet/freescale/dpaa/dpaa_ethtool.c @@ -54,27 +54,19 @@ static char dpaa_stats_global[][ETH_GSTRING_LEN] = { static int dpaa_get_link_ksettings(struct net_device *net_dev, struct ethtool_link_ksettings *cmd) { - if (!net_dev->phydev) - return 0; + struct dpaa_priv *priv = netdev_priv(net_dev); + struct mac_device *mac_dev = priv->mac_dev; - phy_ethtool_ksettings_get(net_dev->phydev, cmd); - - return 0; + return phylink_ethtool_ksettings_get(mac_dev->phylink, cmd); } static int dpaa_set_link_ksettings(struct net_device *net_dev, const struct ethtool_link_ksettings *cmd) { - int err; + struct dpaa_priv *priv = netdev_priv(net_dev); + struct mac_device *mac_dev = priv->mac_dev; - if (!net_dev->phydev) - return -ENODEV; - - err = phy_ethtool_ksettings_set(net_dev->phydev, cmd); - if (err < 0) - netdev_err(net_dev, "phy_ethtool_ksettings_set() = %d\n", err); - - return err; + return phylink_ethtool_ksettings_set(mac_dev->phylink, cmd); } static void dpaa_get_drvinfo(struct net_device *net_dev, @@ -99,80 +91,28 @@ static void dpaa_set_msglevel(struct net_device *net_dev, static int dpaa_nway_reset(struct net_device *net_dev) { - int err; + struct dpaa_priv *priv = netdev_priv(net_dev); + struct mac_device *mac_dev = priv->mac_dev; - if (!net_dev->phydev) - return -ENODEV; - - err = 0; - if (net_dev->phydev->autoneg) { - err = phy_start_aneg(net_dev->phydev); - if (err < 0) - netdev_err(net_dev, "phy_start_aneg() = %d\n", - err); - } - - return err; + return phylink_ethtool_nway_reset(mac_dev->phylink); } static void dpaa_get_pauseparam(struct net_device *net_dev, struct ethtool_pauseparam *epause) { - struct mac_device *mac_dev; - struct dpaa_priv *priv; + struct dpaa_priv *priv = netdev_priv(net_dev); + struct mac_device *mac_dev = priv->mac_dev; - priv = netdev_priv(net_dev); - mac_dev = priv->mac_dev; - - if (!net_dev->phydev) - return; - - epause->autoneg = mac_dev->autoneg_pause; - epause->rx_pause = mac_dev->rx_pause_active; - epause->tx_pause = mac_dev->tx_pause_active; + phylink_ethtool_get_pauseparam(mac_dev->phylink, epause); } static int dpaa_set_pauseparam(struct net_device *net_dev, struct ethtool_pauseparam *epause) { - struct mac_device *mac_dev; - struct phy_device *phydev; - bool rx_pause, tx_pause; - struct dpaa_priv *priv; - int err; + struct dpaa_priv *priv = netdev_priv(net_dev); + struct mac_device *mac_dev = priv->mac_dev; - priv = netdev_priv(net_dev); - mac_dev = priv->mac_dev; - - phydev = net_dev->phydev; - if (!phydev) { - netdev_err(net_dev, "phy device not initialized\n"); - return -ENODEV; - } - - if (!phy_validate_pause(phydev, epause)) - return -EINVAL; - - /* The MAC should know how to handle PAUSE frame autonegotiation before - * adjust_link is triggered by a forced renegotiation of sym/asym PAUSE - * settings. - */ - mac_dev->autoneg_pause = !!epause->autoneg; - mac_dev->rx_pause_req = !!epause->rx_pause; - mac_dev->tx_pause_req = !!epause->tx_pause; - - /* Determine the sym/asym advertised PAUSE capabilities from the desired - * rx/tx pause settings. - */ - - phy_set_asym_pause(phydev, epause->rx_pause, epause->tx_pause); - - fman_get_pause_cfg(mac_dev, &rx_pause, &tx_pause); - err = fman_set_mac_active_pause(mac_dev, rx_pause, tx_pause); - if (err < 0) - netdev_err(net_dev, "set_mac_active_pause() = %d\n", err); - - return err; + return phylink_ethtool_set_pauseparam(mac_dev->phylink, epause); } static int dpaa_get_sset_count(struct net_device *net_dev, int type) diff --git a/drivers/net/ethernet/freescale/fman/Kconfig b/drivers/net/ethernet/freescale/fman/Kconfig index 8f5637db41dd..e76a3d262b2b 100644 --- a/drivers/net/ethernet/freescale/fman/Kconfig +++ b/drivers/net/ethernet/freescale/fman/Kconfig @@ -3,7 +3,6 @@ config FSL_FMAN tristate "FMan support" depends on FSL_SOC || ARCH_LAYERSCAPE || COMPILE_TEST select GENERIC_ALLOCATOR - select PHYLIB select PHYLINK select PCS select PCS_LYNX diff --git a/drivers/net/ethernet/freescale/fman/fman_dtsec.c b/drivers/net/ethernet/freescale/fman/fman_dtsec.c index 6617932fd3fd..3c87820ca202 100644 --- a/drivers/net/ethernet/freescale/fman/fman_dtsec.c +++ b/drivers/net/ethernet/freescale/fman/fman_dtsec.c @@ -17,6 +17,7 @@ #include #include #include +#include /* TBI register addresses */ #define MII_TBICON 0x11 @@ -29,9 +30,6 @@ #define TBICON_CLK_SELECT 0x0020 /* Clock select */ #define TBICON_MI_MODE 0x0010 /* GMII mode (TBI if not set) */ -#define TBIANA_SGMII 0x4001 -#define TBIANA_1000X 0x01a0 - /* Interrupt Mask Register (IMASK) */ #define DTSEC_IMASK_BREN 0x80000000 #define DTSEC_IMASK_RXCEN 0x40000000 @@ -92,9 +90,10 @@ #define DTSEC_ECNTRL_GMIIM 0x00000040 #define DTSEC_ECNTRL_TBIM 0x00000020 -#define DTSEC_ECNTRL_SGMIIM 0x00000002 #define DTSEC_ECNTRL_RPM 0x00000010 #define DTSEC_ECNTRL_R100M 0x00000008 +#define DTSEC_ECNTRL_RMM 0x00000004 +#define DTSEC_ECNTRL_SGMIIM 0x00000002 #define DTSEC_ECNTRL_QSGMIIM 0x00000001 #define TCTRL_TTSE 0x00000040 @@ -318,7 +317,8 @@ struct fman_mac { void *fm; struct fman_rev_info fm_rev_info; bool basex_if; - struct phy_device *tbiphy; + struct mdio_device *tbidev; + struct phylink_pcs pcs; }; static void set_dflts(struct dtsec_cfg *cfg) @@ -356,56 +356,14 @@ static int init(struct dtsec_regs __iomem *regs, struct dtsec_cfg *cfg, phy_interface_t iface, u16 iface_speed, u64 addr, u32 exception_mask, u8 tbi_addr) { - bool is_rgmii, is_sgmii, is_qsgmii; enet_addr_t eth_addr; - u32 tmp; + u32 tmp = 0; int i; /* Soft reset */ iowrite32be(MACCFG1_SOFT_RESET, ®s->maccfg1); iowrite32be(0, ®s->maccfg1); - /* dtsec_id2 */ - tmp = ioread32be(®s->tsec_id2); - - /* check RGMII support */ - if (iface == PHY_INTERFACE_MODE_RGMII || - iface == PHY_INTERFACE_MODE_RGMII_ID || - iface == PHY_INTERFACE_MODE_RGMII_RXID || - iface == PHY_INTERFACE_MODE_RGMII_TXID || - iface == PHY_INTERFACE_MODE_RMII) - if (tmp & DTSEC_ID2_INT_REDUCED_OFF) - return -EINVAL; - - if (iface == PHY_INTERFACE_MODE_SGMII || - iface == PHY_INTERFACE_MODE_MII) - if (tmp & DTSEC_ID2_INT_REDUCED_OFF) - return -EINVAL; - - is_rgmii = iface == PHY_INTERFACE_MODE_RGMII || - iface == PHY_INTERFACE_MODE_RGMII_ID || - iface == PHY_INTERFACE_MODE_RGMII_RXID || - iface == PHY_INTERFACE_MODE_RGMII_TXID; - is_sgmii = iface == PHY_INTERFACE_MODE_SGMII; - is_qsgmii = iface == PHY_INTERFACE_MODE_QSGMII; - - tmp = 0; - if (is_rgmii || iface == PHY_INTERFACE_MODE_GMII) - tmp |= DTSEC_ECNTRL_GMIIM; - if (is_sgmii) - tmp |= (DTSEC_ECNTRL_SGMIIM | DTSEC_ECNTRL_TBIM); - if (is_qsgmii) - tmp |= (DTSEC_ECNTRL_SGMIIM | DTSEC_ECNTRL_TBIM | - DTSEC_ECNTRL_QSGMIIM); - if (is_rgmii) - tmp |= DTSEC_ECNTRL_RPM; - if (iface_speed == SPEED_100) - tmp |= DTSEC_ECNTRL_R100M; - - iowrite32be(tmp, ®s->ecntrl); - - tmp = 0; - if (cfg->tx_pause_time) tmp |= cfg->tx_pause_time; if (cfg->tx_pause_time_extd) @@ -446,17 +404,10 @@ static int init(struct dtsec_regs __iomem *regs, struct dtsec_cfg *cfg, tmp = 0; - if (iface_speed < SPEED_1000) - tmp |= MACCFG2_NIBBLE_MODE; - else if (iface_speed == SPEED_1000) - tmp |= MACCFG2_BYTE_MODE; - tmp |= (cfg->preamble_len << MACCFG2_PREAMBLE_LENGTH_SHIFT) & MACCFG2_PREAMBLE_LENGTH_MASK; if (cfg->tx_pad_crc) tmp |= MACCFG2_PAD_CRC_EN; - /* Full Duplex */ - tmp |= MACCFG2_FULL_DUPLEX; iowrite32be(tmp, ®s->maccfg2); tmp = (((cfg->non_back_to_back_ipg1 << @@ -525,10 +476,6 @@ static void set_bucket(struct dtsec_regs __iomem *regs, int bucket, static int check_init_parameters(struct fman_mac *dtsec) { - if (dtsec->max_speed >= SPEED_10000) { - pr_err("1G MAC driver supports 1G or lower speeds\n"); - return -EINVAL; - } if ((dtsec->dtsec_drv_param)->rx_prepend > MAX_PACKET_ALIGNMENT) { pr_err("packetAlignmentPadding can't be > than %d\n", @@ -630,22 +577,10 @@ static int get_exception_flag(enum fman_mac_exceptions exception) return bit_mask; } -static bool is_init_done(struct dtsec_cfg *dtsec_drv_params) -{ - /* Checks if dTSEC driver parameters were initialized */ - if (!dtsec_drv_params) - return true; - - return false; -} - static u16 dtsec_get_max_frame_length(struct fman_mac *dtsec) { struct dtsec_regs __iomem *regs = dtsec->regs; - if (is_init_done(dtsec->dtsec_drv_param)) - return 0; - return (u16)ioread32be(®s->maxfrm); } @@ -682,6 +617,7 @@ static void dtsec_isr(void *handle) dtsec->exception_cb(dtsec->dev_id, FM_MAC_EX_1G_COL_RET_LMT); if (event & DTSEC_IMASK_XFUNEN) { /* FM_TX_LOCKUP_ERRATA_DTSEC6 Errata workaround */ + /* FIXME: This races with the rest of the driver! */ if (dtsec->fm_rev_info.major == 2) { u32 tpkt1, tmp_reg1, tpkt2, tmp_reg2, i; /* a. Write 0x00E0_0C00 to DTSEC_ID @@ -814,6 +750,43 @@ static void free_init_resources(struct fman_mac *dtsec) dtsec->unicast_addr_hash = NULL; } +static struct fman_mac *pcs_to_dtsec(struct phylink_pcs *pcs) +{ + return container_of(pcs, struct fman_mac, pcs); +} + +static void dtsec_pcs_get_state(struct phylink_pcs *pcs, + struct phylink_link_state *state) +{ + struct fman_mac *dtsec = pcs_to_dtsec(pcs); + + phylink_mii_c22_pcs_get_state(dtsec->tbidev, state); +} + +static int dtsec_pcs_config(struct phylink_pcs *pcs, unsigned int mode, + phy_interface_t interface, + const unsigned long *advertising, + bool permit_pause_to_mac) +{ + struct fman_mac *dtsec = pcs_to_dtsec(pcs); + + return phylink_mii_c22_pcs_config(dtsec->tbidev, mode, interface, + advertising); +} + +static void dtsec_pcs_an_restart(struct phylink_pcs *pcs) +{ + struct fman_mac *dtsec = pcs_to_dtsec(pcs); + + phylink_mii_c22_pcs_an_restart(dtsec->tbidev); +} + +static const struct phylink_pcs_ops dtsec_pcs_ops = { + .pcs_get_state = dtsec_pcs_get_state, + .pcs_config = dtsec_pcs_config, + .pcs_an_restart = dtsec_pcs_an_restart, +}; + static void graceful_start(struct fman_mac *dtsec) { struct dtsec_regs __iomem *regs = dtsec->regs; @@ -854,36 +827,11 @@ static void graceful_stop(struct fman_mac *dtsec) static int dtsec_enable(struct fman_mac *dtsec) { - struct dtsec_regs __iomem *regs = dtsec->regs; - u32 tmp; - - if (!is_init_done(dtsec->dtsec_drv_param)) - return -EINVAL; - - /* Enable */ - tmp = ioread32be(®s->maccfg1); - tmp |= MACCFG1_RX_EN | MACCFG1_TX_EN; - iowrite32be(tmp, ®s->maccfg1); - - /* Graceful start - clear the graceful Rx/Tx stop bit */ - graceful_start(dtsec); - return 0; } static void dtsec_disable(struct fman_mac *dtsec) { - struct dtsec_regs __iomem *regs = dtsec->regs; - u32 tmp; - - WARN_ON_ONCE(!is_init_done(dtsec->dtsec_drv_param)); - - /* Graceful stop - Assert the graceful Rx/Tx stop bit */ - graceful_stop(dtsec); - - tmp = ioread32be(®s->maccfg1); - tmp &= ~(MACCFG1_RX_EN | MACCFG1_TX_EN); - iowrite32be(tmp, ®s->maccfg1); } static int dtsec_set_tx_pause_frames(struct fman_mac *dtsec, @@ -894,11 +842,6 @@ static int dtsec_set_tx_pause_frames(struct fman_mac *dtsec, struct dtsec_regs __iomem *regs = dtsec->regs; u32 ptv = 0; - if (!is_init_done(dtsec->dtsec_drv_param)) - return -EINVAL; - - graceful_stop(dtsec); - if (pause_time) { /* FM_BAD_TX_TS_IN_B_2_B_ERRATA_DTSEC_A003 Errata workaround */ if (dtsec->fm_rev_info.major == 2 && pause_time <= 320) { @@ -919,8 +862,6 @@ static int dtsec_set_tx_pause_frames(struct fman_mac *dtsec, iowrite32be(ioread32be(®s->maccfg1) & ~MACCFG1_TX_FLOW, ®s->maccfg1); - graceful_start(dtsec); - return 0; } @@ -929,11 +870,6 @@ static int dtsec_accept_rx_pause_frames(struct fman_mac *dtsec, bool en) struct dtsec_regs __iomem *regs = dtsec->regs; u32 tmp; - if (!is_init_done(dtsec->dtsec_drv_param)) - return -EINVAL; - - graceful_stop(dtsec); - tmp = ioread32be(®s->maccfg1); if (en) tmp |= MACCFG1_RX_FLOW; @@ -941,17 +877,125 @@ static int dtsec_accept_rx_pause_frames(struct fman_mac *dtsec, bool en) tmp &= ~MACCFG1_RX_FLOW; iowrite32be(tmp, ®s->maccfg1); - graceful_start(dtsec); - return 0; } +static struct phylink_pcs *dtsec_select_pcs(struct phylink_config *config, + phy_interface_t iface) +{ + struct fman_mac *dtsec = fman_config_to_mac(config)->fman_mac; + + switch (iface) { + case PHY_INTERFACE_MODE_SGMII: + case PHY_INTERFACE_MODE_1000BASEX: + case PHY_INTERFACE_MODE_2500BASEX: + return &dtsec->pcs; + default: + return NULL; + } +} + +static void dtsec_mac_config(struct phylink_config *config, unsigned int mode, + const struct phylink_link_state *state) +{ + struct mac_device *mac_dev = fman_config_to_mac(config); + struct dtsec_regs __iomem *regs = mac_dev->fman_mac->regs; + u32 tmp; + + switch (state->interface) { + case PHY_INTERFACE_MODE_RMII: + tmp = DTSEC_ECNTRL_RMM; + break; + case PHY_INTERFACE_MODE_RGMII: + case PHY_INTERFACE_MODE_RGMII_ID: + case PHY_INTERFACE_MODE_RGMII_RXID: + case PHY_INTERFACE_MODE_RGMII_TXID: + tmp = DTSEC_ECNTRL_GMIIM | DTSEC_ECNTRL_RPM; + break; + case PHY_INTERFACE_MODE_SGMII: + case PHY_INTERFACE_MODE_1000BASEX: + case PHY_INTERFACE_MODE_2500BASEX: + tmp = DTSEC_ECNTRL_TBIM | DTSEC_ECNTRL_SGMIIM; + break; + default: + dev_warn(mac_dev->dev, "cannot configure dTSEC for %s\n", + phy_modes(state->interface)); + return; + } + + iowrite32be(tmp, ®s->ecntrl); +} + +static void dtsec_link_up(struct phylink_config *config, struct phy_device *phy, + unsigned int mode, phy_interface_t interface, + int speed, int duplex, bool tx_pause, bool rx_pause) +{ + struct mac_device *mac_dev = fman_config_to_mac(config); + struct fman_mac *dtsec = mac_dev->fman_mac; + struct dtsec_regs __iomem *regs = dtsec->regs; + u16 pause_time = tx_pause ? FSL_FM_PAUSE_TIME_ENABLE : + FSL_FM_PAUSE_TIME_DISABLE; + u32 tmp; + + dtsec_set_tx_pause_frames(dtsec, 0, pause_time, 0); + dtsec_accept_rx_pause_frames(dtsec, rx_pause); + + tmp = ioread32be(®s->ecntrl); + if (speed == SPEED_100) + tmp |= DTSEC_ECNTRL_R100M; + else + tmp &= ~DTSEC_ECNTRL_R100M; + iowrite32be(tmp, ®s->ecntrl); + + tmp = ioread32be(®s->maccfg2); + tmp &= ~(MACCFG2_NIBBLE_MODE | MACCFG2_BYTE_MODE | MACCFG2_FULL_DUPLEX); + if (speed >= SPEED_1000) + tmp |= MACCFG2_BYTE_MODE; + else + tmp |= MACCFG2_NIBBLE_MODE; + + if (duplex == DUPLEX_FULL) + tmp |= MACCFG2_FULL_DUPLEX; + + iowrite32be(tmp, ®s->maccfg2); + + mac_dev->update_speed(mac_dev, speed); + + /* Enable */ + tmp = ioread32be(®s->maccfg1); + tmp |= MACCFG1_RX_EN | MACCFG1_TX_EN; + iowrite32be(tmp, ®s->maccfg1); + + /* Graceful start - clear the graceful Rx/Tx stop bit */ + graceful_start(dtsec); +} + +static void dtsec_link_down(struct phylink_config *config, unsigned int mode, + phy_interface_t interface) +{ + struct fman_mac *dtsec = fman_config_to_mac(config)->fman_mac; + struct dtsec_regs __iomem *regs = dtsec->regs; + u32 tmp; + + /* Graceful stop - Assert the graceful Rx/Tx stop bit */ + graceful_stop(dtsec); + + tmp = ioread32be(®s->maccfg1); + tmp &= ~(MACCFG1_RX_EN | MACCFG1_TX_EN); + iowrite32be(tmp, ®s->maccfg1); +} + +static const struct phylink_mac_ops dtsec_mac_ops = { + .validate = phylink_generic_validate, + .mac_select_pcs = dtsec_select_pcs, + .mac_config = dtsec_mac_config, + .mac_link_up = dtsec_link_up, + .mac_link_down = dtsec_link_down, +}; + static int dtsec_modify_mac_address(struct fman_mac *dtsec, const enet_addr_t *enet_addr) { - if (!is_init_done(dtsec->dtsec_drv_param)) - return -EINVAL; - graceful_stop(dtsec); /* Initialize MAC Station Address registers (1 & 2) @@ -975,9 +1019,6 @@ static int dtsec_add_hash_mac_address(struct fman_mac *dtsec, u32 crc = 0xFFFFFFFF; bool mcast, ghtx; - if (!is_init_done(dtsec->dtsec_drv_param)) - return -EINVAL; - addr = ENET_ADDR_TO_UINT64(*eth_addr); ghtx = (bool)((ioread32be(®s->rctrl) & RCTRL_GHTX) ? true : false); @@ -1037,9 +1078,6 @@ static int dtsec_set_allmulti(struct fman_mac *dtsec, bool enable) u32 tmp; struct dtsec_regs __iomem *regs = dtsec->regs; - if (!is_init_done(dtsec->dtsec_drv_param)) - return -EINVAL; - tmp = ioread32be(®s->rctrl); if (enable) tmp |= RCTRL_MPROM; @@ -1056,9 +1094,6 @@ static int dtsec_set_tstamp(struct fman_mac *dtsec, bool enable) struct dtsec_regs __iomem *regs = dtsec->regs; u32 rctrl, tctrl; - if (!is_init_done(dtsec->dtsec_drv_param)) - return -EINVAL; - rctrl = ioread32be(®s->rctrl); tctrl = ioread32be(®s->tctrl); @@ -1087,9 +1122,6 @@ static int dtsec_del_hash_mac_address(struct fman_mac *dtsec, u32 crc = 0xFFFFFFFF; bool mcast, ghtx; - if (!is_init_done(dtsec->dtsec_drv_param)) - return -EINVAL; - addr = ENET_ADDR_TO_UINT64(*eth_addr); ghtx = (bool)((ioread32be(®s->rctrl) & RCTRL_GHTX) ? true : false); @@ -1153,9 +1185,6 @@ static int dtsec_set_promiscuous(struct fman_mac *dtsec, bool new_val) struct dtsec_regs __iomem *regs = dtsec->regs; u32 tmp; - if (!is_init_done(dtsec->dtsec_drv_param)) - return -EINVAL; - /* Set unicast promiscuous */ tmp = ioread32be(®s->rctrl); if (new_val) @@ -1177,90 +1206,12 @@ static int dtsec_set_promiscuous(struct fman_mac *dtsec, bool new_val) return 0; } -static int dtsec_adjust_link(struct fman_mac *dtsec, u16 speed) -{ - struct dtsec_regs __iomem *regs = dtsec->regs; - u32 tmp; - - if (!is_init_done(dtsec->dtsec_drv_param)) - return -EINVAL; - - graceful_stop(dtsec); - - tmp = ioread32be(®s->maccfg2); - - /* Full Duplex */ - tmp |= MACCFG2_FULL_DUPLEX; - - tmp &= ~(MACCFG2_NIBBLE_MODE | MACCFG2_BYTE_MODE); - if (speed < SPEED_1000) - tmp |= MACCFG2_NIBBLE_MODE; - else if (speed == SPEED_1000) - tmp |= MACCFG2_BYTE_MODE; - iowrite32be(tmp, ®s->maccfg2); - - tmp = ioread32be(®s->ecntrl); - if (speed == SPEED_100) - tmp |= DTSEC_ECNTRL_R100M; - else - tmp &= ~DTSEC_ECNTRL_R100M; - iowrite32be(tmp, ®s->ecntrl); - - graceful_start(dtsec); - - return 0; -} - -static int dtsec_restart_autoneg(struct fman_mac *dtsec) -{ - u16 tmp_reg16; - - if (!is_init_done(dtsec->dtsec_drv_param)) - return -EINVAL; - - tmp_reg16 = phy_read(dtsec->tbiphy, MII_BMCR); - - tmp_reg16 &= ~(BMCR_SPEED100 | BMCR_SPEED1000); - tmp_reg16 |= (BMCR_ANENABLE | BMCR_ANRESTART | - BMCR_FULLDPLX | BMCR_SPEED1000); - - phy_write(dtsec->tbiphy, MII_BMCR, tmp_reg16); - - return 0; -} - -static void adjust_link_dtsec(struct mac_device *mac_dev) -{ - struct phy_device *phy_dev = mac_dev->phy_dev; - struct fman_mac *fman_mac; - bool rx_pause, tx_pause; - int err; - - fman_mac = mac_dev->fman_mac; - if (!phy_dev->link) { - dtsec_restart_autoneg(fman_mac); - - return; - } - - dtsec_adjust_link(fman_mac, phy_dev->speed); - mac_dev->update_speed(mac_dev, phy_dev->speed); - fman_get_pause_cfg(mac_dev, &rx_pause, &tx_pause); - err = fman_set_mac_active_pause(mac_dev, rx_pause, tx_pause); - if (err < 0) - dev_err(mac_dev->dev, "fman_set_mac_active_pause() = %d\n", - err); -} - static int dtsec_set_exception(struct fman_mac *dtsec, enum fman_mac_exceptions exception, bool enable) { struct dtsec_regs __iomem *regs = dtsec->regs; u32 bit_mask = 0; - if (!is_init_done(dtsec->dtsec_drv_param)) - return -EINVAL; - if (exception != FM_MAC_EX_1G_1588_TS_RX_ERR) { bit_mask = get_exception_flag(exception); if (bit_mask) { @@ -1310,12 +1261,9 @@ static int dtsec_init(struct fman_mac *dtsec) { struct dtsec_regs __iomem *regs = dtsec->regs; struct dtsec_cfg *dtsec_drv_param; - u16 max_frm_ln; + u16 max_frm_ln, tbicon; int err; - if (is_init_done(dtsec->dtsec_drv_param)) - return -EINVAL; - if (DEFAULT_RESET_ON_INIT && (fman_reset_mac(dtsec->fm, dtsec->mac_id) != 0)) { pr_err("Can't reset MAC!\n"); @@ -1330,38 +1278,19 @@ static int dtsec_init(struct fman_mac *dtsec) err = init(dtsec->regs, dtsec_drv_param, dtsec->phy_if, dtsec->max_speed, dtsec->addr, dtsec->exceptions, - dtsec->tbiphy->mdio.addr); + dtsec->tbidev->addr); if (err) { free_init_resources(dtsec); pr_err("DTSEC version doesn't support this i/f mode\n"); return err; } - if (dtsec->phy_if == PHY_INTERFACE_MODE_SGMII) { - u16 tmp_reg16; + /* Configure the TBI PHY Control Register */ + tbicon = TBICON_CLK_SELECT | TBICON_SOFT_RESET; + mdiodev_write(dtsec->tbidev, MII_TBICON, tbicon); - /* Configure the TBI PHY Control Register */ - tmp_reg16 = TBICON_CLK_SELECT | TBICON_SOFT_RESET; - phy_write(dtsec->tbiphy, MII_TBICON, tmp_reg16); - - tmp_reg16 = TBICON_CLK_SELECT; - phy_write(dtsec->tbiphy, MII_TBICON, tmp_reg16); - - tmp_reg16 = (BMCR_RESET | BMCR_ANENABLE | - BMCR_FULLDPLX | BMCR_SPEED1000); - phy_write(dtsec->tbiphy, MII_BMCR, tmp_reg16); - - if (dtsec->basex_if) - tmp_reg16 = TBIANA_1000X; - else - tmp_reg16 = TBIANA_SGMII; - phy_write(dtsec->tbiphy, MII_ADVERTISE, tmp_reg16); - - tmp_reg16 = (BMCR_ANENABLE | BMCR_ANRESTART | - BMCR_FULLDPLX | BMCR_SPEED1000); - - phy_write(dtsec->tbiphy, MII_BMCR, tmp_reg16); - } + tbicon = TBICON_CLK_SELECT; + mdiodev_write(dtsec->tbidev, MII_TBICON, tbicon); /* Max Frame Length */ max_frm_ln = (u16)ioread32be(®s->maxfrm); @@ -1406,6 +1335,8 @@ static int dtsec_free(struct fman_mac *dtsec) kfree(dtsec->dtsec_drv_param); dtsec->dtsec_drv_param = NULL; + if (!IS_ERR_OR_NULL(dtsec->tbidev)) + put_device(&dtsec->tbidev->dev); kfree(dtsec); return 0; @@ -1434,7 +1365,6 @@ static struct fman_mac *dtsec_config(struct mac_device *mac_dev, dtsec->regs = mac_dev->vaddr; dtsec->addr = ENET_ADDR_TO_UINT64(mac_dev->addr); - dtsec->max_speed = params->max_speed; dtsec->phy_if = mac_dev->phy_if; dtsec->mac_id = params->mac_id; dtsec->exceptions = (DTSEC_IMASK_BREN | @@ -1457,7 +1387,6 @@ static struct fman_mac *dtsec_config(struct mac_device *mac_dev, dtsec->en_tsu_err_exception = dtsec->dtsec_drv_param->ptp_exception_en; dtsec->fm = params->fm; - dtsec->basex_if = params->basex_if; /* Save FMan revision */ fman_get_revision(dtsec->fm, &dtsec->fm_rev_info); @@ -1476,18 +1405,18 @@ int dtsec_initialization(struct mac_device *mac_dev, int err; struct fman_mac *dtsec; struct device_node *phy_node; + unsigned long capabilities; + unsigned long *supported; + mac_dev->phylink_ops = &dtsec_mac_ops; mac_dev->set_promisc = dtsec_set_promiscuous; mac_dev->change_addr = dtsec_modify_mac_address; mac_dev->add_hash_mac_addr = dtsec_add_hash_mac_address; mac_dev->remove_hash_mac_addr = dtsec_del_hash_mac_address; - mac_dev->set_tx_pause = dtsec_set_tx_pause_frames; - mac_dev->set_rx_pause = dtsec_accept_rx_pause_frames; mac_dev->set_exception = dtsec_set_exception; mac_dev->set_allmulti = dtsec_set_allmulti; mac_dev->set_tstamp = dtsec_set_tstamp; mac_dev->set_multi = fman_set_multi; - mac_dev->adjust_link = adjust_link_dtsec; mac_dev->enable = dtsec_enable; mac_dev->disable = dtsec_disable; @@ -1502,19 +1431,56 @@ int dtsec_initialization(struct mac_device *mac_dev, dtsec->dtsec_drv_param->tx_pad_crc = true; phy_node = of_parse_phandle(mac_node, "tbi-handle", 0); - if (!phy_node) { - pr_err("TBI PHY node is not available\n"); + if (!phy_node || of_device_is_available(phy_node)) { + of_node_put(phy_node); err = -EINVAL; + dev_err_probe(mac_dev->dev, err, + "TBI PCS node is not available\n"); goto _return_fm_mac_free; } - dtsec->tbiphy = of_phy_find_device(phy_node); - if (!dtsec->tbiphy) { - pr_err("of_phy_find_device (TBI PHY) failed\n"); - err = -EINVAL; + dtsec->tbidev = of_mdio_find_device(phy_node); + of_node_put(phy_node); + if (!dtsec->tbidev) { + err = -EPROBE_DEFER; + dev_err_probe(mac_dev->dev, err, + "could not find mdiodev for PCS\n"); goto _return_fm_mac_free; } - put_device(&dtsec->tbiphy->mdio.dev); + dtsec->pcs.ops = &dtsec_pcs_ops; + dtsec->pcs.poll = true; + + supported = mac_dev->phylink_config.supported_interfaces; + + /* FIXME: Can we use DTSEC_ID2_INT_FULL_OFF to determine if these are + * supported? If not, we can determine support via the phy if SerDes + * support is added. + */ + if (mac_dev->phy_if == PHY_INTERFACE_MODE_SGMII || + mac_dev->phy_if == PHY_INTERFACE_MODE_1000BASEX) { + __set_bit(PHY_INTERFACE_MODE_SGMII, supported); + __set_bit(PHY_INTERFACE_MODE_1000BASEX, supported); + } else if (mac_dev->phy_if == PHY_INTERFACE_MODE_2500BASEX) { + __set_bit(PHY_INTERFACE_MODE_2500BASEX, supported); + } + + if (!(ioread32be(&dtsec->regs->tsec_id2) & DTSEC_ID2_INT_REDUCED_OFF)) { + phy_interface_set_rgmii(supported); + + /* DTSEC_ID2_INT_REDUCED_OFF indicates that the dTSEC supports + * RMII and RGMII. However, the only SoCs which support RMII + * are the P1017 and P1023. Avoid advertising this mode on + * other SoCs. This is a bit of a moot point, since there's no + * in-tree support for ethernet on these platforms... + */ + if (of_machine_is_compatible("fsl,P1023") || + of_machine_is_compatible("fsl,P1023RDB")) + __set_bit(PHY_INTERFACE_MODE_RMII, supported); + } + + capabilities = MAC_SYM_PAUSE | MAC_ASYM_PAUSE; + capabilities |= MAC_10 | MAC_100 | MAC_1000FD | MAC_2500FD; + mac_dev->phylink_config.mac_capabilities = capabilities; err = dtsec_init(dtsec); if (err < 0) diff --git a/drivers/net/ethernet/freescale/fman/fman_mac.h b/drivers/net/ethernet/freescale/fman/fman_mac.h index 65887a3160d7..e5d6cddea731 100644 --- a/drivers/net/ethernet/freescale/fman/fman_mac.h +++ b/drivers/net/ethernet/freescale/fman/fman_mac.h @@ -170,20 +170,10 @@ struct fman_mac_params { * 0 - FM_MAX_NUM_OF_10G_MACS */ u8 mac_id; - /* Note that the speed should indicate the maximum rate that - * this MAC should support rather than the actual speed; - */ - u16 max_speed; /* A handle to the FM object this port related to */ void *fm; fman_mac_exception_cb *event_cb; /* MDIO Events Callback Routine */ fman_mac_exception_cb *exception_cb;/* Exception Callback Routine */ - /* SGMII/QSGII interface with 1000BaseX auto-negotiation between MAC - * and phy or backplane; Note: 1000BaseX auto-negotiation relates only - * to interface between MAC and phy/backplane, SGMII phy can still - * synchronize with far-end phy at 10Mbps, 100Mbps or 1000Mbps - */ - bool basex_if; }; struct eth_hash_t { diff --git a/drivers/net/ethernet/freescale/fman/fman_memac.c b/drivers/net/ethernet/freescale/fman/fman_memac.c index 43584946cae2..9349f841bd06 100644 --- a/drivers/net/ethernet/freescale/fman/fman_memac.c +++ b/drivers/net/ethernet/freescale/fman/fman_memac.c @@ -278,9 +278,6 @@ struct fman_mac { struct memac_regs __iomem *regs; /* MAC address of device */ u64 addr; - /* Ethernet physical interface */ - phy_interface_t phy_if; - u16 max_speed; struct mac_device *dev_id; /* device cookie used by the exception cbs */ fman_mac_exception_cb *exception_cb; fman_mac_exception_cb *event_cb; @@ -293,12 +290,12 @@ struct fman_mac { struct memac_cfg *memac_drv_param; void *fm; struct fman_rev_info fm_rev_info; - bool basex_if; struct phy *serdes; struct phylink_pcs *sgmii_pcs; struct phylink_pcs *qsgmii_pcs; struct phylink_pcs *xfi_pcs; bool allmulti_enabled; + bool rgmii_no_half_duplex; }; static void add_addr_in_paddr(struct memac_regs __iomem *regs, const u8 *adr, @@ -356,7 +353,6 @@ static void set_exception(struct memac_regs __iomem *regs, u32 val, } static int init(struct memac_regs __iomem *regs, struct memac_cfg *cfg, - phy_interface_t phy_if, u16 speed, bool slow_10g_if, u32 exceptions) { u32 tmp; @@ -384,41 +380,6 @@ static int init(struct memac_regs __iomem *regs, struct memac_cfg *cfg, iowrite32be((u32)cfg->pause_quanta, ®s->pause_quanta[0]); iowrite32be((u32)0, ®s->pause_thresh[0]); - /* IF_MODE */ - tmp = 0; - switch (phy_if) { - case PHY_INTERFACE_MODE_XGMII: - tmp |= IF_MODE_10G; - break; - case PHY_INTERFACE_MODE_MII: - tmp |= IF_MODE_MII; - break; - default: - tmp |= IF_MODE_GMII; - if (phy_if == PHY_INTERFACE_MODE_RGMII || - phy_if == PHY_INTERFACE_MODE_RGMII_ID || - phy_if == PHY_INTERFACE_MODE_RGMII_RXID || - phy_if == PHY_INTERFACE_MODE_RGMII_TXID) - tmp |= IF_MODE_RGMII | IF_MODE_RGMII_AUTO; - } - iowrite32be(tmp, ®s->if_mode); - - /* TX_FIFO_SECTIONS */ - tmp = 0; - if (phy_if == PHY_INTERFACE_MODE_XGMII) { - if (slow_10g_if) { - tmp |= (TX_FIFO_SECTIONS_TX_AVAIL_SLOW_10G | - TX_FIFO_SECTIONS_TX_EMPTY_DEFAULT_10G); - } else { - tmp |= (TX_FIFO_SECTIONS_TX_AVAIL_10G | - TX_FIFO_SECTIONS_TX_EMPTY_DEFAULT_10G); - } - } else { - tmp |= (TX_FIFO_SECTIONS_TX_AVAIL_1G | - TX_FIFO_SECTIONS_TX_EMPTY_DEFAULT_1G); - } - iowrite32be(tmp, ®s->tx_fifo_sections); - /* clear all pending events and set-up interrupts */ iowrite32be(0xffffffff, ®s->ievent); set_exception(regs, exceptions, true); @@ -458,24 +419,6 @@ static u32 get_mac_addr_hash_code(u64 eth_addr) return xor_val; } -static void setup_sgmii_internal(struct fman_mac *memac, - struct phylink_pcs *pcs, - struct fixed_phy_status *fixed_link) -{ - __ETHTOOL_DECLARE_LINK_MODE_MASK(advertising); - phy_interface_t iface = memac->basex_if ? PHY_INTERFACE_MODE_1000BASEX : - PHY_INTERFACE_MODE_SGMII; - unsigned int mode = fixed_link ? MLO_AN_FIXED : MLO_AN_INBAND; - - linkmode_set_pause(advertising, true, true); - pcs->ops->pcs_config(pcs, mode, iface, advertising, true); - if (fixed_link) - pcs->ops->pcs_link_up(pcs, mode, iface, fixed_link->speed, - fixed_link->duplex); - else - pcs->ops->pcs_an_restart(pcs); -} - static int check_init_parameters(struct fman_mac *memac) { if (!memac->exception_cb) { @@ -581,41 +524,31 @@ static void free_init_resources(struct fman_mac *memac) memac->unicast_addr_hash = NULL; } -static bool is_init_done(struct memac_cfg *memac_drv_params) -{ - /* Checks if mEMAC driver parameters were initialized */ - if (!memac_drv_params) - return true; - - return false; -} - static int memac_enable(struct fman_mac *memac) { - struct memac_regs __iomem *regs = memac->regs; - u32 tmp; + int ret; - if (!is_init_done(memac->memac_drv_param)) - return -EINVAL; + ret = phy_init(memac->serdes); + if (ret) { + dev_err(memac->dev_id->dev, + "could not initialize serdes: %pe\n", ERR_PTR(ret)); + return ret; + } - tmp = ioread32be(®s->command_config); - tmp |= CMD_CFG_RX_EN | CMD_CFG_TX_EN; - iowrite32be(tmp, ®s->command_config); + ret = phy_power_on(memac->serdes); + if (ret) { + dev_err(memac->dev_id->dev, + "could not power on serdes: %pe\n", ERR_PTR(ret)); + phy_exit(memac->serdes); + } - return 0; + return ret; } static void memac_disable(struct fman_mac *memac) - { - struct memac_regs __iomem *regs = memac->regs; - u32 tmp; - - WARN_ON_ONCE(!is_init_done(memac->memac_drv_param)); - - tmp = ioread32be(®s->command_config); - tmp &= ~(CMD_CFG_RX_EN | CMD_CFG_TX_EN); - iowrite32be(tmp, ®s->command_config); + phy_power_off(memac->serdes); + phy_exit(memac->serdes); } static int memac_set_promiscuous(struct fman_mac *memac, bool new_val) @@ -623,9 +556,6 @@ static int memac_set_promiscuous(struct fman_mac *memac, bool new_val) struct memac_regs __iomem *regs = memac->regs; u32 tmp; - if (!is_init_done(memac->memac_drv_param)) - return -EINVAL; - tmp = ioread32be(®s->command_config); if (new_val) tmp |= CMD_CFG_PROMIS_EN; @@ -637,73 +567,12 @@ static int memac_set_promiscuous(struct fman_mac *memac, bool new_val) return 0; } -static int memac_adjust_link(struct fman_mac *memac, u16 speed) -{ - struct memac_regs __iomem *regs = memac->regs; - u32 tmp; - - if (!is_init_done(memac->memac_drv_param)) - return -EINVAL; - - tmp = ioread32be(®s->if_mode); - - /* Set full duplex */ - tmp &= ~IF_MODE_HD; - - if (phy_interface_mode_is_rgmii(memac->phy_if)) { - /* Configure RGMII in manual mode */ - tmp &= ~IF_MODE_RGMII_AUTO; - tmp &= ~IF_MODE_RGMII_SP_MASK; - /* Full duplex */ - tmp |= IF_MODE_RGMII_FD; - - switch (speed) { - case SPEED_1000: - tmp |= IF_MODE_RGMII_1000; - break; - case SPEED_100: - tmp |= IF_MODE_RGMII_100; - break; - case SPEED_10: - tmp |= IF_MODE_RGMII_10; - break; - default: - break; - } - } - - iowrite32be(tmp, ®s->if_mode); - - return 0; -} - -static void adjust_link_memac(struct mac_device *mac_dev) -{ - struct phy_device *phy_dev = mac_dev->phy_dev; - struct fman_mac *fman_mac; - bool rx_pause, tx_pause; - int err; - - fman_mac = mac_dev->fman_mac; - memac_adjust_link(fman_mac, phy_dev->speed); - mac_dev->update_speed(mac_dev, phy_dev->speed); - - fman_get_pause_cfg(mac_dev, &rx_pause, &tx_pause); - err = fman_set_mac_active_pause(mac_dev, rx_pause, tx_pause); - if (err < 0) - dev_err(mac_dev->dev, "fman_set_mac_active_pause() = %d\n", - err); -} - static int memac_set_tx_pause_frames(struct fman_mac *memac, u8 priority, u16 pause_time, u16 thresh_time) { struct memac_regs __iomem *regs = memac->regs; u32 tmp; - if (!is_init_done(memac->memac_drv_param)) - return -EINVAL; - tmp = ioread32be(®s->tx_fifo_sections); GET_TX_EMPTY_DEFAULT_VALUE(tmp); @@ -738,9 +607,6 @@ static int memac_accept_rx_pause_frames(struct fman_mac *memac, bool en) struct memac_regs __iomem *regs = memac->regs; u32 tmp; - if (!is_init_done(memac->memac_drv_param)) - return -EINVAL; - tmp = ioread32be(®s->command_config); if (en) tmp &= ~CMD_CFG_PAUSE_IGNORE; @@ -752,12 +618,175 @@ static int memac_accept_rx_pause_frames(struct fman_mac *memac, bool en) return 0; } +static void memac_validate(struct phylink_config *config, + unsigned long *supported, + struct phylink_link_state *state) +{ + struct fman_mac *memac = fman_config_to_mac(config)->fman_mac; + unsigned long caps = config->mac_capabilities; + + if (phy_interface_mode_is_rgmii(state->interface) && + memac->rgmii_no_half_duplex) + caps &= ~(MAC_10HD | MAC_100HD); + + phylink_validate_mask_caps(supported, state, caps); +} + +/** + * memac_if_mode() - Convert an interface mode into an IF_MODE config + * @interface: A phy interface mode + * + * Return: A configuration word, suitable for programming into the lower bits + * of %IF_MODE. + */ +static u32 memac_if_mode(phy_interface_t interface) +{ + switch (interface) { + case PHY_INTERFACE_MODE_MII: + return IF_MODE_MII; + case PHY_INTERFACE_MODE_RGMII: + case PHY_INTERFACE_MODE_RGMII_ID: + case PHY_INTERFACE_MODE_RGMII_RXID: + case PHY_INTERFACE_MODE_RGMII_TXID: + return IF_MODE_GMII | IF_MODE_RGMII; + case PHY_INTERFACE_MODE_SGMII: + case PHY_INTERFACE_MODE_1000BASEX: + case PHY_INTERFACE_MODE_QSGMII: + return IF_MODE_GMII; + case PHY_INTERFACE_MODE_10GBASER: + return IF_MODE_10G; + default: + WARN_ON_ONCE(1); + return 0; + } +} + +static struct phylink_pcs *memac_select_pcs(struct phylink_config *config, + phy_interface_t iface) +{ + struct fman_mac *memac = fman_config_to_mac(config)->fman_mac; + + switch (iface) { + case PHY_INTERFACE_MODE_SGMII: + case PHY_INTERFACE_MODE_1000BASEX: + return memac->sgmii_pcs; + case PHY_INTERFACE_MODE_QSGMII: + return memac->qsgmii_pcs; + case PHY_INTERFACE_MODE_10GBASER: + return memac->xfi_pcs; + default: + return NULL; + } +} + +static int memac_prepare(struct phylink_config *config, unsigned int mode, + phy_interface_t iface) +{ + struct fman_mac *memac = fman_config_to_mac(config)->fman_mac; + + switch (iface) { + case PHY_INTERFACE_MODE_SGMII: + case PHY_INTERFACE_MODE_1000BASEX: + case PHY_INTERFACE_MODE_QSGMII: + case PHY_INTERFACE_MODE_10GBASER: + return phy_set_mode_ext(memac->serdes, PHY_MODE_ETHERNET, + iface); + default: + return 0; + } +} + +static void memac_mac_config(struct phylink_config *config, unsigned int mode, + const struct phylink_link_state *state) +{ + struct mac_device *mac_dev = fman_config_to_mac(config); + struct memac_regs __iomem *regs = mac_dev->fman_mac->regs; + u32 tmp = ioread32be(®s->if_mode); + + tmp &= ~(IF_MODE_MASK | IF_MODE_RGMII); + tmp |= memac_if_mode(state->interface); + if (phylink_autoneg_inband(mode)) + tmp |= IF_MODE_RGMII_AUTO; + iowrite32be(tmp, ®s->if_mode); +} + +static void memac_link_up(struct phylink_config *config, struct phy_device *phy, + unsigned int mode, phy_interface_t interface, + int speed, int duplex, bool tx_pause, bool rx_pause) +{ + struct mac_device *mac_dev = fman_config_to_mac(config); + struct fman_mac *memac = mac_dev->fman_mac; + struct memac_regs __iomem *regs = memac->regs; + u32 tmp = memac_if_mode(interface); + u16 pause_time = tx_pause ? FSL_FM_PAUSE_TIME_ENABLE : + FSL_FM_PAUSE_TIME_DISABLE; + + memac_set_tx_pause_frames(memac, 0, pause_time, 0); + memac_accept_rx_pause_frames(memac, rx_pause); + + if (duplex == DUPLEX_HALF) + tmp |= IF_MODE_HD; + + switch (speed) { + case SPEED_1000: + tmp |= IF_MODE_RGMII_1000; + break; + case SPEED_100: + tmp |= IF_MODE_RGMII_100; + break; + case SPEED_10: + tmp |= IF_MODE_RGMII_10; + break; + } + iowrite32be(tmp, ®s->if_mode); + + /* TODO: EEE? */ + + if (speed == SPEED_10000) { + if (memac->fm_rev_info.major == 6 && + memac->fm_rev_info.minor == 4) + tmp = TX_FIFO_SECTIONS_TX_AVAIL_SLOW_10G; + else + tmp = TX_FIFO_SECTIONS_TX_AVAIL_10G; + tmp |= TX_FIFO_SECTIONS_TX_EMPTY_DEFAULT_10G; + } else { + tmp = TX_FIFO_SECTIONS_TX_AVAIL_1G | + TX_FIFO_SECTIONS_TX_EMPTY_DEFAULT_1G; + } + iowrite32be(tmp, ®s->tx_fifo_sections); + + mac_dev->update_speed(mac_dev, speed); + + tmp = ioread32be(®s->command_config); + tmp |= CMD_CFG_RX_EN | CMD_CFG_TX_EN; + iowrite32be(tmp, ®s->command_config); +} + +static void memac_link_down(struct phylink_config *config, unsigned int mode, + phy_interface_t interface) +{ + struct fman_mac *memac = fman_config_to_mac(config)->fman_mac; + struct memac_regs __iomem *regs = memac->regs; + u32 tmp; + + /* TODO: graceful */ + tmp = ioread32be(®s->command_config); + tmp &= ~(CMD_CFG_RX_EN | CMD_CFG_TX_EN); + iowrite32be(tmp, ®s->command_config); +} + +static const struct phylink_mac_ops memac_mac_ops = { + .validate = memac_validate, + .mac_select_pcs = memac_select_pcs, + .mac_prepare = memac_prepare, + .mac_config = memac_mac_config, + .mac_link_up = memac_link_up, + .mac_link_down = memac_link_down, +}; + static int memac_modify_mac_address(struct fman_mac *memac, const enet_addr_t *enet_addr) { - if (!is_init_done(memac->memac_drv_param)) - return -EINVAL; - add_addr_in_paddr(memac->regs, (const u8 *)(*enet_addr), 0); return 0; @@ -771,9 +800,6 @@ static int memac_add_hash_mac_address(struct fman_mac *memac, u32 hash; u64 addr; - if (!is_init_done(memac->memac_drv_param)) - return -EINVAL; - addr = ENET_ADDR_TO_UINT64(*eth_addr); if (!(addr & GROUP_ADDRESS)) { @@ -802,9 +828,6 @@ static int memac_set_allmulti(struct fman_mac *memac, bool enable) u32 entry; struct memac_regs __iomem *regs = memac->regs; - if (!is_init_done(memac->memac_drv_param)) - return -EINVAL; - if (enable) { for (entry = 0; entry < HASH_TABLE_SIZE; entry++) iowrite32be(entry | HASH_CTRL_MCAST_EN, @@ -834,9 +857,6 @@ static int memac_del_hash_mac_address(struct fman_mac *memac, u32 hash; u64 addr; - if (!is_init_done(memac->memac_drv_param)) - return -EINVAL; - addr = ENET_ADDR_TO_UINT64(*eth_addr); hash = get_mac_addr_hash_code(addr) & HASH_CTRL_ADDR_MASK; @@ -864,9 +884,6 @@ static int memac_set_exception(struct fman_mac *memac, { u32 bit_mask = 0; - if (!is_init_done(memac->memac_drv_param)) - return -EINVAL; - bit_mask = get_exception_flag(exception); if (bit_mask) { if (enable) @@ -886,23 +903,15 @@ static int memac_init(struct fman_mac *memac) { struct memac_cfg *memac_drv_param; enet_addr_t eth_addr; - bool slow_10g_if = false; - struct fixed_phy_status *fixed_link = NULL; int err; u32 reg32 = 0; - if (is_init_done(memac->memac_drv_param)) - return -EINVAL; - err = check_init_parameters(memac); if (err) return err; memac_drv_param = memac->memac_drv_param; - if (memac->fm_rev_info.major == 6 && memac->fm_rev_info.minor == 4) - slow_10g_if = true; - /* First, reset the MAC if desired. */ if (memac_drv_param->reset_on_init) { err = reset(memac->regs); @@ -918,10 +927,7 @@ static int memac_init(struct fman_mac *memac) add_addr_in_paddr(memac->regs, (const u8 *)eth_addr, 0); } - fixed_link = memac_drv_param->fixed_link; - - init(memac->regs, memac->memac_drv_param, memac->phy_if, - memac->max_speed, slow_10g_if, memac->exceptions); + init(memac->regs, memac->memac_drv_param, memac->exceptions); /* FM_RX_FIFO_CORRUPT_ERRATA_10GMAC_A006320 errata workaround * Exists only in FMan 6.0 and 6.3. @@ -937,11 +943,6 @@ static int memac_init(struct fman_mac *memac) iowrite32be(reg32, &memac->regs->command_config); } - if (memac->phy_if == PHY_INTERFACE_MODE_SGMII) - setup_sgmii_internal(memac, memac->sgmii_pcs, fixed_link); - else if (memac->phy_if == PHY_INTERFACE_MODE_QSGMII) - setup_sgmii_internal(memac, memac->qsgmii_pcs, fixed_link); - /* Max Frame Length */ err = fman_set_mac_max_frame(memac->fm, memac->mac_id, memac_drv_param->max_frame_length); @@ -970,9 +971,6 @@ static int memac_init(struct fman_mac *memac) fman_register_intr(memac->fm, FMAN_MOD_MAC, memac->mac_id, FMAN_INTR_TYPE_NORMAL, memac_exception, memac); - kfree(memac_drv_param); - memac->memac_drv_param = NULL; - return 0; } @@ -995,7 +993,6 @@ static int memac_free(struct fman_mac *memac) pcs_put(memac->sgmii_pcs); pcs_put(memac->qsgmii_pcs); pcs_put(memac->xfi_pcs); - kfree(memac->memac_drv_param); kfree(memac); @@ -1028,8 +1025,6 @@ static struct fman_mac *memac_config(struct mac_device *mac_dev, memac->addr = ENET_ADDR_TO_UINT64(mac_dev->addr); memac->regs = mac_dev->vaddr; - memac->max_speed = params->max_speed; - memac->phy_if = mac_dev->phy_if; memac->mac_id = params->mac_id; memac->exceptions = (MEMAC_IMASK_TSECC_ER | MEMAC_IMASK_TECC_ER | MEMAC_IMASK_RECC_ER | MEMAC_IMASK_MGI); @@ -1037,7 +1032,6 @@ static struct fman_mac *memac_config(struct mac_device *mac_dev, memac->event_cb = params->event_cb; memac->dev_id = mac_dev; memac->fm = params->fm; - memac->basex_if = params->basex_if; /* Save FMan revision */ fman_get_revision(memac->fm, &memac->fm_rev_info); @@ -1064,37 +1058,44 @@ static struct phylink_pcs *memac_pcs_create(struct device_node *mac_node, return pcs; } +static bool memac_supports(struct mac_device *mac_dev, phy_interface_t iface) +{ + /* If there's no serdes device, assume that it's been configured for + * whatever the default interface mode is. + */ + if (!mac_dev->fman_mac->serdes) + return mac_dev->phy_if == iface; + /* Otherwise, ask the serdes */ + return !phy_validate(mac_dev->fman_mac->serdes, PHY_MODE_ETHERNET, + iface, NULL); +} + int memac_initialization(struct mac_device *mac_dev, struct device_node *mac_node, struct fman_mac_params *params) { int err; + struct device_node *fixed; struct phylink_pcs *pcs; - struct fixed_phy_status *fixed_link; struct fman_mac *memac; + unsigned long capabilities; + unsigned long *supported; + mac_dev->phylink_ops = &memac_mac_ops; mac_dev->set_promisc = memac_set_promiscuous; mac_dev->change_addr = memac_modify_mac_address; mac_dev->add_hash_mac_addr = memac_add_hash_mac_address; mac_dev->remove_hash_mac_addr = memac_del_hash_mac_address; - mac_dev->set_tx_pause = memac_set_tx_pause_frames; - mac_dev->set_rx_pause = memac_accept_rx_pause_frames; mac_dev->set_exception = memac_set_exception; mac_dev->set_allmulti = memac_set_allmulti; mac_dev->set_tstamp = memac_set_tstamp; mac_dev->set_multi = fman_set_multi; - mac_dev->adjust_link = adjust_link_memac; mac_dev->enable = memac_enable; mac_dev->disable = memac_disable; - if (params->max_speed == SPEED_10000) - mac_dev->phy_if = PHY_INTERFACE_MODE_XGMII; - mac_dev->fman_mac = memac_config(mac_dev, params); - if (!mac_dev->fman_mac) { - err = -EINVAL; - goto _return; - } + if (!mac_dev->fman_mac) + return -EINVAL; memac = mac_dev->fman_mac; memac->memac_drv_param->max_frame_length = fman_get_max_frm(); @@ -1136,9 +1137,9 @@ int memac_initialization(struct mac_device *mac_dev, else pcs = memac_pcs_create(mac_node, err); - if (!pcs) { - dev_err(mac_dev->dev, "missing pcs\n"); - err = -ENOENT; + if (IS_ERR(pcs)) { + err = PTR_ERR(pcs); + dev_err_probe(mac_dev->dev, err, "missing pcs\n"); goto _return_fm_mac_free; } @@ -1159,84 +1160,100 @@ int memac_initialization(struct mac_device *mac_dev, } else if (IS_ERR(memac->serdes)) { dev_err_probe(mac_dev->dev, err, "could not get serdes\n"); goto _return_fm_mac_free; + } + + /* The internal connection to the serdes is XGMII, but this isn't + * really correct for the phy mode (which is the external connection). + * However, this is how all older device trees say that they want + * 10GBASE-R (aka XFI), so just convert it for them. + */ + if (mac_dev->phy_if == PHY_INTERFACE_MODE_XGMII) + mac_dev->phy_if = PHY_INTERFACE_MODE_10GBASER; + + /* TODO: The following interface modes are supported by (some) hardware + * but not by this driver: + * - 1000BASE-KX + * - 10GBASE-KR + * - XAUI/HiGig + */ + supported = mac_dev->phylink_config.supported_interfaces; + + /* Note that half duplex is only supported on 10/100M interfaces. */ + + if (memac->sgmii_pcs && + (memac_supports(mac_dev, PHY_INTERFACE_MODE_SGMII) || + memac_supports(mac_dev, PHY_INTERFACE_MODE_1000BASEX))) { + __set_bit(PHY_INTERFACE_MODE_SGMII, supported); + __set_bit(PHY_INTERFACE_MODE_1000BASEX, supported); + } + + if (memac->sgmii_pcs && + memac_supports(mac_dev, PHY_INTERFACE_MODE_2500BASEX)) + __set_bit(PHY_INTERFACE_MODE_2500BASEX, supported); + + if (memac->qsgmii_pcs && + memac_supports(mac_dev, PHY_INTERFACE_MODE_QSGMII)) + __set_bit(PHY_INTERFACE_MODE_QSGMII, supported); + else if (mac_dev->phy_if == PHY_INTERFACE_MODE_QSGMII) + dev_warn(mac_dev->dev, "no QSGMII pcs specified\n"); + + if (memac->xfi_pcs && + memac_supports(mac_dev, PHY_INTERFACE_MODE_10GBASER)) { + __set_bit(PHY_INTERFACE_MODE_10GBASER, supported); } else { - err = phy_init(memac->serdes); - if (err) { - dev_err_probe(mac_dev->dev, err, - "could not initialize serdes\n"); - goto _return_fm_mac_free; - } - - err = phy_power_on(memac->serdes); - if (err) { - dev_err_probe(mac_dev->dev, err, - "could not power on serdes\n"); - goto _return_phy_exit; - } - - if (memac->phy_if == PHY_INTERFACE_MODE_SGMII || - memac->phy_if == PHY_INTERFACE_MODE_1000BASEX || - memac->phy_if == PHY_INTERFACE_MODE_2500BASEX || - memac->phy_if == PHY_INTERFACE_MODE_QSGMII || - memac->phy_if == PHY_INTERFACE_MODE_XGMII) { - err = phy_set_mode_ext(memac->serdes, PHY_MODE_ETHERNET, - memac->phy_if); - if (err) { - dev_err_probe(mac_dev->dev, err, - "could not set serdes mode to %s\n", - phy_modes(memac->phy_if)); - goto _return_phy_power_off; - } - } + /* From what I can tell, no 10g macs support RGMII. */ + phy_interface_set_rgmii(supported); + __set_bit(PHY_INTERFACE_MODE_MII, supported); } - if (!mac_dev->phy_node && of_phy_is_fixed_link(mac_node)) { - struct phy_device *phy; - - err = of_phy_register_fixed_link(mac_node); - if (err) - goto _return_phy_power_off; - - fixed_link = kzalloc(sizeof(*fixed_link), GFP_KERNEL); - if (!fixed_link) { - err = -ENOMEM; - goto _return_phy_power_off; - } - - mac_dev->phy_node = of_node_get(mac_node); - phy = of_phy_find_device(mac_dev->phy_node); - if (!phy) { - err = -EINVAL; - of_node_put(mac_dev->phy_node); - goto _return_fixed_link_free; - } - - fixed_link->link = phy->link; - fixed_link->speed = phy->speed; - fixed_link->duplex = phy->duplex; - fixed_link->pause = phy->pause; - fixed_link->asym_pause = phy->asym_pause; - - put_device(&phy->mdio.dev); - memac->memac_drv_param->fixed_link = fixed_link; - } + capabilities = MAC_SYM_PAUSE | MAC_ASYM_PAUSE | MAC_10 | MAC_100; + capabilities |= MAC_1000FD | MAC_2500FD | MAC_10000FD; + + /* These SoCs don't support half duplex at all; there's no different + * FMan version or compatible, so we just have to check the machine + * compatible instead + */ + if (of_machine_is_compatible("fsl,ls1043a") || + of_machine_is_compatible("fsl,ls1046a") || + of_machine_is_compatible("fsl,B4QDS")) + capabilities &= ~(MAC_10HD | MAC_100HD); + + mac_dev->phylink_config.mac_capabilities = capabilities; + + /* The T2080 and T4240 don't support half duplex RGMII. There is no + * other way to identify these SoCs, so just use the machine + * compatible. + */ + if (of_machine_is_compatible("fsl,T2080QDS") || + of_machine_is_compatible("fsl,T2080RDB") || + of_machine_is_compatible("fsl,T2081QDS") || + of_machine_is_compatible("fsl,T4240QDS") || + of_machine_is_compatible("fsl,T4240RDB")) + memac->rgmii_no_half_duplex = true; + + /* Most boards should use MLO_AN_INBAND, but existing boards don't have + * a managed property. Default to MLO_AN_INBAND if nothing else is + * specified. We need to be careful and not enable this if we have a + * fixed link or if we are using MII or RGMII, since those + * configurations modes don't use in-band autonegotiation. + */ + fixed = of_get_child_by_name(mac_node, "fixed-link"); + if (!fixed && !of_property_read_bool(mac_node, "fixed-link") && + !of_property_read_bool(mac_node, "managed") && + mac_dev->phy_if != PHY_INTERFACE_MODE_MII && + !phy_interface_mode_is_rgmii(mac_dev->phy_if)) + mac_dev->phylink_config.ovr_an_inband = true; + of_node_put(fixed); err = memac_init(mac_dev->fman_mac); if (err < 0) - goto _return_fixed_link_free; + goto _return_fm_mac_free; dev_info(mac_dev->dev, "FMan MEMAC\n"); - goto _return; + return 0; -_return_phy_power_off: - phy_power_off(memac->serdes); -_return_phy_exit: - phy_exit(memac->serdes); -_return_fixed_link_free: - kfree(fixed_link); _return_fm_mac_free: memac_free(mac_dev->fman_mac); -_return: return err; } diff --git a/drivers/net/ethernet/freescale/fman/fman_tgec.c b/drivers/net/ethernet/freescale/fman/fman_tgec.c index 5a4be54ad459..c265b7f19a4d 100644 --- a/drivers/net/ethernet/freescale/fman/fman_tgec.c +++ b/drivers/net/ethernet/freescale/fman/fman_tgec.c @@ -13,6 +13,7 @@ #include #include #include +#include /* Transmit Inter-Packet Gap Length Register (TX_IPG_LENGTH) */ #define TGEC_TX_IPG_LENGTH_MASK 0x000003ff @@ -243,10 +244,6 @@ static int init(struct tgec_regs __iomem *regs, struct tgec_cfg *cfg, static int check_init_parameters(struct fman_mac *tgec) { - if (tgec->max_speed < SPEED_10000) { - pr_err("10G MAC driver only support 10G speed\n"); - return -EINVAL; - } if (!tgec->exception_cb) { pr_err("uninitialized exception_cb\n"); return -EINVAL; @@ -384,40 +381,13 @@ static void free_init_resources(struct fman_mac *tgec) tgec->unicast_addr_hash = NULL; } -static bool is_init_done(struct tgec_cfg *cfg) -{ - /* Checks if tGEC driver parameters were initialized */ - if (!cfg) - return true; - - return false; -} - static int tgec_enable(struct fman_mac *tgec) { - struct tgec_regs __iomem *regs = tgec->regs; - u32 tmp; - - if (!is_init_done(tgec->cfg)) - return -EINVAL; - - tmp = ioread32be(®s->command_config); - tmp |= CMD_CFG_RX_EN | CMD_CFG_TX_EN; - iowrite32be(tmp, ®s->command_config); - return 0; } static void tgec_disable(struct fman_mac *tgec) { - struct tgec_regs __iomem *regs = tgec->regs; - u32 tmp; - - WARN_ON_ONCE(!is_init_done(tgec->cfg)); - - tmp = ioread32be(®s->command_config); - tmp &= ~(CMD_CFG_RX_EN | CMD_CFG_TX_EN); - iowrite32be(tmp, ®s->command_config); } static int tgec_set_promiscuous(struct fman_mac *tgec, bool new_val) @@ -425,9 +395,6 @@ static int tgec_set_promiscuous(struct fman_mac *tgec, bool new_val) struct tgec_regs __iomem *regs = tgec->regs; u32 tmp; - if (!is_init_done(tgec->cfg)) - return -EINVAL; - tmp = ioread32be(®s->command_config); if (new_val) tmp |= CMD_CFG_PROMIS_EN; @@ -444,9 +411,6 @@ static int tgec_set_tx_pause_frames(struct fman_mac *tgec, { struct tgec_regs __iomem *regs = tgec->regs; - if (!is_init_done(tgec->cfg)) - return -EINVAL; - iowrite32be((u32)pause_time, ®s->pause_quant); return 0; @@ -457,9 +421,6 @@ static int tgec_accept_rx_pause_frames(struct fman_mac *tgec, bool en) struct tgec_regs __iomem *regs = tgec->regs; u32 tmp; - if (!is_init_done(tgec->cfg)) - return -EINVAL; - tmp = ioread32be(®s->command_config); if (!en) tmp |= CMD_CFG_PAUSE_IGNORE; @@ -470,12 +431,53 @@ static int tgec_accept_rx_pause_frames(struct fman_mac *tgec, bool en) return 0; } +static void tgec_mac_config(struct phylink_config *config, unsigned int mode, + const struct phylink_link_state *state) +{ +} + +static void tgec_link_up(struct phylink_config *config, struct phy_device *phy, + unsigned int mode, phy_interface_t interface, + int speed, int duplex, bool tx_pause, bool rx_pause) +{ + struct mac_device *mac_dev = fman_config_to_mac(config); + struct fman_mac *tgec = mac_dev->fman_mac; + struct tgec_regs __iomem *regs = tgec->regs; + u16 pause_time = tx_pause ? FSL_FM_PAUSE_TIME_ENABLE : + FSL_FM_PAUSE_TIME_DISABLE; + u32 tmp; + + tgec_set_tx_pause_frames(tgec, 0, pause_time, 0); + tgec_accept_rx_pause_frames(tgec, rx_pause); + mac_dev->update_speed(mac_dev, speed); + + tmp = ioread32be(®s->command_config); + tmp |= CMD_CFG_RX_EN | CMD_CFG_TX_EN; + iowrite32be(tmp, ®s->command_config); +} + +static void tgec_link_down(struct phylink_config *config, unsigned int mode, + phy_interface_t interface) +{ + struct fman_mac *tgec = fman_config_to_mac(config)->fman_mac; + struct tgec_regs __iomem *regs = tgec->regs; + u32 tmp; + + tmp = ioread32be(®s->command_config); + tmp &= ~(CMD_CFG_RX_EN | CMD_CFG_TX_EN); + iowrite32be(tmp, ®s->command_config); +} + +static const struct phylink_mac_ops tgec_mac_ops = { + .validate = phylink_generic_validate, + .mac_config = tgec_mac_config, + .mac_link_up = tgec_link_up, + .mac_link_down = tgec_link_down, +}; + static int tgec_modify_mac_address(struct fman_mac *tgec, const enet_addr_t *p_enet_addr) { - if (!is_init_done(tgec->cfg)) - return -EINVAL; - tgec->addr = ENET_ADDR_TO_UINT64(*p_enet_addr); set_mac_address(tgec->regs, (const u8 *)(*p_enet_addr)); @@ -490,9 +492,6 @@ static int tgec_add_hash_mac_address(struct fman_mac *tgec, u32 crc = 0xFFFFFFFF, hash; u64 addr; - if (!is_init_done(tgec->cfg)) - return -EINVAL; - addr = ENET_ADDR_TO_UINT64(*eth_addr); if (!(addr & GROUP_ADDRESS)) { @@ -525,9 +524,6 @@ static int tgec_set_allmulti(struct fman_mac *tgec, bool enable) u32 entry; struct tgec_regs __iomem *regs = tgec->regs; - if (!is_init_done(tgec->cfg)) - return -EINVAL; - if (enable) { for (entry = 0; entry < TGEC_HASH_TABLE_SIZE; entry++) iowrite32be(entry | TGEC_HASH_MCAST_EN, @@ -548,9 +544,6 @@ static int tgec_set_tstamp(struct fman_mac *tgec, bool enable) struct tgec_regs __iomem *regs = tgec->regs; u32 tmp; - if (!is_init_done(tgec->cfg)) - return -EINVAL; - tmp = ioread32be(®s->command_config); if (enable) @@ -572,9 +565,6 @@ static int tgec_del_hash_mac_address(struct fman_mac *tgec, u32 crc = 0xFFFFFFFF, hash; u64 addr; - if (!is_init_done(tgec->cfg)) - return -EINVAL; - addr = ((*(u64 *)eth_addr) >> 16); /* CRC calculation */ @@ -601,22 +591,12 @@ static int tgec_del_hash_mac_address(struct fman_mac *tgec, return 0; } -static void tgec_adjust_link(struct mac_device *mac_dev) -{ - struct phy_device *phy_dev = mac_dev->phy_dev; - - mac_dev->update_speed(mac_dev, phy_dev->speed); -} - static int tgec_set_exception(struct fman_mac *tgec, enum fman_mac_exceptions exception, bool enable) { struct tgec_regs __iomem *regs = tgec->regs; u32 bit_mask = 0; - if (!is_init_done(tgec->cfg)) - return -EINVAL; - bit_mask = get_exception_flag(exception); if (bit_mask) { if (enable) @@ -641,9 +621,6 @@ static int tgec_init(struct fman_mac *tgec) enet_addr_t eth_addr; int err; - if (is_init_done(tgec->cfg)) - return -EINVAL; - if (DEFAULT_RESET_ON_INIT && (fman_reset_mac(tgec->fm, tgec->mac_id) != 0)) { pr_err("Can't reset MAC!\n"); @@ -753,7 +730,6 @@ static struct fman_mac *tgec_config(struct mac_device *mac_dev, tgec->regs = mac_dev->vaddr; tgec->addr = ENET_ADDR_TO_UINT64(mac_dev->addr); - tgec->max_speed = params->max_speed; tgec->mac_id = params->mac_id; tgec->exceptions = (TGEC_IMASK_MDIO_SCAN_EVENT | TGEC_IMASK_REM_FAULT | @@ -788,17 +764,15 @@ int tgec_initialization(struct mac_device *mac_dev, int err; struct fman_mac *tgec; + mac_dev->phylink_ops = &tgec_mac_ops; mac_dev->set_promisc = tgec_set_promiscuous; mac_dev->change_addr = tgec_modify_mac_address; mac_dev->add_hash_mac_addr = tgec_add_hash_mac_address; mac_dev->remove_hash_mac_addr = tgec_del_hash_mac_address; - mac_dev->set_tx_pause = tgec_set_tx_pause_frames; - mac_dev->set_rx_pause = tgec_accept_rx_pause_frames; mac_dev->set_exception = tgec_set_exception; mac_dev->set_allmulti = tgec_set_allmulti; mac_dev->set_tstamp = tgec_set_tstamp; mac_dev->set_multi = fman_set_multi; - mac_dev->adjust_link = tgec_adjust_link; mac_dev->enable = tgec_enable; mac_dev->disable = tgec_disable; @@ -808,6 +782,19 @@ int tgec_initialization(struct mac_device *mac_dev, goto _return; } + /* The internal connection to the serdes is XGMII, but this isn't + * really correct for the phy mode (which is the external connection). + * However, this is how all older device trees say that they want + * XAUI, so just convert it for them. + */ + if (mac_dev->phy_if == PHY_INTERFACE_MODE_XGMII) + mac_dev->phy_if = PHY_INTERFACE_MODE_XAUI; + + __set_bit(PHY_INTERFACE_MODE_XAUI, + mac_dev->phylink_config.supported_interfaces); + mac_dev->phylink_config.mac_capabilities = + MAC_SYM_PAUSE | MAC_ASYM_PAUSE | MAC_10000FD; + tgec = mac_dev->fman_mac; tgec->cfg->max_frame_length = fman_get_max_frm(); err = tgec_init(tgec); diff --git a/drivers/net/ethernet/freescale/fman/mac.c b/drivers/net/ethernet/freescale/fman/mac.c index 7b7526fd7da3..2b0a30f69147 100644 --- a/drivers/net/ethernet/freescale/fman/mac.c +++ b/drivers/net/ethernet/freescale/fman/mac.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -93,130 +94,8 @@ int fman_set_multi(struct net_device *net_dev, struct mac_device *mac_dev) return 0; } -/** - * fman_set_mac_active_pause - * @mac_dev: A pointer to the MAC device - * @rx: Pause frame setting for RX - * @tx: Pause frame setting for TX - * - * Set the MAC RX/TX PAUSE frames settings - * - * Avoid redundant calls to FMD, if the MAC driver already contains the desired - * active PAUSE settings. Otherwise, the new active settings should be reflected - * in FMan. - * - * Return: 0 on success; Error code otherwise. - */ -int fman_set_mac_active_pause(struct mac_device *mac_dev, bool rx, bool tx) -{ - struct fman_mac *fman_mac = mac_dev->fman_mac; - int err = 0; - - if (rx != mac_dev->rx_pause_active) { - err = mac_dev->set_rx_pause(fman_mac, rx); - if (likely(err == 0)) - mac_dev->rx_pause_active = rx; - } - - if (tx != mac_dev->tx_pause_active) { - u16 pause_time = (tx ? FSL_FM_PAUSE_TIME_ENABLE : - FSL_FM_PAUSE_TIME_DISABLE); - - err = mac_dev->set_tx_pause(fman_mac, 0, pause_time, 0); - - if (likely(err == 0)) - mac_dev->tx_pause_active = tx; - } - - return err; -} -EXPORT_SYMBOL(fman_set_mac_active_pause); - -/** - * fman_get_pause_cfg - * @mac_dev: A pointer to the MAC device - * @rx_pause: Return value for RX setting - * @tx_pause: Return value for TX setting - * - * Determine the MAC RX/TX PAUSE frames settings based on PHY - * autonegotiation or values set by eththool. - * - * Return: Pointer to FMan device. - */ -void fman_get_pause_cfg(struct mac_device *mac_dev, bool *rx_pause, - bool *tx_pause) -{ - struct phy_device *phy_dev = mac_dev->phy_dev; - u16 lcl_adv, rmt_adv; - u8 flowctrl; - - *rx_pause = *tx_pause = false; - - if (!phy_dev->duplex) - return; - - /* If PAUSE autonegotiation is disabled, the TX/RX PAUSE settings - * are those set by ethtool. - */ - if (!mac_dev->autoneg_pause) { - *rx_pause = mac_dev->rx_pause_req; - *tx_pause = mac_dev->tx_pause_req; - return; - } - - /* Else if PAUSE autonegotiation is enabled, the TX/RX PAUSE - * settings depend on the result of the link negotiation. - */ - - /* get local capabilities */ - lcl_adv = linkmode_adv_to_lcl_adv_t(phy_dev->advertising); - - /* get link partner capabilities */ - rmt_adv = 0; - if (phy_dev->pause) - rmt_adv |= LPA_PAUSE_CAP; - if (phy_dev->asym_pause) - rmt_adv |= LPA_PAUSE_ASYM; - - /* Calculate TX/RX settings based on local and peer advertised - * symmetric/asymmetric PAUSE capabilities. - */ - flowctrl = mii_resolve_flowctrl_fdx(lcl_adv, rmt_adv); - if (flowctrl & FLOW_CTRL_RX) - *rx_pause = true; - if (flowctrl & FLOW_CTRL_TX) - *tx_pause = true; -} -EXPORT_SYMBOL(fman_get_pause_cfg); - -#define DTSEC_SUPPORTED \ - (SUPPORTED_10baseT_Half \ - | SUPPORTED_10baseT_Full \ - | SUPPORTED_100baseT_Half \ - | SUPPORTED_100baseT_Full \ - | SUPPORTED_Autoneg \ - | SUPPORTED_Pause \ - | SUPPORTED_Asym_Pause \ - | SUPPORTED_FIBRE \ - | SUPPORTED_MII) - static DEFINE_MUTEX(eth_lock); -static const u16 phy2speed[] = { - [PHY_INTERFACE_MODE_MII] = SPEED_100, - [PHY_INTERFACE_MODE_GMII] = SPEED_1000, - [PHY_INTERFACE_MODE_SGMII] = SPEED_1000, - [PHY_INTERFACE_MODE_TBI] = SPEED_1000, - [PHY_INTERFACE_MODE_RMII] = SPEED_100, - [PHY_INTERFACE_MODE_RGMII] = SPEED_1000, - [PHY_INTERFACE_MODE_RGMII_ID] = SPEED_1000, - [PHY_INTERFACE_MODE_RGMII_RXID] = SPEED_1000, - [PHY_INTERFACE_MODE_RGMII_TXID] = SPEED_1000, - [PHY_INTERFACE_MODE_RTBI] = SPEED_1000, - [PHY_INTERFACE_MODE_QSGMII] = SPEED_1000, - [PHY_INTERFACE_MODE_XGMII] = SPEED_10000 -}; - static struct platform_device *dpaa_eth_add_device(int fman_id, struct mac_device *mac_dev) { @@ -263,8 +142,8 @@ static struct platform_device *dpaa_eth_add_device(int fman_id, } static const struct of_device_id mac_match[] = { - { .compatible = "fsl,fman-dtsec", .data = dtsec_initialization }, - { .compatible = "fsl,fman-xgec", .data = tgec_initialization }, + { .compatible = "fsl,fman-dtsec", .data = dtsec_initialization }, + { .compatible = "fsl,fman-xgec", .data = tgec_initialization }, { .compatible = "fsl,fman-memac", .data = memac_initialization }, {} }; @@ -296,6 +175,7 @@ static int mac_probe(struct platform_device *_of_dev) priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM; + platform_set_drvdata(_of_dev, mac_dev); /* Save private information */ mac_dev->priv = priv; @@ -424,57 +304,21 @@ static int mac_probe(struct platform_device *_of_dev) } mac_dev->phy_if = phy_if; - priv->speed = phy2speed[mac_dev->phy_if]; - params.max_speed = priv->speed; - mac_dev->if_support = DTSEC_SUPPORTED; - /* We don't support half-duplex in SGMII mode */ - if (mac_dev->phy_if == PHY_INTERFACE_MODE_SGMII) - mac_dev->if_support &= ~(SUPPORTED_10baseT_Half | - SUPPORTED_100baseT_Half); - - /* Gigabit support (no half-duplex) */ - if (params.max_speed == 1000) - mac_dev->if_support |= SUPPORTED_1000baseT_Full; - - /* The 10G interface only supports one mode */ - if (mac_dev->phy_if == PHY_INTERFACE_MODE_XGMII) - mac_dev->if_support = SUPPORTED_10000baseT_Full; - - /* Get the rest of the PHY information */ - mac_dev->phy_node = of_parse_phandle(mac_node, "phy-handle", 0); - - params.basex_if = false; params.mac_id = priv->cell_index; params.fm = (void *)priv->fman; params.exception_cb = mac_exception; params.event_cb = mac_exception; err = init(mac_dev, mac_node, ¶ms); - if (err < 0) { - dev_err(dev, "mac_dev->init() = %d\n", err); - of_node_put(mac_dev->phy_node); - return err; - } - - /* pause frame autonegotiation enabled */ - mac_dev->autoneg_pause = true; - - /* By intializing the values to false, force FMD to enable PAUSE frames - * on RX and TX - */ - mac_dev->rx_pause_req = true; - mac_dev->tx_pause_req = true; - mac_dev->rx_pause_active = false; - mac_dev->tx_pause_active = false; - err = fman_set_mac_active_pause(mac_dev, true, true); if (err < 0) - dev_err(dev, "fman_set_mac_active_pause() = %d\n", err); + return err; if (!is_zero_ether_addr(mac_dev->addr)) dev_info(dev, "FMan MAC address: %pM\n", mac_dev->addr); priv->eth_dev = dpaa_eth_add_device(fman_id, mac_dev); if (IS_ERR(priv->eth_dev)) { + err = PTR_ERR(priv->eth_dev); dev_err(dev, "failed to add Ethernet platform device for MAC %d\n", priv->cell_index); priv->eth_dev = NULL; diff --git a/drivers/net/ethernet/freescale/fman/mac.h b/drivers/net/ethernet/freescale/fman/mac.h index b95d384271bd..5bf03e1e279a 100644 --- a/drivers/net/ethernet/freescale/fman/mac.h +++ b/drivers/net/ethernet/freescale/fman/mac.h @@ -9,6 +9,7 @@ #include #include #include +#include #include #include "fman_port.h" @@ -24,32 +25,22 @@ struct mac_device { struct device *dev; u8 addr[ETH_ALEN]; struct fman_port *port[2]; - u32 if_support; - struct phy_device *phy_dev; + struct phylink *phylink; + struct phylink_config phylink_config; phy_interface_t phy_if; - struct device_node *phy_node; - struct net_device *net_dev; - bool autoneg_pause; - bool rx_pause_req; - bool tx_pause_req; - bool rx_pause_active; - bool tx_pause_active; bool promisc; bool allmulti; + const struct phylink_mac_ops *phylink_ops; int (*enable)(struct fman_mac *mac_dev); void (*disable)(struct fman_mac *mac_dev); - void (*adjust_link)(struct mac_device *mac_dev); int (*set_promisc)(struct fman_mac *mac_dev, bool enable); int (*change_addr)(struct fman_mac *mac_dev, const enet_addr_t *enet_addr); int (*set_allmulti)(struct fman_mac *mac_dev, bool enable); int (*set_tstamp)(struct fman_mac *mac_dev, bool enable); int (*set_multi)(struct net_device *net_dev, struct mac_device *mac_dev); - int (*set_rx_pause)(struct fman_mac *mac_dev, bool en); - int (*set_tx_pause)(struct fman_mac *mac_dev, u8 priority, - u16 pause_time, u16 thresh_time); int (*set_exception)(struct fman_mac *mac_dev, enum fman_mac_exceptions exception, bool enable); int (*add_hash_mac_addr)(struct fman_mac *mac_dev, @@ -63,6 +54,12 @@ struct mac_device { struct mac_priv_s *priv; }; +static inline struct mac_device +*fman_config_to_mac(struct phylink_config *config) +{ + return container_of(config, struct mac_device, phylink_config); +} + struct dpaa_eth_data { struct mac_device *mac_dev; int mac_hw_id; From patchwork Mon Oct 17 20:22:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 3707 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp1629523wrs; Mon, 17 Oct 2022 13:29:32 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6QAssEV0B5HB2k0MO63FDpqXnbP9JMmmkcoECj1xUkZpwX5yWSIDYrrixk0Lm3Ve2ndpz9 X-Received: by 2002:a05:6402:190e:b0:45c:d10a:4c1a with SMTP id e14-20020a056402190e00b0045cd10a4c1amr11955412edz.345.1666038572591; Mon, 17 Oct 2022 13:29:32 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1666038572; cv=pass; d=google.com; s=arc-20160816; b=nh3arYEBKssiXJ+akYf99gaCkwvK5YH9NwXtH4JrB2pstfW6pzWuMRSapw8qKyifXO +nnVuaqi5D7aI5mKEQbYZY6KkWKCpn2fS7qgEXZm0RjVurDnN4I9vcto75st8acAI8hQ 12UMuxoFna+rV2n0g/00zbXSXH2iNZ21kT3erS6SDvkgT2UVXk9+weLHYpyzkQloxJVo YP1wrwa7GxtIKcqsoZj4cNkoR63C5YuWSazK6Ab2xN+faNEl7E3INqrlKzCWY+srC4Vd 3cCtraQAqRMqg5jL8nBAUelqeazNWQ5fJKB9JRVYgyWHz0Ab+RCSspWQcCtLNInj43Bg KtNA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=EsdQEjx1Q6EFZ03LnTaNDwQemvWxkp4ZfpwjAwz4KCo=; b=dumhhOA/bPnC5C0ygKRMWqihKNu9tO/JyJcS1eJoSH1WMPqK2GvwnF1RRlqczRjfjh 3GVZJ1SZ9A5RRlATEqroTurHhLAo0PK7wRNm+PnMIDWHhTr0PuANtAa283TsS+7E2UQo N3doj3yR5oEMAgP9KuL+u9F8TzVXJiageK3prpxBQ/5+kF4eHjpywMMgGc5xByswd0Cv Q5D/90dOYeExeJtSTkZ92b/G8dMbO/WkDjBQucyuplrXjSLTfsxxT2dt1LP89H32NhBo SSb906/458ykRpZLALc0kUThfNZm/SQLMPRdrNpbZguhCHAFf682D69icxgyoMAHHLzh O4aw== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@seco.com header.s=selector1 header.b=PH4vr8sK; arc=pass (i=1 spf=pass spfdomain=seco.com dkim=pass dkdomain=seco.com dmarc=pass fromdomain=seco.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=seco.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id s11-20020a170906a18b00b0078200e81b92si10089077ejy.758.2022.10.17.13.29.05; Mon, 17 Oct 2022 13:29:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@seco.com header.s=selector1 header.b=PH4vr8sK; arc=pass (i=1 spf=pass spfdomain=seco.com dkim=pass dkdomain=seco.com dmarc=pass fromdomain=seco.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=seco.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230180AbiJQUYb (ORCPT + 99 others); Mon, 17 Oct 2022 16:24:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53176 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231398AbiJQUXk (ORCPT ); Mon, 17 Oct 2022 16:23:40 -0400 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60071.outbound.protection.outlook.com [40.107.6.71]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6D6F94F678; Mon, 17 Oct 2022 13:23:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kt4QhSSuaEEntwazCp4EzbpOwXrj6eYGc5DSrvv+Ae41rcw9RE7PUTHgwcg+xhBYVwXm3zgSM3qG3aE+WgNdYzUt0uoogSCRgcFnnsItpYIWF2ND2dKWskTG9gG/23vn14OCe5FqDn0XrsCMT0LNAA49Nc5JtHwiL2cqT60XydmC6LJZvWYV5IsEDZr6Gxb+6DOg1Sp/Ey9PeSMva41lunwdgou1o2w0IE+VtJODjyc0Y359CnlohgeX8/eh2J9vhfHAPPhD6Q0iYgu/08RQN2gsnRyID+7prPvlTvOgDFgMYJNBQ4+gmOKgvLbVovOZ3pQ1Lb6Za4W2Mf4E+/a7bw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=EsdQEjx1Q6EFZ03LnTaNDwQemvWxkp4ZfpwjAwz4KCo=; b=AIQOVlhsUL+bA2q77/1+tMBaWV6T8amuExke8GkWapEPy+twVMf5lMtRkEMArNr2XoB0vBbFwJDUGQOUTqmdlAgTpvjnVFYU/vIIii+4bIvxG4wEXJ2NA39wiDPJoVFYbBuqP9g9CuM6JS0BnUXol6K9KyPPVu6UefiGy1f6WDOcu/3TwVj8zUA5RL+1wFukYM3mxtmagyJYCnecDcFUye2LEKWWW2mtZ2YotUvAmyQOmdNxm1KZVLVBJcXxPHN3Y66TZ+eY5vJu3LndItoQZ9JCVEAtXJlNtxYm4x+w8QOWIRoHK5UpsQiSjsZotXaDC1YMV/Yg26xMCsBaPjD5Ug== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=seco.com; dmarc=pass action=none header.from=seco.com; dkim=pass header.d=seco.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=seco.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=EsdQEjx1Q6EFZ03LnTaNDwQemvWxkp4ZfpwjAwz4KCo=; b=PH4vr8sK6zDYdTwMqukYjgqiJx0BoIBZpcxoWwOmNx6K1t/FhX4kBWWBsCdzHbInxWpaOWnYRb0vhnhV+kbpacg+JsrKu5CJwSDCF2W3VXFS8YeH6/b/VzRBIN2kIipoXZsIJh2ox0O43HPdr5ApaMPKDfbgTswTe/NgirL2yKGdwRQt3HiTYhKYZdT3Vylw7Ix8nmr4jqjZ4Al3qIMQUbfrTKJ05jmCa5Q6U0iUqxmEW98eNRH1Y3xYZhshyv5Z5olJksK4fJmy4phu12rVzPtpO6v3ffPWReaMm+wMz4AHO8pacNqOiQoK5CUKKJc+38krNz6a0gIvdlJHTAvJlw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=seco.com; Received: from DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) by GV1PR03MB8406.eurprd03.prod.outlook.com (2603:10a6:150:55::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.26; Mon, 17 Oct 2022 20:23:33 +0000 Received: from DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::204a:de22:b651:f86d]) by DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::204a:de22:b651:f86d%6]) with mapi id 15.20.5723.033; Mon, 17 Oct 2022 20:23:33 +0000 From: Sean Anderson To: "David S . Miller" , Jakub Kicinski , Madalin Bucur , Camelia Alexandra Groza , netdev@vger.kernel.org Cc: Eric Dumazet , "linuxppc-dev @ lists . ozlabs . org" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Russell King , Paolo Abeni , Sean Anderson , Benjamin Herrenschmidt , Krzysztof Kozlowski , Li Yang , Michael Ellerman , Paul Mackerras , Rob Herring , devicetree@vger.kernel.org Subject: [PATCH net-next v7 08/10] powerpc: dts: t208x: Mark MAC1 and MAC2 as 10G Date: Mon, 17 Oct 2022 16:22:39 -0400 Message-Id: <20221017202241.1741671-9-sean.anderson@seco.com> X-Mailer: git-send-email 2.35.1.1320.gc452695387.dirty In-Reply-To: <20221017202241.1741671-1-sean.anderson@seco.com> References: <20221017202241.1741671-1-sean.anderson@seco.com> X-ClientProxiedBy: SJ0PR03CA0251.namprd03.prod.outlook.com (2603:10b6:a03:3a0::16) To DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB7PR03MB4972:EE_|GV1PR03MB8406:EE_ X-MS-Office365-Filtering-Correlation-Id: d675a9f4-500f-41f7-07b0-08dab07d7671 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ULOJ4rjPcy8o+bNJr19jdx2RGpBvIIZoYuLZYVWmh0Cj2ZVehQD8ejX8u7oZtBkInfY0MOCuKCsTQbhC57GiRY6kZtG/yKJP2rViJOz5jtw55QQbxpIEU7Fhj9A+bkdWO8nSP8zKcBs2KTgDOxodv5YIeg85ZAYinMdL1DNpMAGicIQUrHxHiXMryj1eCQROvzPMCtYOtirr8xzbvxwJMB0dJwXRnbzRBGpgWNB/nLbB7suUtHZDf1bty1/w+OSm41ILQtx/G3Lp9+k1AH/XqrW3Wm6W4yPPoEQaWM/rGCzJuhQE38BFgHsjU6XsvwegZYmNsEI5IZFQjCzHi/oHQaiQcxas9w3Mo4pBmbDqeQ5roSe3tLASHfjOp1l5GEuNQPLpbxpX+GaABA8s9GPhQ5f5lVfBuGVuRdpsLtMiU9dmvZWXBVh/AmI7rejRBOHntwxPEIPp6MY0DNkdeg8K3D+5m6DSR0wKPiePgaT647/lcOzaKx8psJf9GHlL6iYsYyu/8AIiGcgt+8QagmB95N0yTgxrSfOfVFQgXwFDDsCs/itk1rBqqLQKvDXGB8y6Dyy7+IaWQE5fJkva53LOFlvYEW5h0NJtG0qKxvPzG/7v8tutA4A5j0q79sJ9yKWFLclRkq9C94AIotYQ6zr2XA6im/nLGEM0dcfCM5psLgjFERDxdm+wMFDGPnP/FnLak1WLTIfbjD5iXC2XcvHk9xaQyL0xcGMLTlEZbISmwacXn5F0NfvXoTwpZzHKvnXBB92W8RYGsQVCCOtzR7/ExQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB7PR03MB4972.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(39850400004)(396003)(366004)(136003)(346002)(376002)(451199015)(36756003)(38350700002)(38100700002)(8936002)(5660300002)(44832011)(83380400001)(86362001)(26005)(6512007)(110136005)(54906003)(186003)(2616005)(1076003)(478600001)(6486002)(316002)(66476007)(66946007)(66556008)(4326008)(8676002)(41300700001)(52116002)(6506007)(2906002)(7416002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: sEGvWZv0+6W3pdoK05nx1t7LhjTBUvsHzihZ43rK3/0+dnBOnMtak3GCbR9iAsFu95+rnfRLk4E2rKnPn3R06qJS6HbrJy6a3+o8WwLxPtYdh90Zsd7ert1RYAze0TODyinyWolUNzF4rxlT5O1tKgON70zb+s4ObxjBPIkUJ2pknMlztTXjomqOnzIMBLN27gCStSRtBICo4OD2GQP0uxHO/2Y1zuvKiTAknMQH4nf3muXmgVFtYLpQ3q68DKCEdJFhnydGVtwb7MHbSgMPurfKgeC/o2gL0kxc6u43tNb+tGOYxY2pVG6qz8Z3syKAhNx1KEAOTG6+tfd9uONQaE4uC52OAxixiQSy3XsaGWL7gPOoVM7BP9o31fyGWurlAA962SxcmcidlFXzOhwFdb9GYjippDvPPQAUKjC7aoAQ0n0cYugV2MCqSn7byimX4SHV55Eu7PpiypyUWOeRlcTp+ovzaTlIZBw4tL7eidmijVXhmewLnFeGEa9Hp7Rqt9DbuMnIZcy+SpcHUO+XgdNIU4VLjGE3bwPtQIZYG7TCV3OOEXNdX4cuGZR/JtgNNYjmBsoHF8WxKDWXy8x+6/hJhcu+1b/ZDuGDLDP0YWp/59sBPFBg6AuHu2FtcY0r0/lEhryjPM2Lyf91nkI1tdM4KlylKsByNBNZkqiArTsu2kLkc6TDFqPlhVgCdcIsYF9L9N0mkx66p2inOZpoZUXgo4JyfzKaBOAQvTOHHg1IW/AJK6L2KUiAStmJApNVm5Un55SoAr3uFSNMIoNBvpmiUlw4zTTOdlm9aNwxwpXTFw2hAGuo4EOD5jLQA9JXIIvH5cOmbVJC73SejiTg01njMA3DWs77JVuykLYboF47Yyp3SnrUPwuc8rDIYqCjO+DQ7ljkL5k7K1mfwmaveiMCfs1h1cmr3jHPIlE9aK3BNx7jDpFYuh7XM7aGWfOMfbX41clFTZ8Yo0VqsVsVwi1K9Ogqh52+rfOyIb7fXcgzIZK/PUAkou1UmnZ037GWuy0DL6OVffpgItNomqOIaxItAY+mm1Rga1YJy1j4ACjDML3J7A7eLIQxNfM/hbmnG053/G0Fl7ZTTD4I6ypmyhqqyuJ0x6iWqWAvdT9ICaLmcFr4S/lcCVdmMWjtxTok3Vr0mLiwmq6IdWxPfedfvXWP3oLYHXVsEaybQI1iGXgsTJ6I6+5ujxGJ3igbxXyoPaOT8rM/k4e+Po1IPRV5jJJ45lihao3Vsovf00xLk4kHgcqjJZ4JQ9ll/FgSFNBDUw7Nxtd6T/qkQb0dsG8akz5x2Ber7N4UfvXyJRI8YV4EnGbd6YAmgzuaVb3Mz/fFUU1F/YznSvQ7b4HMkquynXAmcOMWiM5ACUOZtqfYl/q5mePt5tmc1RbpRBYhSgpOJwoqeyx9cu5iRPoenr6Ovi2sbHJxSOEfvl0laR4YKdQw9a8ji5bZy56KDXDOhMvMoQSgl6jC6W0VX6A2TkIyzka7R/uqtlLOxZ6dKJwc3s+5mpDz8OB3uQxA/XpkYtjSy7AdR7F/GUHd+jZGa/7BBOHt89Tqb7BJ05Ncpu0JH9t1kBhT1LdrdcgXaEmb/34qrM9IBnQ19i2c3sT9XxIh1Q== X-OriginatorOrg: seco.com X-MS-Exchange-CrossTenant-Network-Message-Id: d675a9f4-500f-41f7-07b0-08dab07d7671 X-MS-Exchange-CrossTenant-AuthSource: DB7PR03MB4972.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2022 20:23:33.2428 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bebe97c3-6438-442e-ade3-ff17aa50e733 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: HuDfRfnQYzCvk8brAeOWuPfznQajZG2CVkvWaL9W/5SHOjALLrtviWj0ntLREtHdymBj0zUMjcvSkaN3IqyKgg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR03MB8406 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1746968062721688139?= X-GMAIL-MSGID: =?utf-8?q?1746968062721688139?= On the T208X SoCs, MAC1 and MAC2 support XGMII. Add some new MAC dtsi fragments, and mark the QMAN ports as 10G. Fixes: da414bb923d9 ("powerpc/mpc85xx: Add FSL QorIQ DPAA FMan support to the SoC device tree(s)") Signed-off-by: Sean Anderson --- (no changes since v4) Changes in v4: - New .../boot/dts/fsl/qoriq-fman3-0-10g-2.dtsi | 44 +++++++++++++++++++ .../boot/dts/fsl/qoriq-fman3-0-10g-3.dtsi | 44 +++++++++++++++++++ arch/powerpc/boot/dts/fsl/t2081si-post.dtsi | 4 +- 3 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-2.dtsi create mode 100644 arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-3.dtsi diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-2.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-2.dtsi new file mode 100644 index 000000000000..437dab3fc017 --- /dev/null +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-2.dtsi @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-or-later +/* + * QorIQ FMan v3 10g port #2 device tree stub [ controller @ offset 0x400000 ] + * + * Copyright 2022 Sean Anderson + * Copyright 2012 - 2015 Freescale Semiconductor Inc. + */ + +fman@400000 { + fman0_rx_0x08: port@88000 { + cell-index = <0x8>; + compatible = "fsl,fman-v3-port-rx"; + reg = <0x88000 0x1000>; + fsl,fman-10g-port; + }; + + fman0_tx_0x28: port@a8000 { + cell-index = <0x28>; + compatible = "fsl,fman-v3-port-tx"; + reg = <0xa8000 0x1000>; + fsl,fman-10g-port; + }; + + ethernet@e0000 { + cell-index = <0>; + compatible = "fsl,fman-memac"; + reg = <0xe0000 0x1000>; + fsl,fman-ports = <&fman0_rx_0x08 &fman0_tx_0x28>; + ptp-timer = <&ptp_timer0>; + pcsphy-handle = <&pcsphy0>; + }; + + mdio@e1000 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; + reg = <0xe1000 0x1000>; + fsl,erratum-a011043; /* must ignore read errors */ + + pcsphy0: ethernet-phy@0 { + reg = <0x0>; + }; + }; +}; diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-3.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-3.dtsi new file mode 100644 index 000000000000..ad116b17850a --- /dev/null +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-3.dtsi @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-or-later +/* + * QorIQ FMan v3 10g port #3 device tree stub [ controller @ offset 0x400000 ] + * + * Copyright 2022 Sean Anderson + * Copyright 2012 - 2015 Freescale Semiconductor Inc. + */ + +fman@400000 { + fman0_rx_0x09: port@89000 { + cell-index = <0x9>; + compatible = "fsl,fman-v3-port-rx"; + reg = <0x89000 0x1000>; + fsl,fman-10g-port; + }; + + fman0_tx_0x29: port@a9000 { + cell-index = <0x29>; + compatible = "fsl,fman-v3-port-tx"; + reg = <0xa9000 0x1000>; + fsl,fman-10g-port; + }; + + ethernet@e2000 { + cell-index = <1>; + compatible = "fsl,fman-memac"; + reg = <0xe2000 0x1000>; + fsl,fman-ports = <&fman0_rx_0x09 &fman0_tx_0x29>; + ptp-timer = <&ptp_timer0>; + pcsphy-handle = <&pcsphy1>; + }; + + mdio@e3000 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "fsl,fman-memac-mdio", "fsl,fman-xmdio"; + reg = <0xe3000 0x1000>; + fsl,erratum-a011043; /* must ignore read errors */ + + pcsphy1: ethernet-phy@0 { + reg = <0x0>; + }; + }; +}; diff --git a/arch/powerpc/boot/dts/fsl/t2081si-post.dtsi b/arch/powerpc/boot/dts/fsl/t2081si-post.dtsi index ecbb447920bc..74e17e134387 100644 --- a/arch/powerpc/boot/dts/fsl/t2081si-post.dtsi +++ b/arch/powerpc/boot/dts/fsl/t2081si-post.dtsi @@ -609,8 +609,8 @@ usb1: usb@211000 { /include/ "qoriq-bman1.dtsi" /include/ "qoriq-fman3-0.dtsi" -/include/ "qoriq-fman3-0-1g-0.dtsi" -/include/ "qoriq-fman3-0-1g-1.dtsi" +/include/ "qoriq-fman3-0-10g-2.dtsi" +/include/ "qoriq-fman3-0-10g-3.dtsi" /include/ "qoriq-fman3-0-1g-2.dtsi" /include/ "qoriq-fman3-0-1g-3.dtsi" /include/ "qoriq-fman3-0-1g-4.dtsi" From patchwork Mon Oct 17 20:22:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 3701 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp1629081wrs; Mon, 17 Oct 2022 13:27:55 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6LCvxLrMnCiWlRlm2JcxQNjpzcnQh17+ej7iAwNgfIz24yCJgUycCDOiJ8o9b7TEoNdzdQ X-Received: by 2002:a05:6402:b3c:b0:458:f680:6ab8 with SMTP id bo28-20020a0564020b3c00b00458f6806ab8mr12181847edb.267.1666038475346; Mon, 17 Oct 2022 13:27:55 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1666038475; cv=pass; d=google.com; s=arc-20160816; b=A5eCMp41xg4u9iehAV0EmckFr/sXiT2GxJld8RSkTq5lqMF/or/J6s1At33qPJ4FRd xhthKp1eesxADdcG1bw962uB7/zy+H1Gi1HG3fH+NjnPwCXVffvjmD0g+hF8M5sj1a1E 4XEwvPZIip7Lq+OAF+k/+ehmHDu71Bse1WfjtMcxXx06g1CEUVNXhGa7XFJgCqLH+CpN ybgXhEQhHhAdhCRC81LeENw0YMyepz+hz6+yYalKXMyoEWEgdwxoIltaHpRKNNJUDlRP Sywi3n96VJHUyXaVQk9qvZj1Gbr5mbc09X2/b1kyCcWmfteQeiD/JU25gfxqC4ruO+yE Y82g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=1LpBZZ/E0MzZ0ssr0uah78Z2jasHTDuQGEPDYfnFsYI=; b=fJaeh2BHoSdNipmnK8h5CQVvHYj4/W/DMYkD5Brx9eA9MQfTKmJpWDq8S0XfV++MD3 3ac0Anl3iHYHTwFhnBBoKcDvTR4BIBRIWCQh+Dsj95gLBcTxdBhbtu9AQbB1B9FzloYT m5pcubKZO01YOAcYZCHPJDZI0mQpYanwD/7GVku1XaRkgtw284vBdfUcfRjU0BZ2vSPP JTZb3xkv8TDQuI6PCAh0mtFMFQXRcFQJL6tcuX3olNuo+EVOFhWQTQDi3TagwnFZTJK3 ox+UwJTE3epi1D9EPh70+XzbZbxD6lgh2R1kwie1pkvoGlbHbEWaU3MD+27fxYeeAbfd LBJA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@seco.com header.s=selector1 header.b=Xw3ct1If; arc=pass (i=1 spf=pass spfdomain=seco.com dkim=pass dkdomain=seco.com dmarc=pass fromdomain=seco.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=seco.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id wv2-20020a170907080200b007808a356cb9si10447697ejb.627.2022.10.17.13.27.29; Mon, 17 Oct 2022 13:27:55 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@seco.com header.s=selector1 header.b=Xw3ct1If; arc=pass (i=1 spf=pass spfdomain=seco.com dkim=pass dkdomain=seco.com dmarc=pass fromdomain=seco.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=seco.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230442AbiJQUYg (ORCPT + 99 others); Mon, 17 Oct 2022 16:24:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52822 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231428AbiJQUXo (ORCPT ); Mon, 17 Oct 2022 16:23:44 -0400 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60071.outbound.protection.outlook.com [40.107.6.71]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0E32021E31; Mon, 17 Oct 2022 13:23:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HW3QJwtqHti38Nj+R5q5nf03GIPfH0Bw0dY6jMIry3Zt+S6PP3Q7Td2Dow57B9s41ZiGOhsXUi0FoaBLiskN5H1htXm4n0VGl/0H/hMKdcgyHg9x3OUsVrYTojYjIfubR7ptu7m2uvYuCQmz+ZsutTXqRXinoS9x4DStcDwHCw/V53Ojwv7v0pCChM/QdRdekVOQdMNobAmHsAKRwl/qWzva4/0sP7wmyVCLvP6cf+2vmHvx4zfAzQVUt+FcnOZsWU7PM2JiRatAS/2YgxnyzLtvPfXqXk9SN1cpn4/oHDY5Aqrm+7WphV0S2+OJwshcpSg0lhC9ZCy/oEXsrtvXuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1LpBZZ/E0MzZ0ssr0uah78Z2jasHTDuQGEPDYfnFsYI=; b=Vyzbczkwjkb2B6hyYuRIX3Mdgbn15jcdD0uNjp4PGapxAt6jyKJKonsefdk5mL5N1gdtc9MyEVppUu9WSgghH977IPw5P5KDslXOz6ZHabYIyC3BDSobBtHvV3rQPPI+rAwEwKsCG5ulQCOPUox9g6WI5l8ZKCvpi0oq8kYPT1Mro66B1Ek4C/s78giGkea2TC7YH1OQkQ+WRwK+7ANoBcCfEzcDtM6YI9kwsA0LlWa6nB70NXON1fmOHNXGKCsLINiTD8aTeQaBxGqR/Al7GKFTQjFbtSZgWDLV2Bzjsag4wM64qEmLycZHLaNBiODEOAHxnMafKfWK1JcKZEcDWA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=seco.com; dmarc=pass action=none header.from=seco.com; dkim=pass header.d=seco.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=seco.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1LpBZZ/E0MzZ0ssr0uah78Z2jasHTDuQGEPDYfnFsYI=; b=Xw3ct1IfG+sFCBzlAGomeF5JMh4P3SlUyteiChT0fwL/CW4JkMWkcCC99sOOgYw8wzK0XnJmoWjqqB0+fBQB8sJ8witMRJjaDDFOBqARvFFk0WGvrpJ+vBPfYr14jJuJASMHOBh7rkF+ZNjo/EGmnq0DlOwOze1XbKafZHXGzIOdk+9RM/L0Ukz6D1qIpcYNlytZxjFANKBUFnS2FLEvcmGdFeyFsEtXkGX7TXF43LsnTSMXG+Rt1sgGf4KdRoVf4E/uW01xk+bHmfocMQfQx3yTFNsGoxaEsNss2x16hF4YmiFxnjHMS02wT9MuxaMHdU8y+ZXNPCE5UV+Xe+aq5g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=seco.com; Received: from DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) by GV1PR03MB8406.eurprd03.prod.outlook.com (2603:10a6:150:55::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.26; Mon, 17 Oct 2022 20:23:38 +0000 Received: from DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::204a:de22:b651:f86d]) by DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::204a:de22:b651:f86d%6]) with mapi id 15.20.5723.033; Mon, 17 Oct 2022 20:23:38 +0000 From: Sean Anderson To: "David S . Miller" , Jakub Kicinski , Madalin Bucur , Camelia Alexandra Groza , netdev@vger.kernel.org Cc: Eric Dumazet , "linuxppc-dev @ lists . ozlabs . org" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Russell King , Paolo Abeni , Sean Anderson , Benjamin Herrenschmidt , Krzysztof Kozlowski , Li Yang , Michael Ellerman , Paul Mackerras , Rob Herring , devicetree@vger.kernel.org Subject: [PATCH net-next v7 09/10] powerpc: dts: qoriq: Add nodes for QSGMII PCSs Date: Mon, 17 Oct 2022 16:22:40 -0400 Message-Id: <20221017202241.1741671-10-sean.anderson@seco.com> X-Mailer: git-send-email 2.35.1.1320.gc452695387.dirty In-Reply-To: <20221017202241.1741671-1-sean.anderson@seco.com> References: <20221017202241.1741671-1-sean.anderson@seco.com> X-ClientProxiedBy: SJ0PR03CA0251.namprd03.prod.outlook.com (2603:10b6:a03:3a0::16) To DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB7PR03MB4972:EE_|GV1PR03MB8406:EE_ X-MS-Office365-Filtering-Correlation-Id: 4ce757c7-4a37-4666-7836-08dab07d7937 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: gMbEiNDrN9/NgX+29Ru3IQrs6my+L+OMnMfLtK7v7NS6DyjBCxjMQKmVRPH/bfAYHjEBmxwXhmnSjW5XZt4y1L5sOn/oRU1lsbf2g23D9L844+aeFVh9olt1Kz0Oo8TcndUjKFsdp+KRpV98efSdYgUkosAWk2vEAMwtV7XopuoeCXLh3P1sosR62Kynqq+SWuKPnSHpKo6czW46fUJTykiTwkzD7T1LV6PVK5l1gQXPzyuoqXv/weIfb9NWJt+To9eM5W9yrwZ8u9YRNituadwIlqXyf5eCkMFh6DHlyA62wjjG+4r5Gh4ofywYGPv6c+XYqF+C3r/pzwV/rX7JPCN4s4dDnhaMDJkZN9gjTfpQig6QCvorxOGFE3t/uRDAhZOGeSA9p9Tb+qIrss5L0rl4d/fWozIv2daQJnwXu5OVDexSZGhVtI4vGz67x3krTQZqcRwHjJkDONkOlkZ/br0zK+GWIBkiA6DVPvyqj/mvq1iRo4EpbVYupC0eOjjDEKDVhsLYzCkZH04Ml2+w04cAKKYQ2Mbch2Pizcgp0ERlwMOcVA48WipKcOJQBxg8cT/kYiapj86/S7QJcupcBGk1VDPNnZwGCcpp4lGHRQQib2DiQ1YG8vveZKCxMA3Llkmblornka58/Vn+AzRaMJrkvhvLGmOEEKyKscVANACDbHw4nHcuZSojhfeJzwEtlUIPp5pZSiOgGDemv17c6Fh7+CRHWU5zQDFYTHKG2vDzHsrkOQasHoS2bU9QjOAAJd6ru2FSeXfn2HIgvz9u/w== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB7PR03MB4972.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(39850400004)(396003)(366004)(136003)(346002)(376002)(451199015)(36756003)(38350700002)(38100700002)(8936002)(5660300002)(30864003)(44832011)(83380400001)(86362001)(26005)(6512007)(110136005)(54906003)(6666004)(186003)(2616005)(1076003)(478600001)(6486002)(316002)(66476007)(66946007)(66556008)(4326008)(8676002)(41300700001)(52116002)(6506007)(2906002)(7416002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: TOrhPgbg932Rd9t2kUMlqsIAD6IIXX/8vDnsYhpUeczrVxvmuNdlhylAh8hLis/ieZl3OqBeVpbYRuzM6l4dA5Gu07pOTwCHAtTR7+anDueBMy6u9ZPa7RHZSIZ7AadrtTL2TxFs/syDqFPYFjsPBQkHCpaULj1nDEEv7pnWq7kjlbkoSpxEEEtCcUlq9Mpx1e77Sl7bxeWnWXJUVlJjcv9ff6aPjk3gkiJbBbPLZ3DswTbZuJlZo4V19m6KVajNHAhtvowO1iN21Xa6BvDsXqolIvLWhxDv7PEHmvvkF7dXqnZ6yMiSfpwq7b9XyooXKPn0iR21ouWKJ2860QSZFE3I2lbjVB0yOJFM44VjApRuQYULsfrOLiPNL1tc4/WG44QMX6L+qSqENcyo5k07cC/SPDTKmRyfwgdxjpel1m7DhF2efCDi7ShUAazCoNxnC+Z4balDzJymOgN+6ZGvJx2Ue7kzqNhI8BMf7uk/p3ZN4GtHe3mGHgBqi+hSqRYwIV9TDVaHouRUkWmbQ9MaIhdXaXV0xF7yOp4FYvWCskik/5DdZ1ZIpGsfFoPljx5dEQ5FOvCXXNIsQtclyk9voA+Tq+aYfyEYnnmW6R0Q/C+cvE8lrXn+T0Qo+MMUPs069YgLOsNybxBuUqgKpY869DPDJy2dEkT1wf/D8+LO+qyDIKs1zMHfv+WkZPVQ55C7KPfiKWRjI5oXLQpiNPOcT5sqjU+nzspNQNsZJPZxJno6N/FwKv47RdM8Qe+nvIGmK1CXcfOccyU/PYFLj9A2blcMSLWzMXeUcGmdHy73SJ9JCTgyqbtqzPfQRIbl4biUlPqL76/GQW5jJcEI/H8UsjvanbXN8eUe6og9zOFgbcbF0xUc4GF+K0WZmn0aLtIs7PMMoREJZ8cF/vJ0glSYR2sAK02kXBVsuFstHdn4Uq4v9IQHrakfI2LeElFSiA1Cr58+7DnkXtPJVAmkRY4yOD692CVe0r+CDDx+1GEP1+fg60UBjxxVxe0mDiuMR8iFqyE/Ntc7BuvGVZkHBbTzMBaT4bCTmn/d9tRtXkWQT2FEiTo2u63v8jm3/A3P7yHrLP8qeEf+Yho715tCjQMw/8iUQppOJJqoTnlDVTRctKAKEY9uYiIcGZuWC1e3WAwP9xrFf1yh2d7/ucNiGVtNaB3Nna6UsZR/KYf+ooZIFplVGPRMsJyVJwjXwkWmN6r+Cf+bv15QrjtOKr/ri0n2sgZAbRXNDD3pW3fD8BUZhfH+d1Lq+XQp3TaLTP/W8j1CP5u5Lw6nPB5zQIOrIR9PdcqWbgStPauu9+vj/4l0XkGpsPNaqjXd6O/xWJ7/27gvp7X5ajGMzJSta1f5+KkxkuXTS1dD1abguc0cYLy6t8w3fVW/oW/D0J4IHvhfo7Irs402paf7jl2+TBpwo1VAmD4URWV3lAnc1r1yOY8htXGZ9uvkywe2GhulLLFh9eQQxq+3Iszn0eWVEywgVTYdll2ELu2nK/r6LJ2Cmz9fvv3JKO64E+MMcN4bw9cqKVRrsyHbAiop7XUAd5yMvtiDqa+4imwFQTqXontomJQhdmKRNVd4OHXwvDK4E0l14tzUf/S8fZCqR5YcLQrKvFj7eQ== X-OriginatorOrg: seco.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4ce757c7-4a37-4666-7836-08dab07d7937 X-MS-Exchange-CrossTenant-AuthSource: DB7PR03MB4972.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2022 20:23:38.0550 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bebe97c3-6438-442e-ade3-ff17aa50e733 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: LkN0Sz/M3m63yXc0+goC4q5nlcLYktdUXMyNSEHcFlvuu5+0RPnFw18mSAy9jeQPz7Vq0ataPVCPq40cdQd8TQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR03MB8406 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1746967960359550270?= X-GMAIL-MSGID: =?utf-8?q?1746967960359550270?= Now that we actually read registers from QSGMII PCSs, it's important that we have the correct address (instead of hoping that we're the MAC with all the QSGMII PCSs on its bus). This adds nodes for the QSGMII PCSs. They have the same addresses on all SoCs (e.g. if QSGMIIA is present it's used for MACs 1 through 4). Since the first QSGMII PCSs share an address with the SGMII and XFI PCSs, we only add new nodes for PCSs 2-4. This avoids address conflicts on the bus. Signed-off-by: Sean Anderson --- (no changes since v4) Changes in v4: - Add XFI PCS for t208x MAC1/MAC2 Changes in v3: - Add compatibles for QSGMII PCSs - Split arm and powerpcs dts updates Changes in v2: - New .../boot/dts/fsl/qoriq-fman3-0-10g-0-best-effort.dtsi | 3 ++- arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0.dtsi | 10 +++++++++- .../boot/dts/fsl/qoriq-fman3-0-10g-1-best-effort.dtsi | 10 +++++++++- arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1.dtsi | 10 +++++++++- arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-2.dtsi | 3 ++- arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-3.dtsi | 3 ++- arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-0.dtsi | 3 ++- arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-1.dtsi | 10 +++++++++- arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-2.dtsi | 10 +++++++++- arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-3.dtsi | 10 +++++++++- arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-4.dtsi | 3 ++- arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-5.dtsi | 10 +++++++++- arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-0.dtsi | 10 +++++++++- arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-1.dtsi | 10 +++++++++- arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-0.dtsi | 3 ++- arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-1.dtsi | 10 +++++++++- arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-2.dtsi | 10 +++++++++- arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-3.dtsi | 10 +++++++++- arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-4.dtsi | 3 ++- arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-5.dtsi | 10 +++++++++- 20 files changed, 131 insertions(+), 20 deletions(-) diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0-best-effort.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0-best-effort.dtsi index baa0c503e741..7e70977f282a 100644 --- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0-best-effort.dtsi +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0-best-effort.dtsi @@ -55,7 +55,8 @@ ethernet@e0000 { reg = <0xe0000 0x1000>; fsl,fman-ports = <&fman0_rx_0x08 &fman0_tx_0x28>; ptp-timer = <&ptp_timer0>; - pcsphy-handle = <&pcsphy0>; + pcsphy-handle = <&pcsphy0>, <&pcsphy0>; + pcs-handle-names = "sgmii", "qsgmii"; }; mdio@e1000 { diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0.dtsi index 93095600e808..5f89f7c1761f 100644 --- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0.dtsi +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-0.dtsi @@ -52,7 +52,15 @@ ethernet@f0000 { compatible = "fsl,fman-memac"; reg = <0xf0000 0x1000>; fsl,fman-ports = <&fman0_rx_0x10 &fman0_tx_0x30>; - pcsphy-handle = <&pcsphy6>; + pcsphy-handle = <&pcsphy6>, <&qsgmiib_pcs2>, <&pcsphy6>; + pcs-handle-names = "sgmii", "qsgmii", "xfi"; + }; + + mdio@e9000 { + qsgmiib_pcs2: ethernet-pcs@2 { + compatible = "fsl,lynx-pcs"; + reg = <2>; + }; }; mdio@f1000 { diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1-best-effort.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1-best-effort.dtsi index ff4bd38f0645..71eb75e82c2e 100644 --- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1-best-effort.dtsi +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1-best-effort.dtsi @@ -55,7 +55,15 @@ ethernet@e2000 { reg = <0xe2000 0x1000>; fsl,fman-ports = <&fman0_rx_0x09 &fman0_tx_0x29>; ptp-timer = <&ptp_timer0>; - pcsphy-handle = <&pcsphy1>; + pcsphy-handle = <&pcsphy1>, <&qsgmiia_pcs1>; + pcs-handle-names = "sgmii", "qsgmii"; + }; + + mdio@e1000 { + qsgmiia_pcs1: ethernet-pcs@1 { + compatible = "fsl,lynx-pcs"; + reg = <1>; + }; }; mdio@e3000 { diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1.dtsi index 1fa38ed6f59e..fb7032ddb7fc 100644 --- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1.dtsi +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-1.dtsi @@ -52,7 +52,15 @@ ethernet@f2000 { compatible = "fsl,fman-memac"; reg = <0xf2000 0x1000>; fsl,fman-ports = <&fman0_rx_0x11 &fman0_tx_0x31>; - pcsphy-handle = <&pcsphy7>; + pcsphy-handle = <&pcsphy7>, <&qsgmiib_pcs3>, <&pcsphy7>; + pcs-handle-names = "sgmii", "qsgmii", "xfi"; + }; + + mdio@e9000 { + qsgmiib_pcs3: ethernet-pcs@3 { + compatible = "fsl,lynx-pcs"; + reg = <3>; + }; }; mdio@f3000 { diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-2.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-2.dtsi index 437dab3fc017..6b3609574b0f 100644 --- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-2.dtsi +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-2.dtsi @@ -27,7 +27,8 @@ ethernet@e0000 { reg = <0xe0000 0x1000>; fsl,fman-ports = <&fman0_rx_0x08 &fman0_tx_0x28>; ptp-timer = <&ptp_timer0>; - pcsphy-handle = <&pcsphy0>; + pcsphy-handle = <&pcsphy0>, <&pcsphy0>; + pcs-handle-names = "sgmii", "xfi"; }; mdio@e1000 { diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-3.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-3.dtsi index ad116b17850a..28ed1a85a436 100644 --- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-3.dtsi +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-10g-3.dtsi @@ -27,7 +27,8 @@ ethernet@e2000 { reg = <0xe2000 0x1000>; fsl,fman-ports = <&fman0_rx_0x09 &fman0_tx_0x29>; ptp-timer = <&ptp_timer0>; - pcsphy-handle = <&pcsphy1>; + pcsphy-handle = <&pcsphy1>, <&pcsphy1>; + pcs-handle-names = "sgmii", "xfi"; }; mdio@e3000 { diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-0.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-0.dtsi index a8cc9780c0c4..1089d6861bfb 100644 --- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-0.dtsi +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-0.dtsi @@ -51,7 +51,8 @@ ethernet@e0000 { reg = <0xe0000 0x1000>; fsl,fman-ports = <&fman0_rx_0x08 &fman0_tx_0x28>; ptp-timer = <&ptp_timer0>; - pcsphy-handle = <&pcsphy0>; + pcsphy-handle = <&pcsphy0>, <&pcsphy0>; + pcs-handle-names = "sgmii", "qsgmii"; }; mdio@e1000 { diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-1.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-1.dtsi index 8b8bd70c9382..a95bbb4fc827 100644 --- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-1.dtsi +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-1.dtsi @@ -51,7 +51,15 @@ ethernet@e2000 { reg = <0xe2000 0x1000>; fsl,fman-ports = <&fman0_rx_0x09 &fman0_tx_0x29>; ptp-timer = <&ptp_timer0>; - pcsphy-handle = <&pcsphy1>; + pcsphy-handle = <&pcsphy1>, <&qsgmiia_pcs1>; + pcs-handle-names = "sgmii", "qsgmii"; + }; + + mdio@e1000 { + qsgmiia_pcs1: ethernet-pcs@1 { + compatible = "fsl,lynx-pcs"; + reg = <1>; + }; }; mdio@e3000 { diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-2.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-2.dtsi index 619c880b54d8..7d5af0147a25 100644 --- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-2.dtsi +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-2.dtsi @@ -51,7 +51,15 @@ ethernet@e4000 { reg = <0xe4000 0x1000>; fsl,fman-ports = <&fman0_rx_0x0a &fman0_tx_0x2a>; ptp-timer = <&ptp_timer0>; - pcsphy-handle = <&pcsphy2>; + pcsphy-handle = <&pcsphy2>, <&qsgmiia_pcs2>; + pcs-handle-names = "sgmii", "qsgmii"; + }; + + mdio@e1000 { + qsgmiia_pcs2: ethernet-pcs@2 { + compatible = "fsl,lynx-pcs"; + reg = <2>; + }; }; mdio@e5000 { diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-3.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-3.dtsi index d7ebb73a400d..61e5466ec854 100644 --- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-3.dtsi +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-3.dtsi @@ -51,7 +51,15 @@ ethernet@e6000 { reg = <0xe6000 0x1000>; fsl,fman-ports = <&fman0_rx_0x0b &fman0_tx_0x2b>; ptp-timer = <&ptp_timer0>; - pcsphy-handle = <&pcsphy3>; + pcsphy-handle = <&pcsphy3>, <&qsgmiia_pcs3>; + pcs-handle-names = "sgmii", "qsgmii"; + }; + + mdio@e1000 { + qsgmiia_pcs3: ethernet-pcs@3 { + compatible = "fsl,lynx-pcs"; + reg = <3>; + }; }; mdio@e7000 { diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-4.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-4.dtsi index b151d696a069..3ba0cdafc069 100644 --- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-4.dtsi +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-4.dtsi @@ -51,7 +51,8 @@ ethernet@e8000 { reg = <0xe8000 0x1000>; fsl,fman-ports = <&fman0_rx_0x0c &fman0_tx_0x2c>; ptp-timer = <&ptp_timer0>; - pcsphy-handle = <&pcsphy4>; + pcsphy-handle = <&pcsphy4>, <&pcsphy4>; + pcs-handle-names = "sgmii", "qsgmii"; }; mdio@e9000 { diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-5.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-5.dtsi index adc0ae0013a3..51748de0a289 100644 --- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-5.dtsi +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-0-1g-5.dtsi @@ -51,7 +51,15 @@ ethernet@ea000 { reg = <0xea000 0x1000>; fsl,fman-ports = <&fman0_rx_0x0d &fman0_tx_0x2d>; ptp-timer = <&ptp_timer0>; - pcsphy-handle = <&pcsphy5>; + pcsphy-handle = <&pcsphy5>, <&qsgmiib_pcs1>; + pcs-handle-names = "sgmii", "qsgmii"; + }; + + mdio@e9000 { + qsgmiib_pcs1: ethernet-pcs@1 { + compatible = "fsl,lynx-pcs"; + reg = <1>; + }; }; mdio@eb000 { diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-0.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-0.dtsi index 435047e0e250..ee4f5170f632 100644 --- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-0.dtsi +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-0.dtsi @@ -52,7 +52,15 @@ ethernet@f0000 { compatible = "fsl,fman-memac"; reg = <0xf0000 0x1000>; fsl,fman-ports = <&fman1_rx_0x10 &fman1_tx_0x30>; - pcsphy-handle = <&pcsphy14>; + pcsphy-handle = <&pcsphy14>, <&qsgmiid_pcs2>, <&pcsphy14>; + pcs-handle-names = "sgmii", "qsgmii", "xfi"; + }; + + mdio@e9000 { + qsgmiid_pcs2: ethernet-pcs@2 { + compatible = "fsl,lynx-pcs"; + reg = <2>; + }; }; mdio@f1000 { diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-1.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-1.dtsi index c098657cca0a..83d2e0ce8f7b 100644 --- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-1.dtsi +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-10g-1.dtsi @@ -52,7 +52,15 @@ ethernet@f2000 { compatible = "fsl,fman-memac"; reg = <0xf2000 0x1000>; fsl,fman-ports = <&fman1_rx_0x11 &fman1_tx_0x31>; - pcsphy-handle = <&pcsphy15>; + pcsphy-handle = <&pcsphy15>, <&qsgmiid_pcs3>, <&pcsphy15>; + pcs-handle-names = "sgmii", "qsgmii", "xfi"; + }; + + mdio@e9000 { + qsgmiid_pcs3: ethernet-pcs@3 { + compatible = "fsl,lynx-pcs"; + reg = <3>; + }; }; mdio@f3000 { diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-0.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-0.dtsi index 9d06824815f3..3132fc73f133 100644 --- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-0.dtsi +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-0.dtsi @@ -51,7 +51,8 @@ ethernet@e0000 { reg = <0xe0000 0x1000>; fsl,fman-ports = <&fman1_rx_0x08 &fman1_tx_0x28>; ptp-timer = <&ptp_timer1>; - pcsphy-handle = <&pcsphy8>; + pcsphy-handle = <&pcsphy8>, <&pcsphy8>; + pcs-handle-names = "sgmii", "qsgmii"; }; mdio@e1000 { diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-1.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-1.dtsi index 70e947730c4b..75e904d96602 100644 --- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-1.dtsi +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-1.dtsi @@ -51,7 +51,15 @@ ethernet@e2000 { reg = <0xe2000 0x1000>; fsl,fman-ports = <&fman1_rx_0x09 &fman1_tx_0x29>; ptp-timer = <&ptp_timer1>; - pcsphy-handle = <&pcsphy9>; + pcsphy-handle = <&pcsphy9>, <&qsgmiic_pcs1>; + pcs-handle-names = "sgmii", "qsgmii"; + }; + + mdio@e1000 { + qsgmiic_pcs1: ethernet-pcs@1 { + compatible = "fsl,lynx-pcs"; + reg = <1>; + }; }; mdio@e3000 { diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-2.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-2.dtsi index ad96e6529595..69f2cc7b8f19 100644 --- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-2.dtsi +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-2.dtsi @@ -51,7 +51,15 @@ ethernet@e4000 { reg = <0xe4000 0x1000>; fsl,fman-ports = <&fman1_rx_0x0a &fman1_tx_0x2a>; ptp-timer = <&ptp_timer1>; - pcsphy-handle = <&pcsphy10>; + pcsphy-handle = <&pcsphy10>, <&qsgmiic_pcs2>; + pcs-handle-names = "sgmii", "qsgmii"; + }; + + mdio@e1000 { + qsgmiic_pcs2: ethernet-pcs@2 { + compatible = "fsl,lynx-pcs"; + reg = <2>; + }; }; mdio@e5000 { diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-3.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-3.dtsi index 034bc4b71f7a..b3aaf01d7da0 100644 --- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-3.dtsi +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-3.dtsi @@ -51,7 +51,15 @@ ethernet@e6000 { reg = <0xe6000 0x1000>; fsl,fman-ports = <&fman1_rx_0x0b &fman1_tx_0x2b>; ptp-timer = <&ptp_timer1>; - pcsphy-handle = <&pcsphy11>; + pcsphy-handle = <&pcsphy11>, <&qsgmiic_pcs3>; + pcs-handle-names = "sgmii", "qsgmii"; + }; + + mdio@e1000 { + qsgmiic_pcs3: ethernet-pcs@3 { + compatible = "fsl,lynx-pcs"; + reg = <3>; + }; }; mdio@e7000 { diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-4.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-4.dtsi index 93ca23d82b39..18e020432807 100644 --- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-4.dtsi +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-4.dtsi @@ -51,7 +51,8 @@ ethernet@e8000 { reg = <0xe8000 0x1000>; fsl,fman-ports = <&fman1_rx_0x0c &fman1_tx_0x2c>; ptp-timer = <&ptp_timer1>; - pcsphy-handle = <&pcsphy12>; + pcsphy-handle = <&pcsphy12>, <&pcsphy12>; + pcs-handle-names = "sgmii", "qsgmii"; }; mdio@e9000 { diff --git a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-5.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-5.dtsi index 23b3117a2fd2..55f329d13f19 100644 --- a/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-5.dtsi +++ b/arch/powerpc/boot/dts/fsl/qoriq-fman3-1-1g-5.dtsi @@ -51,7 +51,15 @@ ethernet@ea000 { reg = <0xea000 0x1000>; fsl,fman-ports = <&fman1_rx_0x0d &fman1_tx_0x2d>; ptp-timer = <&ptp_timer1>; - pcsphy-handle = <&pcsphy13>; + pcsphy-handle = <&pcsphy13>, <&qsgmiid_pcs1>; + pcs-handle-names = "sgmii", "qsgmii"; + }; + + mdio@e9000 { + qsgmiid_pcs1: ethernet-pcs@1 { + compatible = "fsl,lynx-pcs"; + reg = <1>; + }; }; mdio@eb000 { From patchwork Mon Oct 17 20:22:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 3702 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4ac7:0:0:0:0:0 with SMTP id y7csp1629112wrs; Mon, 17 Oct 2022 13:28:01 -0700 (PDT) X-Google-Smtp-Source: AMsMyM75gGXllvVJCcegKE7msL4WeZiRO1m17FaNWBojSxAouC6X3eqSBwGW4GhEnioMxKctf3+8 X-Received: by 2002:a17:907:72d2:b0:78d:4c16:a68d with SMTP id du18-20020a17090772d200b0078d4c16a68dmr10085589ejc.401.1666038480868; Mon, 17 Oct 2022 13:28:00 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1666038480; cv=pass; d=google.com; s=arc-20160816; b=lPjF8g4aWI8GiczsurTZbU1Kd3C7m7dRSQgcaazOy9fyLWiWBGuN8Sr5wv2Fok/TPx VYMArSMsQumVUbVbLZ5QZ6hoT3Uyy1MEUcO79kWSHBsab+waDvn1GvtiGMViOSE56XiR 8I1LpXh2WR6EXQ+aIVa8sfzD4Ku7okvyzb5sauS7pv3YkLKftWGlMXj6rth423YwbeI3 xv0Dl69vaykr9uMZTFJl8l/MA7wG89PJBCrZzePyxkaiPsV0YEyAdHbglfOYbp1HzR2u CrFhLEAHc1+2YWgveL/ky2RcTedkST2f6Z72Ym4jh0utH8wvjcKgZpLLlfR7shexn3ne zH/A== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=U8mr+E5E/bquLjHtd3y1fs2FBigd04YzSdV1VetNIuY=; b=eZx+Wd/QPFH7UeTN8yZh8ClDJRKTlGzBbIVvBN2hOntr9GGyG/f8kKazcwfjGQqo+e yaZqOKfCrd5N906Jeqqa9873T2CWITDM7s8QdNsOLHfF7iGSJuJzgROqmmNFvypRdaNB +gK8fbNW+F64yMmb52w/AI4BHcYzEaQrEzYAgW1nIAkbZ8WhJ2mhgVRCM+97plOdyhu4 5iaIw6mxJBhboGL2T/224aSgKr4TheTZJpA81zpuEJ9eqj/wLCpcPhXCC22LsATcLsaH D06qJJ02bHtVZ1aV+6E/NIGDZOwVsW+LMYm8ET7NKq7pYK4PUZZ7HbJZIv/1Nn4ywhFl eo5Q== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@seco.com header.s=selector1 header.b=Z8fl6nKE; arc=pass (i=1 spf=pass spfdomain=seco.com dkim=pass dkdomain=seco.com dmarc=pass fromdomain=seco.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=seco.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id y3-20020aa7c243000000b00457263f9ee0si8328052edo.93.2022.10.17.13.27.34; Mon, 17 Oct 2022 13:28:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@seco.com header.s=selector1 header.b=Z8fl6nKE; arc=pass (i=1 spf=pass spfdomain=seco.com dkim=pass dkdomain=seco.com dmarc=pass fromdomain=seco.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=seco.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230493AbiJQUYx (ORCPT + 99 others); Mon, 17 Oct 2022 16:24:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53546 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230350AbiJQUXt (ORCPT ); Mon, 17 Oct 2022 16:23:49 -0400 Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-eopbgr140085.outbound.protection.outlook.com [40.107.14.85]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E20473FA1A; Mon, 17 Oct 2022 13:23:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kxp1ewuhFZ2l7FGQE3hw5EF0veQd7NvcWioMUgkQHcjuihU1I47LeDhNXx+F4Kg8bmQF/lrZj2m/2Esoq7HVm7j/5TGBBW/Ue+CyOezfGGCJeWvUPSESIh8vNUh46+sAUDdVY5OZ4meaQPWJQV+CXxqBhn+OGg+Dgpch2tXauXwRRValWdhmqR2tAgNZEX5DzEBkuebLrp7jKUN6dzdSERak3hHjuw4f6whqcvoVmZ19n9QHGA7H2qVUgC+nf618isKh+wxSaMxPpOCZXBOBfnzeFH2KfvKIa07zW25F0eN0Pq92n+ZPvfWroSDdRq30JyYwLyVzqNH0ElY+6EvnXg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=U8mr+E5E/bquLjHtd3y1fs2FBigd04YzSdV1VetNIuY=; b=TA3uaoVYHLTXdfGsuOyToUaa3seK0W5pwUHlLwSJsPy6H0qgnauAhna4Jxn9+pMc8qgUQbfyX8GVSQ7mQjkzUnRRXFO38QdH7pkzZX7fs+Mm4LzW81W9wnCkIfPLY9o+/aGyzV3VHF3voVI5TWJwOGgS2RA6FaIN8VxlXscEB9X0Fc9LwduD5cr2BUS9aggHuCE4ZyGYL9bSnaZkQ79mjsscLJSjGjSutn+nbGFGPw0Ecqs7vxDw469ftH4lGECmlhkU+fi49bCCJzUSBOZOz6djbsc7mLZErcflvmoHM5yRC88T2LMdpkkSC5rpvuGq2YWrXL1QWvViYNu6obkpQA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=seco.com; dmarc=pass action=none header.from=seco.com; dkim=pass header.d=seco.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=seco.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=U8mr+E5E/bquLjHtd3y1fs2FBigd04YzSdV1VetNIuY=; b=Z8fl6nKEyhMX0e+PrxKe3MiRCWjmx9duO9ilnTQ21mBW6erz/r2tSsyBdqGq1jze1WRI9PqNWtc9+/6qac6gODLSoz+byfD6Qwn94DZ3pE8ENlU8DtEs+GVbQBIiDff2EbNbb+rpZeEtmiPLP6tK4DAOSjUnZVoGkK3F94pcRaaL/zAX7D/YUTiunyvkEgUhNYBDbAo0kcHKwM7cQeYmwLkXYehq+lIhgb0m06M9hT8saQJNoWbCouudTsm9Yl1qdlIU1yv3kkICN3qsKhgEYILmIoi1K2vTCDDDtO5X9jtdaOycOuW0zEN5qpk8kuPXPUGtTsOcSNfOGixWO69oeg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=seco.com; Received: from DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) by AM9PR03MB7379.eurprd03.prod.outlook.com (2603:10a6:20b:268::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.29; Mon, 17 Oct 2022 20:23:43 +0000 Received: from DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::204a:de22:b651:f86d]) by DB7PR03MB4972.eurprd03.prod.outlook.com ([fe80::204a:de22:b651:f86d%6]) with mapi id 15.20.5723.033; Mon, 17 Oct 2022 20:23:43 +0000 From: Sean Anderson To: "David S . Miller" , Jakub Kicinski , Madalin Bucur , Camelia Alexandra Groza , netdev@vger.kernel.org Cc: Eric Dumazet , "linuxppc-dev @ lists . ozlabs . org" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Russell King , Paolo Abeni , Sean Anderson , Benjamin Herrenschmidt , Krzysztof Kozlowski , Li Yang , Michael Ellerman , Paul Mackerras , Rob Herring , Shawn Guo , devicetree@vger.kernel.org Subject: [PATCH net-next v7 10/10] arm64: dts: layerscape: Add nodes for QSGMII PCSs Date: Mon, 17 Oct 2022 16:22:41 -0400 Message-Id: <20221017202241.1741671-11-sean.anderson@seco.com> X-Mailer: git-send-email 2.35.1.1320.gc452695387.dirty In-Reply-To: <20221017202241.1741671-1-sean.anderson@seco.com> References: <20221017202241.1741671-1-sean.anderson@seco.com> X-ClientProxiedBy: SJ0PR03CA0251.namprd03.prod.outlook.com (2603:10b6:a03:3a0::16) To DB7PR03MB4972.eurprd03.prod.outlook.com (2603:10a6:10:7d::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB7PR03MB4972:EE_|AM9PR03MB7379:EE_ X-MS-Office365-Filtering-Correlation-Id: b498ea2e-3b6d-481e-9711-08dab07d7c2d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: F1pcQrcsYwJWg5vkzFgnmGM7kWahJypU/CN9RbJYUhbJkygbGjKujpL+cIku+95w6QX8gCc2lG73qvMPVGZcALoJvDuvjIiDGFV5B5D8QXb1QdRCo/TSiBdhtsBn4BrS3HP3gZSPdDSxCQ8BwWvSyjxEJsbhDdFOw9Fc8hxsIQqATLdy3muJITwsT9BI4qe3eOXxWG022Rd4E+pcuM7M1DY/JZsbuppmzkhb1eUNQKVv1s4Q5OBptOrLvfHQLg0mf7+kKTipoF0fWfOSYKJ0RjjHfpQyH53nI9bqzVSb4mUt+31SC3PwSQNtckTYX4fkjRtSthQPP75HBm4zvHLuV04ssKfMjCdLpvfyMFthogoYieNjWQTZn5S2tTXz1uEjNxrnCwz7KzAcGLhSoJOFEJ0ZxiCFe8gYPaEOZNFfyJFJtnev6uEYC0hjYCLolPpBw3R0LAcWY3/6iGCudjseLRRV1MgMbiqymGFY4Z+3wSgb9SXgZ7FVcTy4nj3HtsvtGcZ6KCIDuDssaHMNX++ix9bPKYUR5/sAHy2l7ClS4C1aztUOvBeScN0BsiO25rkfYAuo2e+c/juxqwIJQNWX3gg8f8Vf0utHBYbziltGH69Ok4NxcrN15xbfPxn/WCGUThYKMl/eQk5F7n3iiOwsTrYxvKOt289IgCPZPqN/D2O5N9sIeVy4UuXjTVEBQyraSHd4aJW0anddJdd3SDiWQ2XaxO6u2D14M3le97jud89KyRp4/zh801JErGW+OsiYvexlcrCXczYQyFfQpQEKuw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB7PR03MB4972.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(346002)(396003)(39850400004)(136003)(376002)(366004)(451199015)(36756003)(86362001)(38350700002)(38100700002)(478600001)(110136005)(1076003)(186003)(54906003)(316002)(66946007)(44832011)(5660300002)(7416002)(8936002)(2906002)(2616005)(66476007)(6486002)(4326008)(66556008)(8676002)(41300700001)(6506007)(6512007)(26005)(52116002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 8PfQyK5HJ5bS/28OFXJ+fd1mKEuQxJhpOvOxiTzZYZHkPCGm0AnsRSdOxbJFXVrS3QKa4v2bco8mpgbpbWyQUYkUDSmB2AdT9jjCsatJ0KJBwNCu2o4Kj3HrK+UIlWcgE8Mx6O/iu8dcrsvju63Pd21HyliZjpI3zu6HIA01mpUnr3tlvOfIbazrPpuJRlrI16C8UVKsGI01vV5Iz10I8aKPnQsnIKiofto7s1C0l0RDoQQc2yaU3cqgCLLa9CpZIT64SsvOg9SgkitrYqvsIuVbIAu/PEpH/BzEgi9yQTvrzeccsHGhntOqA1j1d372cIsTvMNtEznx7uFwiPkM6+jlOApRYE86y3+Zof7eWqrgVfJiUx8Gx+rSvyrHuNVhsboxeOe/qCv+bGXJjmrswPsX2/nqtYs6IxxCW47+C59RGtRRnkqa8rdcxNPZBP4OuGrMZwXQh8acXZ5hFShImkkMUPAtAIEEffqM7U5TkOiYzGjKhRV5/YI/PN6MYkYeX6eXkxY8rq0f5IzGIx+MFTiCkdsZBnUa9tpiEfTlxd+7IKi959Tzi+DUaRRL3eZltxVBeDpfJlp0fxqxa+T6UZvWOC2nvZIFUEMlhP5NY+TYUWSoZzEJCp5pNkcz1qQY+Q0Gn20HqYAsU8GcE5bwwUd0fKTFkMRbZcSVR13KoObI/6IIuGSIgSaN+yseLsp28ONr/gGEBeO0gClLCgTsXOBQqKGRNUn3L4Q3P0ixIJzgKVnbX7OpaICINAs9Bp45VoUHoy6LnkZ6oTGxtGx3NxM8NIxP/UCn7icOezTNRIBcCGtAl4HN6eCXdFbhnAm5ddgBZOSrBHml+FXk4thBhUH8fgQod0pAx49XlER4kLctwqOjBSte98vMrsBYnPHPw00EsOaRnFVFYsX118FODoMzdEfu1jaz2hXnguiTo6dJ1shHKikZXsymj4eZrUtybMDhfhA3SBrq0s05NagW0ePcSCRJLJ4Xr0no2ZiHjbBHOonAYeI2jB3ZVjd1JGMf8FIbe5TIuoB++sa6u4LLC0fWM4XGPgVwa74d+rTrwkA+3fm+qoMVrRHsdZC9QnJu3cGLsEKco20o83rJa/gyX8mApXumRCQG70110dFX+0HlMUSelPgKz6c6/vgkjVKWm6NPFlXZV8NBwhMAII1ijJCUzjjqiUqmNp0zK9XAfzHfAomVvL1GE271mQxElMIGFDXDErP8TsQQpf3JAZHRHRTduYOQyV0DUjnRHURdQKNc2ABO8OWLJ/B0ucWeu0ZKYmoO7tgXaYAHkKjVOqaTgrh7Fw/r/KI5bBoZYpbZzLkNI1DOzs5X6Kt+ce8VTSbC3YpOOZj+a6jEyU8kB/DgKtEDnijrx6g7zQOs5L33oEvCxFfvb/BuyCSlhw1iMyHztIpZVmXite3Bc/j/khl5+p6nr08XnRVgt61cYifKaKp1KUG1wMUgAnIUxJ+4ybEyzqFDM9ceZzY889KdS4DVjBuHmBeo5q58GrdjGl3EztArq+uJ+nEPU/GfUPQihx5tgxDU4BiXg14kHJs9GWBULj/XdSDUDediB2PMfm7ztLYV2elBx6mpzKo3Sl6fq7hO4+g8VYJUEF6I+4zQkFQvJg== X-OriginatorOrg: seco.com X-MS-Exchange-CrossTenant-Network-Message-Id: b498ea2e-3b6d-481e-9711-08dab07d7c2d X-MS-Exchange-CrossTenant-AuthSource: DB7PR03MB4972.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2022 20:23:42.9140 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bebe97c3-6438-442e-ade3-ff17aa50e733 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: tXTfFh0hva+l2xNDmNr/fOd/kn22VwVBOWlcF7eCwaNRgQdHAwy67GmuS+lQcbxcHNxI7TF2M9evE1M210BAAQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR03MB7379 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1746967965630305306?= X-GMAIL-MSGID: =?utf-8?q?1746967965630305306?= Now that we actually read registers from QSGMII PCSs, it's important that we have the correct address (instead of hoping that we're the MAC with all the QSGMII PCSs on its bus). This adds nodes for the QSGMII PCSs. The exact mapping of QSGMII to MACs depends on the SoC. Since the first QSGMII PCSs share an address with the SGMII and XFI PCSs, we only add new nodes for PCSs 2-4. This avoids address conflicts on the bus. Signed-off-by: Sean Anderson --- (no changes since v3) Changes in v3: - Split this patch off from the previous one Changes in v2: - New .../boot/dts/freescale/fsl-ls1043-post.dtsi | 24 ++++++++++++++++++ .../boot/dts/freescale/fsl-ls1046-post.dtsi | 25 +++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1043-post.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1043-post.dtsi index d237162a8744..5c4d7eef8b61 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1043-post.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1043-post.dtsi @@ -24,9 +24,12 @@ &fman0 { /* these aliases provide the FMan ports mapping */ enet0: ethernet@e0000 { + pcs-handle-names = "qsgmii"; }; enet1: ethernet@e2000 { + pcsphy-handle = <&pcsphy1>, <&qsgmiib_pcs1>; + pcs-handle-names = "sgmii", "qsgmii"; }; enet2: ethernet@e4000 { @@ -36,11 +39,32 @@ enet3: ethernet@e6000 { }; enet4: ethernet@e8000 { + pcsphy-handle = <&pcsphy4>, <&qsgmiib_pcs2>; + pcs-handle-names = "sgmii", "qsgmii"; }; enet5: ethernet@ea000 { + pcsphy-handle = <&pcsphy5>, <&qsgmiib_pcs3>; + pcs-handle-names = "sgmii", "qsgmii"; }; enet6: ethernet@f0000 { }; + + mdio@e1000 { + qsgmiib_pcs1: ethernet-pcs@1 { + compatible = "fsl,lynx-pcs"; + reg = <0x1>; + }; + + qsgmiib_pcs2: ethernet-pcs@2 { + compatible = "fsl,lynx-pcs"; + reg = <0x2>; + }; + + qsgmiib_pcs3: ethernet-pcs@3 { + compatible = "fsl,lynx-pcs"; + reg = <0x3>; + }; + }; }; diff --git a/arch/arm64/boot/dts/freescale/fsl-ls1046-post.dtsi b/arch/arm64/boot/dts/freescale/fsl-ls1046-post.dtsi index d6caaea57d90..4e3345093943 100644 --- a/arch/arm64/boot/dts/freescale/fsl-ls1046-post.dtsi +++ b/arch/arm64/boot/dts/freescale/fsl-ls1046-post.dtsi @@ -23,6 +23,8 @@ &soc { &fman0 { /* these aliases provide the FMan ports mapping */ enet0: ethernet@e0000 { + pcsphy-handle = <&qsgmiib_pcs3>; + pcs-handle-names = "qsgmii"; }; enet1: ethernet@e2000 { @@ -35,14 +37,37 @@ enet3: ethernet@e6000 { }; enet4: ethernet@e8000 { + pcsphy-handle = <&pcsphy4>, <&qsgmiib_pcs1>; + pcs-handle-names = "sgmii", "qsgmii"; }; enet5: ethernet@ea000 { + pcsphy-handle = <&pcsphy5>, <&pcsphy5>; + pcs-handle-names = "sgmii", "qsgmii"; }; enet6: ethernet@f0000 { }; enet7: ethernet@f2000 { + pcsphy-handle = <&pcsphy7>, <&qsgmiib_pcs2>, <&pcsphy7>; + pcs-handle-names = "sgmii", "qsgmii", "xfi"; + }; + + mdio@eb000 { + qsgmiib_pcs1: ethernet-pcs@1 { + compatible = "fsl,lynx-pcs"; + reg = <0x1>; + }; + + qsgmiib_pcs2: ethernet-pcs@2 { + compatible = "fsl,lynx-pcs"; + reg = <0x2>; + }; + + qsgmiib_pcs3: ethernet-pcs@3 { + compatible = "fsl,lynx-pcs"; + reg = <0x3>; + }; }; };