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(默认)
接收工序,有转发状态测试。