杂记:Cortex™-A8 am335x cpsw (一)

14.1简介

3口的以太网子系统。它提供以太网包通信,并且可以配置成以太网交换机,提供GMII,RGMII,RMII,MDIO物理接口。

14.2一览

这个设备包含一个3口的千兆以太网交换机子系统CPSW_3GSS_RG,它提供两个外部的以太网接口port1和port2,

和一个内部的支持IEEE 1588v2 and 802.1ae的接口port0。

14.3功能描述

14.3.1 cpsw_3g 子系统

14.3.1.1中断调速

接受和发送脉冲中断可以调速,接收越线和混杂中断不能调速。

14.3.1.2重启隔离

只有POR pin reset and ICEPICK COLD reset可以让交换机重启。

14.3.1.3

14.3.1.3.1 接收Packet完成脉冲中断RX_PULSE

八通道,RX_PEND [7:0] interrupts.

置一相应的位RX_INTMASK_SET,Cn_RX_EN,被屏蔽的可以从Cn_RX_STAT得到

中断通过子系统写packet的最后一个buffer描述符地址到通道队列的接收完成指针地址。

中断接收到后,cpu需要写自己处理的最后一个buffer描述符到通道队列的接收完成指针地址RXn_CP来应答中断。

软件需要做如下操作。

读RX_STAT寄存器,确定那个通道发的中断。

处理接收到的packets。

写3PSW completion pointer(s) (RXn_CP).软件写的值会和子系统写的值相比较,如果不相等,则意味着,软件没有

· 把所有的buffer处理完,这个中断会一直保持触发状态。通过读RXn_CP,可以知道子系统写的值。

对CPDMA_EOI_VECTOR寄存器写1.

取消中断如下:

写一到RX_INTMASK_CLEAR,RX_EN清零

14.3.1.3.2发送Packet完成脉冲中断TX_PULSE

与接收套路一样

14.3.1.3.3

使能写一到RX_INTMASK_SET,RX_THRESH_EN

中断触发,通告空闲buffer计数RXn_FREEBUFFER,小于等于RXn_PENDTHRESH。

读Cn_RX_THRESH_STAT,确定那个通道

处理接收到的packets并增加更多的buffer。

写完成指针地址。

写0到CPDMA_EOI_VECTOR

禁止:RX_INTMASK_CLEAR写一,清零RX_THRESH_EN

14.3.1.3.4混杂中断(EVNT_PEND, STAT_PEND, HOST_PEND, MDIO_LINKINT, MDIO_USERINT).

Cn_MISC_EN[4:0 ]Cn_MISC_STAT[4:0]

   读Misc_Stat[4:0],确定中断源

处理中断

(0x3)写到CPDMA_EOI_VECTOR

MDIO_LINTINT[1] and MDIO_USERINT[1]没用到


14.3.2 cpsw_3g

符合IEEE Std 802.3标准

它包含两个CPGMAC_SL 接口(ports 1 and 2),

一个CPPI 3.0接口(port 0),

通用平台时间对时cpts

ale engine(adress lookup engine)

cpdma

14.3.2.4 CPDMA RX and TX 接口

CPDMA 子模块是cppi3.0协议的dma packets传输控制器,他是port0。

主控写 STATERAM块里面的 发送通道头描述符指针地址 来初始化发送操作。

这样发送dma控制器会从packet链里面取出packet发送到外部的发送fifo里面去,64字节最大一次。

接收差不多

14.3.2.4.1 CPPI Buffer 描述符

描述符用来描述一个buffer的信息,并且描述符是链表形式连接在一起的。

8K的cppi ram 地址从0x4a102000到0x4a103FFF。

14.3.2.4.1.1 TX Buffer 描述符

Next Descriptor Pointer下一描述符指针,标识下一个描述符的地址。

主控设置,emac不会设置。一旦加入了发送queue,不要改,除非这个值为NULL,并且有新的

描述符要添加到它的后面。如果在添加之前,emc就已经处理完了NULL的描述符(读EOQ标识),则需要重新启动发送。

Buffer Pointer

主控设置,emac不会设置。

Buffer _Offset

buffer头部有多少字节不能用。只有sop(pakcet头有用)

Buffer _Length

buffer中有效字节长度,不包括无用字节数offset,必须要大于零。

Start of Packet (SOP) Flag

主控设置,emac不会设置。指示是一个新packet的第一个buffer描述符。

End of Packet (EOP) Flag

主控设置,emac不会设置。指示是一个packet的最后一个buffer描述符。

Ownership

为一的话表明从sop到eop的描述符现在控制权在emac。主控设置1,emac清零如果发送完了

只用在sop描述符上。

EOQ

为一的话表明,这个描述符是整个发送通道的最后一个描述符,并且发送被挂起。

主控清零,emac置一。

只用在eop描述符上。

teardown_Complete

只有在device driver reset or shutdown conditions

emac置一 在所有的sop描述符上

