* [PATCH 2/6] drm/radeon: ATOM Endian fix for atombios_crtc_program_pll()
@ 2011-07-13 6:28 Benjamin Herrenschmidt
2011-07-13 14:38 ` Alex Deucher
0 siblings, 1 reply; 4+ messages in thread
From: Benjamin Herrenschmidt @ 2011-07-13 6:28 UTC (permalink / raw)
To: Alex Deucher
Cc: xorg-driver-ati-go0+a7rfsptAfugRpC6u6w,
dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, Cédric Cano
v6 of the structure was programmed incorrectly:
args.v6.ulCrtcPclkFreq.ulPixelClock = cpu_to_le32(clock / 10);
ulPixelClock is a 24-bit bitfield. This statement would thus
do a 32-bit swap of (clock / 10) and drop the top 8 bits which
are ... the LSB. Not what we want. Instead use masks & shifts.
Signed-off-by: Benjamin Herrenschmidt <benh-XVmvHMARGAS8U2dJNN8I7kB+6BGkLq7r@public.gmane.org>
---
(resent adding dri-devel to the CC list to hit patchwork)
drivers/gpu/drm/radeon/atombios_crtc.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
index 9541995..c742944 100644
--- a/drivers/gpu/drm/radeon/atombios_crtc.c
+++ b/drivers/gpu/drm/radeon/atombios_crtc.c
@@ -764,7 +764,7 @@ static void atombios_crtc_set_dcpll(struct drm_crtc *crtc,
}
static void atombios_crtc_program_pll(struct drm_crtc *crtc,
- int crtc_id,
+ u32 crtc_id,
int pll_id,
u32 encoder_mode,
u32 encoder_id,
@@ -851,8 +851,7 @@ static void atombios_crtc_program_pll(struct drm_crtc *crtc,
args.v5.ucPpll = pll_id;
break;
case 6:
- args.v6.ulCrtcPclkFreq.ucCRTC = crtc_id;
- args.v6.ulCrtcPclkFreq.ulPixelClock = cpu_to_le32(clock / 10);
+ args.v6.ulDispEngClkFreq = cpu_to_le32(crtc_id << 24 | clock / 10);
args.v6.ucRefDiv = ref_div;
args.v6.usFbDiv = cpu_to_le16(fb_div);
args.v6.ulFbDivDecFrac = cpu_to_le32(frac_fb_div * 100000);
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 2/6] drm/radeon: ATOM Endian fix for atombios_crtc_program_pll()
2011-07-13 6:28 [PATCH 2/6] drm/radeon: ATOM Endian fix for atombios_crtc_program_pll() Benjamin Herrenschmidt
@ 2011-07-13 14:38 ` Alex Deucher
2011-07-13 21:40 ` Benjamin Herrenschmidt
0 siblings, 1 reply; 4+ messages in thread
From: Alex Deucher @ 2011-07-13 14:38 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: xorg-driver-ati, dri-devel, Cédric Cano
On Wed, Jul 13, 2011 at 2:28 AM, Benjamin Herrenschmidt
<benh@kernel.crashing.org> wrote:
> v6 of the structure was programmed incorrectly:
>
> args.v6.ulCrtcPclkFreq.ulPixelClock = cpu_to_le32(clock / 10);
>
> ulPixelClock is a 24-bit bitfield. This statement would thus
> do a 32-bit swap of (clock / 10) and drop the top 8 bits which
> are ... the LSB. Not what we want. Instead use masks & shifts.
>
> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> ---
>
> (resent adding dri-devel to the CC list to hit patchwork)
>
> drivers/gpu/drm/radeon/atombios_crtc.c | 5 ++---
> 1 files changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
> index 9541995..c742944 100644
> --- a/drivers/gpu/drm/radeon/atombios_crtc.c
> +++ b/drivers/gpu/drm/radeon/atombios_crtc.c
> @@ -764,7 +764,7 @@ static void atombios_crtc_set_dcpll(struct drm_crtc *crtc,
> }
>
> static void atombios_crtc_program_pll(struct drm_crtc *crtc,
> - int crtc_id,
> + u32 crtc_id,
> int pll_id,
> u32 encoder_mode,
> u32 encoder_id,
> @@ -851,8 +851,7 @@ static void atombios_crtc_program_pll(struct drm_crtc *crtc,
> args.v5.ucPpll = pll_id;
> break;
> case 6:
> - args.v6.ulCrtcPclkFreq.ucCRTC = crtc_id;
> - args.v6.ulCrtcPclkFreq.ulPixelClock = cpu_to_le32(clock / 10);
> + args.v6.ulDispEngClkFreq = cpu_to_le32(crtc_id << 24 | clock / 10);
For clarity (i can never remember op precedence), you might put:
cpu_to_le32((crtc_id << 24) | (clock / 10));
Other than that,
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
> args.v6.ucRefDiv = ref_div;
> args.v6.usFbDiv = cpu_to_le16(fb_div);
> args.v6.ulFbDivDecFrac = cpu_to_le32(frac_fb_div * 100000);
>
>
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 2/6] drm/radeon: ATOM Endian fix for atombios_crtc_program_pll()
2011-07-13 14:38 ` Alex Deucher
@ 2011-07-13 21:40 ` Benjamin Herrenschmidt
2011-07-14 2:21 ` Alex Deucher
0 siblings, 1 reply; 4+ messages in thread
From: Benjamin Herrenschmidt @ 2011-07-13 21:40 UTC (permalink / raw)
To: Alex Deucher; +Cc: xorg-driver-ati, dri-devel, Cédric Cano
On Wed, 2011-07-13 at 10:38 -0400, Alex Deucher wrote:
> > case 6:
> > - args.v6.ulCrtcPclkFreq.ucCRTC = crtc_id;
> > - args.v6.ulCrtcPclkFreq.ulPixelClock = cpu_to_le32(clock / 10);
> > + args.v6.ulDispEngClkFreq = cpu_to_le32(crtc_id << 24 | clock / 10);
>
> For clarity (i can never remember op precedence), you might put:
>
> cpu_to_le32((crtc_id << 24) | (clock / 10));
I can't either but I have a nice chart printed on my wall :-)
I can respin if you really want but the above is correct.
Cheers,
Ben.
> Other than that,
>
> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
>
>
> > args.v6.ucRefDiv = ref_div;
> > args.v6.usFbDiv = cpu_to_le16(fb_div);
> > args.v6.ulFbDivDecFrac = cpu_to_le32(frac_fb_div * 100000);
> >
> >
> >
> >
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 2/6] drm/radeon: ATOM Endian fix for atombios_crtc_program_pll()
2011-07-13 21:40 ` Benjamin Herrenschmidt
@ 2011-07-14 2:21 ` Alex Deucher
0 siblings, 0 replies; 4+ messages in thread
From: Alex Deucher @ 2011-07-14 2:21 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: xorg-driver-ati, dri-devel, Cédric Cano
On Wed, Jul 13, 2011 at 5:40 PM, Benjamin Herrenschmidt
<benh@kernel.crashing.org> wrote:
> On Wed, 2011-07-13 at 10:38 -0400, Alex Deucher wrote:
>
>> > case 6:
>> > - args.v6.ulCrtcPclkFreq.ucCRTC = crtc_id;
>> > - args.v6.ulCrtcPclkFreq.ulPixelClock = cpu_to_le32(clock / 10);
>> > + args.v6.ulDispEngClkFreq = cpu_to_le32(crtc_id << 24 | clock / 10);
>>
>> For clarity (i can never remember op precedence), you might put:
>>
>> cpu_to_le32((crtc_id << 24) | (clock / 10));
>
> I can't either but I have a nice chart printed on my wall :-)
>
> I can respin if you really want but the above is correct.
That's fine as is then.
Alex
>
> Cheers,
> Ben.
>
>> Other than that,
>>
>> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
>>
>>
>> > args.v6.ucRefDiv = ref_div;
>> > args.v6.usFbDiv = cpu_to_le16(fb_div);
>> > args.v6.ulFbDivDecFrac = cpu_to_le32(frac_fb_div * 100000);
>> >
>> >
>> >
>> >
>
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2011-07-14 2:21 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-07-13 6:28 [PATCH 2/6] drm/radeon: ATOM Endian fix for atombios_crtc_program_pll() Benjamin Herrenschmidt
2011-07-13 14:38 ` Alex Deucher
2011-07-13 21:40 ` Benjamin Herrenschmidt
2011-07-14 2:21 ` Alex Deucher
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.