All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC][PATCH] drm/radeon/hdmi: define struct for AVI infoframe
@ 2012-05-06 15:31 Rafał Miłecki
  2012-05-06 16:19 ` Rafał Miłecki
  0 siblings, 1 reply; 8+ messages in thread
From: Rafał Miłecki @ 2012-05-06 15:31 UTC (permalink / raw)
  To: dri-devel; +Cc: Christian König

---
 drivers/gpu/drm/radeon/r600_hdmi.c |   81 ++++++-----------------------------
 drivers/gpu/drm/radeon/radeon.h    |   41 ++++++++++++++++++
 2 files changed, 55 insertions(+), 67 deletions(-)

diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
index c308432..b14c90a 100644
--- a/drivers/gpu/drm/radeon/r600_hdmi.c
+++ b/drivers/gpu/drm/radeon/r600_hdmi.c
@@ -134,78 +134,22 @@ static void r600_hdmi_infoframe_checksum(uint8_t packetType,
 }
 
 /*
- * build a HDMI Video Info Frame
+ * Upload a HDMI AVI Infoframe
  */
-static void r600_hdmi_videoinfoframe(
-	struct drm_encoder *encoder,
-	enum r600_hdmi_color_format color_format,
-	int active_information_present,
-	uint8_t active_format_aspect_ratio,
-	uint8_t scan_information,
-	uint8_t colorimetry,
-	uint8_t ex_colorimetry,
-	uint8_t quantization,
-	int ITC,
-	uint8_t picture_aspect_ratio,
-	uint8_t video_format_identification,
-	uint8_t pixel_repetition,
-	uint8_t non_uniform_picture_scaling,
-	uint8_t bar_info_data_valid,
-	uint16_t top_bar,
-	uint16_t bottom_bar,
-	uint16_t left_bar,
-	uint16_t right_bar
-)
+static void r600_hdmi_avi_infoframe(struct drm_encoder *encoder,
+				    struct radeon_avi_infoframe infoframe)
 {
 	struct drm_device *dev = encoder->dev;
 	struct radeon_device *rdev = dev->dev_private;
 	uint32_t offset = to_radeon_encoder(encoder)->hdmi_offset;
 
-	uint8_t frame[14];
-
-	frame[0x0] = 0;
-	frame[0x1] =
-		(scan_information & 0x3) |
-		((bar_info_data_valid & 0x3) << 2) |
-		((active_information_present & 0x1) << 4) |
-		((color_format & 0x3) << 5);
-	frame[0x2] =
-		(active_format_aspect_ratio & 0xF) |
-		((picture_aspect_ratio & 0x3) << 4) |
-		((colorimetry & 0x3) << 6);
-	frame[0x3] =
-		(non_uniform_picture_scaling & 0x3) |
-		((quantization & 0x3) << 2) |
-		((ex_colorimetry & 0x7) << 4) |
-		((ITC & 0x1) << 7);
-	frame[0x4] = (video_format_identification & 0x7F);
-	frame[0x5] = (pixel_repetition & 0xF);
-	frame[0x6] = (top_bar & 0xFF);
-	frame[0x7] = (top_bar >> 8);
-	frame[0x8] = (bottom_bar & 0xFF);
-	frame[0x9] = (bottom_bar >> 8);
-	frame[0xA] = (left_bar & 0xFF);
-	frame[0xB] = (left_bar >> 8);
-	frame[0xC] = (right_bar & 0xFF);
-	frame[0xD] = (right_bar >> 8);
+	/* Standard says about 0x82 0x02 but radeon uses 0x81 0x01...? */
+	r600_hdmi_infoframe_checksum(0x81, 0x01, 13, (u8 *)&infoframe);
 
-	r600_hdmi_infoframe_checksum(0x82, 0x02, 0x0D, frame);
-	/* Our header values (type, version, length) should be alright, Intel
-	 * is using the same. Checksum function also seems to be OK, it works
-	 * fine for audio infoframe. However calculated value is always lower
-	 * by 2 in comparison to fglrx. It breaks displaying anything in case
-	 * of TVs that strictly check the checksum. Hack it manually here to
-	 * workaround this issue. */
-	frame[0x0] += 2;
-
-	WREG32(HDMI0_AVI_INFO0 + offset,
-		frame[0x0] | (frame[0x1] << 8) | (frame[0x2] << 16) | (frame[0x3] << 24));
-	WREG32(HDMI0_AVI_INFO1 + offset,
-		frame[0x4] | (frame[0x5] << 8) | (frame[0x6] << 16) | (frame[0x7] << 24));
-	WREG32(HDMI0_AVI_INFO2 + offset,
-		frame[0x8] | (frame[0x9] << 8) | (frame[0xA] << 16) | (frame[0xB] << 24));
-	WREG32(HDMI0_AVI_INFO3 + offset,
-		frame[0xC] | (frame[0xD] << 8));
+	WREG32(HDMI0_AVI_INFO0 + offset, ((u32 *)&infoframe)[0]);
+	WREG32(HDMI0_AVI_INFO1 + offset, ((u32 *)&infoframe)[1]);
+	WREG32(HDMI0_AVI_INFO2 + offset, ((u32 *)&infoframe)[2]);
+	WREG32(HDMI0_AVI_INFO3 + offset, ((u32 *)&infoframe)[3]);
 }
 
 /*
@@ -316,6 +260,10 @@ void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mod
 	struct radeon_device *rdev = dev->dev_private;
 	uint32_t offset = to_radeon_encoder(encoder)->hdmi_offset;
 
+	/* TODO: fill in more avi info */
+	struct radeon_avi_infoframe infoframe = { };
+	infoframe.color_format = 0;
+
 	if (ASIC_IS_DCE5(rdev))
 		return;
 
@@ -367,8 +315,7 @@ void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mod
 
 	WREG32(HDMI0_GC + offset, 0); /* unset HDMI0_GC_AVMUTE */
 
-	r600_hdmi_videoinfoframe(encoder, RGB, 0, 0, 0, 0,
-		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+	r600_hdmi_avi_infoframe(encoder, infoframe);
 
 	r600_hdmi_update_ACR(encoder, mode->clock);
 
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index a7ae4ca..5a5c76f 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -1874,6 +1874,47 @@ struct radeon_hdmi_acr {
 
 };
 
+struct radeon_avi_infoframe {
+	unsigned checksum: 8;
+
+	unsigned scan_information: 2;
+	unsigned bar_info_data_valid: 2;
+	unsigned active_information_present: 1;
+	unsigned color_format: 2;
+	unsigned :1;
+
+	unsigned active_format_aspect_ratio:4;
+	unsigned picture_aspect_ratio:2;
+	unsigned colorimetry:2;
+
+	unsigned non_uniform_picture_scaling:2;
+	unsigned quantization:2;
+	unsigned ex_colorimetry:3;
+	unsigned ITC:1;
+
+	unsigned video_format_identification: 7;
+	unsigned :1;
+
+	unsigned pixel_repetition: 4;
+	unsigned :4;
+
+	unsigned top_bar_lo: 8;
+
+	unsigned top_bar_hi: 8;
+
+	unsigned bottom_bar_lo: 8;
+
+	unsigned bottom_bar_hi: 8;
+
+	unsigned left_bar_lo: 8;
+
+	unsigned left_bar_hi: 8;
+
+	unsigned right_bar_lo: 8;
+
+	unsigned right_bar_hi: 8;
+} __packed;
+
 extern struct radeon_hdmi_acr r600_hdmi_acr(uint32_t clock);
 
 extern void r600_hdmi_enable(struct drm_encoder *encoder);
-- 
1.7.7

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [RFC][PATCH] drm/radeon/hdmi: define struct for AVI infoframe
  2012-05-06 15:31 [RFC][PATCH] drm/radeon/hdmi: define struct for AVI infoframe Rafał Miłecki
@ 2012-05-06 16:19 ` Rafał Miłecki
  2012-05-06 16:22   ` Dave Airlie
  0 siblings, 1 reply; 8+ messages in thread
From: Rafał Miłecki @ 2012-05-06 16:19 UTC (permalink / raw)
  To: dri-devel; +Cc: Christian König

2012/5/6 Rafał Miłecki <zajec5@gmail.com>:
> diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
> index c308432..b14c90a 100644
> --- a/drivers/gpu/drm/radeon/r600_hdmi.c
> +++ b/drivers/gpu/drm/radeon/r600_hdmi.c
> @@ -134,78 +134,22 @@ static void r600_hdmi_infoframe_checksum(uint8_t packetType,
>  }
>
>  /*
> - * build a HDMI Video Info Frame
> + * Upload a HDMI AVI Infoframe
>  */
> -static void r600_hdmi_videoinfoframe(
> -       struct drm_encoder *encoder,
> -       enum r600_hdmi_color_format color_format,
> -       int active_information_present,
> -       uint8_t active_format_aspect_ratio,
> -       uint8_t scan_information,
> -       uint8_t colorimetry,
> -       uint8_t ex_colorimetry,
> -       uint8_t quantization,
> -       int ITC,
> -       uint8_t picture_aspect_ratio,
> -       uint8_t video_format_identification,
> -       uint8_t pixel_repetition,
> -       uint8_t non_uniform_picture_scaling,
> -       uint8_t bar_info_data_valid,
> -       uint16_t top_bar,
> -       uint16_t bottom_bar,
> -       uint16_t left_bar,
> -       uint16_t right_bar
> -)

In case someone wonders about the reason: I think it's really ugly to
have a function taking 18 arguments, 17 of them related to the
infoframe. It makes much more sense for me to use struct for that.
While working on that I though it's reasonable to prepare nice
bitfield __packed struct ready-to-be-written to the GPU registers.

-- 
Rafał
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RFC][PATCH] drm/radeon/hdmi: define struct for AVI infoframe
  2012-05-06 16:19 ` Rafał Miłecki
