Firefly开源社区

标题: kernel中无法读取vendor数据,emmc状态常忙 [打印本页]

作者: 孙帅    时间: 2022-11-25 10:16
标题: kernel中无法读取vendor数据,emmc状态常忙
我的项目需要在kernel中获取vendor中的一些数据,所以参考gmac驱动中获取mac地址的方式。
而从kernel代码得知,设备的两个gmac的mac地址是从uboot传下来的设备树中获取的(kernel有从vendor获取mac的代码逻辑,但实际并没有走也不会去走)
改从vendor获取数据后,发现emmc状态一直返回busy,直到init进程起来后,emmc vendor模块才初始化完毕,而此时相关驱动早已probe完毕。

请问,上述是否有解决办法?
tchip_askquestions

新建文本文档 (2).txt

3 Bytes, 下载次数: 2, 下载积分: 灯泡 -1 , 经验 -1


作者: firefly_zhongw    时间: 2022-11-25 11:52
1. 内核的话,尝试用 rk_vendor_read/rk_vendor_write 函数
2. 内核定义的 ID 有如下:
  1. #define RSV_ID                          0
  2. #define SN_ID                           1
  3. #define WIFI_MAC_ID                     2
  4. #define LAN_MAC_ID                      3
  5. #define BT_MAC_ID                       4
  6. #define HDCP_14_HDMI_ID                 5
  7. #define HDCP_14_DP_ID                   6
  8. #define HDCP_2X_ID                      7
  9. #define DRM_KEY_ID                      8
  10. #define PLAYREADY_CERT_ID               9
  11. #define ATTENTION_KEY_ID                10
  12. #define PLAYREADY_ROOT_KEY_0_ID         11
  13. #define PLAYREADY_ROOT_KEY_1_ID         12
  14. #define HDCP_14_HDMIRX_ID               13
  15. #define SENSOR_CALIBRATION_ID           14
  16. #define IMEI_ID                         15
  17. #define LAN_RGMII_DL_ID                 16
  18. #define EINK_VCOM_ID                    17
复制代码


作者: 孙帅    时间: 2022-11-25 13:16
firefly_zhongw 发表于 2022-11-25 11:52
1. 内核的话,尝试用 rk_vendor_read/rk_vendor_write 函数
2. 内核定义的 ID 有如下:

尝试过不经过rk_vendor_resigter直接怼_vendor_read/write赋相关接口,但读取时报错。
sdmmc_vendor_storage.c::emmc_vendor_storage_init()一直无法成功(emmc busy),直到拉起init前后才返回成功。而此时再获取vendor数据已经没有意义了,因为项目需要在gmac/usb/pcie网卡probe过程中获取vendor数据


作者: firefly_zhongw    时间: 2022-11-25 14:12
1. rk_vendor_resigter后,才能使用 rk_vendor_read/rk_vendor_write,详细看内核代码
  1. int rk_vendor_register(void *read, void *write)
  2. {
  3.         if (!_vendor_read) {
  4.                 _vendor_read = read;
  5.                 _vendor_write =  write;
  6.                 return 0;
  7.         }
  8.         return -1;
  9. }
复制代码


2. 可以尝试其他分区,比如oem
3. 没有现成的demo,需要自己实现

作者: 孙帅    时间: 2022-11-25 15:57
firefly_zhongw 发表于 2022-11-25 14:12
1. rk_vendor_resigter后,才能使用 rk_vendor_read/rk_vendor_write,详细看内核代码

问题在于 rk_vendor_resigter需要先emmc_vendor_storage_init()返回成功,实际上emmc_vendor_storage_init一直在sleep。
我现在再找导致emmc_vendor_storage_init失败的原因
作者: 孙帅    时间: 2022-11-29 10:21
结贴,已解决。
通过uboot读取vendor,然后将相关数据传入usb、pcie设备树中,下发给kernel即可。




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1