NXP(Freescale) QorIQ T2080 SRIO使用

作者

QQ群:852283276
微信:arm80x86
微信公众号:青儿创客基地
B站:主页 https://space.bilibili.com/208826118

SRIO

SRIO1/2和PCIe2/3共用Serdes,所以不能同时使用,SRIO的寄存器位于CCSR偏移0xC0000,在这里插入图片描述
T2080的SRIO使用需要RMAN,位于CCSR偏移0x1E0000,
在这里插入图片描述
SRIO有8个Outbound ATMU和1个默认的Outbound ATMU,4个Inbound ATMU和1个默认的Inbound ATMU,默认的ATMU不支持Seg,Subseg,可以看到,SRA的代码,9个Outbound ATMU,5个Inbound ATMU,

//from sra
//build_t2080rdb-64b\tmp\work\t2080rdb_64b-fsl-linux\usdpaa\git-r4\git\src\srio\srio_driver.h
#define SRIO_PORT_MAX_NUM	2	/* SRIO port max number */
#define SRIO_OB_WIN_NUM		9	/* SRIO outbound window number */
#define SRIO_IB_WIN_NUM		5	/* SRIO inbound window number */
#define SRIO_MAX_SEG_NUM	4
#define SRIO_MAX_SUBSEG_NUM	8
/* ATMU window registers */
struct rio_atmu_win {
	struct rio_atmu_row	outbw[SRIO_OB_WIN_NUM];
	uint32_t	res0[16];
	struct rio_atmu_riw	inbw[SRIO_IB_WIN_NUM];
};

u-boot

u-boot下SRIO相关代码,

//arch\powerpc\include\asm\fsl_law.h line57
LAW_TRGT_IF_RIO_1 = 0x08,
LAW_TRGT_IF_RIO_2 = 0x09,
//arch\powerpc\cpu\mpc8xxx\law.c line334
case 0x8: /* boot from SRIO1 */
	set_next_law(CONFIG_SYS_SRIO_PCIE_BOOT_SLAVE_ADDR_PHYS,
			LAW_SIZE_1M,
			LAW_TRGT_IF_RIO_1);
	set_next_law(CONFIG_SYS_SRIO_PCIE_BOOT_UCODE_ENV_ADDR_PHYS,
			LAW_SIZE_1M,
			LAW_TRGT_IF_RIO_1);
	break;
...
//arch\powerpc\cpu\mpc8xxx\srio.c line229
void srio_init(void)
{...}

Linux

SDK中没有T2080的例子,但是T2080 RapidIO类似于P3041DS/P4080DS/P5020DS/T4240QDS/B4860QDS开发板的RapidIO,代码是通用的。对于目前使用RMAN的处理器,SDK的SRIO驱动以用户态的形式提供在 USDPAA中,执行bitbake usdpaa/usdpaa-apps -c patch -f可以得到usdpaa的源代码,路径为tmp/work/t2080rdb_64b-fsl-linux/usdpaa/git-r4/git,可参考SDK的FRA程序来使用RMAN,FRA只示例了Data-streaming(RIO_TYPE9)Mailbox(RIO_TYPE11)Doorbell(RIO_TYPE10)Maintenance(RIO_TYPE8)。SRA使用更简单,不需要操作RMAN,但是不支持Mailbox和Doorbell,示例了SWRITENWRITENWRITE_RNREAD。内核下打开驱动支持,所以想支持所有的SRIO应用,FRA/SRA都得搞。

--- Userspace I/O drivers  
<*>   Freescale DMA support   
<*>   Freescale Serial RapidIO support 
<*>   Freescale RapidIO Message Unit support     

设备树需要使用usdpaa的设备树,添加RMAN的设备树,否则fra无法加载,单独使用SRIO时,并不需要网口,所以得修改程序,网络部分并不使用usdpaa。

rman@1e0000 {
	compatible = "fsl,rman";
	#address-cells = <0x1>;
	#size-cells = <0x1>;
	ranges = <0x0 0x1e0000 0x20000>;
	reg = <0x1e0000 0x20000>;
	interrupts = <0x10 0x2 0x1 0xb>;
	fsl,qman-channels-id = <0x880 0x881>;

	inbound-block@0 {
		compatible = "fsl,rman-inbound-block";
		reg = <0x0 0x800>;
	};

	global-cfg@b00 {
		compatible = "fsl,rman-global-cfg";
		reg = <0xb00 0x500>;
	};

	inbound-block@1000 {
		compatible = "fsl,rman-inbound-block";
		reg = <0x1000 0x800>;
	};

	inbound-block@2000 {
		compatible = "fsl,rman-inbound-block";
		reg = <0x2000 0x800>;
	};

	inbound-block@3000 {
		compatible = "fsl,rman-inbound-block";
		reg = <0x3000 0x800>;
	};
};
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值