omap kernel does 32 bit writes to 16 bit I2C_SYSC register
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Linaro Linux |
Fix Released
|
Medium
|
Unassigned |
Bug Description
The linux-image-
"The HS I2Ci registers are limited to 16 bit and 8 bit data accesses; 32–bit data access is not allowed and can corrupt register content."
QEMU complains about these accesses:
omap_badwidth_
omap_badwidth_
Here's a backtrace of one of the writes (for 2.6.37-1003.6):
#0 0xc0070764 in omap_hwmod_write (v=21, oh=<value optimised out>)
at /build/
#1 _write_sysconfig (v=21, oh=<value optimised out>) at /build/
#2 0xc0070a78 in _enable_sysc (oh=0xc07b2d08) at /build/
#3 0xc0070ff0 in _enable (oh=0xc07b2d08) at /build/
#4 0xc00712c0 in _setup (oh=0xc07b2d08, data=<value optimised out>)
at /build/
#5 0xc00715c4 in omap_hwmod_for_each (fn=0xc0071238 <_setup>, data=0x0)
at /build/
#6 0xc0071638 in omap_hwmod_
#7 0xc0010458 in omap2_init_
at /build/
#8 0xc0016364 in omap3_beagle_
#9 0xc000c278 in init_IRQ () at /build/
#10 0xc0008a64 in start_kernel () at /build/
My guess is that the I2C omap_hwmod structs in arch/arm/
Changed in linux-linaro: | |
status: | New → Confirmed |
status: | Confirmed → In Progress |
Changed in linux-linaro: | |
status: | Confirmed → Fix Committed |
assignee: | warmcat (andy-warmcat) → nobody |
status: | Fix Committed → Fix Released |
This is caused by the problem Peter identified, the attached patch solves it for OMAP3 and OMAP4, and has been sent upstream