@ 2012-05-06 16:22   ` Dave Airlie
  2012-05-06 16:28     ` Daniel Vetter
  2012-05-06 16:29     ` Rafał Miłecki
  0 siblings, 2 replies; 8+ messages in thread
From: Dave Airlie @ 2012-05-06 16:22 UTC (permalink / raw)
  To: Rafał Miłecki; +Cc: Christian König, dri-devel

On Sun, May 6, 2012 at 5:19 PM, Rafał Miłecki <zajec5@gmail.com> wrote:
> 2012/5/6 Rafał Miłecki <zajec5@gmail.com>:
>> diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
>> index c308432..b14c90a 100644
>> --- a/drivers/gpu/drm/radeon/r600_hdmi.c
>> +++ b/drivers/gpu/drm/radeon/r600_hdmi.c
>> @@ -134,78 +134,22 @@ static void r600_hdmi_infoframe_checksum(uint8_t packetType,
>>  }
>>
>>  /*
>> - * build a HDMI Video Info Frame
>> + * Upload a HDMI AVI Infoframe
>>  */
>> -static void r600_hdmi_videoinfoframe(
>> -       struct drm_encoder *encoder,
>> -       enum r600_hdmi_color_format color_format,
>> -       int active_information_present,
>> -       uint8_t active_format_aspect_ratio,
>> -       uint8_t scan_information,
>> -       uint8_t colorimetry,
>> -       uint8_t ex_colorimetry,
>> -       uint8_t quantization,
>> -       int ITC,
>> -       uint8_t picture_aspect_ratio,
>> -       uint8_t video_format_identification,
>> -       uint8_t pixel_repetition,
>> -       uint8_t non_uniform_picture_scaling,
>> -       uint8_t bar_info_data_valid,
>> -       uint16_t top_bar,
>> -       uint16_t bottom_bar,
>> -       uint16_t left_bar,
>> -       uint16_t right_bar
>> -)
>
> In case someone wonders about the reason: I think it's really ugly to
> have a function taking 18 arguments, 17 of them related to the
> infoframe. It makes much more sense for me to use struct for that.
> While working on that I though it's reasonable to prepare nice
> bitfield __packed struct ready-to-be-written to the GPU registers.

won't this screw up on other endian machines?

Dave.
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RFC][PATCH] drm/radeon/hdmi: define struct for AVI infoframe
  2012-05-06 16:22   ` Dave Airlie
