Hi all,
I am facing an issue with our existing project (currently based on seL4 1.0).
I am in the process of migrating our project to the latest version of seL4. After all the required changes I am facing a problem I need some help.

In our code, we use libplatsupport for timer & serial I/O as well as the libethdriver in order to use the network interface of the IMX6 board.

The problem appears that the IOMUX device registers are mapped twice. A first time from libplatsupport (and never released):

-> sel4platsupport_new_io_ops()
    -> calls: mux_sys_init()
        -> calls the macro: MAP_IF_NULL(io_ops, IMX6_IOMUXC, _mux.iomuxc);

This end up mapping the device region IMX6_IOMUXC: 0x20e0000 - 0x20e100 (size_bits=12).

So far so good...
but then they are mapped again from the ethernet driver:
ethif_new_lwip_driver_no_malloc()
  -> call my initialization fn
    -> call ethif_imx6_init()
        -> call setup_iomux_enet()
that end up mapping again the region @ IOMUXC_PADDR = 0x20e1000

This second time, the mapping function _utspace_split_alloc fails because apparently the region 0x20e000 has been already mapped (and is not in the regions available).

If I comment out the call to mux_sys_init() in libsel4platsupport_new_io_ops() my ethernet driver successfully initialize (but clearly that's not the correct workaround).

Any suggestions?
Regards,
Fabrizio Bertocci
Real-Time Innovations, Inc.
Sunnyvale, CA