diff --git a/litex/tools/litex_json2dts.py b/litex/tools/litex_json2dts.py index 4b944c757..d4a8ef00a 100755 --- a/litex/tools/litex_json2dts.py +++ b/litex/tools/litex_json2dts.py @@ -28,7 +28,6 @@ def generate_dts(d, initrd_start=None, initrd_size=None, polling=False): / { #address-cells = <1>; #size-cells = <1>; - interrupt-parent = <&intc0>; """ @@ -185,6 +184,7 @@ def generate_dts(d, initrd_start=None, initrd_size=None, polling=False): device_type = "serial"; compatible = "litex,liteuart"; reg = <0x{uart_csr_base:x} 0x100>; + interrupt-parent = <&intc0>; {uart_interrupt} status = "okay"; }}; @@ -203,6 +203,7 @@ def generate_dts(d, initrd_start=None, initrd_size=None, polling=False): <0x{ethmac_mem_base:x} 0x2000>; tx-fifo-depth = <{ethmac_tx_slots}>; rx-fifo-depth = <{ethmac_rx_slots}>; + interrupt-parent = <&intc0>; {ethmac_interrupt} status = "okay"; }}; @@ -309,14 +310,25 @@ def generate_dts(d, initrd_start=None, initrd_size=None, polling=False): # Switches ------------------------------------------------------------------------------------- if "switches" in d["csr_bases"]: + interrupt_specification = "" + if "switches_interrupt" in d["constants"]: + switches_interrupt = d["constants"]["switches_interrupt"] + interrupt_specification = """ + interrupt-controller; + #interrupt-cells = <2>; + interrupt-parent = <&intc0>; + interrupts = <{switches_interrupt}>;""".format(switches_interrupt=switches_interrupt) + dts += """ switches: gpio@{switches_csr_base:x} {{ compatible = "litex,gpio"; reg = <0x{switches_csr_base:x} 0x4>; litex,direction = "in"; + gpio-controller; + #gpio-cells = <2>;{interrupt_specification} status = "disabled"; }}; -""".format(switches_csr_base=d["csr_bases"]["switches"]) +""".format(switches_csr_base=d["csr_bases"]["switches"], interrupt_specification=interrupt_specification) # SPI ------------------------------------------------------------------------------------------ @@ -534,19 +546,19 @@ def generate_dts(d, initrd_start=None, initrd_size=None, polling=False): if "leds" in d["csr_bases"]: dts += """ -&leds { - litex,ngpio = <4>; +&leds {{ + litex,ngpio = <{ngpio}>; status = "okay"; -}; -""" +}}; +""".format(ngpio=d["constants"].get('leds_ngpio', 4)) if "switches" in d["csr_bases"]: dts += """ -&switches { - litex,ngpio = <4>; +&switches {{ + litex,ngpio = <{ngpio}>; status = "okay"; -}; -""" +}}; +""".format(ngpio=d["constants"].get('switches_ngpio', 4)) return dts