From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Mateusz Holenko <mholenko@antmicro.com>
Cc: Rob Herring <robh+dt@kernel.org>,
Mark Rutland <mark.rutland@arm.com>, Jiri Slaby <jslaby@suse.com>,
devicetree@vger.kernel.org,
"open list:SERIAL DRIVERS" <linux-serial@vger.kernel.org>,
Stafford Horne <shorne@gmail.com>,
Karol Gugala <kgugala@antmicro.com>,
Mauro Carvalho Chehab <mchehab+samsung@kernel.org>,
"David S. Miller" <davem@davemloft.net>,
"Paul E. McKenney" <paulmck@linux.ibm.com>,
Filip Kokosinski <fkokosinski@antmicro.com>,
Pawel Czarnecki <pczarnecki@internships.antmicro.com>,
Joel Stanley <joel@jms.id.au>,
Jonathan Cameron <Jonathan.Cameron@huawei.com>,
Maxime Ripard <mripard@kernel.org>,
Shawn Guo <shawnguo@kernel.org>, Heiko Stuebner <heiko@sntech.de>,
Sam Ravnborg <sam@ravnborg.org>, Icenowy Zheng <icenowy@aosc.io>,
Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 3/5] drivers/soc/litex: add LiteX SoC Controller driver
Date: Thu, 2 Apr 2020 09:42:59 +0200 [thread overview]
Message-ID: <20200402074259.GC2755501@kroah.com> (raw)
In-Reply-To: <CAPk366QLHbR9cnLs244VbOXOLAg56yhG7O-DEAc1x1ZTvthiig@mail.gmail.com>
On Thu, Apr 02, 2020 at 08:50:40AM +0200, Mateusz Holenko wrote:
> On Thu, Apr 2, 2020 at 8:46 AM Mateusz Holenko <mholenko@antmicro.com> wrote:
> >
> > From: Pawel Czarnecki <pczarnecki@internships.antmicro.com>
> >
> > This commit adds driver for the FPGA-based LiteX SoC
> > Controller from LiteX SoC builder.
> >
> > Co-developed-by: Mateusz Holenko <mholenko@antmicro.com>
> > Signed-off-by: Mateusz Holenko <mholenko@antmicro.com>
> > Signed-off-by: Pawel Czarnecki <pczarnecki@internships.antmicro.com>
> > ---
> >
> > 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 <kgugala@antmicro.com>
> > M: Mateusz Holenko <mholenko@antmicro.com>
> > 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 <jpoimboe@redhat.com>
> > 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 <www.antmicro.com>
> > + *
> > + */
> > +
> > +#include <linux/litex.h>
> > +#include <linux/device.h>
> > +#include <linux/errno.h>
> > +#include <linux/of.h>
> > +#include <linux/of_platform.h>
> > +#include <linux/platform_device.h>
> > +#include <linux/printk.h>
> > +#include <linux/module.h>
> > +#include <linux/errno.h>
> > +#include <linux/io.h>
> > +
> > +/*
> > + * 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. What's wrong with the normal iomem read/write
functions?
Also, just writing to a pointer like you did above is not how to do
this, please use the normal function calls, that way your driver will
work properly.
thanks,
greg k-h
next prev parent reply other threads:[~2020-04-02 7:43 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-02 6:45 [PATCH v4 0/5] LiteX SoC controller and LiteUART serial driver Mateusz Holenko
2020-04-02 6:45 ` [PATCH v4 1/5] dt-bindings: vendor: add vendor prefix for LiteX Mateusz Holenko
2020-04-02 6:45 ` [PATCH v4 2/5] dt-bindings: soc: document LiteX SoC Controller bindings Mateusz Holenko
2020-04-14 17:03 ` Rob Herring
2020-04-02 6:46 ` [PATCH v4 3/5] drivers/soc/litex: add LiteX SoC Controller driver Mateusz Holenko
2020-04-02 6:50 ` Mateusz Holenko
2020-04-02 7:42 ` Greg Kroah-Hartman [this message]
2020-04-02 13:50 ` Mateusz Holenko
2020-04-16 14:18 ` Greg Kroah-Hartman
2020-04-21 8:29 ` Mateusz Holenko
2020-04-21 9:32 ` Greg Kroah-Hartman
2020-04-09 7:45 ` Sam Ravnborg
2020-04-10 13:56 ` Mateusz Holenko
2020-04-02 6:46 ` [PATCH v4 4/5] dt-bindings: serial: document LiteUART bindings Mateusz Holenko
2020-04-02 6:46 ` [PATCH v4 5/5] drivers/tty/serial: add LiteUART driver Mateusz Holenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200402074259.GC2755501@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=Jonathan.Cameron@huawei.com \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=fkokosinski@antmicro.com \
--cc=heiko@sntech.de \
--cc=icenowy@aosc.io \
--cc=joel@jms.id.au \
--cc=jslaby@suse.com \
--cc=kgugala@antmicro.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mchehab+samsung@kernel.org \
--cc=mholenko@antmicro.com \
--cc=mripard@kernel.org \
--cc=paulmck@linux.ibm.com \
--cc=pczarnecki@internships.antmicro.com \
--cc=robh+dt@kernel.org \
--cc=sam@ravnborg.org \
--cc=shawnguo@kernel.org \
--cc=shorne@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).