从Arnd Bergmann提供拉动ARM Apple M1平台支持:" Apple M1是处理器,它使用了所有当前的Apple Macintosh计算机。到目前为止,对这个平台的支持是基本的,但它可以在特殊的USB电缆上使用帧缓冲和串行控制台。支持几种必需的片上设备(USB,PCIe,Iommu,NVME)正在进行中,但尚未及时准备好了。有效的作品中的一个非常详细的描述在提交1bb2fd3880d4(" mergeag标记' m1-soc-grandup-v5' [..]")和Asahilinux Wiki& #34;链接:https://lore.kernel.org/linux-arm-kernel/[email protected]/*标签' arper-apple-m1-5.13&# 39; git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc:asm-generic / io.h:unbork ioremap_np()声明arm64:Apple:添加初始Apple Mac Mini(M1, 2020)DeviceTree DT绑定:显示:添加Apple,简单框架缓冲器ARM64:KCONFIG:介绍CONFIG_ARCH_APPLE IRQCHIP / APPL-AIC:为Apple中断控制器添加支持DT绑定:中断控制器:为Apple-AIC ARM64添加DT绑定:从ARM-GIC-V3.H到SYSREG.H的ICH_ SYSREG位移动/地址:添加基础架构以将MMIO声明为未发布的ASM-Generic / IO.H:使用IORemap_np arm64实现PCI_REMAP_CFGSPACE:Impling IORemap_np()来映射MMIO作为NGNRNE文档:Driver-API:Device-IO:Document IoreMap()变体& Access Funcs Docs:Driver-API:Device-IO:Document I / O Access Functions ASM-Generic / IO.H:添加IORemap()arm64:ARCH_TIMER的非发布变量:INCELES支持中断名称DT绑定:计时器:ARM,ARCH_TIMER:添加中断名称支持ARM64:CPOTYPE:添加CPU实现者& Apple M1核心类型的类型DT绑定:ARM:CPU:添加Apple,Firestorm& ICEStorm Compatibes DT绑定:ARM:Apple:为Apple Arm Platforms添加绑定DT绑定:供应商 - 前缀:添加Apple Prefix
+ Apple设备树的根节点的属性,降低。有可能
+由于它取决于特定的装置中的两半中的特定装置
+仅安全使用这些来访问设备总线后面的内存,但不是MMIO
+访问甚至自旋锁。字节顺序通常与正常相同
+内存,所以与其他功能不同,这些功能可用于复制数据之间的数据
+在PCI基地址寄存器中可能与端口号相对应
+由设备驱动程序。 便携式驱动程序需要阅读端口号 FIFO寄存器中的第一个字节对应于内存中的第一个字节 + *没有投机操作 - CPU可能不会发出读写或写入 + *没有重新排序 - CPU可能不会重新排序访问此内存映射 + *没有重复 - CPU可能不会为单个发出多个读取或写入 +写道。 在使用__raw I / O访问器时或可能不会强制执行这一点或者 发布+映射,这意味着CPU不等待写入
+ * CPU可以重新排序操作,只要结果与结果一致 + * CPU可以多次写入同一位置,即使程序 +在PCI总线上,通常可以安全地使用标记为MMIO区域的IORemap_WC() + * CPU可以缓存写入的写入并从设备读取,并提供读取 +写入以及时地到达设备(而不是卡在CPU中 +由于发布的写语义,这并不是如此 +可以使用缓存,并且CPU可以自由处理设备,好像它是一个
+它也应该不用于实际的RAM,因为返回的指针是一个
+ *此外,此驱动程序还处理FIQS,因为它们被路由到相同
+ * IRQ矢量。这些用于快速IPIS(TODO),ARMv8计时器IRQS,以及
+ * - 此驱动程序创建两个IRQ域,一个用于HW IRQS和内部FIQS,
+ * - 由于Linux需要超过2个IPI,因此我们实现了软件IRQ控制器
+ *并汇集所有IPI到一个每CPU IPI(第二"自我和#34; IPI未使用)。
+ *由他们的目的(HV或Guest)。此映射是核心时的
+ *在EL2运行(带VHE)。 当内核在EL1运行时, + *有办法找出任何给定的IRQ的类型,所以只需允许两者。 + / *我们掩盖到ACK(我们可以在哪里),所以我们需要在EOI揭开。 * / + *如果我们有一个系统寄存器,这将是非常好的,让我们得到 + * ack ipi。 我们需要在AIC事件读取后订购此,但 + *不需要订购屏蔽读取。 只有我们可以改变 + *无论如何,我们自己的面具,所以这里没有比赛,只要
写部分的+ *,而后者是由此处理的 + *确保内核'逻辑CPU秩序的思想与AIC' s相同 + *如果我们在这里有不匹配的话,我们将不得不介绍 + *目前仅在支持Apple Arm设备的构建时启用,如 + *在支持它的拱门上,并返回IORemap()