I am working with the ariane-sdk on the Xilinx KC705 FPGA platform.
I am trying to integrate custom hardware peripherals into the existing OpenPiton+Ariane setup. To enable the Linux kernel to recognize these new devices, I need to use a custom Device Tree Blob (DTB).
Current Behavior
When I boot the system, the Linux kernel appears to be receiving hardware configuration information dynamically, possibly derived from registers or a simple/default DTS embedded (RTL generated DTS) in the boot ROM/BBL (Boot Loader), rather than using a fixed, customized Device Tree.
**BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="ariane-v0.7"
BR2_LINUX_KERNEL_PATCH="../configs/0099-Piton-SD-Driver.patch"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_DTS_SUPPORT=y
BR2_LINUX_KERNEL_INTREE_DTS_NAME=""
BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="/home/calligo/ariane-sdk/rv64_platform.dts"
cd build && ../riscv-pk/configure --host=riscv64-unknown-elf CC=riscv64-unknown-linux-gnu-gcc OBJDUMP=riscv64-unknown-linux-gnu-objdump --with-payload=vmlinux --with-dts=--with-dts=$(DTS_FILE) --enable-logo --with-logo=../configs/logo.txt**
I made above configuration changes in sdk , DTS is compiling also added the dts flag in Makefile.
It should bring and detect 2 CPU cores as it enabled from FPGA but its taking only one core log is below also added in custom DTS also.
BOOT log:
copying block 65500 of 65536 blocks (99 %)
done!
bbl loader
[ 0.000000] OF: fdt: Ignoring memory range 0x80000000 - 0x80200000
[ 0.000000] Linux version 5.1.0-rc7 (calligo@8f3e8cf4937c) (gcc version 8.2.0 (GCC)) #16 SMP Mon Dec 15 12:06:37 IST 2025
[ 0.000000] initrd not found or empty - disabling initrd
[ 0.000000] Zone ranges:
[ 0.000000] DMA32 [mem 0x0000000080200000-0x00000000bfffffff]
[ 0.000000] Normal empty
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000080200000-0x00000000bfffffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000080200000-0x00000000bfffffff]
[ 0.000000] software IO TLB: mapped [mem 0xbb1fe000-0xbf1fe000] (64MB)
[ 0.000000] elf_hwcap is 0x112d
[ 0.000000] percpu: Embedded 15 pages/cpu s24280 r8192 d28968 u61440
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 258055
[ 0.000000] Kernel command line: earlyprintk
[ 0.000000] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes)
[ 0.000000] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes)
[ 0.000000] Sorting __ex_table...
[ 0.000000] Memory: 952128K/1046528K available (3710K kernel code, 229K rwdata, 1046K rodata, 6731K init, 797K bss, 94400K reserved, 0K cma-reserved)
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] rcu: Hierarchical RCU implementation.
[ 0.000000] rcu: RCU event tracing is enabled.
[ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=1.
[ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
[ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[ 0.000000] NR_IRQS: 0, nr_irqs: 0, preallocated irqs: 0
[ 0.000000] plic: mapped 1 interrupts with 1 handlers for 2 contexts.
[ 0.000000] riscv_timer_init_dt: Registering clocksource cpuid [0] hartid [0]
[ 0.000000] clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x171024e6b, max_idle_ns: 7052723236830 ns
[ 0.000186] sched_clock: 64 bits at 390kHz, resolution 2560ns, wraps every 8796093021440ns
[ 0.189278] printk: console [hvc0] enabled
[ 0.194160] Calibrating delay loop (skipped), value calculated using timer frequency.. 0.78 BogoMIPS (lpj=3906)
[ 0.204787] pid_max: default: 32768 minimum: 301
[ 0.215621] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes)
[ 0.223344] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes)
[ 0.247441] *** VALIDATE proc ***
[ 0.280555] rcu: Hierarchical SRCU implementation.
[ 0.300615] smp: Bringing up secondary CPUs ...
[ 0.305346] smp: Brought up 1 node, 1 CPU
[ 0.323430] devtmpfs: initialized
[ 0.350233] random: get_random_bytes called from setup_net+0x32/0x15c with crng_init=0
[ 0.363120] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[ 0.373890] futex hash table entries: 256 (order: 2, 16384 bytes)
[ 0.393597] NET: Registered protocol family 16
[ 0.581496] usbcore: registered new interface driver usbfs
[ 0.589084] usbcore: registered new interface driver hub
[ 0.595898] usbcore: registered new device driver usb
[ 0.623155] clocksource: Switched to clocksource riscv_clocksource
[ 0.665743] NET: Registered protocol family 2
[ 0.690677] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes)
[ 0.700344] TCP established hash table entries: 8192 (order: 4, 65536 bytes)
[ 0.711165] TCP bind hash table entries: 8192 (order: 5, 131072 bytes)
Any pointers to the relevant Makefile, source file, or configuration variable would be greatly appreciated. Thank you!
I am working with the ariane-sdk on the Xilinx KC705 FPGA platform.
I am trying to integrate custom hardware peripherals into the existing OpenPiton+Ariane setup. To enable the Linux kernel to recognize these new devices, I need to use a custom Device Tree Blob (DTB).
Current Behavior
When I boot the system, the Linux kernel appears to be receiving hardware configuration information dynamically, possibly derived from registers or a simple/default DTS embedded (RTL generated DTS) in the boot ROM/BBL (Boot Loader), rather than using a fixed, customized Device Tree.
**BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="ariane-v0.7"
BR2_LINUX_KERNEL_PATCH="../configs/0099-Piton-SD-Driver.patch"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_DTS_SUPPORT=y
BR2_LINUX_KERNEL_INTREE_DTS_NAME=""
BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="/home/calligo/ariane-sdk/rv64_platform.dts"
cd build && ../riscv-pk/configure --host=riscv64-unknown-elf CC=riscv64-unknown-linux-gnu-gcc OBJDUMP=riscv64-unknown-linux-gnu-objdump --with-payload=vmlinux --with-dts=--with-dts=$(DTS_FILE) --enable-logo --with-logo=../configs/logo.txt**
I made above configuration changes in sdk , DTS is compiling also added the dts flag in Makefile.
It should bring and detect 2 CPU cores as it enabled from FPGA but its taking only one core log is below also added in custom DTS also.
BOOT log:
copying block 65500 of 65536 blocks (99 %)
done!
bbl loader
[ 0.000000] OF: fdt: Ignoring memory range 0x80000000 - 0x80200000
[ 0.000000] Linux version 5.1.0-rc7 (calligo@8f3e8cf4937c) (gcc version 8.2.0 (GCC)) #16 SMP Mon Dec 15 12:06:37 IST 2025
[ 0.000000] initrd not found or empty - disabling initrd
[ 0.000000] Zone ranges:
[ 0.000000] DMA32 [mem 0x0000000080200000-0x00000000bfffffff]
[ 0.000000] Normal empty
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000080200000-0x00000000bfffffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000080200000-0x00000000bfffffff]
[ 0.000000] software IO TLB: mapped [mem 0xbb1fe000-0xbf1fe000] (64MB)
[ 0.000000] elf_hwcap is 0x112d
[ 0.000000] percpu: Embedded 15 pages/cpu s24280 r8192 d28968 u61440
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 258055
[ 0.000000] Kernel command line: earlyprintk
[ 0.000000] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes)
[ 0.000000] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes)
[ 0.000000] Sorting __ex_table...
[ 0.000000] Memory: 952128K/1046528K available (3710K kernel code, 229K rwdata, 1046K rodata, 6731K init, 797K bss, 94400K reserved, 0K cma-reserved)
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] rcu: Hierarchical RCU implementation.
[ 0.000000] rcu: RCU event tracing is enabled.
[ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=1.
[ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
[ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[ 0.000000] NR_IRQS: 0, nr_irqs: 0, preallocated irqs: 0
[ 0.000000] plic: mapped 1 interrupts with 1 handlers for 2 contexts.
[ 0.000000] riscv_timer_init_dt: Registering clocksource cpuid [0] hartid [0]
[ 0.000000] clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x171024e6b, max_idle_ns: 7052723236830 ns
[ 0.000186] sched_clock: 64 bits at 390kHz, resolution 2560ns, wraps every 8796093021440ns
[ 0.189278] printk: console [hvc0] enabled
[ 0.194160] Calibrating delay loop (skipped), value calculated using timer frequency.. 0.78 BogoMIPS (lpj=3906)
[ 0.204787] pid_max: default: 32768 minimum: 301
[ 0.215621] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes)
[ 0.223344] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes)
[ 0.247441] *** VALIDATE proc ***
[ 0.280555] rcu: Hierarchical SRCU implementation.
[ 0.300615] smp: Bringing up secondary CPUs ...
[ 0.305346] smp: Brought up 1 node, 1 CPU
[ 0.323430] devtmpfs: initialized
[ 0.350233] random: get_random_bytes called from setup_net+0x32/0x15c with crng_init=0
[ 0.363120] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[ 0.373890] futex hash table entries: 256 (order: 2, 16384 bytes)
[ 0.393597] NET: Registered protocol family 16
[ 0.581496] usbcore: registered new interface driver usbfs
[ 0.589084] usbcore: registered new interface driver hub
[ 0.595898] usbcore: registered new device driver usb
[ 0.623155] clocksource: Switched to clocksource riscv_clocksource
[ 0.665743] NET: Registered protocol family 2
[ 0.690677] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes)
[ 0.700344] TCP established hash table entries: 8192 (order: 4, 65536 bytes)
[ 0.711165] TCP bind hash table entries: 8192 (order: 5, 131072 bytes)
Any pointers to the relevant Makefile, source file, or configuration variable would be greatly appreciated. Thank you!