On Mon, Apr 22, 2013 at 10:08 AM, Dan Carpenter
<[email protected]> wrote:
> On Mon, Apr 22, 2013 at 10:03:13AM -0400, [email protected] wrote:
>> From: Alex Deucher <[email protected]>
>>
>> Reported-by: Dan Carpenter <[email protected]>
>> Signed-off-by: Alex Deucher <[email protected]>
>> ---
>> drivers/gpu/drm/radeon/atombios.h | 2 ++
>> drivers/gpu/drm/radeon/radeon_atombios.c | 6 ++----
>> 2 files changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/radeon/atombios.h
>> b/drivers/gpu/drm/radeon/atombios.h
>> index 4b04ba3..de678dd 100644
>> --- a/drivers/gpu/drm/radeon/atombios.h
>> +++ b/drivers/gpu/drm/radeon/atombios.h
>> @@ -459,6 +459,7 @@ typedef struct _COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V3
>> {
>> ATOM_COMPUTE_CLOCK_FREQ ulClock; //Input Parameter
>> ATOM_S_MPLL_FB_DIVIDER ulFbDiv; //Output Parameter
>> + ULONG ulClockFbDiv;
>
> Why is this a long instead of an __le32 or u32?
atombios.h is shared across OSes and has it's own types.
>
>
>> };
>> UCHAR ucRefDiv; //Output Parameter
>> UCHAR ucPostDiv; //Output Parameter
>> @@ -491,6 +492,7 @@ typedef struct _COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V5
>> {
>> ATOM_COMPUTE_CLOCK_FREQ ulClock; //Input Parameter
>> ATOM_S_MPLL_FB_DIVIDER ulFbDiv; //Output Parameter
>> + ULONG ulClockFbDiv;
>> };
>> UCHAR ucRefDiv; //Output Parameter
>> UCHAR ucPostDiv; //Output Parameter
>> diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c
>> b/drivers/gpu/drm/radeon/radeon_atombios.c
>> index 8c1779c..2fc444e 100644
>> --- a/drivers/gpu/drm/radeon/radeon_atombios.c
>> +++ b/drivers/gpu/drm/radeon/radeon_atombios.c
>> @@ -2710,8 +2710,7 @@ int radeon_atom_get_clock_dividers(struct
>> radeon_device *rdev,
>> dividers->enable_post_div = (dividers->fb_div
>> & 1) ? true : false;
>> } else {
>> if (clock_type == COMPUTE_ENGINE_PLL_PARAM) {
>> - args.v3.ulClock.ulComputeClockFlag =
>> clock_type;
>> - args.v3.ulClock.ulClockFreq =
>> cpu_to_le32(clock); /* 10 khz */
>> + args.v3.ulClockFbDiv = cpu_to_le32((clock_type
>> << 24) | clock);
>>
>>
>> atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);
>>
>> @@ -2726,8 +2725,7 @@ int radeon_atom_get_clock_dividers(struct
>> radeon_device *rdev,
>> dividers->vco_mode = (args.v3.ucCntlFlag &
>>
>> ATOM_PLL_CNTL_FLAG_MPLL_VCO_MODE) ? 1 : 0;
>> } else {
>> - args.v5.ulClock.ulComputeClockFlag =
>> clock_type;
>> - args.v5.ulClock.ulClockFreq =
>> cpu_to_le32(clock); /* 10 khz */
>> + args.v3.ulClockFbDiv = cpu_to_le32((clock_type
>> << 24) | clock);
>
> We've changed from v5 to v3. Was that intentional?
Copy paste typo. fixed in v2 which is attached.
>
> I'm confused by this patch as well. I assumed the datatypes were
> determined by the hardware spec.
I'm not sure I follow. The atombios interpretor requires data in
little endian format.
Alex
From ce94ed1083df11895dbec520ef243d4fd805a4a9 Mon Sep 17 00:00:00 2001
From: Alex Deucher <[email protected]>
Date: Mon, 22 Apr 2013 09:59:01 -0400
Subject: [PATCH] drm/radeon: fix endian bugs in
radeon_atom_get_clock_dividers() (v2)
v2: fix copy paste typo.
Reported-by: Dan Carpenter <[email protected]>
Signed-off-by: Alex Deucher <[email protected]>
---
drivers/gpu/drm/radeon/atombios.h | 2 ++
drivers/gpu/drm/radeon/radeon_atombios.c | 6 ++----
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/radeon/atombios.h b/drivers/gpu/drm/radeon/atombios.h
index 4b04ba3..de678dd 100644
--- a/drivers/gpu/drm/radeon/atombios.h
+++ b/drivers/gpu/drm/radeon/atombios.h
@@ -459,6 +459,7 @@ typedef struct _COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V3
{
ATOM_COMPUTE_CLOCK_FREQ ulClock; //Input Parameter
ATOM_S_MPLL_FB_DIVIDER ulFbDiv; //Output Parameter
+ ULONG ulClockFbDiv;
};
UCHAR ucRefDiv; //Output Parameter
UCHAR ucPostDiv; //Output Parameter
@@ -491,6 +492,7 @@ typedef struct _COMPUTE_MEMORY_ENGINE_PLL_PARAMETERS_V5
{
ATOM_COMPUTE_CLOCK_FREQ ulClock; //Input Parameter
ATOM_S_MPLL_FB_DIVIDER ulFbDiv; //Output Parameter
+ ULONG ulClockFbDiv;
};
UCHAR ucRefDiv; //Output Parameter
UCHAR ucPostDiv; //Output Parameter
diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c
index 8c1779c..4b853d8 100644
--- a/drivers/gpu/drm/radeon/radeon_atombios.c
+++ b/drivers/gpu/drm/radeon/radeon_atombios.c
@@ -2710,8 +2710,7 @@ int radeon_atom_get_clock_dividers(struct radeon_device *rdev,
dividers->enable_post_div = (dividers->fb_div & 1) ? true : false;
} else {
if (clock_type == COMPUTE_ENGINE_PLL_PARAM) {
- args.v3.ulClock.ulComputeClockFlag = clock_type;
- args.v3.ulClock.ulClockFreq = cpu_to_le32(clock); /* 10 khz */
+ args.v3.ulClockFbDiv = cpu_to_le32((clock_type << 24) | clock);
atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);
@@ -2726,8 +2725,7 @@ int radeon_atom_get_clock_dividers(struct radeon_device *rdev,
dividers->vco_mode = (args.v3.ucCntlFlag &
ATOM_PLL_CNTL_FLAG_MPLL_VCO_MODE) ? 1 : 0;
} else {
- args.v5.ulClock.ulComputeClockFlag = clock_type;
- args.v5.ulClock.ulClockFreq = cpu_to_le32(clock); /* 10 khz */
+ args.v5.ulClockFbDiv = cpu_to_le32((clock_type << 24) | clock);
if (strobe_mode)
args.v5.ucInputFlag = ATOM_PLL_INPUT_FLAG_PLL_STROBE_MODE_EN;
--
1.7.7.5
_______________________________________________
dri-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/dri-devel