Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp1417884pxv; Fri, 2 Jul 2021 03:22:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzJG37+OwHoRUc0YRHV646pQMfmblh1SjV1EzMz9QNUe2Gi63Kz+fBnXniRXSTX4GdXjH7X X-Received: by 2002:aa7:da88:: with SMTP id q8mr5736280eds.345.1625221378554; Fri, 02 Jul 2021 03:22:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1625221378; cv=none; d=google.com; s=arc-20160816; b=Im69AVEBeyBcKszjCw8tqm19YG2TGoSoSlDjaGSJ8LZuGpTknaVlZaoXACrDjCikFT ylAas308WMYXCx1ODrJl8jMvEDs6QgiRUD1S2el8YQY/cryGj9jqpl4bakNgaJRSp/4M /1Je1snTuyqp65Bfn19HS9XtX0y5jBUx/MOrVzxsUXesCrBzOUmoBr0o8+WeXVPe4PcO M8Y/StO51TQAkIV9UQdLqEYDyGpvyCHccemlOHzqwBZn34pd6xdTe/3w/lmAlrybu0ZQ yuHEzjzIr827b5100N87NAfT+7VVoLXhUBd2yUvnjTv8+a04BiNwEwPmKSTvMa1MspWN erIw== 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; bh=cKprPjiwUl5Fwj2g9FMChboJ3NfW8B46CKtZ66wNyTA=; b=1C1XwEeArwIIUYl3KkuC2goFEsOQK50QtsRrOEw/ir7j9KZbj9bceW76wYB0FojeVn D0iaGTmxT0O0xhq9BoUSs3q/ATjq0w4pOZxSZgT965389RN62wxh0WKhB7H7IAmZ1Wyn 3CVrdqAbpbbENCDpKJWkD2YsZCYed4tR6OGGzKQKpc6ZEeaaTodzzyf0sSqkI1I1/wxH ARDccQzso4Po8Z2kUdcEq3K57L9rK2GdCRCoCQvZHgvdtFUft09j6XjGSOK3eTkv9Kco xExNegBfaMzjqeqVhxE01SaWClc5YmI2NY88lCXTQ7BURgQJKIiAwW2iO1yI6CYPKY5h j/3g== 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 nb42si2774483ejc.539.2021.07.02.03.22.33; Fri, 02 Jul 2021 03:22:58 -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 S231925AbhGBKVK (ORCPT + 99 others); Fri, 2 Jul 2021 06:21:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42018 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231519AbhGBKUn (ORCPT ); Fri, 2 Jul 2021 06:20:43 -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 92AF7C0613DD for ; Fri, 2 Jul 2021 03:18:11 -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 1lzGFH-0005BA-3s; Fri, 02 Jul 2021 12:18:03 +0200 Received: from ore by dude.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1lzGFF-0003ea-Gb; Fri, 02 Jul 2021 12:18:01 +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-next v2 1/6] net: dsa: qca: ar9331: reorder MDIO write sequence Date: Fri, 2 Jul 2021 12:17:46 +0200 Message-Id: <20210702101751.13168-2-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210702101751.13168-1-o.rempel@pengutronix.de> References: <20210702101751.13168-1-o.rempel@pengutronix.de> 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. 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