Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp3109838pxj; Mon, 10 May 2021 19:10:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxV9B5ZPy04iuyocBHbeCAG6wjl5WnT+7R4kYswBV8rmcauxtqyOXiFQsJi6cUccUvITPTB X-Received: by 2002:a5d:878e:: with SMTP id f14mr20390216ion.176.1620699001028; Mon, 10 May 2021 19:10:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620699001; cv=none; d=google.com; s=arc-20160816; b=TJJY1OZgSa2eOF3jfABJcLN4aj+HtChNEdNIy8El3jxA2SPkPe0r6eSzqltwfhb+VD QtLj+tnSylfQ3CnBdS7d1GMnfeXmyc1/VIFSNA6N72ld/YVDGAsXUas7NGDDsIbZxDLJ EJmb8n9FmuJmUdQBgWjagEVXz9ixVZ5RXm7a8EbQYgw20HXx06Z/NuxhiqweV0w1DhlV Dfo3Vi4MAyZU5BWG9tnJqfDSIeJ/GAz17pDRFuZTYyOsZ0Bt7oLLp4F1enCFa7V5pRQS OOfDHJCezJkE7htVpdFongVZbuB294kpk+CKx2+tldagZLU5S+9Bph4wwZd6bwUyGaLe 1/hA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=JG08upf6UrkrE9/6eQmYrVuXphDJ1Y+Z5Abl1+0TU5o=; b=p19xP/Tan65r2QurWNUi1htplo8leWs4WWFsXmbt0DxjPzYTFoBg2PS3I5xXZZ2b+/ 3O7ha8eZK2V95B2rUoAEimtH62NlgUwtCEtZ8MEj46+tOvmIOCc0zUJkPGDbRNwGY6nP lvSMTvbQ7TdWb7OsrX751fxWNhX0szJb5HpN3mx+DbX4Sy70ldjjN5FN+6A856yXEbbK d1Yc0wlG6xmJYKDLUiwVRQoJgAgEe8NG9Cn2osBWIFUbzh6WhpMJiadmc4rukdjm0ey+ d+ZPMyyHdZ0r6OtnhT2DwgHYfh2DblykFhBqS4QLqPvKgO7IurIcvL4SINJgtQzNhG0g uskw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=U4rnYZkf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id n14si19097151ilt.105.2021.05.10.19.09.48; Mon, 10 May 2021 19:10:01 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=U4rnYZkf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231491AbhEKCKQ (ORCPT + 99 others); Mon, 10 May 2021 22:10:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51466 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231241AbhEKCJH (ORCPT ); Mon, 10 May 2021 22:09:07 -0400 Received: from mail-wr1-x42c.google.com (mail-wr1-x42c.google.com [IPv6:2a00:1450:4864:20::42c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 90FEAC061353; Mon, 10 May 2021 19:07:37 -0700 (PDT) Received: by mail-wr1-x42c.google.com with SMTP id v12so18465866wrq.6; Mon, 10 May 2021 19:07:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=JG08upf6UrkrE9/6eQmYrVuXphDJ1Y+Z5Abl1+0TU5o=; b=U4rnYZkftp0bF0e8Wuq9y4bb3KAnYwhp4044LskA3WaT0Qvr7c6YMkQM++3GdgfY/h Ch7nd3mRa8oIDtygJitb0vXtwACEuJWQrO8gpsaur73pw+7hnYXIGjHTOj7ZljMq/FRi 7rkMjXcCdcHzR1k+AofIKfJop8czbZangyXv4uB2sjRB+LNfQBWjpCNrkDWIhjlE900Z qd2XdMHQfgqxsM1YPcHrvbWjP2iPaTagCJ9tlbBpESjnXhScGOTDVBP7xQZw6FjkhQOF vRhjbc4eTodIUzK3VFgU+AqBJKvVGxXvaRWbj/IEqCnZRP6hfGA4/LxdJvMen8oEmSMq mYDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=JG08upf6UrkrE9/6eQmYrVuXphDJ1Y+Z5Abl1+0TU5o=; b=cFfKujHDLWfPPlxkhvpAwCy3QS4NjBF5bMxXEIxYNkveIr9+CKIrEf2qf4GNAPZ+cJ sdODwY4Ae0+mKCBEb1dQFzCFKaXYpuWzC4+dYlHL7PM0HLrwjZhU+LAIJb1bO8Kd1omD fj0BAGlFwtCVWlKr1IbXEuj6U/DMk06JErRaCa0NX6McLmFYgpSlNvPT7ctsMls6+6G7 4fb1jsZXzhPHOjFBTSw9zzShUHXubMjCO8OyACP5O/JKPMC3BQT0EERvjaX8d93GSumQ GYKiG+2jXXZQCYXaKXjLOdjz0jYM5iWLYK5y6+CjFisBX9FuFza/TQQVwR5NdoCWcRJZ f5Bg== X-Gm-Message-State: AOAM530MXbvoQzJMyq1098JfT488FMNe8M0td1bUqjUInZz4ZOzUdVT1 cOV6Fh7eFUkaRLkD4RlCJgE= X-Received: by 2002:a5d:4649:: with SMTP id j9mr1480161wrs.360.1620698856250; Mon, 10 May 2021 19:07:36 -0700 (PDT) Received: from Ansuel-xps.localdomain (93-35-189-2.ip56.fastwebnet.it. [93.35.189.2]) by smtp.googlemail.com with ESMTPSA id q20sm2607436wmq.2.2021.05.10.19.07.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 May 2021 19:07:36 -0700 (PDT) From: Ansuel Smith To: Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Jakub Kicinski , Rob Herring , Heiner Kallweit , Russell King , netdev@vger.kernel.org (open list:NETWORKING DRIVERS), devicetree@vger.kernel.org (open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS), linux-kernel@vger.kernel.org (open list) Cc: Ansuel Smith Subject: [RFC PATCH net-next v5 14/25] net: dsa: qca8k: add support for switch rev Date: Tue, 11 May 2021 04:04:49 +0200 Message-Id: <20210511020500.17269-15-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210511020500.17269-1-ansuelsmth@gmail.com> References: <20210511020500.17269-1-ansuelsmth@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org qca8k internal phy driver require some special debug value to be set based on the switch revision. Rework the switch id read function to also read the chip revision. Signed-off-by: Ansuel Smith Reviewed-by: Florian Fainelli --- drivers/net/dsa/qca8k.c | 53 ++++++++++++++++++++++++++--------------- drivers/net/dsa/qca8k.h | 7 ++++-- 2 files changed, 39 insertions(+), 21 deletions(-) diff --git a/drivers/net/dsa/qca8k.c b/drivers/net/dsa/qca8k.c index 10e3e1ca7e95..35ff4cf08786 100644 --- a/drivers/net/dsa/qca8k.c +++ b/drivers/net/dsa/qca8k.c @@ -1579,12 +1579,40 @@ static const struct dsa_switch_ops qca8k_switch_ops = { .phylink_mac_link_up = qca8k_phylink_mac_link_up, }; +static int qca8k_read_switch_id(struct qca8k_priv *priv) +{ + const struct qca8k_match_data *data; + u32 val; + u8 id; + + /* get the switches ID from the compatible */ + data = of_device_get_match_data(priv->dev); + if (!data) + return -ENODEV; + + val = qca8k_read(priv, QCA8K_REG_MASK_CTRL); + if (val < 0) + return -ENODEV; + + id = QCA8K_MASK_CTRL_DEVICE_ID(val & QCA8K_MASK_CTRL_DEVICE_ID_MASK); + if (id != data->id) { + dev_err(priv->dev, "Switch id detected %x but expected %x", id, data->id); + return -ENODEV; + } + + priv->switch_id = id; + + /* Save revision to communicate to the internal PHY driver */ + priv->switch_revision = (val & QCA8K_MASK_CTRL_REV_ID_MASK); + + return 0; +} + static int qca8k_sw_probe(struct mdio_device *mdiodev) { - const struct qca8k_match_data *data; struct qca8k_priv *priv; - u32 id; + int ret; /* allocate the private data struct so that we can probe the switches * ID register @@ -1610,24 +1638,11 @@ qca8k_sw_probe(struct mdio_device *mdiodev) gpiod_set_value_cansleep(priv->reset_gpio, 0); } - /* get the switches ID from the compatible */ - data = of_device_get_match_data(&mdiodev->dev); - if (!data) - return -ENODEV; - - /* read the switches ID register */ - id = qca8k_read(priv, QCA8K_REG_MASK_CTRL); - if (id < 0) - return id; - - id >>= QCA8K_MASK_CTRL_ID_S; - id &= QCA8K_MASK_CTRL_ID_M; - if (id != data->id) { - dev_err(&mdiodev->dev, "Switch id detected %x but expected %x", id, data->id); - return -ENODEV; - } + /* Check the detected switch id */ + ret = qca8k_read_switch_id(priv); + if (ret) + return ret; - priv->switch_id = id; priv->ds = devm_kzalloc(&mdiodev->dev, sizeof(*priv->ds), GFP_KERNEL); if (!priv->ds) return -ENOMEM; diff --git a/drivers/net/dsa/qca8k.h b/drivers/net/dsa/qca8k.h index eceeacfe2c5d..338277978ec0 100644 --- a/drivers/net/dsa/qca8k.h +++ b/drivers/net/dsa/qca8k.h @@ -30,8 +30,10 @@ /* Global control registers */ #define QCA8K_REG_MASK_CTRL 0x000 -#define QCA8K_MASK_CTRL_ID_M 0xff -#define QCA8K_MASK_CTRL_ID_S 8 +#define QCA8K_MASK_CTRL_REV_ID_MASK GENMASK(7, 0) +#define QCA8K_MASK_CTRL_REV_ID(x) ((x) >> 0) +#define QCA8K_MASK_CTRL_DEVICE_ID_MASK GENMASK(15, 8) +#define QCA8K_MASK_CTRL_DEVICE_ID(x) ((x) >> 8) #define QCA8K_REG_PORT0_PAD_CTRL 0x004 #define QCA8K_REG_PORT5_PAD_CTRL 0x008 #define QCA8K_REG_PORT6_PAD_CTRL 0x00c @@ -251,6 +253,7 @@ struct qca8k_match_data { struct qca8k_priv { u8 switch_id; + u8 switch_revision; struct regmap *regmap; struct mii_bus *bus; struct ar8xxx_port_status port_sts[QCA8K_NUM_PORTS]; -- 2.30.2