Browse Source

edtlib: add new tests for 'interrupt-map'

Add tests to check the correctness of '#address-cells' usage.
The missing tests have allowed bug #77890 to persist for years.

Signed-off-by: Andrey VOLKOV <andrey.volkov@munic.io>
pull/74835/merge
Andrey VOLKOV 10 months ago committed by Benjamin Cabé
parent
commit
957f10c3a0
  1. 40
      scripts/dts/python-devicetree/tests/test.dts
  2. 28
      scripts/dts/python-devicetree/tests/test_edtlib.py

40
scripts/dts/python-devicetree/tests/test.dts

@ -80,6 +80,22 @@ @@ -80,6 +80,22 @@
0 1 0 1 &{/interrupt-map-test/controller-1} 0 0 0 4
0 1 0 2 &{/interrupt-map-test/controller-2} 0 0 0 0 0 5>;
};
nexus-0 {
#address-cells = <0>;
#interrupt-cells = <2>;
interrupt-map = <
0 0 &{/interrupt-map-test/controller-0} 0 0
0 1 &{/interrupt-map-test/controller-1} 0 0 0 1
1 2 &{/interrupt-map-test/controller-2} 0 0 0 0 0 2>;
};
nexus-1 {
#address-cells = <1>;
#interrupt-cells = <1>;
interrupt-map = <
4 0 &{/interrupt-map-test/controller-0} 0 3
4 1 &{/interrupt-map-test/controller-1} 0 0 0 4
4 2 &{/interrupt-map-test/controller-2} 0 0 0 0 0 5>;
};
node@0 {
reg = <0 0>;
interrupts = <0 0 0 1 0 2>;
@ -92,6 +108,30 @@ @@ -92,6 +108,30 @@
&{/interrupt-map-test/nexus} 0 1
&{/interrupt-map-test/nexus} 0 2>;
};
node@2 {
reg = <0 2>;
interrupts = <0 0 0 1 1 2>;
interrupt-parent = <&{/interrupt-map-test/nexus-0}>;
};
node@3 { /* Test the precedence of interrupts/interrupts-extended too */
reg = <0 3>;
interrupts = <1 2 0 0 0 1>;
interrupt-parent = <&{/interrupt-map-test/nexus-0}>;
interrupts-extended = <
&{/interrupt-map-test/nexus-0} 0 0
&{/interrupt-map-test/nexus-0} 0 1
&{/interrupt-map-test/nexus-0} 1 2>;
};
node@4 {
reg = <0 4>;
interrupts = <0 1 2>;
interrupt-parent = <&{/interrupt-map-test/nexus-1}>;
};
node@100000004 {
reg = <1 4>;
interrupts = <0 1 2>;
interrupt-parent = <&{/interrupt-map-test/nexus-1}>;
};
};
interrupt-map-bitops-test {
#address-cells = <2>;

28
scripts/dts/python-devicetree/tests/test_edtlib.py

@ -97,6 +97,34 @@ def test_interrupts(): @@ -97,6 +97,34 @@ def test_interrupts():
edtlib.ControllerAndData(node=node, controller=controller_2, data={'one': 0, 'two': 0, 'three': 5}, name=None, basename=None)
]
node = edt.get_node("/interrupt-map-test/node@2")
assert node.interrupts == [
edtlib.ControllerAndData(node=node, controller=controller_0, data={'one': 0}, name=None, basename=None),
edtlib.ControllerAndData(node=node, controller=controller_1, data={'one': 0, 'two': 1}, name=None, basename=None),
edtlib.ControllerAndData(node=node, controller=controller_2, data={'one': 0, 'two': 0, 'three': 2}, name=None, basename=None)
]
node = edt.get_node("/interrupt-map-test/node@3")
assert node.interrupts == [
edtlib.ControllerAndData(node=node, controller=controller_0, data={'one': 0}, name=None, basename=None),
edtlib.ControllerAndData(node=node, controller=controller_1, data={'one': 0, 'two': 1}, name=None, basename=None),
edtlib.ControllerAndData(node=node, controller=controller_2, data={'one': 0, 'two': 0, 'three': 2}, name=None, basename=None)
]
node = edt.get_node("/interrupt-map-test/node@4")
assert node.interrupts == [
edtlib.ControllerAndData(node=node, controller=controller_0, data={'one': 3}, name=None, basename=None),
edtlib.ControllerAndData(node=node, controller=controller_1, data={'one': 0, 'two': 4}, name=None, basename=None),
edtlib.ControllerAndData(node=node, controller=controller_2, data={'one': 0, 'two': 0, 'three': 5}, name=None, basename=None)
]
node = edt.get_node("/interrupt-map-test/node@100000004")
assert node.interrupts == [
edtlib.ControllerAndData(node=node, controller=controller_0, data={'one': 3}, name=None, basename=None),
edtlib.ControllerAndData(node=node, controller=controller_1, data={'one': 0, 'two': 4}, name=None, basename=None),
edtlib.ControllerAndData(node=node, controller=controller_2, data={'one': 0, 'two': 0, 'three': 5}, name=None, basename=None)
]
node = edt.get_node("/interrupt-map-bitops-test/node@70000000E")
assert node.interrupts == [
edtlib.ControllerAndData(node=node, controller=edt.get_node('/interrupt-map-bitops-test/controller'), data={'one': 3, 'two': 2}, name=None, basename=None)

Loading…
Cancel
Save