自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(128)
  • 资源 (6)
  • 收藏
  • 关注

原创 内存标签扩展MTE

ARM在2018年9月提出的内存安全概念,最终写入ARMv8.5体系结构。MTEMTE具有很强的地址访问完整性硬件级保护,预计访存开销在3%~5%,CPU开销小于1%。MTE当前仅对AARCH64 两类标签 内存标签,每对齐的16字节内存单元有一个4位的标签 指针标签,每个指针在最高字节处有一个4位标签 常规读写指令LD/ST对两类标签进行检查,如果不匹配就触发硬件异常 在AARCH64中新增加专门用于标签操作的指令栈和堆的内存分配过程分配按照16字节对齐方式进行内存分

2022-02-24 16:07:05 552

原创 飞腾CPU体系结构之字节序

字节序描述数值在内存中的每一个字节排列顺序。举例说明,以一个32位4字节为例,数值0x1234_5678的小端字节序和大端字节序描述如下:1. 小端字节序字节 3 2 1 0 0x12 0x34 0x56 0x78 2. 大端字节序字节 3 2 1 0 0x78 0x56 0x34 0x12 需要注意的是:字节序仅仅描述字节之间的位置关系,并不描述字节内部位序关系。

2022-02-19 17:28:30 699

原创 飞腾CPU体系结构之位序

位序描述数值在内存中的每一个位排列顺序。举例说明,以一个8位字节为例,数值0x0A的小端和大端描述如下:1. 小端位序为位 7 6 5 4 3 2 1 0 数值 0 0 0 0 1 0 1 0 2. 大端位序为位 0 1 2 3 4 5 6 7 数值 0 0 0 0 1 0 1 0

2022-02-18 16:41:57 1221

原创 GPU通用操作接口

通过PCI总线,CPU可以访问GPU的BIOS、状态/控制寄存器和显存。受限于PCI资源长度,CPU可以直接访问的显存范围也受到限制,那些不能直接访问的范围只能通过DMA方式间接访问。随着显存容量逐渐增大,CPU不能直接访问的显存范围也越来越多。MMIOMMIO是CPU直接访问GPU的方式:CPU往显存写后命令,GPU再以lockstep方式执行(lockstep方式:采用大量相同硬件部件同时处理相同的指令);CPU等待GPU指令完成后,再次往显存写入新的命令。这就是CPU和GPU之间的同步通信,常

2022-02-10 10:52:52 1903

原创 虚拟内存和物理内存:从CPU和GPU交互的角度出发

物理内存:真实的内存芯片颗粒,在物理总线上占据一段或几段连续的地址范围。 虚拟内存:用户程序使用虚拟内存地址访问内存单元,虚拟内存地址总是要翻译成物理总线上的地址。这样一来,物理总线上不连续的内存范围,在虚拟内存地址上也可能是连续的,这满足了用户程序对大块连续内存的使用需求。在已经运行过一段时间的系统中,分配一个物理地址上连续的、大内存是比较困难的;Linux操作系统的swiotlb会在系统启动早期预留出一块64MB的连续物理内存,用于满足DMA内存请求。从物理总线上看,地址连续的大内存很难满足;但

2022-01-25 17:35:48 3332 1

转载 X:output rendering and rasterization

The X protocol originally defined a core set of primitive rendering operations, such as line drawing, polygon filling, and copying of image buffers. These did not evolve as graphics hardware and operaions expected by modern applications, and are thus now m

2022-01-24 10:25:42 1108

转载 X: GetImage reading from the display

The X Server does not keep track of what it has drawn on the display. Once bits are rendered to the FB, its responsibility for them has ended. If bits need to be re-rendered, the X server asks either a compositing manager or the application that originally

2022-01-24 10:06:20 508

转载 XCB colors and pixmaps

Using colors to paint the rainbowWe finally see now how to draw using colors.

2022-01-20 10:57:29 531

转载 XCB window context and manipulation

How the client windows are interacting with their environment, such as the full screen and the other windows?Interacting with the window manageThe client program needs to interact with the window manager. The window manager is responsible todecoratin

2022-01-19 10:56:29 2592

转载 XCB basic windows and drawing

Creating a basic windowIn the X window system, a window is characterized by an Id. The client first asks for a new window Id from X server by the function "xcb_generate_id" that returns a structure of "xcb_window_t". Then, the function "xcb_create_window

2022-01-18 17:57:22 1332

转载 XCB tutorial

tutorial (xcb.freedesktop.org)IntroductionMost application developers will want to use a much higher-level GUI toolkit, like Motif, LessTiff, GTK, Qt, EWL, or ETK or perhaps use the higher-level drawing library Cairo. However, knowing about the layers

