判断一颗新芯片能不能用,先看主线。
先探主线
做法很土:对 torvalds/linux 各个 tag 请求 dts 的 raw 文件,看状态码。请求长这样:
raw.githubusercontent.com/torvalds/linux/v6.14/ arch/arm/boot/dts/microchip/sama7d65.dtsi
【02_01_版本探测】
v6.12、v6.13 都是 404,v6.14 开始 200。
这里有个坑。我特意把新旧两条路径都探了。内核在 v6.13 前后把 arch/arm/boot/dts/ 下的厂商目录重组,旧路径是 dts/at91-sama7d65_curiosity.dts,新路径多了 microchip/ 一级。只探旧路径,v6.14 也会 404,结论就错成"到现在都没支持"。
所以确定:SAMA7D65 于 v6.14 进入主线。
上游化没问题,完成度有问题
提交者 Ryan Wanner(Microchip),2024-12-20 发出 PATCH v4 00/13,13 个补丁。
【02_03_上游化历程】
v1 到 v4 改了四轮,改的不是功能是流程:补丁排序、DT binding 规范化、SoB 标签、Kconfig 拆分。这批补丁到 v6.14 才落地,跨了小半年。走的是正常上游化流程,这点值得肯定。
但流程归流程,完成度是另一回事。
【02_02_体量差距】
厂商 BSP 的 sama7d65.dtsi 1256 行、102 个 compatible,其中 75 个是外设节点。主线那份 144 行、11 个节点。
差七倍。差的内容更要命:双千兆 TSN、5 路 CAN-FD、3 路 USB、XLCDC/MIPI-DSI/LVDS 显示三件套,这些是卖点,主线里一个都没有。
主线里有什么?串口、SDHCI、几个基础时钟。8 个专属 compatible:sama7d65、-flexcom、-pinctrl、-pit64b、-pmc、-sckc、-sdhci、-usart,加 6 个复用自 sama7g5/sam9x60 的。全是基础件。
所以"主线支持"要拆开看:框架支持了,外设没跟上。
上游还有个尾巴:pinctrl 和 pit64b timers 的 binding 还没转 YAML,编 DTB 会报警告。代码合并和文档收尾是两个节奏。
现阶段用主线跑这颗芯片,等于把 BSP 那 1256 行搬过来再逐个验证。搬得动,但某个 IP 在这颗 SoC 上改了时序的部分,得自己啃。所以官方 BSP 仍是唯一可用路径。
转看 BSP
那 BSP 是怎么攒出来的?
层和版本都锁在 README 里:poky scarthgap-5.0.3、meta-openembedded 735ae03、meta-atmel tag linux4microchip+sama7d65-2025.02(commit 214b826)、meta-arm yocto-5.0。机器两个变体,-sd 走 SD 卡出 wic,另一个走 NAND 出 ubi 且带屏。引导链 AT91Bootstrap 4.0.10 + U-Boot 2024.07 + 内核 6.6.64。
踩了个坑:仓库是 linux4sam/meta-atmel,不是 linux4microchip/meta-atmel。照芯片名去猜,第一把就撞 Repository not found。
节点收窄
重点来了。把 sama7d65.dtsi 里每个节点的 compatible 抽出来,跟内核驱动匹配表逐个对,不抽样。
【02_04_节点收窄】
先说要怎么算。102 个 compatible 里混着 fixed-clock、syscon、at91-pmc 这类非外设条目,剔掉之后剩 75 个真正需要驱动的外设节点。
75 个里 67 个有驱动落地:61 个在 drivers/ 直接命中,6 个音频节点走 sound/soc/atmel/。剩下 8 个没驱动,逐个查过,都有理由——gpbr/sfrbu 是 syscon,uddrc/ddr3phy 归 AT91Bootstrap 配,nfc_io 由 NAND 控制器统一处理,pdmc1 用的 sama7g5-pdmc 在本版内核里没有对应驱动。
再切一刀:这 61 个里,只有 10 个用 SAMA7D65 专属 compatible——主要是显示三件套(xlcdc、mipi-dsi、lvds),加几个基础外设(flexcom、pinctrl、pit64b、pmc、sckc、sdhci、usart)。
继承的代价
剩下的 51 个从哪来?
【02_05_驱动继承】
SAMA7G5 给 16 个,SAMA5D2 给 16 个,SAM9X60 给 6 个,5 路 CAN-FD 直接用标准 bosch,m_can,还有 8 个是 at91 系列通用的。
举几个具体的。双千兆用的 compatible 是 microchip,sama7g5-gem,驱动 macb;三路 SD/eMMC 用 sama7g5-sdhci 和 sam9x60-sdhci,驱动 sdhci-of-at91;USB 三路更杂,udc 用 sama7g5-udc、ohci 用 sama7g5-ohci、ehci 用 at91sam9g45-ehci,三个不同年代的 IP 凑一起;11 路 FLEXCOM 统一走 atmel,sama5d2-flexcom,再挂 usart/i2c/spi 子节点。
这件事两说。好的一面是驱动久经验证,插上去大概率能跑。不好的一面是出问题时,你面对的是"老驱动在新 SoC 上"的集成 bug——驱动本身是对的,错的是这颗芯片上某个 IP 改了时序、改了地址。上网也搜不到。
复制改造的痕迹
顺手记了几处瑕疵:
【02_06_文档缺陷】
conf/machine/sama7d65-curiosity.conf 里 #@Name 写的是 SAM7D65,少了个 A;#@DESCRIPTION 整句是 for Microchip SAM9X75-CURIOSITY board。设备树里 watchdog@e001d180 的 reg 实际是 0xe001d000,flexcom@e281C000 的 C 是大写还缺个空格。
都不影响功能。但这些比任何宣传材料都更能说明问题:这套 BSP 是从 SAM9X75 复制改造出来的。 知道这一点,排查方向就不一样了——先怀疑继承过来的东西有没有跟着改。
我要赚赏金
