From patchwork Fri May 8 09:36:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Serge Semin X-Patchwork-Id: 11536153 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 70D3C139F for ; Fri, 8 May 2020 09:36:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 62F1520A8B for ; Fri, 8 May 2020 09:36:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725379AbgEHJg4 (ORCPT ); Fri, 8 May 2020 05:36:56 -0400 Received: from mail.baikalelectronics.com ([87.245.175.226]:41156 "EHLO mail.baikalelectronics.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725775AbgEHJgz (ORCPT ); Fri, 8 May 2020 05:36:55 -0400 Received: from localhost (unknown [127.0.0.1]) by mail.baikalelectronics.ru (Postfix) with ESMTP id 8C9AD80307C2; Fri, 8 May 2020 09:36:52 +0000 (UTC) X-Virus-Scanned: amavisd-new at baikalelectronics.ru Received: from mail.baikalelectronics.ru ([127.0.0.1]) by localhost (mail.baikalelectronics.ru [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ZVwyYHvRLEER; Fri, 8 May 2020 12:36:51 +0300 (MSK) From: Serge Semin To: Mark Brown CC: Serge Semin , Serge Semin , Alexey Malahov , Maxim Kaurkin , Pavel Parkhomenko , Ramil Zaripov , Ekaterina Skachko , Vadim Vlasov , Alexey Kolotnikov , Thomas Bogendoerfer , Paul Burton , Ralf Baechle , John Garry , Chuanhong Guo , Tomer Maimon , Lee Jones , Miquel Raynal , Arnd Bergmann , Rob Herring , , , , Subject: [PATCH 0/2] spi: Add Baikal-T1 System Boot SPI Controller driver Date: Fri, 8 May 2020 12:36:19 +0300 Message-ID: <20200508093621.31619-1-Sergey.Semin@baikalelectronics.ru> MIME-Version: 1.0 X-ClientProxiedBy: MAIL.baikal.int (192.168.51.25) To mail (192.168.51.25) Sender: linux-mips-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-mips@vger.kernel.org Baikal-T1 SoC System Controller is equipped with a Boot Controller. It's responsible for the system starting up from different sources. In particular it's possible to boot the chip either from an internal firmware or from an externally attached 16MB SPI flash or from the SoC SRAM pre-initialized with first 64KB of the external SPI flash. Though the later option is formally unavailable thus undocumented. Anyway in order to perform the booting up from the SPI flash there is a DW APB SSI-based SPI controller embedded into the System Boot Controller. Due to being utilized for a specific usecase it's got very limited resources: no IRQ, no DMA, a single native chip-select and just 8 bytes Tx/Rx FIFO available. In addition to that the transparent (from SoC CPU point of view) initial code execution is implemented by means of the SPI flash direct mapping method. It's done by a vendor-specific block built on top the SPI controller so the SPI flash slave device data is available just by dword-readings from a dedicated memory region of 16MB. Taking into account the peculiarities of the controller registers and physically mapped SPI flash access, very limited resources, seeing the normal usecase of the controller is to access an external SPI-nor flash, and due to multiple Baikal-T1 specifics, which had to be workarounded in the driver code we decided to create a dedicated SPI driver for it instead of using the DW APB SSI driver available in the kernel. The driver provides callbacks for the native messages-based SPI API (though only if GPIO-based chip-select is declared), SPI-memory and direct mapping read operations. Due to not having any asynchronous signaling interface provided by the core we have no choice but to implement a polling-based data transmission/reception algorithm. In addition to that in order to bypass the automatic native chip-select toggle the driver disables the local interrupts during the memory-based transfers if no complementary GPIO-based chip-select detected in the platform. This patchset is rebased and tested on the mainline Linux kernel 5.7-rc4: base-commit: 0e698dfa2822 ("Linux 5.7-rc4") tag: v5.7-rc4 New vendor prefix will be added in the framework of the next patchset: https://lkml.org/lkml/2020/5/6/1047 Note as a result of next discussion with @Lee and @Miquel https://lkml.org/lkml/2020/3/6/421 I've added dirmap_create() and dirmap_read() callbacks to this driver, so the Baikal-T1 Boot MFD driver won't be resubmitted and can be dropped. Signed-off-by: Serge Semin Cc: Alexey Malahov Cc: Maxim Kaurkin Cc: Pavel Parkhomenko Cc: Ramil Zaripov Cc: Ekaterina Skachko Cc: Vadim Vlasov Cc: Alexey Kolotnikov Cc: Thomas Bogendoerfer Cc: Paul Burton Cc: Ralf Baechle Cc: John Garry Cc: Chuanhong Guo Cc: Tomer Maimon Cc: Lee Jones Cc: Miquel Raynal Cc: Arnd Bergmann Cc: Rob Herring Cc: linux-mips@vger.kernel.org Cc: linux-spi@vger.kernel.org Cc: devicetree@vger.kernel.org Cc: linux-kernel@vger.kernel.org Serge Semin (2): dt-bindings: spi: Add Baikal-T1 System Boot SPI Controller binding spi: Add Baikal-T1 System Boot SPI Controller driver .../bindings/spi/baikal,bt1-sys-ssi.yaml | 100 ++ drivers/spi/Kconfig | 13 + drivers/spi/Makefile | 1 + drivers/spi/spi-bt1-sys.c | 873 ++++++++++++++++++ drivers/spi/spi-bt1-sys.h | 169 ++++ 5 files changed, 1156 insertions(+) create mode 100644 Documentation/devicetree/bindings/spi/baikal,bt1-sys-ssi.yaml create mode 100644 drivers/spi/spi-bt1-sys.c create mode 100644 drivers/spi/spi-bt1-sys.h