はじめに
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