* [PATCH 0/6] soc: Add Baikal-T1 SoC APB/AXI EHB and L2-cache drivers @ 2020-03-06 13:07 Sergey.Semin 2020-03-06 15:19 ` Arnd Bergmann ` (4 more replies) 0 siblings, 5 replies; 25+ messages in thread From: Sergey.Semin @ 2020-03-06 13:07 UTC (permalink / raw) Cc: Serge Semin, Serge Semin, Alexey Malahov, Maxim Kaurkin, Pavel Parkhomenko, Ramil Zaripov, Ekaterina Skachko, Vadim Vlasov, Thomas Bogendoerfer, Paul Burton, Ralf Baechle, Rob Herring, Mark Rutland, Arnd Bergmann, Olof Johansson, soc, devicetree, linux-kernel From: Serge Semin <fancer.lancer@gmail.com> Aside from PCIe/SATA/DDR/I2C/CPU-reboot specific settings the Baikal-T1 system controller provides three vendor-specific blocks. In particular there are two Errors Handler Blocks to detect and report an info regarding any problems discovered on the AXI and APB buses. These are the main buses utilized by the SoC devices to interact with each other. In addition there is a way to tune the MIPS P5600 CM2 L2-cache up by setting the Tag/Data/WS L2-to-RAM latencies. All of this functionality is implemented in the APB/AXI EHB and L2-cache control block drivers to be a part of the kernel soc subsystem (as being specific to the Baikal-T1 SoC) and introduced in the framework of this patchset. This patchset is rebased and tested on the mainline Linux kernel 5.6-rc4: commit 98d54f81e36b ("Linux 5.6-rc4"). Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> Signed-off-by: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru> Cc: Maxim Kaurkin <Maxim.Kaurkin@baikalelectronics.ru> Cc: Pavel Parkhomenko <Pavel.Parkhomenko@baikalelectronics.ru> Cc: Ramil Zaripov <Ramil.Zaripov@baikalelectronics.ru> Cc: Ekaterina Skachko <Ekaterina.Skachko@baikalelectronics.ru> Cc: Vadim Vlasov <V.Vlasov@baikalelectronics.ru> Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de> Cc: Paul Burton <paulburton@kernel.org> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Rob Herring <robh+dt@kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Olof Johansson <olof@lixom.net> Cc: soc@kernel.org Cc: devicetree@vger.kernel.org Cc: linux-kernel@vger.kernel.org Serge Semin (6): dt-bindings: Add Baikal-T1 AXI-bus EHB dts bindings file dt-bindings: Add Baikal-T1 APB-bus EHB dts bindings file dt-bindings: Add Baikal-T1 L2-cache Control Block dts bindings file soc: bt1: Add Baikal-T1 AXI-bus EHB driver soc: bt1: Add Baikal-T1 APB-bus EHB driver soc: bt1: Add Baikal-T1 L2-cache Control Block driver .../soc/baikal-t1/be,bt1-apb-ehb.yaml | 66 +++ .../soc/baikal-t1/be,bt1-axi-ehb.yaml | 52 +++ .../bindings/soc/baikal-t1/be,bt1-l2-ctl.yaml | 108 +++++ drivers/soc/Kconfig | 1 + drivers/soc/Makefile | 1 + drivers/soc/baikal-t1/Kconfig | 49 +++ drivers/soc/baikal-t1/Makefile | 4 + drivers/soc/baikal-t1/apb-ehb.c | 381 ++++++++++++++++++ drivers/soc/baikal-t1/axi-ehb.c | 250 ++++++++++++ drivers/soc/baikal-t1/common.h | 37 ++ drivers/soc/baikal-t1/l2-ctl.c | 325 +++++++++++++++ 11 files changed, 1274 insertions(+) create mode 100644 Documentation/devicetree/bindings/soc/baikal-t1/be,bt1-apb-ehb.yaml create mode 100644 Documentation/devicetree/bindings/soc/baikal-t1/be,bt1-axi-ehb.yaml create mode 100644 Documentation/devicetree/bindings/soc/baikal-t1/be,bt1-l2-ctl.yaml create mode 100644 drivers/soc/baikal-t1/Kconfig create mode 100644 drivers/soc/baikal-t1/Makefile create mode 100644 drivers/soc/baikal-t1/apb-ehb.c create mode 100644 drivers/soc/baikal-t1/axi-ehb.c create mode 100644 drivers/soc/baikal-t1/common.h create mode 100644 drivers/soc/baikal-t1/l2-ctl.c -- 2.25.1 ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 0/6] soc: Add Baikal-T1 SoC APB/AXI EHB and L2-cache drivers 2020-03-06 13:07 [PATCH 0/6] soc: Add Baikal-T1 SoC APB/AXI EHB and L2-cache drivers Sergey.Semin @ 2020-03-06 15:19 ` Arnd Bergmann 2020-03-12 21:25 ` Rob Herring 2020-03-26 14:12 ` Arnd Bergmann 2020-03-12 21:26 ` Rob Herring ` (3 subsequent siblings) 4 siblings, 2 replies; 25+ messages in thread From: Arnd Bergmann @ 2020-03-06 15:19 UTC (permalink / raw) To: Sergey.Semin Cc: Serge Semin, Alexey Malahov, Maxim Kaurkin, Pavel Parkhomenko, Ramil Zaripov, Ekaterina Skachko, Vadim Vlasov, Thomas Bogendoerfer, Paul Burton, Ralf Baechle, Rob Herring, Mark Rutland, Olof Johansson, SoC Team, DTML, linux-kernel On Fri, Mar 6, 2020 at 2:07 PM <Sergey.Semin@baikalelectronics.ru> wrote: > > From: Serge Semin <fancer.lancer@gmail.com> > > Aside from PCIe/SATA/DDR/I2C/CPU-reboot specific settings the Baikal-T1 > system controller provides three vendor-specific blocks. In particular > there are two Errors Handler Blocks to detect and report an info regarding > any problems discovered on the AXI and APB buses. These are the main buses > utilized by the SoC devices to interact with each other. In addition there > is a way to tune the MIPS P5600 CM2 L2-cache up by setting the Tag/Data/WS > L2-to-RAM latencies. All of this functionality is implemented in the > APB/AXI EHB and L2-cache control block drivers to be a part of the kernel soc > subsystem (as being specific to the Baikal-T1 SoC) and introduced in the > framework of this patchset. > > This patchset is rebased and tested on the mainline Linux kernel 5.6-rc4: > commit 98d54f81e36b ("Linux 5.6-rc4"). I have no objection to the drivers, but I wonder if these should be in drivers/bus and drivers/memory instead of drivers/soc, which have similar drivers already. The driver for the L2 cache is not really a memory controller driver, but it may be close enough, and we already have a couple of different things in there. Arnd ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 0/6] soc: Add Baikal-T1 SoC APB/AXI EHB and L2-cache drivers 2020-03-06 15:19 ` Arnd Bergmann @ 2020-03-12 21:25 ` Rob Herring 2020-04-01 15:32 ` Sergey Semin 2020-03-26 14:12 ` Arnd Bergmann 1 sibling, 1 reply; 25+ messages in thread From: Rob Herring @ 2020-03-12 21:25 UTC (permalink / raw) To: Arnd Bergmann Cc: Sergey.Semin, Serge Semin, Alexey Malahov, Maxim Kaurkin, Pavel Parkhomenko, Ramil Zaripov, Ekaterina Skachko, Vadim Vlasov, Thomas Bogendoerfer, Paul Burton, Ralf Baechle, Mark Rutland, Olof Johansson, SoC Team, DTML, linux-kernel On Fri, Mar 06, 2020 at 04:19:47PM +0100, Arnd Bergmann wrote: > On Fri, Mar 6, 2020 at 2:07 PM <Sergey.Semin@baikalelectronics.ru> wrote: > > > > From: Serge Semin <fancer.lancer@gmail.com> > > > > Aside from PCIe/SATA/DDR/I2C/CPU-reboot specific settings the Baikal-T1 > > system controller provides three vendor-specific blocks. In particular > > there are two Errors Handler Blocks to detect and report an info regarding > > any problems discovered on the AXI and APB buses. These are the main buses > > utilized by the SoC devices to interact with each other. In addition there > > is a way to tune the MIPS P5600 CM2 L2-cache up by setting the Tag/Data/WS > > L2-to-RAM latencies. All of this functionality is implemented in the > > APB/AXI EHB and L2-cache control block drivers to be a part of the kernel soc > > subsystem (as being specific to the Baikal-T1 SoC) and introduced in the > > framework of this patchset. > > > > This patchset is rebased and tested on the mainline Linux kernel 5.6-rc4: > > commit 98d54f81e36b ("Linux 5.6-rc4"). > > I have no objection to the drivers, but I wonder if these should be > in drivers/bus and drivers/memory instead of drivers/soc, which have > similar drivers already. The driver for the L2 cache is not really a > memory controller driver, but it may be close enough, and we > already have a couple of different things in there. I don't have the driver side in my inbox, but isn't setting up cache latencies in a driver a little late? Rob ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 0/6] soc: Add Baikal-T1 SoC APB/AXI EHB and L2-cache drivers 2020-03-12 21:25 ` Rob Herring @ 2020-04-01 15:32 ` Sergey Semin 0 siblings, 0 replies; 25+ messages in thread From: Sergey Semin @ 2020-04-01 15:32 UTC (permalink / raw) To: Rob Herring Cc: Arnd Bergmann, Alexey Malahov, Maxim Kaurkin, Pavel Parkhomenko, Ramil Zaripov, Ekaterina Skachko, Vadim Vlasov, Thomas Bogendoerfer, Paul Burton, Ralf Baechle, Mark Rutland, Olof Johansson, SoC Team, DTML, linux-kernel On Thu, Mar 12, 2020 at 04:25:57PM -0500, Rob Herring wrote: > On Fri, Mar 06, 2020 at 04:19:47PM +0100, Arnd Bergmann wrote: > > On Fri, Mar 6, 2020 at 2:07 PM <Sergey.Semin@baikalelectronics.ru> wrote: > > > > > > From: Serge Semin <fancer.lancer@gmail.com> > > > > > > Aside from PCIe/SATA/DDR/I2C/CPU-reboot specific settings the Baikal-T1 > > > system controller provides three vendor-specific blocks. In particular > > > there are two Errors Handler Blocks to detect and report an info regarding > > > any problems discovered on the AXI and APB buses. These are the main buses > > > utilized by the SoC devices to interact with each other. In addition there > > > is a way to tune the MIPS P5600 CM2 L2-cache up by setting the Tag/Data/WS > > > L2-to-RAM latencies. All of this functionality is implemented in the > > > APB/AXI EHB and L2-cache control block drivers to be a part of the kernel soc > > > subsystem (as being specific to the Baikal-T1 SoC) and introduced in the > > > framework of this patchset. > > > > > > This patchset is rebased and tested on the mainline Linux kernel 5.6-rc4: > > > commit 98d54f81e36b ("Linux 5.6-rc4"). > > > > I have no objection to the drivers, but I wonder if these should be > > in drivers/bus and drivers/memory instead of drivers/soc, which have > > similar drivers already. The driver for the L2 cache is not really a > > memory controller driver, but it may be close enough, and we > > already have a couple of different things in there. > > I don't have the driver side in my inbox, but isn't setting up cache > latencies in a driver a little late? > > Rob Generally speaking there is no much difference at what moment the driver is loaded and device is probed. First of all the L2-RAM latencies should be setup by the system bootloader before RAM is detected and the memory controller is enabled and run (though default value is normally Ok to use). In a worst case if the bootloader did something wrong it may cause either the performance degradation (up to 10% - 20% drop), or the system may get to be absolutely unstable. In the later the kernel (and bootloader) may collapse at any moment, most likely before the driver is loaded even at the very first possible stage. Due to this uncertainty the upcoming l2-cache tuning stage doesn't really matter. So this driver can be used either to tune the system performance up by updating the system dtb while leaving the bootloader code unchanged, or by setting the latencies from user-space to the corresponding sysfs nodes exported by the driver. Regards, -Sergey ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 0/6] soc: Add Baikal-T1 SoC APB/AXI EHB and L2-cache drivers 2020-03-06 15:19 ` Arnd Bergmann 2020-03-12 21:25 ` Rob Herring @ 2020-03-26 14:12 ` Arnd Bergmann 2020-04-01 15:37 ` Sergey Semin 1 sibling, 1 reply; 25+ messages in thread From: Arnd Bergmann @ 2020-03-26 14:12 UTC (permalink / raw) To: Sergey.Semin Cc: Serge Semin, Alexey Malahov, Maxim Kaurkin, Pavel Parkhomenko, Ramil Zaripov, Ekaterina Skachko, Vadim Vlasov, Thomas Bogendoerfer, Paul Burton, Ralf Baechle, Rob Herring, Mark Rutland, Olof Johansson, SoC Team, DTML, linux-kernel On Fri, Mar 6, 2020 at 4:19 PM Arnd Bergmann <arnd@arndb.de> wrote: > > On Fri, Mar 6, 2020 at 2:07 PM <Sergey.Semin@baikalelectronics.ru> wrote: > > > > From: Serge Semin <fancer.lancer@gmail.com> > > > > Aside from PCIe/SATA/DDR/I2C/CPU-reboot specific settings the Baikal-T1 > > system controller provides three vendor-specific blocks. In particular > > there are two Errors Handler Blocks to detect and report an info regarding > > any problems discovered on the AXI and APB buses. These are the main buses > > utilized by the SoC devices to interact with each other. In addition there > > is a way to tune the MIPS P5600 CM2 L2-cache up by setting the Tag/Data/WS > > L2-to-RAM latencies. All of this functionality is implemented in the > > APB/AXI EHB and L2-cache control block drivers to be a part of the kernel soc > > subsystem (as being specific to the Baikal-T1 SoC) and introduced in the > > framework of this patchset. > > > > This patchset is rebased and tested on the mainline Linux kernel 5.6-rc4: > > commit 98d54f81e36b ("Linux 5.6-rc4"). > > I have no objection to the drivers, but I wonder if these should be > in drivers/bus and drivers/memory instead of drivers/soc, which have > similar drivers already. The driver for the L2 cache is not really a > memory controller driver, but it may be close enough, and we > already have a couple of different things in there. I don't see a reply to Rob's or my comments, so I assume you are not currently updating them and I will wait for a new version after the v5.7 merge window. Dropping the series from patchwork for now, see [1]. Arnd [1] https://patchwork.kernel.org/project/linux-soc/list/ ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 0/6] soc: Add Baikal-T1 SoC APB/AXI EHB and L2-cache drivers 2020-03-26 14:12 ` Arnd Bergmann @ 2020-04-01 15:37 ` Sergey Semin 0 siblings, 0 replies; 25+ messages in thread From: Sergey Semin @ 2020-04-01 15:37 UTC (permalink / raw) To: Arnd Bergmann Cc: Alexey Malahov, Maxim Kaurkin, Pavel Parkhomenko, Ramil Zaripov, Ekaterina Skachko, Vadim Vlasov, Thomas Bogendoerfer, Paul Burton, Ralf Baechle, Rob Herring, Mark Rutland, Olof Johansson, SoC Team, DTML, linux-kernel On Thu, Mar 26, 2020 at 03:12:46PM +0100, Arnd Bergmann wrote: > On Fri, Mar 6, 2020 at 4:19 PM Arnd Bergmann <arnd@arndb.de> wrote: > > > > On Fri, Mar 6, 2020 at 2:07 PM <Sergey.Semin@baikalelectronics.ru> wrote: > > > > > > From: Serge Semin <fancer.lancer@gmail.com> > > > > > > Aside from PCIe/SATA/DDR/I2C/CPU-reboot specific settings the Baikal-T1 > > > system controller provides three vendor-specific blocks. In particular > > > there are two Errors Handler Blocks to detect and report an info regarding > > > any problems discovered on the AXI and APB buses. These are the main buses > > > utilized by the SoC devices to interact with each other. In addition there > > > is a way to tune the MIPS P5600 CM2 L2-cache up by setting the Tag/Data/WS > > > L2-to-RAM latencies. All of this functionality is implemented in the > > > APB/AXI EHB and L2-cache control block drivers to be a part of the kernel soc > > > subsystem (as being specific to the Baikal-T1 SoC) and introduced in the > > > framework of this patchset. > > > > > > This patchset is rebased and tested on the mainline Linux kernel 5.6-rc4: > > > commit 98d54f81e36b ("Linux 5.6-rc4"). > > > > I have no objection to the drivers, but I wonder if these should be > > in drivers/bus and drivers/memory instead of drivers/soc, which have > > similar drivers already. The driver for the L2 cache is not really a > > memory controller driver, but it may be close enough, and we > > already have a couple of different things in there. > > I don't see a reply to Rob's or my comments, so I assume you are not currently > updating them and I will wait for a new version after the v5.7 merge window. > > Dropping the series from patchwork for now, see [1]. > > Arnd > > [1] https://patchwork.kernel.org/project/linux-soc/list/ Yeah, sorry for the delay. I'll send an update very soon. A solution for the ehb'es is settled. We agreed to move the drivers to the drivers/bus subsystem. While we still don't know what to do with l2-cache driver. Please see my last response to your comment on the cover-letter. Regards, -Sergey ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 0/6] soc: Add Baikal-T1 SoC APB/AXI EHB and L2-cache drivers 2020-03-06 13:07 [PATCH 0/6] soc: Add Baikal-T1 SoC APB/AXI EHB and L2-cache drivers Sergey.Semin 2020-03-06 15:19 ` Arnd Bergmann @ 2020-03-12 21:26 ` Rob Herring [not found] ` <20200306153246.9373B80307C4@mail.baikalelectronics.ru> ` (2 subsequent siblings) 4 siblings, 0 replies; 25+ messages in thread From: Rob Herring @ 2020-03-12 21:26 UTC (permalink / raw) To: Sergey.Semin Cc: Serge Semin, Alexey Malahov, Maxim Kaurkin, Pavel Parkhomenko, Ramil Zaripov, Ekaterina Skachko, Vadim Vlasov, Thomas Bogendoerfer, Paul Burton, Ralf Baechle, Mark Rutland, Arnd Bergmann, Olof Johansson, soc, devicetree, linux-kernel On Fri, Mar 06, 2020 at 04:07:15PM +0300, Sergey.Semin@baikalelectronics.ru wrote: > From: Serge Semin <fancer.lancer@gmail.com> > > Aside from PCIe/SATA/DDR/I2C/CPU-reboot specific settings the Baikal-T1 > system controller provides three vendor-specific blocks. In particular > there are two Errors Handler Blocks to detect and report an info regarding > any problems discovered on the AXI and APB buses. These are the main buses > utilized by the SoC devices to interact with each other. In addition there > is a way to tune the MIPS P5600 CM2 L2-cache up by setting the Tag/Data/WS > L2-to-RAM latencies. All of this functionality is implemented in the > APB/AXI EHB and L2-cache control block drivers to be a part of the kernel soc > subsystem (as being specific to the Baikal-T1 SoC) and introduced in the > framework of this patchset. > > This patchset is rebased and tested on the mainline Linux kernel 5.6-rc4: > commit 98d54f81e36b ("Linux 5.6-rc4"). > > Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> > Signed-off-by: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru> > Cc: Maxim Kaurkin <Maxim.Kaurkin@baikalelectronics.ru> > Cc: Pavel Parkhomenko <Pavel.Parkhomenko@baikalelectronics.ru> > Cc: Ramil Zaripov <Ramil.Zaripov@baikalelectronics.ru> > Cc: Ekaterina Skachko <Ekaterina.Skachko@baikalelectronics.ru> > Cc: Vadim Vlasov <V.Vlasov@baikalelectronics.ru> > Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de> > Cc: Paul Burton <paulburton@kernel.org> > Cc: Ralf Baechle <ralf@linux-mips.org> > Cc: Rob Herring <robh+dt@kernel.org> > Cc: Mark Rutland <mark.rutland@arm.com> > Cc: Arnd Bergmann <arnd@arndb.de> > Cc: Olof Johansson <olof@lixom.net> > Cc: soc@kernel.org > Cc: devicetree@vger.kernel.org > Cc: linux-kernel@vger.kernel.org > > Serge Semin (6): > dt-bindings: Add Baikal-T1 AXI-bus EHB dts bindings file > dt-bindings: Add Baikal-T1 APB-bus EHB dts bindings file These 2 look fine other than the same comments given on your other patches. Rob ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <20200306153246.9373B80307C4@mail.baikalelectronics.ru>]
* Re: [PATCH 0/6] soc: Add Baikal-T1 SoC APB/AXI EHB and L2-cache drivers [not found] ` <20200306153246.9373B80307C4@mail.baikalelectronics.ru> @ 2020-04-01 15:06 ` Sergey Semin 2020-04-01 19:10 ` Arnd Bergmann 0 siblings, 1 reply; 25+ messages in thread From: Sergey Semin @ 2020-04-01 15:06 UTC (permalink / raw) To: Arnd Bergmann Cc: Alexey Malahov, Maxim Kaurkin, Pavel Parkhomenko, Ramil Zaripov, Ekaterina Skachko, Vadim Vlasov, Thomas Bogendoerfer, Paul Burton, Ralf Baechle, Rob Herring, Mark Rutland, Olof Johansson, SoC Team, DTML, linux-kernel Hello Arnd, On Fri, Mar 06, 2020 at 04:19:47PM +0100, Arnd Bergmann wrote: > On Fri, Mar 6, 2020 at 2:07 PM <Sergey.Semin@baikalelectronics.ru> wrote: > > > > From: Serge Semin <fancer.lancer@gmail.com> > > > > Aside from PCIe/SATA/DDR/I2C/CPU-reboot specific settings the Baikal-T1 > > system controller provides three vendor-specific blocks. In particular > > there are two Errors Handler Blocks to detect and report an info regarding > > any problems discovered on the AXI and APB buses. These are the main buses > > utilized by the SoC devices to interact with each other. In addition there > > is a way to tune the MIPS P5600 CM2 L2-cache up by setting the Tag/Data/WS > > L2-to-RAM latencies. All of this functionality is implemented in the > > APB/AXI EHB and L2-cache control block drivers to be a part of the kernel soc > > subsystem (as being specific to the Baikal-T1 SoC) and introduced in the > > framework of this patchset. > > > > This patchset is rebased and tested on the mainline Linux kernel 5.6-rc4: > > commit 98d54f81e36b ("Linux 5.6-rc4"). > > I have no objection to the drivers, but I wonder if these should be > in drivers/bus and drivers/memory instead of drivers/soc, which have > similar drivers already. The driver for the L2 cache is not really a > memory controller driver, but it may be close enough, and we > already have a couple of different things in there. > > Arnd Sorry for a delay. I was analyzing and fixing comments, which were raised in the framework of anther patchsets I've submitted. Some of them including yours cause bigger changes than just a few fixups and might be resolved at once by a solution I've described in RFC: https://lkml.org/lkml/2020/3/22/393 You've been in Cc there, so feel free to send your comments. Regarding ehb drivers. You are right. They should be moved to the drivers/bus (it has also been described in the RFC). It is more suitable place for them. I'll do it in v2. Regarding l2 driver. Do you really think that L2 cache should be in drivers/memory? First there is no any cache-related drivers in that subsystem (at least I couldn't find any). Second the Baikal-T1 L2-cache-RAM config block has just indirect connection with RAM. The block just tunes the L2-cache<->RAM stall clock cycles up on WS/Tag/Data RAM IO-operations. This config seems more SoC-specific, than memory-like. Do you think that the driver should still be in drivers/memory? On the other hand the block is part of the System Controller. I could just embed the l2-cache driver functionality into the System Controller MFD driver. Though honestly IMHO the functionality should live in a dedicated driver and drivers/soc is a better place for it. I also have doubts this part will be well accepted by Lee (drivers/mfd maintainer). So what do you think? Regards, -Sergey ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 0/6] soc: Add Baikal-T1 SoC APB/AXI EHB and L2-cache drivers 2020-04-01 15:06 ` Sergey Semin @ 2020-04-01 19:10 ` Arnd Bergmann 2020-04-01 21:52 ` Sergey Semin 0 siblings, 1 reply; 25+ messages in thread From: Arnd Bergmann @ 2020-04-01 19:10 UTC (permalink / raw) To: Sergey Semin Cc: Alexey Malahov, Maxim Kaurkin, Pavel Parkhomenko, Ramil Zaripov, Ekaterina Skachko, Vadim Vlasov, Thomas Bogendoerfer, Paul Burton, Ralf Baechle, Rob Herring, Mark Rutland, Olof Johansson, SoC Team, DTML, linux-kernel On Wed, Apr 1, 2020 at 5:06 PM Sergey Semin <Sergey.Semin@baikalelectronics.ru> wrote: > On Fri, Mar 06, 2020 at 04:19:47PM +0100, Arnd Bergmann wrote: > > On Fri, Mar 6, 2020 at 2:07 PM <Sergey.Semin@baikalelectronics.ru> wrote: > > > > > > From: Serge Semin <fancer.lancer@gmail.com> > > > > > > Aside from PCIe/SATA/DDR/I2C/CPU-reboot specific settings the Baikal-T1 > > > system controller provides three vendor-specific blocks. In particular > > > there are two Errors Handler Blocks to detect and report an info regarding > > > any problems discovered on the AXI and APB buses. These are the main buses > > > utilized by the SoC devices to interact with each other. In addition there > > > is a way to tune the MIPS P5600 CM2 L2-cache up by setting the Tag/Data/WS > > > L2-to-RAM latencies. All of this functionality is implemented in the > > > APB/AXI EHB and L2-cache control block drivers to be a part of the kernel soc > > > subsystem (as being specific to the Baikal-T1 SoC) and introduced in the > > > framework of this patchset. > > > > > > This patchset is rebased and tested on the mainline Linux kernel 5.6-rc4: > > > commit 98d54f81e36b ("Linux 5.6-rc4"). > > > > I have no objection to the drivers, but I wonder if these should be > > in drivers/bus and drivers/memory instead of drivers/soc, which have > > similar drivers already. The driver for the L2 cache is not really a > > memory controller driver, but it may be close enough, and we > > already have a couple of different things in there. > > > Regarding l2 driver. Do you really think that L2 cache should be in > drivers/memory? First there is no any cache-related drivers in that > subsystem (at least I couldn't find any). Second the Baikal-T1 > L2-cache-RAM config block has just indirect connection with RAM. > The block just tunes the L2-cache<->RAM stall clock cycles up on > WS/Tag/Data RAM IO-operations. This config seems more SoC-specific, > than memory-like. Do you think that the driver should still be in > drivers/memory? Either way could work, and both locations are a bit of a dumping ground for different kinds of drivers. My preference would be drivers/memory, but if anyone has a strong opinion the other way, drivers/soc would be acceptable as well. > On the other hand the block is part of the System Controller. I could > just embed the l2-cache driver functionality into the System Controller > MFD driver. Though honestly IMHO the functionality should live in > a dedicated driver and drivers/soc is a better place for it. I also have > doubts this part will be well accepted by Lee (drivers/mfd maintainer). > > So what do you think? If you make it a combined driver with the system controller, drivers/soc would be the most logical place. drivers/mfd should only be used for a multiplexer with child drivers doing the actual functionality. Arnd ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH 0/6] soc: Add Baikal-T1 SoC APB/AXI EHB and L2-cache drivers 2020-04-01 19:10 ` Arnd Bergmann @ 2020-04-01 21:52 ` Sergey Semin 0 siblings, 0 replies; 25+ messages in thread From: Sergey Semin @ 2020-04-01 21:52 UTC (permalink / raw) To: Arnd Bergmann Cc: Alexey Malahov, Maxim Kaurkin, Pavel Parkhomenko, Ramil Zaripov, Ekaterina Skachko, Vadim Vlasov, Thomas Bogendoerfer, Paul Burton, Ralf Baechle, Rob Herring, Mark Rutland, Olof Johansson, SoC Team, DTML, linux-kernel On Wed, Apr 01, 2020 at 09:10:20PM +0200, Arnd Bergmann wrote: > On Wed, Apr 1, 2020 at 5:06 PM Sergey Semin > <Sergey.Semin@baikalelectronics.ru> wrote: > > On Fri, Mar 06, 2020 at 04:19:47PM +0100, Arnd Bergmann wrote: > > > On Fri, Mar 6, 2020 at 2:07 PM <Sergey.Semin@baikalelectronics.ru> wrote: > > > > > > > > From: Serge Semin <fancer.lancer@gmail.com> > > > > > > > > Aside from PCIe/SATA/DDR/I2C/CPU-reboot specific settings the Baikal-T1 > > > > system controller provides three vendor-specific blocks. In particular > > > > there are two Errors Handler Blocks to detect and report an info regarding > > > > any problems discovered on the AXI and APB buses. These are the main buses > > > > utilized by the SoC devices to interact with each other. In addition there > > > > is a way to tune the MIPS P5600 CM2 L2-cache up by setting the Tag/Data/WS > > > > L2-to-RAM latencies. All of this functionality is implemented in the > > > > APB/AXI EHB and L2-cache control block drivers to be a part of the kernel soc > > > > subsystem (as being specific to the Baikal-T1 SoC) and introduced in the > > > > framework of this patchset. > > > > > > > > This patchset is rebased and tested on the mainline Linux kernel 5.6-rc4: > > > > commit 98d54f81e36b ("Linux 5.6-rc4"). > > > > > > I have no objection to the drivers, but I wonder if these should be > > > in drivers/bus and drivers/memory instead of drivers/soc, which have > > > similar drivers already. The driver for the L2 cache is not really a > > > memory controller driver, but it may be close enough, and we > > > already have a couple of different things in there. > > > > > > Regarding l2 driver. Do you really think that L2 cache should be in > > drivers/memory? First there is no any cache-related drivers in that > > subsystem (at least I couldn't find any). Second the Baikal-T1 > > L2-cache-RAM config block has just indirect connection with RAM. > > The block just tunes the L2-cache<->RAM stall clock cycles up on > > WS/Tag/Data RAM IO-operations. This config seems more SoC-specific, > > than memory-like. Do you think that the driver should still be in > > drivers/memory? > > Either way could work, and both locations are a bit of a dumping > ground for different kinds of drivers. My preference would be > drivers/memory, but if anyone has a strong opinion the other way, > drivers/soc would be acceptable as well. > > > On the other hand the block is part of the System Controller. I could > > just embed the l2-cache driver functionality into the System Controller > > MFD driver. Though honestly IMHO the functionality should live in > > a dedicated driver and drivers/soc is a better place for it. I also have > > doubts this part will be well accepted by Lee (drivers/mfd maintainer). > > > > So what do you think? > > If you make it a combined driver with the system controller, > drivers/soc would be the most logical place. drivers/mfd should > only be used for a multiplexer with child drivers doing the > actual functionality. > > Arnd I see. Thanks for the comment. I'll move the l2-cache driver to the drivers/memory then and send a new patchset referring to this discussion when it's ready. I'll make sure it'll be Cc'ed to you too. Regards, -Sergey ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v2 0/4] bus: Add Baikal-T1 SoC APB/AXI bus drivers 2020-03-06 13:07 [PATCH 0/6] soc: Add Baikal-T1 SoC APB/AXI EHB and L2-cache drivers Sergey.Semin ` (2 preceding siblings ...) [not found] ` <20200306153246.9373B80307C4@mail.baikalelectronics.ru> @ 2020-05-07 22:41 ` Serge Semin 2020-05-07 22:41 ` [PATCH v2 1/4] dt-bindings: bus: Add Baikal-T1 AXI-bus binding Serge Semin ` (3 more replies) 2020-05-07 23:07 ` [PATCH v2 0/2] memory: Add Baikal-T1 L2-cache driver Serge Semin 4 siblings, 4 replies; 25+ messages in thread From: Serge Semin @ 2020-05-07 22:41 UTC (permalink / raw) To: Thomas Bogendoerfer, Greg Kroah-Hartman, Arnd Bergmann Cc: Serge Semin, Serge Semin, Alexey Malahov, Maxim Kaurkin, Pavel Parkhomenko, Ramil Zaripov, Ekaterina Skachko, Vadim Vlasov, Alexey Kolotnikov, Paul Burton, Ralf Baechle, Tony Lindgren, Tero Kristo, Manivannan Sadhasivam, Jeffrey Hugo, Linus Walleij, Rob Herring, Olof Johansson, linux-mips, soc, devicetree, linux-kernel Baikal-T1 SoC CPU is based on two MIPS Warrior P5600 cores. Their main memory Non-Coherent IO interface is connected to the OCP2AXI bridge, which in turn is then connected to the DW AMBA 3 AXI Interconnect (so called Main Interconnect) with nine masters and four slaves ports. Main Interconnect is responsible for the AXI-bus traffic arbitration (QoS) and its routing from one component to another. In addition there is a Errors Handler Block (EHB) responsible to detect AXI protocol errors and device not responding situations built on top the interconnect. Baikal-T1 AXI-bus driver included in this patchset will be responsible for working with that functionality, though currently it doesn't support QoS tuning. Instead it's capable of detecting the error events, reporting an info about them to the system log, injecting artificial errors to test the driver functionality. Since AXI Interconnect doesn't provide a way to find out which devices are connected to it, so its DT node is supposed to be compatible with "simple-bus" driver, while sub-nodes shall represent the masters attached to the bus. One of the AXI Interconnect slaves is an AXI-APB bridge used to access the Baikal-T1 SoC subsystems CSRs. MMIO request from CPU and DMAC masters are routed there if they are detected to be within [0x08000000 0x1FFFFFFF] range of the physical memory. In case if an attempted APB transaction stays with no response for a pre-defined time it will be detected by the APB-bus Errors Handler Block (EHB), which will raise an interrupt, then the bus gets freed for a next operation. The APB-bus driver provides the interrupt handler to detect the erroneous address, update an errors counter and prints an error message about the faulty address. The counter and the APB-bus operations timeout can be accessed via corresponding sysfs nodes. A dedicated sysfs-node can be also used to artificially cause the bus errors described above. Since APB-bus is a platform bus, it doesn't provide a way to detect slave devices connected to it, so similarly to the AXI-bus it's also supposed to be compatible with "simple-bus" driver. This patchset is rebased and tested on the mainline Linux kernel 5.7-rc4: 0e698dfa2822 ("Linux 5.7-rc4") tag: v5.7-rc4 Note initially the driver was a part of the patchset created to reside in the kernel soc subsystem. But after a short discussion with Arnd: https://lkml.org/lkml/2020/3/6/422 we decided to move it here. New vendor prefix will be added in the framework of the next patchset: https://lkml.org/lkml/2020/5/6/1047 Changelog v2: - Assign dual GPL/BSD licenses to the bindings. - Use single lined copyright headers in the bindings. - Replace "additionalProperties: false" property with "unevaluatedProperties: false" in the bindings. - Don't use a multi-arg clock phandle reference in DT binding examples. Thus remove includes from there. - Fix some commit message and Kconfig help text spelling. - Move drivers from soc to the bus subsystem. - Convert a simple EHB drivers to the Baikal-T1 AXI and APB bus ones. - Convert APB bus driver to using regmap MMIO API. - Use syscon regmap to access the AXI-bus erroneous address. - Add reset line support. - Add Main Interconnect clock support to the AXI-bus driver. - Remove probe-status info string printout. - Discard of_match_ptr() macro utilization. - Don't print error-message if no platform IRQ found. Just return an error. - Use generic FIELD_{GET,PREP} macros instead of handwritten ones in the AXI-bus driver. Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> Cc: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru> Cc: Maxim Kaurkin <Maxim.Kaurkin@baikalelectronics.ru> Cc: Pavel Parkhomenko <Pavel.Parkhomenko@baikalelectronics.ru> Cc: Ramil Zaripov <Ramil.Zaripov@baikalelectronics.ru> Cc: Ekaterina Skachko <Ekaterina.Skachko@baikalelectronics.ru> Cc: Vadim Vlasov <V.Vlasov@baikalelectronics.ru> Cc: Alexey Kolotnikov <Alexey.Kolotnikov@baikalelectronics.ru> Cc: Paul Burton <paulburton@kernel.org> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Tony Lindgren <tony@atomide.com> Cc: Tero Kristo <t-kristo@ti.com> Cc: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> Cc: Jeffrey Hugo <jhugo@codeaurora.org> Cc: Linus Walleij <linus.walleij@linaro.org> Cc: Rob Herring <robh+dt@kernel.org> Cc: Olof Johansson <olof@lixom.net> Cc: linux-mips@vger.kernel.org Cc: soc@kernel.org Cc: devicetree@vger.kernel.org Cc: linux-kernel@vger.kernel.org Serge Semin (4): dt-bindings: bus: Add Baikal-T1 AXI-bus binding dt-bindings: bus: Add Baikal-T1 APB-bus binding bus: Add Baikal-T1 AXI-bus driver bus: Add Baikal-T1 APB-bus driver .../bindings/bus/baikal,bt1-apb.yaml | 90 ++++ .../bindings/bus/baikal,bt1-axi.yaml | 95 ++++ drivers/bus/Kconfig | 30 ++ drivers/bus/Makefile | 2 + drivers/bus/bt1-apb.c | 421 ++++++++++++++++++ drivers/bus/bt1-axi.c | 318 +++++++++++++ 6 files changed, 956 insertions(+) create mode 100644 Documentation/devicetree/bindings/bus/baikal,bt1-apb.yaml create mode 100644 Documentation/devicetree/bindings/bus/baikal,bt1-axi.yaml create mode 100644 drivers/bus/bt1-apb.c create mode 100644 drivers/bus/bt1-axi.c -- 2.25.1 ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v2 1/4] dt-bindings: bus: Add Baikal-T1 AXI-bus binding 2020-05-07 22:41 ` [PATCH v2 0/4] bus: Add Baikal-T1 SoC APB/AXI bus drivers Serge Semin @ 2020-05-07 22:41 ` Serge Semin 2020-05-15 3:13 ` Rob Herring 2020-05-07 22:41 ` [PATCH v2 2/4] dt-bindings: bus: Add Baikal-T1 APB-bus binding Serge Semin ` (2 subsequent siblings) 3 siblings, 1 reply; 25+ messages in thread From: Serge Semin @ 2020-05-07 22:41 UTC (permalink / raw) To: Thomas Bogendoerfer, Greg Kroah-Hartman, Arnd Bergmann, Rob Herring Cc: Serge Semin, Serge Semin, Alexey Malahov, Paul Burton, Ralf Baechle, Tony Lindgren, Tero Kristo, Manivannan Sadhasivam, Jeffrey Hugo, Linus Walleij, Olof Johansson, linux-mips, soc, devicetree, linux-kernel AXI3-bus is the main communication bus connecting all high-speed peripheral IP-cores with RAM controller and with MIPS P5600 cores on Baikal-T1 SoC. This binding describes the DW AMBA 3 AXI Inteconnect and Errors Handler Block synthesized on top of it, which are responsible for the AXI-bus traffic arbitration and errors reporting upstream to CPU. Baikal-T1 AXI-bus DT node is supposed to be compatible with "be,bt1-axi" and "simple-bus" drivers, should have reg property with AXI-bus QOS registers space, syscon phandle reference to the Baikal-T1 System Controller, IRQ line declared, AXI Interconnect reference clock and reset line. Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> Cc: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru> Cc: Paul Burton <paulburton@kernel.org> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Tony Lindgren <tony@atomide.com> Cc: Tero Kristo <t-kristo@ti.com> Cc: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> Cc: Jeffrey Hugo <jhugo@codeaurora.org> Cc: Linus Walleij <linus.walleij@linaro.org> Cc: Olof Johansson <olof@lixom.net> Cc: linux-mips@vger.kernel.org Cc: soc@kernel.org --- Rob, I had to remove your Reviewed-by tag, since new changes had been introduced. Changelog v2: - Move driver to the bus subsystem. - Use dual GPL/BSD license. - Use single lined copyright header. - Lowercase the unit-address. - Convert a simple EHB block binding to the Baikal-T1 AXI-bus one with interconnect capabilities support. - Replace "additionalProperties: false" property with "unevaluatedProperties: false". - Add AXI reference clock and reset support. - Add syscon phandle reference to the Baikal-T1 System Controller node. --- .../bindings/bus/baikal,bt1-axi.yaml | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 Documentation/devicetree/bindings/bus/baikal,bt1-axi.yaml diff --git a/Documentation/devicetree/bindings/bus/baikal,bt1-axi.yaml b/Documentation/devicetree/bindings/bus/baikal,bt1-axi.yaml new file mode 100644 index 000000000000..082ab5c3b4f5 --- /dev/null +++ b/Documentation/devicetree/bindings/bus/baikal,bt1-axi.yaml @@ -0,0 +1,95 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +# Copyright (C) 2020 BAIKAL ELECTRONICS, JSC +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/bus/baikal,bt1-axi.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Baikal-T1 AXI-bus + +maintainers: + - Serge Semin <fancer.lancer@gmail.com> + +description: | + AXI3-bus is the main communication bus of Baikal-T1 SoC connecting all + high-speed peripheral IP-cores with RAM controller and with MIPS P5600 + cores. Traffic arbitration is done by means of DW AXI Interconnect (so + called AXI Main Interconnect) routing IO requests from one block to + another: from CPU to SoC peripherals and between some SoC peripherals + (mostly between peripheral devices and RAM, but also between DMA and + some peripherals). In case of any protocol error, device not responding + an IRQ is raised and a faulty situation is reported to the AXI EHB + (Errors Handler Block) embedded on top of the DW AXI Interconnect and + accessible by means of the Baikal-T1 System Controller. + +allOf: + - $ref: /schemas/simple-bus.yaml# + +properties: + compatible: + contains: + const: baikal,bt1-axi + + reg: + maxItems: 1 + + '#interconnect-cells': + const: 1 + + syscon: + $ref: /schemas/types.yaml#definitions/phandle + description: Phandle to the Baikal-T1 System Controller DT node + + interrupts: + maxItems: 1 + + clocks: + items: + - description: Main Interconnect uplink reference clock + + clock-names: + items: + - const: aclk + + resets: + items: + - description: Main Interconnect reset line + + reset-names: + items: + - const: arst + +unevaluatedProperties: false + +required: + - compatible + - reg + - syscon + - interrupts + - clocks + - clock-names + +examples: + - | + #include <dt-bindings/interrupt-controller/mips-gic.h> + + bus@1f05a000 { + compatible = "baikal,bt1-axi", "simple-bus"; + reg = <0 0x1f05a000 0 0x1000>; + #address-cells = <1>; + #size-cells = <1>; + #interconnect-cells = <1>; + + syscon = <&syscon>; + + ranges; + + interrupts = <GIC_SHARED 127 IRQ_TYPE_LEVEL_HIGH>; + + clocks = <&ccu_axi 0>; + clock-names = "aclk"; + + resets = <&ccu_axi 0>; + reset-names = "arst"; + }; +... -- 2.25.1 ^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [PATCH v2 1/4] dt-bindings: bus: Add Baikal-T1 AXI-bus binding 2020-05-07 22:41 ` [PATCH v2 1/4] dt-bindings: bus: Add Baikal-T1 AXI-bus binding Serge Semin @ 2020-05-15 3:13 ` Rob Herring 0 siblings, 0 replies; 25+ messages in thread From: Rob Herring @ 2020-05-15 3:13 UTC (permalink / raw) To: Serge Semin Cc: Manivannan Sadhasivam, Serge Semin, Olof Johansson, Ralf Baechle, Alexey Malahov, devicetree, Tony Lindgren, Tero Kristo, Arnd Bergmann, Jeffrey Hugo, Greg Kroah-Hartman, Paul Burton, linux-kernel, Thomas Bogendoerfer, linux-mips, Rob Herring, soc, Linus Walleij On Fri, 8 May 2020 01:41:13 +0300, Serge Semin wrote: > AXI3-bus is the main communication bus connecting all high-speed > peripheral IP-cores with RAM controller and with MIPS P5600 cores on > Baikal-T1 SoC. This binding describes the DW AMBA 3 AXI Inteconnect > and Errors Handler Block synthesized on top of it, which are > responsible for the AXI-bus traffic arbitration and errors reporting > upstream to CPU. Baikal-T1 AXI-bus DT node is supposed to be compatible > with "be,bt1-axi" and "simple-bus" drivers, should have reg property with > AXI-bus QOS registers space, syscon phandle reference to the Baikal-T1 > System Controller, IRQ line declared, AXI Interconnect reference clock and > reset line. > > Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> > Cc: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru> > Cc: Paul Burton <paulburton@kernel.org> > Cc: Ralf Baechle <ralf@linux-mips.org> > Cc: Tony Lindgren <tony@atomide.com> > Cc: Tero Kristo <t-kristo@ti.com> > Cc: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> > Cc: Jeffrey Hugo <jhugo@codeaurora.org> > Cc: Linus Walleij <linus.walleij@linaro.org> > Cc: Olof Johansson <olof@lixom.net> > Cc: linux-mips@vger.kernel.org > Cc: soc@kernel.org > > --- > > Rob, I had to remove your Reviewed-by tag, since new changes had been > introduced. > > Changelog v2: > - Move driver to the bus subsystem. > - Use dual GPL/BSD license. > - Use single lined copyright header. > - Lowercase the unit-address. > - Convert a simple EHB block binding to the Baikal-T1 AXI-bus one with > interconnect capabilities support. > - Replace "additionalProperties: false" property with > "unevaluatedProperties: false". > - Add AXI reference clock and reset support. > - Add syscon phandle reference to the Baikal-T1 System Controller node. > --- > .../bindings/bus/baikal,bt1-axi.yaml | 95 +++++++++++++++++++ > 1 file changed, 95 insertions(+) > create mode 100644 Documentation/devicetree/bindings/bus/baikal,bt1-axi.yaml > Reviewed-by: Rob Herring <robh@kernel.org> ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v2 2/4] dt-bindings: bus: Add Baikal-T1 APB-bus binding 2020-05-07 22:41 ` [PATCH v2 0/4] bus: Add Baikal-T1 SoC APB/AXI bus drivers Serge Semin 2020-05-07 22:41 ` [PATCH v2 1/4] dt-bindings: bus: Add Baikal-T1 AXI-bus binding Serge Semin @ 2020-05-07 22:41 ` Serge Semin 2020-05-15 3:13 ` Rob Herring 2020-05-07 22:41 ` [PATCH v2 3/4] bus: Add Baikal-T1 AXI-bus driver Serge Semin 2020-05-07 22:41 ` [PATCH v2 4/4] bus: Add Baikal-T1 APB-bus driver Serge Semin 3 siblings, 1 reply; 25+ messages in thread From: Serge Semin @ 2020-05-07 22:41 UTC (permalink / raw) To: Thomas Bogendoerfer, Greg Kroah-Hartman, Arnd Bergmann, Rob Herring Cc: Serge Semin, Serge Semin, Alexey Malahov, Paul Burton, Ralf Baechle, Tony Lindgren, Tero Kristo, Manivannan Sadhasivam, Jeffrey Hugo, Linus Walleij, Olof Johansson, linux-mips, soc, devicetree, linux-kernel Baikal-T1 CPU or DMAC MMIO requests are handled by the AMBA 3 AXI Interconnect which routes them to the AXI-APB bridge, which in turn serializes accesses and routes them to the corresponding APB slave device. This binding describes the AXI-APB bridge considered as the APB-bus. It is supposed to be compatible with "be,bt1-apb" and "simple-bus" drivers, should be equipped with EHB MMIO region and a region with no slave device mapped, interrupts line number, APB reference clock and domain reset line. Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> Cc: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru> Cc: Paul Burton <paulburton@kernel.org> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Tony Lindgren <tony@atomide.com> Cc: Tero Kristo <t-kristo@ti.com> Cc: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> Cc: Jeffrey Hugo <jhugo@codeaurora.org> Cc: Linus Walleij <linus.walleij@linaro.org> Cc: Olof Johansson <olof@lixom.net> Cc: linux-mips@vger.kernel.org Cc: soc@kernel.org --- Rob, I had to remove your Reviewed-by tag, since new changes had been introduced. Changelog v2: - Move driver to the bus subsystem. - Don't use a multi-arg clock phandle reference in the examples dt-bindings property. Thus redundant include statement can be removed. - Use dual GPL/BSD license. - Use single lined copyright header. - Lowercase the unit-address. - Convert a dedicated EHB block binding to the Baikal-T1 APB-bus one. - Add APB reference clock and reset support. - Replace "additionalProperties: false" property with "unevaluatedProperties: false". - Add reg-names property. --- .../bindings/bus/baikal,bt1-apb.yaml | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 Documentation/devicetree/bindings/bus/baikal,bt1-apb.yaml diff --git a/Documentation/devicetree/bindings/bus/baikal,bt1-apb.yaml b/Documentation/devicetree/bindings/bus/baikal,bt1-apb.yaml new file mode 100644 index 000000000000..d6a3b71ea835 --- /dev/null +++ b/Documentation/devicetree/bindings/bus/baikal,bt1-apb.yaml @@ -0,0 +1,90 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +# Copyright (C) 2020 BAIKAL ELECTRONICS, JSC +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/bus/baikal,bt1-apb.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Baikal-T1 APB-bus + +maintainers: + - Serge Semin <fancer.lancer@gmail.com> + +description: | + Baikal-T1 CPU or DMAC MMIO requests are handled by the AMBA 3 AXI Interconnect + which routes them to the AXI-APB bridge. This interface is a single master + multiple slaves bus in turn serializing IO accesses and routing them to the + addressed APB slave devices. In case of any APB protocol collisions, slave + device not responding on timeout an IRQ is raised with an erroneous address + reported to the APB terminator (APB Errors Handler Block). + +allOf: + - $ref: /schemas/simple-bus.yaml# + +properties: + compatible: + contains: + const: baikal,bt1-apb + + reg: + items: + - description: APB EHB MMIO registers + - description: APB MMIO region with no any device mapped + + reg-names: + items: + - const: ehb + - const: nodev + + interrupts: + maxItems: 1 + + clocks: + items: + - description: APB reference clock + + clock-names: + items: + - const: pclk + + resets: + items: + - description: APB domain reset line + + reset-names: + items: + - const: prst + +unevaluatedProperties: false + +required: + - compatible + - reg + - reg-names + - interrupts + - clocks + - clock-names + +examples: + - | + #include <dt-bindings/interrupt-controller/mips-gic.h> + + bus@1f059000 { + compatible = "baikal,bt1-apb", "simple-bus"; + reg = <0 0x1f059000 0 0x1000>, + <0 0x1d000000 0 0x2040000>; + reg-names = "ehb", "nodev"; + #address-cells = <1>; + #size-cells = <1>; + + ranges; + + interrupts = <GIC_SHARED 16 IRQ_TYPE_LEVEL_HIGH>; + + clocks = <&ccu_sys 1>; + clock-names = "pclk"; + + resets = <&ccu_sys 1>; + reset-names = "prst"; + }; +... -- 2.25.1 ^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [PATCH v2 2/4] dt-bindings: bus: Add Baikal-T1 APB-bus binding 2020-05-07 22:41 ` [PATCH v2 2/4] dt-bindings: bus: Add Baikal-T1 APB-bus binding Serge Semin @ 2020-05-15 3:13 ` Rob Herring 0 siblings, 0 replies; 25+ messages in thread From: Rob Herring @ 2020-05-15 3:13 UTC (permalink / raw) To: Serge Semin Cc: Paul Burton, soc, Alexey Malahov, Linus Walleij, Ralf Baechle, linux-kernel, Jeffrey Hugo, linux-mips, Serge Semin, Tero Kristo, Arnd Bergmann, Greg Kroah-Hartman, Thomas Bogendoerfer, Manivannan Sadhasivam, Olof Johansson, devicetree, Tony Lindgren, Rob Herring On Fri, 8 May 2020 01:41:14 +0300, Serge Semin wrote: > Baikal-T1 CPU or DMAC MMIO requests are handled by the AMBA 3 AXI > Interconnect which routes them to the AXI-APB bridge, which in turn > serializes accesses and routes them to the corresponding APB slave device. > This binding describes the AXI-APB bridge considered as the APB-bus. It is > supposed to be compatible with "be,bt1-apb" and "simple-bus" drivers, > should be equipped with EHB MMIO region and a region with no slave device > mapped, interrupts line number, APB reference clock and domain reset line. > > Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> > Cc: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru> > Cc: Paul Burton <paulburton@kernel.org> > Cc: Ralf Baechle <ralf@linux-mips.org> > Cc: Tony Lindgren <tony@atomide.com> > Cc: Tero Kristo <t-kristo@ti.com> > Cc: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> > Cc: Jeffrey Hugo <jhugo@codeaurora.org> > Cc: Linus Walleij <linus.walleij@linaro.org> > Cc: Olof Johansson <olof@lixom.net> > Cc: linux-mips@vger.kernel.org > Cc: soc@kernel.org > > --- > > Rob, I had to remove your Reviewed-by tag, since new changes had been > introduced. > > Changelog v2: > - Move driver to the bus subsystem. > - Don't use a multi-arg clock phandle reference in the examples dt-bindings > property. Thus redundant include statement can be removed. > - Use dual GPL/BSD license. > - Use single lined copyright header. > - Lowercase the unit-address. > - Convert a dedicated EHB block binding to the Baikal-T1 APB-bus one. > - Add APB reference clock and reset support. > - Replace "additionalProperties: false" property with > "unevaluatedProperties: false". > - Add reg-names property. > --- > .../bindings/bus/baikal,bt1-apb.yaml | 90 +++++++++++++++++++ > 1 file changed, 90 insertions(+) > create mode 100644 Documentation/devicetree/bindings/bus/baikal,bt1-apb.yaml > Reviewed-by: Rob Herring <robh@kernel.org> ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v2 3/4] bus: Add Baikal-T1 AXI-bus driver 2020-05-07 22:41 ` [PATCH v2 0/4] bus: Add Baikal-T1 SoC APB/AXI bus drivers Serge Semin 2020-05-07 22:41 ` [PATCH v2 1/4] dt-bindings: bus: Add Baikal-T1 AXI-bus binding Serge Semin 2020-05-07 22:41 ` [PATCH v2 2/4] dt-bindings: bus: Add Baikal-T1 APB-bus binding Serge Semin @ 2020-05-07 22:41 ` Serge Semin 2020-05-07 22:41 ` [PATCH v2 4/4] bus: Add Baikal-T1 APB-bus driver Serge Semin 3 siblings, 0 replies; 25+ messages in thread From: Serge Semin @ 2020-05-07 22:41 UTC (permalink / raw) To: Thomas Bogendoerfer, Greg Kroah-Hartman, Arnd Bergmann Cc: Serge Semin, Serge Semin, Alexey Malahov, Paul Burton, Ralf Baechle, Tony Lindgren, Tero Kristo, Manivannan Sadhasivam, Jeffrey Hugo, Linus Walleij, Olof Johansson, Rob Herring, linux-mips, soc, devicetree, David Lechner, Jonathan Cameron, Sameer Pujar, John Garry, Marek Behún, linux-kernel AXI3-bus is the main communication bus connecting all high-speed peripheral IP-cores with RAM controller and MIPS P5600 cores on Baikal-T1 SoC. Bus traffic arbitration is done by means of DW AMBA 3 AXI Interconnect (so called AXI Main Interconnect) routing IO requests from one SoC block to another. This driver provides a way to detect any bus protocol errors and device not responding situations by means of an embedded on top of the interconnect errors handler block (EHB). AXI Interconnect QoS arbitration tuning is currently unsupported. The bus doesn't provide a way to detect the interconnected devices, so they are supposed to be statically defined like by means of the simple-bus sub-nodes. Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> Cc: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru> Cc: Paul Burton <paulburton@kernel.org> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Tony Lindgren <tony@atomide.com> Cc: Tero Kristo <t-kristo@ti.com> Cc: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> Cc: Jeffrey Hugo <jhugo@codeaurora.org> Cc: Linus Walleij <linus.walleij@linaro.org> Cc: Olof Johansson <olof@lixom.net> Cc: Rob Herring <robh+dt@kernel.org> Cc: linux-mips@vger.kernel.org Cc: soc@kernel.org Cc: devicetree@vger.kernel.org --- Changelog v2: - Fix commit message and Kconfig help text spelling. - Move driver from soc to the bus subsystem. - Convert a simple EHB driver to the Baikal-T1 AXI-bus one. - Use syscon regmap to access the AXI-bus erroneous address. - Add interconnect reset line support. - Remove probe-status info string printout. - Use generic FIELD_{GET,PREP} macros instead of handwritten ones. - Since the driver depends on the OF config we can remove of_match_ptr() macro utilization. - Don't print error-message if no platform IRQ found. Just return an error. - Select MFD_SYSCON config. --- drivers/bus/Kconfig | 15 ++ drivers/bus/Makefile | 1 + drivers/bus/bt1-axi.c | 318 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 334 insertions(+) create mode 100644 drivers/bus/bt1-axi.c diff --git a/drivers/bus/Kconfig b/drivers/bus/Kconfig index 6d4e4497b59b..4139e2408937 100644 --- a/drivers/bus/Kconfig +++ b/drivers/bus/Kconfig @@ -29,6 +29,21 @@ config BRCMSTB_GISB_ARB arbiter. This driver provides timeout and target abort error handling and internal bus master decoding. +config BT1_AXI + tristate "Baikal-T1 AXI-bus driver" + depends on (MIPS_BAIKAL_T1 && OF) || COMPILE_TEST + select MFD_SYSCON + help + AXI3-bus is the main communication bus connecting all high-speed + peripheral IP-cores with RAM controller and with MIPS P5600 cores on + Baikal-T1 SoC. Traffic arbitration is done by means of DW AMBA 3 AXI + Interconnect (so called AXI Main Interconnect) routing IO requests + from one SoC block to another. This driver provides a way to detect + any bus protocol errors and device not responding situations by + means of an embedded on top of the interconnect errors handler + block (EHB). AXI Interconnect QoS arbitration tuning is currently + unsupported. + config MOXTET tristate "CZ.NIC Turris Mox module configuration bus" depends on SPI_MASTER && OF diff --git a/drivers/bus/Makefile b/drivers/bus/Makefile index 05f32cd694a4..eaa25d171ebd 100644 --- a/drivers/bus/Makefile +++ b/drivers/bus/Makefile @@ -13,6 +13,7 @@ obj-$(CONFIG_MOXTET) += moxtet.o # DPAA2 fsl-mc bus obj-$(CONFIG_FSL_MC_BUS) += fsl-mc/ +obj-$(CONFIG_BT1_AXI) += bt1-axi.o obj-$(CONFIG_IMX_WEIM) += imx-weim.o obj-$(CONFIG_MIPS_CDMM) += mips_cdmm.o obj-$(CONFIG_MVEBU_MBUS) += mvebu-mbus.o diff --git a/drivers/bus/bt1-axi.c b/drivers/bus/bt1-axi.c new file mode 100644 index 000000000000..5d288aa6da31 --- /dev/null +++ b/drivers/bus/bt1-axi.c @@ -0,0 +1,318 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) 2020 BAIKAL ELECTRONICS, JSC + * + * Authors: + * Serge Semin <Sergey.Semin@baikalelectronics.ru> + * + * Baikal-T1 AXI-bus driver + */ + +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/types.h> +#include <linux/bitfield.h> +#include <linux/device.h> +#include <linux/atomic.h> +#include <linux/regmap.h> +#include <linux/platform_device.h> +#include <linux/mfd/syscon.h> +#include <linux/interrupt.h> +#include <linux/nmi.h> +#include <linux/clk.h> +#include <linux/reset.h> +#include <linux/sysfs.h> + +#define BT1_AXI_WERRL 0x110 +#define BT1_AXI_WERRH 0x114 +#define BT1_AXI_WERRH_TYPE BIT(23) +#define BT1_AXI_WERRH_ADDR_FLD 24 +#define BT1_AXI_WERRH_ADDR_MASK GENMASK(31, BT1_AXI_WERRH_ADDR_FLD) + +/* + * struct bt1_axi - Baikal-T1 AXI-bus private data + * @dev: Pointer to the device structure. + * @qos_regs: AXI Interconnect QoS tuning registers. + * @sys_regs: Baikal-T1 System Controller registers map. + * @irq: Errors IRQ number. + * @aclk: AXI reference clock. + * @arst: AXI Interconnect reset line. + * @count: Number of errors detected. + */ +struct bt1_axi { + struct device *dev; + + void __iomem *qos_regs; + struct regmap *sys_regs; + int irq; + + struct clk *aclk; + + struct reset_control *arst; + + atomic_t count; +}; + +static irqreturn_t bt1_axi_isr(int irq, void *data) +{ + struct bt1_axi *axi = data; + u32 low = 0, high = 0; + + regmap_read(axi->sys_regs, BT1_AXI_WERRL, &low); + regmap_read(axi->sys_regs, BT1_AXI_WERRH, &high); + + dev_crit_ratelimited(axi->dev, + "AXI-bus fault %d: %s at 0x%x%08x\n", + atomic_inc_return(&axi->count), + high & BT1_AXI_WERRH_TYPE ? "no slave" : "slave protocol error", + high, low); + + /* + * Print backtrace on each CPU. This might be pointless if the fault + * has happened on the same CPU as the IRQ handler is executed or + * the other core proceeded further execution despite the error. + * But if it's not, by looking at the trace we would get straight to + * the cause of the problem. + */ + trigger_all_cpu_backtrace(); + + return IRQ_HANDLED; +} + +static void bt1_axi_clear_data(void *data) +{ + struct bt1_axi *axi = data; + struct platform_device *pdev = to_platform_device(axi->dev); + + platform_set_drvdata(pdev, NULL); +} + +static struct bt1_axi *bt1_axi_create_data(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct bt1_axi *axi; + int ret; + + axi = devm_kzalloc(dev, sizeof(*axi), GFP_KERNEL); + if (!axi) + return ERR_PTR(-ENOMEM); + + ret = devm_add_action(dev, bt1_axi_clear_data, axi); + if (ret) { + dev_err(dev, "Can't add AXI EHB data clear action\n"); + return ERR_PTR(ret); + } + + axi->dev = dev; + atomic_set(&axi->count, 0); + platform_set_drvdata(pdev, axi); + + return axi; +} + +static int bt1_axi_request_regs(struct bt1_axi *axi) +{ + struct platform_device *pdev = to_platform_device(axi->dev); + struct device *dev = axi->dev; + + axi->sys_regs = syscon_regmap_lookup_by_phandle(dev->of_node, "syscon"); + if (IS_ERR(axi->sys_regs)) { + dev_err(dev, "Couldn't find syscon registers\n"); + return PTR_ERR(axi->sys_regs); + } + + axi->qos_regs = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(axi->qos_regs)) { + dev_err(dev, "Couldn't map AXI-bus QoS registers\n"); + return PTR_ERR(axi->qos_regs); + } + + return 0; +} + +static int bt1_axi_request_rst(struct bt1_axi *axi) +{ + int ret; + + axi->arst = devm_reset_control_get_optional_exclusive(axi->dev, "arst"); + if (IS_ERR(axi->arst)) { + dev_warn(axi->dev, "Couldn't get reset control line\n"); + return PTR_ERR(axi->arst); + } + + ret = reset_control_deassert(axi->arst); + if (ret) + dev_err(axi->dev, "Failed to deassert the reset line\n"); + + return ret; +} + +static void bt1_axi_disable_clk(void *data) +{ + struct bt1_axi *axi = data; + + clk_disable_unprepare(axi->aclk); +} + +static int bt1_axi_request_clk(struct bt1_axi *axi) +{ + int ret; + + axi->aclk = devm_clk_get(axi->dev, "aclk"); + if (IS_ERR(axi->aclk)) { + dev_err(axi->dev, "Couldn't get AXI Interconnect clock\n"); + return PTR_ERR(axi->aclk); + } + + ret = clk_prepare_enable(axi->aclk); + if (ret) { + dev_err(axi->dev, "Couldn't enable the AXI clock\n"); + return ret; + } + + ret = devm_add_action_or_reset(axi->dev, bt1_axi_disable_clk, axi); + if (ret) { + dev_err(axi->dev, "Can't add AXI clock disable action\n"); + return ret; + } + + return 0; +} + +static int bt1_axi_request_irq(struct bt1_axi *axi) +{ + struct platform_device *pdev = to_platform_device(axi->dev); + int ret; + + axi->irq = platform_get_irq(pdev, 0); + if (axi->irq < 0) + return axi->irq; + + ret = devm_request_irq(axi->dev, axi->irq, bt1_axi_isr, IRQF_SHARED, + "bt1-axi", axi); + if (ret) { + dev_err(axi->dev, "Couldn't request AXI EHB IRQ\n"); + return ret; + } + + return 0; +} + +static ssize_t count_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct bt1_axi *axi = dev_get_drvdata(dev); + + return scnprintf(buf, PAGE_SIZE, "%d\n", atomic_read(&axi->count)); +} +static DEVICE_ATTR_RO(count); + +static int inject_error_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + return scnprintf(buf, PAGE_SIZE, "Error injection: bus unaligned\n"); +} + +static int inject_error_store(struct device *dev, + struct device_attribute *attr, + const char *data, size_t count) +{ + struct bt1_axi *axi = dev_get_drvdata(dev); + + /* + * Performing unaligned read from the memory will cause the CM2 bus + * error while unaligned writing - the AXI bus write error handled + * by this driver. + */ + if (!strncmp(data, "bus", 3)) + readb(axi->qos_regs); + else if (!strncmp(data, "unaligned", 9)) + writeb(0, axi->qos_regs); + else + return -EINVAL; + + return count; +} +static DEVICE_ATTR_RW(inject_error); + +static struct attribute *bt1_axi_sysfs_attrs[] = { + &dev_attr_count.attr, + &dev_attr_inject_error.attr, + NULL +}; +ATTRIBUTE_GROUPS(bt1_axi_sysfs); + +static void bt1_axi_remove_sysfs(void *data) +{ + struct bt1_axi *axi = data; + + device_remove_groups(axi->dev, bt1_axi_sysfs_groups); +} + +static int bt1_axi_init_sysfs(struct bt1_axi *axi) +{ + int ret; + + ret = device_add_groups(axi->dev, bt1_axi_sysfs_groups); + if (ret) { + dev_err(axi->dev, "Failed to add sysfs files group\n"); + return ret; + } + + ret = devm_add_action_or_reset(axi->dev, bt1_axi_remove_sysfs, axi); + if (ret) + dev_err(axi->dev, "Can't add AXI EHB sysfs remove action\n"); + + return ret; +} + +static int bt1_axi_probe(struct platform_device *pdev) +{ + struct bt1_axi *axi; + int ret; + + axi = bt1_axi_create_data(pdev); + if (IS_ERR(axi)) + return PTR_ERR(axi); + + ret = bt1_axi_request_regs(axi); + if (ret) + return ret; + + ret = bt1_axi_request_rst(axi); + if (ret) + return ret; + + ret = bt1_axi_request_clk(axi); + if (ret) + return ret; + + ret = bt1_axi_request_irq(axi); + if (ret) + return ret; + + ret = bt1_axi_init_sysfs(axi); + if (ret) + return ret; + + return 0; +} + +static const struct of_device_id bt1_axi_of_match[] = { + { .compatible = "baikal,bt1-axi" }, + { } +}; +MODULE_DEVICE_TABLE(of, bt1_axi_of_match); + +static struct platform_driver bt1_axi_driver = { + .probe = bt1_axi_probe, + .driver = { + .name = "bt1-axi", + .of_match_table = bt1_axi_of_match + } +}; +module_platform_driver(bt1_axi_driver); + +MODULE_AUTHOR("Serge Semin <Sergey.Semin@baikalelectronics.ru>"); +MODULE_DESCRIPTION("Baikal-T1 AXI-bus driver"); +MODULE_LICENSE("GPL v2"); -- 2.25.1 ^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v2 4/4] bus: Add Baikal-T1 APB-bus driver 2020-05-07 22:41 ` [PATCH v2 0/4] bus: Add Baikal-T1 SoC APB/AXI bus drivers Serge Semin ` (2 preceding siblings ...) 2020-05-07 22:41 ` [PATCH v2 3/4] bus: Add Baikal-T1 AXI-bus driver Serge Semin @ 2020-05-07 22:41 ` Serge Semin 3 siblings, 0 replies; 25+ messages in thread From: Serge Semin @ 2020-05-07 22:41 UTC (permalink / raw) To: Thomas Bogendoerfer, Greg Kroah-Hartman, Arnd Bergmann Cc: Serge Semin, Serge Semin, Alexey Malahov, Paul Burton, Ralf Baechle, Tony Lindgren, Tero Kristo, Manivannan Sadhasivam, Jeffrey Hugo, Linus Walleij, Olof Johansson, Rob Herring, linux-mips, soc, devicetree, David Lechner, Jonathan Cameron, Thierry Reding, John Garry, Marek Behún, Sameer Pujar, Sujeev Dias, Siddartha Mohanadoss, linux-kernel Baikal-T1 AXI-APB bridge is used to access the SoC subsystem CSRs. IO requests are routed to this bus by means of the DW AMBA 3 AXI Interconnect. In case if an attempted APB transaction stays with no response for a pre-defined time an interrupt occurs and the bus gets freed for a next operation. This driver provides the interrupt handler to detect the erroneous address, prints an error message about the address fault, updates an errors counter. The counter and the APB-bus operations timeout can be accessed via corresponding sysfs nodes. A dedicated sysfs-node can be also used to artificially cause the bus errors described above. Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> Cc: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru> Cc: Paul Burton <paulburton@kernel.org> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Tony Lindgren <tony@atomide.com> Cc: Tero Kristo <t-kristo@ti.com> Cc: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> Cc: Jeffrey Hugo <jhugo@codeaurora.org> Cc: Linus Walleij <linus.walleij@linaro.org> Cc: Olof Johansson <olof@lixom.net> Cc: Rob Herring <robh+dt@kernel.org> Cc: linux-mips@vger.kernel.org Cc: soc@kernel.org Cc: devicetree@vger.kernel.org --- Changelog v2: - Fix commit message and Kconfig help text spelling. - Move driver from soc to the bus subsystem. - Convert a simple EHB driver to the Baikal-T1 AXI-bus one. - Convert registers MMIO to the regmap. - Add reset line support. - Remove probe-status info string printout. - Since the driver depends on the OF config we can remove of_match_ptr() macro utilization. - Don't print error-message if no platform IRQ found. Just return an error. --- drivers/bus/Kconfig | 15 ++ drivers/bus/Makefile | 1 + drivers/bus/bt1-apb.c | 421 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 437 insertions(+) create mode 100644 drivers/bus/bt1-apb.c diff --git a/drivers/bus/Kconfig b/drivers/bus/Kconfig index 4139e2408937..5f491040c9d8 100644 --- a/drivers/bus/Kconfig +++ b/drivers/bus/Kconfig @@ -29,6 +29,21 @@ config BRCMSTB_GISB_ARB arbiter. This driver provides timeout and target abort error handling and internal bus master decoding. +config BT1_APB + tristate "Baikal-T1 APB-bus driver" + depends on (MIPS_BAIKAL_T1 && OF) || COMPILE_TEST + select REGMAP_MMIO + help + Baikal-T1 AXI-APB bridge is used to access the SoC subsystem CSRs. + IO requests are routed to this bus by means of the DW AMBA 3 AXI + Interconnect. In case of any APB protocol collisions, slave device + not responding on timeout an IRQ is raised with an erroneous address + reported to the APB terminator (APB Errors Handler Block). This + driver provides the interrupt handler to detect the erroneous + address, prints an error message about the address fault, updates an + errors counter. The counter and the APB-bus operations timeout can be + accessed via corresponding sysfs nodes. + config BT1_AXI tristate "Baikal-T1 AXI-bus driver" depends on (MIPS_BAIKAL_T1 && OF) || COMPILE_TEST diff --git a/drivers/bus/Makefile b/drivers/bus/Makefile index eaa25d171ebd..08ccbfaf7705 100644 --- a/drivers/bus/Makefile +++ b/drivers/bus/Makefile @@ -13,6 +13,7 @@ obj-$(CONFIG_MOXTET) += moxtet.o # DPAA2 fsl-mc bus obj-$(CONFIG_FSL_MC_BUS) += fsl-mc/ +obj-$(CONFIG_BT1_APB) += bt1-apb.o obj-$(CONFIG_BT1_AXI) += bt1-axi.o obj-$(CONFIG_IMX_WEIM) += imx-weim.o obj-$(CONFIG_MIPS_CDMM) += mips_cdmm.o diff --git a/drivers/bus/bt1-apb.c b/drivers/bus/bt1-apb.c new file mode 100644 index 000000000000..295cfa83aa23 --- /dev/null +++ b/drivers/bus/bt1-apb.c @@ -0,0 +1,421 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) 2020 BAIKAL ELECTRONICS, JSC + * + * Authors: + * Serge Semin <Sergey.Semin@baikalelectronics.ru> + * + * Baikal-T1 APB-bus driver + */ + +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/types.h> +#include <linux/device.h> +#include <linux/atomic.h> +#include <linux/platform_device.h> +#include <linux/interrupt.h> +#include <linux/nmi.h> +#include <linux/regmap.h> +#include <linux/clk.h> +#include <linux/reset.h> +#include <linux/time64.h> +#include <linux/clk.h> +#include <linux/sysfs.h> + +#define APB_EHB_ISR 0x00 +#define APB_EHB_ISR_PENDING BIT(0) +#define APB_EHB_ISR_MASK BIT(1) +#define APB_EHB_ADDR 0x04 +#define APB_EHB_TIMEOUT 0x08 + +#define APB_EHB_TIMEOUT_MIN 0x000003FFU +#define APB_EHB_TIMEOUT_MAX 0xFFFFFFFFU + +/* + * struct bt1_apb - Baikal-T1 APB EHB private data + * @dev: Pointer to the device structure. + * @regs: APB EHB registers map. + * @res: No-device error injection memory region. + * @irq: Errors IRQ number. + * @rate: APB-bus reference clock rate. + * @pclk: APB-reference clock. + * @prst: APB domain reset line. + * @count: Number of errors detected. + */ +struct bt1_apb { + struct device *dev; + + struct regmap *regs; + void __iomem *res; + int irq; + + unsigned long rate; + struct clk *pclk; + + struct reset_control *prst; + + atomic_t count; +}; + +static const struct regmap_config bt1_apb_regmap_cfg = { + .reg_bits = 32, + .val_bits = 32, + .reg_stride = 4, + .max_register = APB_EHB_TIMEOUT, + .fast_io = true +}; + +static inline unsigned long bt1_apb_n_to_timeout_us(struct bt1_apb *apb, u32 n) +{ + u64 timeout = (u64)n * USEC_PER_SEC; + + do_div(timeout, apb->rate); + + return timeout; + +} + +static inline unsigned long bt1_apb_timeout_to_n_us(struct bt1_apb *apb, + unsigned long timeout) +{ + u64 n = (u64)timeout * apb->rate; + + do_div(n, USEC_PER_SEC); + + return n; + +} + +static irqreturn_t bt1_apb_isr(int irq, void *data) +{ + struct bt1_apb *apb = data; + u32 addr = 0; + + regmap_read(apb->regs, APB_EHB_ADDR, &addr); + + dev_crit_ratelimited(apb->dev, + "APB-bus fault %d: Slave access timeout at 0x%08x\n", + atomic_inc_return(&apb->count), + addr); + + /* + * Print backtrace on each CPU. This might be pointless if the fault + * has happened on the same CPU as the IRQ handler is executed or + * the other core proceeded further execution despite the error. + * But if it's not, by looking at the trace we would get straight to + * the cause of the problem. + */ + trigger_all_cpu_backtrace(); + + regmap_update_bits(apb->regs, APB_EHB_ISR, APB_EHB_ISR_PENDING, 0); + + return IRQ_HANDLED; +} + +static void bt1_apb_clear_data(void *data) +{ + struct bt1_apb *apb = data; + struct platform_device *pdev = to_platform_device(apb->dev); + + platform_set_drvdata(pdev, NULL); +} + +static struct bt1_apb *bt1_apb_create_data(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct bt1_apb *apb; + int ret; + + apb = devm_kzalloc(dev, sizeof(*apb), GFP_KERNEL); + if (!apb) + return ERR_PTR(-ENOMEM); + + ret = devm_add_action(dev, bt1_apb_clear_data, apb); + if (ret) { + dev_err(dev, "Can't add APB EHB data clear action\n"); + return ERR_PTR(ret); + } + + apb->dev = dev; + atomic_set(&apb->count, 0); + platform_set_drvdata(pdev, apb); + + return apb; +} + +static int bt1_apb_request_regs(struct bt1_apb *apb) +{ + struct platform_device *pdev = to_platform_device(apb->dev); + void __iomem *regs; + + regs = devm_platform_ioremap_resource_byname(pdev, "ehb"); + if (IS_ERR(regs)) { + dev_err(apb->dev, "Couldn't map APB EHB registers\n"); + return PTR_ERR(regs); + } + + apb->regs = devm_regmap_init_mmio(apb->dev, regs, &bt1_apb_regmap_cfg); + if (IS_ERR(apb->regs)) { + dev_err(apb->dev, "Couldn't create APB EHB regmap\n"); + return PTR_ERR(apb->regs); + } + + apb->res = devm_platform_ioremap_resource_byname(pdev, "nodev"); + if (IS_ERR(apb->res)) { + dev_err(apb->dev, "Couldn't map reserved region\n"); + return PTR_ERR(apb->res); + } + + return 0; +} + +static int bt1_apb_request_rst(struct bt1_apb *apb) +{ + int ret; + + apb->prst = devm_reset_control_get_optional_exclusive(apb->dev, "prst"); + if (IS_ERR(apb->prst)) { + dev_warn(apb->dev, "Couldn't get reset control line\n"); + return PTR_ERR(apb->prst); + } + + ret = reset_control_deassert(apb->prst); + if (ret) + dev_err(apb->dev, "Failed to deassert the reset line\n"); + + return ret; +} + +static void bt1_apb_disable_clk(void *data) +{ + struct bt1_apb *apb = data; + + clk_disable_unprepare(apb->pclk); +} + +static int bt1_apb_request_clk(struct bt1_apb *apb) +{ + int ret; + + apb->pclk = devm_clk_get(apb->dev, "pclk"); + if (IS_ERR(apb->pclk)) { + dev_err(apb->dev, "Couldn't get APB clock descriptor\n"); + return PTR_ERR(apb->pclk); + } + + ret = clk_prepare_enable(apb->pclk); + if (ret) { + dev_err(apb->dev, "Couldn't enable the APB clock\n"); + return ret; + } + + ret = devm_add_action_or_reset(apb->dev, bt1_apb_disable_clk, apb); + if (ret) { + dev_err(apb->dev, "Can't add APB EHB clocks disable action\n"); + return ret; + } + + apb->rate = clk_get_rate(apb->pclk); + if (!apb->rate) { + dev_err(apb->dev, "Invalid clock rate\n"); + return -EINVAL; + } + + return 0; +} + +static void bt1_apb_clear_irq(void *data) +{ + struct bt1_apb *apb = data; + + regmap_update_bits(apb->regs, APB_EHB_ISR, APB_EHB_ISR_MASK, 0); +} + +static int bt1_apb_request_irq(struct bt1_apb *apb) +{ + struct platform_device *pdev = to_platform_device(apb->dev); + int ret; + + apb->irq = platform_get_irq(pdev, 0); + if (apb->irq < 0) + return apb->irq; + + ret = devm_request_irq(apb->dev, apb->irq, bt1_apb_isr, IRQF_SHARED, + "bt1-apb", apb); + if (ret) { + dev_err(apb->dev, "Couldn't request APB EHB IRQ\n"); + return ret; + } + + ret = devm_add_action(apb->dev, bt1_apb_clear_irq, apb); + if (ret) { + dev_err(apb->dev, "Can't add APB EHB IRQs clear action\n"); + return ret; + } + + /* Unmask IRQ and clear it' pending flag. */ + regmap_update_bits(apb->regs, APB_EHB_ISR, + APB_EHB_ISR_PENDING | APB_EHB_ISR_MASK, + APB_EHB_ISR_MASK); + + return 0; +} + +static ssize_t count_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct bt1_apb *apb = dev_get_drvdata(dev); + + return scnprintf(buf, PAGE_SIZE, "%d\n", atomic_read(&apb->count)); +} +static DEVICE_ATTR_RO(count); + +static ssize_t timeout_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct bt1_apb *apb = dev_get_drvdata(dev); + unsigned long timeout; + int ret; + u32 n; + + ret = regmap_read(apb->regs, APB_EHB_TIMEOUT, &n); + if (ret) + return ret; + + timeout = bt1_apb_n_to_timeout_us(apb, n); + + return scnprintf(buf, PAGE_SIZE, "%lu\n", timeout); +} + +static ssize_t timeout_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + struct bt1_apb *apb = dev_get_drvdata(dev); + unsigned long timeout; + int ret; + u32 n; + + if (kstrtoul(buf, 0, &timeout) < 0) + return -EINVAL; + + n = bt1_apb_timeout_to_n_us(apb, timeout); + n = clamp(n, APB_EHB_TIMEOUT_MIN, APB_EHB_TIMEOUT_MAX); + + ret = regmap_write(apb->regs, APB_EHB_TIMEOUT, n); + + return ret ?: count; +} +static DEVICE_ATTR_RW(timeout); + +static int inject_error_show(struct device *dev, struct device_attribute *attr, + char *buf) +{ + return scnprintf(buf, PAGE_SIZE, "Error injection: nodev irq\n"); +} + +static int inject_error_store(struct device *dev, + struct device_attribute *attr, + const char *data, size_t count) +{ + struct bt1_apb *apb = dev_get_drvdata(dev); + + /* + * Either dummy read from the unmapped address in the APB IO area + * or manually set the IRQ status. + */ + if (!strncmp(data, "nodev", 5)) + readl(apb->res); + else if (!strncmp(data, "irq", 3)) + regmap_update_bits(apb->regs, APB_EHB_ISR, APB_EHB_ISR_PENDING, + APB_EHB_ISR_PENDING); + else + return -EINVAL; + + return count; +} +static DEVICE_ATTR_RW(inject_error); + +static struct attribute *bt1_apb_sysfs_attrs[] = { + &dev_attr_count.attr, + &dev_attr_timeout.attr, + &dev_attr_inject_error.attr, + NULL +}; +ATTRIBUTE_GROUPS(bt1_apb_sysfs); + +static void bt1_apb_remove_sysfs(void *data) +{ + struct bt1_apb *apb = data; + + device_remove_groups(apb->dev, bt1_apb_sysfs_groups); +} + +static int bt1_apb_init_sysfs(struct bt1_apb *apb) +{ + int ret; + + ret = device_add_groups(apb->dev, bt1_apb_sysfs_groups); + if (ret) { + dev_err(apb->dev, "Failed to create EHB APB sysfs nodes\n"); + return ret; + } + + ret = devm_add_action_or_reset(apb->dev, bt1_apb_remove_sysfs, apb); + if (ret) + dev_err(apb->dev, "Can't add APB EHB sysfs remove action\n"); + + return ret; +} + +static int bt1_apb_probe(struct platform_device *pdev) +{ + struct bt1_apb *apb; + int ret; + + apb = bt1_apb_create_data(pdev); + if (IS_ERR(apb)) + return PTR_ERR(apb); + + ret = bt1_apb_request_regs(apb); + if (ret) + return ret; + + ret = bt1_apb_request_rst(apb); + if (ret) + return ret; + + ret = bt1_apb_request_clk(apb); + if (ret) + return ret; + + ret = bt1_apb_request_irq(apb); + if (ret) + return ret; + + ret = bt1_apb_init_sysfs(apb); + if (ret) + return ret; + + return 0; +} + +static const struct of_device_id bt1_apb_of_match[] = { + { .compatible = "baikal,bt1-apb" }, + { } +}; +MODULE_DEVICE_TABLE(of, bt1_apb_of_match); + +static struct platform_driver bt1_apb_driver = { + .probe = bt1_apb_probe, + .driver = { + .name = "bt1-apb", + .of_match_table = bt1_apb_of_match + } +}; +module_platform_driver(bt1_apb_driver); + +MODULE_AUTHOR("Serge Semin <Sergey.Semin@baikalelectronics.ru>"); +MODULE_DESCRIPTION("Baikal-T1 APB-bus driver"); +MODULE_LICENSE("GPL v2"); -- 2.25.1 ^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH v2 0/2] memory: Add Baikal-T1 L2-cache driver 2020-03-06 13:07 [PATCH 0/6] soc: Add Baikal-T1 SoC APB/AXI EHB and L2-cache drivers Sergey.Semin ` (3 preceding siblings ...) 2020-05-07 22:41 ` [PATCH v2 0/4] bus: Add Baikal-T1 SoC APB/AXI bus drivers Serge Semin @ 2020-05-07 23:07 ` Serge Semin 2020-05-07 23:07 ` [PATCH v2 1/2] dt-bindings: memory: Add Baikal-T1 L2-cache Control Block binding Serge Semin 2020-05-07 23:07 ` [PATCH v2 2/2] memory: Add Baikal-T1 L2-cache Control Block driver Serge Semin 4 siblings, 2 replies; 25+ messages in thread From: Serge Semin @ 2020-05-07 23:07 UTC (permalink / raw) To: Thomas Bogendoerfer, Greg Kroah-Hartman, Arnd Bergmann Cc: Serge Semin, Serge Semin, Alexey Malahov, Maxim Kaurkin, Pavel Parkhomenko, Ramil Zaripov, Ekaterina Skachko, Vadim Vlasov, Alexey Kolotnikov, Paul Burton, Ralf Baechle, Rob Herring, Olof Johansson, Boris Brezillon, Paul Cercueil, Thomas Gleixner, Masahiro Yamada, linux-mips, soc, devicetree, linux-kernel Aside from PCIe/SATA/DDR/I2C/CPU-reboot specific settings the Baikal-T1 system controller provides a MIPS P5600 CM2 L2-cache tuning block. It is responsible for the setting up the Tag/Data/WS L2-to-RAM latencies. This small patchset provides a driver and DT-schema-based binding for the described device. So that the latencies can be tuned up by means of dedicated DT properties and sysfs nodes. This patchset is rebased and tested on the mainline Linux kernel 5.7-rc4: 0e698dfa2822 ("Linux 5.7-rc4") tag: v5.7-rc4 Note initially the driver was a part of the patchset created to reside in the kernel soc subsystem. But after a short discussion with Arnd: https://lkml.org/lkml/2020/3/6/422 we decided to move it here. New vendor prefix will be added in the framework of the next patchset: https://lkml.org/lkml/2020/5/6/1047 Changelog v2: - Fix some commit message and Kconfig help text spelling. - Move the driver to the memory subsystem. - Assign dual GPL/BSD license to the DT binding. - Use single lined copyright header in the binding. - Discard reg property and syscon compatible string. - Move "allOf" restrictions to the root level of the properties. - The DT node is supposed to be a child of the Baikal-T1 system controller node. So regmap will be fetched from there. - Use generic FIELD_{GET,PREP} macro. - Remove probe-status info string printout. - Since the driver depends on the OF config we can remove of_match_ptr() macro utilization. Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> Cc: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru> Cc: Maxim Kaurkin <Maxim.Kaurkin@baikalelectronics.ru> Cc: Pavel Parkhomenko <Pavel.Parkhomenko@baikalelectronics.ru> Cc: Ramil Zaripov <Ramil.Zaripov@baikalelectronics.ru> Cc: Ekaterina Skachko <Ekaterina.Skachko@baikalelectronics.ru> Cc: Vadim Vlasov <V.Vlasov@baikalelectronics.ru> Cc: Alexey Kolotnikov <Alexey.Kolotnikov@baikalelectronics.ru> Cc: Paul Burton <paulburton@kernel.org> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Rob Herring <robh+dt@kernel.org> Cc: Olof Johansson <olof@lixom.net> Cc: Boris Brezillon <bbrezillon@kernel.org> Cc: Paul Cercueil <paul@crapouillou.net> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Masahiro Yamada <yamada.masahiro@socionext.com> Cc: linux-mips@vger.kernel.org Cc: soc@kernel.org Cc: devicetree@vger.kernel.org Cc: linux-kernel@vger.kernel.org Serge Semin (2): dt-bindings: memory: Add Baikal-T1 L2-cache Control Block binding memory: Add Baikal-T1 L2-cache Control Block driver .../memory-controllers/baikal,bt1-l2-ctl.yaml | 59 ++++ drivers/memory/Kconfig | 11 + drivers/memory/Makefile | 1 + drivers/memory/bt1-l2-ctl.c | 322 ++++++++++++++++++ 4 files changed, 393 insertions(+) create mode 100644 Documentation/devicetree/bindings/memory-controllers/baikal,bt1-l2-ctl.yaml create mode 100644 drivers/memory/bt1-l2-ctl.c -- 2.25.1 ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v2 1/2] dt-bindings: memory: Add Baikal-T1 L2-cache Control Block binding 2020-05-07 23:07 ` [PATCH v2 0/2] memory: Add Baikal-T1 L2-cache driver Serge Semin @ 2020-05-07 23:07 ` Serge Semin 2020-05-11 15:38 ` Rob Herring ` (2 more replies) 2020-05-07 23:07 ` [PATCH v2 2/2] memory: Add Baikal-T1 L2-cache Control Block driver Serge Semin 1 sibling, 3 replies; 25+ messages in thread From: Serge Semin @ 2020-05-07 23:07 UTC (permalink / raw) To: Thomas Bogendoerfer, Greg Kroah-Hartman, Arnd Bergmann, Rob Herring Cc: Serge Semin, Serge Semin, Alexey Malahov, Paul Burton, Ralf Baechle, Olof Johansson, Boris Brezillon, Paul Cercueil, Thomas Gleixner, Masahiro Yamada, linux-mips, soc, devicetree, linux-kernel There is a single register provided by the SoC system controller, which can be used to tune the L2-cache RAM up. It only provides a way to change the L2-RAM access latencies. So aside from "be,bt1-l2-ctl" compatible string the device node can be optionally equipped with the properties of Tag/Data/WS latencies. Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> Cc: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru> Cc: Paul Burton <paulburton@kernel.org> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Olof Johansson <olof@lixom.net> Cc: Boris Brezillon <bbrezillon@kernel.org> Cc: Paul Cercueil <paul@crapouillou.net> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Masahiro Yamada <yamada.masahiro@socionext.com> Cc: linux-mips@vger.kernel.org Cc: soc@kernel.org --- Changelog v2: - Move driver to the memory subsystem. - Use dual GPL/BSD license. - Use single lined copyright header. - Move "allOf" restrictions to the root level of the properties. - Discard syscon compatible string and reg property. - The DT node is supposed to be a child of the Baikal-T1 system controller node. --- .../memory-controllers/baikal,bt1-l2-ctl.yaml | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 Documentation/devicetree/bindings/memory-controllers/baikal,bt1-l2-ctl.yaml diff --git a/Documentation/devicetree/bindings/memory-controllers/baikal,bt1-l2-ctl.yaml b/Documentation/devicetree/bindings/memory-controllers/baikal,bt1-l2-ctl.yaml new file mode 100644 index 000000000000..263f0cdab4e6 --- /dev/null +++ b/Documentation/devicetree/bindings/memory-controllers/baikal,bt1-l2-ctl.yaml @@ -0,0 +1,59 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +# Copyright (C) 2020 BAIKAL ELECTRONICS, JSC +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/memory-controllers/baikal,bt1-l2-ctl.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Baikal-T1 L2-cache Control Block + +maintainers: + - Serge Semin <fancer.lancer@gmail.com> + +description: | + By means of the System Controller Baikal-T1 SoC exposes a few settings to + tune the MIPS P5600 CM2 L2 cache performance up. In particular it's possible + to change the Tag, Data and Way-select RAM access latencies. Baikal-T1 + L2-cache controller block is responsible for the tuning. Its DT node is + supposed to be a child of the system controller. + +properties: + compatible: + const: baikal,bt1-l2-ctl + + baikal,l2-ws-latency: + $ref: /schemas/types.yaml#/definitions/uint32 + description: Cycles of latency for Way-select RAM accesses + default: 0 + minimum: 0 + maximum: 3 + + baikal,l2-tag-latency: + $ref: /schemas/types.yaml#/definitions/uint32 + description: Cycles of latency for Tag RAM accesses + default: 0 + minimum: 0 + maximum: 3 + + baikal,l2-data-latency: + $ref: /schemas/types.yaml#/definitions/uint32 + description: Cycles of latency for Data RAM accesses + default: 1 + minimum: 0 + maximum: 3 + +additionalProperties: false + +required: + - compatible + +examples: + - | + l2_ctl { + compatible = "baikal,bt1-l2-ctl"; + + baikal,l2-ws-latency = <0>; + baikal,l2-tag-latency = <0>; + baikal,l2-data-latency = <1>; + }; +... -- 2.25.1 ^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: memory: Add Baikal-T1 L2-cache Control Block binding 2020-05-07 23:07 ` [PATCH v2 1/2] dt-bindings: memory: Add Baikal-T1 L2-cache Control Block binding Serge Semin @ 2020-05-11 15:38 ` Rob Herring 2020-05-11 20:25 ` Serge Semin [not found] ` <CAL_Jsq+rka7hXVy46=O3pTrN0DLCAQQ=TSpSqzoB2dxb30h66g@mail.gmail.com> 2020-05-19 12:27 ` Serge Semin 2 siblings, 1 reply; 25+ messages in thread From: Rob Herring @ 2020-05-11 15:38 UTC (permalink / raw) To: Serge Semin Cc: Paul Cercueil, Masahiro Yamada, soc, Greg Kroah-Hartman, Thomas Gleixner, Rob Herring, Olof Johansson, linux-kernel, Arnd Bergmann, Thomas Bogendoerfer, Alexey Malahov, Serge Semin, Boris Brezillon, Paul Burton, devicetree, Ralf Baechle, linux-mips On Fri, 8 May 2020 02:07:03 +0300, Serge Semin wrote: > There is a single register provided by the SoC system controller, > which can be used to tune the L2-cache RAM up. It only provides a way > to change the L2-RAM access latencies. So aside from "be,bt1-l2-ctl" > compatible string the device node can be optionally equipped with the > properties of Tag/Data/WS latencies. > > Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> > Cc: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru> > Cc: Paul Burton <paulburton@kernel.org> > Cc: Ralf Baechle <ralf@linux-mips.org> > Cc: Olof Johansson <olof@lixom.net> > Cc: Boris Brezillon <bbrezillon@kernel.org> > Cc: Paul Cercueil <paul@crapouillou.net> > Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: Masahiro Yamada <yamada.masahiro@socionext.com> > Cc: linux-mips@vger.kernel.org > Cc: soc@kernel.org > > --- > > Changelog v2: > - Move driver to the memory subsystem. > - Use dual GPL/BSD license. > - Use single lined copyright header. > - Move "allOf" restrictions to the root level of the properties. > - Discard syscon compatible string and reg property. > - The DT node is supposed to be a child of the Baikal-T1 system controller > node. > --- > .../memory-controllers/baikal,bt1-l2-ctl.yaml | 59 +++++++++++++++++++ > 1 file changed, 59 insertions(+) > create mode 100644 Documentation/devicetree/bindings/memory-controllers/baikal,bt1-l2-ctl.yaml > My bot found errors running 'make dt_binding_check' on your patch: /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/memory-controllers/baikal,bt1-l2-ctl.example.dt.yaml: l2_ctl: 'baikal,l2-data-latency', 'baikal,l2-tag-latency', 'baikal,l2-ws-latency' do not match any of the regexes: '^#.*', '^(at25|devbus|dmacap|dsa|exynos|fsi[ab]|gpio-fan|gpio|gpmc|hdmi|i2c-gpio),.*', '^(keypad|m25p|max8952|max8997|max8998|mpmc),.*', '^(pinctrl-single|#pinctrl-single|PowerPC),.*', '^(pl022|pxa-mmc|rcar_sound|rotary-encoder|s5m8767|sdhci),.*', '^(simple-audio-card|simple-graph-card|st-plgpio|st-spics|ts),.*', '^GEFanuc,.*', '^ORCL,.*', '^SUNW,.*', '^[a-zA-Z0-9#_][a-zA-Z0-9+\\-._@]{0,63}$', '^[a-zA-Z0-9+\\-._]*@[0-9a-zA-Z,]*$', '^abilis,.*', '^abracon,.*', '^acme,.*', '^actions,.*', '^active-semi,.*', '^ad,.*', '^adafruit,.*', '^adapteva,.*', '^adaptrum,.*', '^adh,.*', '^adi,.*', '^advantech,.*', '^aeroflexgaisler,.*', '^al,.*', '^allegro,.*', '^allo,.*', '^allwinner,.*', '^alphascale,.*', '^altr,.*', '^amarula,.*', '^amazon,.*', '^amcc,.*', '^am d,.*', '^amediatech,.*', '^amlogic,.*', '^ampire,.*', '^ams,.*', '^amstaos,.*', '^analogix,.*', '^andestech,.*', '^anvo,.*', '^apm,.*', '^aptina,.*', '^arasan,.*', '^archermind,.*', '^arctic,.*', '^arcx,.*', '^aries,.*', '^arm,.*', '^armadeus,.*', '^arrow,.*', '^artesyn,.*', '^asahi-kasei,.*', '^asc,.*', '^aspeed,.*', '^asus,.*', '^atlas,.*', '^atmel,.*', '^auo,.*', '^auvidea,.*', '^avago,.*', '^avia,.*', '^avic,.*', '^avnet,.*', '^axentia,.*', '^axis,.*', '^azoteq,.*', '^azw,.*', '^bananapi,.*', '^beacon,.*', '^bhf,.*', '^bitmain,.*', '^boe,.*', '^bosch,.*', '^boundary,.*', '^brcm,.*', '^broadmobi,.*', '^bticino,.*', '^buffalo,.*', '^bur,.*', '^calaosystems,.*', '^calxeda,.*', '^capella,.*', '^cascoda,.*', '^catalyst,.*', '^cavium,.*', '^cdns,.*', '^cdtech,.*', '^ceva,.*', '^chipidea,.*', '^chipone,.*', '^chipspark,.*', '^chrp,.*', '^chunghwa,.*', '^chuwi,.*', '^ciaa,.*', '^cirrus,.*', '^cloudengines,.*', '^cnm,.*', '^cnxt,.*', '^colorfly,.*', '^compulab,.*', '^coreriver,.*', '^cor pro,.*', '^cortina,.*', '^cosmic,.*', '^crane,.*', '^creative,.*', '^crystalfontz,.*', '^csky,.*', '^csq,.*', '^cubietech,.*', '^cypress,.*', '^cznic,.*', '^dallas,.*', '^dataimage,.*', '^davicom,.*', '^dell,.*', '^delta,.*', '^denx,.*', '^devantech,.*', '^dh,.*', '^difrnce,.*', '^digi,.*', '^digilent,.*', '^dioo,.*', '^dlc,.*', '^dlg,.*', '^dlink,.*', '^dmo,.*', '^domintech,.*', '^dongwoon,.*', '^dptechnics,.*', '^dragino,.*', '^dserve,.*', '^dynaimage,.*', '^ea,.*', '^ebs-systart,.*', '^ebv,.*', '^eckelmann,.*', '^edt,.*', '^eeti,.*', '^einfochips,.*', '^elan,.*', '^elgin,.*', '^elida,.*', '^embest,.*', '^emlid,.*', '^emmicro,.*', '^empire-electronix,.*', '^emtrion,.*', '^endless,.*', '^ene,.*', '^energymicro,.*', '^engicam,.*', '^epcos,.*', '^epfl,.*', '^epson,.*', '^esp,.*', '^est,.*', '^ettus,.*', '^eukrea,.*', '^everest,.*', '^everspin,.*', '^evervision,.*', '^exar,.*', '^excito,.*', '^ezchip,.*', '^facebook,.*', '^fairphone,.*', '^faraday,.*', '^fastrax,.*', '^fcs,.*', '^feix in,.*', '^feiyang,.*', '^firefly,.*', '^focaltech,.*', '^frida,.*', '^friendlyarm,.*', '^fsl,.*', '^fujitsu,.*', '^gardena,.*', '^gateworks,.*', '^gcw,.*', '^ge,.*', '^geekbuying,.*', '^gef,.*', '^gemei,.*', '^geniatech,.*', '^giantec,.*', '^giantplus,.*', '^globalscale,.*', '^globaltop,.*', '^gmt,.*', '^goodix,.*', '^google,.*', '^grinn,.*', '^grmn,.*', '^gumstix,.*', '^gw,.*', '^hannstar,.*', '^haoyu,.*', '^hardkernel,.*', '^hideep,.*', '^himax,.*', '^hisilicon,.*', '^hit,.*', '^hitex,.*', '^holt,.*', '^holtek,.*', '^honeywell,.*', '^hoperun,.*', '^hp,.*', '^hsg,.*', '^hugsun,.*', '^hwacom,.*', '^hydis,.*', '^hyundai,.*', '^i2se,.*', '^ibm,.*', '^icplus,.*', '^idt,.*', '^ifi,.*', '^ilitek,.*', '^img,.*', '^incircuit,.*', '^inet-tek,.*', '^infineon,.*', '^inforce,.*', '^ingenic,.*', '^innolux,.*', '^inside-secure,.*', '^inspur,.*', '^intel,.*', '^intercontrol,.*', '^invensense,.*', '^inversepath,.*', '^iom,.*', '^isee,.*', '^isil,.*', '^issi,.*', '^ite,.*', '^itead,.*', '^iwave,.*' , '^jdi,.*', '^jedec,.*', '^jesurun,.*', '^jianda,.*', '^kam,.*', '^karo,.*', '^keithkoep,.*', '^keymile,.*', '^khadas,.*', '^kiebackpeter,.*', '^kinetic,.*', '^kingdisplay,.*', '^kingnovel,.*', '^kionix,.*', '^kobo,.*', '^koe,.*', '^kontron,.*', '^kosagi,.*', '^kyo,.*', '^lacie,.*', '^laird,.*', '^lamobo,.*', '^lantiq,.*', '^lattice,.*', '^leadtek,.*', '^leez,.*', '^lego,.*', '^lemaker,.*', '^lenovo,.*', '^lg,.*', '^lgphilips,.*', '^libretech,.*', '^licheepi,.*', '^linaro,.*', '^linksprite,.*', '^linksys,.*', '^linutronix,.*', '^linux,.*', '^linx,.*', '^lltc,.*', '^logicpd,.*', '^logictechno,.*', '^longcheer,.*', '^loongson,.*', '^lsi,.*', '^lwn,.*', '^macnica,.*', '^mapleboard,.*', '^marvell,.*', '^maxbotix,.*', '^maxim,.*', '^mbvl,.*', '^mcube,.*', '^meas,.*', '^mecer,.*', '^mediatek,.*', '^megachips,.*', '^mele,.*', '^melexis,.*', '^melfas,.*', '^mellanox,.*', '^memsic,.*', '^menlo,.*', '^merrii,.*', '^micrel,.*', '^microchip,.*', '^microcrystal,.*', '^micron,.*', '^microsoft,.* ', '^mikroe,.*', '^miniand,.*', '^minix,.*', '^miramems,.*', '^mitsubishi,.*', '^mosaixtech,.*', '^motorola,.*', '^moxa,.*', '^mpl,.*', '^mps,.*', '^mqmaker,.*', '^mrvl,.*', '^mscc,.*', '^msi,.*', '^mti,.*', '^multi-inno,.*', '^mundoreader,.*', '^murata,.*', '^mxicy,.*', '^myir,.*', '^national,.*', '^nec,.*', '^neonode,.*', '^netgear,.*', '^netlogic,.*', '^netron-dy,.*', '^netxeon,.*', '^neweast,.*', '^newhaven,.*', '^nexbox,.*', '^nextthing,.*', '^ni,.*', '^nintendo,.*', '^nlt,.*', '^nokia,.*', '^nordic,.*', '^novtech,.*', '^nutsboard,.*', '^nuvoton,.*', '^nvd,.*', '^nvidia,.*', '^nxp,.*', '^oceanic,.*', '^okaya,.*', '^oki,.*', '^olimex,.*', '^olpc,.*', '^onion,.*', '^onnn,.*', '^ontat,.*', '^opalkelly,.*', '^opencores,.*', '^openrisc,.*', '^option,.*', '^oranth,.*', '^orisetech,.*', '^ortustech,.*', '^osddisplays,.*', '^overkiz,.*', '^ovti,.*', '^oxsemi,.*', '^ozzmaker,.*', '^panasonic,.*', '^parade,.*', '^parallax,.*', '^pda,.*', '^pericom,.*', '^pervasive,.*', '^phicomm,.*', '^p hytec,.*', '^picochip,.*', '^pine64,.*', '^pineriver,.*', '^pixcir,.*', '^plantower,.*', '^plathome,.*', '^plda,.*', '^plx,.*', '^pni,.*', '^pocketbook,.*', '^polaroid,.*', '^portwell,.*', '^poslab,.*', '^pov,.*', '^powervr,.*', '^primux,.*', '^probox2,.*', '^pulsedlight,.*', '^purism,.*', '^qca,.*', '^qcom,.*', '^qemu,.*', '^qi,.*', '^qiaodian,.*', '^qihua,.*', '^qnap,.*', '^radxa,.*', '^raidsonic,.*', '^ralink,.*', '^ramtron,.*', '^raspberrypi,.*', '^raydium,.*', '^rda,.*', '^realtek,.*', '^renesas,.*', '^rervision,.*', '^richtek,.*', '^ricoh,.*', '^rikomagic,.*', '^riscv,.*', '^rockchip,.*', '^rocktech,.*', '^rohm,.*', '^ronbo,.*', '^roofull,.*', '^samsung,.*', '^samtec,.*', '^sancloud,.*', '^sandisk,.*', '^satoz,.*', '^sbs,.*', '^schindler,.*', '^seagate,.*', '^seirobotics,.*', '^semtech,.*', '^sensirion,.*', '^sensortek,.*', '^sff,.*', '^sgd,.*', '^sgmicro,.*', '^sgx,.*', '^sharp,.*', '^shimafuji,.*', '^si-en,.*', '^si-linux,.*', '^sifive,.*', '^sigma,.*', '^sii,.*', '^sil,.*', '^silabs,.*', '^silead,.*', '^silergy,.*', '^siliconmitus,.*', '^simtek,.*', '^sinlinx,.*', '^sinovoip,.*', '^sipeed,.*', '^sirf,.*', '^sis,.*', '^sitronix,.*', '^skyworks,.*', '^smsc,.*', '^snps,.*', '^sochip,.*', '^socionext,.*', '^solidrun,.*', '^solomon,.*', '^sony,.*', '^spansion,.*', '^sprd,.*', '^sst,.*', '^st,.*', '^st-ericsson,.*', '^starry,.*', '^startek,.*', '^ste,.*', '^stericsson,.*', '^summit,.*', '^sunchip,.*', '^swir,.*', '^syna,.*', '^synology,.*', '^tbs,.*', '^tbs-biometrics,.*', '^tcg,.*', '^tcl,.*', '^technexion,.*', '^technologic,.*', '^techstar,.*', '^tempo,.*', '^terasic,.*', '^tfc,.*', '^thine,.*', '^ti,.*', '^tianma,.*', '^tlm,.*', '^tmt,.*', '^topeet,.*', '^toppoly,.*', '^topwise,.*', '^toradex,.*', '^toshiba,.*', '^toumaz,.*', '^tpk,.*', '^tplink,.*', '^tpo,.*', '^tq,.*', '^tronfy,.*', '^tronsmart,.*', '^truly,.*', '^tsd,.*', '^tyan,.*', '^u-blox,.*', '^ubnt,.*', '^ucrobotics,.*', '^udoo,.*', '^ugoos,.*', '^uniwest,.*', '^upisemi,.*', '^urt,.*', '^usi,.*' , '^utoo,.*', '^v3,.*', '^vamrs,.*', '^variscite,.*', '^via,.*', '^videostrong,.*', '^virtio,.*', '^vishay,.*', '^vitesse,.*', '^vivante,.*', '^vocore,.*', '^voipac,.*', '^vot,.*', '^vxt,.*', '^waveshare,.*', '^wd,.*', '^wetek,.*', '^wexler,.*', '^whwave,.*', '^wi2wi,.*', '^winbond,.*', '^winstar,.*', '^wits,.*', '^wlf,.*', '^wm,.*', '^wobo,.*', '^x-powers,.*', '^xes,.*', '^xiaomi,.*', '^xillybus,.*', '^xinpeng,.*', '^xlnx,.*', '^xunlong,.*', '^xylon,.*', '^yna,.*', '^yones-toptech,.*', '^ysoft,.*', '^zarlink,.*', '^zeitec,.*', '^zidoo,.*', '^zii,.*', '^zte,.*', '^zyxel,.*' See https://patchwork.ozlabs.org/patch/1285665 If you already ran 'make dt_binding_check' and didn't see the above error(s), then make sure dt-schema is up to date: pip3 install git+https://github.com/devicetree-org/dt-schema.git@master --upgrade Please check and re-submit. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: memory: Add Baikal-T1 L2-cache Control Block binding 2020-05-11 15:38 ` Rob Herring @ 2020-05-11 20:25 ` Serge Semin [not found] ` <CAL_JsqJEZF5xkNGGiBy5rgUFfg=hWp6qi=tzFW84cGD9m-p5SA@mail.gmail.com> 0 siblings, 1 reply; 25+ messages in thread From: Serge Semin @ 2020-05-11 20:25 UTC (permalink / raw) To: Rob Herring Cc: Serge Semin, Paul Cercueil, Masahiro Yamada, soc, Greg Kroah-Hartman, Thomas Gleixner, Rob Herring, Olof Johansson, linux-kernel, Arnd Bergmann, Thomas Bogendoerfer, Alexey Malahov, Boris Brezillon, Paul Burton, devicetree, Ralf Baechle, linux-mips On Mon, May 11, 2020 at 10:38:04AM -0500, Rob Herring wrote: > On Fri, 8 May 2020 02:07:03 +0300, Serge Semin wrote: > > There is a single register provided by the SoC system controller, > > which can be used to tune the L2-cache RAM up. It only provides a way > > to change the L2-RAM access latencies. So aside from "be,bt1-l2-ctl" > > compatible string the device node can be optionally equipped with the > > properties of Tag/Data/WS latencies. > > > > Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> > > Cc: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru> > > Cc: Paul Burton <paulburton@kernel.org> > > Cc: Ralf Baechle <ralf@linux-mips.org> > > Cc: Olof Johansson <olof@lixom.net> > > Cc: Boris Brezillon <bbrezillon@kernel.org> > > Cc: Paul Cercueil <paul@crapouillou.net> > > Cc: Thomas Gleixner <tglx@linutronix.de> > > Cc: Masahiro Yamada <yamada.masahiro@socionext.com> > > Cc: linux-mips@vger.kernel.org > > Cc: soc@kernel.org > > > > --- > > > > Changelog v2: > > - Move driver to the memory subsystem. > > - Use dual GPL/BSD license. > > - Use single lined copyright header. > > - Move "allOf" restrictions to the root level of the properties. > > - Discard syscon compatible string and reg property. > > - The DT node is supposed to be a child of the Baikal-T1 system controller > > node. > > --- > > .../memory-controllers/baikal,bt1-l2-ctl.yaml | 59 +++++++++++++++++++ > > 1 file changed, 59 insertions(+) > > create mode 100644 Documentation/devicetree/bindings/memory-controllers/baikal,bt1-l2-ctl.yaml > > > > > My bot found errors running 'make dt_binding_check' on your patch: > > [nip] ... > > See https://patchwork.ozlabs.org/patch/1285665 > > If you already ran 'make dt_binding_check' and didn't see the above > error(s), then make sure dt-schema is up to date: > > pip3 install git+https://github.com/devicetree-org/dt-schema.git@master --upgrade > > Please check and re-submit. > The problem is due to an absent vendor prefix in the test kernel source tree environment. As I said in the cover-letter the new vendor prefix will be added in the framework of the next patchset: https://lkml.org/lkml/2020/5/6/1047 Rob, please review that patchset first, merge in the corresponding patch from there and test this binding out then. -Sergey ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <CAL_JsqJEZF5xkNGGiBy5rgUFfg=hWp6qi=tzFW84cGD9m-p5SA@mail.gmail.com>]
* Re: [PATCH v2 1/2] dt-bindings: memory: Add Baikal-T1 L2-cache Control Block binding [not found] ` <CAL_JsqJEZF5xkNGGiBy5rgUFfg=hWp6qi=tzFW84cGD9m-p5SA@mail.gmail.com> @ 2020-05-12 18:31 ` Serge Semin 0 siblings, 0 replies; 25+ messages in thread From: Serge Semin @ 2020-05-12 18:31 UTC (permalink / raw) To: Rob Herring Cc: Serge Semin, Paul Cercueil, Masahiro Yamada, SoC Team, Greg Kroah-Hartman, Thomas Gleixner, Olof Johansson, linux-kernel, Arnd Bergmann, Thomas Bogendoerfer, Alexey Malahov, Boris Brezillon, Paul Burton, devicetree, Ralf Baechle, open list:MIPS On Mon, May 11, 2020 at 05:37:41PM -0500, Rob Herring wrote: > On Mon, May 11, 2020 at 3:25 PM Serge Semin > <Sergey.Semin@baikalelectronics.ru> wrote: > > > > On Mon, May 11, 2020 at 10:38:04AM -0500, Rob Herring wrote: > > > On Fri, 8 May 2020 02:07:03 +0300, Serge Semin wrote: > > > > There is a single register provided by the SoC system controller, > > > > which can be used to tune the L2-cache RAM up. It only provides a way > > > > to change the L2-RAM access latencies. So aside from "be,bt1-l2-ctl" > > > > compatible string the device node can be optionally equipped with the > > > > properties of Tag/Data/WS latencies. > > > > > > > > Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> > > > > Cc: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru> > > > > Cc: Paul Burton <paulburton@kernel.org> > > > > Cc: Ralf Baechle <ralf@linux-mips.org> > > > > Cc: Olof Johansson <olof@lixom.net> > > > > Cc: Boris Brezillon <bbrezillon@kernel.org> > > > > Cc: Paul Cercueil <paul@crapouillou.net> > > > > Cc: Thomas Gleixner <tglx@linutronix.de> > > > > Cc: Masahiro Yamada <yamada.masahiro@socionext.com> > > > > Cc: linux-mips@vger.kernel.org > > > > Cc: soc@kernel.org > > > > > > > > --- > > > > > > > > Changelog v2: > > > > - Move driver to the memory subsystem. > > > > - Use dual GPL/BSD license. > > > > - Use single lined copyright header. > > > > - Move "allOf" restrictions to the root level of the properties. > > > > - Discard syscon compatible string and reg property. > > > > - The DT node is supposed to be a child of the Baikal-T1 system controller > > > > node. > > > > --- > > > > .../memory-controllers/baikal,bt1-l2-ctl.yaml | 59 +++++++++++++++++++ > > > > 1 file changed, 59 insertions(+) > > > > create mode 100644 Documentation/devicetree/bindings/memory-controllers/baikal,bt1-l2-ctl.yaml > > > > > > > > > > > > > My bot found errors running 'make dt_binding_check' on your patch: > > > > > > [nip] ... > > > > > > See https://patchwork.ozlabs.org/patch/1285665 > > > > > > If you already ran 'make dt_binding_check' and didn't see the above > > > error(s), then make sure dt-schema is up to date: > > > > > > pip3 install git+https://github.com/devicetree-org/dt-schema.git@master --upgrade > > > > > > Please check and re-submit. > > > > > > > The problem is due to an absent vendor prefix in the test kernel source tree > > environment. As I said in the cover-letter the new vendor prefix will be added > > in the framework of the next patchset: > > https://lkml.org/lkml/2020/5/6/1047 > > > > Rob, please review that patchset first, merge in the corresponding patch from > > there and test this binding out then. > > Did you read the part about a 'bot'? My bot doesn't read cover letters > and I only occasionally do. Do you want to write me a script that can > do this? A script, that would read a cover-letter for you? =) Anyway I wasn't talking to the bot, but to you explaining why the problem happened and of how to solve it. I didn't mean to blame you or the 'bot' for not reading the letter. Sorry, if it seemed like I did. -Sergey > > Rob ^ permalink raw reply [flat|nested] 25+ messages in thread
[parent not found: <CAL_Jsq+rka7hXVy46=O3pTrN0DLCAQQ=TSpSqzoB2dxb30h66g@mail.gmail.com>]
* Re: [PATCH v2 1/2] dt-bindings: memory: Add Baikal-T1 L2-cache Control Block binding [not found] ` <CAL_Jsq+rka7hXVy46=O3pTrN0DLCAQQ=TSpSqzoB2dxb30h66g@mail.gmail.com> @ 2020-05-12 18:25 ` Serge Semin 0 siblings, 0 replies; 25+ messages in thread From: Serge Semin @ 2020-05-12 18:25 UTC (permalink / raw) To: Rob Herring Cc: Serge Semin, Thomas Bogendoerfer, Greg Kroah-Hartman, Arnd Bergmann, Alexey Malahov, Paul Burton, Ralf Baechle, Olof Johansson, Boris Brezillon, Paul Cercueil, Thomas Gleixner, Masahiro Yamada, open list:MIPS, SoC Team, devicetree, linux-kernel On Mon, May 11, 2020 at 05:43:58PM -0500, Rob Herring wrote: > On Thu, May 7, 2020 at 6:07 PM Serge Semin > <Sergey.Semin@baikalelectronics.ru> wrote: > > > > There is a single register provided by the SoC system controller, > > which can be used to tune the L2-cache RAM up. It only provides a way > > to change the L2-RAM access latencies. So aside from "be,bt1-l2-ctl" > > compatible string the device node can be optionally equipped with the > > properties of Tag/Data/WS latencies. > > > > Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> > > Cc: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru> > > Cc: Paul Burton <paulburton@kernel.org> > > Cc: Ralf Baechle <ralf@linux-mips.org> > > Cc: Olof Johansson <olof@lixom.net> > > Cc: Boris Brezillon <bbrezillon@kernel.org> > > Cc: Paul Cercueil <paul@crapouillou.net> > > Cc: Thomas Gleixner <tglx@linutronix.de> > > Cc: Masahiro Yamada <yamada.masahiro@socionext.com> > > Cc: linux-mips@vger.kernel.org > > Cc: soc@kernel.org > > > > --- > > > > Changelog v2: > > - Move driver to the memory subsystem. > > - Use dual GPL/BSD license. > > - Use single lined copyright header. > > - Move "allOf" restrictions to the root level of the properties. > > - Discard syscon compatible string and reg property. > > - The DT node is supposed to be a child of the Baikal-T1 system controller > > node. > > --- > > .../memory-controllers/baikal,bt1-l2-ctl.yaml | 59 +++++++++++++++++++ > > 1 file changed, 59 insertions(+) > > create mode 100644 Documentation/devicetree/bindings/memory-controllers/baikal,bt1-l2-ctl.yaml > > > > diff --git a/Documentation/devicetree/bindings/memory-controllers/baikal,bt1-l2-ctl.yaml b/Documentation/devicetree/bindings/memory-controllers/baikal,bt1-l2-ctl.yaml > > new file mode 100644 > > index 000000000000..263f0cdab4e6 > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/memory-controllers/baikal,bt1-l2-ctl.yaml > > @@ -0,0 +1,59 @@ > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > > +# Copyright (C) 2020 BAIKAL ELECTRONICS, JSC > > +%YAML 1.2 > > +--- > > +$id: http://devicetree.org/schemas/memory-controllers/baikal,bt1-l2-ctl.yaml# > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > + > > +title: Baikal-T1 L2-cache Control Block > > + > > +maintainers: > > + - Serge Semin <fancer.lancer@gmail.com> > > + > > +description: | > > + By means of the System Controller Baikal-T1 SoC exposes a few settings to > > + tune the MIPS P5600 CM2 L2 cache performance up. In particular it's possible > > + to change the Tag, Data and Way-select RAM access latencies. Baikal-T1 > > + L2-cache controller block is responsible for the tuning. Its DT node is > > + supposed to be a child of the system controller. > > Is there a register range for just the L2 registers in the system > controller. If so, please add a 'reg' property. It's just a single register, though almost fully dedicated for this feature. Should I add the reg property anyway? Since you touched this topic, aside from this l2-control block the system controller has also got sub-blocks of PLLs, clock dividers, reboot, reboot-mode and indirectly addressed i2c in the same MMIO space. These blocks all have got a dedicated registers range within the syscon regmap space. Shall I add an optional reg property for them too? If so shall their node names to be in the regexp-format like "^name(@[0-9a-f]+)?" ? > > This should all be part of the system controller schema either as 1 > file or by a $ref from the system controller to this file. That's how > we ensure "supposed to be a child of the system controller". Oh, that's clever solution. I was thinking of how to signify this parent-child dependency. I'll add the $ref in the corresponding properties of the system controller. So this DT schema should live here, separately from the syscon DT node. Thanks for the note. > > > + > > +properties: > > + compatible: > > + const: baikal,bt1-l2-ctl > > + > > + baikal,l2-ws-latency: > > + $ref: /schemas/types.yaml#/definitions/uint32 > > + description: Cycles of latency for Way-select RAM accesses > > + default: 0 > > + minimum: 0 > > + maximum: 3 > > + > > + baikal,l2-tag-latency: > > + $ref: /schemas/types.yaml#/definitions/uint32 > > + description: Cycles of latency for Tag RAM accesses > > + default: 0 > > + minimum: 0 > > + maximum: 3 > > + > > + baikal,l2-data-latency: > > + $ref: /schemas/types.yaml#/definitions/uint32 > > + description: Cycles of latency for Data RAM accesses > > + default: 1 > > + minimum: 0 > > + maximum: 3 > > + > > +additionalProperties: false > > + > > +required: > > + - compatible > > + > > +examples: > > + - | > > + l2_ctl { > > + compatible = "baikal,bt1-l2-ctl"; > > + > > + baikal,l2-ws-latency = <0>; > > + baikal,l2-tag-latency = <0>; > > 0 is the default, why list it? 1 is the default for the l2-data-latency too. Why not? It's just an example. -Sergey > > > + baikal,l2-data-latency = <1>; > > + }; > > +... > > -- > > 2.25.1 > > ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: memory: Add Baikal-T1 L2-cache Control Block binding 2020-05-07 23:07 ` [PATCH v2 1/2] dt-bindings: memory: Add Baikal-T1 L2-cache Control Block binding Serge Semin 2020-05-11 15:38 ` Rob Herring [not found] ` <CAL_Jsq+rka7hXVy46=O3pTrN0DLCAQQ=TSpSqzoB2dxb30h66g@mail.gmail.com> @ 2020-05-19 12:27 ` Serge Semin 2 siblings, 0 replies; 25+ messages in thread From: Serge Semin @ 2020-05-19 12:27 UTC (permalink / raw) To: Thomas Bogendoerfer, Greg Kroah-Hartman, Arnd Bergmann, Rob Herring Cc: Serge Semin, Alexey Malahov, Paul Burton, Ralf Baechle, Olof Johansson, Boris Brezillon, Paul Cercueil, Thomas Gleixner, Masahiro Yamada, linux-mips, soc, devicetree, linux-kernel Rob, Could you take a look at this patch? Since you've accepted and merged in the patch: https://lore.kernel.org/linux-devicetree/20200506174238.15385-4-Sergey.Semin@baikalelectronics.ru/ It's safe to perform the dt_binding_check of this one. -Sergey On Fri, May 08, 2020 at 02:07:03AM +0300, Serge Semin wrote: > There is a single register provided by the SoC system controller, > which can be used to tune the L2-cache RAM up. It only provides a way > to change the L2-RAM access latencies. So aside from "be,bt1-l2-ctl" > compatible string the device node can be optionally equipped with the > properties of Tag/Data/WS latencies. > > Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> > Cc: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru> > Cc: Paul Burton <paulburton@kernel.org> > Cc: Ralf Baechle <ralf@linux-mips.org> > Cc: Olof Johansson <olof@lixom.net> > Cc: Boris Brezillon <bbrezillon@kernel.org> > Cc: Paul Cercueil <paul@crapouillou.net> > Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: Masahiro Yamada <yamada.masahiro@socionext.com> > Cc: linux-mips@vger.kernel.org > Cc: soc@kernel.org > > --- > > Changelog v2: > - Move driver to the memory subsystem. > - Use dual GPL/BSD license. > - Use single lined copyright header. > - Move "allOf" restrictions to the root level of the properties. > - Discard syscon compatible string and reg property. > - The DT node is supposed to be a child of the Baikal-T1 system controller > node. > --- > .../memory-controllers/baikal,bt1-l2-ctl.yaml | 59 +++++++++++++++++++ > 1 file changed, 59 insertions(+) > create mode 100644 Documentation/devicetree/bindings/memory-controllers/baikal,bt1-l2-ctl.yaml > > diff --git a/Documentation/devicetree/bindings/memory-controllers/baikal,bt1-l2-ctl.yaml b/Documentation/devicetree/bindings/memory-controllers/baikal,bt1-l2-ctl.yaml > new file mode 100644 > index 000000000000..263f0cdab4e6 > --- /dev/null > +++ b/Documentation/devicetree/bindings/memory-controllers/baikal,bt1-l2-ctl.yaml > @@ -0,0 +1,59 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +# Copyright (C) 2020 BAIKAL ELECTRONICS, JSC > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/memory-controllers/baikal,bt1-l2-ctl.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Baikal-T1 L2-cache Control Block > + > +maintainers: > + - Serge Semin <fancer.lancer@gmail.com> > + > +description: | > + By means of the System Controller Baikal-T1 SoC exposes a few settings to > + tune the MIPS P5600 CM2 L2 cache performance up. In particular it's possible > + to change the Tag, Data and Way-select RAM access latencies. Baikal-T1 > + L2-cache controller block is responsible for the tuning. Its DT node is > + supposed to be a child of the system controller. > + > +properties: > + compatible: > + const: baikal,bt1-l2-ctl > + > + baikal,l2-ws-latency: > + $ref: /schemas/types.yaml#/definitions/uint32 > + description: Cycles of latency for Way-select RAM accesses > + default: 0 > + minimum: 0 > + maximum: 3 > + > + baikal,l2-tag-latency: > + $ref: /schemas/types.yaml#/definitions/uint32 > + description: Cycles of latency for Tag RAM accesses > + default: 0 > + minimum: 0 > + maximum: 3 > + > + baikal,l2-data-latency: > + $ref: /schemas/types.yaml#/definitions/uint32 > + description: Cycles of latency for Data RAM accesses > + default: 1 > + minimum: 0 > + maximum: 3 > + > +additionalProperties: false > + > +required: > + - compatible > + > +examples: > + - | > + l2_ctl { > + compatible = "baikal,bt1-l2-ctl"; > + > + baikal,l2-ws-latency = <0>; > + baikal,l2-tag-latency = <0>; > + baikal,l2-data-latency = <1>; > + }; > +... > -- > 2.25.1 > ^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v2 2/2] memory: Add Baikal-T1 L2-cache Control Block driver 2020-05-07 23:07 ` [PATCH v2 0/2] memory: Add Baikal-T1 L2-cache driver Serge Semin 2020-05-07 23:07 ` [PATCH v2 1/2] dt-bindings: memory: Add Baikal-T1 L2-cache Control Block binding Serge Semin @ 2020-05-07 23:07 ` Serge Semin 1 sibling, 0 replies; 25+ messages in thread From: Serge Semin @ 2020-05-07 23:07 UTC (permalink / raw) To: Thomas Bogendoerfer, Greg Kroah-Hartman, Arnd Bergmann Cc: Serge Semin, Serge Semin, Alexey Malahov, Paul Burton, Ralf Baechle, Olof Johansson, Rob Herring, linux-mips, soc, devicetree, Boris Brezillon, Paul Cercueil, Masahiro Yamada, Thomas Gleixner, Santosh Shilimkar, linux-kernel Baikal-T1 SoC provides a way to tune the MIPS P5600 CM2 L2-cache performance up. It can be done by changing the L2-RAM Data/Tag/WS latencies in a dedicated register exposed by the system controller. The driver added by this commit provides a dts properties-based and sysfs-based interface for it. The device DT node is supposed to be a child of Baikal-T1 System Controller node. Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru> Cc: Alexey Malahov <Alexey.Malahov@baikalelectronics.ru> Cc: Paul Burton <paulburton@kernel.org> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Olof Johansson <olof@lixom.net> Cc: Rob Herring <robh+dt@kernel.org> Cc: linux-mips@vger.kernel.org Cc: soc@kernel.org Cc: devicetree@vger.kernel.org --- Changelog v2: - Move driver from soc to memory subsystem. - Get regmap from the parental syscon DT node. - Use generic FIELD_{GET,PREP} macro. - Remove probe-status info string printout. - Since the driver depends on the OF config we can remove of_match_ptr() macro utilization. - Select MFD_SYSCON config. --- drivers/memory/Kconfig | 11 ++ drivers/memory/Makefile | 1 + drivers/memory/bt1-l2-ctl.c | 322 ++++++++++++++++++++++++++++++++++++ 3 files changed, 334 insertions(+) create mode 100644 drivers/memory/bt1-l2-ctl.c diff --git a/drivers/memory/Kconfig b/drivers/memory/Kconfig index 9bddca292330..e314d03579b6 100644 --- a/drivers/memory/Kconfig +++ b/drivers/memory/Kconfig @@ -46,6 +46,17 @@ config ATMEL_EBI tree is used. This bus supports NANDs, external ethernet controller, SRAMs, ATA devices, etc. +config BT1_L2_CTL + bool "Baikal-T1 CM2 L2-RAM Cache Control Block" + depends on (MIPS_BAIKAL_T1 && OF) || COMPILE_TEST + select MFD_SYSCON + help + Baikal-T1 CPU is based on the MIPS P5600 Warrior IP-core. The CPU + resides Coherency Manager V2 with embedded 1MB L2-cache. It's + possible to tune the L2 cache performance up by setting the data, + tags and way-select latencies of RAM access. This driver provides a + dt properties-based and sysfs interface for it. + config TI_AEMIF tristate "Texas Instruments AEMIF driver" depends on (ARCH_DAVINCI || ARCH_KEYSTONE) && OF diff --git a/drivers/memory/Makefile b/drivers/memory/Makefile index 27b493435e61..6d7e3e64ba62 100644 --- a/drivers/memory/Makefile +++ b/drivers/memory/Makefile @@ -11,6 +11,7 @@ obj-$(CONFIG_ARM_PL172_MPMC) += pl172.o obj-$(CONFIG_ATMEL_SDRAMC) += atmel-sdramc.o obj-$(CONFIG_ATMEL_EBI) += atmel-ebi.o obj-$(CONFIG_ARCH_BRCMSTB) += brcmstb_dpfe.o +obj-$(CONFIG_BT1_L2_CTL) += bt1-l2-ctl.o obj-$(CONFIG_TI_AEMIF) += ti-aemif.o obj-$(CONFIG_TI_EMIF) += emif.o obj-$(CONFIG_OMAP_GPMC) += omap-gpmc.o diff --git a/drivers/memory/bt1-l2-ctl.c b/drivers/memory/bt1-l2-ctl.c new file mode 100644 index 000000000000..81f4565b9bf3 --- /dev/null +++ b/drivers/memory/bt1-l2-ctl.c @@ -0,0 +1,322 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) 2020 BAIKAL ELECTRONICS, JSC + * + * Authors: + * Serge Semin <Sergey.Semin@baikalelectronics.ru> + * + * Baikal-T1 CM2 L2-cache Control Block driver. + */ + +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/bitfield.h> +#include <linux/types.h> +#include <linux/device.h> +#include <linux/platform_device.h> +#include <linux/regmap.h> +#include <linux/mfd/syscon.h> +#include <linux/sysfs.h> +#include <linux/of.h> + +#define L2_CTL_REG 0x028 +#define L2_CTL_DATA_STALL_FLD 0 +#define L2_CTL_DATA_STALL_MASK GENMASK(1, L2_CTL_DATA_STALL_FLD) +#define L2_CTL_TAG_STALL_FLD 2 +#define L2_CTL_TAG_STALL_MASK GENMASK(3, L2_CTL_TAG_STALL_FLD) +#define L2_CTL_WS_STALL_FLD 4 +#define L2_CTL_WS_STALL_MASK GENMASK(5, L2_CTL_WS_STALL_FLD) +#define L2_CTL_SET_CLKRATIO BIT(13) +#define L2_CTL_CLKRATIO_LOCK BIT(31) + +#define L2_CTL_STALL_MIN 0 +#define L2_CTL_STALL_MAX 3 +#define L2_CTL_STALL_SET_DELAY_US 1 +#define L2_CTL_STALL_SET_TOUT_US 1000 + +/* + * struct l2_ctl - Baikal-T1 L2 Control block private data. + * @dev: Pointer to the device structure. + * @sys_regs: Baikal-T1 System Controller registers map. + */ +struct l2_ctl { + struct device *dev; + + struct regmap *sys_regs; +}; + +/* + * enum l2_ctl_stall - Baikal-T1 L2-cache-RAM stall identifier. + * @L2_WSSTALL: Way-select latency. + * @L2_TAGSTALL: Tag latency. + * @L2_DATASTALL: Data latency. + */ +enum l2_ctl_stall { + L2_WS_STALL, + L2_TAG_STALL, + L2_DATA_STALL +}; + +/* + * struct l2_ctl_device_attribute - Baikal-T1 L2-cache device attribute. + * @dev_attr: Actual sysfs device attribute. + * @id: L2-cache stall field identifier. + */ +struct l2_ctl_device_attribute { + struct device_attribute dev_attr; + enum l2_ctl_stall id; +}; +#define to_l2_ctl_dev_attr(_dev_attr) \ + container_of(_dev_attr, struct l2_ctl_device_attribute, dev_attr) + +#define L2_CTL_ATTR_RW(_name, _prefix, _id) \ + struct l2_ctl_device_attribute l2_ctl_attr_##_name = \ + { __ATTR(_name, 0644, _prefix##_show, _prefix##_store), _id } + +static int l2_ctl_get_latency(struct l2_ctl *l2, enum l2_ctl_stall id, u32 *val) +{ + u32 data = 0; + int ret; + + ret = regmap_read(l2->sys_regs, L2_CTL_REG, &data); + if (ret) + return ret; + + switch (id) { + case L2_WS_STALL: + *val = FIELD_GET(L2_CTL_WS_STALL_MASK, data); + break; + case L2_TAG_STALL: + *val = FIELD_GET(L2_CTL_TAG_STALL_MASK, data); + break; + case L2_DATA_STALL: + *val = FIELD_GET(L2_CTL_DATA_STALL_MASK, data); + break; + default: + return -EINVAL; + } + + return 0; +} + +static int l2_ctl_set_latency(struct l2_ctl *l2, enum l2_ctl_stall id, u32 val) +{ + u32 mask = 0, data = 0; + int ret; + + val = clamp_val(val, L2_CTL_STALL_MIN, L2_CTL_STALL_MAX); + + switch (id) { + case L2_WS_STALL: + data = FIELD_PREP(L2_CTL_WS_STALL_MASK, val); + mask = L2_CTL_WS_STALL_MASK; + break; + case L2_TAG_STALL: + data = FIELD_PREP(L2_CTL_TAG_STALL_MASK, val); + mask = L2_CTL_TAG_STALL_MASK; + break; + case L2_DATA_STALL: + data = FIELD_PREP(L2_CTL_DATA_STALL_MASK, val); + mask = L2_CTL_DATA_STALL_MASK; + break; + default: + return -EINVAL; + } + + data |= L2_CTL_SET_CLKRATIO; + mask |= L2_CTL_SET_CLKRATIO; + + ret = regmap_update_bits(l2->sys_regs, L2_CTL_REG, mask, data); + if (ret) + return ret; + + return regmap_read_poll_timeout(l2->sys_regs, L2_CTL_REG, data, + data & L2_CTL_CLKRATIO_LOCK, + L2_CTL_STALL_SET_DELAY_US, + L2_CTL_STALL_SET_TOUT_US); +} + +static void l2_ctl_clear_data(void *data) +{ + struct l2_ctl *l2 = data; + struct platform_device *pdev = to_platform_device(l2->dev); + + platform_set_drvdata(pdev, NULL); +} + +static struct l2_ctl *l2_ctl_create_data(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct l2_ctl *l2; + int ret; + + l2 = devm_kzalloc(dev, sizeof(*l2), GFP_KERNEL); + if (!l2) + return ERR_PTR(-ENOMEM); + + ret = devm_add_action(dev, l2_ctl_clear_data, l2); + if (ret) { + dev_err(dev, "Can't add L2 CTL data clear action\n"); + return ERR_PTR(ret); + } + + l2->dev = dev; + platform_set_drvdata(pdev, l2); + + return l2; +} + +static int l2_ctl_find_sys_regs(struct l2_ctl *l2) +{ + l2->sys_regs = syscon_node_to_regmap(l2->dev->of_node->parent); + if (IS_ERR(l2->sys_regs)) { + dev_err(l2->dev, "Couldn't get L2 CTL register map\n"); + return PTR_ERR(l2->sys_regs); + } + + return 0; +} + +static int l2_ctl_of_parse_property(struct l2_ctl *l2, enum l2_ctl_stall id, + const char *propname) +{ + int ret = 0; + u32 data; + + if (of_property_read_u32(l2->dev->of_node, propname, &data)) { + ret = l2_ctl_set_latency(l2, id, data); + if (ret) + dev_err(l2->dev, "Invalid value of '%s'\n", propname); + } + + return ret; +} + +static int l2_ctl_of_parse(struct l2_ctl *l2) +{ + int ret; + + ret = l2_ctl_of_parse_property(l2, L2_WS_STALL, "baikal,l2-ws-latency"); + if (ret) + return ret; + + ret = l2_ctl_of_parse_property(l2, L2_TAG_STALL, "baikal,l2-tag-latency"); + if (ret) + return ret; + + return l2_ctl_of_parse_property(l2, L2_DATA_STALL, + "baikal,l2-data-latency"); +} + +static ssize_t l2_ctl_latency_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct l2_ctl_device_attribute *devattr = to_l2_ctl_dev_attr(attr); + struct l2_ctl *l2 = dev_get_drvdata(dev); + u32 data; + int ret; + + ret = l2_ctl_get_latency(l2, devattr->id, &data); + if (ret) + return ret; + + return scnprintf(buf, PAGE_SIZE, "%u\n", data); +} + +static ssize_t l2_ctl_latency_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + struct l2_ctl_device_attribute *devattr = to_l2_ctl_dev_attr(attr); + struct l2_ctl *l2 = dev_get_drvdata(dev); + u32 data; + int ret; + + if (kstrtouint(buf, 0, &data) < 0) + return -EINVAL; + + ret = l2_ctl_set_latency(l2, devattr->id, data); + if (ret) + return ret; + + return count; +} +static L2_CTL_ATTR_RW(l2_ws_latency, l2_ctl_latency, L2_WS_STALL); +static L2_CTL_ATTR_RW(l2_tag_latency, l2_ctl_latency, L2_TAG_STALL); +static L2_CTL_ATTR_RW(l2_data_latency, l2_ctl_latency, L2_DATA_STALL); + +static struct attribute *l2_ctl_sysfs_attrs[] = { + &l2_ctl_attr_l2_ws_latency.dev_attr.attr, + &l2_ctl_attr_l2_tag_latency.dev_attr.attr, + &l2_ctl_attr_l2_data_latency.dev_attr.attr, + NULL +}; +ATTRIBUTE_GROUPS(l2_ctl_sysfs); + +static void l2_ctl_remove_sysfs(void *data) +{ + struct l2_ctl *l2 = data; + + device_remove_groups(l2->dev, l2_ctl_sysfs_groups); +} + +static int l2_ctl_init_sysfs(struct l2_ctl *l2) +{ + int ret; + + ret = device_add_groups(l2->dev, l2_ctl_sysfs_groups); + if (ret) { + dev_err(l2->dev, "Failed to create L2 CTL sysfs nodes\n"); + return ret; + } + + ret = devm_add_action_or_reset(l2->dev, l2_ctl_remove_sysfs, l2); + if (ret) + dev_err(l2->dev, "Can't add L2 CTL sysfs remove action\n"); + + return ret; +} + +static int l2_ctl_probe(struct platform_device *pdev) +{ + struct l2_ctl *l2; + int ret; + + l2 = l2_ctl_create_data(pdev); + if (IS_ERR(l2)) + return PTR_ERR(l2); + + ret = l2_ctl_find_sys_regs(l2); + if (ret) + return ret; + + ret = l2_ctl_of_parse(l2); + if (ret) + return ret; + + ret = l2_ctl_init_sysfs(l2); + if (ret) + return ret; + + return 0; +} + +static const struct of_device_id l2_ctl_of_match[] = { + { .compatible = "baikal,bt1-l2-ctl" }, + { } +}; +MODULE_DEVICE_TABLE(of, l2_ctl_of_match); + +static struct platform_driver l2_ctl_driver = { + .probe = l2_ctl_probe, + .driver = { + .name = "bt1-l2-ctl", + .of_match_table = l2_ctl_of_match + } +}; +module_platform_driver(l2_ctl_driver); + +MODULE_AUTHOR("Serge Semin <Sergey.Semin@baikalelectronics.ru>"); +MODULE_DESCRIPTION("Baikal-T1 L2-cache driver"); +MODULE_LICENSE("GPL v2"); -- 2.25.1 ^ permalink raw reply related [flat|nested] 25+ messages in thread
end of thread, other threads:[~2020-05-19 12:27 UTC | newest] Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-03-06 13:07 [PATCH 0/6] soc: Add Baikal-T1 SoC APB/AXI EHB and L2-cache drivers Sergey.Semin 2020-03-06 15:19 ` Arnd Bergmann 2020-03-12 21:25 ` Rob Herring 2020-04-01 15:32 ` Sergey Semin 2020-03-26 14:12 ` Arnd Bergmann 2020-04-01 15:37 ` Sergey Semin 2020-03-12 21:26 ` Rob Herring [not found] ` <20200306153246.9373B80307C4@mail.baikalelectronics.ru> 2020-04-01 15:06 ` Sergey Semin 2020-04-01 19:10 ` Arnd Bergmann 2020-04-01 21:52 ` Sergey Semin 2020-05-07 22:41 ` [PATCH v2 0/4] bus: Add Baikal-T1 SoC APB/AXI bus drivers Serge Semin 2020-05-07 22:41 ` [PATCH v2 1/4] dt-bindings: bus: Add Baikal-T1 AXI-bus binding Serge Semin 2020-05-15 3:13 ` Rob Herring 2020-05-07 22:41 ` [PATCH v2 2/4] dt-bindings: bus: Add Baikal-T1 APB-bus binding Serge Semin 2020-05-15 3:13 ` Rob Herring 2020-05-07 22:41 ` [PATCH v2 3/4] bus: Add Baikal-T1 AXI-bus driver Serge Semin 2020-05-07 22:41 ` [PATCH v2 4/4] bus: Add Baikal-T1 APB-bus driver Serge Semin 2020-05-07 23:07 ` [PATCH v2 0/2] memory: Add Baikal-T1 L2-cache driver Serge Semin 2020-05-07 23:07 ` [PATCH v2 1/2] dt-bindings: memory: Add Baikal-T1 L2-cache Control Block binding Serge Semin 2020-05-11 15:38 ` Rob Herring 2020-05-11 20:25 ` Serge Semin [not found] ` <CAL_JsqJEZF5xkNGGiBy5rgUFfg=hWp6qi=tzFW84cGD9m-p5SA@mail.gmail.com> 2020-05-12 18:31 ` Serge Semin [not found] ` <CAL_Jsq+rka7hXVy46=O3pTrN0DLCAQQ=TSpSqzoB2dxb30h66g@mail.gmail.com> 2020-05-12 18:25 ` Serge Semin 2020-05-19 12:27 ` Serge Semin 2020-05-07 23:07 ` [PATCH v2 2/2] memory: Add Baikal-T1 L2-cache Control Block driver Serge Semin
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).