zephyr/boards/arm/arty/dts/arty_a7_arm_designstart.dtsi
Henrik Brix Andersen 4c57f3400a boards: arty: add support for daplink qspi mux
The ARM Cortex-M1/M3 DesignStart FPGA reference designs support booting
from an off-board, memory-mapped QSPI NOR flash device. The V2C DAPlink
shield from ARM Ltd. provides support for this feature.

If the board/shield is not configured for booting from the QSPI NOR
device, that same device is available as a regular QSPI NOR flash
device.

The presense of a shield configured for QSPI NOR flash boot is indicated
through an IRQ line used as a level-detect, non-interrupt signal.

Introduce a board specific devicetree binding for the DAPLink QSPI MUX
and provide a board specific API accessing it. Automatically set the
QSPI MUX to to provide regular QSPI NOR flash access if the board/shield
is not configured for memory-mapped QSPI NOR flash boot.

Signed-off-by: Henrik Brix Andersen <henrik@brixandersen.dk>
2020-09-04 17:37:22 +02:00

284 lines
6.1 KiB
Text

/*
* Copyright (c) 2020 Henrik Brix Andersen <henrik@brixandersen.dk>
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <dt-bindings/gpio/gpio.h>
#include <mem.h>
/ {
chosen {
zephyr,console = &uartlite0;
zephyr,shell-uart = &uartlite0;
zephyr,flash = &itcm;
/* Use DTCM as SRAM by default */
zephyr,sram = &dtcm;
};
aliases {
led0 = &led_ld4;
led1 = &led_ld5;
led2 = &led_ld6;
led3 = &led_ld7;
sw0 = &sw0;
sw1 = &sw1;
sw2 = &sw2;
sw3 = &sw3;
};
leds {
compatible = "gpio-leds";
led_ld0_red: led_ld0_red {
gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
label = "LED LD0 RED";
};
led_ld0_green: led_ld0_green {
gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>;
label = "LED LD0 GREEN";
};
led_ld0_blue: led_ld0_blue {
gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>;
label = "LED LD0 BLUE";
};
led_ld1_red: led_ld1_red {
gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>;
label = "LED LD1 RED";
};
led_ld1_green: led_ld1_green {
gpios = <&gpio1 4 GPIO_ACTIVE_HIGH>;
label = "LED LD1 GREEN";
};
led_ld1_blue: led_ld1_blue {
gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;
label = "LED LD1 BLUE";
};
led_ld2_red: led_ld2_red {
gpios = <&gpio1 8 GPIO_ACTIVE_HIGH>;
label = "LED LD2 RED";
};
led_ld2_green: led_ld2_green {
gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>;
label = "LED LD2 GREEN";
};
led_ld2_blue: led_ld2_blue {
gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>;
label = "LED LD2 BLUE";
};
led_ld3_red: led_ld3_red {
gpios = <&gpio1 11 GPIO_ACTIVE_HIGH>;
label = "LED LD3 RED";
};
led_ld3_green: led_ld3_green {
gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>;
label = "LED LD3 GREEN";
};
led_ld3_blue: led_ld3_blue {
gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>;
label = "LED LD3 BLUE";
};
led_ld4: led_ld4 {
gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>;
label = "LED LD4";
};
led_ld5: led_ld5 {
gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>;
label = "LED LD5";
};
led_ld6: led_ld6 {
gpios = <&gpio0 2 GPIO_ACTIVE_HIGH>;
label = "LED LD6";
};
led_ld7: led_ld7 {
gpios = <&gpio0 3 GPIO_ACTIVE_HIGH>;
label = "LED LD7";
};
};
gpio_keys {
compatible = "gpio-keys";
sw0: sw0 {
gpios = <&gpio0_2 0 GPIO_ACTIVE_HIGH>;
label = "SW0";
};
sw1: sw1 {
gpios = <&gpio0_2 1 GPIO_ACTIVE_HIGH>;
label = "SW1";
};
sw2: sw2 {
gpios = <&gpio0_2 2 GPIO_ACTIVE_HIGH>;
label = "SW2";
};
sw3: sw3 {
gpios = <&gpio0_2 3 GPIO_ACTIVE_HIGH>;
label = "SW3";
};
btn0: btn0 {
gpios = <&gpio1_2 0 GPIO_ACTIVE_HIGH>;
label = "BTN0";
};
btn1: btn1 {
gpios = <&gpio1_2 1 GPIO_ACTIVE_HIGH>;
label = "BTN1";
};
btn2: btn2 {
gpios = <&gpio1_2 2 GPIO_ACTIVE_HIGH>;
label = "BTN2";
};
btn3: btn3 {
gpios = <&gpio1_2 3 GPIO_ACTIVE_HIGH>;
label = "BTN3";
};
};
daplink_qspi_mux: daplink_qspi_mux {
compatible = "arm,daplink-qspi-mux";
status = "disabled";
interrupt-parent = <&nvic>;
interrupts = <7 0>;
mux-gpios = <&daplink_gpio0 0 GPIO_ACTIVE_HIGH>;
};
soc {
daplink_gpio0: gpio@40010000 {
compatible = "xlnx,xps-gpio-1.00.a";
status = "disabled";
reg = <0x40010000 0x10000>;
label = "DAPLINK_GPIO_0";
gpio-controller;
#gpio-cells = <2>;
xlnx,all-inputs = <0x0>;
xlnx,all-outputs = <0x0>;
xlnx,dout-default = <0x0>;
xlnx,gpio-width = <0x20>;
xlnx,is-dual = <0x0>;
xlnx,tri-default = <0xffffffff>;
};
daplink_quad_spi0: spi@40020000 {
compatible = "xlnx,xps-spi-2.00.a";
status = "disabled";
reg = <0x40020000 0x10000>;
interrupts = <4 0>;
#address-cells = <1>;
#size-cells = <0>;
label = "DAPLINK_QUAD_SPI_0";
xlnx,num-ss-bits = <0x1>;
xlnx,num-transfer-bits = <0x8>;
};
daplink_single_spi0: spi@40030000 {
compatible = "xlnx,xps-spi-2.00.a";
status = "disabled";
reg = <0x40030000 0x10000>;
interrupts = <5 0>;
label = "DAPLINK_SINGLE_SPI_0";
#address-cells = <1>;
#size-cells = <0>;
xlnx,num-ss-bits = <0x1>;
xlnx,num-transfer-bits = <0x8>;
};
uartlite0: uartlite@40100000 {
compatible = "xlnx,xps-uartlite-1.00.a";
interrupts = <0 0>;
reg = <0x40100000 0x10000>;
label = "UART_0";
};
gpio0: gpio@40110000 {
compatible = "xlnx,xps-gpio-1.00.a";
interrupts = <1 0>;
reg = <0x40110000 0x10000>;
label = "GPIO_0";
gpio-controller;
#gpio-cells = <2>;
xlnx,all-inputs = <0x0>;
xlnx,all-inputs-2 = <0x1>;
xlnx,all-outputs = <0x0>;
xlnx,all-outputs-2 = <0x0>;
xlnx,dout-default = <0x0>;
xlnx,dout-default-2 = <0x0>;
xlnx,gpio-width = <0x4>;
xlnx,gpio2-width = <0x4>;
xlnx,is-dual = <0x1>;
xlnx,tri-default = <0xffffffff>;
xlnx,tri-default-2 = <0xffffffff>;
gpio0_2: gpio2 {
compatible = "xlnx,xps-gpio-1.00.a-gpio2";
label = "GPIO_0_2";
gpio-controller;
#gpio-cells = <2>;
};
};
gpio1: gpio@40120000 {
compatible = "xlnx,xps-gpio-1.00.a";
interrupts = <2 0>;
reg = <0x40120000 0x10000>;
label = "GPIO_1";
gpio-controller;
#gpio-cells = <2>;
xlnx,all-inputs = <0x0>;
xlnx,all-inputs-2 = <0x1>;
xlnx,all-outputs = <0x0>;
xlnx,all-outputs-2 = <0x0>;
xlnx,dout-default = <0x0>;
xlnx,dout-default-2 = <0x0>;
xlnx,gpio-width = <0xc>;
xlnx,gpio2-width = <0x4>;
xlnx,is-dual = <0x1>;
xlnx,tri-default = <0xffffffff>;
xlnx,tri-default-2 = <0xffffffff>;
gpio1_2: gpio2 {
compatible = "xlnx,xps-gpio-1.00.a-gpio2";
label = "GPIO_1_2";
gpio-controller;
#gpio-cells = <2>;
};
};
quad_spi0: spi@40130000 {
compatible = "xlnx,xps-spi-2.00.a";
reg = <0x40130000 0x10000>;
interrupts = <3 0>;
#address-cells = <1>;
#size-cells = <0>;
label = "QUAD_SPI_0";
xlnx,num-ss-bits = <0x1>;
xlnx,num-transfer-bits = <0x8>;
flash0: flash@0 {
compatible = "micron,n25q128a","jedec,spi-nor";
reg = <0>;
spi-max-frequency = <108000000>;
size = <DT_SIZE_M(128)>;
jedec-id = [20 ba 18];
label = "FLASH_0";
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
fpga_bitstream_partition: partition@0 {
label = "fpga_bitstream";
reg = <0x00000000 0x218000>;
};
};
};
};
};
};