pruss_probe+
pruss->res->start=4a300000
ioaddr=e0900000
pruss_mfd pruss_mfd: mfd: added am33xx_pruss_uart device
paddress 0xe0920010
Unhandled fault: external abort on non-linefetch (0x1008) at 0xe0920010
Internal error: : 1008 [#1]
跟踪发现是pruss.c中的arm_to_pru_intr_init(pruss)中有
preg_data = ioread32(paddress)这么一个操作
判断可能是pru时钟域没有打开,但是对比了一下文档中下载的内核和我使用的内核,clockdomains33xx_data.c这个
文件是一样的,不知道打开pru时钟还需要什么操作
hongbin li1:
我在clkdm_complete_init()初始化完读了一次CM_PER_PRUSS_CLKSTCTR寄存器,值是0x2,发现pru的3个clk都没打开,有高人帮忙分析下不?
Yaoming Qin:
回复 hongbin li1:
您也看看比较新的例子 http://software-dl.ti.com/sitara_linux/esd/PRU-SWPKG/latest/index_FDS.html
hongbin li1:
回复 Yaoming Qin:
这个连接我下了pru-addon-v4.0-Windows-Install.exe,问一下那个pru/patches目录下的这些patch怎么用啊,readme中的链接点进去怎么不是使用方法呢
hongbin li1:
回复 hongbin li1:
我看了这些patch,跟设备树有关,但我的内核没有使用设备树,这些patch不适用我的内核,估计改起来工作量也很大,有好的建议吗,我是想按照
http://processors.wiki.ti.com/index.php/Soft-UART_Implementation_on_AM335X_PRU_-_Software_Users_Guide这个链接来做的
Jian Zhou:
回复 hongbin li1:
请问你用的是SDK06的内核么?检查下板级文件里PRU的初始化这部分。
hongbin li1:
回复 Jian Zhou:
我打算用pru0和mcasp1,在板级文件中配了uart和mcasp1的pinmux
static struct pinmux_config suart0_pin_mux[] = { {"spi0_d1.pr1_uart0_rxd", OMAP_MUX_MODE4 | AM33XX_SLEWCTRL_SLOW | AM33XX_PIN_INPUT_PULLUP}, {"spi0_cs0.pr1_uart0_txd", OMAP_MUX_MODE4 | AM33XX_PULL_UP | AM33XX_PULL_DISA | AM33XX_SLEWCTRL_SLOW}, {NULL, 0},};
static struct pinmux_config mcasp1_pin_mux[] = { {"mcasp0_aclkr.mcasp1_aclkx", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLDOWN}, {"mcasp0_fsr.mcasp1_fsx", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLDOWN}, {"mcasp0_axr1.mcasp1_axr0", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLDOWN}, {"mcasp0_ahclkx.mcasp1_axr1", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLDOWN}, {NULL, 0},};
static void suart0_pin_init(int evm_id, int profile){ /*config mcasp1*/ setup_pin_mux(mcasp1_pin_mux); /*config suart0*/ setup_pin_mux(suart0_pin_mux); return;}
不知道我这样配对不对,还有我在am335x_pru_suart_probe中看到
PINMUX1 = ioremap(0x44E108C8,1); iowrite32((3 | (1 << 5)),PINMUX1);
PINMUX2 = ioremap(0x44E108CC,1); iowrite32(4,PINMUX2);
不知道这又是配什么的
hongbin li1:
回复 hongbin li1:
没有人给点建议吗?下载了链接给的内核,对比了下board.c和device.c,把跟pruss相关的补上,内核还是跟之前的一样,在同一个位置飞了,还是时钟未打开
Jian Zhou:
回复 hongbin li1:
检查下这个函数am33xx_init_early(),里面有clock初始化。
hongbin li1:
回复 Jian Zhou:
感谢您的回复
我看了这两个初始化的配置,跟链接上下载的内核这两个位置对比了一下,我的内核有关pruss的时钟跟电源配置和下载到的内核配置完全一样
am33xx_powerdomains_init(); am33xx_clockdomains_init();
这是我在初始化过程中加的打印,
clockdomain: init l4_cefuse_clkdmclockdomain: init gfx_l4ls_gfx_clkdmclockdomain: init gfx_l3_clkdmclockdomain: init l4_rtc_clkdmclockdomain: init mpu_clkdmclockdomain: init l4_wkup_aon_clkdmclockdomain: init l3_aon_clkdmclockdomain: init l4_wkup_clkdmclockdomain: init clk_24mhz_clkdmclockdomain: init lcdc_clkdmclockdomain: init cpsw_125mhz_clkdmclockdomain: init pruss_ocp_clkdmclockdomain: init ocpwp_l3_clkdmclockdomain: init l4hs_clkdmclockdomain: init l3_clkdmclockdomain: init l4fw_clkdmclockdomain: init l3s_clkdmclockdomain: init l4ls_clkdm
在clock33xx_data.c中也有
CLK(NULL, "pruss_ocp_gclk", &pruss_ocp_gclk, CK_AM33XX), CLK(NULL, "pruss_uart_gclk", &pruss_uart_gclk, CK_AM33XX), CLK(NULL, "pruss_iep_gclk", &pruss_iep_gclk, CK_AM33XX),
但是,初始化完CM_PER_PRUSS_CLKSTCTRL寄存器的值还是0x2,3个时钟都是inact状态,内核在同样的位置出错
hongbin li1:
回复 hongbin li1:
pruss.c中clk_enable()调用_clkdm_clk_hwmod_enable
clockdomain: clkdm pruss_ocp_clkdm: enabled
这些初始化使能过程都有,是否跟硬件有关?