Received: by 2002:a05:6a10:c7c6:0:0:0:0 with SMTP id h6csp2203005pxy; Mon, 2 Aug 2021 23:39:40 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw+UtsGGHXwl5JtZb97/faQStC19vKV78G1vE74bFefvkCB7gMd2iijYcEOfkNmyYvrWuCD X-Received: by 2002:aa7:d7c1:: with SMTP id e1mr23184316eds.251.1627972780270; Mon, 02 Aug 2021 23:39:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627972780; cv=none; d=google.com; s=arc-20160816; b=aEPavfwW5NNnZ8pPGd2YDMZtDRAtIrsQnbAW8WW2ipuR4WRsEy1971LQTeP6gsoAt8 TbtjObRKh61XPnBWCz60XUrQCYv/m+JCTfRn/5pq7wmRgg5wCaKkyfmk6A96by7GDbmK ckR5v/mlGi63SFasWoH0inbfkqY+VEPPw8KA95nbHqSLczsFKG6MJEar0JPnvjHeNduH 6eh02CodxwshPj0KOTyKpE7DSsFtbvMi08JCzGP+h3W+6PEwDR/MZqM75mllwlURxctM 6B9xTL9hAFW49kSz4jT5ipKI7rZdnXEAn+z4I7C76rih9IWlsJmvXvK/oxc+q785R21C fijQ== 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 :message-id:date:subject:cc:to:from; bh=VTDs7/9VD6usuYzOtHXQn33LMWGarqtbq5HpJAy2+rQ=; b=WlIbHvntuv7H6D/bjcz+t4iwlRChDsslPmDTjpYQJHK4a+riDoAfc38v2wD9Fr4V7F EML9RwBe0pweZc1TOAHQSfwO9wRaw8Eii7Y5mxZsVmryerR+Opc7ADIBdceH64mieOZa JT/E//MQ3KF+Cwu+3ljUNN8yFRztyDuFQQ2aoRZe2UVyfBmf6ju6UYrkzf3I4LxqHRWS EDuMsNHa8dUksN1iMfOTGJp4wtb3bI+mJPCZ8aJYEr0oX3kEDBauLKf3jcaCUtHWXWh+ I9Iw+l80uIajVUgEpBSjn9eQ50gjiJ/QPGgkxiNTd6+IXS9/n8NC2rFKpciwZhwKfldt 0j2Q== 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 rh9si13358986ejb.423.2021.08.02.23.39.17; Mon, 02 Aug 2021 23:39:40 -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 S234020AbhHCGiJ (ORCPT + 99 others); Tue, 3 Aug 2021 02:38:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55054 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233902AbhHCGiH (ORCPT ); Tue, 3 Aug 2021 02:38:07 -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 C2523C061764 for ; Mon, 2 Aug 2021 23:37:56 -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 1mAo3i-0008Gw-12; Tue, 03 Aug 2021 08:37:50 +0200 Received: from ore by dude.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1mAo3h-0000wv-Mt; Tue, 03 Aug 2021 08:37:49 +0200 From: Oleksij Rempel To: Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Jakub Kicinski , Russell King Cc: Oleksij Rempel , Pengutronix Kernel Team , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org Subject: [PATCH net 1/1] net: dsa: qca: ar9331: reorder MDIO write sequence Date: Tue, 3 Aug 2021 08:37:46 +0200 Message-Id: <20210803063746.3600-1-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 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 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In case of this switch we work with 32bit registers on top of 16bit bus. Some registers (for example access to forwarding database) have trigger bit on the first 16bit half of request and the result + configuration of request in the second half. Without this patch, we would trigger database operation and overwrite result in one run. To make it work properly, we should do the second part of transfer before the first one is done. So far, this rule seems to work for all registers on this switch. Fixes: ec6698c272de ("net: dsa: add support for Atheros AR9331 built-in switch") Signed-off-by: Oleksij Rempel Reviewed-by: Andrew Lunn --- drivers/net/dsa/qca/ar9331.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/net/dsa/qca/ar9331.c b/drivers/net/dsa/qca/ar9331.c index ca2ad77b71f1..6686192e1883 100644 --- a/drivers/net/dsa/qca/ar9331.c +++ b/drivers/net/dsa/qca/ar9331.c @@ -837,16 +837,24 @@ static int ar9331_mdio_write(void *ctx, u32 reg, u32 val) return 0; } - ret = __ar9331_mdio_write(sbus, AR9331_SW_MDIO_PHY_MODE_REG, reg, val); + /* In case of this switch we work with 32bit registers on top of 16bit + * bus. Some registers (for example access to forwarding database) have + * trigger bit on the first 16bit half of request, the result and + * configuration of request in the second half. + * To make it work properly, we should do the second part of transfer + * before the first one is done. + */ + ret = __ar9331_mdio_write(sbus, AR9331_SW_MDIO_PHY_MODE_REG, reg + 2, + val >> 16); if (ret < 0) goto error; - ret = __ar9331_mdio_write(sbus, AR9331_SW_MDIO_PHY_MODE_REG, reg + 2, - val >> 16); + ret = __ar9331_mdio_write(sbus, AR9331_SW_MDIO_PHY_MODE_REG, reg, val); if (ret < 0) goto error; return 0; + error: dev_err_ratelimited(&sbus->dev, "Bus error. Failed to write register.\n"); return ret; -- 2.30.2