Re: [PATCH 3/3] modesetting: add tile property support (v2)

2015-03-31 Thread Chris Wilson
On Tue, Mar 31, 2015 at 01:47:26PM +1000, Dave Airlie wrote:
 From: Dave Airlie airl...@redhat.com
 
 This adds tiling support to the server modesetting driver,
 it retrieves the tile info from the kernel and translates
 it into the server format and exposes the property.
 
 Signed-off-by: Dave Airlie airl...@redhat.com
 ---

 +if (drmmode_output-tile_blob) {
 +struct xf86CrtcTileInfo tile_info;
 +
 +if (xf86OutputParseKMSTile(drmmode_output-tile_blob-data, 
 drmmode_output-tile_blob-length, tile_info) == TRUE)
 +xf86OutputSetTile(output, tile_info);
 +}

How do we clear the previous tile?

struct xf86CrtcTileInfo tile_info;

memset(tile_info, 0, sizeof(tile_info));
if (drmmode_output-tile_blob)
xf86OutputParseKMSTile(drmmode_output-tile_blob-data,
   drmmode_output-tile_blob-length,
   tile_info);
xf86OutputSetTile(output, tile_info);

-- 
Chris Wilson, Intel Open Source Technology Centre
___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Re: [PATCH 3/3] modesetting: add tile property support (v2)

2015-03-31 Thread Chris Wilson
On Tue, Mar 31, 2015 at 10:07:53AM +0100, Chris Wilson wrote:
 On Tue, Mar 31, 2015 at 01:47:26PM +1000, Dave Airlie wrote:
  From: Dave Airlie airl...@redhat.com
  
  This adds tiling support to the server modesetting driver,
  it retrieves the tile info from the kernel and translates
  it into the server format and exposes the property.
  
  Signed-off-by: Dave Airlie airl...@redhat.com
  ---
 
  +if (drmmode_output-tile_blob) {
  +struct xf86CrtcTileInfo tile_info;
  +
  +if (xf86OutputParseKMSTile(drmmode_output-tile_blob-data, 
  drmmode_output-tile_blob-length, tile_info) == TRUE)
  +xf86OutputSetTile(output, tile_info);
  +}
 
 How do we clear the previous tile?
 
   struct xf86CrtcTileInfo tile_info;
 
   memset(tile_info, 0, sizeof(tile_info));
   if (drmmode_output-tile_blob)
   xf86OutputParseKMSTile(drmmode_output-tile_blob-data,
  drmmode_output-tile_blob-length,
  tile_info);
   xf86OutputSetTile(output, tile_info);

Or maybe:

struct xf86CrtcTileInfo tile_info, *set = NULL;

if (drmmode_output-tile_blob 
xf86OutputParseKMSTile(drmmode_output-tile_blob-data,
   drmmode_output-tile_blob-length,
   tile_info))
set = tile_info;

xf86OutputSetTile(output, set);

-- 
Chris Wilson, Intel Open Source Technology Centre
___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

[PATCH 3/3] modesetting: add tile property support (v2)

2015-03-30 Thread Dave Airlie
From: Dave Airlie airl...@redhat.com

This adds tiling support to the server modesetting driver,
it retrieves the tile info from the kernel and translates
it into the server format and exposes the property.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 hw/xfree86/drivers/modesetting/drmmode_display.c | 42 
 hw/xfree86/drivers/modesetting/drmmode_display.h |  1 +
 2 files changed, 43 insertions(+)

diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c 
b/hw/xfree86/drivers/modesetting/drmmode_display.c
index c7cb453..f12a446 100644
--- a/hw/xfree86/drivers/modesetting/drmmode_display.c
+++ b/hw/xfree86/drivers/modesetting/drmmode_display.c
@@ -749,6 +749,46 @@ drmmode_output_mode_valid(xf86OutputPtr output, 
DisplayModePtr pModes)
 return MODE_OK;
 }
 
+static void
+drmmode_output_attach_tile(xf86OutputPtr output)
+{
+drmmode_output_private_ptr drmmode_output = output-driver_private;
+drmModeConnectorPtr koutput = drmmode_output-mode_output;
+drmmode_ptr drmmode = drmmode_output-drmmode;
+int i;
+
+if (!koutput) {
+xf86OutputSetTile(output, NULL);
+return;
+}
+
+/* look for a TILE property */
+for (i = 0; i  koutput-count_props; i++) {
+drmModePropertyPtr props;
+props = drmModeGetProperty(drmmode-fd, koutput-props[i]);
+if (!props)
+continue;
+
+if (!(props-flags  DRM_MODE_PROP_BLOB)) {
+drmModeFreeProperty(props);
+continue;
+}
+
+if (!strcmp(props-name, TILE)) {
+drmModeFreePropertyBlob(drmmode_output-tile_blob);
+drmmode_output-tile_blob =
+drmModeGetPropertyBlob(drmmode-fd, koutput-prop_values[i]);
+}
+drmModeFreeProperty(props);
+}
+if (drmmode_output-tile_blob) {
+struct xf86CrtcTileInfo tile_info;
+
+if (xf86OutputParseKMSTile(drmmode_output-tile_blob-data, 
drmmode_output-tile_blob-length, tile_info) == TRUE)
+xf86OutputSetTile(output, tile_info);
+}
+}
+
 static Bool
 has_panel_fitter(xf86OutputPtr output)
 {
@@ -857,6 +897,8 @@ drmmode_output_get_modes(xf86OutputPtr output)
 }
 xf86OutputSetEDID(output, mon);
 
+drmmode_output_attach_tile(output);
+
 /* modes should already be available */
 for (i = 0; i  koutput-count_modes; i++) {
 Mode = xnfalloc(sizeof(DisplayModeRec));
diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.h 
b/hw/xfree86/drivers/modesetting/drmmode_display.h
index 769842d..746692b 100644
--- a/hw/xfree86/drivers/modesetting/drmmode_display.h
+++ b/hw/xfree86/drivers/modesetting/drmmode_display.h
@@ -121,6 +121,7 @@ typedef struct {
 drmModeConnectorPtr mode_output;
 drmModeEncoderPtr *mode_encoders;
 drmModePropertyBlobPtr edid_blob;
+drmModePropertyBlobPtr tile_blob;
 int dpms_enum_id;
 int num_props;
 drmmode_prop_ptr props;
-- 
2.3.3

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel