diff mbox

video: ARM CLCD: runtime check for Versatile

Message ID 1454446059-30526-1-git-send-email-linus.walleij@linaro.org
State Superseded
Headers show

Commit Message

Linus Walleij Feb. 2, 2016, 8:47 p.m. UTC
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(-)

-- 
2.4.3

--
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

Comments

Arnd Bergmann Feb. 2, 2016, 9:10 p.m. UTC | #1
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
Russell King - ARM Linux Feb. 3, 2016, 12:41 a.m. UTC | #2
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.

-- 
RMK's Patch system: http://www.arm.linux.org.uk/developer/patches/
FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
according to speedtest.net.
--
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
Arnd Bergmann Feb. 3, 2016, 9:05 a.m. UTC | #3
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 mbox

Patch

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);