One limitation of the current IPM API is that it is assuming that the hardware is only exporting one single channel through which the data can be sent or signalling can happen. If the hardware supports multiple channels, the IPM device must be instantiated (possibly in the DT) several times, one for each channel to be able to send data through multiple channels using the same hw peripheral. Also in the current IPM API only one callback can be registered, that means that only one driver is controlling all the signalling happening on all the channels. This patch is introducing a new MBOX API that is supporting multi-channel signalling and data exachange leveraging and extending the previous (and outdated) IPM API. Signed-off-by: Carlo Caione <ccaione@baylibre.com>
446 lines
10 KiB
Plaintext
446 lines
10 KiB
Plaintext
/*
|
|
* Copyright (c) 2020 Nordic Semiconductor ASA
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*
|
|
* Application overlay for testing the devicetree.h API.
|
|
*
|
|
* Names in this file should be chosen in a way that won't conflict
|
|
* with real-world devicetree nodes, to allow these tests to run on
|
|
* (and be extended to test) real hardware.
|
|
*/
|
|
|
|
/ {
|
|
aliases {
|
|
test-alias = &test_nodelabel;
|
|
};
|
|
|
|
chosen {
|
|
ztest,gpio = &test_nodelabel;
|
|
};
|
|
|
|
test {
|
|
#address-cells = < 0x1 >;
|
|
#size-cells = < 0x1 >;
|
|
interrupt-parent = <&test_intc>;
|
|
|
|
test_pinctrl: pin-controller {
|
|
compatible = "vnd,pinctrl";
|
|
test_pincfg_a: pincfg-a {};
|
|
test_pincfg_b: pincfg-b {};
|
|
test_pincfg_c: pincfg-c {};
|
|
test_pincfg_d: pincfg-d {};
|
|
};
|
|
|
|
test_arrays: array-holder {
|
|
/*
|
|
* vnd,undefined-compat is for DT_NODE_HAS_COMPAT_STATUS(..,okay).
|
|
* There should only be one vnd,array-holder in the entire DTS.
|
|
*/
|
|
compatible = "vnd,array-holder", "vnd,undefined-compat";
|
|
a = <1000 2000 3000>;
|
|
b = [aa bb cc dd];
|
|
c = "bar", "baz";
|
|
};
|
|
|
|
test_phandles: phandle-holder-0 {
|
|
compatible = "vnd,phandle-holder";
|
|
/*
|
|
* At least one of these phandles must refer to
|
|
* test_gpio_1, or dependency ordinal tests may fail.
|
|
*/
|
|
ph = <&test_gpio_1>;
|
|
phs = <&test_gpio_1 &test_gpio_2 &test_i2c>;
|
|
phs-or = <&test_enum_default_0 &test_enum_default_1>;
|
|
gpios = <&test_gpio_1 10 20>, <&test_gpio_2 30 40>;
|
|
pha-gpios = <&test_gpio_1 50 60>, <0>, <&test_gpio_3 70>, <&test_gpio_2 80 90>;
|
|
foos = <&test_gpio_1 100>, <&test_gpio_2 110>;
|
|
foo-names = "A", "b-c";
|
|
pwms = <&test_pwm1 8 200 3>, <&test_pwm2 5 100 1>;
|
|
pwm-names = "red", "green";
|
|
bar = <&test_gpio_1 200>, <&test_gpio_2 210>;
|
|
baz-names = "john", "doe";
|
|
};
|
|
|
|
test_enum_0: enum-0 {
|
|
compatible = "vnd,enum-holder";
|
|
val = "zero";
|
|
};
|
|
|
|
test_enum_1: enum-1 {
|
|
compatible = "vnd,enum-holder";
|
|
val = "two";
|
|
};
|
|
|
|
test_enum_default_0: enum-2 {
|
|
compatible = "vnd,enum-required-false-holder";
|
|
val = "one";
|
|
};
|
|
|
|
test_enum_default_1: enum-3 {
|
|
compatible = "vnd,enum-required-false-holder";
|
|
};
|
|
|
|
test_enum_int_default_0: enum-4 {
|
|
compatible = "vnd,enum-int-required-false-holder";
|
|
val = < 5 >;
|
|
};
|
|
|
|
test_enum_int_default_1: enum-5 {
|
|
compatible = "vnd,enum-int-required-false-holder";
|
|
};
|
|
|
|
/*
|
|
* This should be the only node with this
|
|
* compatible in the tree.
|
|
*/
|
|
disabled-node@0 {
|
|
compatible = "vnd,disabled-compat";
|
|
reg = < 0x0 0x1000 >;
|
|
label = "DISABLED_NODE_0";
|
|
status = "disabled";
|
|
};
|
|
|
|
disabled_gpio: gpio@0 {
|
|
compatible = "vnd,gpio";
|
|
gpio-controller;
|
|
reg = < 0x0 0x1000 >;
|
|
interrupts = <3 1>;
|
|
#gpio-cells = < 0x2 >;
|
|
label = "TEST_GPIO_0";
|
|
status = "disabled";
|
|
};
|
|
|
|
test_no_status: intc_no_status@0 {
|
|
compatible = "vnd,intc";
|
|
reg = <0x0 0x1000>;
|
|
interrupt-controller;
|
|
#interrupt-cells = <2>;
|
|
};
|
|
|
|
test_nodelabel: TEST_NODELABEL_ALLCAPS: test_gpio_1: gpio@deadbeef {
|
|
compatible = "vnd,gpio";
|
|
gpio-controller;
|
|
reg = < 0xdeadbeef 0x1000 >;
|
|
#gpio-cells = < 0x2 >;
|
|
#foo-cells = < 0x1 >;
|
|
#baz-cells = < 0x1 >;
|
|
label = "TEST_GPIO_1";
|
|
interrupts = <4 3>;
|
|
status = "okay";
|
|
};
|
|
|
|
test_gpio_2: gpio@abcd1234 {
|
|
compatible = "vnd,gpio";
|
|
gpio-controller;
|
|
reg = < 0xabcd1234 0x500 0x98765432 0xff >;
|
|
reg-names = "one", "two";
|
|
#gpio-cells = < 0x2 >;
|
|
#foo-cells = < 0x1 >;
|
|
#baz-cells = < 0x1 >;
|
|
interrupts = <5 2>;
|
|
label = "TEST_GPIO_2";
|
|
status = "okay";
|
|
};
|
|
|
|
test_gpio_3: gpio@1234 {
|
|
compatible = "vnd,gpio-one-cell";
|
|
gpio-controller;
|
|
reg = < 0x1234 0x500 >;
|
|
#gpio-cells = < 0x1 >;
|
|
label = "TEST_GPIO_3";
|
|
status = "okay";
|
|
};
|
|
|
|
test_i2c: i2c@11112222 {
|
|
#address-cells = < 1 >;
|
|
#size-cells = < 0 >;
|
|
compatible = "vnd,i2c";
|
|
reg = < 0x11112222 0x1000 >;
|
|
label = "TEST_I2C_CTLR";
|
|
status = "okay";
|
|
clock-frequency = < 100000 >;
|
|
interrupts = <6 2 7 1>;
|
|
interrupt-names = "status", "error";
|
|
|
|
test-i2c-dev@10 {
|
|
compatible = "vnd,i2c-device";
|
|
label = "TEST_I2C_DEV_10";
|
|
reg = < 0x10 >;
|
|
};
|
|
|
|
gpio@11 {
|
|
gpio-controller;
|
|
#gpio-cells = <2>;
|
|
compatible = "vnd,gpio-expander";
|
|
reg = <0x11>;
|
|
label = "TEST_EXPANDER_I2C";
|
|
};
|
|
|
|
test_i2c_mux: i2c-mux@12 {
|
|
compatible = "vnd,i2c-mux";
|
|
label = "I2C_MUX";
|
|
reg = <0x12>;
|
|
i2c-mux-ctlr-1 {
|
|
compatible = "vnd,i2c-mux-controller";
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
label = "I2C_MUX_CTLR_1";
|
|
test_muxed_i2c_dev_1: muxed-i2c-dev@10 {
|
|
compatible = "vnd,i2c-device";
|
|
status = "disabled";
|
|
reg = <0x10>;
|
|
};
|
|
};
|
|
i2c-mux-ctlr-2 {
|
|
compatible = "vnd,i2c-mux-controller";
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
label = "I2C_MUX_CTLR_1";
|
|
test_muxed_i2c_dev_2: muxed-i2c-dev@10 {
|
|
compatible = "vnd,i2c-device";
|
|
status = "disabled";
|
|
reg = <0x10>;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
test_i2c_no_reg: i2c {
|
|
#address-cells = < 1 >;
|
|
#size-cells = < 0 >;
|
|
compatible = "vnd,i2c";
|
|
label = "TEST_I2C_NO_REG_CTLR";
|
|
status = "okay";
|
|
clock-frequency = < 100000 >;
|
|
|
|
test-i2c-dev@12 {
|
|
compatible = "vnd,i2c-device";
|
|
label = "TEST_I2C_DEV_12";
|
|
reg = < 0x12 >;
|
|
};
|
|
};
|
|
|
|
test_mbox: mbox {
|
|
label = "TEST_MBOX";
|
|
compatible = "vnd,mbox";
|
|
#mbox-cells = <1>;
|
|
status = "okay";
|
|
};
|
|
|
|
test_mbox_zero_cell: mbox_zero_cell {
|
|
label = "TEST_MBOX_ZERO_CELL";
|
|
compatible = "vnd,mbox-zero-cell";
|
|
#mbox-cells = <0>;
|
|
status = "okay";
|
|
};
|
|
|
|
test_spi: spi@33334444 {
|
|
#address-cells = < 1 >;
|
|
#size-cells = < 0 >;
|
|
compatible = "vnd,spi";
|
|
reg = < 0x33334444 0x1000 >;
|
|
interrupts = <8 3 9 0 10 1>;
|
|
label = "TEST_SPI_CTLR";
|
|
status = "okay";
|
|
clock-frequency = < 2000000 >;
|
|
|
|
cs-gpios = <&test_gpio_1 0x10 0x20>,
|
|
<&test_gpio_2 0x30 0x40>,
|
|
<&test_gpio_2 0x50 0x60>;
|
|
|
|
/* all vnd,spi-device instances should have CS */
|
|
|
|
test-spi-dev@0 {
|
|
compatible = "vnd,spi-device";
|
|
label = "TEST_SPI_DEV_0";
|
|
reg = <0>;
|
|
spi-max-frequency = < 2000000 >;
|
|
};
|
|
|
|
test-spi-dev@1 {
|
|
compatible = "vnd,spi-device";
|
|
label = "TEST_SPI_DEV_1";
|
|
reg = <1>;
|
|
spi-max-frequency = < 2000000 >;
|
|
};
|
|
|
|
gpio@2 {
|
|
gpio-controller;
|
|
#gpio-cells = <2>;
|
|
compatible = "vnd,gpio-expander";
|
|
reg = <2>;
|
|
label = "TEST_EXPANDER_SPI";
|
|
spi-max-frequency = <(1 * 1000 * 1000)>;
|
|
};
|
|
};
|
|
|
|
test_spi_no_cs: spi@55556666 {
|
|
#address-cells = < 1 >;
|
|
#size-cells = < 0 >;
|
|
compatible = "vnd,spi";
|
|
reg = < 0x55556666 0x1000 >;
|
|
label = "TEST_SPI_CTLR_NO_CS";
|
|
status = "okay";
|
|
clock-frequency = < 2000000 >;
|
|
|
|
/*
|
|
* There should only be one spi-device-2 node.
|
|
* It should not have a CS GPIO.
|
|
*/
|
|
test_spi_dev_no_cs: test-spi-dev@0 {
|
|
compatible = "vnd,spi-device-2";
|
|
label = "TEST_SPI_DEV_NO_CS";
|
|
reg = <0>;
|
|
spi-max-frequency = < 2000000 >;
|
|
};
|
|
};
|
|
|
|
test_i2c_1: i2c@77778888 {
|
|
#address-cells = < 1 >;
|
|
#size-cells = < 0 >;
|
|
compatible = "vnd,i2c";
|
|
reg = < 0x77778888 0x1000 >;
|
|
label = "TEST_I2C_CTLR_1";
|
|
status = "okay";
|
|
clock-frequency = < 100000 >;
|
|
interrupts = <11 3 12 2>;
|
|
interrupt-names = "status", "error";
|
|
};
|
|
|
|
test_adc_1: adc@10002000 {
|
|
reg = <0x10002000 0x1000>;
|
|
compatible = "vnd,adc";
|
|
label = "TEST_ADC_1";
|
|
status = "okay";
|
|
#io-channel-cells = <1>;
|
|
};
|
|
|
|
test_adc_2: adc@10003000 {
|
|
reg = <0x10003000 0x1000>;
|
|
compatible = "vnd,adc";
|
|
label = "TEST_ADC_2";
|
|
status = "okay";
|
|
#io-channel-cells = <1>;
|
|
};
|
|
|
|
/* there should only be one of these */
|
|
test_temp_sensor: temperature-sensor {
|
|
compatible = "vnd,adc-temp-sensor";
|
|
label = "TEST_TEMP";
|
|
io-channels = <&test_adc_1 10>, <&test_adc_2 20>;
|
|
io-channel-names = "ch1", "ch2";
|
|
dmas = <&test_dma1 1 2>, <&test_dma2 3 4>;
|
|
dma-names = "tx", "rx";
|
|
clocks = <&test_clk 3 7>, <&test_fixed_clk>, <&test_clk 8 2>;
|
|
clock-names = "clk-a", "clk-fixed", "clk-b";
|
|
pinctrl-0 = <&test_pincfg_a &test_pincfg_b>;
|
|
pinctrl-1 = <&test_pincfg_c &test_pincfg_d>;
|
|
pinctrl-2 = <&test_pincfg_d>;
|
|
pinctrl-names = "default", "sleep", "f.o.o2";
|
|
mboxes = <&test_mbox 1>, <&test_mbox 2>, <&test_mbox_zero_cell>;
|
|
mbox-names = "tx", "rx", "zero";
|
|
};
|
|
|
|
/* there should only be one of these */
|
|
test_reg: reg-holder@9999aaaa {
|
|
compatible = "vnd,reg-holder";
|
|
reg = < 0x9999aaaa 0x1000 0xbbbbcccc 0x3f >;
|
|
status = "okay";
|
|
reg-names = "first", "second";
|
|
misc-prop = <1234>;
|
|
};
|
|
|
|
test_intc: interrupt-controller@bbbbcccc {
|
|
compatible = "vnd,intc";
|
|
reg = <0xbbbbcccc 0x1000>;
|
|
interrupt-controller;
|
|
#interrupt-cells = <2>;
|
|
};
|
|
|
|
/* there should only be one of these */
|
|
test_irq: interrupt-holder {
|
|
compatible = "vnd,interrupt-holder";
|
|
status = "okay";
|
|
interrupts = <30 3 40 5 60 7>;
|
|
interrupt-names = "err", "stat", "done";
|
|
};
|
|
|
|
test_fixed_clk: test-fixed-clock {
|
|
compatible = "fixed-clock";
|
|
clock-frequency = <25000000>;
|
|
#clock-cells = <0>;
|
|
};
|
|
|
|
test_clk: test-clock {
|
|
compatible = "vnd,clock";
|
|
label = "TEST_CLOCK";
|
|
#clock-cells = <2>;
|
|
};
|
|
|
|
test_dma1: dma@44443333 {
|
|
compatible = "vnd,dma";
|
|
#dma-cells = <2>;
|
|
reg = < 0x44443333 0x1000 >;
|
|
interrupts = <11 3>;
|
|
label = "TEST_DMA_CTRL_1";
|
|
status = "okay";
|
|
};
|
|
|
|
test_dma2: dma@44442222 {
|
|
compatible = "vnd,dma";
|
|
#dma-cells = <2>;
|
|
reg = < 0x44442222 0x1000 >;
|
|
interrupts = <12 3>;
|
|
label = "TEST_DMA_CTRL_2";
|
|
status = "okay";
|
|
};
|
|
|
|
test_pwm1: pwm@55551111 {
|
|
compatible = "vnd,pwm";
|
|
#pwm-cells = <3>;
|
|
reg = < 0x55551111 0x1000 >;
|
|
label = "TEST_PWM_CTRL_1";
|
|
status = "okay";
|
|
};
|
|
|
|
test_pwm2: pwm@55552222 {
|
|
compatible = "vnd,pwm";
|
|
#pwm-cells = <3>;
|
|
reg = < 0x55552222 0x1000 >;
|
|
label = "TEST_PWM_CTRL_2";
|
|
status = "okay";
|
|
};
|
|
|
|
/* there should only be one of these */
|
|
test_children: test-children {
|
|
compatible = "vnd,child-bindings";
|
|
|
|
test_child_a: child-a {
|
|
val = <0>;
|
|
status = "okay";
|
|
};
|
|
test_child_b: child-b {
|
|
val = <1>;
|
|
status = "okay";
|
|
};
|
|
test_child_c: child-c {
|
|
val = <2>;
|
|
status = "disabled";
|
|
};
|
|
};
|
|
|
|
test-great-grandchildren {
|
|
compatible = "vnd,great-grandchild-bindings";
|
|
|
|
child {
|
|
grandchild {
|
|
test_ggc: great-grandchild {
|
|
ggc-prop = <42>;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|