[powerpc] offb: red / blue color inversion

3 messages, 2 authors, 2016-09-13 · open the first message on its own page

[powerpc] offb: red / blue color inversion

From: Mathieu Malaterre <hidden>
Date: 2016-06-09 12:25:51

Dear all,

I am trying to fix an issue with color inversion in the current offb.c
implementation. I am using a Mac Mini G4 (PPC) with:

[    0.844144] fb0: Open Firmware frame buffer device on
/pci@f0000000/ATY,RockHopper2Parent@10/ATY,RockHopper2_A@0

reported as [*]. I have tried looking at the upstream code source, and
it appears that my configuration falls into the 'cmap_simple'. But
other than that I failed to understand what could be wrong (palette
would be setup backward).

What are the low level tool (user-space) I can use to try to
understand what is wrong with offb on my machine without rebuilding
the kernel (CONFIG_FB_OF is not a module) ?

Thanks much,



[*] $ fbset -i

mode "800x600-186"
    # D: 100.000 MHz, H: 119.048 kHz, V: 186.012 Hz
    geometry 800 600 800 600 8
    timings 10000 16 16 16 16 8 8
    rgba 8/0,8/0,8/0,0/0
endmode

Frame buffer device information:
    Name        : OFfb ATY,RockHo
    Address     : 0x9c008000
    Size        : 614400
    Type        : PACKED PIXELS
    Visual      : PSEUDOCOLOR
    XPanStep    : 0
    YPanStep    : 0
    YWrapStep   : 0
    LineLength  : 1024
    Accelerator : No

Re: [powerpc] offb: red / blue color inversion

From: Geert Uytterhoeven <geert@linux-m68k.org>
Date: 2016-06-17 07:11:42

Hi Mathieu,

On Thu, Jun 9, 2016 at 2:25 PM, Mathieu Malaterre [off-list ref] wrote:
I am trying to fix an issue with color inversion in the current offb.c
implementation. I am using a Mac Mini G4 (PPC) with:

[    0.844144] fb0: Open Firmware frame buffer device on
/pci@f0000000/ATY,RockHopper2Parent@10/ATY,RockHopper2_A@0

reported as [*]. I have tried looking at the upstream code source, and
it appears that my configuration falls into the 'cmap_simple'. But
other than that I failed to understand what could be wrong (palette
would be setup backward).
The palette code for cmap_simple writes the color components in the
order RGB, while your card seems to need BGR.

Hence either the cmap_addr/cmap_data registers are wrong, or
you have to add a cmap_inverted type that writes in the BGR order.

For both cases, you have to add a check to offb_init_palette_hacks() in
drivers/video/fbdev/offb.c.
What are the low level tool (user-space) I can use to try to
understand what is wrong with offb on my machine without rebuilding
the kernel (CONFIG_FB_OF is not a module) ?
I'm afraid you can't do much from userspace.

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

Re: [powerpc] offb: red / blue color inversion

From: Mathieu Malaterre <hidden>
Date: 2016-09-13 13:37:19

Geert,

On Fri, Jun 17, 2016 at 9:11 AM, Geert Uytterhoeven
[off-list ref] wrote:
Hi Mathieu,

On Thu, Jun 9, 2016 at 2:25 PM, Mathieu Malaterre [off-list ref] wrote:
quoted
I am trying to fix an issue with color inversion in the current offb.c
implementation. I am using a Mac Mini G4 (PPC) with:

[    0.844144] fb0: Open Firmware frame buffer device on
/pci@f0000000/ATY,RockHopper2Parent@10/ATY,RockHopper2_A@0

reported as [*]. I have tried looking at the upstream code source, and
it appears that my configuration falls into the 'cmap_simple'. But
other than that I failed to understand what could be wrong (palette
would be setup backward).
The palette code for cmap_simple writes the color components in the
order RGB, while your card seems to need BGR.

Hence either the cmap_addr/cmap_data registers are wrong, or
you have to add a cmap_inverted type that writes in the BGR order.

For both cases, you have to add a check to offb_init_palette_hacks() in
drivers/video/fbdev/offb.c.
Well I tried a (very naive) patch as follow:
--- a/drivers/video/fbdev/offb.c 2016-09-13 15:33:41.043843352 +0200
+++ b/drivers/video/fbdev/offb.c 2016-08-20 18:11:18.000000000 +0200
@@ -133,9 +133,9 @@
  switch (par->cmap_type) {
  case cmap_simple:
  writeb(regno, par->cmap_adr);
- writeb(blue, par->cmap_data);
- writeb(green, par->cmap_data);
  writeb(red, par->cmap_data);
+ writeb(green, par->cmap_data);
+ writeb(blue, par->cmap_data);
  break;
  case cmap_M3A:
  /* Clear PALETTE_ACCESS_CNTL in DAC_CNTL */
However it does not seems to fix the Red / Blue color inversion I am seeing.

Could you please be a little more verbose in the way I need to reorder
color component from RGB to BGR ?

Thanks again
-M
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help