This adds a few bits to the devicetree API tests for multi-bus nodes where a bus can support multiple protocols. This uses I3C as basis as I3C controller can support both I2C and I3C on the same bus, while I2C controller cannot support both. So this needs to make sure the correct bus macros are generated if appropriate (and not generated if not needed). Signed-off-by: Daniel Leung <daniel.leung@intel.com>
552 lines
12 KiB
Plaintext
552 lines
12 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";
|
|
};
|
|
|
|
enum-6 {
|
|
compatible = "vnd,enum-holder-inst";
|
|
val = "zero";
|
|
};
|
|
|
|
enum-7 {
|
|
compatible = "vnd,enum-required-false-holder-inst";
|
|
};
|
|
|
|
/*
|
|
* This should be the only node with this
|
|
* compatible in the tree.
|
|
*/
|
|
disabled-node@0 {
|
|
compatible = "vnd,disabled-compat";
|
|
reg = < 0x0 0x1000 >;
|
|
status = "disabled";
|
|
};
|
|
|
|
disabled_gpio: gpio@0 {
|
|
compatible = "vnd,gpio-device";
|
|
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-device";
|
|
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-device";
|
|
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 >;
|
|
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>;
|
|
};
|
|
|
|
test_i2c_mux: i2c-mux@12 {
|
|
compatible = "vnd,i2c-mux";
|
|
reg = <0x12>;
|
|
i2c-mux-ctlr-1 {
|
|
compatible = "vnd,i2c-mux-controller";
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
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>;
|
|
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";
|
|
status = "okay";
|
|
clock-frequency = < 100000 >;
|
|
|
|
test-i2c-dev@12 {
|
|
compatible = "vnd,i2c-device";
|
|
reg = < 0x12 >;
|
|
};
|
|
};
|
|
|
|
test_i3c: i3c@88889999 {
|
|
#address-cells = < 3 >;
|
|
#size-cells = < 0 >;
|
|
compatible = "vnd,i3c";
|
|
reg = < 0x88889999 0x1000 >;
|
|
label = "TEST_I3C_CTLR";
|
|
status = "okay";
|
|
|
|
test-i3c-dev@420000ABCD12345678 {
|
|
compatible = "vnd,i3c-device";
|
|
label = "TEST_I3C_DEV_42";
|
|
reg = < 0x42 0xABCD 0x12345678 >;
|
|
};
|
|
|
|
test-i3c-i2c-dev@380000000000000050 {
|
|
compatible = "vnd,i3c-i2c-device";
|
|
label = "TEST_I3C_I2C_DEV_38";
|
|
reg = < 0x38 0x0 0x50 >;
|
|
};
|
|
};
|
|
|
|
test_mbox: mbox {
|
|
compatible = "vnd,mbox";
|
|
#mbox-cells = <1>;
|
|
status = "okay";
|
|
};
|
|
|
|
test_mbox_zero_cell: 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";
|
|
reg = <1>;
|
|
spi-max-frequency = < 2000000 >;
|
|
};
|
|
|
|
gpio@2 {
|
|
gpio-controller;
|
|
#gpio-cells = <2>;
|
|
compatible = "vnd,gpio-expander";
|
|
reg = <2>;
|
|
spi-max-frequency = <(1 * 1000 * 1000)>;
|
|
};
|
|
};
|
|
|
|
test_spi_no_cs: spi@55556666 {
|
|
#address-cells = < 1 >;
|
|
#size-cells = < 0 >;
|
|
compatible = "vnd,spi";
|
|
reg = < 0x55556666 0x1000 >;
|
|
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";
|
|
reg = <0>;
|
|
spi-max-frequency = < 2000000 >;
|
|
};
|
|
};
|
|
|
|
test_i2c_1: i2c@77778888 {
|
|
#address-cells = < 1 >;
|
|
#size-cells = < 0 >;
|
|
compatible = "vnd,i2c";
|
|
reg = < 0x77778888 0x1000 >;
|
|
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";
|
|
status = "okay";
|
|
#io-channel-cells = <1>;
|
|
};
|
|
|
|
test_adc_2: adc@10003000 {
|
|
reg = <0x10003000 0x1000>;
|
|
compatible = "vnd,adc";
|
|
status = "okay";
|
|
#io-channel-cells = <1>;
|
|
};
|
|
|
|
/* there should only be one of these */
|
|
test_temp_sensor: temperature-sensor {
|
|
compatible = "vnd,adc-temp-sensor";
|
|
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";
|
|
resets = <&test_reset 10>, <&test_reset 20>;
|
|
reset-names = "reset-a", "reset-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_vendor: vendor {
|
|
compatible = "vnd,model1", "gpio", "zephyr,model2";
|
|
status = "okay";
|
|
};
|
|
|
|
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";
|
|
#clock-cells = <2>;
|
|
};
|
|
|
|
test_reset: test-reset@abcd1234 {
|
|
compatible = "vnd,reset";
|
|
reg-width = <4>;
|
|
reg = <0xabcd1234 0x100>;
|
|
#reset-cells = <1>;
|
|
};
|
|
|
|
test_dma1: dma@44443333 {
|
|
compatible = "vnd,dma";
|
|
#dma-cells = <2>;
|
|
reg = < 0x44443333 0x1000 >;
|
|
interrupts = <11 3>;
|
|
status = "okay";
|
|
};
|
|
|
|
test_dma2: dma@44442222 {
|
|
compatible = "vnd,dma";
|
|
#dma-cells = <2>;
|
|
reg = < 0x44442222 0x1000 >;
|
|
interrupts = <12 3>;
|
|
status = "okay";
|
|
};
|
|
|
|
test_pwm1: pwm@55551111 {
|
|
compatible = "vnd,pwm";
|
|
#pwm-cells = <3>;
|
|
reg = < 0x55551111 0x1000 >;
|
|
status = "okay";
|
|
};
|
|
|
|
test_pwm2: pwm@55552222 {
|
|
compatible = "vnd,pwm";
|
|
#pwm-cells = <3>;
|
|
reg = < 0x55552222 0x1000 >;
|
|
status = "okay";
|
|
};
|
|
|
|
test_transceiver0: can-phy0 {
|
|
compatible = "vnd,can-transceiver";
|
|
status = "okay";
|
|
#phy-cells = <0>;
|
|
max-bitrate = <5000000>;
|
|
};
|
|
|
|
test_can0: can@55553333 {
|
|
compatible = "vnd,can-controller";
|
|
reg = < 0x55553333 0x1000 >;
|
|
sjw = <1>;
|
|
sample-point = <875>;
|
|
bus-speed = <125000>;
|
|
status = "okay";
|
|
phys = <&test_transceiver0>;
|
|
};
|
|
|
|
test_can1: can@55554444 {
|
|
compatible = "vnd,can-controller";
|
|
reg = < 0x55554444 0x1000 >;
|
|
sjw = <1>;
|
|
sample-point = <875>;
|
|
bus-speed = <125000>;
|
|
status = "okay";
|
|
|
|
can-transceiver {
|
|
max-bitrate = <2000000>;
|
|
};
|
|
};
|
|
|
|
/* 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>;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
test-ranges {
|
|
#address-cells = <2>;
|
|
#size-cells = <1>;
|
|
|
|
test_ranges_pcie: pcie@0 {
|
|
compatible = "vnd,pcie";
|
|
reg = <0 0 1>;
|
|
#address-cells = <3>;
|
|
#size-cells = <2>;
|
|
|
|
ranges = <0x1000000 0 0 0 0x3eff0000 0 0x10000>,
|
|
<0x2000000 0 0x10000000 0 0x10000000 0 0x2eff0000>,
|
|
<0x3000000 0x80 0 0x80 0 0x80 0>;
|
|
};
|
|
|
|
test_ranges_other: other@1 {
|
|
reg = <0 1 1>;
|
|
#address-cells = <2>;
|
|
#size-cells = <1>;
|
|
|
|
ranges = <0x0 0x0 0x0 0x3eff0000 0x10000>,
|
|
<0x0 0x10000000 0x0 0x10000000 0x2eff0000>;
|
|
};
|
|
};
|
|
|
|
test_string_token_0: string-token-0 {
|
|
compatible = "vnd,string-token";
|
|
val = "token_zero";
|
|
};
|
|
|
|
test_string_token_1: string-token-1 {
|
|
compatible = "vnd,string-token";
|
|
val = "token_one";
|
|
};
|
|
|
|
test_string_token_2: string-token-2 {
|
|
compatible = "vnd,string-token";
|
|
val = "token_two";
|
|
};
|
|
|
|
test_str_array_token_0: string-array-token-0 {
|
|
compatible = "vnd,string-array-token";
|
|
val = "token_first_idx_zero",
|
|
"token_first_idx_one",
|
|
"token_first_idx_two";
|
|
};
|
|
|
|
test_str_array_token_1: string-array-token-1 {
|
|
compatible = "vnd,string-array-token";
|
|
val = "token_second_idx_zero",
|
|
"token_second_idx_one",
|
|
"token_second_idx_two",
|
|
"token_second_idx_three";
|
|
};
|
|
};
|
|
};
|