飞腾CPU体系结构之低功耗指令

飞腾CPU体系结构之低功耗指令WFE和WFI指令当飞腾CPU核执行两类指令:WFE或WFI之后,CPU核进入低功耗状态; 一旦CPU核进入低功耗状态,就要一直保持低功耗状态直到相应的唤醒事件发生。ARM体系结构并没有定义CPU核进入低功耗的具体属性要求;但是确保在进入、保持和退出低功耗的整个过程中,内存和高速缓冲依然满足数据一致性。在AArch64状态下,低功耗常规唤醒事件列表如下:唤醒事件WFEWFI当前核接收到物理中断vv当前核接收到虚拟中断vv当前核接
分类: 其他 发布时间: 11-20 09:35 阅读次数: 0

飞腾CPU体系结构之yield指令

飞腾CPU体系结构之yield指令基本概念暗示指令是指对于程序运行结果的正确性没有影响,而是出于对性能或者功耗等因素的考虑,软件对CPU给出的一种指示,CPU硬件基于这种指示进行相关策略调整,当然CPU也可以直接忽略这种指示,类似nop处理方式。多核多线有一个工具厂,引进了四条加工流水线,每一个流水线上两班工人轮流。这个工厂有点特殊:相同流水线上轮流的两班工人,生产各自的工具,例如一班生产斧子,另一班生产榔头。如果把工厂比作CPU,流水线就类似处理核,一班工人就是处理线程注意:处理核和线程
分类: 其他 发布时间: 11-20 09:34 阅读次数: 0

飞腾CPU体系结构之内存交换原子操作

飞腾CPU体系结构之内存交换原子操作1. 内存交换原子操作定义:修改内存单元的数据,同时返回该内存单元原来的数据。函数声明(以内存单元长度64位为例)static inline u64 __xchg_case_64 (u64 x, volatile void *ptr)static inline u64 __xchg_case_acq_64 (u64 x, volatile void *ptr)static inline u64 __xchg_case_rel_64 (u64 x, vo
分类: 其他 发布时间: 11-20 09:34 阅读次数: 0

飞腾CPU体系结构之虚拟地址

飞腾CPU体系结构之虚拟地址1. 基本概念虚拟地址:程序运行时指令和数据对应的地址。虚拟地址空间:一个进程运行时指令和数据能访问到的虚拟地址范围。注意事项:每个进程拥有自己的虚拟地址空间,进程的虚拟地址空间一般分为内核态和用户态两个范围。进程内的所有线程共享该进程的虚拟地址空间。进程和进程之间可以共享虚拟地址空间内核态范围:所有进程共享虚拟地址空间的内核态范围全部;用户态范围:1.部分进程共享虚拟地址空间的用户态范围中的共享库部分;2. 两个进程可以通过Syste
分类: 其他 发布时间: 11-20 09:34 阅读次数: 0

GCC之编译暗示语句

GCC之编译暗示语句GCC暗示语句,不生成任何代码,仅仅给GCC编译器提供编译上的功能需求提示。barrier#define barrier() __asm__ __volatile__("":::"memory")barrier()告诉GCC编译器,在这之后使用的内存变量全部要重新从内存单元获取,而不能从寄存器获取。一般说来,某个内存变量首先被读取到寄存器中,然后对该寄存器进行访问从而实现对该变量的读取和修改操作。#define likely_notrace()unlikely()
分类: 其他 发布时间: 11-20 09:34 阅读次数: 0

飞腾CPU体系结构之系统调用(异常入口分析)

飞腾CPU体系结构之系统调用(异常入口分析)异常向量表/* * Exception vectors. */ .pushsection ".entry.text", "ax" //异常向量表专属代码段 .align 11 //地址对齐要求, 地址低11为0ENTRY(vectors) kernel_ventry 1, sync_invalid // Synchronous EL1t
分类: 其他 发布时间: 11-20 09:33 阅读次数: 0

ldconfig命令

ldconfig命令动态链接器的管理命令,依次搜索相关目录的动态链接库,lib**.so.*,创建动态链接装载程序,ld.so或ld-linux.so,所需的链接和缓存文件。缓存文件一般是/etc/ld.so.cache,主要记录了动态链接库的链接。动态链接装载程序会搜索该缓存文件,进行动态链接库的加载;也就是说,只有记录在该缓存文件中的动态链接库才能被使用。命令/sbin/ldconfig -p查看缓存文件ubuntu@ubuntu:~$ ldconfig -p在缓存“/etc/ld.so.c
分类: 其他 发布时间: 11-20 09:33 阅读次数: 0

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

飞腾CPU体系结构之系统调用(el0_sync)1. 汇编宏kernel_ventry该汇编宏主要是用于异常响应向量表中,每一个向量入口点。
分类: 其他 发布时间: 11-20 09:33 阅读次数: 0

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

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

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

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

QSPI Flash存储控制器(概述)

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

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

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

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

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

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

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

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

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

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

QSPI Flash存储控制器(DMA外设控制器)
分类: 其他 发布时间: 11-20 09:31 阅读次数: 0

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...
分类: 其他 发布时间: 11-20 09:31 阅读次数: 0

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...
分类: 其他 发布时间: 11-20 09:30 阅读次数: 0

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...
分类: 其他 发布时间: 11-20 09:30 阅读次数: 0

Linux的IO轮询操作

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