@ 2012-05-06 16:28     ` Daniel Vetter
  2012-05-06 16:33       ` Rafał Miłecki
  2012-05-06 16:29     ` Rafał Miłecki
  1 sibling, 1 reply; 8+ messages in thread
From: Daniel Vetter @ 2012-05-06 16:28 UTC (permalink / raw)
  To: Dave Airlie; +Cc: Christian König, dri-devel

On Sun, May 06, 2012 at 05:22:59PM +0100, Dave Airlie wrote:
> On Sun, May 6, 2012 at 5:19 PM, Rafał Miłecki <zajec5@gmail.com> wrote:
> > 2012/5/6 Rafał Miłecki <zajec5@gmail.com>:
> >> diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
> >> index c308432..b14c90a 100644
> >> --- a/drivers/gpu/drm/radeon/r600_hdmi.c
> >> +++ b/drivers/gpu/drm/radeon/r600_hdmi.c
> >> @@ -134,78 +134,22 @@ static void r600_hdmi_infoframe_checksum(uint8_t packetType,
> >>  }
> >>
> >>  /*
> >> - * build a HDMI Video Info Frame
> >> + * Upload a HDMI AVI Infoframe
> >>  */
> >> -static void r600_hdmi_videoinfoframe(
> >> -       struct drm_encoder *encoder,
> >> -       enum r600_hdmi_color_format color_format,
> >> -       int active_information_present,
> >> -       uint8_t active_format_aspect_ratio,
> >> -       uint8_t scan_information,
> >> -       uint8_t colorimetry,
> >> -       uint8_t ex_colorimetry,
> >> -       uint8_t quantization,
> >> -       int ITC,
> >> -       uint8_t picture_aspect_ratio,
> >> -       uint8_t video_format_identification,
> >> -       uint8_t pixel_repetition,
> >> -       uint8_t non_uniform_picture_scaling,
> >> -       uint8_t bar_info_data_valid,
> >> -       uint16_t top_bar,
> >> -       uint16_t bottom_bar,
> >> -       uint16_t left_bar,
> >> -       uint16_t right_bar
> >> -)
> >
> > In case someone wonders about the reason: I think it's really ugly to
> > have a function taking 18 arguments, 17 of them related to the
> > infoframe. It makes much more sense for me to use struct for that.
> > While working on that I though it's reasonable to prepare nice
> > bitfield __packed struct ready-to-be-written to the GPU registers.
> 
> won't this screw up on other endian machines?

... and can we have this in a slightly generic way maybe? We have copies
of this in i915 and nouveau.
-Daniel
-- 
Daniel Vetter
Mail: daniel@ffwll.ch
Mobile: +41 (0)79 365 57 48
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RFC][PATCH] drm/radeon/hdmi: define struct for AVI infoframe
  2012-05-06 16:22   ` Dave Airlie
  2012-05-06 16:28     ` Daniel Vetter
@ 2012-05-06 16:29     ` Rafał Miłecki
  2012-05-07  7:38       ` Michel Dänzer
  1 sibling, 1 reply; 8+ messages in thread
From: Rafał Miłecki @ 2012-05-06 16:29 UTC (permalink / raw)
  To: Dave Airlie; +Cc: Christian König, dri-devel

2012/5/6 Dave Airlie <airlied@gmail.com>:
> On Sun, May 6, 2012 at 5:19 PM, Rafał Miłecki <zajec5@gmail.com> wrote:
>> 2012/5/6 Rafał Miłecki <zajec5@gmail.com>:
>>> diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
>>> index c308432..b14c90a 100644
>>> --- a/drivers/gpu/drm/radeon/r600_hdmi.c
>>> +++ b/drivers/gpu/drm/radeon/r600_hdmi.c
>>> @@ -134,78 +134,22 @@ static void r600_hdmi_infoframe_checksum(uint8_t packetType,
>>>  }
>>>
>>>  /*
>>> - * build a HDMI Video Info Frame
>>> + * Upload a HDMI AVI Infoframe
>>>  */
>>> -static void r600_hdmi_videoinfoframe(
>>> -       struct drm_encoder *encoder,
>>> -       enum r600_hdmi_color_format color_format,
>>> -       int active_information_present,
>>> -       uint8_t active_format_aspect_ratio,
>>> -       uint8_t scan_information,
>>> -       uint8_t colorimetry,
>>> -       uint8_t ex_colorimetry,
>>> -       uint8_t quantization,
>>> -       int ITC,
>>> -       uint8_t picture_aspect_ratio,
>>> -       uint8_t video_format_identification,
>>> -       uint8_t pixel_repetition,
>>> -       uint8_t non_uniform_picture_scaling,
>>> -       uint8_t bar_info_data_valid,
>>> -       uint16_t top_bar,
>>> -       uint16_t bottom_bar,
>>> -       uint16_t left_bar,
>>> -       uint16_t right_bar
>>> -)
>>
>> In case someone wonders about the reason: I think it's really ugly to
>> have a function taking 18 arguments, 17 of them related to the
>> infoframe. It makes much more sense for me to use struct for that.
>> While working on that I though it's reasonable to prepare nice
>> bitfield __packed struct ready-to-be-written to the GPU registers.
>
> won't this screw up on other endian machines?

Hm, maybe it can. Is there some easy to handle it correctly? Some trick like
__le8 foo: 3
__le8 bar: 1
maybe?

-- 
Rafał
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RFC][PATCH] drm/radeon/hdmi: define struct for AVI infoframe
  2012-05-06 16:28     ` Daniel Vetter
