On 10/9/2023 11:14 AM, Wu, Fei wrote: > On 9/27/2023 11:23 PM, Vladimir 'phcoder' Serbinenko wrote: >> That is not the correct solution. Correct solution is to use trampoline >> facility like e.g. ppc does. Can you post the full reproduction >> instructions? >> Hi Vladimir,
Could you please explain a little more about why this is not good, and how does the trampoline address that? IIUC, x86_64 sets GRUB_EFI_MAX_USABLE_ADDRESS to 0xffffffff for the same reason. Thanks, Fei. > 1. prepare the host for pcie passthrough, e.g. on ubuntu, put something > like the following to kernel cmd, the pci ids are the pci devices to > passthrough: > intel_iommu=on iommu=pt vfio-pci.ids=10de:0f02,10de:0e08 > > 2. apply the patch mentioned below to qemu commit ccb86f079a9e4 > 3. run qemu as follows: > > qemu-system-riscv64 > -nographic \ > -M virt,pflash0=pflash0,pflash1=pflash1,acpi=off \ > -m 3G -smp 2 \ > -blockdev > node-name=pflash0,driver=file,read-only=on,filename=RISCV_VIRT_CODE.fd \ > -blockdev node-name=pflash1,driver=file,filename=RISCV_VIRT_VARS.fd \ > -device vfio-pci,host=01:00.0 -device vfio-pci,host=01:00.1 \ > -device virtio-blk-device,drive=hd0 \ > -drive file=fat:rw:/home/wufei/src/fat,id=hd0 > > 4. build and put grub.efi to the directory 'fat' > 5. on uefi shell, run grub.efi > > Thanks, > Fei. > >> Le lun. 25 sept. 2023, 10:53, Wu, Fei <fei2...@intel.com >> <mailto:fei2...@intel.com>> a écrit : >> >> Hi All, >> >> I'm enabling PCIe passthrough on qemu riscv, the physical memory >> range between 3GB and 4GB is reserved. Therefore if guest has 4GB ram, >> two ranges are created as [2G, 3G) and [4G, 7G). More details can be >> found here: >> >> https://lore.kernel.org/all/cakmqykmtazt5sacumd4vxyfgaqibpzqjahttsusb+yekhcy...@mail.gmail.com/T/ >> >> <https://lore.kernel.org/all/cakmqykmtazt5sacumd4vxyfgaqibpzqjahttsusb+yekhcy...@mail.gmail.com/T/> >> >> When run grub.efi from uefi shell, a relocation problem happened in >> grub_arch_dl_relocate_symbols() of grub-core/kern/riscv/dl.c: >> >> case R_RISCV_CALL: >> case R_RISCV_CALL_PLT: >> { >> grub_uint32_t *abs_place = place; >> grub_ssize_t off = sym_addr - (grub_addr_t) place; >> grub_uint32_t hi20, lo12; >> >> if (off != (grub_int32_t) off) >> return grub_error (GRUB_ERR_BAD_MODULE, "relocation >> overflow"); >> >> It requires `off' in the range of int32, but it's not enforced since the >> >4GB memory can be used. I'm not familiar with grub, but this patch does >> work for me: >> >> --- a/include/grub/riscv64/efi/memory.h >> +++ b/include/grub/riscv64/efi/memory.h >> @@ -1,6 +1,6 @@ >> #ifndef GRUB_MEMORY_CPU_HEADER >> #include <grub/efi/memory.h> >> >> -#define GRUB_EFI_MAX_USABLE_ADDRESS 0xffffffffffffULL >> +#define GRUB_EFI_MAX_USABLE_ADDRESS 0xffffffffULL >> >> Any comments? >> >> Thanks, >> Fei. >> >> _______________________________________________ >> Grub-devel mailing list >> Grub-devel@gnu.org <mailto:Grub-devel@gnu.org> >> https://lists.gnu.org/mailman/listinfo/grub-devel >> <https://lists.gnu.org/mailman/listinfo/grub-devel> >> >> >> _______________________________________________ >> Grub-devel mailing list >> Grub-devel@gnu.org >> https://lists.gnu.org/mailman/listinfo/grub-devel > _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel