qcom 子系统启动流程

一,名词简写

Qualcom Message Interface (QMI) 高通信息接口

Modem Host Interface (MHI)    modem host侧接口

Board Data File (BDF)        RF 校准数据

Boot Host Interface extended (BHIe)

Secondary Bootloader (SBL)  

WLAN host platform (CNSS platform driver and WLAN host driver)

Wireless Connectivity Subsystem (WCNSS)

PBL (Primary bootloader)  主引导加载程序

二、各部分介绍

WCN39XX 和 WCN 67XX 不同芯片平台,qcom 文档里的流程会有差异,但是整体架构是类似的(当前FW 还是在 modem侧,也FW有独立于modem的)。

当前以 WCN67XX为例:

(1)FW,固件,运行在modem侧(BP)

其余部分运行在AP侧(可以理解跑在主cpu上),对于wlan来说, qcom 驱动和 固件是在不同芯片上,所以需要建立沟通的桥梁。

Modem Host Interface (MHI) 和  Qualcom Message Interface (QMI) 就起到沟通的作用。

(2)QMI 的作用是多个处理器之间进行通信,

  QMI server :WLAN firmware

  QMI client:有2个

  CNSS platform driver -- 1. 负责跟驱动/FW 通信,2. 下载BDF 并 RF 校准参数传递给fw

  CNSS daemon -- FW更新校准参数给CNSS daemon

(3)wlan host driver 就是我们的驱动。

综合就是下图结构

三、流程介绍

(1)CNSS platform driver (下面简称cnss)初始化,在我们加载驱动时(可以在rc文件开机加载,也可以配置驱动路径,打开wifi时加载.)会调用如下函数去注册cnss

cnss 会先做3件事

1.调到 cnss_pci_start_mhi  初始化MHI,会有Setting MHI state: INIT打印。 

2.调 cnss_wlan_vreg_set   cnss_wlan_gpio_set  ,给wlan 芯片上电,并使能引脚 WLAN_EN

3. 恢复pcie 链接。(cnss_pci 挂载在pci 下)

(2) cnss 调用MHI INIT  API,这个过程会去加载FW image。(MSA1-MSA0)

(3)当FW image 加载完成后, FW 会启动QMI server端,并通知它的2个client端。

这样client 就知道 QMI server 已经起来了

(4)FW 会发送 请求内存的指示给  cnss,申请内存用于M3 文件下载

(5)cnss 将BDF 下载并给FW

(6)当cnss 获取到FW 已经准备ok的 信息,cnss 将通知到驱动,

    驱动会通过cnss 将 wlan的配置信息,模式下发给FW

(7)FW 如果更新校准参数,会将更新数据发给cnss deamon。

至此,wlan 就起来了。

四、从Log 来看这次流程

03-16 09:46:27.134  1351  3030 I WifiService: setWifiEnabled package=com.android.settings uid=1000 enable=true isPrivileged=true  //开wifi

03-16 09:46:27.178  1351  1920 D HalDevMgr: initIWifiIfNecessary
01-16 23:28:49.368  1110  1110 I [wifi@1][0x1c972fc89][09:46:27.190607] wlan: [1110:I:HDD] wlan_hdd_state_ctrl_param_write: Wifi Turning On from UI
03-16 09:46:27.194  1110  1110 I android.hardware.wifi@1.0-service: Wifi HAL started
03-16 09:46:27.194  1351  1920 D HalDevMgr: initIWifiChipListeners
03-16 09:46:27.195  1351  1920 D HalDevMgr: getChipIds=[0]
01-16 23:28:49.400  1110  1110 D cnss    : Doing idle restart
01-16 23:28:49.412   335   335 D cnss    : Assert WLAN_EN GPIO successfully    // 使能WLAN_EN GPIO
01-16 23:28:49.412   335   335 D cnss    : Resuming PCI link                   //恢复pci link
01-16 23:28:49.412   335   335 I msm_pcie_enable: PCIe: Assert the reset of endpoint of RC0.
01-16 23:28:49.459   335   335 D cnss    : Setting MHI state: INIT(0)          //初始化MHI
01-16 23:28:49.459   335   335 D cnss    : Setting MHI state: POWER_ON(2)
01-16 23:28:49.461  6895  6895 W cnss_pci 0000: 01:00.0: Direct firmware load for amss20.bin failed with error -2    //cnss_pci 的EP就是0000: 01:00.0,加载固件
01-16 23:28:49.461  6895  6895 W cnss_pci 0000: 01:00.0: Falling back to sysfs fallback for: amss20.bin
01-16 23:28:50.553   233   233 I cnss    : QMI WLFW service connected, state: 0x20141   //cnss 与QMI 连接

01-16 23:28:50.559  6895  6895 D cnss    : Received QMI WLFW request memory indication   //fw 请求内存分配
01-16 23:28:50.559  6895  6895 D cnss    : FW requests for memory, size: 0x660000, type: 1
01-16 23:28:50.559  6895  6895 D cnss    : FW requests for memory, size: 0x39c000, type: 4

01-16 23:28:50.559   233   233 D cnss    : Sending respond memory message, state: 0x20141    //发送内容分配信息
01-16 23:28:50.559   233   233 D cnss    : Memory for FW, va: 0x00000000fdb49a76, pa: 0x00000000a1000000, size: 0x660000, type: 1 
01-16 23:28:50.559   233   233 D cnss    : Memory for FW, va: 0x0000000021548f94, pa: 0x00000000a1800000, size: 0x39c000, type: 4
03-16 09:46:28.386  1549  4500 I cnss-daemon: WLFW service connected                        

01-16 23:28:50.565  6880  6880 D cnss    : Received QMI WLFW FW memory ready indication       //fw内存准备ok
01-16 23:28:50.565  6880  6880 D cnss    : Posting event: FW_MEM_READY(3), state: 0x20141 flags: 0x0

01-16 23:28:50.577   334   334 D cnss    : Sending BDF download message, state: 0x20143, type: 4 
01-16 23:28:50.594   334   334 D cnss    : Downloading BDF: regdb.bin, size: 24278               //下载regdb.bin

01-16 23:28:50.608   334   334 D cnss    : Sending BDF download message, state: 0x20143, type: 1
01-16 23:28:50.626   334   334 D cnss    : Downloading BDF: bdwlan.elf, size: 60000               //下载bdwlan.elf

01-16 23:28:50.659   334   334 D cnss    : Sending M3 information message, state: 0x20143
01-16 23:28:50.659   334   334 D cnss    : M3 memory, va: 0x0000000098c8960a, pa: 0x00000000a1d00000, size: 0x411bc
01-16 23:28:50.661   334   334 D cnss    : Sending QDSS config download message, state: 0x20143
01-16 23:28:50.662  6880  6880 D cnss    : Received QMI WLFW FW initialization done indication
01-16 23:28:50.662  6880  6880 D cnss    : Posting event: FW_READY(4), state: 0x20143 flags: 0x0
01-16 23:28:50.750   334   334 D cnss    : Processing driver event: FW_READY(4), state: 0x20143
01-16 23:28:50.750   334   334 D cnss    : Processing FW Init Done..

 

 

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值