Hi Experts,
We are trying to port sel4 to Shakti FPGA. It is similar to Rocket FPGA. The memory footprint is 256 mb [0x80000000 - 0x8fffffff]. Shakti support -march=imafd. A single core 64 bit design.
The run in FPGA stops at "memcpy((char *)dest_vaddr + phys_virt_offset, (char *)elf + data_offset, data_size);" called in the function "unpack_elf_to_paddr()". Earlier it stopped just at the memset (one line above). I manually commented out memset part and made it to run till memcpy. So I doubt it has something to do with wrong memory access. can someone please explain me the above said function (blue color) ? what could be reasons for memcpy to hung ?
Can someone please guide me to the area in code where memory related interrupts are coded ?
We
have the latest upstream of SEL4 (Aug 10). It has the dornerworks
upstream changes. We are trying to load at 0x88000000. The image works
well in spike simulation.
../init-build.sh -DPLATFORM=spike -DKernelPlatformSpikeRocketChip=ON -DSIMULATION=FALSE -DRISCV64=TRUE
ninja
Snapshot of the run in FPGA:
DTB
{
#address-cells = <0x00000002>;
#size-cells = <0x00000002>;
compatible = "shakti,spike-bare-dev";
model = "shakti,spike-bare";
cpus {
#address-cells = <0x00000001>;
#size-cells = <0x00000000>;
timebase-frequency = <0x00989680>;
cpu@0 {
device_type = "cpu";
reg = <0x00000000>;
status = "okay";
compatible = "riscv";
riscv,isa = "rv64imafd";
mmu-type = "riscv,sv39";
clock-frequency = <0x3b9aca00>;
interrupt-controller {
#interrupt-cells = <0x00000001>;
interrupt-controller;
compatible = "riscv,cpu-intc";
linux,phandle = <0x00000001>;
phandle = <0x00000001>;
}
}
}
memory@80000000 {
device_type = "memory";
reg = <0x00000000 0x80000000 0x00000000 0x10000000>;
}
soc {
#address-cells = <0x00000002>;
#size-cells = <0x00000002>;
compatible = "shakti,spike-bare-soc", "simple-bus";
ranges;
}
uart {
compatible = "shakti,uart0";
reg = <0x00000000 0x00011200 0x00000000 0x00001000>;
}
htif {
compatible = "ucb,htif0";
}
}
ELF-loader started on
paddr=[80200000..8060e7d7]
elf check file returned 1
elf check file returned 1
ELF-loading image 'kernel'
paddr=[88000000..8802bfff]
vaddr=[ffffffff80000000..ffffffff8002bfff]
virt_entry=ffffffff80000000
configured page table levels = 3......
elf check file returned 1
image size 2b350
(char *)dest_vaddr + phys_virt_offset = ffffffff88000000
phys_virt_offset = 8000000
(char *)elf + data_offset, = ffffffff8020f854
started memcpy ------------------------------------------------------------> Hangs
--