ZHCABB2 June   2021 DRA821U , DRA829J , DRA829V , TDA4VM , TDA4VM-Q1

 

  1.   摘要
  2.   商标
  3. 1引言
  4. 2防火墙文档
    1. 2.1 技术参考手册 (TRM)
    2. 2.2 SDK TISCI 文档
    3. 2.3 SDK 防火墙文档
    4. 2.4 TI NDA 防火墙幻灯片组
  5. 3防火墙定义和术语
  6. 4SysConfig 工具
  7. 5主防火墙与从防火墙
    1. 5.1 从防火墙
    2. 5.2 主防火墙
    3. 5.3 A72 主防火墙
  8. 6防火墙的位置
    1. 6.1 示例
  9. 7防火墙编程
    1. 7.1 示例 SBL 代码
      1. 7.1.1 创建表
      2. 7.1.2 解析防火墙区域表
      3. 7.1.3 实用功能
      4. 7.1.4 Processor SDK 7.1 SBL 示例

解析防火墙区域表

对于防火墙区域表中的每个条目,

  1. 使用定义的 TISCI API 来设置所有权
  2. 使用定义的 TISCI API 对区域进行编程

在本例中,所有权设置为 MCU Boot Island(SBL 代码将在其中运行)。

uint32_t i = 0;
	uint32_t j = 0;
	uint32_t j721e_fwl_count = 3;  // Number of entries

	struct tisci_msg_fwl_set_firewall_region_resp respFwCtrl = {0};
	struct tisci_msg_fwl_set_firewall_region_req reqFwCtrl;

	for (i = 0; i < j721e_fwl_count; i++)
	{
		/* Setting Owner */
		struct tisci_msg_fwl_change_owner_info_req req;
		req.fwl_id = (uint16_t)j721e_fwl_data[i].fwl_id;
		req.region = (uint16_t) j721e_fwl_data[i].region;
		req.owner_index = (uint8_t) HOST_ID_MCU_0_R5_1; // Cortex R5 context 1 on MCU island(Boot)

		struct tisci_msg_fwl_change_owner_info_resp resp = {0};		status = Sciclient_firewallChangeOwnerInfo(&req, &resp, SCICLIENT_SERVICE_WAIT_FOREVER);
		if (status != CSL_PASS)
		{
			SBL_log(SBL_LOG_ERR,"Firewall Unable to change Owner, %d\n", i);
			J721E_dump_owner_req(&req);
		}

		/* Setting Region */
		reqFwCtrl.fwl_id = (uint16_t) j721e_fwl_data[i].fwl_id;
		reqFwCtrl.region = (uint16_t) j721e_fwl_data[i].region;
		reqFwCtrl.n_permission_regs = (uint32_t) j721e_fwl_data[i].n_permission_regs;
		reqFwCtrl.control = (uint32_t) j721e_fwl_data[i].control;
		for(j = 0; j < reqFwCtrl.n_permission_regs; j++)
		{
			reqFwCtrl.permissions[j] = (uint32_t) j721e_fwl_data[i].permissions[j];
		}
		reqFwCtrl.start_address = j721e_fwl_data[i].start_address;
		reqFwCtrl.end_address = j721e_fwl_data[i].end_address;

		status = Sciclient_firewallSetRegion(&reqFwCtrl, &respFwCtrl, SCICLIENT_SERVICE_WAIT_FOREVER);
		if (status != CSL_PASS)
		{
			SBL_log(SBL_LOG_ERR,"Firewall entry/%d, region set failed.\n", i);
			J721E_dump_region_req(&reqFwCtrl);
		}
	}