­­­­­­­­­­­

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.