Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 25 Mar 2009 15:06:49 +0100
From:      Guillaume Ballet <gballet@gmail.com>
To:        freebsd-arm@freebsd.org
Subject:   locore.S question
Message-ID:  <fd183dc60903250706y26d8f7eeu1f608ace54c8b813@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?fd183dc60903250706y26d8f7eeu1f608ace54c8b813>