2022-01-18 15:57:48 56364

原创 SP804定时器

SP804是两个定时器模块,作为APB总线从设备,可以被CPU访问编程:包括2个中断和2个32位递减计数器FRC。系统时钟PCLK用于APB总线访问寄存器;时钟TIMCLK用于递减技术器更新,频率小于系统时钟PCLK。在寄存器访问时,这两个时钟要同步。功能描述两个32位递减计数器有三种工作模式:无限制模式,从最大值开始递减,当减小到0时,自动从最大值开始递减。这是默认模式。 周期定时器模式,从一个预设值开始递减,当减小到0时,产生中断,并重新装载预设值,又开始递减。这样产生一个固定周期的时

2021-12-31 17:03:33 4281

原创 飞腾CPU体系结构之弱顺序内存模型

飞腾CPU采用弱顺序内存模型,即允许访存操作序列的实际执行顺序和被第三方观察到的执行顺序不同于程序顺序。这里说道,访存操作序列存在三种顺序,其中程序顺序就是编程代码中定义的顺序;实际执行顺序是在一个CPU流水线上真实发生的顺序,由于允许乱序执行、分支预测、指令相关约束等各种因素,访存操作真实发生的顺序很可能与程序顺序不一致;另外,在多核CPU中所有CPU和设备(例如GPU显卡、或具有DMA功能网卡)之间会共享内存,由于高速缓存等因素这些共享内存的第三方观察到的执行顺序也可...

2021-11-24 09:37:44 13371

原创 Linux内核SMP机间中断(三)

在飞腾cpu平台上,本地cpu端的核心发送函数smp_cross_call,即函数__ipi_send_mask。static void smp_cross_call(const struct cpumask *target, unsigned int ipinr){ trace_ipi_raise(target, ipi_types[ipinr]); __ipi_send_mask(ipi_desc[ipinr], target);}其中,cpumask *ta...

2021-11-23 12:40:36 12092

原创 Linux内核SMP机间中断(二)

在飞腾CPU平台上,SMP机间中断主要用来在指定CPU上实现七个目标:IPI序号 目标 IPI_RESCHEDULE 远程cpu执行任务调度 当被唤醒进程不是运行本地cpu上,就需要给被唤醒进程所在的远程cpu发送IPI中断,让远程cpu重新调度。在接收到IPI时无论远程cpu是否处于空闲态,被唤醒进程都会在IPI中断过渡到内核态时得到执行。 IPI_CALL_FUNC 远程cpu执行回调函数 当本地cpu将指定远程cpu调用的回调函数挂

2021-11-23 12:11:52 13527

原创 Linux内核SMP机间中断(一)

利用底层IPI处理器之间的中断机制,Linux内核可以实现在指定的CPU上执行某个函数的功能。本地CPU,即smp_processor_id()返回的CPU,通过调用smp_call_function函数来指定其他一个或若干个CPU来执行某个回调函数。 smp_call_function函数的基本参数包括: int cpu 被指定的一个cpu struct cpumask *m...

2021-11-22 14:36:02 10821

原创 飞腾CPU体系结构之系统指令

1. 系统指令编码访问系统寄存器编码空间的指令,提供以下功能: 1)访问系统寄存器,包括调试寄存器,系统状态和控制相关的寄存器。 2)访问专用寄存器,例如程序状态保存寄存器SPSR、异常链接寄存器ELR,以及CPU状态的某些域。 3)高速缓冲和TLB维护指令,地址翻译指令 4)内存屏障和CLREX(清除对内存的独占标记)指令。 5)体系结构的暗示指令。 基本模型 系...

2021-11-22 11:20:57 9061

原创 千兆以太网链路GEM

1. GEM概述主要包括:介质访问控制层MAC,主要控制发送、接收、地址检测和回路。 配置寄存器,提供控制状态寄存器、统计寄存器和同步逻辑。 物理编码子层PCS,提供8B/10B编解码,PCS发送,PCS接收和PCS自协商。(该模块也是可选项) 直接内存访问DMA,控制DMA发送,DMA接收和AHB/AXI仲裁逻辑。(某些应用场景,GEM可以不用DMA,需要在GEM和CPU之间实现一个外部FIFO缓冲接口) 时间戳TSU,计算定时器的数值,提供实时时钟。2. MAC...

2021-11-19 12:06:30 11211

原创 显示的命令处理器CP

