はじめに
Raspberry Pi 5のアナウンスがありました。
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 用のLinuxのgithubを除いたら、dti ファイルありました。
中身を見たら、arm (32bit) のところになっています。そちらを見てみます。
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からは、
そして、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の設定を行っています。
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