On Tue, May 26, 2020 at 2:59 PM Serge Semin <sergey.se...@baikalelectronics.ru> wrote: > > 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.se...@baikalelectronics.ru> > Cc: Alexey Malahov <alexey.mala...@baikalelectronics.ru> > Cc: Paul Burton <paulbur...@kernel.org> > Cc: Olof Johansson <o...@lixom.net> > Cc: Rob Herring <robh...@kernel.org> > Cc: linux-m...@vger.kernel.org > Cc: s...@kernel.org > Cc: devicet...@vger.kernel.org > > ---
Applied with this fixup: --- a/drivers/bus/bt1-apb.c +++ b/drivers/bus/bt1-apb.c @@ -16,6 +16,7 @@ #include <linux/platform_device.h> #include <linux/interrupt.h> #include <linux/nmi.h> +#include <linux/of.h> #include <linux/regmap.h> #include <linux/clk.h> #include <linux/reset.h> @@ -309,13 +310,13 @@ static ssize_t timeout_store(struct device *dev, } static DEVICE_ATTR_RW(timeout); -static int inject_error_show(struct device *dev, struct device_attribute *attr, +static ssize_t 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, +static ssize_t inject_error_store(struct device *dev, struct device_attribute *attr, const char *data, size_t count) {