Translation Table Memory Attribute bits

Bob Stewart robjsstewart at ...196...
Thu Sep 4 15:33:31 CEST 2014


I've never been able to get 14.05 or 14.08 working on my AM335X 
processor, which is not a big deal as 14.02 has everything I need for 
the applications I'm using that processor for. But out of curiosity:

The issue on 14.08 may revolve around memory access bit rights in TLB 
table entries. To get 14.08 to initialize the kernel properly the memory 
access bits have to be set as Tex =  0, B = 1, and C = 0. These setting 
seem correct for a shared Device according to the Arm v7 ref manual. 
With those settings in place, the kernel initializes properly and 
eventually init runs. During the kernel initialization process Core_pd 
is called and translations are created for the program image  (which 
starts at 0x81000000) and the core-only io memory regions. The 
translation table entries for the program image are of section size plus 
a small page so two entries are inserted in the translation table. The 
access bits and permission bits for the section entry are correct with 
the possible exception of the C bit, which in 14.08 appears never to be 
set and I wondered why that was, when it is used in 14.02.

Once the init thread runs, any reference to the translation table entry 
for the program image, the section entry mentioned above cause a mmu 
exception as the following partial debug output shows:
...
start thread 3 'entrypoint' in program 1 'core' on processor 0/1
start thread 4 'signal' in program 1 'core' on processor 0/1
start thread 5 'pager_activation' in program 1 'core' on processor 0/1
int main(): --- start init ---
int main(): transferred 507 MB to init
start thread 6 'init' in program 1 'core' on processor 0/1
thread id is 0x7
start thread 7 'init' in program 2 'init' on processor 0/1
void Kernel::Thread::_mmu_exception(): f_addr 0x81000000 f_writes 0x0 
f_pd 0x813ed088 f_signal 0x7f
  label init
int main(): --- init created, waiting for exit condition ---
void Kernel::Thread::_mmu_exception(): f_addr 0x81045f60 f_writes 0x1 
f_pd 0x813ed088 f_signal 0x7f
  label init
void Kernel::Thread::_mmu_exception(): f_addr 0x8102dab8 f_writes 0x0 
f_pd 0x813ed088 f_signal 0x7f
  label init
...

Setting the C bit as it was set in 14.02 makes no difference, which I 
thought it would and it should be affecting caching behavior.

Any thoughts on this behavoir?

Thanks,
         Bob




More information about the users mailing list