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