Message ID | 1454446059-30526-1-git-send-email-linus.walleij@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tuesday 02 February 2016 21:47:39 Linus Walleij wrote: > } else { > -#ifdef CONFIG_ARCH_VERSATILE > - fb->off_ienb = CLCD_PL111_IENB; > - fb->off_cntl = CLCD_PL111_CNTL; > -#else > - fb->off_ienb = CLCD_PL110_IENB; > - fb->off_cntl = CLCD_PL110_CNTL; > -#endif > + if (of_machine_is_compatible("arm,versatile-ab") || > + of_machine_is_compatible("arm,versatile-pb")) { > + fb->off_ienb = CLCD_PL111_IENB; > + fb->off_cntl = CLCD_PL111_CNTL; > + } else { > + fb->off_ienb = CLCD_PL110_IENB; > + fb->off_cntl = CLCD_PL110_CNTL; > + } > } > Could that be done based on the AMBA device ID instead? Arnd -- To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, Feb 02, 2016 at 10:10:49PM +0100, Arnd Bergmann wrote: > On Tuesday 02 February 2016 21:47:39 Linus Walleij wrote: > > } else { > > -#ifdef CONFIG_ARCH_VERSATILE > > - fb->off_ienb = CLCD_PL111_IENB; > > - fb->off_cntl = CLCD_PL111_CNTL; > > -#else > > - fb->off_ienb = CLCD_PL110_IENB; > > - fb->off_cntl = CLCD_PL110_CNTL; > > -#endif > > + if (of_machine_is_compatible("arm,versatile-ab") || > > + of_machine_is_compatible("arm,versatile-pb")) { > > + fb->off_ienb = CLCD_PL111_IENB; > > + fb->off_cntl = CLCD_PL111_CNTL; > > + } else { > > + fb->off_ienb = CLCD_PL110_IENB; > > + fb->off_cntl = CLCD_PL110_CNTL; > > + } > > } > > > > Could that be done based on the AMBA device ID instead? Unfortunately not. It's a mistake made on one Versatile board which reverses the registers. There's nothing to distinguish it in the primecell itself.
On Wednesday 03 February 2016 00:41:54 Russell King - ARM Linux wrote: > On Tue, Feb 02, 2016 at 10:10:49PM +0100, Arnd Bergmann wrote: > > On Tuesday 02 February 2016 21:47:39 Linus Walleij wrote: > > > } else { > > > -#ifdef CONFIG_ARCH_VERSATILE > > > - fb->off_ienb = CLCD_PL111_IENB; > > > - fb->off_cntl = CLCD_PL111_CNTL; > > > -#else > > > - fb->off_ienb = CLCD_PL110_IENB; > > > - fb->off_cntl = CLCD_PL110_CNTL; > > > -#endif > > > + if (of_machine_is_compatible("arm,versatile-ab") || > > > + of_machine_is_compatible("arm,versatile-pb")) { > > > + fb->off_ienb = CLCD_PL111_IENB; > > > + fb->off_cntl = CLCD_PL111_CNTL; > > > + } else { > > > + fb->off_ienb = CLCD_PL110_IENB; > > > + fb->off_cntl = CLCD_PL110_CNTL; > > > + } > > > } > > > > > > > Could that be done based on the AMBA device ID instead? > > Unfortunately not. It's a mistake made on one Versatile board > which reverses the registers. There's nothing to distinguish it > in the primecell itself. Ok, I see. It would be nice to have this knowledge locally in the driver, e.g. through a special compatible string for the variant on the versatile, or a bool property, but this way seems good enough as we can be reasonably sure that nobody else made the same mistake. Arnd -- To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/video/fbdev/amba-clcd.c b/drivers/video/fbdev/amba-clcd.c index 9362424c2340..f9ef06d0cd48 100644 --- a/drivers/video/fbdev/amba-clcd.c +++ b/drivers/video/fbdev/amba-clcd.c @@ -440,13 +440,14 @@ static int clcdfb_register(struct clcd_fb *fb) fb->off_ienb = CLCD_PL111_IENB; fb->off_cntl = CLCD_PL111_CNTL; } else { -#ifdef CONFIG_ARCH_VERSATILE - fb->off_ienb = CLCD_PL111_IENB; - fb->off_cntl = CLCD_PL111_CNTL; -#else - fb->off_ienb = CLCD_PL110_IENB; - fb->off_cntl = CLCD_PL110_CNTL; -#endif + if (of_machine_is_compatible("arm,versatile-ab") || + of_machine_is_compatible("arm,versatile-pb")) { + fb->off_ienb = CLCD_PL111_IENB; + fb->off_cntl = CLCD_PL111_CNTL; + } else { + fb->off_ienb = CLCD_PL110_IENB; + fb->off_cntl = CLCD_PL110_CNTL; + } } fb->clk = clk_get(&fb->dev->dev, NULL);
The current compile-time check for inversed IENB/CNTL does not work in multiplatform boots: as soon as versatile is included in the build, the IENB/CNTL is switched and breaks graphics. Convert this to a runtime switch. Cc: stable@vger.kernel.org Cc: Rob Herring <robh@kernel.org> Cc: Russell King <linux@arm.linux.org.uk> Fixes: a29da136de34 ("ARM: versatile: convert to multi-platform") Signed-off-by: Linus Walleij <linus.walleij@linaro.org> --- drivers/video/fbdev/amba-clcd.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-)