初始M1支持合并到Linux Soc树中

2021-04-09 13:43:55

* ARM / Apple-M1:(79款项)ARM64:Apple: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位,SYSREG.H /地址:添加基础架构以声明MMIO使用iORemap_np arm64实现pci_remap_cfgspace:ioRemap_np()以将MMIO映射为NGNRNE文档:Driver-API:Device-IO:Document IORemap()Variants& 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 Compatibles DT-绑定:ARM:Apple:为Apple Arm Platforms添加绑定DT绑定:供应商 - 前缀:添加Apple Prefix ARM64:IRQ:允许FIQS处理ARM64:始终保持DAIF ...

+ Apple设备树的根节点的属性,降低。有可能

+由于它取决于特定的装置中的两半中的特定装置

+仅安全使用这些来访问设备总线后面的内存,但不是MMIO

+访问甚至自旋锁。字节顺序通常与正常相同

+内存,所以与其他功能不同,这些功能可用于复制数据之间的数据

+在PCI基地址寄存器中可能与端口号相对应

+由设备驱动程序。 便携式驱动程序需要阅读端口号 FIFO寄存器中的第一个字节对应于内存中的第一个字节 + *没有投机操作 - CPU可能不会发出读写或写入 + *没有重新排序 - CPU可能不会重新排序访问此内存映射 + *没有重复 - CPU可能不会为单个发出多个读取或写入 +写道。 在使用__raw I / O访问器时或可能不会强制执行这一点或者 发布+映射,这意味着CPU不等待写入

+ * CPU可以重新排序操作,只要结果与结果一致 + * CPU可以多次写入同一位置,即使程序 +在PCI总线上,通常可以安全地使用标记为MMIO区域的IORemap_WC() + * CPU可以缓存写入的写入并从设备读取,并提供读取 +写入以及时地到达设备(而不是卡在CPU中 +由于发布的写语义,这并不是如此 +可以使用缓存,并且CPU可以自由处理设备,好像它是一个

+它也应该不用于实际的RAM,因为返回的指针是一个 - 它将运作。 驱动程序仅被测试为该模块 -device主要数字46,并将是命名/ dev / ttyrx,其中x是端口号 -in命令使用端口,必须使用mknod创建其设备名称(节点)。 - 在安装和使用它之前卡。 这是通过设置一组DIP来完成的 - 第一板使用该范围的前4个字节。 你会 - 将第二个,第三或第四板设置为下一个可用的一个

- | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |

- * fiq例外,在' daif'登记。我们在&#39中掩盖和揭开它们; Dai'

+ * fiq例外,在' daif'登记。我们在&#39中掩盖和揭开它们; daif'

- *其他标志的副作用。保持这个订单使它更容易

- * FIQ从未预期,但在禁用调试异常时,我们会掩盖它,

+ *标志。保持此命令使入门更容易知道哪个

- * DA_F在处理开始时被清除。如果在Daif中设置有任何东西,

- *等待要发送的最后剩余数据。 然后,我们取消链接它 + *此外,此驱动程序还处理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设备的构建时启用,如

*尝试启动下一个IO并唤醒进程等待TTY。

- 如果要将此驱动程序汇总到内核中,请在此处说y。如果

-static const char baud_co_60 [] = {/ * 60 MHz时钟选项表(CD1400 j)* /

-static const char baud_bpr_60 [] = {/ * 60 MHz波特率句号表(CD1400 J)* /

- *允许我们利用CD1400中的特殊功能来避免

- *即使系统中断延迟太高,即使系统中断延迟过高)。这些标志

- *需要使用特殊的电缆(DTR和RTS反转)。在新的

- * 发送。如果是,我们必须确保它有空间

- 如果关闭Termio标志的挂起,则删除*和DTR。

- *如果端口已处于活动状态,则无需启动它。

- 如果(波特== 0){/ *波特率为零,请关闭线* /

- * IRQ丢失,因此,我们必须将其重新写入PCI配置。

- for(j = 0,i = cy_next_channel; i< cy_next_channel + nchan; i ++,j ++)

- -1,0,1,2,3,4,5,6,7,8,9,11,13,15,16,17,18,19,20,21

- *卡片的内核锁定并将卡放在一个位置

- *我们定期将数据铲到卡缓冲区中。卡片

- / *如果CBAudex位打开并将波特设置为50或75

- / *在港口上打开比卡片的端口数! * /

- / *告诉卡片现在无法处理此端口无法处理的数据* /

- / *告诉卡片该端口已准备好接受更多数据* /

- if(sig!= 0xa5&& sig!= 0xbb&& sig!= 0xcc&& sig!= 0xdd&&

- if(!(inw(基本+ 0xe)& 0x1)||(portcount!= 0& portcount!= 4&&

- / * xxx:我们应该通过读回来并与原始相比进行测试

- for(i = count,dp = cp,f = fp; i; i--,dp ++){

- *此驱动程序有2个内核控制路径 - 异常处理程序(调用进入驱动程序 - *从用户模式)和定时器底部(tasklet)。 这是一个轮询司机,中断 - * - rp_table [],通过传递和#34访问;信息" 指针,是一个全局(静态)数组 - * - XMIT_FLAGS [],按行(端口)编号索引的int数组,表示存在 - * ISA和常规PCI板之间的这些位不同 - {-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,{0,0,0,0,0}, - {-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,{0,0,0,0,0},

- {-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,{0,0,0,0,0}, - {-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,{0,0,0,0,0}, - *接收数据存在于串行端口上。 从FIFO中取出数据,将其移入 - *串口传输数据功能。 从计时器轮询循环调用 - *在XMIT_FLAGS []中设置的比特结果,指示数据(来自TTY层)已准备就绪 - *要发送串行端口。 数据在rp_table [line] .xmit_buf中缓冲,它是 - *移动到端口' s xmit fifo。 * INFO是由Spinlocks保护的关键数据。

- *当串口信号时调用它在它中读取数据' s rx fifo。 - *到端口上的XMIT。 位0是端口0在该板上,位1是端口 - * 1,......(32种)。 我拥有AIOP和CH的变量 - *重置计时器,以便在下一个时钟滴答(10ms)时调用。 - *初始化端口的R_Port结构,以及启用端口 - / *获取端口的R_PORT结构,填写它并全局保存,按行号索引* / - *用户模式进入驱动程序(例外处理程序)。 *信息CD操作是Spinlock受保护的。

- *我们不能从这里睡觉,直到港口充分标记使用。

- *加入UPCI板,决定使这是一个功能,因为

- / *以下是RP_IOCTL使用的例程。这些都从例外处理程序调用。 * /

- *返回串行调制解调器控制线的状态。下一个功能

- *是内核版本&gt的方式; 2.5处理调制解调器控制线而不是IOCTL。

- *异常处理程序 - 写RITI

......