libsel4platsupport: Init FDT ops in 'new_io_ops'

Now that there is an implementation of the FDT ops, we add a call to the
blanket I/O ops initialisation function to also initialise the FDT ops
alongside all the other interfaces.
diff --git a/libsel4platsupport/src/io.c b/libsel4platsupport/src/io.c
index bb0b0d3..9f63bcd 100644
--- a/libsel4platsupport/src/io.c
+++ b/libsel4platsupport/src/io.c
@@ -370,11 +370,23 @@
         return error;
     }
 
+    error = sel4platsupport_new_fdt_ops(&io_ops->io_fdt, simple, &io_ops->malloc_ops);
+    if (error) {
+        free(io_ops->io_mapper.cookie);
+        io_ops->io_mapper.cookie = NULL;
+        return error;
+    }
+
     error = sel4platsupport_new_irq_ops(&io_ops->irq_ops, vka, simple, DEFAULT_IRQ_INTERFACE_CONFIG,
                                         &io_ops->malloc_ops);
     if (error) {
         free(io_ops->io_mapper.cookie);
         io_ops->io_mapper.cookie = NULL;
+        ssize_t fdt_size = simple_get_extended_bootinfo_length(simple, SEL4_BOOTINFO_HEADER_FDT);
+        if (fdt_size > 0) {
+            /* The FDT is available on this platform and we actually copied it, so we free it */
+            ps_free(&io_ops->malloc_ops, fdt_size, &io_ops->io_fdt.cookie);
+        }
         return error;
     }