diff mbox series

ARM: mmp/mmp2: fix cpu_is_mmp2() on mmp2-dt

Message ID 20181202111224.1450-1-lkundrak@v3.sk (mailing list archive)
State New, archived
Headers show
Series ARM: mmp/mmp2: fix cpu_is_mmp2() on mmp2-dt | expand

Commit Message

Lubomir Rintel Dec. 2, 2018, 11:12 a.m. UTC
cpu_is_mmp2() was equivalent to cpu_is_pj4(), wouldn't be correct for
multiplatform kernels. Fix it by also considering mmp_chip_id, as is
done for cpu_is_pxa168() and cpu_is_pxa910() above.

Moreover, it is only available with CONFIG_CPU_MMP2 and thus doesn't work
on DT-based MMP2 machines. Enable it on CONFIG_MACH_MMP2_DT too.

Note: CONFIG_CPU_MMP2 is only used for machines that use board files
instead of DT. It should perhaps be renamed. I'm not doing it now, because
I don't have a better idea.

Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
---
 arch/arm/mach-mmp/cputype.h | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Arnd Bergmann Dec. 2, 2018, 3:53 p.m. UTC | #1
On Sun, Dec 2, 2018 at 12:12 PM Lubomir Rintel <lkundrak@v3.sk> wrote:
>
> cpu_is_mmp2() was equivalent to cpu_is_pj4(), wouldn't be correct for
> multiplatform kernels. Fix it by also considering mmp_chip_id, as is
> done for cpu_is_pxa168() and cpu_is_pxa910() above.
>
> Moreover, it is only available with CONFIG_CPU_MMP2 and thus doesn't work
> on DT-based MMP2 machines. Enable it on CONFIG_MACH_MMP2_DT too.
>
> Note: CONFIG_CPU_MMP2 is only used for machines that use board files
> instead of DT. It should perhaps be renamed. I'm not doing it now, because
> I don't have a better idea.
>
> Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>

Acked-by: Arnd Bergmann <arnd@arndb.de>

I'd suggest adding

Cc: stable@vger.kernel.org

since this fixes bugs on other platforms when CONFIG_MMP2 is enabled
in a multiplatform kernel.
Olof Johansson Dec. 3, 2018, 8:39 p.m. UTC | #2
On Sun, Dec 02, 2018 at 04:53:07PM +0100, Arnd Bergmann wrote:
> On Sun, Dec 2, 2018 at 12:12 PM Lubomir Rintel <lkundrak@v3.sk> wrote:
> >
> > cpu_is_mmp2() was equivalent to cpu_is_pj4(), wouldn't be correct for
> > multiplatform kernels. Fix it by also considering mmp_chip_id, as is
> > done for cpu_is_pxa168() and cpu_is_pxa910() above.
> >
> > Moreover, it is only available with CONFIG_CPU_MMP2 and thus doesn't work
> > on DT-based MMP2 machines. Enable it on CONFIG_MACH_MMP2_DT too.
> >
> > Note: CONFIG_CPU_MMP2 is only used for machines that use board files
> > instead of DT. It should perhaps be renamed. I'm not doing it now, because
> > I don't have a better idea.
> >
> > Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
> 
> Acked-by: Arnd Bergmann <arnd@arndb.de>
> 
> I'd suggest adding
> 
> Cc: stable@vger.kernel.org
> 
> since this fixes bugs on other platforms when CONFIG_MMP2 is enabled
> in a multiplatform kernel.

Applied to fixes with those tags. Thanks!


-Olof
diff mbox series

Patch

diff --git a/arch/arm/mach-mmp/cputype.h b/arch/arm/mach-mmp/cputype.h
index 446edaeb78a7..a96abcf521b4 100644
--- a/arch/arm/mach-mmp/cputype.h
+++ b/arch/arm/mach-mmp/cputype.h
@@ -44,10 +44,12 @@  static inline int cpu_is_pxa910(void)
 #define cpu_is_pxa910()	(0)
 #endif
 
-#ifdef CONFIG_CPU_MMP2
+#if defined(CONFIG_CPU_MMP2) || defined(CONFIG_MACH_MMP2_DT)
 static inline int cpu_is_mmp2(void)
 {
-	return (((read_cpuid_id() >> 8) & 0xff) == 0x58);
+	return (((read_cpuid_id() >> 8) & 0xff) == 0x58) &&
+		(((mmp_chip_id & 0xfff) == 0x410) ||
+		 ((mmp_chip_id & 0xfff) == 0x610));
 }
 #else
 #define cpu_is_mmp2()	(0)