This issue is reproducible on both kernel 6.19.14 and 7.0.14. Reported also on Sky1-Linux/linux-sky1#33
Summary
There are two different issues depending on the boot method:
- ACPI boot
- CPU topology is detected correctly.
- CPU frequencies are reported correctly.
- L1, L2, and L3 cache information is missing from both lscpu and hwloc.
- Device Tree (DTB) boot
- L1, L2, and L3 cache information is exposed correctly.
- CPU frequency information becomes incorrect and shows bogus values.
It seems that neither boot method currently exposes all CPU topology information correctly.
Hardware
- Board: Orange Pi 6 Plus
- SoC: CIX Sky1 / CD8180 (CD8160 compatible branding)
- CPU: 8x Cortex-A720 + 4x Cortex-A520
- Firmware: SystemReady ACPI firmware
- Kernel: 6.19.14
Expected CPU frequencies
According to the board specifications, the CPU frequencies should be approximately:
- Cortex-A720 cluster: up to 2.6 GHz
- Cortex-A520 cluster: up to 1.8 GHz
These frequencies are reported correctly when booting with ACPI
Problem 1: ACPI mode
lscpu and hwloc do not report cache hierarchy information.
Expected:
- L1d cache
- L1i cache
- L2 cache
- L3 cache
Actual:
Cache information is missing entirely.
This also affects tools such as hwloc-ls and lstopo, which cannot build the proper cache topology.
Problem 2: Device Tree mode
When booting using a DTB file, cache information becomes available and is reported correctly.
However, CPU frequencies become incorrect and show unrealistic values.
Example:
Expected:
- Cortex-A720: 2.6 GHz
- Cortex-A520: 1.8 GHz
Actual:
- Cortex-A720: 1.5 GHz
- Cortex-A520: 1.8 GHz
Reproduction
ACPI boot
lscpu
lstopo
hwloc-info
Device Tree boot
lscpu
lstopo
hwloc-info
Question
It looks like the cache hierarchy information exists in the Device Tree but is not exposed properly through ACPI, while the CPU frequency information behaves in the opposite way.
Could this be caused by:
- incomplete PPTT (Processor Properties Topology Table) information in ACPI?
- missing cache nodes in the ACPI tables?
- incorrect OPP or cpufreq information in the Device Tree?
- missing cache descriptors in firmware?
In short, the cache topology information exposed by the kernel appears to be broken. The /sys/devices/system/cpu/cpu*/cache/ hierarchy does not provide any size values, which causes tools such as hwloc to report all caches as 0KB. Additionally, the reported sharing information is incorrect, as L1 data, L1 instruction and L2 caches are shown as being shared by all 12 CPUs (0-11), which is architecturally impossible for this SoC. This strongly suggests a problem in the ACPI PPTT tables or in the kernel’s cache topology parsing for the CIX platform, rather than an issue in hwloc itself. Same issue on kernel 7.0.14. Look:
The issue is reproducible on both 6.19.14 and 7.0.14 and does not appear to be a regression in a specific kernel version.
opi6plus ~ # for c in /sys/devices/system/cpu/cpu0/cache/index*; do
echo "===== $c ====="
cat "$c/level" "$c/type" "$c/size" "$c/shared_cpu_list" 2>/dev/null
done
===== /sys/devices/system/cpu/cpu0/cache/index0 =====
1
Data
0-11
===== /sys/devices/system/cpu/cpu0/cache/index1 =====
1
Instruction
0-11
===== /sys/devices/system/cpu/cpu0/cache/index2 =====
2
Unified
0-11
===== /sys/devices/system/cpu/cpu0/cache/index3 =====
3
Unified
0-1,6-11
opi6plus ~ # for cpu in /sys/devices/system/cpu/cpu*/cache/index*; do
printf '%s: ' "$cpu"
cat "$cpu/level" "$cpu/type" "$cpu/size" "$cpu/shared_cpu_list" 2>/dev/null | paste -sd ' '
done
/sys/devices/system/cpu/cpu0/cache/index0: 1 Data 0-11
/sys/devices/system/cpu/cpu0/cache/index1: 1 Instruction 0-11
/sys/devices/system/cpu/cpu0/cache/index2: 2 Unified 0-11
/sys/devices/system/cpu/cpu0/cache/index3: 3 Unified 0-1,6-11
/sys/devices/system/cpu/cpu10/cache/index0: 1 Data 0-11
/sys/devices/system/cpu/cpu10/cache/index1: 1 Instruction 0-11
/sys/devices/system/cpu/cpu10/cache/index2: 2 Unified 0-11
/sys/devices/system/cpu/cpu10/cache/index3: 3 Unified 0-1,6-11
/sys/devices/system/cpu/cpu11/cache/index0: 1 Data 0-11
/sys/devices/system/cpu/cpu11/cache/index1: 1 Instruction 0-11
/sys/devices/system/cpu/cpu11/cache/index2: 2 Unified 0-11
/sys/devices/system/cpu/cpu11/cache/index3: 3 Unified 0-1,6-11
/sys/devices/system/cpu/cpu1/cache/index0: 1 Data 0-11
/sys/devices/system/cpu/cpu1/cache/index1: 1 Instruction 0-11
/sys/devices/system/cpu/cpu1/cache/index2: 2 Unified 0-11
/sys/devices/system/cpu/cpu1/cache/index3: 3 Unified 0-1,6-11
/sys/devices/system/cpu/cpu2/cache/index0: 1 Data 0-11
/sys/devices/system/cpu/cpu2/cache/index1: 1 Instruction 0-11
/sys/devices/system/cpu/cpu2/cache/index2: 2 Unified 0-11
/sys/devices/system/cpu/cpu3/cache/index0: 1 Data 0-11
/sys/devices/system/cpu/cpu3/cache/index1: 1 Instruction 0-11
/sys/devices/system/cpu/cpu3/cache/index2: 2 Unified 0-11
/sys/devices/system/cpu/cpu4/cache/index0: 1 Data 0-11
/sys/devices/system/cpu/cpu4/cache/index1: 1 Instruction 0-11
/sys/devices/system/cpu/cpu4/cache/index2: 2 Unified 0-11
/sys/devices/system/cpu/cpu5/cache/index0: 1 Data 0-11
/sys/devices/system/cpu/cpu5/cache/index1: 1 Instruction 0-11
/sys/devices/system/cpu/cpu5/cache/index2: 2 Unified 0-11
/sys/devices/system/cpu/cpu6/cache/index0: 1 Data 0-11
/sys/devices/system/cpu/cpu6/cache/index1: 1 Instruction 0-11
/sys/devices/system/cpu/cpu6/cache/index2: 2 Unified 0-11
/sys/devices/system/cpu/cpu6/cache/index3: 3 Unified 0-1,6-11
/sys/devices/system/cpu/cpu7/cache/index0: 1 Data 0-11
/sys/devices/system/cpu/cpu7/cache/index1: 1 Instruction 0-11
/sys/devices/system/cpu/cpu7/cache/index2: 2 Unified 0-11
/sys/devices/system/cpu/cpu7/cache/index3: 3 Unified 0-1,6-11
/sys/devices/system/cpu/cpu8/cache/index0: 1 Data 0-11
/sys/devices/system/cpu/cpu8/cache/index1: 1 Instruction 0-11
/sys/devices/system/cpu/cpu8/cache/index2: 2 Unified 0-11
/sys/devices/system/cpu/cpu8/cache/index3: 3 Unified 0-1,6-11
/sys/devices/system/cpu/cpu9/cache/index0: 1 Data 0-11
/sys/devices/system/cpu/cpu9/cache/index1: 1 Instruction 0-11
/sys/devices/system/cpu/cpu9/cache/index2: 2 Unified 0-11
/sys/devices/system/cpu/cpu9/cache/index3: 3 Unified 0-1,6-11
Kernel built from vanilla-sources using the latest cix-linux-main patchset plus PR #27 and PR #37.
opi6plus ~ # cat compile-kernel-cix-patches.sh
#!/bin/bash
### opi 6 plus
cd /usr/src ; rm -rf /usr/src/cix-linux-main ; git clone https://github.com/cixtech/cix-linux-main.git
cd /usr/src/linux
# bug on 7.0.14 and new patch - after commit 759efc0 - https://github.com/cixtech/cix-linux-main/pull/37
cd /usr/src/cix-linux-main/patches-7.0/
sed -i 's/if (IS_ERR(n_phandles))/if (n_phandles < 0)/' /usr/src/cix-linux-main/patches-7.0/0033-regulator-add-acpi-support.patch
rm 0061-DPTSW-24991-usb-fix-SError-during-poweroff-by-releas.patch
rm 0062-DPTSW-25423-usb-cdns3-sky1-disabled-IRQ-before-disab.patch
wget https://raw.githubusercontent.com/npmccallum/cix-linux-main/9ace918767af39e90d42d00e6ce22a2d770bfbd0/patches-7.0/0061-usb-cdns3-cdnsp-sky1-tear-down-host-on-shutdown.patch
# new patch on 7.0.14 - after commit 759efc0 - https://github.com/cixtech/cix-linux-main/pull/27
wget https://raw.githubusercontent.com/perlowja/cix-linux-main/ebf4c22a950cdc3e21f05cbf657e1b3309945360/patches-7.0/2005-uapi-armchina_aipu-update-structs-to-sdk-26q1-r2p1.patch
cd /usr/src/linux
for p in ../cix-linux-main/patches-7.0/*.patch; do patch -p1 < "$p"; done
cp /usr/src/cix-linux-main/config/config-7.0.defconfig .config
scripts/config --disable DRM_NOUVEAU
scripts/config --disable OCTEONTX2_PF
scripts/config --disable OCTEONTX2_VF
scripts/config --disable OCTEONTX2_AF
make olddefconfig
make -j"$(nproc)" Image
if [ "$?" -ne 0 ];then echo 'ERRO' ;exit 1 ;fi
make -j"$(nproc)" modules
if [ "$?" -ne 0 ];then echo 'ERRO' ;exit 1 ;fi
make -j"$(nproc)" dtbs
if [ "$?" -ne 0 ];then echo 'ERRO' ;exit 1 ;fi
cd /usr/src/linux
export NEW="$(make kernelrelease)"
cp /usr/src/linux/arch/arm64/boot/dts/cix/sky1-xcp.dtb /boot/efi/sky1-orangepi-6-plus-${NEW}.dtb
cp arch/arm64/boot/Image /boot/vmlinuz-${NEW}
cp arch/arm64/boot/Image /boot/efi/vmlinuz-${NEW}
cp System.map /boot/System.map-${NEW}
cp .config /boot/config-${NEW}
make modules_install
depmod -a "${NEW}"
ls /lib/modules/"${NEW}" >/dev/null || exit 1
dracut /boot/initramfs-${NEW}.img ${NEW}
cp /boot/initramfs-${NEW}.img /boot/efi/initramfs-${NEW}.img
cd
The problem appears to be split between firmware interfaces:
• ACPI mode provides correct CPU frequencies but exposes an incomplete or broken cache topology.
• Device Tree mode provides correct cache topology but exposes incorrect CPU frequency information.
At the moment there is no boot method that provides both pieces of information correctly.
This issue is reproducible on both kernel 6.19.14 and 7.0.14. Reported also on Sky1-Linux/linux-sky1#33
Summary
There are two different issues depending on the boot method:
It seems that neither boot method currently exposes all CPU topology information correctly.
Hardware
Expected CPU frequencies
According to the board specifications, the CPU frequencies should be approximately:
These frequencies are reported correctly when booting with ACPI
Problem 1: ACPI mode
lscpu and hwloc do not report cache hierarchy information.
Expected:
Actual:
Cache information is missing entirely.
This also affects tools such as hwloc-ls and lstopo, which cannot build the proper cache topology.
Problem 2: Device Tree mode
When booting using a DTB file, cache information becomes available and is reported correctly.
However, CPU frequencies become incorrect and show unrealistic values.
Example:
Expected:
Actual:
Reproduction
ACPI boot
lscpu
lstopo
hwloc-info
Device Tree boot
lscpu
lstopo
hwloc-info
Question
It looks like the cache hierarchy information exists in the Device Tree but is not exposed properly through ACPI, while the CPU frequency information behaves in the opposite way.
Could this be caused by:
In short, the cache topology information exposed by the kernel appears to be broken. The /sys/devices/system/cpu/cpu*/cache/ hierarchy does not provide any size values, which causes tools such as hwloc to report all caches as 0KB. Additionally, the reported sharing information is incorrect, as L1 data, L1 instruction and L2 caches are shown as being shared by all 12 CPUs (0-11), which is architecturally impossible for this SoC. This strongly suggests a problem in the ACPI PPTT tables or in the kernel’s cache topology parsing for the CIX platform, rather than an issue in hwloc itself. Same issue on kernel 7.0.14. Look:
The issue is reproducible on both 6.19.14 and 7.0.14 and does not appear to be a regression in a specific kernel version.
Kernel built from vanilla-sources using the latest cix-linux-main patchset plus PR #27 and PR #37.
The problem appears to be split between firmware interfaces:
• ACPI mode provides correct CPU frequencies but exposes an incomplete or broken cache topology.
• Device Tree mode provides correct cache topology but exposes incorrect CPU frequency information.
At the moment there is no boot method that provides both pieces of information correctly.