Received: by 2002:a05:6a10:c7c6:0:0:0:0 with SMTP id h6csp1612391pxy; Mon, 2 Aug 2021 06:12:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJztsFMOW0KKTKTm8Rre7amLsCFxHsuY+hQoKpOIT/i8kN9JA+sYLx16UuEDiF02+U5tAR5t X-Received: by 2002:a92:d9ce:: with SMTP id n14mr1156504ilq.29.1627909958318; Mon, 02 Aug 2021 06:12:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627909958; cv=none; d=google.com; s=arc-20160816; b=TWAScIwxFXulqwkNCNZiEYR0c2TEUFcGkiL8FBmi6bVrj09cRMi3byKl+xfdHpN1kd Vi7WiVR2nv7/8BVF/fpXUI6U85efAVGGx+HVyGSs+rs+m4J+kSAy3Dc2RO2SyB9Yx2DF xq/q7+bGKfn8zCvznKkTbyy433POZ5tDXcRfwwB8/EdrH29l7gUefMvBhMiEgt6VzjUR JobXwRf1YBTFL8jAbVtiwZ2pdYkfCZEm8m35oceFVYioBYFVZlUegBVzcirngc5JMa8t K4vdilqKcAvG75cJQ0AEC5nDx4ueE8ovKPW4Pkm9OAnwixX4py+qd6rX59AWEXCcL0ZU FX0w== 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=DEym13Y6bt8CNqCp1gXWPs4Ny3w9wVAzvB1uvjDAQ8rY5w29Tdvfdc8wpGS75r38EC B6koBkzUdpO2iChDtEd1Y49xrJ9lHq9d6bsqmBHYL4fReoV2PwvY/n+cK/nUqjdgzENQ 0c4tFKSenzdcO81CPTRUHhAMvAvL4RC2dq0MNzkrPBX+utHQ4A5y17wHBor/FdN2Rpi5 4Dtwcbdffqm5N6uNwVU4eKq8l2eo+ozED3rkwmTh/Dplzfjm6NUlvwMDCZCa2xC/4R8N nwyHwcRk7I0OpQvkE8a76GIit77hw4SQhDiUu/3s3WEJOEca189dPCyREa53hRUYBEmv XPdw== 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 f11si12738002jav.53.2021.08.02.06.12.27; Mon, 02 Aug 2021 06:12:38 -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 S234058AbhHBNLU (ORCPT + 99 others); Mon, 2 Aug 2021 09:11:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57288 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233917AbhHBNK7 (ORCPT ); Mon, 2 Aug 2021 09:10:59 -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 EC417C06179E for ; Mon, 2 Aug 2021 06:10:49 -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 1mAXiK-0003MY-Om; Mon, 02 Aug 2021 15:10:40 +0200 Received: from ore by dude.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1mAXiJ-00006S-G0; Mon, 02 Aug 2021 15:10:39 +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 v3 1/6] net: dsa: qca: ar9331: reorder MDIO write sequence Date: Mon, 2 Aug 2021 15:10:32 +0200 Message-Id: <20210802131037.32326-2-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210802131037.32326-1-o.rempel@pengutronix.de> References: <20210802131037.32326-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