微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > mt6735Modem如何修改一个SBP feature的值?

mt6735Modem如何修改一个SBP feature的值?

时间:10-02 整理:3721RD 点击:
[DESCRIPTION]
Modem如何修改一个SBP feature的值?
[SOLUTION]
首先,SBP这个feature的作用:
1.是将一些和运营商有关feature可以通过NVRAM的配置来开关,而不用每次开关一些feature都要做flavor build,节省双方的effort;
2.我们在custom_nvram_config函数里有预先内置一些SBP ID对应的运营商,详细内容可以参看:
http://online.mediatek.inc/Pages/FAQ.aspx?List=SW&FAQID=FAQ02941

这样藉由AP的SBP ID设定,透过CCCI带给modem,然后modem通过custom_nvram_config函数来设定对应的NVRAM,客户可以通过
custom_nvram_config(),自行修改某个设定的SBP ID,对应的各个feature的开关,从而实现一个load可以对应多个运营商的目的。

其次,如果只是在现有load上开关某一个feature的话,建议可以直接修改modem的对应的NVRAM,而不是通过AP的SBP ID设定的方式。
要找某个feature有没有开关的话,请参看dcc上的文档:SBP_Design.doc.链接为:
http://dms.mediatek.inc:80/webtop/drl/objectId/0900006f80a220d6

其中,修改modem的对应的nvram的值分两种方式:

1.在code里修改默认值,这样修改的好处就是即使恢复出厂设置,或者升级软件,这个修改也是生效的;
修改默认值分两种case:

[1]这个feature是定义在除NVRAM_EF_SBP_MODEM_CONFIG_LID/NVRAM_EF_SBP_MODEM_DATA_CONFIG_LID的其他NVRAM里的:
以要disable bit 1: slotFormat4 and bit 4: supportEDPDCHpowerInterpolation in “r7_cap2”为例:
查看文档可以看到这个是定义在NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_LID里,要修改default值的话,首先贵司要了解NVRAM的一些基本内容,比如
nvram的dafault值在哪里定义的,首先搜这个LID的total这个参数,以NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_LID为例,就是搜索
NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_TOTAL,搜到包含这个NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_TOTAL的.c文件,而不是.h文件,贵司可以看
到这个是对NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_LID的元素的基本定义,其中第四个参数就是default值。

举例,NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_LID的元素定义就在nvram_data_itEMS.c里,内容如下:
{
NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_LID,
NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_TOTAL,
NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_SIZE,
NVRAM_NORMAL(NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_DEFAULT),
NVRAM_CATEGORY_USER,
NVRAM_ATTR_AVERAGE,
#ifdef __UMTS_FDD_MODE__
"UM04",
#endif
#ifdef __UMTS_TDD128_MODE__
"UM05",
#endif
VER(NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_LID)
},
可以看到第4个参数是:NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_DEFAULT
点进这个default值看一下,贵司可以看到注释里有:r7_cap2:
/* r7_cap2: USIME_R7_Cap2
* bit 8~7: not used
* bit 6: supportofPSHandoverToGAN
* bit 5: supportofTxDivOnNonMIMOChannel
* bit 4: supportEDPDCHPowerInterpolation
* bit 3: supportForTwoDRXSchemesInPCH
* bit 2: supportForEDPCCHPowerBoosting
* bit 1: slotFormat4 */
0x00+ /* supportofPSHandoverToGAN: 0X20 supported, 0x00 not supported */
0x00+ /* supportofTxDivOnNonMIMOChannel: 0x10 supported, 0x00 not supported */
0x00+ /* supportEDPDCHPowerInterpolation: 0x08 supported, 0x00 not supported */
0x04+ /* supportForTwoDRXSchemesInPCH: 0x04 supported, 0x00 not supported */
0x02+ /* supportForEDPCCHPowerBoosting: 0x02 supported, 0x00 not supported */
0x01 /* slotFormat4: 0x01 supported, 0x00 not supported */
#endif /* __UMTS_R7__ */

