某个MSM8953的项目,在调试的过程中遇到uart6只能发不能收的情况。android 9.0版本,GPIO的配置如下:
客户要求使用4组uart:uart2、uart4、uart6为低速串口,uart5为高速串口。
设备树配置如下:
//uart2: GPIO4,5 ttyMSM0
&blsp1_uart0 {
status = "ok";
pinctrl-names = "default";
pinctrl-0 = <&uart_console_active>;
};
//uart4: GPIO12,13 ttyMSM1
&blsp1_serial1 {
status = "ok";
pinctrl-names = "sleep", "default";
pinctrl-0 = <&blsp1_serial1_sleep>;
pinctrl-1 = <&blsp1_serial1_active>;
};
//uart5: GPIO16-17-18-19 ttyHS0 (High-speed)
&blsp2_uart0 {
status = "ok";
};
//uart6:GPIO20,21 ttyMSM2
&blsp2_serial1 {
status = "ok";
pinctrl-names = "default";
pinctrl-0 = <&uart1_console_active>;
};
比较怪异的是uart2、4、5都是正常的,uart6只能发,不能收;验证故障时还发现不同的编译主机上单独编译boot,单独刷boot时功能还是正常的。
分析过程:
1.首先排查驱动是不会有问题的,因为所有的低速uart设备都是共用同一个驱动的。
2.排查gpio的权限设置。8953 GPIO的权限设置在modem侧:TZ.BF.4.0.5/trustzone_images/core/buses/qup_accesscontrol/bear/config/QUPAC_8953_Access.xml
检查这里BLSP6的权限是已经设为AC_NONE的:
// This instance is reserved for SPI Sensors use case in ADSP.
<device id=BLSP_QUP_6_DEV_ACCESS>
<props name="CHIP_BUS_INDEX" type=DALPROP_ATTR_TYPE_UINT32> BLSP_QUP_6 </props>
<props name="BUS_PROTOCOL" type=DALPROP_ATTR_TYPE_UINT32> PROTOCOL_SPI </props>
<props name="IS_GPIO_PROTECTED" type=DALPROP_ATTR_TYPE_UINT32> 0 </props>
<props name="GPIO_NUMBERS" type=DALPROP_ATTR_TYPE_BYTE_SEQ> 20, 21, 22, 23, end </props>
<props name="GPIO_RG_INDEX" type=DALPROP_ATTR_TYPE_BYTE_SEQ> end </props>
//Begin:Modify to reconfigure gpio20/21/22/23 in HLOS
//<props name="SUBSYSTEM_ID" type=DALPROP_ATTR_TYPE_UINT32> AC_ADSP_