pass_crc

主控置一,在sop上

标识packet数据里面已经有4字节的crc校验了。emac不要再添加了

to_port

发送到哪个port上去,sop有效

但是ale查询会执行 用来确定没有标签的出口  在VLAN_AWARE模式

To_port_enable

sop有效,只送往一个port

Packet Length

所有buffer加在一起,整个packet的有效长度。sop有效。如果长度不对会触发错误中断


14.3.2.4.1.2 RX Buffer Descriptors

rx_vlan_encap

置一表明,这个packet有32bit的vlan头。被CPSW control register rx_vlan_encap bit控制

14.3.2.4.2 Receive DMA Interface

Initialize the receive addresses.
• Initialize the Rx_HDP Registers to zero.
• Enable the desired receive interrupts in the IntMask register.
• Write the rx_buffer_offset register value.
• Setup the receive channel(s) buffer descriptors in host memory as required by CPPI 3.0.
• Enable the RX DMA controller by setting the rx_en bit in the Rx_Control register.


14.3.2.4.3 Transmit DMA Interface

 8个通道,优先级固定模式,和round robin模式,7最高。TX_VBUSP接口64字节发送。

Initialize the Tx_HDP registers to a zero value.
• Enable the desired transmit interrupts in the IntMask register.
• Setup the transmit channel(s) buffer descriptors in host memory as defined in CPPI 3.0.
• Configure and enable the transmit operation as desired in the TxControl register.
• Write the appropriate Tx_HDP registers with the appropriate values to start transmit operations.

14.3.2.5 VLAN Aware Mode

  CPSW Control register的 vlan_aware bit 置一。

  port0从cpsw_3g接收的packets也许是或者不是vlan封装的,决定于CPSW Control register的 rx_vlan_encap bit.

  port0接收的数据不会更改。vlan封装数据有个32位的头加在包的数据上。从packet描述符中的 rx_vlan_encap判断。

  port0不能发送vlan封装的包。

  这种模式下,发送packet的数据会根据头改变。

14.3.2.7 Address Lookup Engine (ALE)

判据:

  接收port

目的地址

源地址

长度和类型

vlan信息。

使能:ale_enable bit in ale_control寄存器

不使能,所用packet都会丢弃。

正常情况下,cpgmac_sl会把异常数据packet丢弃,除非设置了cef, csf, or cmf,这样只送往port0.

学习基于源地址,查找基于目的地址。

在bypass模式下,ale_bypass bit in the ALE_Control寄存器。

cpgmac_sl接收的数据只会送往port0,CPDMA_Rx_Ch_Map register.使得packet从不同通道发送。

port0 在发送的时候需要制定发送port号。

在oui禁止模式,enable_oui_deny bit in the ALE_Control寄存器。

oui源地址不匹配,packet被丢弃,除非目的地址匹配广播条目且super bit置位。

广播packet 广播地址有条目且super bit置位

单播地址  地址有条目且block 和 secure bit置位

以上是所谓Supervisory packets。

14.3.2.7.1 Address Table Entry

   1024个条目。代表

空的

地址

vlan

vlan和地址对

oui地址

不能有两个相同地址条目。

多播地址在ale处理前需要改成单播地址,改变他的第40位。

如果packet的源地址和目的地址相同则:学习或更新,且丢弃。

14.3.2.7.1.2 Multicast Address Table Entry

Multicast Forward State (MCAST_FWD_STATE)

表明port状态,接收port需要的状态,为了把packet转发到发送port的 用于packet的目的地址t的查找的状态。

  发送port必须在Forwarding state。

 转发状态测试为真。当发送和几首port都在需要的状态下。

14.3.2.7.1.3 VLAN/Multicast Address Table Entry

14.3.2.7.1.4 Unicast Address Table Entry

DLR Unicast  

1到2,2到1  ,0到1或2

匹配的目的地址发送到vlan_member_list,port_number被忽略。

Block (BLOCK)

源地址或目的地址匹配,则packet丢弃。

Secure (SECURE)

源地址与条目相同,但是接收的port号与条目的port不相匹配,则丢弃。

14.3.2.7.1.5 OUI Unicast Address Table Entry

14.3.2.7.1.6 VLAN/Unicast Address Table Entry

14.3.2.7.1.7 VLAN Table Entry

VLAN ID (VLAN_ID) 12bit

Force Untagged Packet Egress (FORCE_UNTAGGED_EGRESS)

强制去掉vlan封装

VLAN Member List (VLAN_MEMBER_LIST)

vlan包含的的port

14.3.2.7.2 Packet Forwarding Processes

 四道工序,Ingress Filtering, VLAN_Aware Lookup, VLAN_Unaware Lookup, and Egress.

每个port都有packet转发状态 四种  block forwarding learning,disabled(默认)

接收工序,有转发状态测试。


你可能感兴趣的:(杂记:Cortex™-A8 am335x cpsw (一))