Hi,
I've been casually using Genode on a TI Beaglebone SoC for about a year now. One of the first issues I had was that virtualized memory management wouldn't work at all. This I eventually traced to memory attributes in TLB entries. The Am335X processors expects cacheability to be: Inner -- Write-thru, No Write Allocate Outer -- Write-back, Write Allocate.
So, based on the info in the ARM Architecture Ref Manual for the Arm_v7 (pp 1368), I set the attributes in memory_region_attr (Genode 13.08) to :
if(Arm::Page_flags::D::get(flags)) return Tex::bits(0) | C::bits(0) | B::bits(1); // return Tex::bits(2) | C::bits(0) | B::bits(0);
if(Arm::Page_flags::C::get(flags)) return Tex::bits(5) | C::bits(1) | B::bits(0); // return Tex::bits(5) | C::bits(0) | B::bits(1);
return Tex::bits(6) | C::bits(1) | B::bits(0);
MMU worked fine after this change, until 14.05 came along. When 14.05 was released I attempted to migrate to it and made the needed changes for the extensive changes needed for MP. I used the above memory attribute settings (now in translation_table.h), but another MMU issue occurred and the kernel would not complete initialization. I decided to stay with 14.02 as I was working with a uni-processor system anyway and I wanted to complete porting of some linux drivers.
I went back to the 14.05 issues today and found I could get the kernel initialization to complete successfully if I reverted the S bit to "unshared" in the memory attributes in a Section entry create. Prior to 14.05 this bit was set to "unshared" and was presumably changed in 14.05 to allow for multiple processors accessing the same memory regions.
It's unclear to me why this behaviour occurred but it is possibly due to the specific implementation of the Arm_v7 architecture on this particular processor. Or is there something I'm missing in the implementation of multiple processors in Genode?
In addition, after completing kernel initialization, core's "main" function is entered, the info message for creating local services shows up, a translation for the top of RAM (0x80000000) is created, then the message "failed to communicate thread event" occurs and init is never called. Any thoughts on why that message is appearing would be appreciated. It appears to be coming from initialization of the root interfaces.
Thanks,
Bob Stewart