[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH ARM v6 07/14] mini-os: arm: boot code



On 16 July 2014 22:49, Julien Grall <julien.grall@xxxxxxxxxx> wrote:
> Hi Thomas,
>
>
> On 16/07/14 12:07, Thomas Leonard wrote:
>>
>> +
>> +       @ Tell the system where our page table is located.
>> +       @ This is the 16 KB top-level translation table, in which
>> +       @ each word maps one 1MB virtual section to a physical section.
>> +       mcr     p15, 0, r1, c2, c0, 0   @ set ttbr0 = r1
>
>
> I don't see any modification of TTBCR (so the initial value is 0). I guess
> you are using short-descriptor translation table format, right? If so, I
> would write somewhere.

Yes, good idea.

>> +       @ Set access permission for domains.
>> +       @ Domains are deprecated, but we have to configure them anyway.
>> +       @ We mark every page as being domain 0 and set domain 0 to "client
>> mode"
>> +       @ (client mode = use access flags in page table).
>> +       mov     r0, #1                  @ 1 = client
>> +       mcr     p15, 0, r0, c3, c0, 0   @ DACR
>> +
>> +       @ Template (flags) for a 1 MB page-table entry.
>> +       @ TEX[2:0] C B = 001 1 1 (outer and inner write-back,
>> write-allocate)
>> +       ldr     r8, =(0x2 +             /* Section entry */ \
>> +                     0xc +             /* C B */ \
>> +                     (3 << 10) +       /* Read/write */ \
>> +                     (1 << 12) +       /* TEX */ \
>> +                     (1 << 16) +       /* Sharable */ \
>> +                     (1<<19))          /* Non-secure */
>> +       @ r8 = template page table entry
>> +
>> +       @ Add an entry for the current physical section, at the old and
>> new
>> +       @ addresses. It's OK if they're the same.
>> +       mov     r0, pc, lsr#20
>> +       mov     r0, r0, lsl#20          @ r0 = physical address of this
>> code's section start
>> +       orr     r3, r0, r8              @ r3 = table entry for this
>> section
>> +       ldr     r4, =_start             @ r4 = desired virtual address of
>> this section
>> +       str     r3, [r1, r4, lsr#18]    @ map desired virtual section to
>> this code
>> +       str     r3, [r1, r0, lsr#18]    @ map current section to this code
>> too
>> +
>> +       @ Invalidate TLB
>> +       mcr     p15, 0, r1, c8, c7, 0   @ TLBIALL
>> +
>> +       @ Enable MMU / SCTLR
>> +       @ We leave caches off for now because we're going to be changing
>> the
>> +       @ TLB a lot and this avoids having to flush the caches each time.
>
>
> Did you intend to mean page table rather than TLB?

Yes. Fixed.

> [..]
>
>
>> +irq_handler:
>> +       ldr     sp, =irqstack_end
>> +       push    {r0 - r12, r14}
>> +
>> +       ldr     r0, IRQ_handler
>> +       cmp     r0, #0
>> +       .word   0x07f000f0      @ undeq - panic if no handler
>
>
> Hrmmm, I didn't spot this earlier. How can this work? You unconditionally
> called an undefined encoding.

Here, the leading "0" is EQ, so it's only executed if IRQ_handler is
unset ("undEQ").

> [..]
>
>
>> diff --git a/extras/mini-os/arch/arm/minios-arm32.lds
>> b/extras/mini-os/arch/arm/minios-arm32.lds
>> new file mode 100755
>> index 0000000..21c3893
>> --- /dev/null
>> +++ b/extras/mini-os/arch/arm/minios-arm32.lds
>> @@ -0,0 +1,79 @@
>> +OUTPUT_ARCH(arm)
>> +ENTRY(_start)
>> +SECTIONS
>> +{
>> +  _boot_stack   = 0x400000;    /* 16 KB boot stack */
>> +  _boot_stack_end = 0x404000;
>> +  _page_dir      = 0x404000;   /* 16 KB translation table */
>
>
> It might be worse to explain that you are relying on there is a hole before
> the kernel address.

OK, will add a note here.


-- 
Dr Thomas Leonard        http://0install.net/
GPG: 9242 9807 C985 3C07 44A6  8B9A AE07 8280 59A5 3CC1
GPG: DA98 25AE CAD0 8975 7CDA  BD8E 0713 3F96 CA74 D8BA

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.