Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions Documentation/devicetree/bindings/spi/spacemit,k1-spi.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/spi/spacemit,k1-spi.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: SpacemiT K1 SoC Serial Peripheral Interface (SPI)

maintainers:
- Alex Elder <elder@kernel.org>

description:
The SpacemiT K1 SoC implements a SPI controller that has two 32-entry
FIFOs, for transmit and receive. Details are currently available in
section 18.2.1 of the K1 User Manual, found in the SpacemiT Keystone
K1 Documentation[1]. The controller transfers words using PIO. DMA
transfers are supported as well, if both TX and RX DMA channels are
specified,

[1] https://developer.spacemit.com/documentation

allOf:
- $ref: /schemas/spi/spi-controller.yaml#

properties:
compatible:
const: spacemit,k1-spi

reg:
maxItems: 1

clocks:
items:
- description: Core clock
- description: Bus clock

clock-names:
items:
- const: core
- const: bus

resets:
maxItems: 1

interrupts:
maxItems: 1

dmas:
items:
- description: RX DMA channel
- description: TX DMA channel

dma-names:
items:
- const: rx
- const: tx

required:
- compatible
- reg
- clocks
- clock-names
- resets
- interrupts

unevaluatedProperties: false

examples:
- |

#include <dt-bindings/clock/spacemit,k1-syscon.h>
spi@d401c000 {
compatible = "spacemit,k1-spi";
reg = <0xd401c000 0x30>;
#address-cells = <1>;
#size-cells = <0>;
clocks = <&syscon_apbc CLK_SSP3>,
<&syscon_apbc CLK_SSP3_BUS>;
clock-names = "core", "bus";
resets = <&syscon_apbc RESET_SSP3>;
interrupts = <55>;
dmas = <&pdma 20>, <&pdma 19>;
dma-names = "rx", "tx";
};
7 changes: 7 additions & 0 deletions arch/riscv/boot/dts/spacemit/k1-bananapi-f3.dts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
ethernet0 = &eth0;
ethernet1 = &eth1;
serial0 = &uart0;
spi3 = &spi3;
i2c2 = &i2c2;
i2c8 = &i2c8;
};
Expand Down Expand Up @@ -327,6 +328,12 @@
status = "okay";
};

&spi3 {
pinctrl-0 = <&ssp3_0_cfg>;
pinctrl-names = "default";
status = "okay";
};

&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_2_cfg>;
Expand Down
20 changes: 20 additions & 0 deletions arch/riscv/boot/dts/spacemit/k1-pinctrl.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -570,4 +570,24 @@
drive-strength = <32>;
};
};

ssp3_0_cfg: ssp3-0-cfg {
ssp3-0-pins {
pinmux = <K1_PADCONF(75, 2)>, /* SCLK */
<K1_PADCONF(77, 2)>, /* MOSI */
<K1_PADCONF(78, 2)>; /* MISO */

bias-disable;
drive-strength = <19>;
power-source = <3300>;
};

ssp3-0-frm-pins {
pinmux = <K1_PADCONF(76, 2)>; /* FRM (frame) */

bias-pull-up = <0>;
drive-strength = <19>;
power-source = <3300>;
};
};
};
15 changes: 15 additions & 0 deletions arch/riscv/boot/dts/spacemit/k1.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -983,6 +983,21 @@
status = "disabled";
};

spi3: spi@d401c000 {
compatible = "spacemit,k1-spi";
reg = <0x0 0xd401c000 0x0 0x30>;
#address-cells = <1>;
#size-cells = <0>;
clocks = <&syscon_apbc CLK_SSP3>,
<&syscon_apbc CLK_SSP3_BUS>;
clock-names = "core", "bus";
resets = <&syscon_apbc RESET_SSP3>;
interrupts = <55>;
dmas = <&pdma 20>, <&pdma 19>;
dma-names = "rx", "tx";
status = "disabled";
};

/* sec_uart1: 0xf0612000, not available from Linux */
};

Expand Down
9 changes: 9 additions & 0 deletions drivers/spi/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -1085,6 +1085,15 @@ config SPI_SG2044_NOR
also supporting 3Byte address devices and 4Byte address
devices.

config SPI_SPACEMIT_K1
tristate "K1 SPI Controller"
depends on ARCH_SPACEMIT || COMPILE_TEST
depends on OF
imply MMP_PDMA if ARCH_SPACEMIT
default m if ARCH_SPACEMIT
help
Enable support for the SpacemiT K1 SPI controller.

config SPI_SPRD
tristate "Spreadtrum SPI controller"
depends on ARCH_SPRD || COMPILE_TEST
Expand Down
1 change: 1 addition & 0 deletions drivers/spi/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ obj-$(CONFIG_SPI_SIFIVE) += spi-sifive.o
obj-$(CONFIG_SPI_SLAVE_MT27XX) += spi-slave-mt27xx.o
obj-$(CONFIG_SPI_SN_F_OSPI) += spi-sn-f-ospi.o
obj-$(CONFIG_SPI_SG2044_NOR) += spi-sg2044-nor.o
obj-$(CONFIG_SPI_SPACEMIT_K1) += spi-spacemit-k1.o
obj-$(CONFIG_SPI_SPRD) += spi-sprd.o
obj-$(CONFIG_SPI_SPRD_ADI) += spi-sprd-adi.o
obj-$(CONFIG_SPI_STM32) += spi-stm32.o
Expand Down
Loading
Loading