工具/软件:Linux
我们有一个基于 Jacinto 6的定制板,通过 Linux 4.45启动它时附带以下 SDK
ti-processor-sdk-linux-automotive-dra7xx-evm-03.02.00.03-installer.bin
加载 GPU 驱动程序'pvrsrvkm.ko"时遇到问题
#insmod pvrsrvkm.ko
[46.464932] powerdomain:GPU_pwrdm:等待时间过长、无法完成转换
[46.634790] powerdomain:GPU_pwrdm:等待时间过长、无法完成转换
[46.804621] powerdomain:GPU_pwrdm:等待时间过长、无法完成转换
[46.814292] OMAP-hwmod:GPU:_wait_target_ready 失败:-16
[46.982827] powerdomain:GPU_pwrdm:等待时间过长、无法完成转换
[46.992798] PVR_K:(错误):EnableSGXClocks:PM_Runtime_get_sync 失败(16)
[47.000075] PVR_K:(错误):SysInitialize:无法启用系统时钟(175)
它看起来是 GPU Powerdomain 问题、在插入驱动程序时未解决。
为了确认这一点、我们显示了以下调试消息:
diff --git a/arch/arm/mach-omap2/prm44xx.c b/arch/arm/mach-omap2/prm44xx.c
索引8f26621..39a28ba 100644
-- a/arch/arm/mach-omap2/prm44xx.c
++ b/arch/arm/mach-omap2/prm44xx.c
@@-422、6 +422、8 @@静态空 omap44xx_PRM_CLEAR_LOSS_FLAGS_OLD (u8器件、S16安装、
静态 int omar4_pwrdm_set_next pwrst (struct powerdomain * pwrdm、u8 pwrst)
{
+ pr_alert ("OMAP4_pwrdm_set_next _pwrst 为%d\n"、pwrst);
+
OMAP4_prminst_RMW_inst_reg_bits (OMAP_powerstate_mask、
(pwrst << omap_powerstate_shift)、
pwrdm->prcm_partition、
@@-650、8 +652、29 @@静态 int omAP4_pwrdm_wait_transition (struct powerdomain * pwrdm)
(C++< PWRdm_transition _援助))
udelay (1);
+
/* 打开状态*/
+ if (!strcmp (pwrdm->name、"GPU_pwrdm"))
+ {
+ pr_info ("******* Insie OMAP4_PM_PWSTCTRL_WRITE ******* \n");
+ OMAP4_prminst_RMW_AP4_REG_Bits (0x3、3、pwrdm->prcm_partition、pwrdm->prcm_fs、OMinst_PM_PWSTCTRL);
+ }
+
+ if (!strcmp (pwrdm->name、"GPU_pwrdm"))
+ {
+ pr_alert (" READ_OMAP4_PM_PWSTCTRL 的值为%x\n"、OMAP4_prminst_Read_inst_reg (pwrdm->prcm_partition、pwrdm->prcm_fs、
+ OMAP4_PM_PWSTCTRL);
+ }
+
+ if (!strcmp (pwrdm->name、"GPU_pwrdm"))
+ {
+ pr_alert ("**" PM_PW_STCTRL_SGX 的值 is_prm4x %x\n"、OMAP4_prminst_read_inst_reg (pwrdm->prcm_partition、pwrdm->prcm_fs、OMAP4_PM_PWSTST);
+ /* pr_alert ("**PM_PW_STCTRL_SGX 的值为_1_prm4x %x\n"、 readl_relaxed (pwrdm->prcm_fs + OMAP4_PM_PWSTST));*/
+
+ }
+
if (c > PWRDM_TRANSION_EVAOUT){
- pr_err ("powerdomain:%s:等待时间过长、无法完成转换\n"、
+ pr_err ("powerdomain!!!!!!!! :%s:等待时间过长,无法完成转换\n",
pwrdm->name);
RETURN -EAGAIN;
}
OMAP4_PM_PWSTST 读取"0x100000"、这意味着第20位被置位、并且正在进行电源域处理。尽管输入、我们可以将 OMAP4_PM_PWSTST 的值读取为0x37。
OMAP4_PM_PWSTST 和 OMAP4_PM_PWSTCTRL 的值以 dmesg 的两个不同间隔捕获
[0.000000] 正常区域:内存映射使用1536页
[0.000000] 正常区域:保留0页
[0.000000] 正常区域:196608页、LIFO 批处理:31
[0.000000] HIGHMEM 区域:327167页、LIFO 批处理:31
[0.000000] DRA752 ES1.1
[0.000000] 检查电源域是否始终处于打开状态***** 30000
[0.0000]********* Insie OMAP4_PM_PWSTCTRL_WRITE *******
[0.000000] READ_OMAP4_PM_PWSTCTRL 的值为30003
[0.000000] PM_PW_STCTRL_SGX 的值为_prm4x 0
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] OMAP4_pwrdm_set_next _pwrst 为3
[0.000000] 检查电源域是否始终处于打开状态***** 30003.
[0.0000]********* Insie OMAP4_PM_PWSTCTRL_WRITE *******
[0.000000] READ_OMAP4_PM_PWSTCTRL 的值为30003
[0.000000] PM_PW_STCTRL_SGX is _prm4x 37的值
[0.000000] 检查电源域是否始终处于打开状态***** 30003.
[0.0000]********* Insie OMAP4_PM_PWSTCTRL_WRITE *******
[0.000000] READ_OMAP4_PM_PWSTCTRL 的值为30003
[0.000000] PM_PW_STCTRL_SGX is _prm4x 37的值
[0.000000] PERCPU:嵌入式12页/CPU @eef34000 s19584 r8192 d21376 u49152
[0.000000] pcpu-alloc:s19584 r8192 d21376 u49152 alloc=12*4096
[0.000000] pcpu-alloc:[0][1] 1.
[2.823839] TI OMAP4 +器件的电源管理。
[2.828743] OMAP4_pwrdm_set_next _pwrst 为0
[2.832974] OMAP4_pwrdm_set_next _pwrst 为0
[2.837177] OMAP4_pwrdm_set_next _pwrst 为0
[2.841404] OMAP4_pwrdm_set_next _pwrst 为0
[2.845608] OMAP4_pwrdm_set_next _pwrst 为0
[2.849835] OMAP4_pwrdm_set_next _pwrst 为0
[2.854038] OMAP4_pwrdm_set_next _pwrst 为0
[2.858239] OMAP4_pwrdm_set_next _pwrst 为0
[2.862462] OMAP4_pwrdm_set_next _pwrst 为1
[2.866664] OMAP4_pwrdm_set_next _pwrst 为0
[2.870895] OMAP4_pwrdm_set_next _pwrst 为3
[2.875098] OMAP4_pwrdm_set_next _pwrst 为0
[2.879302] OMAP4_pwrdm_set_next _pwrst 为0
[2.883523] OMAP4_pwrdm_set_next _pwrst 为0
[2.887725] OMAP4_pwrdm_set_next _pwrst 为0
[2.891953] OMAP4_pwrdm_set_next _pwrst 为0
[2.896171] OMAP4_pwrdm_set_next _pwrst 为3
[2.900402] OMAP4_pwrdm_set_next _pwrst 为3
[2.904648] 检查电源域是否始终打开***** 30000
[2.910155 Insie OMAP4_PM_PWSTCTRL_WRITE *******
[2.915750] READ_OMAP4_PM_PWSTCTRL 的值为30003
[2.920734] PM_PW_STCTRL_SGX is _prm4x 0的四个值
[2.925720] 检查电源域是否始终打开***** 30003.
[2.931226 Insie OMAP4_PM_PWSTCTRL_WRITE *******
[2.936821] READ_OMAP4_PM_PWSTCTRL 的值为30003
[2.941804] PM_PW_STCTRL_SGX 是_prm4x 0的四个值
有人能告诉我们,为什么在插入驱动程序时电源域关闭?