> Date: Tue, 15 Apr 2025 16:26:27 -0500
> From: joshua stein <j...@jcs.org>

Hi Joshua,

> I'm trying to bring up OpenBSD/arm on an RK3128 in the Pomera DM250.  
> I was able to update its shipped U-Boot from 2014.10 to 2017.09 so 
> it would have EFI support, and I can boot BOOTARM.EFI.
> 
> It hangs when entering the kernel so I instrumented it to see where, 
> and it looks like it's as soon as it enables the MMU.
> 
> This prints out 1 and 2, but never gets to 3.  Any ideas?

You're accessing the UART registers using their physical address.  But
as soon as you turn on the MMU you need a virtiual address.  So you'll
need to create an appropriate MMU mapping for the UART.

Adding an appropriate entry to mmu_init_table in armv7/locore0.S might
work.  Make sure this is a device mapping.

> 
> arm/locore0.S:
> 
>         .globl  uart_putc               /* send r1 to uart */
> uart_putc:
>         ldr     r0, =0x20064000
>         /*mov   r1, #'h' */
>         str     r1, [r0]
>         ldr     r2, =0x20064000 + 0x7c  /* UART_USR */
> check_usr:
>         ldr     r3, [r2]
>         tst     r3, #(1<<1)             /* UART_TRANSMIT_FIFO_NOT_FULL */
>         beq     check_usr
>         bx      lr
> 
>         .globl start_mmu
> start_mmu:
>         mov     r1, #'1'
>         bl      uart_putc
> 
>         /* Set ASID to zero */
>         mov     r1, #0
>         mcr     CP15_CONTEXTIDR(r1)
>         isb
> 
>         mcr     CP15_TTBR0(r0)          /* Set TTB */
>         mcr     CP15_TLBIALL(r0)        /* Flush TLB */
> 
>         /* Set the Domain Access register.  Very important! */
>         mov     r0, #DOMAIN_CLIENT      /* We only use domain 0 */
>         mcr     CP15_DACR(r0)
>         isb
> 
>         mov     r1, #'2'
>         bl      uart_putc
> 
>         /* Enable MMU */
>         mrc     CP15_SCTLR(r0)
>         orr     r0, r0, #CPU_CONTROL_MMU_ENABLE
>         mcr     CP15_SCTLR(r0)
>         isb
> 
>         mov     r1, #'3'
>         bl      uart_putc
> 
> U-Boot and bootloader output:
> 
>     U-Boot 2017.09-gc974502-dirty (Apr 15 2025 - 13:48:57 -0500)
> 
>     Model: KING JIM Pomera DM250
>     DRAM:  512 MiB
>     Sysmem: init
>     Relocation Offset: 1ddbd000, fdt: 00000000
>     Using default environment
> 
>     dwmmc@10214000: 1, dwmmc@1021c000: 0
>     RKPARM: Invalid parameter part table
>     switch to partitions #0, OK
>     mmc1 is current device
>     switch to partitions #0, OK
>     mmc0(part 0) is current device
>     Bootdev: mmc 0
>     MMC0: High Speed, 52Mhz
>     PartType: RKPARM
>     Found DTB in resource part
>     DTB: rk-kernel.dtb
>     In:    serial
>     Out:   serial
>     Err:   serial
>     rockchip_get_boot_mode: Could not found misc partition
>     boot mode: None
>     CLK: (uboot. arm: enter 600000 KHz, init 600000 KHz, kernel 0N/A)
>       apll 600000 KHz
>       dpll 600000 KHz
>       cpll 400000 KHz
>       gpll 594000 KHz
>       armclk 600000 KHz
>       aclk_cpu 148500 KHz
>       hclk_cpu 74250 KHz
>       pclk_cpu 74250 KHz
>       aclk_peri 148500 KHz
>       hclk_peri 74250 KHz
>       pclk_peri 74250 KHz
>     Hit key to stop autoboot('CTRL+C'):  0 
>     reading efi/boot/bootarm.efi
>     119296 bytes read in 18 ms (6.3 MiB/s)
>     ## Starting EFI application at 62008000 ...
>     FtlInit fffffffe
>     Scanning disk na...@10500000.blk...
>     rkparm_init_param_from_storage param read fail
>     RKPARM: Invalid parameter part table
>     Scanning disk dw...@10214000.blk...
>     Scanning disk dw...@1021c000.blk...
>     Found 3 disks
>     Adding bank: 0x60000000 - 0x80000000 (size: 0x20000000)
>     disks: sd0* sd1 sd2 sd3 sd4 sd5 sd6 sd7 sd8 sd9 sd10 sd11 sd12 sd13 sd14 
> sd15 sd16 sd17 sd18 sd19 sd20 sd21 sd22 sd23 sd24 sd25 sd26 sd27 sd28 sd29 
> sd30
>     >> OpenBSD/armv7 BOOTARM 1.23
>     boot> b bsd.arm
>     cannot open sd0a:/etc/random.seed: No such file or directory
>     booting sd0a:bsd.arm: 4917816+1013564+140524+607800 [97+346224+308373]=0x0
>     12
> 
> 

Reply via email to