@ 2012-05-06 16:33       ` Rafał Miłecki
  0 siblings, 0 replies; 8+ messages in thread
From: Rafał Miłecki @ 2012-05-06 16:33 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: Christian König, dri-devel

2012/5/6 Daniel Vetter <daniel@ffwll.ch>:
> On Sun, May 06, 2012 at 05:22:59PM +0100, Dave Airlie wrote:
>> On Sun, May 6, 2012 at 5:19 PM, Rafał Miłecki <zajec5@gmail.com> wrote:
>> > 2012/5/6 Rafał Miłecki <zajec5@gmail.com>:
>> >> diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
>> >> index c308432..b14c90a 100644
>> >> --- a/drivers/gpu/drm/radeon/r600_hdmi.c
>> >> +++ b/drivers/gpu/drm/radeon/r600_hdmi.c
>> >> @@ -134,78 +134,22 @@ static void r600_hdmi_infoframe_checksum(uint8_t packetType,
>> >>  }
>> >>
>> >>  /*
>> >> - * build a HDMI Video Info Frame
>> >> + * Upload a HDMI AVI Infoframe
>> >>  */
>> >> -static void r600_hdmi_videoinfoframe(
>> >> -       struct drm_encoder *encoder,
>> >> -       enum r600_hdmi_color_format color_format,
>> >> -       int active_information_present,
>> >> -       uint8_t active_format_aspect_ratio,
>> >> -       uint8_t scan_information,
>> >> -       uint8_t colorimetry,
>> >> -       uint8_t ex_colorimetry,
>> >> -       uint8_t quantization,
>> >> -       int ITC,
>> >> -       uint8_t picture_aspect_ratio,
>> >> -       uint8_t video_format_identification,
>> >> -       uint8_t pixel_repetition,
>> >> -       uint8_t non_uniform_picture_scaling,
>> >> -       uint8_t bar_info_data_valid,
>> >> -       uint16_t top_bar,
>> >> -       uint16_t bottom_bar,
>> >> -       uint16_t left_bar,
>> >> -       uint16_t right_bar
>> >> -)
>> >
>> > In case someone wonders about the reason: I think it's really ugly to
>> > have a function taking 18 arguments, 17 of them related to the
>> > infoframe. It makes much more sense for me to use struct for that.
>> > While working on that I though it's reasonable to prepare nice
>> > bitfield __packed struct ready-to-be-written to the GPU registers.
>>
>> won't this screw up on other endian machines?
>
> ... and can we have this in a slightly generic way maybe? We have copies
> of this in i915 and nouveau.

More or less...

I know Intel defines struct dip_infoframe.

Unfortunately it uses things like:
	uint8_t type;		/* HB0 */
	uint8_t ver;		/* HB1 */
	uint8_t len;		/* HB2 - body len, not including checksum */
	uint8_t ecc;		/* Header ECC */
which we don't need in radeon. But maybe we could just ignore that
additional fields in radeon and live with just a little bigger struct.

However Intel still has fields like:
/* PB1 - Y 6:5, A 4:4, B 3:2, S 1:0 */
uint8_t Y_A_B_S;
/* PB2 - C 7:6, M 5:4, R 3:0 */
uint8_t C_M_R;

That means it still requires setting some fields with bitshifting and
ORing. If this is possible to make it endian-safe I've love to split
such a fields into separated-and-shorter ones.

-- 
Rafał
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RFC][PATCH] drm/radeon/hdmi: define struct for AVI infoframe
  2012-05-06 16:29     ` Rafał Miłecki