比如说,我现在要disable bit 1,只要修改为:
/* r7_cap2: USIME_R7_Cap2
* bit 8~7: not used
* bit 6: supportofPSHandoverToGAN
* bit 5: supportofTxDivOnNonMIMOChannel
* bit 4: supportEDPDCHPowerInterpolation
* bit 3: supportForTwoDRXSchemesInPCH
* bit 2: supportForEDPCCHPowerBoosting
* bit 1: slotFormat4 */
0x00+ /* supportofPSHandoverToGAN: 0x20 supported, 0x00 not supported */
0x00+ /* supportofTxDivOnNonMIMOChannel: 0x10 supported, 0x00 not supported */
0x00+ /* supportEDPDCHPowerInterpolation: 0x08 supported, 0x00 not supported */
0x04+ /* supportForTwoDRXSchemesInPCH: 0x04 supported, 0x00 not supported */
0x02+ /* supportForEDPCCHPowerBoosting: 0x02 supported, 0x00 not supported */
#endif /* __UMTS_R7__ */
就可以了。

最后,修改完之后,要生效的话,需要升级这个nvram lid的verno,只需要找到这个nvram verno,然后加1就可以了。
以NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_LID为例,他的verno值就是NVRAM_EF_UMTS_USIME_RRC_DYNAMIC_CAP_LID_VERNO,如果它原来是018的话
,将其修改为019就可以了,或者贵司不想修改verno值的话,那total format之后升级,也可以达到更新nvram的目的。

[2]这个feature是定义在除NVRAM_EF_SBP_MODEM_CONFIG_LID/NVRAM_EF_SBP_MODEM_DATA_CONFIG_LID;
以Disable "MM_RETRY_ABNORMAL_LAI_TIMER" and Enable "PLMN_SEARCH_AFTER_LU_ABNORMAL"为例:
disable "MM_RETRY_ABNORMAL_LAI_TIMER"对应的是SBP_MM_DISABLE_RETRY_ABNORMAL_LAI,
Enable "PLMN_SEARCH_AFTER_LU_ABNORMAL"对应的是SBP_MM_PERFORM_PLMN_SEARCH_AFTER_LU_ABNORMAL,关于sbp的enum值可参见
sbp_md_feature_enum。

像这种修改SBP NVRAM的feature也是一样,先找到default值在哪里,以NVRAM_EF_SBP_MODEM_CONFIG_LID为例,他的defaut值就是
:NVRAM_EF_SBP_MODEM_CONFIG_DEFAULT,通过sbp_md_feature_enum我们可以知道SBP_MM_DISABLE_RETRY_ABNORMAL_LAI是第1个字节第4个bit(从1
数起),SBP_MM_PERFORM_PLMN_SEARCH_AFTER_LU_ABNORMAL对应第4个字节的第7个bit,要enable的话,只需要将这个bit改为1,要disable的话,只需
改为0。

举例,disable SBP_MM_DISABLE_RETRY_ABNORMAL_LAI的话,只需要找到NVRAM_EF_SBP_MODEM_CONFIG_DEFAULT,看到他的第1个字节第4个bit是这样
定义的:
#if defined(__MM_DISABLE_RETRY_ABNORMAL_LAI__)
0x08 |
#endif
之所以还有宏控制,是因为要兼容以前的版本,要disable的话,只需要将这三行全部注释掉:
//#if defined(__MM_DISABLE_RETRY_ABNORMAL_LAI__)
// 0x08 |
//#endif
同时要enable SBP_MM_PERFORM_PLMN_SEARCH_AFTER_LU_ABNORMAL的话 :只需要将#if defined(__MM_PERFORM_PLMN_SEARCH_AFTER_LU_ABNORMAL__)
0x40 |
#endif
修改为 :
0x40 |
也就是将判断条件删掉。

最后,nvram的修改要生效的话,需要修改nvram verno值,也就是升级: NVRAM_EF_SBP_MODEM_CONFIG_LID_VERNO。

2.使用meta修改,这种方法是修改现有值,而不是默认值,这样修改的弊端是在恢复出厂设置和升级版本之后,会恢复默认值,而不是meta修改后的
值,关于meta修改哪一个字节,可以通过方法1介绍的找default值的方法找到这个nvram的结构体定义,从而知道这个feature具体修改哪一个字节或
者bit。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top