Bug:
SD
service of Genode master branch for Fiasco.OC / PandaBoard
doesn’t start with "SD command error" (occurs in os/src/drivers/sd_card/omap4/mmchs.h:824).
Description:
L4_FPAGE_BUFFERABLE
constant (base-foc/src/base/ipc/pager.cc:91) is used to
configure I/O memory region.
In Fiasco.OC
this constant is prepared as Page::BUFFERED (base-foc/contrib/kernel/fiasco/src/kern/arm/paging-arm.cpp:65).
In Fiasco.OC
revision 38 this constant is equal to 0x04
(for both ARMv6 and ARMv7).
In
revision 40 it was changed to 0x40.
This
modification causes SD card driver error (and possible other
driver errors) for ARMv6 and v7 architectures.
0x04 value
seems to correspond to ‘Device’ memory type (for I/O).
Memory pages corresponding to I/O are non-cacheable.
0x40 value is
seems for ‘Normal’ memory type. Pages are cached in this
case but this is not allowed for I/O and causes SD card
error.
Solutions:
1) Page::BUFFERED
constant seems to be used for I/O only, not for RAM
(currently). So, we propose to set Page::BUFFERED constant to
0x40 in rev. 40 as it was in rev. 38 (see attached patch).
2) If Page::BUFFERED constant is planned to use for RAM memory also, some other constant for I/O memory pages configuring and related workaround in Genode driver to be added.