This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

ARM Context ID Register & Process Context Switch

Hi, all

What is the content of Context ID Register of ARM Cortex A9. Is it OS that is responsible for assigning the value

of Process ID and ASID? As far as I know, it is so in Linux. Is that the same in the other OSes?

Is it essential to deal with ASID if I want to make context switch correctly? Does Cortex A8 have no Context ID

Register? Minix's process context switch running on a Cortex A8 core doesn't cope with ASID when it writes

TTBR.

Thank you.

Best Regards,

Channing M.

Parents
  • thank you for your advice. At present I am trying to port Minix 3 to Zynq-7000 All Programmable SoC Zedboard, but when the system switches to VM service, after it writes the physical address of page directory again, the operation of refresh_tlb() hangs the CPU. Before this execution point, the same operation of writing TTBR and refreshing TLB is performed smoothly? I don't find the reason why invalidating the TLB at this point will hang the CPU.

Reply
  • thank you for your advice. At present I am trying to port Minix 3 to Zynq-7000 All Programmable SoC Zedboard, but when the system switches to VM service, after it writes the physical address of page directory again, the operation of refresh_tlb() hangs the CPU. Before this execution point, the same operation of writing TTBR and refreshing TLB is performed smoothly? I don't find the reason why invalidating the TLB at this point will hang the CPU.

Children
  • I suspect that it's not the TLB invalidate that is causing the problem, but rather the table walk(s) that have to happen after the invalidate.  Could you give an outline of the steps you are performing?  Also, when you say "hang" what exactly do you mean (e.g. recursive abort, or the processor can't enter debug state)?

    EDIT: Forgot an important "not"

  • Just to establish a base point.


    I see that Minix 3 has been ported to some ARM systems..

    So basically I guess Minix 3 works on ARM at the moment by flushing on context switch and I believed you wanted to use ASID to cut down on the overheads.

    However it sounds to me from what you are saying that you are porting to this board and Minix 3 is failing to run and the ASID stuff was just an idea you had about why it wasn't running.

    Is that right?

    My first guess would be that if it has been running on a different ARM system and is having problems on this one there is very possibly a memory barrier problem, for instance you need to ensure new page table entries are written away from the cache before loading the translation table base. Have you the Cortex-A Series Programmer's Guide for ARMv7-A from the ARM site? It talks a bit about this sort of thing.

  • yes, it is right. I failed to run Minix on the Zedboard. I have downloaded the Cortex-A Series Programmer's Guide. I will read that again. Thanks.