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