On a TI am3359 processor (Beaglebone Black) I'm attempting to attempting to control the GPIO pin-muxing through the Control subsystem registers which start at 0x4e100000. I can read and write to the GPIO0 through GPIO3 registers correctly through MMIO after attaching the device memory, but when I try to write to any of the pin mux registers nothing is written and no errors are output.

The code I've written to set up pin muxing resides in a gpio driver which is a modified version of an am 33xx gpio driver I pulled from the ksyslabs.org repository.

With verbosity turned on, I see the that the pin mux registers are attached to local memory:
Genode::Io_mem_session_component::Dataspace_attr Genode::Io_mem_session_component::_prepare_io_mem(const char*, Genode::Range_allocator*): I/O mem [44e10000,44e11000)
[init -> gpio_drv] GPIO_control base is 0x44e10000 local is 0x4000

I write a value of 5 to the register offset 0x800 into the Control dataspace:
[init -> gpio_drv] mmio write 0x4800: 0x00000005
[init -> gpio_drv] void Omap_driver::set_pin_controls(int, int, int): B=1, P=0, Mode=5, Input=0, Offset=0

In jdb I see that the value at 0x4800 has not changed after apparently writing 5 to it.

I believe I've set up the IO memory mapping correctly, the values read from the pin muxing registers look correct, and the GPIO subsystem appears to be set up correctly as I can turn on and off some LEDs.

Is there something I need to do to enable writing to the memory region containing the Control registers?

Thanks for any help.

    Bob Stewart