-
Notifications
You must be signed in to change notification settings - Fork 8.2k
dts: flatten video's device tree endpoints definition #72950
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
dts: flatten video's device tree endpoints definition #72950
Conversation
|
Interesting consequence: it becomes possible for any driver to list all ports using Similar to this: zephyr/drivers/interrupt_controller/intc_gic.c Lines 29 to 31 in 5409c7c
For instance, allowing |
This change removes the "port@0 { ... };" block, making the devicetree less
nested while systematically including the "ports { ... };" root block.
In practice, this looks like only adding an "s" to "port" blocks, but the
changes are also semantic.
Complex configurations are still possible with this scheme:
video@10380000 {
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
endpoint@0 {
reg = <0>;
remote-endpoint = <&other>;
};
endpoint@1 {
reg = <1>;
remote-endpoint = <&other>;
};
};
port@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
endpoint@0 {
reg = <0>;
remote-endpoint = <&other>;
};
};
};
};
Is turned into something like this:
video@10380000 {
ports {
#address-cells = <2>;
#size-cells = <0>;
endpoint@00 {
reg = <0 0>;
data-lanes = <0 1 2 3>;
remote-endpoint = <&other>;
};
endpoint@01 {
reg = <0 1>;
data-lanes = <4 5 6 7>;
remote-endpoint = <&other>;
};
endpoint@10 {
reg = <1 0>;
data-lanes = <0 1 2 3>;
remote-endpoint = <&other>;
};
};
};
Which helps simpler device to be simpler, and allows more complex
device with arbitrary number of nesting to remain simple.
Both very-nested and completely flat (1 port 1 endpoint) look exactly
the same way, which helps with use of generic macros to traverse the
devicetree across all video devices.
The use of "ports { ... };" is required so that the "#address-cells"
property can be different between "ports" and i.e. "display-timings".
This prevents to apply devicetree properties to an entire port,
affecting each of its endpoint, but in the Linux source, this was
only used once, in imx8mp-tqma8mpql-mba8mpxl-lvds-g133han01.dtso.
Signed-off-by: Josuah Demangeon <[email protected]>
|
Some other issue there is with a nested |
e4b132b to
045a59c
Compare
|
Looks great to me, but someone from dts to approve. |
|
One issue is that the So we would end-up with warnings like this: Likewise, Port 0 Endpoint 0 In would become: endpoint@001 and Zephyr would complain of the leading zeros: So keeping the See also the suggestion to include the endpoint chain as global devicetree macros. |
|
One easy workaround is to simply use a single
|
|
Since doing nothing turns out better, may you allow me to close my pull request. |
This is part of a series of proposals for incremental changes for the Video API:
Summary:
Remove
port@0from video devicetree and only keependpoint@0Before:
videodev { ports { port@0 { endpoint@0 { remote-endpoint; }; }; }; };videodev { port { endpoint { remote-endpoint; }; }; };After:
videodev { ports { endpoint@0 { remote-endpoint; }; }; };Details:
Currently, remote-endpoint is not used (#72311). This allows us to move definitions without breaking anything.
In Linux, the
ports{};block allows to have#address-cellsinports{}applied toport@0{}; port@1{}; ...only, and not i.e.display-timings.Complex configurations are still possible with this scheme:
Is turned into something like this:
This prevents to apply devicetree properties to an entire port, affecting each of its endpoint, but in the Linux source, this was only used once, in imx8mp-tqma8mpql-mba8mpxl-lvds-g133han01.dtso:
References
Reviewing a few contexts where remote-endpoint are invoked in Linux (audio, mipi, hdmi, usb) and have extra properties (outside
reg,#address-cells =,#size-cellsand nested blocks):several in endpoint:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/allwinner/sun50i-a64-amarula-relic.dts
several in endpoint:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/allwinner/sun50i-a64-pinetab.dts
link-frequenciesin endpoint:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/mediatek/mt8186-corsola.dtsi
data-lanesin endpoint:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/mediatek/mt8186-corsola-steelix.dtsi
data-lanesin endoint:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/mediatek/mt8195-cherry.dtsi
dai-formatin endpoint:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/nvidia/tegra234-p3737-0000.dtsi
convert-ratein endoint:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/nvidia/tegra194-p3509-0000.dtsi
data-lanesin endpoint:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/rockchip/px30-evb.dts
several in endpoint:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/renesas/hihope-rzg2-ex-aistarvision-mipi-adapter-2.1.dtsi
several in endpoint:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/renesas/r8a774c0-ek874-mipi-2.1.dts
several in endpoint:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/renesas/rz-smarc-cru-csi-ov5645.dtsi
sevral in endpoint:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/renesas/draak.dtsi
several in endpoint:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/qcom/qrb5165-rb5-vision-mezzanine.dts
several in endpoint:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/qcom/sdm850-lenovo-yoga-c630.dts
data-lanesin endpoint:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi
data-lanesin endpoint:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/qcom/sc7180-trogdor-wormdingler.dtsi
data-lanesin endpoint:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/qcom/sm8350-hdk.dts
data-lanesin endpoint:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/freescale/imx8mm-evk.dtsi
several in endpoints:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/freescale/imx8mm-venice-gw72xx-0x-imx219.dtso
dual-lvds-odd-pixelsin port:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/freescale/imx8mp-tqma8mpql-mba8mpxl-lvds-g133han01.dtso
dual-lvds-even-pixelsin port:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/freescale/imx8mp-tqma8mpql-mba8mpxl-lvds-g133han01.dtso
several in endpoint:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/freescale/imx8mm-beacon-baseboard.dtsi
data-lanesin endpoint:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/freescale/imx8mp-evk.dts
bus-widthin endpoint:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm/boot/dts/renesas/r8a7791-koelsch.dts
arm,pl11x,tft-r0g0b0-padsin endpoint:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm/boot/dts/arm/arm-realview-eb.dtsi
several in endpoint:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm/boot/dts/st/stm32mp157c-ev1.dts
several in endpoint:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm/boot/dts/st/stm32429i-eval.dts
several in endpoint:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm/boot/dts/ti/omap/omap3-n900.dts