CN117453318B - 基于iommu的dsp固件使用方法、***芯片及车机 - Google Patents
基于iommu的dsp固件使用方法、***芯片及车机 Download PDFInfo
- Publication number
- CN117453318B CN117453318B CN202311787612.5A CN202311787612A CN117453318B CN 117453318 B CN117453318 B CN 117453318B CN 202311787612 A CN202311787612 A CN 202311787612A CN 117453318 B CN117453318 B CN 117453318B
- Authority
- CN
- China
- Prior art keywords
- dsp
- firmware
- iova
- space
- address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 68
- 238000013507 mapping Methods 0.000 claims abstract description 72
- 230000004044 response Effects 0.000 claims abstract description 24
- 239000000872 buffer Substances 0.000 claims description 76
- 239000012634 fragment Substances 0.000 claims description 62
- 238000004891 communication Methods 0.000 claims description 19
- 238000012545 processing Methods 0.000 claims description 10
- 238000013515 script Methods 0.000 claims description 9
- 230000003993 interaction Effects 0.000 claims description 7
- 230000002093 peripheral effect Effects 0.000 claims description 7
- 230000036316 preload Effects 0.000 claims description 5
- 238000011161 development Methods 0.000 abstract description 11
- 230000000694 effects Effects 0.000 abstract description 6
- 238000010586 diagram Methods 0.000 description 11
- 238000007726 management method Methods 0.000 description 6
- 238000013468 resource allocation Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
基于IOMMU的DSP固件使用方法、***芯片及车机,该方法包括:基于相应的加载地址,将至少两个DSP固件,对应预加载至内存中;响应于接收到DSP固件运行指令,将DSP固件运行指令相应的待运行固件的加载地址,映射至DSP固件运行IOVA空间,并确定相应的IOVA地址;其中,上述至少两个DSP固件的DSP固件运行IOVA空间相同;操作DSP基于IOVA地址,运行该待运行固件。本申请的DSP固件使用方法,不仅能够实现高切换速度,而且开发的便捷性高、使用的灵活性佳,应用于需要较高切换速度的场景时,效果尤为显著。
Description
技术领域
本申请涉及固件应用技术领域,特别是涉及基于IOMMU的DSP固件使用方法、***芯片及车机。
背景技术
在包含CPU(Central Processing Unit,中央处理器)和DSP(Digital SignalProcessors,数字信号处理器)的SOC(System On Chip,***芯片)中,通常情况下,DSP固件由CPU进行加载,DSP和CPU之间通信用的内存缓冲也由CPU进行管理。
而由于DSP在架构、资源限制和效率方面的原因,通常DSP为单进程***,且本身没有MMU(Memory Management Unit),若将所有功能集成在一个固件中,则资源的分配难度和实现的复杂度都很高。因此在实际使用中,通常需要不同的开发人员各自开发相应的DSP固件,来实现不同功能,这就需要进行多个DSP固件的加载和使用切换。然而,对于多个DSP固件,无法实现兼顾高切换速度、开发的便捷性和使用的灵活性。
发明内容
为了解决现有技术中存在的至少一个问题,本申请的目的在于提供基于IOMMU的DSP固件使用方法、***芯片及车机,不仅能够实现高切换速度,而且开发的便捷性高、使用的灵活性佳,应用于需要较高切换速度的场景时,效果尤为显著。
为实现上述目的,本申请提供的基于IOMMU的DSP固件使用方法,应用于***芯片;所述***芯片,包括中央处理器CPU、数字信号处理器DSP和内存;其中,所述DSP被配置有输入输出内存管理单元IOMMU和至少两个DSP固件;在CPU端,所述方法包括,
基于相应的加载地址,将所述至少两个DSP固件,对应预加载至所述内存中;
响应于接收到DSP固件运行指令,将所述DSP固件运行指令相应的待运行固件的加载地址,映射至DSP固件运行IOVA空间,并确定相应的IOVA地址;其中,所述至少两个DSP固件的所述DSP固件运行IOVA空间相同;
操作所述DSP基于所述IOVA地址,运行所述待运行固件。
进一步地,所述基于相应的加载地址,将所述至少两个DSP固件,对应预加载至所述内存中的步骤前,所述方法还包括,
对所述DSP的IOVA空间进行固定分配,以分配出固定的DSP固件运行IOVA空间;
基于所述IOVA空间的所述固定分配,生成所述DSP固件。
更进一步地,所述对所述DSP的IOVA空间进行固定分配,以分配出固定的DSP固件运行IOVA空间的步骤,包括,
将所述DSP的IOVA空间,至少划分为外设IOVA空间、DSP固件运行IOVA空间、DSP和CPU的共享内存IOVA空间、以及数据缓冲区IOVA空间。
进一步地,所述基于所述IOVA空间的所述固定分配,生成所述DSP固件的步骤包括,
基于所述IOVA空间分配,配置所述DSP的链接脚本;
根据所述链接脚本,链接生成目标格式的所述至少两个DSP固件。
更进一步地,所述目标格式为可执行可链接文件格式。
进一步地,所述基于相应的加载地址,将所述至少两个DSP固件,对应预加载至所述内存中的步骤前,所述方法还包括,
基于所述至少两个DSP固件的固件ID、与所述固件ID对应的所述加载地址和固件大小,生成固件加载地址表。
更进一步地,所述方法还包括,
响应于接收到所述DSP固件运行指令,确定待运行的固件ID,并通过查询所述固件加载地址表,根据所述待运行的固件ID,确定对应的所述加载地址;
将相应的待运行固件中的全部片段进行由物理地址至IOVA地址的第一映射。
更进一步地,将所述待运行固件中的一个片段进行所述第一映射的步骤,包括,
从所述待运行固件的程序头部表中,读取该片段在所述待运行固件中的偏移地址和片段大小;
根据所述待运行固件的加载地址、所述片段的偏移地址和片段大小,确定所述片段的实际物理页;
从所述程序头部表中,读取所述片段的物理地址,用作所述片段的IOVA地址;
将所述片段的实际物理页映射至所述IOVA地址,并更新所述IOMMU的固件映射页表。
更进一步地,所述更新所述IOMMU的固件映射页表的步骤后,所述方法还包括,
确定所述待运行固件中的全部片段的第一映射情况;
响应于所述全部片段未完成所述第一映射,对未完成所述第一映射的片段的其中一个,进行所述第一映射的处理。
更进一步地,所述方法还包括,
响应于所述全部片段完成所述第一映射,操作所述DSP基于所述IOVA地址,运行所述待运行固件。
进一步地,所述方法还包括,
与所述DSP通过共享内存IOVA空间进行DSP命令交互,并通过数据缓冲区IOVA空间传递DSP命令的输入输出数据。
更进一步地,所述方法包括,
对发送给所述DSP的命令分配相应内存;
控制所述IOMMU建立缓冲映射页表,将所述命令相应的内存映射至所述数据缓冲区IOVA空间;
分配输入输出数据的缓冲区,并控制所述IOMMU将每个缓冲区映射至所述数据缓冲区IOVA空间,并写入所述缓冲映射页表;
对每个命令建立一个DSP缓冲表,在所述DSP缓冲表中填入相应命令用到的所述缓冲区的IOVA。
更进一步地,所述对每个命令建立一个数据缓冲表的步骤后,所述方法还包括,
写入通信标志位,并通知所述DSP开始运行所述命令;
进入等待状态,以等待所述DSP完成中断;
响应于所述通信标志位被DSP置为成功,所述CPU读取相应的输出缓冲区。
更进一步地,所述方法还包括,
响应于所述通信标志位被DSP置为不成功,控制进入错误处理流程。
为实现上述目的,本申请还提供的基于IOMMU的DSP固件的***芯片,包括,
内存;
数字信号处理器DSP,被配置有输入输出内存管理单元IOMMU和至少两个DSP固件;所述至少两个DSP固件,被配置为对应相同的DSP固件运行IOVA空间;和,
中央处理器CPU,被配置为基于相应的加载地址,将所述至少两个DSP固件,对应预加载至所述内存中;并响应于接收到DSP固件运行指令,将所述DSP固件运行指令相应的DSP固件的加载地址,映射至所述DSP固件运行IOVA空间,并确定相应的IOVA地址;
所述DSP,还被配置为基于所述IOVA地址运行所述待运行固件。
为实现上述目的,本申请还提供的车机,包括,如上所述的基于IOMMU的DSP固件的***芯片。
为实现上述目的,本申请提供的一种计算机可读存储介质,其上存储有计算机指令,当计算机指令运行时执行如上所述的基于IOMMU的DSP固件使用方法的步骤。
本申请的基于IOMMU的DSP固件使用方法、***芯片及车机,基于相应的加载地址,将DSP中的DSP固件,对应预加载至内存中;并响应于接收到DSP固件运行指令,将相应的待运行固件的加载地址,映射至特定的DSP固件运行IOVA空间,确定相应的IOVA地址;以及通过操作DSP基于IOVA地址,运行该固件。由此,既避免了频繁的固件文件的读取和加载操作带来的延迟,能够实现高切换速度,又避免了事先划分每个DSP固件所需使用的内存地址空间带来的不灵活,既提高了使用的灵活性,还通过对每个DSP固件使用统一的、固定的IOVA地址空间来运行固件,而无需考虑应用多DSP固件时对资源的分配,有效提高开发的便捷性。该方案应用于需要较高切换速度的场景时,效果尤为显著。
本申请的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。
附图说明
附图用来提供对本申请的进一步理解,并且构成说明书的一部分,并与本申请的实施例一起,用于解释本申请,并不构成对本申请的限制。在附图中:
图1为根据本申请实施例的基于IOMMU的DSP固件的***芯片的结构框图;
图2为根据本申请实施例的基于IOMMU的DSP固件使用方法的流程图;
图3为根据本申请实施例的DSP的IOVA空间的分配示意图;
图4为根据本申请实施例的一固件片段内容示意图;
图5为根据本申请实施例的固件加载地址表的应用示意图;
图6为根据本申请另一实施例的DSP固件使用方法的流程图;
图7为根据本申请实施例的一固件程序头部表的内容示意图;
图8为根据本申请实施例的DSP固件运行IOVA空间的应用示意图;
图9为根据本申请另一实施例的DSP固件使用方法的流程图;
图10为根据本申请实施例的数据缓冲区IOVA空间的应用示意图;
图11为根据本申请实施例的共享内存IOVA空间的应用示意图;
图12为根据本申请实施例的车机的结构框图。
具体实施方式
下面将参照附图更详细地描述本申请的实施例。虽然附图中显示了本申请的某些实施例,然而应当理解的是,本申请可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本申请。应当理解的是,本申请的附图及实施例仅用于示例性作用,并非用于限制本申请的保护范围。
应当理解,本申请的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本申请的范围在此方面不受限制。
本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
需要注意,本申请中提及的“第一”、“第二”等概念仅用于对不同的装置、模块、单元或数据进行区分,并非用于限定这些装置、模块、单元或数据所执行的功能的顺序或者相互依存关系。
需要注意,本申请中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。“多个”应理解为两个或以上。
关于多个DSP固件加载和切换的实现,可以采用以下两种方法。
一种是在使用时,通过CPU将对应功能所需DSP固件,从文件***加载至分配好的DSP运行内存地址,使用完成后释放该DSP固件。然而采用该方法时,加载速度受限于文件***的IO(Input-Output,输入输出)速度,且每次加载需要重新将DSP固件写入内存,不适用于需要较高切换速度的场景。
另一种是将多个DSP固件,预加载至每个固件对应的不同内存地址。使用所需固件时,将相应的DSP复位向量地址设为该固件的程序入口地址,跳转至该复位向量地址执行。但采用该方法时,由于需预先分配好每一个固件使用的内存空间地址范围,并为每个固件建立单独的链接脚本,导致开发的便捷性差,调整一个固件使用内存空间地址范围时,影响相邻地址的固件,从而直接影响使用的灵活性。
相比之下,本申请将提供一种基于IOMMU的DSP固件使用方法,不仅能够实现高切换速度,而且开发的便捷性高、使用的灵活性佳,应用于需要较高切换速度的场景时,效果尤为显著。
下面,将参考附图详细地说明本申请的实施例。
首先需要说明的是,本申请提供的基于IOMMU的DSP固件使用方法,应用于***芯片。如图1所示,该***芯片100,包括中央处理器CPU 110、数字信号处理器DSP 120和内存130。其中,DSP 120被配置有至少两个DSP固件(图中未示出)、IOMMU(Input-Output MemoryManagement Unit,输入输出内存管理单元)140和相应的IOVA(IO Virtual Address,输入输出虚拟地址)。在具体示例中,该***芯片100,还可以包括其他外设150,CPU 110可以被配置有MMU(Memory Management Unit,内存管理单元)160和相应的VA(Virtual Address,虚拟地址)。其中,IOMMU 140用于将IOVA转为PA(Physical Address,物理地址);MMU 160用于将VA转为PA。
图2为根据本申请实施例的基于IOMMU的DSP固件使用方法流程图,下面将参考图2,对本申请的应用在CPU端的基于IOMMU的DSP固件使用方法进行详细描述。
在步骤201,基于相应的加载地址,将至少两个DSP固件,对应预加载至内存中。
在具体示例中,上述至少两个DSP固件,为该***芯片中DSP被配置的全部DSP固件。也就是说,CPU将DSP全部的DSP固件预加载至内存中。
需要说明的是,具体示例中,DSP固件的加载地址由***芯片的操作***自行分配。即,在步骤201前,该方法还可以包括,***芯片的操作***对上述至少两个DSP固件分配加载地址。
在步骤202,响应于接收到DSP固件运行指令,将DSP固件运行指令相应的待运行固件的加载地址,映射至DSP固件运行IOVA空间,并确定相应的IOVA地址。
其中,该DSP中的全部DSP固件,采用固定的、相同的固件运行IOVA空间。
在具体示例中,DSP固件运行指令,可以包括待运行固件的标识号,使得CPU接收到DSP固件运行指令时,将相应的待运行固件的加载地址,映射至DSP固件运行IOVA空间,并获取到相应的IOVA地址。由于DSP所有的DSP固件都采用固定的、统一的IOVA空间来用于运行,无需考虑应用多DSP固件时对资源的分配,有效提高了开发的便捷性。
在步骤203,操作DSP基于IOVA地址,运行待运行固件。
在具体示例中,在IOMMU完成映射后,CPU可以控制DSP跳转至DSP固件运行IOVA空间的固定配置的重启向量地址,开始运行待运行的DSP固件,等待CPU发送的命令和数据。
根据本申请实施例的基于IOMMU的DSP固件使用方法,基于相应的加载地址,将DSP中的DSP固件,对应预加载至内存中;并响应于接收到DSP固件运行指令,将相应的待运行固件的加载地址,映射至特定的DSP固件运行IOVA空间,确定相应的IOVA地址;以及通过操作DSP基于IOVA地址,运行该固件。由此,既避免了频繁的文件输入输出操作带来的延迟,能够实现高切换速度,又避免了事先划分每个DSP固件所需使用的内存地址空间带来的不灵活,既提高了使用的灵活性,还通过对每个DSP固件使用统一的、固定的IOVA地址空间来运行固件,而无需考虑应用多DSP固件时对资源的分配,有效提高开发的便捷性。该方法应用于需要较高切换速度的场景时,效果尤为显著。
本申请实施例中,在步骤201前,该方法还包括:
步骤301,对DSP的IOVA空间进行固定分配,以分配出固定的DSP固件运行IOVA空间。
进一步地,参考图3所示,步骤301包括,将DSP的IOVA空间,至少划分为外设IOVA空间、DSP固件运行IOVA空间、DSP和CPU的共享内存IOVA空间、以及数据缓冲区IOVA空间。
在具体示例中,外设IOVA空间,用于DSP访问SOC上其他设备映射的地址空间,其IOVA和物理地址相同。DSP固件运行IOVA空间,用于将DSP固件加载的内存地址映射到此段IOVA。DSP和CPU的共享内存IOVA空间,用于将通信使用的内存映射到此段IOVA。数据缓冲区IOVA空间,用于将具体功能实现中使用的缓冲内存映射到此段IOVA。
步骤302,基于IOVA空间的固定分配,生成DSP固件。
进一步地,步骤302包括:
步骤3021,基于IOVA空间分配,配置DSP的链接脚本。
步骤3022,根据链接脚本,链接生成目标格式的至少两个DSP固件。
其中,目标格式具体可以为可执行可链接文件格式(ELF,Executable andLinkable Format)。在具体示例中,DSP固件中的一主要片段如图4所示,其包括Name(名称)、Type(类型)、Addr(地址)、Off(文件内偏移)、Size(片段大小)、ES(条目大小)、Flg(属性标志)、Lk(关联表索引)、Inf(额外信息)、Al(地址对齐)等。该DSP中固件的入口复位向量(resetvector)地址均为0x80a00000。
本申请实施例中,在步骤201前,该方法还包括,基于上述至少两个DSP固件的固件ID、与固件ID对应的加载地址和固件大小,生成固件加载地址表,如图5所示。在具体示例中,可以在该DSP的所有固件(固件-1、固件-2……固件-n)都加载完成后,按固件ID来引用当前需要运行的固件。
进一步地,该方法还包括,响应于接收到DSP固件运行指令,确定待运行的固件ID,并通过查询固件加载地址表,根据待运行的固件ID,确定对应的加载地址;将相应的待运行固件中的全部片段进行由物理地址至IOVA地址的第一映射。
进一步地,参考图6所示,将待运行固件中的一个片段进行第一映射的步骤,包括以下步骤:
步骤401,从待运行固件的程序头部表中,读取该片段在待运行固件中的偏移地址和片段大小。
步骤402,根据待运行固件的加载地址、片段的偏移地址和片段大小,确定片段的实际物理页。
步骤403,从程序头部表中,读取片段的物理地址,用作片段的IOVA地址。
步骤404,将片段的实际物理页映射至IOVA地址,并更新IOMMU的固件映射页表。
在具体示例中,待运行固件的程序头部表(Program Headers)如图7所示,其包括Type(类型)、offset(偏移地址)、VirtAddr(虚拟地址)、PhysAddr(物理地址)、Filesiz(在文件中的大小)、Memsiz(在内存中的大小)、Flg(属性标志)、Align(地址对齐要求)等。其中PhysAddr项为DSP侧该片段需要加载的IOVA地址。从固件加载地址,按ELF格式读取该DSP固件的程序头部表中的条目,配置IOMMU,建立固件映射页表,通过PhysAddr项和offset项,获取该片段在内存中的位置,而后将该片段所有的物理页映射至对应的IOVA地址。
在完成映射后,相应的映射关系示意图如图8所示。内存中加载有多个DSP固件(固件-1至固件-n),DSP固件中包括多个片段,如固件-1中包括代码段、数据段和n个其他加载段。
CPU接收到针对固件-1的DSP固件运行指令后,从固件-1的程序头部表中,读取代码段在固件-1中的偏移地址和片段大小,并根据固件-1的加载地址、代码段的偏移地址和片段大小,确定代码段的实际物理页。而后,从程序头部表中,读取代码段的物理地址,用作代码段的IOVA地址,将代码段的实际物理页映射至IOVA地址,并更新IOMMU的固件映射页表。
进一步地,步骤404后,该方法还包括:
步骤405,确定待运行固件中的全部片段的第一映射情况。
步骤406,响应于全部片段未完成第一映射,对未完成第一映射的片段的其中一个,进行第一映射的处理。
也就是说,参考图8所示,更新IOMMU的固件映射页表后,确定待运行固件中的全部片段的第一映射情况。确认到全部片段并未完成第一映射后,对数据段,即未完成第一映射的片段的其中一个,进行第一映射的处理。
进一步地,该方法还包括:
步骤407,响应于全部片段完成第一映射,操作DSP基于IOVA地址,运行待运行固件。
具体地,参考图8所示,IOMMU完成固件-1全部片段的映射后,CPU控制DSP跳转至复位向量,其地址为固定的IOVA(本例中为0x80a00000),该固件-1开始运行,等待CPU发送的命令和数据。
本申请实施例中,该方法还包括:
步骤204,CPU与DSP通过共享内存IOVA空间进行DSP命令交互,并通过数据缓冲区IOVA空间传递DSP命令的输入输出数据。
进一步地,参考图9所示,步骤204包括以下步骤:
步骤501,对发送给DSP的命令分配相应内存。
可以理解的是,此处被分配内存的命令,可以是一个,也可以是多个,本申请对此不作具体限制。
步骤502,控制IOMMU建立缓冲映射页表,将命令相应的内存映射至数据缓冲区IOVA空间。
步骤503,分配输入输出数据的缓冲区,控制IOMMU将每个缓冲区映射至数据缓冲区IOVA空间,并写入缓冲映射页表。
步骤504,对每个命令建立一个DSP缓冲表,在DSP缓冲表中填入相应命令用到的缓冲区的IOVA。
具体地,如图10所示,CPU对每个命令建立一个DSP缓冲表,该DSP缓冲表的内容为该命令用到的所有缓冲(缓冲1、缓冲2……)的IOVA和大小。
CPU对所有的DSP缓冲表(如命令1的DSP缓冲表)和缓冲(缓冲1、缓冲2……)分配内存,并对这些DSP缓冲表和缓冲分别建立从PA到IOVA的映射,且将该映射关系的PA和IOVA,写入IOMMU中的缓冲映射页表。同时,CPU记录下各个输入输出数据的缓冲的CPU地址和IOVA的对应表,并用各个缓冲的IOVA填写命令1的DSP缓冲表。使得CPU能够通过记录的CPU地址对各个缓冲进行读写访问。由此,通过统一的、固定的数据缓冲区IOVA空间进行DSP命令的输入输出数据传输,无需考虑应用多DSP固件时对资源的分配,进一步提高了开发的便捷性。
进一步地,在步骤504后,该方法还包括:
步骤505,写入通信标志位,并通知DSP开始运行命令。
步骤506,进入等待状态,以等待DSP完成中断。
步骤507,响应于通信标志位被DSP置为成功,CPU读取相应的输出缓冲区。
进一步地,该方法还包括:
步骤508,响应于通信标志位被DSP置为不成功,控制进入错误处理流程。
在具体示例中,如图11所示,CPU对命令页表分配内存。该命令页表中,包括通信标志位和命令。
其中,通信标志位,用于完成CPU与DSP之间的交互,例如CPU写入通信标志后,发送中断至DSP,DSP收到中断后读取通信标志位,并写入完成标志,发送中断至CPU,完成一次交互。对于命令来说,DSP执行的命令名和相应的DSP缓冲表地址组成一条命令。具体地,在命令名处写入需要DSP执行的命令名,如命令1、命令2等;在DSP缓冲表地址处写入该命令中用到的数据缓冲表映射的IOVA地址。即,使得DSP通过固定的IOVA访问共享内存,IOMMU将DSP访问的IOVA转为PA,来实现通过固定的共享内存IOVA空间进行通信。由此,通过统一的、固定的共享内存IOVA空间进行DSP命令交互,无需考虑应用多DSP固件时对资源的分配,进一步提高了开发的便捷性。
综上所述,根据本申请实施例的基于IOMMU的DSP固件使用方法,基于相应的加载地址,将DSP中的DSP固件,对应预加载至内存中;并响应于接收到DSP固件运行指令,将相应的待运行固件的加载地址,映射至特定的DSP固件运行IOVA空间,确定相应的IOVA地址;以及通过操作DSP基于IOVA地址,运行该固件。由此,既避免了频繁的固件文件的读取和加载操作带来的延迟,能够实现高切换速度,又避免了事先划分每个DSP固件所需使用的内存地址空间带来的不灵活,既提高了使用的灵活性,还通过对每个DSP固件使用统一的、固定的IOVA地址空间来运行固件,而无需考虑应用多DSP固件时对资源的分配,有效提高开发的便捷性。该方法应用于需要较高切换速度的场景时,效果尤为显著。
本申请还提供一种基于IOMMU的DSP固件的***芯片。如图1所示,该***芯片100,包括中央处理器CPU 110、数字信号处理器DSP 120和内存130。
其中,DSP 120被配置有输入输出内存管理单元IOMMU 140和至少两个DSP固件;该至少两个DSP固件,被配置为对应相同的DSP固件运行IOVA空间。
CPU 110被配置为基于相应的加载地址,将至少两个DSP固件,对应预加载至内存中;响应于接收到DSP固件运行指令,将DSP固件运行指令相应的DSP固件的加载地址,映射至DSP固件运行IOVA空间,并确定相应的IOVA地址。
DSP 120还被配置为基于IOVA地址运行待运行固件。
本申请实施例中,CPU 110还被配置为:在预加载前,确定DSP 120的IOVA空间分配;基于IOVA空间的固定分配,生成DSP固件。
进一步地,CPU 110具体被配置为:将DSP的IOVA空间,至少划分为外设IOVA空间、DSP固件运行IOVA空间、DSP和CPU的共享内存IOVA空间、以及数据缓冲区IOVA空间。
本申请实施例中,CPU 110还被配置为:基于IOVA空间分配,配置DSP的链接脚本;根据链接脚本,链接生成目标格式的至少两个DSP固件。
本申请实施例中,CPU 110还被配置为:在预加载前,基于至少两个DSP固件的固件ID、与固件ID对应的加载地址和固件大小,生成固件加载地址表。
进一步地,CPU 110还被配置为:响应于接收到DSP固件运行指令,确定待运行的固件ID,并通过查询固件加载地址表,根据待运行的固件ID,确定对应的加载地址;将相应的待运行固件中的全部片段进行由物理地址至IOVA地址的第一映射。
进一步地,CPU 110具体被配置为:从待运行固件的程序头部表中,读取该片段在待运行固件中的偏移地址和片段大小;根据待运行固件的加载地址、片段的偏移地址和片段大小,确定片段的实际物理页;从程序头部表中,读取片段的物理地址,用作片段的IOVA地址;将片段的实际物理页映射至IOVA地址,并更新IOMMU的固件映射页表。
进一步地,CPU 110还被配置为:在更新IOMMU的固件映射页表后确定待运行固件中的全部片段的第一映射情况;响应于全部片段未完成第一映射,对未完成第一映射的片段的其中一个,进行第一映射的处理。
进一步地,CPU 110还被配置为:响应于全部片段完成第一映射,操作DSP基于IOVA地址,运行待运行固件。
本申请实施例中,CPU 110还被配置为:与DSP通过共享内存IOVA空间进行DSP命令交互,并通过数据缓冲区IOVA空间传递DSP命令的输入输出数据。
进一步地,CPU 110还被配置为:对发送给DSP的命令分配相应内存;控制IOMMU建立缓冲映射页表,将命令相应的内存映射至数据缓冲区IOVA空间;分配输入输出数据的缓冲区,并控制IOMMU将每个缓冲区映射至数据缓冲区IOVA空间,并写入缓冲映射页表;对每个命令建立一个DSP缓冲表,在DSP缓冲表中填入相应命令用到的缓冲区的IOVA。
进一步地,CPU 110还被配置为:在对每个命令建立一个数据缓冲表,写入通信标志位,并通知DSP开始运行命令;进入等待状态,以等待DSP完成中断;响应于通信标志位被DSP置为成功,CPU读取相应的输出缓冲区。
进一步地,CPU 110还被配置为:响应于通信标志位被DSP置为不成功,控制进入错误处理流程。
需要说明的是,上述实施例中对基于IOMMU的DSP固件使用方法的解释说明也适用于上述实施例中的基于IOMMU的DSP固件的***芯片,此处不再赘述。
图12为本申请实施例的车机的结构框图。参考图12所示,车机1000,包括上述实施例中的基于IOMMU的DSP固件的***芯片100。
为实现上述目的,本申请提供的一种计算机可读存储介质,其上存储有计算机指令,当计算机指令运行时执行如上的基于IOMMU的DSP固件使用方法的步骤。
本申请一个实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的***中所包含的;也可以是单独存在,而未装配入该***中。上述计算机可读存储介质承载有一个或者多个计算机指令,当上述一个或者多个计算机指令被执行时,实现上述实施例的基于IOMMU的DSP固件使用方法的步骤。
本申请的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件,或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。
应该理解的是,虽然说明书附图的流程图中的各个步骤按照箭头的指示依次显示,但这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其他的顺序执行。而且,流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
需要指出的是,上述所提到的具体数值只为了作为示例详细说明本申请的实施,而不应理解为对本申请的限制。在其他例子或实施方式或实施例中,可根据本申请来选择其他数值,在此不作具体限定。
本领域普通技术人员可以理解:以上仅为本申请的优选实施例而已,并不用于限制本申请,尽管参照前述实施例对本申请进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (16)
1.一种基于IOMMU的DSP固件使用方法,其特征在于,应用于***芯片;所述***芯片,包括中央处理器CPU、数字信号处理器DSP和内存;其中,所述DSP被配置有输入输出内存管理单元IOMMU和至少两个DSP固件;在CPU端,所述方法包括,
将所述DSP的IOVA空间进行固定分配,至少划分为外设IOVA空间、DSP固件运行IOVA空间、DSP和CPU的共享内存IOVA空间、以及数据缓冲区IOVA空间;
基于相应的加载地址,将所述至少两个DSP固件,对应预加载至所述内存中;
响应于接收到DSP固件运行指令,将所述DSP固件运行指令相应的待运行固件的加载地址,映射至所述DSP固件运行IOVA空间,并确定相应的IOVA地址;其中,所述至少两个DSP固件的所述DSP固件运行IOVA空间相同;
操作所述DSP基于所述IOVA地址,运行所述待运行固件。
2.根据权利要求1所述的方法,其特征在于,所述基于相应的加载地址,将所述至少两个DSP固件,对应预加载至所述内存中的步骤前,所述方法还包括,
对所述DSP的IOVA空间进行固定分配,以分配出固定的DSP固件运行IOVA空间;
基于所述IOVA空间的所述固定分配,生成所述DSP固件。
3.根据权利要求2所述的方法,其特征在于,所述基于所述IOVA空间的所述固定分配,生成所述DSP固件的步骤包括,
基于所述IOVA空间分配,配置所述DSP的链接脚本;
根据所述链接脚本,链接生成目标格式的所述至少两个DSP固件。
4.根据权利要求3所述的方法,其特征在于,所述目标格式为可执行可链接文件格式。
5.根据权利要求1所述的方法,其特征在于,所述基于相应的加载地址,将所述至少两个DSP固件,对应预加载至所述内存中的步骤前,所述方法还包括,
基于所述至少两个DSP固件的固件ID、与所述固件ID对应的所述加载地址和固件大小,生成固件加载地址表。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括,
响应于接收到所述DSP固件运行指令,确定待运行的固件ID,并通过查询所述固件加载地址表,根据所述待运行的固件ID,确定对应的所述加载地址;
将相应的待运行固件中的全部片段进行由物理地址至IOVA地址的第一映射。
7.根据权利要求6所述的方法,其特征在于,将所述待运行固件中的一个片段进行所述第一映射的步骤,包括,
从所述待运行固件的程序头部表中,读取该片段在所述待运行固件中的偏移地址和片段大小;
根据所述待运行固件的加载地址、所述片段的偏移地址和片段大小,确定所述片段的实际物理页;
从所述程序头部表中,读取所述片段的物理地址,用作所述片段的IOVA地址;
将所述片段的实际物理页映射至所述IOVA地址,并更新所述IOMMU的固件映射页表。
8.根据权利要求7所述的方法,其特征在于,所述更新所述IOMMU的固件映射页表的步骤后,所述方法还包括,
确定所述待运行固件中的全部片段的第一映射情况;
响应于所述全部片段未完成所述第一映射,对未完成所述第一映射的片段的其中一个,进行所述第一映射的处理。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括,
响应于所述全部片段完成所述第一映射,操作所述DSP基于所述IOVA地址,运行所述待运行固件。
10.根据权利要求1所述的方法,其特征在于,所述方法还包括,
与所述DSP通过共享内存IOVA空间进行DSP命令交互,并通过数据缓冲区IOVA空间传递DSP命令的输入输出数据。
11.根据权利要求10所述的方法,其特征在于,所述方法包括,
对发送给所述DSP的命令,分配相应内存;
控制所述IOMMU建立缓冲映射页表,将所述命令相应的内存映射至所述数据缓冲区IOVA空间;
分配输入输出数据的缓冲区,并控制所述IOMMU将每个缓冲区映射至所述数据缓冲区IOVA空间,并写入所述缓冲映射页表;
对每个命令建立一个DSP缓冲表,在所述DSP缓冲表中填入相应命令用到的所述缓冲区的IOVA。
12.根据权利要求11所述的方法,其特征在于,所述对每个命令建立一个数据缓冲表的步骤后,所述方法还包括,
写入通信标志位,并通知所述DSP开始运行所述命令;
进入等待状态,以等待所述DSP完成中断;
响应于所述通信标志位被DSP置为成功,所述CPU读取相应的输出缓冲区。
13.根据权利要求12所述的方法,其特征在于,所述方法还包括,
响应于所述通信标志位被DSP置为不成功,控制进入错误处理流程。
14.一种基于IOMMU的DSP固件的***芯片,其特征在于,包括:
内存;
数字信号处理器DSP,被配置有输入输出内存管理单元IOMMU和至少两个DSP固件;所述至少两个DSP固件,被配置为对应相同的DSP固件运行IOVA空间;和,
中央处理器CPU,被配置为将所述DSP的IOVA空间进行固定分配,至少划分为外设IOVA空间、DSP固件运行IOVA空间、DSP和CPU的共享内存IOVA空间、以及数据缓冲区IOVA空间;以及被配置为基于相应的加载地址,将所述至少两个DSP固件,对应预加载至所述内存中;并响应于接收到DSP固件运行指令,将所述DSP固件运行指令相应的待运行固件的加载地址,映射至所述DSP固件运行IOVA空间,并确定相应的IOVA地址;
所述DSP,还被配置为基于所述IOVA地址运行所述待运行固件。
15.一种车机,其特征在于,包括:如权利要求14所述的基于IOMMU的DSP固件的***芯片。
16.一种计算机可读存储介质,其特征在于,其上存储有计算机指令,当计算机指令运行时执行权利要求1至13中任一项所述的基于IOMMU的DSP固件使用方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311787612.5A CN117453318B (zh) | 2023-12-25 | 2023-12-25 | 基于iommu的dsp固件使用方法、***芯片及车机 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311787612.5A CN117453318B (zh) | 2023-12-25 | 2023-12-25 | 基于iommu的dsp固件使用方法、***芯片及车机 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117453318A CN117453318A (zh) | 2024-01-26 |
CN117453318B true CN117453318B (zh) | 2024-03-15 |
Family
ID=89591457
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311787612.5A Active CN117453318B (zh) | 2023-12-25 | 2023-12-25 | 基于iommu的dsp固件使用方法、***芯片及车机 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117453318B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117785248B (zh) * | 2024-02-28 | 2024-05-24 | 上海励驰半导体有限公司 | 程序升级中关键变量的注册方法、装置、存储介质及芯片 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5596738A (en) * | 1992-01-31 | 1997-01-21 | Teac Corporation | Peripheral device control system using changeable firmware in a single flash memory |
US8046753B1 (en) * | 2003-06-18 | 2011-10-25 | Hewlett-Packard Development Company, L.P. | Mobile handset with symbian OS and update agent |
CN109690505A (zh) * | 2016-09-26 | 2019-04-26 | 英特尔公司 | 用于针对虚拟化输入/输出实施方式的混合层地址映射的设备和方法 |
CN113434453A (zh) * | 2020-03-06 | 2021-09-24 | 三星电子株式会社 | 片上***及其操作方法 |
CN114416147A (zh) * | 2022-01-21 | 2022-04-29 | 深圳宏芯宇电子股份有限公司 | 固件载入方法、存储器及计算机可读存储介质 |
CN114546441A (zh) * | 2022-02-15 | 2022-05-27 | 南京芯驰半导体科技有限公司 | 一种dsp与cpu通信方式的动态设定方法 |
CN114721735A (zh) * | 2022-03-04 | 2022-07-08 | 珠海海奇半导体有限公司 | 一种程序动态加载方法、装置及电子设备 |
US11616764B1 (en) * | 2019-12-30 | 2023-03-28 | Marvell Asia Pte Ltd. | In-band DSP management interface |
CN116893837A (zh) * | 2023-07-31 | 2023-10-17 | 浙江奥思伟尔电动科技有限公司 | 一种用于电动汽车的ecu的无感刷新方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4530059B2 (ja) * | 2008-02-18 | 2010-08-25 | 日本電気株式会社 | ディスクアレイ装置、ファームウェア交換方法およびファームウェア交換プログラム |
US10025584B2 (en) * | 2016-02-29 | 2018-07-17 | International Business Machines Corporation | Firmware management of SR-IOV adapters |
US11269619B2 (en) * | 2019-06-27 | 2022-03-08 | Phosphorus Cybersecurity Inc. | Firmware management for IoT devices |
-
2023
- 2023-12-25 CN CN202311787612.5A patent/CN117453318B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5596738A (en) * | 1992-01-31 | 1997-01-21 | Teac Corporation | Peripheral device control system using changeable firmware in a single flash memory |
US8046753B1 (en) * | 2003-06-18 | 2011-10-25 | Hewlett-Packard Development Company, L.P. | Mobile handset with symbian OS and update agent |
CN109690505A (zh) * | 2016-09-26 | 2019-04-26 | 英特尔公司 | 用于针对虚拟化输入/输出实施方式的混合层地址映射的设备和方法 |
US11616764B1 (en) * | 2019-12-30 | 2023-03-28 | Marvell Asia Pte Ltd. | In-band DSP management interface |
CN113434453A (zh) * | 2020-03-06 | 2021-09-24 | 三星电子株式会社 | 片上***及其操作方法 |
CN114416147A (zh) * | 2022-01-21 | 2022-04-29 | 深圳宏芯宇电子股份有限公司 | 固件载入方法、存储器及计算机可读存储介质 |
CN114546441A (zh) * | 2022-02-15 | 2022-05-27 | 南京芯驰半导体科技有限公司 | 一种dsp与cpu通信方式的动态设定方法 |
CN114721735A (zh) * | 2022-03-04 | 2022-07-08 | 珠海海奇半导体有限公司 | 一种程序动态加载方法、装置及电子设备 |
CN116893837A (zh) * | 2023-07-31 | 2023-10-17 | 浙江奥思伟尔电动科技有限公司 | 一种用于电动汽车的ecu的无感刷新方法 |
Also Published As
Publication number | Publication date |
---|---|
CN117453318A (zh) | 2024-01-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN117453318B (zh) | 基于iommu的dsp固件使用方法、***芯片及车机 | |
US9086920B2 (en) | Device for managing data buffers in a memory space divided into a plurality of memory elements | |
CN107967225B (zh) | 数据传输方法、装置、计算机可读存储介质和终端设备 | |
CN109901791B (zh) | 信息处理装置以及信息处理装置的执行方法 | |
CN107870879B (zh) | 一种数据搬移方法、加速器板卡、主机及数据搬移*** | |
CN102279712A (zh) | 一种适用于互联网存储***的存储控制方法、***和装置 | |
CN112783600A (zh) | 中断处理方法、中断管理器、电子设备、计算机可读介质 | |
US20100169546A1 (en) | Flash memory access circuit | |
US20190155765A1 (en) | Operation method of host system including storage device and operation method of storage device controller | |
CN111258932A (zh) | 加速ufs协议处理的方法与存储控制器 | |
US11966585B2 (en) | Storage device and storage system | |
WO2014192144A1 (ja) | 制御装置および制御方法 | |
CN115629882A (zh) | 多进程中的内存的管理方法 | |
CN117312201B (zh) | 一种数据传输方法、装置及加速器设备、主机和存储介质 | |
US11550504B2 (en) | System including an application processor and a data storage device providing data | |
KR100316190B1 (ko) | 로컬 메모리에서 패킷화된 동작 정보의 기억을 통한 입출력 성능을 증가시키기 위한 시스템 | |
CN113296691A (zh) | 数据处理***、方法、装置以及电子设备 | |
CN116486868A (zh) | 计算高速链路(CXL)上的高速非易失性存储器(NVMe) | |
US8234651B2 (en) | Information processing method and apparatus using the same | |
US20080209085A1 (en) | Semiconductor device and dma transfer method | |
CN112445412B (zh) | 一种数据存储方法及装置 | |
TWI486966B (zh) | 快閃記憶體儲存裝置、其控制器與寫入管理方法 | |
JP4983133B2 (ja) | 入出力制御装置およびその制御方法、並びにプログラム | |
US6928492B1 (en) | Computer I/O device access method | |
CN114721600B (zh) | NVMe设备中软硬件协同的命令解析***及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |