Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

Raspberry Pi 5 の SoC は、Broadcom BCM2712

はじめに

Raspberry Pi 5のアナウンスがありました。

www.raspberrypi.com

Boardcom BCM2712

Boardcom BCM2712 (16nm)、Raspberry Pi 4 の BCM2711 は 28nm

  • Cortex-A76 x 4@2.4GHz : Cortex-A72@1.5GHzから動作周波数は50%程度アップ!
  • Cache : L2 512KB x 4 Cores, L3 2MB
  • VideoCore VII
  • Dual 4K@60 HDMI
  • 4Kp60 HEVC decoder
  • Dual-band 802.11ac Wifi
  • Bluetooth 5.0 / BLE

  • PCIe Gen 2.0 x1 (拡張ポート)

  • PCIe Gen 2.0 x4でRP1と接続

RP1 なる I/O Controller も搭載

  • 2 x USB 3.0 ports
  • 2 x USB 2.0 ports
  • Giga Ethernet
  • two four-lane MIPI
  • GPIO (3.3V)
    • UART, SPI, I2C, I2S, PWM
  • 4 lane PCIe Gen2 (BCM2712 との接続にも使用)

PMIC (Renesa DA9091) も搭載。Renesaというより dialog DA9051

Linux

Rapberry Pi 用のLinuxgithubを除いたら、dti ファイルありました。

github.com

中身を見たら、arm (32bit) のところになっています。そちらを見てみます。

github.com

2712での新規の部分

  • brcm,bcm2712-hdmi0
  • brcm,bcm2712-hdmi1
  • brcm,bcm2712-vc6
  • brcm,bcm2712-iommu
  • brcm,bcm2712-dma
  • brcm,bcm2712-pcie
  • brcm,bcm2712-mip-intc
  • brcm,bcm2712-sdhci (SDIOは2個、eMMCは、brcm,bcm2711-emmc2")
  • brcm,2712-v3d

PCIe

BCM27012 の PCIe は、Gen3っぽい。

brcm,bcm2712-pcie

  • x1
  • x1
  • x4

RP1

RP1の部分、PCIe で繋がっています。

rp1_target: &pcie2 {
    brcm,vdm-qos-map = <0xbbaa9888>;
    aspm-no-l0s;
    status = "okay";
};

DMAとEthernetが接続しているようですね。

&rp1 {
    // PCIe address space layout:
    // 00_00000000-00_00xxxxxx = RP1 peripherals
    // 10_00000000-1x_xxxxxxxx = up to 64GB system RAM

    // outbound access aimed at PCIe 0_00xxxxxx -> RP1 c0_40xxxxxx
    // This is the RP1 peripheral space
    ranges = <0xc0 0x40000000
          0x02000000 0x00 0x00000000
          0x00 0x00400000>;

    dma-ranges =
    // inbound RP1 1x_xxxxxxxx -> PCIe 1x_xxxxxxxx
             <0x10 0x00000000
              0x43000000 0x10 0x00000000
              0x10 0x00000000>,

    // inbound RP1 c0_40xxxxxx -> PCIe 00_00xxxxxx
    // This allows the RP1 DMA controller to address RP1 hardware
             <0xc0 0x40000000
              0x02000000 0x0 0x00000000
              0x0 0x00400000>,

    // inbound RP1 0x_xxxxxxxx -> PCIe 1x_xxxxxxxx
             <0x00 0x00000000
              0x02000000 0x10 0x00000000
              0x10 0x00000000>;
};

&rp1_dma  {
    status = "okay";
};

&rp1_eth {
    status = "okay";
    phy-handle = <&phy1>;
    phy-reset-gpios = <&rp1_gpio 32 GPIO_ACTIVE_LOW>;
    phy-reset-duration = <5>;

    phy1: ethernet-phy@1 {
        reg = <0x1>;
        brcm,powerdown-enable;
    };
}

USBも繋がっています。

&rp1_usb0 {
    pinctrl-0 = <&usb_vbus_pins>;
    pinctrl-names = "default";
    status = "okay";
};

&rp1_usb1 {
    status = "okay";
};

別のファイルがあります。

#include "bcm2712-rpi.dtsi"

pcie2 は、x4 ですね。ということは、BCM2712 と RP1 は、PCIe Gen2 x4 で繋がっているようですね。

pciex1: &pcie1 { };
pciex4: &pcie2 { };

RP1からは、

  • UART
  • SPI
  • I2S
  • I2C
  • PWM
  • GPIO
  • USB (0/1)
  • Ethernet
  • ADC
  • CSI
  • DSI
  • MMC
  • VEC
  • DPI

そして、RP1は、BCM2835 と同じCPUコアが入っている!

&soc {
    firmware: firmware {
        compatible = "raspberrypi,bcm2835-firmware", "simple-mfd";
        #address-cells = <1>;
        #size-cells = <1>;

        mboxes = <&mailbox>;
        dma-ranges;

        firmware_clocks: clocks {
            compatible = "raspberrypi,firmware-clocks";
            #clock-cells = <1>;
        };

        reset: reset {
            compatible = "raspberrypi,firmware-reset";
            #reset-cells = <1>;
        };

        vcio: vcio {
            compatible = "raspberrypi,vcio";
        };
    };

    power: power {
        compatible = "raspberrypi,bcm2835-power";
        firmware = <&firmware>;
        #power-domain-cells = <1>;
    };

Rasberry Piのドキュメントを覗いてみたら、Raspberry Pi 1 Models A, A+, B, B+, the Raspberry Pi Zero, the Raspberry Pi Zero W, and the Raspberry Pi Compute Module 1のSoCと同じで、ARM1176JZF-Sということになりますね。

下記の rp1.dtsi では、RP1の各I/Oの設定を行っています。

github.com

16K Page

bcm2712_defconfig を覗いてみたら、

CONFIG_ARM64_16K_PAGES=y

とありました。Raspberry Pi 5 は、Page Size は 16KB のようです。Appleは Page Size = 16KB ですね。Android も 16KB をサポートするかもしれないようなので、やっと、x86 の 4KB の呪縛から逃れられるんでしょうかね。

おわりに

下記のPC Watchの記事によると、A76って 7nm ターゲットなんですよね。BCM2712 は 16nm なので、Raspberry Pi 5用に開発しているんですかね。

追記)、2023.10.02

www.raspberrypi.com