Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp1674922ybz; Thu, 16 Apr 2020 13:26:52 -0700 (PDT) X-Google-Smtp-Source: APiQypIKByAuCKIOBkBITps/iZEvglEux1OZoFKTkQHM6xz2w1FDiG9Jqachwso2srvuJDFiEMd1 X-Received: by 2002:a50:c0ce:: with SMTP id r14mr10044edf.298.1587068812412; Thu, 16 Apr 2020 13:26:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1587068812; cv=none; d=google.com; s=arc-20160816; b=GvYMN0XkeDsfN8N++TiVYB/hj6k3boLmD97SiE5gojdtu8t+cE5jUYaici65lnR4Pn i77S5j7Fp2GYGyb2d2pNwG6IgJXNS3lAedX3Uy2pEWqCFInRxo5Xspn4yY4A798JypUU i6GA37zUEsX2+3Z2gLiyvhHNfUxSvpqji1vFTtebpIJvABtdnx1upnvW/LuApo3K76+2 2Ff5nofwof/QbTk0nEU2g6+l9HfX8gG2mH8+Sp0pJWdf4f6J7hN2Veo2VCr3dCAiIEJG kvhz5gWWOktQjyuH+EUDalrukWiopmZZMhDmLe/zfyQzf1NQSwQGwwjuWoMRi5d6EgKD A2Nw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :dkim-signature; bh=heTKQ+qaKCUuRkRQ2FHmxRMgqGqCtRg8Kf5otoq5pX8=; b=bJo3Idy4n+iIooRu3y4yxP6lxrQhlqmrqMpl8nylcNwy4vAAl4OPPC/pKp4pFnQgZ9 BUat1Q/LUG+DqM2WoJHVOWtNd0oJG+NAok2am6C2Ytcp2d/5ZpIFA5VqllqxsHr0GI5r vyU0s2lecaXPpcDwgYOAZx/to/AEGhFy1QI76U3VlFyVPhGdBztD7k6JHUJ2hFhpmsMf UEolydazD1iPFCPrpxlmdhgSkLcwcxQ74P/2dkqIE1Z8XJeB7o6qKWwtrMsSm+MJLNMc IYc80W79eWyBYBDQcIL/7oO3D5quyPY9EEoqn+6mwuD02rDN7IZFREOkzQv88IzriCZa ra3g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Yi9hpirh; 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 f10si9358554ejb.466.2020.04.16.13.26.29; Thu, 16 Apr 2020 13:26:52 -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=@kernel.org header.s=default header.b=Yi9hpirh; 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 S2394383AbgDPOdI (ORCPT + 99 others); Thu, 16 Apr 2020 10:33:08 -0400 Received: from mail.kernel.org ([198.145.29.99]:59918 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2442133AbgDPOSf (ORCPT ); Thu, 16 Apr 2020 10:18:35 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 8FD4D2063A; Thu, 16 Apr 2020 14:18:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1587046714; bh=bi7/m79MnrOcKtz1yNvD6Frj0cbUVGLU7NJgSHvxF2I=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=Yi9hpirh1VtMlOGs0kGvX5fXAQAutpS3AwXEDY0pBvWzLHPLsyr9y6rTT+mlhSexI 8mZW2a3+sS9h7wpZPaT2ju6Ag4XCy7zSEByC0Z99bGfZjuqR83ehFJbjEgpiUCX/WG 5L0sH/InBOfdRrcHB/wO9rF1b/29CQLo7xeW3gFM= Date: Thu, 16 Apr 2020 16:18:32 +0200 From: Greg Kroah-Hartman To: Mateusz Holenko Cc: Rob Herring , Mark Rutland , Jiri Slaby , devicetree@vger.kernel.org, "open list:SERIAL DRIVERS" , Stafford Horne , Karol Gugala , Mauro Carvalho Chehab , "David S. Miller" , "Paul E. McKenney" , Filip Kokosinski , Pawel Czarnecki , Joel Stanley , Jonathan Cameron , Maxime Ripard , Shawn Guo , Heiko Stuebner , Sam Ravnborg , Icenowy Zheng , Laurent Pinchart , linux-kernel@vger.kernel.org Subject: Re: [PATCH v4 3/5] drivers/soc/litex: add LiteX SoC Controller driver Message-ID: <20200416141832.GA1356374@kroah.com> References: <20200402084513.4173306-0-mholenko@antmicro.com> <20200402084513.4173306-3-mholenko@antmicro.com> <20200402074259.GC2755501@kroah.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Apr 02, 2020 at 03:50:34PM +0200, Mateusz Holenko wrote: > On Thu, Apr 2, 2020 at 9:43 AM Greg Kroah-Hartman > wrote: > > > > On Thu, Apr 02, 2020 at 08:50:40AM +0200, Mateusz Holenko wrote: > > > On Thu, Apr 2, 2020 at 8:46 AM Mateusz Holenko wrote: > > > > > > > > From: Pawel Czarnecki > > > > > > > > This commit adds driver for the FPGA-based LiteX SoC > > > > Controller from LiteX SoC builder. > > > > > > > > Co-developed-by: Mateusz Holenko > > > > Signed-off-by: Mateusz Holenko > > > > Signed-off-by: Pawel Czarnecki > > > > --- > > > > > > > > Notes: > > > > Changes in v4: > > > > - fixed indent in Kconfig's help section > > > > - fixed copyright header > > > > - changed compatible to "litex,soc-controller" > > > > - simplified litex_soc_ctrl_probe > > > > - removed unnecessary litex_soc_ctrl_remove > > > > > > > > This commit has been introduced in v3 of the patchset. > > > > > > > > It includes a simplified version of common 'litex.h' > > > > header introduced in v2 of the patchset. > > > > > > > > MAINTAINERS | 2 + > > > > drivers/soc/Kconfig | 1 + > > > > drivers/soc/Makefile | 1 + > > > > drivers/soc/litex/Kconfig | 14 ++ > > > > drivers/soc/litex/Makefile | 3 + > > > > drivers/soc/litex/litex_soc_ctrl.c | 217 +++++++++++++++++++++++++++++ > > > > include/linux/litex.h | 45 ++++++ > > > > 7 files changed, 283 insertions(+) > > > > create mode 100644 drivers/soc/litex/Kconfig > > > > create mode 100644 drivers/soc/litex/Makefile > > > > create mode 100644 drivers/soc/litex/litex_soc_ctrl.c > > > > create mode 100644 include/linux/litex.h > > > > > > > > diff --git a/MAINTAINERS b/MAINTAINERS > > > > index 2f5ede8a08aa..a35be1be90d5 100644 > > > > --- a/MAINTAINERS > > > > +++ b/MAINTAINERS > > > > @@ -9729,6 +9729,8 @@ M: Karol Gugala > > > > M: Mateusz Holenko > > > > S: Maintained > > > > F: Documentation/devicetree/bindings/*/litex,*.yaml > > > > +F: drivers/soc/litex/litex_soc_ctrl.c > > > > +F: include/linux/litex.h > > > > > > > > LIVE PATCHING > > > > M: Josh Poimboeuf > > > > diff --git a/drivers/soc/Kconfig b/drivers/soc/Kconfig > > > > index 1778f8c62861..78add2a163be 100644 > > > > --- a/drivers/soc/Kconfig > > > > +++ b/drivers/soc/Kconfig > > > > @@ -9,6 +9,7 @@ source "drivers/soc/bcm/Kconfig" > > > > source "drivers/soc/fsl/Kconfig" > > > > source "drivers/soc/imx/Kconfig" > > > > source "drivers/soc/ixp4xx/Kconfig" > > > > +source "drivers/soc/litex/Kconfig" > > > > source "drivers/soc/mediatek/Kconfig" > > > > source "drivers/soc/qcom/Kconfig" > > > > source "drivers/soc/renesas/Kconfig" > > > > diff --git a/drivers/soc/Makefile b/drivers/soc/Makefile > > > > index 8b49d782a1ab..fd016b51cddd 100644 > > > > --- a/drivers/soc/Makefile > > > > +++ b/drivers/soc/Makefile > > > > @@ -14,6 +14,7 @@ obj-$(CONFIG_ARCH_GEMINI) += gemini/ > > > > obj-$(CONFIG_ARCH_MXC) += imx/ > > > > obj-$(CONFIG_ARCH_IXP4XX) += ixp4xx/ > > > > obj-$(CONFIG_SOC_XWAY) += lantiq/ > > > > +obj-$(CONFIG_LITEX_SOC_CONTROLLER) += litex/ > > > > obj-y += mediatek/ > > > > obj-y += amlogic/ > > > > obj-y += qcom/ > > > > diff --git a/drivers/soc/litex/Kconfig b/drivers/soc/litex/Kconfig > > > > new file mode 100644 > > > > index 000000000000..71264c0e1d6c > > > > --- /dev/null > > > > +++ b/drivers/soc/litex/Kconfig > > > > @@ -0,0 +1,14 @@ > > > > +# SPDX-License_Identifier: GPL-2.0 > > > > + > > > > +menu "Enable LiteX SoC Builder specific drivers" > > > > + > > > > +config LITEX_SOC_CONTROLLER > > > > + tristate "Enable LiteX SoC Controller driver" > > > > + help > > > > + This option enables the SoC Controller Driver which verifies > > > > + LiteX CSR access and provides common litex_get_reg/litex_set_reg > > > > + accessors. > > > > + All drivers that use functions from litex.h must depend on > > > > + LITEX_SOC_CONTROLLER. > > > > + > > > > +endmenu > > > > diff --git a/drivers/soc/litex/Makefile b/drivers/soc/litex/Makefile > > > > new file mode 100644 > > > > index 000000000000..98ff7325b1c0 > > > > --- /dev/null > > > > +++ b/drivers/soc/litex/Makefile > > > > @@ -0,0 +1,3 @@ > > > > +# SPDX-License_Identifier: GPL-2.0 > > > > + > > > > +obj-$(CONFIG_LITEX_SOC_CONTROLLER) += litex_soc_ctrl.o > > > > diff --git a/drivers/soc/litex/litex_soc_ctrl.c b/drivers/soc/litex/litex_soc_ctrl.c > > > > new file mode 100644 > > > > index 000000000000..5defba000fd4 > > > > --- /dev/null > > > > +++ b/drivers/soc/litex/litex_soc_ctrl.c > > > > @@ -0,0 +1,217 @@ > > > > +// SPDX-License-Identifier: GPL-2.0 > > > > +/* > > > > + * LiteX SoC Controller Driver > > > > + * > > > > + * Copyright (C) 2020 Antmicro > > > > + * > > > > + */ > > > > + > > > > +#include > > > > +#include > > > > +#include > > > > +#include > > > > +#include > > > > +#include > > > > +#include > > > > +#include > > > > +#include > > > > +#include > > > > + > > > > +/* > > > > + * The parameters below are true for LiteX SoC > > > > + * configured for 8-bit CSR Bus, 32-bit aligned. > > > > + * > > > > + * Supporting other configurations will require > > > > + * extending the logic in this header. > > > > + */ > > > > +#define LITEX_REG_SIZE 0x4 > > > > +#define LITEX_SUBREG_SIZE 0x1 > > > > +#define LITEX_SUBREG_SIZE_BIT (LITEX_SUBREG_SIZE * 8) > > > > + > > > > +static DEFINE_SPINLOCK(csr_lock); > > > > + > > > > +static inline unsigned long read_pointer_with_barrier( > > > > + const volatile void __iomem *addr) > > > > +{ > > > > + unsigned long val; > > > > + > > > > + __io_br(); > > > > + val = *(const volatile unsigned long __force *)addr; > > > > + __io_ar(); > > > > + return val; > > > > +} > > > > + > > > > +static inline void write_pointer_with_barrier( > > > > + volatile void __iomem *addr, unsigned long val) > > > > +{ > > > > + __io_br(); > > > > + *(volatile unsigned long __force *)addr = val; > > > > + __io_ar(); > > > > +} > > > > + > > > > > > I'm defining read_pointer_with_barrier/write_pointer_with_barrier in > > > order to make sure that a series of reads/writes to a single CSR > > > register will not be reordered by the compiler. > > > > Please do not do this, there are core kernel calls for this, otherwise > > this would be required by every individual driver, which would be crazy. > > > > > Does __raw_readl/__raw_writel guarantee this property? If so, I could > > > drop my functions and use the system ones instead. > > > > Try it and see. > > Since I want to avoid read/write reordering caused by the compiler > optimizations I don't want to rely on a single manual test. > What I mean is that even if it works now for me, it does not guarantee > that it will in the future version of the compiler/using different > compilation flags/etc, right? No, if the common functions stop working, then they will be fixed. If you try to roll your own and they stop working in the future, no one will notice. Please use the common in-kernel functions for this, it's not ok for drivers to try to do it themselves for basic things like this, no matter what platform they think they are designed for :) thanks, greg k-h