问题:
某项目需要增加一个GRFC脚来控制某个对应band的逻辑,在对应的band中增加GRFC控制后,测试发现注册到该band就会重启。
rfc_sig_info_type rf_card_sdr105_riot_cls3_9x05_rx0_gsm_g900_sig_cfg =
{
RFC_ENCODED_REVISION,
{
//begin: stone added for ana switch
#ifdef RF_TUNER
{ (int)RFC_SDR105_RIOT_CLS3_9X05_RF_PATH_SEL_09, { RFC_HIGH, -10 }, {RFC_LOW, 0 } },
{ (int)RFC_SDR105_RIOT_CLS3_9X05_RF_PATH_SEL_01, { RFC_LOW, -10 }, {RFC_LOW, 0 } },
#endif
//end: stone added for ana switch
{ (int)RFC_SDR105_RIOT_CLS3_9X05_TIMING_ASM_CTL, { RFC_CONFIG_ONLY /*Warning: Not specified*/ , -40 }, {RFC_LOW, 0 } },
{ (int)RFC_SDR105_RIOT_CLS3_9X05_TIMING_TUNER_CTL, { RFC_CONFIG_ONLY /*Warning: Not specified*/ , -100 }, {RFC_LOW, 0 } },
{ (int)RFC_SIG_LIST_END, { RFC_LOW, 0 }, {RFC_LOW, 0 } }
},
};
如上所示,在gsm900的接收sig中增加了两个GRFC,就会导致在gsm测试时重启。
分析:
在lte对应的band中增加GRFC并没有出现这个问题。解析dump,发现了crash的原因:
As per information from the dumps, we can observe while accessing GSM900 RX Start Burst, number of FE devices configured from your end were 3, while based on number of FE components we have made the MACRO as #define RFGSM_RX_START_MAX_TASKS_TASKQ_B 3, but now from the dumps we can see for ASM two transactions were happen consider 2 tasks were marked, for GRFC also 2 transactions were happen consider 2 tasks were added here, so in total we can there are 4 tasks were created but we have limit only for 3 tasks which is the reason for crash,
Could you please share build details and about.html on which we can provide an debug ST by increasing the MACRO value to 4 as we can observe 4 tasks were active, #define RFGSM_RX_START_MAX_TASKS_TASKQ_B 4
//CSR prints:
0x0000000020BFB0A1 | 28.616328: CCS:H rflm_ccs.cc:455 | CCS_RF_CALLBACK 0xd4030b40 finished, start_time=12561969, duration=614, event_id/task_idx=0x1000002, tq_idx=0
0x0000000020BFB0B3 | 28.616329: NONE:E rflm_ccs.cc:462 | RFLM_WARNING_CCS_LONG_USR_CALLBACK: CCS_RF_CALLBACK 0xd4030b40 start_time=12561969, duration=614, event_id/task_idx=0x1000002, tq_idx=0
0x0000000020C4F2E6 | 28.634279: NONE:F rfcommon_mdsp_event_builder_internal.c:1081 | RFCCS Event: Out of pool resources. max_tasks_allocated=3 not enough. Curr_idx=3. handle=0x804beb10
//ASM:
Here from the below info we can observe that slave_id, channel and star_delta were changed so it is considered to be 2 tasks were happen this.
rffe = 0x802058B0 -> (
(rd_wr = RF_HAL_BUS_WRITE, channel = 1, slave_id = 14, rd_delay = 0, half_rate = 0, num_bytes = 1, addr = 2, data = (18, 0, 0, 0), start_delta = -43, extended_cmd = 0),
(rd_wr = RF_HAL_BUS_WRITE, channel = 1, slave_id = 14, rd_delay = 0, half_rate = 0, num_bytes = 1, addr = 28, data = (1, 0, 0, 0), start_delta = -43, extended_cmd = 0),
(rd_wr = RF_HAL_BUS_WRITE, channel = 1, slave_id = 10, rd_delay = 0, half_rate = 0, num_bytes = 1, addr = 11, data = (12, 0, 0, 0), start_delta = -45, extended_cmd = 0),
(rd_wr = RF_HAL_BUS_WRITE, channel = 1, slave_id = 10, rd_delay = 0, half_rate = 0, num_bytes = 1, addr = 1, data = (7, 0, 0, 0), start_delta = -45, extended_cmd = 0),
(rd_wr = RF_HAL_BUS_WRITE, channel = 1, slave_id = 10, rd_delay = 0, half_rate = 0, num_bytes = 1, addr = 28, data = (2, 0, 0, 0), start_delta = -45, extended_cmd = 0)),
rffe_groups = 0x802058B0),
//GRFC
Here from the GRFC we can observe grfc_id changed from 1 to 0 which is considered as 2 tasks were active
grfc = (
script_type = RF_HAL_BUS_RESOURCE_GRFC,
script_ptr = (
sbi = 0x80205F80,
grfc = 0x80205F80 -> (
(grfc_id = 1, start_delta = 0, start_logic = 1),
(grfc_id = 0, start_delta = 0, start_logic = 0),
(grfc_id = 0, start_delta = 0, start_logic = 0),
(grfc_id = 0, start_delta = 0, start_logic = 0),
(grfc_id = 0, start_delta = 0, start_logic = 0)),
From these analysis we have observed that MAX_TASKS were reached out of 3,
there is CR#2651037 attached for this known issue, also the MACRO changes for RX_START and RX_STOP were mainlined in latest CRM build,
Actually from the latest dumps we can observe some memory corruption this might be due to compilation or integration issue which will be raised when changes were made from your end,
Could you please include the CR which i have attached, test the scenario with the CR changes and kindly share the results, after that we can raise CR planner request to TAM.
这里rx /tx task的任务总数超过了范围,按照CR#2651037改大后就可以了。修改文件为:modem_proc/rflm/api/gsm/rflm_gsm_dm.h
#define RFGSM_RX_START_MAX_TASKS_TASKQ_A 3 -->4
#define RFGSM_TX_START_MAX_TASKS_TASKQ_A 3 -->4
同样在WCDMA和LTE中也要注意:不能在rfc_sig_info_type中加太多的GRFC,会导致任务总数超过范围值而重启的。