Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp206880ybz; Thu, 23 Apr 2020 22:04:27 -0700 (PDT) X-Google-Smtp-Source: APiQypKTpDEcshGt0qamOx/XX1XjEE7Y1TEtCN7aCFN3KWJv9wuITgpRsENrv3A33Jg2X/r1wS9q X-Received: by 2002:a50:d942:: with SMTP id u2mr5765173edj.116.1587704666975; Thu, 23 Apr 2020 22:04:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1587704666; cv=none; d=google.com; s=arc-20160816; b=M3ZQ47NHo59hrQAOyzLRcg1SpxGaH+KoPAcPJruK2VIic5h57qO45oHiTKhgjc5j0x jZc1WTdRxx2joAeYUokJx8fRYNg3s/BJdldRDhW2/KCY96t/uJclI8qT+cdOCogyBKAz KoeIE+LZ5JvMdwydT22mdbncYUngEVjxccMOw8zBVzkDDRZzM/RlkUT0E7DFeOZrke3L 2/J1QWnQhqKU2VLckyf91siDDe3Wt1Ctx8OzK0lLvPcQvrvKlEENXW9/43PcPIdcLHWy 8yatWqSgoW6q2+XJWUWvxbRdfVeps+OtXEKhaCveooptaNc2LYg+/VkIP0F9ENfuugn/ Mgkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=vQJtE8e1+BqgvgxeMPng4N7CITALSr4tvkuhP2rZyK4=; b=mi/P2jDDQTwhcU9Y2oQjc0djHrmekfHnucXlrQNJRfjHpbYT8Q5I3rlthKSIuNsu6j 3SbqPt93ht4aGKvktilC76FBEJ7u/P+18DwQ8y97/sjOMZD1LxGG/+ArePW7uiAPAoWP iMYRLJhOiJW4cm2eME8PUs+oYaDqcbAPp4Mc2g86gcZdKJiUB/MgbA+ti5TpPkCKv6W5 14Fs4vPWRXZG5oT6m7vKVPOOp/20meoR2jW/AN1wu9Ui+IVQFHv+bENnjl08gQZdq0J6 nw8T8mrOCnurL96JAnkUq7oz0awD+d07mVv8jjVN3SRxiOyQdkXoXhpjEy37lsVETsU8 o0+Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id x14si2194679ede.22.2020.04.23.22.04.03; Thu, 23 Apr 2020 22:04:26 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726489AbgDXE70 (ORCPT + 99 others); Fri, 24 Apr 2020 00:59:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38286 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726304AbgDXE7Z (ORCPT ); Fri, 24 Apr 2020 00:59:25 -0400 Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [IPv6:2001:67c:670:201:290:27ff:fe1d:cc33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 42CE8C09B045 for ; Thu, 23 Apr 2020 21:59:25 -0700 (PDT) Received: from dude.hi.pengutronix.de ([2001:67c:670:100:1d::7]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jRqQo-0001DJ-IO; Fri, 24 Apr 2020 06:59:18 +0200 Received: from ore by dude.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1jRqQm-0006xK-0d; Fri, 24 Apr 2020 06:59:16 +0200 From: Oleksij Rempel To: Jay Cliburn , Chris Snook , Andrew Lunn , "David S. Miller" Cc: Oleksij Rempel , Pengutronix Kernel Team , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v1] net: ag71xx: extend link validation to support other SoCs Date: Fri, 24 Apr 2020 06:59:14 +0200 Message-Id: <20200424045914.26682-1-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.26.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 2001:67c:670:100:1d::7 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Most (all?) QCA SoCs have two MAC with different supported link capabilities. Extend ag71xx_mac_validate() to properly validate this variants. Signed-off-by: Oleksij Rempel --- drivers/net/ethernet/atheros/ag71xx.c | 43 +++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/atheros/ag71xx.c b/drivers/net/ethernet/atheros/ag71xx.c index 02b7705393ca7..112edbd308230 100644 --- a/drivers/net/ethernet/atheros/ag71xx.c +++ b/drivers/net/ethernet/atheros/ag71xx.c @@ -871,13 +871,40 @@ static void ag71xx_mac_validate(struct phylink_config *config, unsigned long *supported, struct phylink_link_state *state) { + struct ag71xx *ag = netdev_priv(to_net_dev(config->dev)); __ETHTOOL_DECLARE_LINK_MODE_MASK(mask) = { 0, }; - if (state->interface != PHY_INTERFACE_MODE_NA && - state->interface != PHY_INTERFACE_MODE_GMII && - state->interface != PHY_INTERFACE_MODE_MII) { - bitmap_zero(supported, __ETHTOOL_LINK_MODE_MASK_NBITS); - return; + switch (state->interface) { + case PHY_INTERFACE_MODE_NA: + break; + case PHY_INTERFACE_MODE_MII: + if ((ag71xx_is(ag, AR9330) && ag->mac_idx == 0) || + ag71xx_is(ag, AR9340) || + ag71xx_is(ag, QCA9530) || + (ag71xx_is(ag, QCA9550) && ag->mac_idx == 1)) + break; + goto unsupported; + case PHY_INTERFACE_MODE_GMII: + if ((ag71xx_is(ag, AR9330) && ag->mac_idx == 1) || + (ag71xx_is(ag, AR9340) && ag->mac_idx == 1) || + (ag71xx_is(ag, QCA9530) && ag->mac_idx == 1)) + break; + goto unsupported; + case PHY_INTERFACE_MODE_SGMII: + if (ag71xx_is(ag, QCA9550) && ag->mac_idx == 0) + break; + goto unsupported; + case PHY_INTERFACE_MODE_RMII: + if (ag71xx_is(ag, AR9340) && ag->mac_idx == 0) + break; + goto unsupported; + case PHY_INTERFACE_MODE_RGMII: + if ((ag71xx_is(ag, AR9340) && ag->mac_idx == 0) || + (ag71xx_is(ag, QCA9550) && ag->mac_idx == 1)) + break; + goto unsupported; + default: + goto unsupported; } phylink_set(mask, MII); @@ -889,6 +916,8 @@ static void ag71xx_mac_validate(struct phylink_config *config, phylink_set(mask, 100baseT_Full); if (state->interface == PHY_INTERFACE_MODE_NA || + state->interface == PHY_INTERFACE_MODE_SGMII || + state->interface == PHY_INTERFACE_MODE_RGMII || state->interface == PHY_INTERFACE_MODE_GMII) { phylink_set(mask, 1000baseT_Full); phylink_set(mask, 1000baseX_Full); @@ -898,6 +927,10 @@ static void ag71xx_mac_validate(struct phylink_config *config, __ETHTOOL_LINK_MODE_MASK_NBITS); bitmap_and(state->advertising, state->advertising, mask, __ETHTOOL_LINK_MODE_MASK_NBITS); + + return; +unsupported: + bitmap_zero(supported, __ETHTOOL_LINK_MODE_MASK_NBITS); } static void ag71xx_mac_pcs_get_state(struct phylink_config *config, -- 2.26.1