locore.S question

Guillaume Ballet gballet at gmail.com
Wed Mar 25 07:34:02 PDT 2009


Hello list,

I'm working on a FreeBSD port for the BeagleBoard. I'm starting the
kernel with u-boot and wrote my own small loader for this purpose.
That loader puts the kernel at 0x81000000 (physical address, since the
MMU is disabled at this stage).

In locore.S, however, there is the following piece of code that is
executed before the MMU is disabled:

  112         adr     r7, Lunmapped
  113         bic     r7, r7, #0xff000000
  114         orr     r7, r7, #PHYSADDR

(snip, disabling MMU)

  129         mov     pc, r7

Since PHYSADDR is set to 0x80000000 (physical start of RAM), then r7
is set to 0x80000000 + offset(Lunmapped) instead of 0x81000000 +
offset(Lunmapped). Of course it crashes.

Now, bypassing the problem is relatively easy, but still I was
wondering why it is 0xff000000 instead of 0xf0000000 on line 113?

Thanks,
Guillaume


More information about the freebsd-arm mailing list