From: Serge Semin <fancer.lancer@xxxxxxxxx> Baikal-T1 Boot Controller is an IP block embedded into the SoC and responsible for the chip proper pre-initialization and further booting up from selected memory mapped device. From the Linux kernel point of view it's just a multi- functional device, which exports three physically mapped ROMs and a single SPI controller interface. Baikal-T1 can boot either from an external SPI-flash or from an embedded into it firmware. So when the bootup from the SPI-flash is selected the flash memory can be accessed either directly via the embedded into the Boot Controller DW APB SSI controller registers or via a physically mapped ROM (which is just an FSM IP-core interacting with the DW APB SSI controller by itself). Since both of these interfaces are using the same SPI interface they can't be utilized simultaneously. Instead the Boot Controller provides the access switching functionality by means of the control register flag. That's why we need the Boot Controller MFD driver provided by this patchset - in order to multiplex the access to the DW APB SSI controller and SPI interface from two different subsystems. After this patchset is integrated into the kernel we'll submit two more patchsets with physically mapped ROMs (due to some peculiarities we can't have the already available in the kernel mtd-rom drivers) and SPI controller (similarly the available in the kernel DW APB SSI driver isn't suitable for our version of the SPI controller) drivers will be submitted for integration into the mainline Linux kernel. 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@xxxxxxxxxxxxxxxxxxxx> Signed-off-by: Alexey Malahov <Alexey.Malahov@xxxxxxxxxxxxxxxxxxxx> Cc: Maxim Kaurkin <Maxim.Kaurkin@xxxxxxxxxxxxxxxxxxxx> Cc: Pavel Parkhomenko <Pavel.Parkhomenko@xxxxxxxxxxxxxxxxxxxx> Cc: Ramil Zaripov <Ramil.Zaripov@xxxxxxxxxxxxxxxxxxxx> Cc: Ekaterina Skachko <Ekaterina.Skachko@xxxxxxxxxxxxxxxxxxxx> Cc: Vadim Vlasov <V.Vlasov@xxxxxxxxxxxxxxxxxxxx> Cc: Thomas Bogendoerfer <tsbogend@xxxxxxxxxxxxxxxx> Cc: Paul Burton <paulburton@xxxxxxxxxx> Cc: Ralf Baechle <ralf@xxxxxxxxxxxxxx> Cc: Lee Jones <lee.jones@xxxxxxxxxx> Cc: Rob Herring <robh+dt@xxxxxxxxxx> Cc: Mark Rutland <mark.rutland@xxxxxxx> Cc: devicetree@xxxxxxxxxxxxxxx Cc: linux-kernel@xxxxxxxxxxxxxxx Serge Semin (2): dt-bindings: mfd: Add Baikal-T1 Boot Controller bindings mfd: Add Baikal-T1 Boot Controller driver .../bindings/mfd/be,bt1-boot-ctl.yaml | 89 +++++ drivers/mfd/Kconfig | 13 + drivers/mfd/Makefile | 1 + drivers/mfd/bt1-boot-ctl.c | 345 ++++++++++++++++++ include/linux/mfd/bt1-boot-ctl.h | 46 +++ 5 files changed, 494 insertions(+) create mode 100644 Documentation/devicetree/bindings/mfd/be,bt1-boot-ctl.yaml create mode 100644 drivers/mfd/bt1-boot-ctl.c create mode 100644 include/linux/mfd/bt1-boot-ctl.h -- 2.25.1