本发明属于处理器领域,尤其是涉及一种飞腾处理器内置DMAC的数据传输方法。
背景技术:
DMAC:直接内存存取控制器(Direct Memory Access Controller),它允许某些硬件子系统独立于CPU而访问主系统内存。DMAC模块的基本功能是作为主模块,从DMA源地址读取数据,缓存在本地FIFO中,再将数据写入DMA地址,从而减少数据移动过程中对内核资源的占用。
在现有的技术中,DMAC技术广泛应用于处理器及片上系统Soc中。是一种传输过程不由CPU控制,直接从内存存取数据的数据交换模块,是解决内存和外部芯片之间数据交互的重要技术。DMAC可以作为飞腾处理器的一个外设模块而存在,可以接收飞腾处理器核的参数配置进行数据搬移。可(专门)用于大量数据的搬移,从DMA源地址读取数据,缓存在本地FIFO中,再将数据写入DMA目的地址,从而减少数据搬移过程中对内核资源的占用。
公告号CN107678987A的中国专利公开了一种DMA传输的方法,包括根据接收的DMA传输请求确定传输数据,锁定所述传输数据对应的物理页面;遍历所述物理页面;判断连续物理页面的数目是否累计至预定数目;若是,填写空闲描述符;若否,则基于已获得的连续物理页面,填写空闲描述符;直到所述物理页面遍历完毕;将所述空闲描述符写入板卡端的描述符空间;将所述传输数据发送至所述板卡端。该方法增加了每次启动DMA传输的数据量,适合多线程DMA传输。
但飞腾处理器平台上存在多种DMA传输环境需求,故需要针对不同应用场景来实现相应的DMA传输方法。
技术实现要素:
本发明要解决的问题是提供一种飞腾处理器内置DMAC的数据传输方法,尤其适合要针对不同应用场景来实现飞腾处理器平台上相应的DMA传输。
为解决上述技术问题,本发明采用的技术方案是:提供一种飞腾处理器内置DMAC的数据传输方法,步骤包括:
A010.确认DMA通道空闲;
A020.内核驱动配置DMA模式参数;
A030.内核驱动配置DMA传输参数;
A040.内核驱动触发DMA操作;
A050.DMAC硬件进行DMA传输;
A060.标识一次DMA传输完成。
其中,可通过在A020中改变DMAC的传输模式实现不同应用场景下的DMAC传输。
基本模式是DMAC复位后的默认模式,根据是否由软件直接配置DMAC内部寄存器还是由软件在内存中初始化描述符,由DMAC自动获取描述符进行DMA操作,基本模式又可进一步分为直接模式和链接模式。
在直接模式下,不需要软件在内存中初始化DMA描述符,而是由软件直接写DMAC内部寄存器,配置相关DMA参数,然后触发DMA操作。软件直接配置DMA的源、目的地址及需要传输的字节数,DMAC自动从源地址读出对应的字节,并将其写入目的地址。
在直接模式下通过DMAC进行数据传输的具体步骤包括:
A111.内核驱动读通用状态寄存器,确认对应的DMA通道为idle状态;
A121.内核驱动配置模式寄存器,标识DMA模式为直接模式;
A131.内核驱动配置源参数寄存器、源地址寄存器、目的参数寄存器、目的地址寄存器以及字节计数寄存器;
A141.内核驱动写模式寄存器的启动位[CS],置1;
A151.DMA进行传输时,DMAC置状态寄存器的[CB]位,当DMA传输完成或传输被放弃和/或发生错误时,DMAC硬件清除状态寄存器的[CB]位;
A161.DMAC硬件判断模式寄存器的[EOSIE]位是否被置位,若是,则在完成该segment的DMA操作后触发一次中断;
A162.标识一次DMA传输完成。
其中,执行步骤A121的具体操作为:
内核驱动配置模式寄存器的[XFE]=0,[CTM]=1,[SRW]=0,[EMS_EN]=0。
在链接模式下,内核驱动首先需要在内存中初始化一系列的描述符,这些描述符描述了每一个DMA segment所需的相关参数,且这些描述符之间互相链接成链,这些描述符之间的链被称作link。内核驱动只需要些DMAC内部寄存器,指向第一个描述符,DMAC就会自动从内存中读取描述符进行DMA,直到处理完内存中所有的链接在一起的描述符,才表示DMA操作完成。
在链接模式下通过DMAC进行数据传输的具体步骤包括:
A201.内核驱动在内存中初始化一系列描述符,将所述描述符组织成link;
A211.内核驱动读通用状态寄存器,确认对应的DMA通道为idle状态;
A221.内核驱动配置模式寄存器,标识DMA模式为链接模式;
A231.内核驱动写当前link描述符地址寄存器和当前link描述符扩展地址寄存器,指向内存中的第一个link描述符;
A241.内核驱动写模式寄存器的启动位[CS],置1;
A251.DMAC硬件置状态寄存器的[CB]位;
A252.DMAC硬件按照A231中设置,从内存中读取当前的link描述符,根据link描述符的内容更新源参数寄存器、源地址寄存器、下一link描述符地址寄存器和下一link描述符扩展地址寄存器,并按更新后的参数值进行当前segment的DMA操作;
A253.当前segment的DMA操作完成后,判断下一link描述符地址寄存器的[EOLND]位是否置1;若否,则根据下一link描述符地址寄存器和下一link描述符扩展地址寄存器更新当前link描述符地址寄存器和当前link描述符扩展地址寄存器,跳至A252;
A254.DMAC硬件清除状态寄存器的[CB]位;
A261.DMAC硬件判断模式寄存器的[EOLNIE]位是否被置位,若是,则在完成整个link的DMA操作后触发一次中断;
A262.标识一次DMA传输完成;
其中,当执行步骤A251,A252,A253时,若DMA传输被放弃或发生错误,则跳至A254。
其中,执行步骤A221时,包括以下具体步骤:
内核驱动配置模式寄存器的[XFE]=0,[CTM]=0,[CDSM]=0,[EMS_EN]=0。
在扩展链接模式下,除了可以将多个描述符组织成link外,还可以将多个link组织成list,以更加灵活的进行DMA操作。
在扩展链接模式下通过DMAC进行数据传输的具体步骤包括:
A301.内核驱动在内存中初始化一系列描述符,将多个描述符组织成link,多条link组织成list;
A311.内核驱动读通用状态寄存器,确认对应的DMA通道为idle状态;
A321.内核驱动配置模式寄存器,标识DMA模式为扩展链接模式;
A331.内核驱动写当前list描述符地址寄存器和当前list描述符扩展地址寄存器,指向内存中的第一个list描述符;
A341.内核驱动写模式寄存器的启动位[CS],置1;
A351.DMAC硬件置状态寄存器的[CB]位;
A352.DMAC硬件按照当前list描述符地址寄存器和当前list描述符扩展地址寄存器的设置,从内存中读取当前list描述符,根据当前list描述符的内容更新当前link描述符地址寄存器、当前link描述符扩展地址寄存器、下一list描述符地址寄存器、下一list描述符扩展地址寄存器、源跨步寄存器、目的跨步寄存器;
A353.DMAC硬件按照当前link描述符地址寄存器和当前link描述符扩展地址寄存器的设置,从内存中读取当前link描述符,根据当前link描述符的内容更新源参数寄存器、源地址寄存器、目的参数寄存器、目的地址寄存器、字节技术寄存器、下一link描述符地址寄存器和下一link描述符扩展地址寄存器;并按更新后的参数值进行当前segment的DMA操作;
A354.当前segment的DMA操作完成后,判断下一link描述符地址寄存器的[EOLND]位是否置1;若否,则根据下一link描述符地址寄存器和下一link描述符扩展地址寄存器更新当前link描述符地址寄存器和当前link描述符扩展地址寄存器,跳至A353;
A355.判断下一list描述符地址寄存器的[EOLSD]位是否被置1;若否,则根据下一list描述符地址寄存器和下一list描述符扩展地址寄存器更新当前list描述符地址寄存器和当前list描述符扩展地址寄存器,跳至A352;
A356.DMAC硬件清除状态寄存器的[CB]位;
A361.DMAC硬件判断模式寄存器的[EOLSIE]位是否被置位,若是,则在完成整个list的DMA操作后触发一次中断;
A362.标识一次DMA传输完成;
其中,当执行步骤A351,A352,A353,A354,A355时,若DMA传输被放弃或发生错误,则跳至A356。
其中,执行步骤A321时,包括以下具体步骤:
内核驱动配置模式寄存器的[XFE]=1,[CTM]=0,[CDSM]=0,[EMS_EN]=0。
通过以上的技术方案,实现了小数据量传输和大数据量传输不同的DMA传输方式,DMA直接操作简单,数据量小;DMA链接传输模式可完成大数据量传输,传输流程较DMA直接操作模式复杂,但是可持续读写大量数据。
综上所述,本发明提供了一种飞腾处理器内置DMAC的数据传输方法,尤其适合针对不同应用场景来实现飞腾处理器平台上相应的DMA传输,操作灵活方便,能应对不同的工作状况。
附图说明
图1是本发明一实施例的DMA传输方法原理示意图
图2是本发明一实施例的直接模式DMA传输方法流程示意图
图3是本发明一实施例的链接模式DMA传输方法流程示意图
图4是本发明一实施例的扩展链接模式DMA传输方法流程示意图
具体实施方式
如图1、本发明一实施例的DMA传输方法原理示意图所示,本发明的一实施例提供一种飞腾处理器内置DMAC的数据传输方法,步骤包括:
A010.确认DMA通道空闲;
A020.内核驱动配置DMA模式参数;
A030.内核驱动配置DMA传输参数;
A040.内核驱动触发DMA操作;
A050.DMAC硬件进行DMA传输;
A060.标识一次DMA传输完成。
其中,可通过在A020中改变DMAC的传输模式实现不同应用场景下的DMAC传输。
如图2、本发明一实施例的直接模式DMA传输方法流程示意图所示,直接模式DMA传输在内核驱动上对应了DMA_MEMCPY传输模式。DMA_MEMCPY为简单的内存搬移,当所有的数据搬移完成后,DMA触发中断,需要使用DMA的设备只需要将源地址和目的地址的总线地址告诉驱动即可。在直接模式下,由内核驱动写寄存器显式触发DMA操作。本发明实施例所提供的直接模式DMA传输操作方法的软硬件流程可包括以下步骤:
A111.内核驱动读通用状态寄存器,确认对应的DMA通道为idle状态;
A121.内核驱动配置模式寄存器,标识DMA模式为直接模式;
A131.内核驱动配置源参数寄存器、源地址寄存器、目的参数寄存器、目的地址寄存器以及字节计数寄存器;
A141.内核驱动写模式寄存器的启动位[CS],置1;
A151.DMA进行传输时,DMAC置状态寄存器的[CB]位,当DMA传输完成或传输被放弃和/或发生错误时,DMAC硬件清除状态寄存器的[CB]位;
A161.DMAC硬件判断模式寄存器的[EOSIE]位是否被置位,若是,则在完成该segment的DMA操作后触发一次中断;
A162.标识一次DMA传输完成。
其中,执行步骤A121的具体操作为:
内核驱动配置模式寄存器的[XFE]=0,[CTM]=1,[SRW]=0,[EMS_EN]=0。
如图3、本发明一实施例的链接模式DMA传输方法流程示意图所示,链接模式DMA传输在内核驱动上对应了DMA_MEMCPY和DMA_SG模式,DMA_SG模式应用于不连续的内存块的搬移,当一个内存块数据传输完成后,DMA自动加载下一个内存块的描述信息,这些内存块的描述信息包括物理地址、长度。目的地址块和源地址块都有这样的描述符。本发明实施例所提供的链接模式DMA传输操作方法的软硬件流程可包括以下步骤:
A201.内核驱动在内存中初始化一系列描述符,将所述描述符组织成link;
A211.内核驱动读通用状态寄存器,确认对应的DMA通道为idle状态;
A221.内核驱动配置模式寄存器,标识DMA模式为链接模式;
A231.内核驱动写当前link描述符地址寄存器和当前link描述符扩展地址寄存器,指向内存中的第一个link描述符;
A241.内核驱动写模式寄存器的启动位[CS],置1;
A251.DMAC硬件置状态寄存器的[CB]位;
A252.DMAC硬件按照A231中设置,从内存中读取当前的link描述符,根据link描述符的内容更新源参数寄存器、源地址寄存器、下一link描述符地址寄存器和下一link描述符扩展地址寄存器,并按更新后的参数值进行当前segment的DMA操作;
A253.当前segment的DMA操作完成后,判断下一link描述符地址寄存器的[EOLND]位是否置1;若否,则根据下一link描述符地址寄存器和下一link描述符扩展地址寄存器更新当前link描述符地址寄存器和当前link描述符扩展地址寄存器,跳至A252;
A254.DMAC硬件清除状态寄存器的[CB]位;
A261.DMAC硬件判断模式寄存器的[EOLNIE]位是否被置位,若是,则在完成整个link的DMA操作后触发一次中断;
A262.标识一次DMA传输完成;
其中,当执行步骤A251,A252,A253时,若DMA传输被放弃或发生错误,则跳至A254。
其中,执行步骤A221时,包括以下具体步骤:
内核驱动配置模式寄存器的[XFE]=0,[CTM]=0,[CDSM]=0,[EMS_EN]=0。
在扩展链接模式下,除了可以将多个描述符组织成link外,还可以将多个link组织成list,以更加灵活的进行DMA操作。
如图4、本发明一实施例的扩展链接模式DMA传输方法流程示意图所示,在扩展链接模式下通过DMAC进行数据传输的具体步骤包括:
A301.内核驱动在内存中初始化一系列描述符,将多个描述符组织成link,多条link组织成list;
A311.内核驱动读通用状态寄存器,确认对应的DMA通道为idle状态;
A321.内核驱动配置模式寄存器,标识DMA模式为扩展链接模式;
A331.内核驱动写当前list描述符地址寄存器和当前list描述符扩展地址寄存器,指向内存中的第一个list描述符;
A341.内核驱动写模式寄存器的启动位[CS],置1;
A351.DMAC硬件置状态寄存器的[CB]位;
A352.DMAC硬件按照当前list描述符地址寄存器和当前list描述符扩展地址寄存器的设置,从内存中读取当前list描述符,根据当前list描述符的内容更新当前link描述符地址寄存器、当前link描述符扩展地址寄存器、下一list描述符地址寄存器、下一list描述符扩展地址寄存器、源跨步寄存器、目的跨步寄存器;
A353.DMAC硬件按照当前link描述符地址寄存器和当前link描述符扩展地址寄存器的设置,从内存中读取当前link描述符,根据当前link描述符的内容更新源参数寄存器、源地址寄存器、目的参数寄存器、目的地址寄存器、字节技术寄存器、下一link描述符地址寄存器和下一link描述符扩展地址寄存器;并按更新后的参数值进行当前segment的DMA操作;
A354.当前segment的DMA操作完成后,判断下一link描述符地址寄存器的[EOLND]位是否置1;若否,则根据下一link描述符地址寄存器和下一link描述符扩展地址寄存器更新当前link描述符地址寄存器和当前link描述符扩展地址寄存器,跳至A353;
A355.判断下一list描述符地址寄存器的[EOLSD]位是否被置1;若否,则根据下一list描述符地址寄存器和下一list描述符扩展地址寄存器更新当前list描述符地址寄存器和当前list描述符扩展地址寄存器,跳至A352;
A356.DMAC硬件清除状态寄存器的[CB]位;
A361.DMAC硬件判断模式寄存器的[EOLSIE]位是否被置位,若是,则在完成整个list的DMA操作后触发一次中断;
A362.标识一次DMA传输完成;
其中,当执行步骤A351,A352,A353,A354,A355时,若DMA传输被放弃或发生错误,则跳至A356。
其中,执行步骤A321时,包括以下具体步骤:
内核驱动配置模式寄存器的[XFE]=1,[CTM]=0,[CDSM]=0,[EMS_EN]=0。
以上各实施例基于飞腾处理器平台实现,可以完成内存-内存、LBC-内存以及PCIe-PCIe(peer to peer)的DMA操作。其具体参照标准可如下:
1、使用DMA直接传输模式做LBC到内存的数据搬移;
2、使用DMA直接传输模式做内存到内存的小数据量搬移;
3、使用DMA链接传输模式做PCIe到PCIe的数据搬移;
4、使用DMA扩展链接传输模式做内存到内存的大数据量搬移
以上对本发明的一个实施例进行了详细说明,但所述内容仅为本发明的较佳实施例,不能被认为用于限定本发明的实施范围。凡依本发明申请范围所作的均等变化与改进等,均应仍归属于本发明的专利涵盖范围之内。