> 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 > >