1. 概述GPU上的可编程处理器,作为一种获取和解析PROMO4命令流的专用计算引擎,主要有以下作用:从主机端GPU驱动程序接收命令流。命令流可以存放在系统主存或GPU显存中。R5xx系列有三个流:一个环缓冲和两个间接缓冲。 分析和解析命令流。将解析后的数据写入GPU内部其他模块,例如3D图形处理器,2D图形处理器,视频处理器或视频解码器。 提供两个通用DMA引擎,一个用于GUI相关任务,一个用于视频任务。DMA引擎要求源和目的地址满足字节对齐。2. GPU和CPU之间的通信...

2021-11-11 11:22:34 3293

原创 显示的图像存储方式

1. linear 和 tiled小块,是指在内存上地址按照32字节对齐的32字节连续的数据,起始地址的低5位为零。如果一个像素点占32位,那么一个小块描述了8个像素点信息,这8个像素点有两种方式:linear和tiled。linear:描述一行连续的8个像素点* * * * * * * *tiled:描述上下相邻两行的4个像素点 *...

2021-11-11 10:10:17 5442

原创 AXI从设备接口

AXI从设备接口,可以实现EP应用,即作为PCIe总线主设备通过PCIe总线向主机发起PCIe事务。实现RP应用时,AXI从设备接口可以用于发起I/O、配置CFG和延迟内存写DMWr请求。 实现EP应用时,该接口连接的客户逻辑(外设)必须具有PCIe总线主设备能力。 在RP和EP应用中,该接口都能向PCIe总线发送消息。AXI从设备接口向PCIe总线发送一次事务请求。AXI读写访问,通过区间或边带描述符两种方式,被转换成无确认或有确认的读写请求的TLP。无确认的逻辑产生的内存写和消息请求,映射

2021-10-11 13:52:26 8315

原创 从计算到设备/内存的高速互连协议

CXL:Compute Express Link, 一种基于PCIe 5的、新型的从计算到设备/内存的高速互连协议。1)提供与计算端互连的三种可选应用接口HLS(HaL Stream interface),基于CXS的流总线接口 AXI4总线接口,可以提供DMA可选特性。 CLS,基于CXS的CXL流总线接口2)提供与Serdes设备端互连的、遵顼PIPE(PHY Interface for the PCI Express Architecture)规范的接口。3)可以实现EP和RP两种功能模

2021-10-08 11:56:30 7478

原创 PCIe原子操作

#include linux/module.hstruct module *find_module(const char *name);

2021-09-23 15:31:07 11242

原创 飞腾CPU体系结构之高速缓存概念

Cache类型寄存器CTR_EL0 描述处理器cache结构信息的寄存器。 DIC,bit[29], 在虚拟内存范围内的指令缓存块失效。 IDC,bit[28],在虚拟内存范围内的数据缓存块和L2缓存块全部清零。 CWG,bit[27:24],回写缓存块长度。 ERG,bit[23:20],用于独占型读写操作的缓存块长度。 DminLine,bit[19:16],数据缓存块和L2缓存块长度。...

2021-09-14 19:01:36 10055

原创 DW_axi_dmac控制器(术语)

Source peripheral 源设备。DMA通过AXI总线读取该设备的数据,并将数据保存到通道FIFO中。Destination peripheral 目的设备。DMA将通道FIFO的数据写入该设备。数据是先前从Source peripheral读取的。Memory 内存设备。用于DMA传输的一类源/目的设备,但是DMA不需要通过握手接口和这类设备进行交互。(我理解这类设备为系统内存)Channel 通道。在源设备和目...

2021-09-02 15:27:58 14557 5

原创 DW_axi_dmac控制器(概述)

DW_axi_dmac控制器(概述) DW_axi_dmac遵循AMBA2.0标准和AMBA AXI协议2.0标准。DW_axi_dmac逻辑的外部信号主要包括:AHB信号(我的理解:主要是作为从设备接口部分,供AHB总线上的其他主设备来访问自身控制寄存器) 主设备接口信号(我的理解:DMA作为AHB总线主设备,访问内存和其他AHB总线上的从设备) 硬件握手信号(我的理解:带外信号部分,用于和QSPI的DMA接口逻辑进行流控) 中断信号 调试信号 时钟和复位信号基本特...

2021-09-02 13:52:44 18780 2

原创 Linux的completion线程同步机制

Linux的completion线程同步机制 当Linux一个线程需要对某个硬件设备进行读写访问或者控制操作时,该线程通过系统调用执行的内核读写访问或控制操作函数如果要确保上次操作完成后再进行下一步操作,即等待硬件设备返回上一次操作完成信息(通过中断来获取上次操作完成信息)。注意:我们不能假定中断为该线程的上下文,很大可能性中断和读写/控制操作函数属于不同的线程上下文。 驱动初始化 读写/控制操作函数 中断处理函数 1 定义和初始化completion变量...