@ 2012-05-07  7:38       ` Michel Dänzer
  2012-05-07 18:14         ` Jerome Glisse
  0 siblings, 1 reply; 8+ messages in thread
From: Michel Dänzer @ 2012-05-07  7:38 UTC (permalink / raw)
  To: Rafał Miłecki; +Cc: Christian König, dri-devel

On Son, 2012-05-06 at 18:29 +0200, Rafał Miłecki wrote: 
> 2012/5/6 Dave Airlie <airlied@gmail.com>:
> > On Sun, May 6, 2012 at 5:19 PM, Rafał Miłecki <zajec5@gmail.com> wrote:
> >> 2012/5/6 Rafał Miłecki <zajec5@gmail.com>:
> >>> diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
> >>> index c308432..b14c90a 100644
> >>> --- a/drivers/gpu/drm/radeon/r600_hdmi.c
> >>> +++ b/drivers/gpu/drm/radeon/r600_hdmi.c
> >>> @@ -134,78 +134,22 @@ static void r600_hdmi_infoframe_checksum(uint8_t packetType,
> >>>  }
> >>>
> >>>  /*
> >>> - * build a HDMI Video Info Frame
> >>> + * Upload a HDMI AVI Infoframe
> >>>  */
> >>> -static void r600_hdmi_videoinfoframe(
> >>> -       struct drm_encoder *encoder,
> >>> -       enum r600_hdmi_color_format color_format,
> >>> -       int active_information_present,
> >>> -       uint8_t active_format_aspect_ratio,
> >>> -       uint8_t scan_information,
> >>> -       uint8_t colorimetry,
> >>> -       uint8_t ex_colorimetry,
> >>> -       uint8_t quantization,
> >>> -       int ITC,
> >>> -       uint8_t picture_aspect_ratio,
> >>> -       uint8_t video_format_identification,
> >>> -       uint8_t pixel_repetition,
> >>> -       uint8_t non_uniform_picture_scaling,
> >>> -       uint8_t bar_info_data_valid,
> >>> -       uint16_t top_bar,
> >>> -       uint16_t bottom_bar,
> >>> -       uint16_t left_bar,
> >>> -       uint16_t right_bar
> >>> -)
> >>
> >> In case someone wonders about the reason: I think it's really ugly to
> >> have a function taking 18 arguments, 17 of them related to the
> >> infoframe. It makes much more sense for me to use struct for that.
> >> While working on that I though it's reasonable to prepare nice
> >> bitfield __packed struct ready-to-be-written to the GPU registers.
> >
> > won't this screw up on other endian machines?
> 
> Hm, maybe it can. Is there some easy to handle it correctly? Some trick like
> __le8 foo: 3
> __le8 bar: 1
> maybe?

