Clock problems in i.MX27 Visstrim M10 (linux-3.5-rc5).

javier Martin javier.martin at vista-silicon.com
Wed Jul 4 04:30:40 EDT 2012


On 4 July 2012 09:48, javier Martin <javier.martin at vista-silicon.com> wrote:
> Hi,
>
> On 3 July 2012 15:13, Fabio Estevam <festevam at gmail.com> wrote:
>> Hi Javier,
>>
>> On Tue, Jul 3, 2012 at 8:09 AM, javier Martin
>> <javier.martin at vista-silicon.com> wrote:
>>> Hi,
>>> I've found the following problems in linux-3.5-rc5
>>> (6887a4131da3adaab011613776d865f4bcfb5678) in our Visstrim M10 board:
>>
>> Could you please try the two attached patches?
>>
>> They should fix the dma and mx2-camera issues.
>>
>> I will try to look at the ssi problem, but my mx27pdk board still does
>> not have audio supported.
>>
>> Regards,
>>
>
> thanks for the patches. The first one solves the issue with the audio.
> Now I can do an aplay properly too.
>
> However, second patch for the mx2-camera seems that it's not right
> yet. I get a timeout here:
>
> static int mx27_camera_emma_prp_reset(struct mx2_camera_dev *pcdev)
> {
>         u32 cntl;
>         int count = 0;
>
>         cntl = readl(pcdev->base_emma + PRP_CNTL);
>         writel(PRP_CNTL_SWRST, pcdev->base_emma + PRP_CNTL);
>         while (count++ < 100) {
>                 if (!(readl(pcdev->base_emma + PRP_CNTL) & PRP_CNTL_SWRST))
>                         return 0;
>                 barrier();
>                 udelay(1);
>         }
>
>         return -ETIMEDOUT;
> }
>
> Keeping this in mind I infer that probably emma clocks have not been
> properly enabled.
>

The problem is that in 'clk-imx27.c' the clocks for the emma are
defined as follows:

	clk_register_clkdev(clk[emma_ahb_gate], "ahb", "imx-emma");
	clk_register_clkdev(clk[emma_ipg_gate], "ipg", "imx-emma");

However, in the patch you submitted they are requested as shown:

	pcdev->clk_emma_ipg = devm_clk_get(&pdev->dev, "ipg");
	if (IS_ERR(pcdev->clk_emma_ipg)) {
		err = PTR_ERR(pcdev->clk_emma_ipg);
		goto exit_kfree;
	}

	pcdev->clk_emma_ahb = devm_clk_get(&pdev->dev, "ahb");
	if (IS_ERR(pcdev->clk_emma_ahb)) {
		err = PTR_ERR(pcdev->clk_emma_ahb);
		goto exit_kfree;
	}

Which means the dev_id used is "mx2-camera.0" instead of "imx-emma".
We cannot change the name in 'clk-imx27.c' to "mx2-camera.0" since
there is another device "mx2_emmaprp.c" which uses these clocks,
unless two different names can be associated with the same clock.

The other option, which is dirty but works, is using the following to
request clocks:

	pcdev->clk_emma_ipg = clk_get_sys("imx-emma", "ipg");
	if (IS_ERR(pcdev->clk_emma_ipg)) {
		err = PTR_ERR(pcdev->clk_emma_ipg);
		goto exit_kfree;
	}

	pcdev->clk_emma_ahb = clk_get_sys("imx-emma", "ahb");
	if (IS_ERR(pcdev->clk_emma_ahb)) {
		err = PTR_ERR(pcdev->clk_emma_ahb);
		goto exit_kfree;
	}

What do you think?

Regards.

-- 
Javier Martin
Vista Silicon S.L.
CDTUC - FASE C - Oficina S-345
Avda de los Castros s/n
39005- Santander. Cantabria. Spain
+34 942 25 32 60
www.vista-silicon.com



More information about the linux-arm-kernel mailing list