Hi Sathya,
You need to debug on your HW what's happening inside memcpy i.e. are
you getting an exception? if yes, what's its cause and the address?
Exceptions in the elfloader will trap to riscv-pk, so you can catch
and print debug info there.
Just a note, when you're printing pointers, use %p instead of %x. If
you use %p and you still get an address of 0xffffffff88000000, that
would be wrong as it's not a valid physical address.
P.S. make sure elfloader/riscv-pk are not compiled with the C
extension. objdump memcpy from elfloader to assert it's not using any
On Tue, Aug 14, 2018 at 1:15 PM, Sathya Narayanan N <sathya281(a)gmail.com> wrote:
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.
Commands to build:
../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
--
regards,
Sathya
_______________________________________________
Devel mailing list
Devel(a)sel4.systems
https://sel4.systems/lists/listinfo/devel
--
Hesham