Raspberry Pi 4

From OSDev.wiki
Jump to navigation Jump to search

Raspberry Pi 4

Hardware

CPU is a BCM2711, containing 4 Cortex-A72 cores. In Linux they appear as

   processor	: 0
   model name	: ARMv7 Processor rev 3 (v7l)
   BogoMIPS	: 108.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

The graphics is done with a Video Core VI. This is backwards-compatible with Video Core IV from Broadcom.

Device memory map

Taken from Linux /proc/iomem as root


   00000000-3b3fffff : System RAM
   fd500000-fd50930f : pcie@7d500000
   fd580000-fd58ffff : genet@7d580000
     fd580e14-fd580e1c : unimac-mdio.-19
   fd5d2200-fd5d222b : thermal@7d5d2200
   fe007000-fe007aff : dma@7e007000
   fe007b00-fe007eff : dma@7e007b00
   fe00a000-fe00a023 : watchdog@7e100000
   fe00b200-fe00b3ff : dwc_otg
   fe00b840-fe00b87b : mailbox@7e00b840
   fe00b880-fe00b8bf : mailbox@7e00b880
   fe100000-fe100113 : watchdog@7e100000
   fe101000-fe102fff : cprman@7e101000
   fe104000-fe10400f : rng@7e104000
   fe200000-fe2000b3 : gpio@7e200000
   fe201000-fe2011ff : serial@7e201000
     fe201000-fe2011ff : serial@7e201000
   fe215000-fe215007 : aux@7e215000
   fe300000-fe3000ff : mmcnr@7e300000
   fe340000-fe3400ff : emmc2@7e340000
   fe600000-fe6000ff : firmwarekms@7e600000
   fe980000-fe98ffff : dwc_otg
   fec00000-fec03fff : hub
   fec04000-fec07fff : core0
   fec11000-fec1101f : watchdog@7e100000
   600000000-603ffffff : pcie@7d500000
     600000000-6000fffff : PCI Bus 0000:01
       600000000-600000fff : 0000:01:00.0
         600000000-600000fff : xhci-hcd

Devices as found by Linux, with addresses and Linux driver name

   fd500000.pcie    brcm-pcie
   fd580000.genet    bcmgenet
   fd5d2200.thermal    brcmstb_thermal
   fe007000.dma    bcm2835-dma
   fe007b00.dma    bcm2835-dma
   fe00b840.mailbox    bcm2835_vchiq
   fe00b880.mailbox    bcm2835-mbox
   fe100000.watchdog    bcm2835-pm
   fe101000.cprman    bcm2835-clk
   fe104000.rng    iproc-rng200
   fe200000.gpio    pinctrl-bcm2835
   fe200000.gpiomem    gpiomem-bcm2835
   fe201000.serial    uart-pl011
   fe215000.aux    bcm2835-aux-clk
   fe300000.mmcnr    mmc-bcm2835
   fe340000.emmc2    sdhci-iproc
   fe600000.firmwarekms    vc4_firmware_kms
   fe980000.usb    dwc_otg
   feb00000.hevc-decoder    argon-mem
   feb10000.argon-local-intc    argon-mem
   feb20000.h264-decoder    argon-mem
   feb30000.vp9-decoder    argon-mem

Still to write into text

- Standard XHCI USB controller, in addition to the embedded IP block that was in the Pi 1-3. The USB-A connectors are run by the XHCI block now, while the charging port is on the IP block. Previously they were all on the IP block.

- Network devices have a mac address mapping to https://maclookup.app/macaddress/DCA632 - the raspberry pi foundation's own block. Not attached to pci-e, somehow magically part of SoC.

- WLAN controller is connected to mmc0 using SDIO.

- SD controller is now a SDHCI thing. Should work according to spec.

CPU is similar to the one in the Rpi3, except with the A53 cores replaced in-situ with A72. Same startup logic, same usage. Also limited to max 4 cores per chip by design.

GPIOs are similar, but have more options: https://elinux.org/RPi_BCM2711_GPIOs