10

I have two Raspberry Pi 4s, both running Raspbian. One of them I just purchased this year and the other 2019. On the older board, running Buster with kernel 5.10, my /proc/cpuinfo reads:

processor   : 0
model name  : ARMv7 Processor rev 3 (v7l)
BogoMIPS    : 144.00
Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part    : 0xd08
CPU revision    : 3

...snip

Hardware : BCM2711 Revision : c03112 Serial : ... Model : Raspberry Pi 4 Model B Rev 1.2

However, on the new RPi, running Bullseye / kernel 6.1, I see:

processor   : 0
BogoMIPS    : 108.00
Features    : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part    : 0xd08
CPU revision    : 3

...snip

Hardware : BCM2835 Revision : c03115 Serial : ... Model : Raspberry Pi 4 Model B Rev 1.5

So did the 1.5 revision of the board downgrade the processor? Or is kernel 6.1 not reporting CPU extensions like thumb and neon and so on?

A.L
  • 127
  • 6
mmisiewicz
  • 111
  • 1
  • 5
  • Hmph. I have a Pi 4 running bullseye, kernel 6.1.21-v8+, which gives the same erroneous output as the bottom one here except the model is Rev 1.2. By "erroneous" I mean that the BCM2835 was used in the original model 1 and Zero, the Pi 4 SoC is the BCM2711: https://www.raspberrypi.com/documentation/computers/processors.html – goldilocks Oct 15 '23 at 18:51
  • 4
    If you consider that the raspberry pi was created as a novelty trinket for UK children, this sort of decision to try and make cpuinfo look the same regardless of actual hardware should not be surprising at all. – Jaromanda X Oct 15 '23 at 22:31
  • Good catch (+1), but I don't think it means a thing. – Seamus Oct 16 '23 at 02:33
  • 8
    It wasn't created for "slow" UK children, it was created because even the UK's top Universities was struggling to get good students for it's Computer Science Degrees and they blamed this on the microcomputers of the 80s that booted up in Basic giving way to a world of Windows, GUIs and computers that were Locked down by IT departments and/or considered too precious by thier owners for kids to tinker with. – Peter Green Oct 16 '23 at 21:01
  • 1
    @JaromandaX You have it completely backwards. Children don't care about what cpuinfo says, they just run their simplified programming environment. Embedded systems developers need the details to remain the same, since it costs them significant time and money to modify and re-qualify software. – user71659 Oct 17 '23 at 20:15

3 Answers3

31

The difference is that one Pi is running a 32-bit kernel, and the other is running a 64-bit kernel.

We can see this from the "Architecture:" numbers in the /proc/cpuinfo, 32-bit arm kernels never report a number higher than 7 in that field, while 64-bit arm kernels always report a value of at least 8.

32-bit arm and 64-bit arm are considered different architectures by the kernel developers and have their own separate lists of features. The features in /proc/cpuinfo always reflect the kernel's main architecture. The list for 64-bit mode is much shorter than that for 32-bit mode because 64-bit mode is much newer and has much less history.

Going through the differences in detail:

  1. There is only a single entry for floating point ("fp") on 64-bit arm, verses four entries representing different floating point features ("vfp","vfp3","vfp4","vfpd32") on 32-bit arm.
  2. "thumb" and "dsp" represent 32-bit arm features that don't exist in 64-bit mode.
  3. The simd/vector support was renamed from "neon" to "asimd".
  4. fastmult, it seems difficult to find a good definition of this, often described as fast multiply but I found an old post on linux-arm-kernel which claims it referred to processors that supported multiply long. Either way, it's not relevant to 64-bit mode.
  5. "tls", support for thread local storage. It appears to be part of the baseline on 64-bit arm.
  6. "idiva", "idivt", division is part of the baseline on aarch64
  7. "lpae", support for physical addresses larger than 32-bit, irrelevent in 64-bit mode.

The content of the CPU field is also rather a mess. Some kernels report BCM2835 for the whole family of chips used by Raspberry Pi. Others report more specific version numbers.

Note that running a 64-bit kernel does not imply running a 64-bit userland. It is perfectly possible to run a 32-bit userland with a 64-bit kernel. This is what recent "Raspberry Pi OS 32-bit" builds do by default on the Pi 4 and is the only way to run a 32-bit userland on a Pi 5.

Peter Green
  • 6,476
  • 1
  • 19
  • 24
  • 1
    Some ARMv8 CPUs (including this one as you say) support AArch32 (32-bit) state for running 32-bit code under a 64-bit kernel, backwards compatible with ARMv7. Architectural features like neon, thumb, and idiva are still supported, most of them baseline for ARMv8 in 32-bit mode if that's supported at all, not just 64-bit AArch64 mode. So correct me if I'm wrong, but the architecture version number being 8 is a different way of indicating support for features that 32-bit code might want to check for, either for dynamic dispatch or for gcc -march=native or -mcpu=native. – Peter Cordes Oct 18 '23 at 23:15
  • Thank you very much for the thorough explanation! – mmisiewicz Nov 29 '23 at 21:45
4

If you want to compare hardware you should run the same software.

Most of the "differences" are due to the different OS; 1 running 32 bit the other 64 bit. AFAIK most of these are meaningless on a 64 bit cpu

NOTE you are NOT running "raspbian" the newer Pi is running Raspberry Pi OS Bookworm 64 bit (which is and identifies itself as Debian) and the other probably some version of Raspberry Pi OS.

See lsb_release -irdc


Many of the later Pi are running the same CPU; what they report is the package which may include multiple chips. https://en.wikipedia.org/wiki/Raspberry_Pi shows packages used by different models.

You should use the Revision Code to identify models.

Milliways
  • 59,890
  • 31
  • 101
  • 209
  • Thanks, I missed the 32/64 bit difference. Both pis are running software flashed from raspberrypi.org originally. – mmisiewicz Nov 29 '23 at 21:47
2

There's a kind of explanation here (a bug report from the GitHub raspberrypi/linux repository), it is a bit confusing with reference to which kernel versions do that, but the second last post before it was deemed "closed" is:

The take-aways are:

  • A 5.4 (or later) kernel built from our tree will report BCM2711 in an AArch32 build.
  • Everything else reports BCM2835.

Which is consistent with what's reported in the question and comments (since kernel 5.10 is > 5.4 and the "ARMv7" there implies a 32-bit build). In any case, it sounds like it is just reporting issue and those in charge did not seem very concerned about it.

goldilocks
  • 58,859
  • 17
  • 112
  • 227