主题中讨论的其他器件: AM4372
工具/软件:Linux
您好!
我们使用主线内核4.9.61和 AM4376在定制板上的 RT 补丁。
目标是使用 PRU:全部4个内核(不含 PRU ETH)
我已经移植了 TI BSP 中的 PRU 相关内容:AM437X-EVM-Linux-RT-SDK-src-04.02.00.09
在这里、PRU 子系统开始处的 dmesg 输出为:
[87.545684] ti-pruss 54400000。pruss:创建 PRU 内核和其他子平台设备 [87.582027] ti-pruss 54440000.pruss:创建 PRU 内核和其他子平台设备 [88.085916] PRU-rproc 54434000.pru0:内存 IRAM:PA 0x54434000大小0x3000 va e0b2c000 [88.085950] PRU-rproc 54434000.pru0:内存控制:PA 0x54422000大小0x400 va e0b5d000 [proc 085961] PRU-rproc 54434000.pru0:内存调试:PA 0x54422000大小0x400V e0b548240.000[proc 0458r400.pru852001.pru85400] PRU-r85400.pru852001.pru85240.pru85240.pru85240.pru85240.pru85240.pru85240.pru85240.pru85240.pru85240.pru85240.pru1.pru1.pru1.pru1.pru400] PRU rproc 节点/OCP@44000000/pruss_soc_bus@54426000/pruss@54400000/PRU@54434000成功探测 [88.093318] PRU-rproc 54438000.pru1:内存 IRAM:PA 0x54438000大小0x3000 va e0b64000 [88.093365] PRU-rproc 54438000。pru1:内存控制:PA 0x54424000大小0x400 va e0b61000 [proc 09332] PRU-rproc 54438000。pru1:内存调试:PA 0x54424000 vr 08458r400_pru4001:pru400 rprupru4001:rpru400 rpru400 rpru400 rpru400 rproc 0488.24u1:rpru400 rpru400 rpru400 rpru400 rpru400 rpru400 rpru400 rpru400 rpru400 rpru400 rpru1:rpru400 rpru400 rpru400 rpru400 r PRU rproc 节点/OCP@44000000/pruss_soc_bus@54426000/pruss@54400000/PRU@54438000成功探测 [88.101376] PRU-rproc 54474000.pru0:内存 IRAM:PA 0x54474000大小0x1000 va e0b6a000 [88.101424] PRU-rproc 54474000.pru0:内存控制:PA 0x54462000大小0x400 va e0b6c000 [proc 101440] PRU-rproc 54474000.pru0:内存调试:PA 0x54462400大小0x400004b0b6c000 [proc 8524] prupru8524] prupru85240.pru8524_pru85240.pru8524] pru4000.pru85u8524_pru4000.pru4000.pru8524_pru4000.pru85u85u4000.pru4000.pru85u8524] PRU rproc 节点/OCP@44000000/pruss_soc_bus@54426000/pruss@54440000/PRU@54474000已成功探测 [88.112675] PRU-rproc 54478000.pru1:内存 IRAM:PA 0x54478000大小0x1000 va e0b70000 [88.114844] PRU-rproc 54478000.pru1:存储器控制:PA 0x54464000大小0x400 va e0b72000 [88.114869] PRU-rproc 54478000.pru1:存储器控制:PA 0x54464000-pru85808.2480 pruprupruprupru1.pru85248r1r85248r85801.prupruprupruprupruprupruprupruprupru1.prupruprupru1.pru1.pru1.prupru1.pru85248upruprupruprupru1.pruprupruprupru1.pr PRU rproc 节点/OCP@44000000/pruss_SoC_bus@54426000/prusss@54440000/PRU@54478000探测成功
似乎是设备树问题(请参阅/drivers/mailbox/mailbox.c):
struct mbox_chan * mbox_request_channel (struct mbox_client * cl、int index)
{
struct device * dev = cl->dev;
struct mbox_controller * mbox;
struct of_phandle_args spec;
struct mbox_chan * chan;
unsigned long flags;
int ret;
if (!dev ||!dev->of _node){
pr_debug ("%s":无所有者设备节点\n"、__func__);
return ERR_ptr (-ENODEV);
}
mutex_lock (&con_mutex);
if (of _parse_phandle_with _args (dev->node) "mbox"、
"#mbox-cells"、INDEX、&spec){
DEV_dbg (dev、"%s":无法解析\"mbox\" property\n"、__func_);
mutex_unlock (&con_mutex);
返回 ERR_PTR (-ENODEV);
}
下面是我们的 DTS 补丁:
diff -urwN a/arch/arm/boot/dts/am4372.dtsi b/arch/arm/boot/dts/am4372.dtsi -- a/sarch/arm/boot/dts/am4372.dtsi2018-01-03:26:14.553435200 ++ b/ti/arm/boot/boot/dts/am4372.04 @@ =+mbox= 015"@@;<m400"+mpr1 = 014"+mrm 框;<1:+m01"=m1340"+mrx = 01";+mpr-mb =+m1340"+mb = 01";+mb = 01"=mpr-mb = 01";+mpr-mb =+mcr = 01";+mpr-mb = 2、mcr = 01";+mr = 2、mr = 015m = 015m = 01";mb = 015m = 01";+mb = 01";+mb = 01";+mr = 015m 01" mbox_pru1_1 @@+ ti、mbox-TX =<4 0="">;+ ti、mbox-Rx =<5 0="">;+};};Timer1:计时器@44e31000{@@-92.6 + 934,140 中断= ; reg;+ pruss_soc_bus:pruss_soc_bus@@54426000{+ compatible ="ti、am4376-prusso-bus";+ reg =<0x54426000 0x2000="">;+ ti、hwmods ="pruss";+#address-cells =<1>;+#size-1000 = 0x54000+ pruss ="prus";+"prus";+"prus"= 0x54376+"prus";+"prus"="prus"=+"prusbegri+"prus" 0x54402000 0x2000=""> 、+0x54410000 0x8000=""> 、+0x54426000 0x2000=""> 、+0x5442e000 0x31c=""> 、+0x54432000 0x58="">; +reg 名称="dram0"、"dram1"、"shrdram2"、"cfg"、 +"IEP"、"MII_RT"; +#address-cells =<1>; +#size-cells =<1>; +ranges; +status ="disabled"; + pruss1_INTC:INTC@54420000{ +compatible ="ti、am4376-pruss-intC"; +reg = 0x54420000 ;"INTC"= "+ interrupts" ; +中断名称="host2"、"host3"、 +"host4"、"host5"、 +"host6"、 "host8" 、+"host9"; +中断控制器; +#interrupt-cells =<1>; +}; + pru1_0:PRU@54434000{ +compatible ="ti、am4376-PRU"; +reg =<0x54434000 0x3000="">、 +0x54422000 0x400="">、 +<0x54422400 0x100="">; +reg 名称="IRAM"、"控制"、"调试"; +标签="pru0"; +中断父名称=<&pruss1_intc>; +中断=<16>、<17>; +中断名称="vring "、"kind"; +状态="pruss1_intc" ; @+"0x4376+"pru";+"pru4376+"pru"= 0x5438000+"pru";+"pru"+"pru4376+"pru"+"pru"+"pru"+"pr4376+"pru"+"pru"+"pr 0x54424000 0x400=""> 、+<0x54424400 0x100="">; +reg 名称="IRAM"、"控制"、"调试"; +标签="pru1"; +interrupt-parent =<&pruss1_intc>; +中断=<18>、<19>; +中断名称="vring"、"ti"; + 状态= @0x440000";+"prus"= 0x44376+"+"pruss";+"prus"= 0x440000"=+"prus";+"prus"=+"prus" = 0x54376+"prus";+"prus"=+"prus";+"prus"+"prus"= 0x440000 0x54442000 0x1000=""> 、+0x54466000 0x2000=""> 、+0x5446e000 0x31c=""> 、+0x54472000 0x58="">; +reg 名称="dram0"、"dram1"、"cfg" 、+"IEP"、"MII_RT"; +#address-cells =<1>; +#size-cells =<1>; +ranges; +status ="disabled"; + pruss0_intc:intc@54460000{ +compatible ="ti、am4376-pruss-intC"; +reg =<0x54460000" ;"intc"+ interrupts = 0x460000" ; +中断名称="host2"、"host3"、 +"host4"、"host5"、 +"host6"、 "host8" 、+"host9"; +中断控制器; +#interrupt-cells =<1>; +}; + pru0_0:PRU@54474000{ +compatible ="ti、am4376-PRU"; +reg =<0x54474000 0x1000="">、 +0x54462000 0x400="">、 +<0x54462400 0x100="">; +reg 名称="IRAM"、"控制"、"调试"; +标签="pru0"; +interrupt-parent =<&pruss0_intc>; +中断=<16>、<17>; +中断名称="vring"、"kti"; +状态= 0x54376+"pru";@+"pru4376+"PRU"= 0x47000";+"pru64000+"pru"+"pru"pru"+"pru"pru"+"pru"+"pru"pru"+"pru"pru40" 0x54464000 0x400=""> 、+<0x54464400 0x100="">; +reg 名称="IRAM"、"控制"、"调试"; +标签="pru1"; +interrupt-parent =<&pruss0_intc>; +中断=<18>、<19>; +中断名称="vring"、"kind"; +"McASP @ 、"33000";+"McASP、"+ McAsp"=";+"mofti +"mware";+"mcams";+"mcams"="mcamdams"}+"mcamdams+"mcams";"mcams+"mcamdamdams
在我看来,缺少"mboxs"语句。 但在哪种形状中呢?
请帮助我们集成 PRU。
P.S.:我没有使用 TI 板和 BSP 进行测试、但我认为问题也存在。
此致
Walter Wagner ABB