2021-08-30 12:18:12 9276

原创 Linux的IO轮询操作

Linux的IO轮询操作 我们经常要在一个时间间隔内周期性进行IO状态检测,一直到该IO状态满足某个退出条件就退出,或者在该时间间隔之后IO状态仍然不能满足退出条件,就超时退出。IO状态检测的周期一般包括两部分:IO状态检测时间段和等待时间段。如果等待时间段比较长,即IO状态检测周期比较长,我们建议采用休眠方式等待,这样可以节省CPU计算时间,但是不允许在原子操作范围内使用; 如果等待时间段比较短,即IO状态检测周期比较长,我们建议采用忙等方式等待,这种方式允许在原子操作范围内使用。...

2021-08-27 16:43:25 13932

原创 QSPI Flash驱动代码分析(spi主设备驱动框架)

QSPI Flash驱动代码分析(spi主设备驱动框架) SPI主设备驱动的主要功能是:向上提供 struct spi_master 主设备驱动接口和struct spi_controller_mem_ops相关访问操作方法。 向下管理SPI控制器。1. struct spi_master结构体分配/*linux/spi/spi.h*/static inline struct spi_controller *spi_alloc_master(struct device *h...

2021-08-26 14:46:41 4995

原创 QSPI Flash驱动代码分析 (QSPI控制器初始化)

QSPI Flash驱动代码分析 (QSPI控制器初始化)1. 函数cqspi_controller_enable()该函数主要使能和去能QSPI控制器。QSPI配置寄存器(偏移量0x00)的bit[0]位为可读写QSPI使能位。1表示并行SPI使能;当该位设置为0时,所有SPI信号输出使能全部无效,SPI信号的所有接口被设置为输入模式。 参数enable,0为去能;1为使能。static void cqspi_controller_enable(stru...

2021-08-26 10:17:31 4706

原创 QSPI Flash驱动代码分析(等待QSPI空闲)

QSPI Flash驱动代码分析(等待QSPI空闲) 等待QSPI空闲的含义是,在一个时间间隔内连续N次判断出QSPI处于空闲状态。1. 函数cqspi_is_idle()通过QSPI配置寄存器(偏移量0x00)的状态只读bit[31]位,该位为1表示串行接口和QSPI流水管道处于空闲状态。2. 函数cqspi_wait_idle()该函数是为了等待QSPI空闲,要求在CQSPI_TIMEOUT_MS(500ms)时间内有连续poll_idle_retry(3)次判断出QS...

2021-08-26 09:11:17 1449

原创 QSPI Flash存储控制器(DMA外设控制器)

QSPI Flash存储控制器(DMA外设控制器)

2021-08-18 18:26:27 6421

原创 QSPI Flash存储控制器(间接写访问控制器)

QSPI Flash存储控制器(间接写访问控制器)1. 间接写访问控制器 间接写操作是协助处理器或DMA将大量数据写入Flash存储。间接写传输可以尽可能减少对Flash设备的写次数,延长Flash设备的使用寿命。 从软件角度看,间接写操作是间接读操作的反过程。软件驱动通过专门的APB控制/配置寄存器来实现间接写操作。这些寄存器包括:间接写传输控制器寄存器(偏移量0x70); 间接写传输水印寄存器(偏移量0x74); 间接写传输起始地址寄存器(偏移量0x78)...

2021-08-18 15:03:59 2965

原创 QSPI Flash存储控制器(间接读访问控制器)

QSPI Flash存储控制器(间接读访问控制器)间接访问控制器包括:间接读访问控制器和间接写访问控制器。1. 间接读控制器 间接读操作主要是用于从Flash存储中读取大量的数据。软件通过特殊APB控制配置寄存器来控制和触发间接访问操作。这些寄存器包括:间接读传输控制器(偏移量0x60),间接读传输水位寄存器(偏移量0x64),间接传输起始地址寄存器(偏移量0x68)和间接读传输字节数量寄存器(偏移量0x6C)。间接读控制器和底层SPI协议状态机模块交互,从而完成高...

2021-08-18 11:44:12 3770

原创 QSPI Flash存储控制器(直接访问控制器DAC)

QSPI Flash存储控制器(直接访问控制器DAC)直接访问是指AHB的访问直接触发对Flash存储的读写。DAC是内存映射模式,可以直接对Flash内存进行PIO读写访问,并直接运行Flash内存上的二进制代码。DAC的访问不使用内部SDRAM。AHB总线的读写突发会产生抖动,设备等待状态过程与控制器和设备的延迟相关;因此延迟要设计得尽可能小,XIP读指令使能有助于将延迟保持在最小值。 DAC接收到来自AHB的读请求时,在单个AHB突发操作之间,会向下游发送一个额外...

2021-08-17 18:29:45 4226

原创 QSPI Flash存储控制器(AHB从设备接口)

QSPI Flash存储控制器(AHB从设备接口) AHB从设备控制器,响应来自AHB总线主设备的访问请求,执行字节和半字的排序,在直接模式下阻塞对写保护区的写请求,给直接访问控制器或间接访问控制器转发传输请求。1. AHB接口 AHB接口遵循AMBA 3 AHB-Lite规范,但不支持HMASTLOCK(传输锁定)和HPROT(保护控制信号)。AHB接口的位宽度为32位,因此只允许字节,半字和字的访问。仅仅支持递增突发写(地址依次递增),绕回突发写(可以绕回到低地址...

2021-08-17 16:49:32 5861 4

原创 QSPI Flash存储控制器(概述)

QSPI Flash存储控制器(概述)1. 特征概述内存映射的直接操作模式,用于Flash数据传输和执行Flash存储的代码; 软件设置的间接操作模式,用于低延迟、非计算密集Flash数据传输; 可选的DMA外设接口,用于在间接操作模式中,与外部DMA同步状态信息; 内部提供一个SRAM,用于在间接操作模式中,缓冲Flash数据; 提供FLash访问控制控制器,用于执行Flash命令; 可寻址的存储颗粒,允许一次超过8字节; 支持设备时钟频率,包括133MHz或80MHz; 支持XIP

2021-08-17 12:26:46 15796 1

原创 飞腾CPU体系结构之从用户态进入内核态的上下切换

飞腾CPU体系结构之从用户态进入内核态的上下切换1. 用户态与内核态之间的上下文切换当飞腾CPU从用户态进入内核态,主要是汇编宏kernel_entry的执行过程;与这个过程相反的是飞腾CPU从内核态退回到用户态,主要是汇编宏kernel_exit。这两个宏的基本定义为//arch/arm64/kernel/entry.S/*宏参数el = 0, 表示从用户态进入到内核态 *宏参数regsize = 64, 这是默认参数,表示是进入内核态之前属于AArch64。 */.macro ke

2021-08-05 15:47:37 3569 1

原创 操作系统级的异常状态表征寄存器esr_el1

操作系统级的异常状态表征寄存器esr_el1寄存器esr_el1是在权限级EL1下可以访问的系统寄存器,即由操作系统内核访问来查明具体触发异常原因的寄存器。当飞腾CPU在EL0/EL1状态下,发生异常,并跳入EL1进行异常处理时,该寄存器的相关状态就表明了异常发生的具体原因。当飞腾CPU进入EL1,操作系统内核在进行异常处理的通用路径上,通过对比esr_el1的状态,进行最终跳转。在AArch64状态下,该寄存器是一个64位的系统寄存器。...

2021-08-04 11:41:30 5374

原创 飞腾CPU体系结构之系统调用(el0_sync)

飞腾CPU体系结构之系统调用(el0_sync)1. 汇编宏kernel_ventry该汇编宏主要是用于异常响应向量表中,每一个向量入口点。

2021-07-09 16:37:47 4765

实时线程测试代码rttest.c

实时线程测试源代码,主线程是非实时的,用于统计显示;父线程是任务分发,子线程是任务处理,两者都是实时的。

2020-12-22

diff_numa_memory_and_cpu

该补丁用于修复飞腾CPU的UEFI固件关于NUMA结构描述的遗漏,直接在linux5.9内核使用,其他内核版本可能需要调整。

2020-11-02

创建飞腾CPU上的交叉编译环境脚本

创建飞腾CPU上的交叉编译环境脚本,包括环境变量、目录创建、编译源文件的修改、编译配置的描述、编译和安装,以及最后的验证。

2020-10-18

1-DDI0487A_a_2_armv8_arm_arch_reference_manual.pdf

ARMv8体系结构原文,描述了ARM64的寄存器,指令的CPU相关体系结构,可以用于飞腾和鲲鹏CPU的学习

2020-09-30

PCI总线规范2.2

PCI设备规范,描述了配置空间,PCI内存空间和IO空间,以及中断

2011-05-13

X86_64体系结构(系统程序员手册)

体系结构(系统程序员手册)第二章全译稿!

2011-02-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除