> -----Original Message-----
> From: Sergey Lapin [mailto:[email protected]]
> Sent: Friday, November 27, 2009 5:33 PM
> To: Premi, Sanjeev
> Cc: Kevin Hilman; [email protected]
> Subject: Re: OMAP3: enabling CPU idle leads to panic
>
> On Fri, Nov 27, 2009 at 2:36 PM, Sergey Lapin
> <[email protected]> wrote:
> >>
> >> Alas, that's not because omap_chip_is() function fails
> >> on these structures.
> >>
> >
> > I mean during registration of power domains.
> >
>
> int pwrdm_register(struct powerdomain *pwrdm)
> {
> unsigned long flags;
> int ret = -EINVAL;
>
> if (!pwrdm)
> return -EINVAL;
>
> if (!omap_chip_is(pwrdm->omap_chip))
> return -EINVAL;
> returns -EINVAL for pwrdm_core (both of them), so I get panic later.
> Since OMAP2525 vs 3515 were messed-up, I think there could be more
> problems there.
>
> diff --git a/arch/arm/plat-omap/include/plat/cpu.h
> b/arch/arm/plat-omap/include/plat/cpu.h
> index 2e17890..8b15789 100644
> --- a/arch/arm/plat-omap/include/plat/cpu.h
> +++ b/arch/arm/plat-omap/include/plat/cpu.h
> @@ -393,11 +393,11 @@ IS_OMAP_TYPE(3517, 0x3517)
>
> (!omap3_has_iva()) && \
> (!omap3_has_sgx()))
> # define cpu_is_omap3515() (cpu_is_omap3430() &&
> \
> -
> (omap3_has_iva()) && \
> - (!omap3_has_sgx()))
> +
> (!omap3_has_iva()) && \
> + (omap3_has_sgx()))
> # define cpu_is_omap3525() (cpu_is_omap3430() &&
> \
> -
> (omap3_has_sgx()) && \
> - (!omap3_has_iva()))
> +
> (!omap3_has_sgx()) && \
> + (omap3_has_iva()))
> # define cpu_is_omap3530() (cpu_is_omap3430())
> # define cpu_is_omap3505() is_omap3505()
> # define cpu_is_omap3517() is_omap3517()
>
> since OMAP3525 has iva but misses sgx, and vice versa 3515 has sgx but
> has no iva.
> I missed this piece before, but just accidentally found it now. I
> don't know if these are
> related, but this doesn't fix my problem with core_pwrdm.
>
> S.
I feel, the problem could be due to this snippet below.
omap_rev() does a compare against omap_revision not just
the revision bits.
Had submitted a patch earlier; will need some time to
find it.
} else if (cpu_is_omap343x()) {
omap_chip.oc = CHIP_IS_OMAP3430;
if (omap_rev() == OMAP3430_REV_ES1_0)
omap_chip.oc |= CHIP_IS_OMAP3430ES1;
else if (omap_rev() >= OMAP3430_REV_ES2_0 &&
omap_rev() <= OMAP3430_REV_ES2_1)
omap_chip.oc |= CHIP_IS_OMAP3430ES2;
else if (omap_rev() == OMAP3430_REV_ES3_0)
omap_chip.oc |= CHIP_IS_OMAP3430ES3_0;
else if (omap_rev() == OMAP3430_REV_ES3_1)
omap_chip.oc |= CHIP_IS_OMAP3430ES3_1;
} else {
In meantime, can you try setting the following (explicitly)
to the code above:
else if (omap_rev() == OMAP3430_REV_ES3_1)
omap_chip.oc |= CHIP_IS_OMAP3430ES3_1;
+ else
+ omap_chip.oc |= CHIP_IS_OMAP3430ES3_1
~sanjeev
> --
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html