Not really. The memory layout of bitfields is basically completely up to
the C implementation, so IMHO they're just inadequate for describing
fixed memory layouts.


-- 
Earthling Michel Dänzer           |                   http://www.amd.com
Libre software enthusiast         |          Debian, X and DRI developer
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RFC][PATCH] drm/radeon/hdmi: define struct for AVI infoframe
  2012-05-07  7:38       ` Michel Dänzer
@ 2012-05-07 18:14         ` Jerome Glisse
  0 siblings, 0 replies; 8+ messages in thread
From: Jerome Glisse @ 2012-05-07 18:14 UTC (permalink / raw)
  To: Michel Dänzer; +Cc: Christian König, dri-devel

On Mon, May 7, 2012 at 3:38 AM, Michel Dänzer <michel@daenzer.net> wrote:
> On Son, 2012-05-06 at 18:29 +0200, Rafał Miłecki wrote:
>> 2012/5/6 Dave Airlie <airlied@gmail.com>:
>> > On Sun, May 6, 2012 at 5:19 PM, Rafał Miłecki <zajec5@gmail.com> wrote:
>> >> 2012/5/6 Rafał Miłecki <zajec5@gmail.com>:
>> >>> diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
>> >>> index c308432..b14c90a 100644
>> >>> --- a/drivers/gpu/drm/radeon/r600_hdmi.c
>> >>> +++ b/drivers/gpu/drm/radeon/r600_hdmi.c
>> >>> @@ -134,78 +134,22 @@ static void r600_hdmi_infoframe_checksum(uint8_t packetType,
>> >>>  }
>> >>>
>> >>>  /*
>> >>> - * build a HDMI Video Info Frame
>> >>> + * Upload a HDMI AVI Infoframe
>> >>>  */
>> >>> -static void r600_hdmi_videoinfoframe(
>> >>> -       struct drm_encoder *encoder,
>> >>> -       enum r600_hdmi_color_format color_format,
>> >>> -       int active_information_present,
>> >>> -       uint8_t active_format_aspect_ratio,
>> >>> -       uint8_t scan_information,
>> >>> -       uint8_t colorimetry,
>> >>> -       uint8_t ex_colorimetry,
>> >>> -       uint8_t quantization,
>> >>> -       int ITC,
>> >>> -       uint8_t picture_aspect_ratio,
>> >>> -       uint8_t video_format_identification,
>> >>> -       uint8_t pixel_repetition,
>> >>> -       uint8_t non_uniform_picture_scaling,
>> >>> -       uint8_t bar_info_data_valid,
>> >>> -       uint16_t top_bar,
>> >>> -       uint16_t bottom_bar,
>> >>> -       uint16_t left_bar,
>> >>> -       uint16_t right_bar
>> >>> -)
>> >>
>> >> In case someone wonders about the reason: I think it's really ugly to
>> >> have a function taking 18 arguments, 17 of them related to the
>> >> infoframe. It makes much more sense for me to use struct for that.
>> >> While working on that I though it's reasonable to prepare nice
>> >> bitfield __packed struct ready-to-be-written to the GPU registers.
>> >
>> > won't this screw up on other endian machines?
>>
>> Hm, maybe it can. Is there some easy to handle it correctly? Some trick like
>> __le8 foo: 3
>> __le8 bar: 1
>> maybe?
>
> Not really. The memory layout of bitfields is basically completely up to
> the C implementation, so IMHO they're just inadequate for describing
> fixed memory layouts.
>
>

Yes i agree please stay away from bitfields, i know it looks cool but
bitshift is cool too.

Cheers,
Jerome
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2012-05-07 18:14 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-05-06 15:31 [RFC][PATCH] drm/radeon/hdmi: define struct for AVI infoframe Rafał Miłecki
2012-05-06 16:19 ` Rafał Miłecki
2012-05-06 16:22   ` Dave Airlie
2012-05-06 16:28     ` Daniel Vetter
2012-05-06 16:33       ` Rafał Miłecki
2012-05-06 16:29     ` Rafał Miłecki
2012-05-07  7:38       ` Michel Dänzer
2012-05-07 18:14         ` Jerome Glisse

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.