]> www.infradead.org Git - users/hch/block.git/commitdiff
riscv: Allow disabling of BUILTIN_DTB for XIP
authorFrederik Haxel <haxel@fzi.de>
Tue, 12 Dec 2023 13:01:14 +0000 (14:01 +0100)
committerPalmer Dabbelt <palmer@rivosinc.com>
Wed, 10 Jan 2024 03:33:22 +0000 (19:33 -0800)
This enables, among other things, testing with the QEMU virt machine.

To build an XIP kernel for the QEMU virt machine, configure the
the kernel as desired and apply the following configuration
```
CONFIG_NONPORTABLE=y
CONFIG_XIP_KERNEL=y
CONFIG_XIP_PHYS_ADDR=0x20000000
CONFIG_PHYS_RAM_BASE=0x80200000
CONFIG_BUILTIN_DTB=n
```

Since the QEMU virt flash memory expects a 32 MB file, the built image
must be padded. For example, with
`truncate -s 32M arch/riscv/boot/xipImage`

The kernel can be started using the following command in QEMU (v8+)
```
qemu-system-riscv64 -M virt,pflash0=pflash0 \
 -blockdev node-name=pflash0,driver=file,read-only=on,\
filename=arch/riscv/boot/xipImage <optional parameters>
```

Signed-off-by: Frederik Haxel <haxel@fzi.de>
Link: https://lore.kernel.org/r/20231212130116.848530-4-haxel@fzi.de
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
arch/riscv/Kconfig
arch/riscv/kernel/head.S

index 95a2a06acc6a62412894e491c3bfd5d4a161d15b..72bc31b6eeb95865e8a9a405c0fbe30834fa60ee 100644 (file)
@@ -904,13 +904,13 @@ config RISCV_ISA_FALLBACK
          on the replacement properties, "riscv,isa-base" and
          "riscv,isa-extensions".
 
-endmenu # "Boot options"
-
 config BUILTIN_DTB
-       bool
+       bool "Built-in device tree"
        depends on OF && NONPORTABLE
        default y if XIP_KERNEL
 
+endmenu # "Boot options"
+
 config PORTABLE
        bool
        default !NONPORTABLE
index a2e2f0dd3899af4a660fbd36f0bb54a157bfa4b5..a8939558702cb3c3a2ab9d407d9ef7a87e336c4c 100644 (file)
@@ -266,10 +266,12 @@ SYM_CODE_START(_start_kernel)
        la sp, _end + THREAD_SIZE
        XIP_FIXUP_OFFSET sp
        mv s0, a0
+       mv s1, a1
        call __copy_data
 
-       /* Restore a0 copy */
+       /* Restore a0 & a1 copy */
        mv a0, s0
+       mv a1, s1
 #endif
 
 #ifndef CONFIG_XIP_KERNEL