Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp1953534pxb; Mon, 22 Feb 2021 15:51:25 -0800 (PST) X-Google-Smtp-Source: ABdhPJxeUOYkB1rKEiVgkGPagB4JfrpSAcBKD9OIHHo/OsPVPHq4c5EuUVTY6DJDcmx4zKUdYKIx X-Received: by 2002:a17:906:1712:: with SMTP id c18mr23432063eje.417.1614037885405; Mon, 22 Feb 2021 15:51:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614037885; cv=none; d=google.com; s=arc-20160816; b=BBEobXhfjb1ijyUinw/erdt0O7DC/c8TFJqbhe5AuNfoW4BV/L4LzuPDLoBU+UxOQ4 MlBuVSNg41R0InGudnTrWpPazRAnBPdjpSnAYqYKeteTEbNTRztc9VNC9jQoMgBXNeF+ WO0QdJHiu9alcjsDx9vtjKYwS6dzD5tvJk/F/Lp2Vtu3yQ+e8C1r7H4j4bAJ5Fdo4LMV g4iH7Mqm3Lxl0sKg4VKY/3gS18mtXxOnFa/qoHGFGFX/fD3siuHVCuKoh9je1/MZ4bV1 abBVLLbXH9qCkfRel2yD4Ym+cqMs1mQ+m4pjE5cb9xoj0Kh1Ut/LI1kdJF8BmWiumeWC l6NA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:sender:dkim-signature; bh=C/1tnMH43nbGkpsLudAbobVdUGLdNYCWQFFBhhkg/1A=; b=dYfQ0C6oSpOEp+yQRLuEmYDvkEKB7Oyuzs+lBL0nSlBjwOadvQ9AbgB27A+zHThzDc 7yJh/MW5L/aFl9WjHU1d2qxo37IFxv8DuV73kflkqxBhtSjqOrtnxzM4cZOAOea6vvt4 dmL/pR5akIfDPLul1tAFr9/Yk85Rxn1Wgp2zGkUYTPsVYehud2iQTXvDc37eajjDYtXe cbMybRiaVYLrVFATu3CDk/Owv6tGQ2HSnNRiIr8D1rTBW+dLihGATGxURAHDXYZLSHvs toOVOYEnMZfL2MuOq/2mUULxwvBgdvPYt8uAgJTWjjVtfXKb+OpiMIL96bzz7wJ7v9wJ GJOg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=qG24Lg4C; 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 le15si12096564ejc.671.2021.02.22.15.51.02; Mon, 22 Feb 2021 15:51:25 -0800 (PST) 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=qG24Lg4C; 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 S230355AbhBVWZb (ORCPT + 99 others); Mon, 22 Feb 2021 17:25:31 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48668 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230079AbhBVWZ3 (ORCPT ); Mon, 22 Feb 2021 17:25:29 -0500 Received: from mail-oo1-xc35.google.com (mail-oo1-xc35.google.com [IPv6:2607:f8b0:4864:20::c35]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AF6A6C061574; Mon, 22 Feb 2021 14:24:49 -0800 (PST) Received: by mail-oo1-xc35.google.com with SMTP id y21so3340128oou.13; Mon, 22 Feb 2021 14:24:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=C/1tnMH43nbGkpsLudAbobVdUGLdNYCWQFFBhhkg/1A=; b=qG24Lg4C5G7AzYZ4JTHLf6v+I8VKMh0Ejt3TmfhVmyN6SW+5NU+xdqJzw2j5j4wM+4 gQbkIVoF1K9rR7A8PN96eaCjU0furVcoftn4HPhY1hXG8umr2gpyDzq7SBqGSX98tRCG OCYUXq0TU0rZeE8z1fRXtQG61bSVmMpTjZSaJiBPGkV76e9u5HzZCsXxRebkgJtrXCCb g2bpR1sO6bFy4fqrBLay8APZSNQ8gA7fmZFG+2L8hTwB2L/fxPfGv7guWLof5zlgjNoc t4kmeSnK4ZgZTSXXWnDvkXpteRkGHDMiYAHjA07c07QRERYdVWxRnvXjTKMTevUTZFi2 4aqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:from:to:cc:subject:message-id :references:mime-version:content-disposition :content-transfer-encoding:in-reply-to:user-agent; bh=C/1tnMH43nbGkpsLudAbobVdUGLdNYCWQFFBhhkg/1A=; b=W67oJedpXK3J/wdIDOvHnWsFX1v8Gq0YPpBQBmLk9wM1bDoUgxuDbs2LBTkUabl7kK UFtBwleWZzz6o+NBL4odJXBqwf1HuJXezIa/Y1OUHOZCP8ZybnJKAlHtSycXX6EIY406 Kls0aVZ63DK9ZVvy6CyGEFwTSfrJ2zdAvmwyPBEs0p8m4w8J7a54SB09BtQKqxxDCPTT 3+nMSGCTZH3eRa/MSDSXFJfjrBTM0s+j1D9lg8XGt3ZkHHSbhAtkyQ3+uG8CGAf0LYFc 4n2Xc6TVifCL5ZCg3Q5qphWWGST07GmyZy7oakBW6BiSDyMZnVeebMTICmEF2Qf8TAaD IkqQ== X-Gm-Message-State: AOAM5312CcPTUa8nCiXkoVtGA4CgizznYrNxd8JyYUSISAkNsF5ig8YO ykFtfFNtLXXc8OU/evh0X7s= X-Received: by 2002:a4a:94a7:: with SMTP id k36mr2995819ooi.45.1614032689106; Mon, 22 Feb 2021 14:24:49 -0800 (PST) Received: from localhost ([2600:1700:e321:62f0:329c:23ff:fee3:9d7c]) by smtp.gmail.com with ESMTPSA id b12sm1600751otp.21.2021.02.22.14.24.48 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Mon, 22 Feb 2021 14:24:48 -0800 (PST) Sender: Guenter Roeck Date: Mon, 22 Feb 2021 14:24:47 -0800 From: Guenter Roeck To: =?iso-8859-1?Q?=C1lvaro_Fern=E1ndez?= Rojas Cc: Wim Van Sebroeck , linux-watchdog@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] watchdog: bcm7038_wdt: add big endian support Message-ID: <20210222222447.GA177866@roeck-us.net> References: <9381ef9e-a569-9bcd-5546-a48922e4961d@roeck-us.net> <80DB1B7E-D719-4597-A2B7-7CAD592E1B19@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <80DB1B7E-D719-4597-A2B7-7CAD592E1B19@gmail.com> User-Agent: Mutt/1.9.4 (2018-02-28) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Feb 22, 2021 at 10:48:09PM +0100, Álvaro Fernández Rojas wrote: > Hi Guenter, > > > El 22 feb 2021, a las 22:24, Guenter Roeck escribió: > > > > On 2/22/21 12:03 PM, Álvaro Fernández Rojas wrote: > >> bcm7038_wdt can be used on bmips (bcm63xx) devices too. > >> > > It might make sense to actually enable it for BCM63XX. > > bcm63xx SoCs are supported in bcm63xx and bmips. > bcm63xx doesn’t have device tree support, but bmips does and this watchdog is already enabled for bmips. > Maybe add a note saying that this will only be supported for devicetree based systems. > > > >> Signed-off-by: Álvaro Fernández Rojas > >> --- > >> drivers/watchdog/bcm7038_wdt.c | 30 ++++++++++++++++++++++++------ > >> 1 file changed, 24 insertions(+), 6 deletions(-) > >> > >> diff --git a/drivers/watchdog/bcm7038_wdt.c b/drivers/watchdog/bcm7038_wdt.c > >> index 979caa18d3c8..62494da1ac57 100644 > >> --- a/drivers/watchdog/bcm7038_wdt.c > >> +++ b/drivers/watchdog/bcm7038_wdt.c > >> @@ -34,6 +34,24 @@ struct bcm7038_watchdog { > >> > >> static bool nowayout = WATCHDOG_NOWAYOUT; > >> > >> +static inline void bcm7038_wdt_write(unsigned long data, void __iomem *reg) > >> +{ > >> +#ifdef CONFIG_CPU_BIG_ENDIAN > >> + __raw_writel(data, reg); > >> +#else > >> + writel(data, reg); > >> +#endif > >> +} > >> + > >> +static inline unsigned long bcm7038_wdt_read(void __iomem *reg) > >> +{ > >> +#ifdef CONFIG_CPU_BIG_ENDIAN > >> + return __raw_readl(reg); > >> +#else > >> + return readl(reg); > >> +#endif > >> +} > >> + > > > > This needs further explanation. Why not just use __raw_writel() and > > __raw_readl() unconditionally ? Also, is it known for sure that, > > say, bmips_be_defconfig otherwise uses the wrong endianness > > (vs. bmips_stb_defconfig which is a little endian configuration) ? > > Because __raw_writel() doesn’t have memory barriers and writel() does. > Those configs use the correct endiannes, so I don’t know what you mean... > So are you saying that it already works with bmips_stb_defconfig (because it is little endian), that bmips_stb_defconfig needs memory barriers, and that bmips_be_defconfig doesn't need memory barriers ? Odd, but I'll take you by your word. And other code does something similar, so I guess there must be a reason for it. Anyway, after looking into that other code, please use something like if (IS_ENABLED(CONFIG_MIPS) && IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)) __raw_writel(value, reg); else writel(value, reg); Thanks, Guenter > > > > Thanks, > > Guenter > > > >> static void bcm7038_wdt_set_timeout_reg(struct watchdog_device *wdog) > >> { > >> struct bcm7038_watchdog *wdt = watchdog_get_drvdata(wdog); > >> @@ -41,15 +59,15 @@ static void bcm7038_wdt_set_timeout_reg(struct watchdog_device *wdog) > >> > >> timeout = wdt->rate * wdog->timeout; > >> > >> - writel(timeout, wdt->base + WDT_TIMEOUT_REG); > >> + bcm7038_wdt_write(timeout, wdt->base + WDT_TIMEOUT_REG); > >> } > >> > >> static int bcm7038_wdt_ping(struct watchdog_device *wdog) > >> { > >> struct bcm7038_watchdog *wdt = watchdog_get_drvdata(wdog); > >> > >> - writel(WDT_START_1, wdt->base + WDT_CMD_REG); > >> - writel(WDT_START_2, wdt->base + WDT_CMD_REG); > >> + bcm7038_wdt_write(WDT_START_1, wdt->base + WDT_CMD_REG); > >> + bcm7038_wdt_write(WDT_START_2, wdt->base + WDT_CMD_REG); > >> > >> return 0; > >> } > >> @@ -66,8 +84,8 @@ static int bcm7038_wdt_stop(struct watchdog_device *wdog) > >> { > >> struct bcm7038_watchdog *wdt = watchdog_get_drvdata(wdog); > >> > >> - writel(WDT_STOP_1, wdt->base + WDT_CMD_REG); > >> - writel(WDT_STOP_2, wdt->base + WDT_CMD_REG); > >> + bcm7038_wdt_write(WDT_STOP_1, wdt->base + WDT_CMD_REG); > >> + bcm7038_wdt_write(WDT_STOP_2, wdt->base + WDT_CMD_REG); > >> > >> return 0; > >> } > >> @@ -88,7 +106,7 @@ static unsigned int bcm7038_wdt_get_timeleft(struct watchdog_device *wdog) > >> struct bcm7038_watchdog *wdt = watchdog_get_drvdata(wdog); > >> u32 time_left; > >> > >> - time_left = readl(wdt->base + WDT_CMD_REG); > >> + time_left = bcm7038_wdt_read(wdt->base + WDT_CMD_REG); > >> > >> return time_left / wdt->rate; > >> } > >> > >