> Date: Tue, 15 Apr 2025 16:26:27 -0500
> From: joshua stein <[email protected]>
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 [email protected]...
> rkparm_init_param_from_storage param read fail
> RKPARM: Invalid parameter part table
> Scanning disk [email protected]...
> Scanning disk [email protected]...
> 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
>
>