[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[Git][xorg-team/driver/xserver-xorg-video-amdgpu][upstream-unstable] 2 commits: modesetting: add tile property support



Title: GitLab

Timo Aaltonen pushed to branch upstream-unstable at X Strike Force / driver / xserver-xorg-video-amdgpu

Commits:

3 changed files:

Changes:

  • configure.ac
    ... ... @@ -23,7 +23,7 @@
    23 23
     # Initialize Autoconf
    
    24 24
     AC_PREREQ([2.60])
    
    25 25
     AC_INIT([xf86-video-amdgpu],
    
    26
    -        [19.0.0],
    
    26
    +        [19.0.1],
    
    27 27
             [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/AMDgpu],
    
    28 28
             [xf86-video-amdgpu])
    
    29 29
     
    

  • src/drmmode_display.c
    ... ... @@ -2142,6 +2142,51 @@ drmmode_output_mode_valid(xf86OutputPtr output, DisplayModePtr pModes)
    2142 2142
     	return MODE_OK;
    
    2143 2143
     }
    
    2144 2144
     
    
    2145
    +static void
    
    2146
    +drmmode_output_attach_tile(xf86OutputPtr output)
    
    2147
    +{
    
    2148
    +#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1, 17, 99, 901, 0)
    
    2149
    +	drmmode_output_private_ptr drmmode_output = output->driver_private;
    
    2150
    +	drmModeConnectorPtr koutput = drmmode_output->mode_output;
    
    2151
    +	AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(output->scrn);
    
    2152
    +	struct xf86CrtcTileInfo tile_info, *set = NULL;
    
    2153
    +	int i;
    
    2154
    +
    
    2155
    +	if (!koutput) {
    
    2156
    +		xf86OutputSetTile(output, NULL);
    
    2157
    +		return;
    
    2158
    +	}
    
    2159
    +
    
    2160
    +	/* look for a TILE property */
    
    2161
    +	for (i = 0; i < koutput->count_props; i++) {
    
    2162
    +		drmModePropertyPtr props;
    
    2163
    +		props = drmModeGetProperty(pAMDGPUEnt->fd, koutput->props[i]);
    
    2164
    +		if (!props)
    
    2165
    +			continue;
    
    2166
    +
    
    2167
    +		if (!(props->flags & DRM_MODE_PROP_BLOB)) {
    
    2168
    +			drmModeFreeProperty(props);
    
    2169
    +			continue;
    
    2170
    +		}
    
    2171
    +
    
    2172
    +		if (!strcmp(props->name, "TILE")) {
    
    2173
    +			drmModeFreePropertyBlob(drmmode_output->tile_blob);
    
    2174
    +			drmmode_output->tile_blob =
    
    2175
    +				drmModeGetPropertyBlob(pAMDGPUEnt->fd,
    
    2176
    +						       koutput->prop_values[i]);
    
    2177
    +		}
    
    2178
    +		drmModeFreeProperty(props);
    
    2179
    +	}
    
    2180
    +	if (drmmode_output->tile_blob) {
    
    2181
    +		if (xf86OutputParseKMSTile(drmmode_output->tile_blob->data,
    
    2182
    +					   drmmode_output->tile_blob->length,
    
    2183
    +					   &tile_info) == TRUE)
    
    2184
    +			set = &tile_info;
    
    2185
    +	}
    
    2186
    +	xf86OutputSetTile(output, set);
    
    2187
    +#endif
    
    2188
    +}
    
    2189
    +
    
    2145 2190
     static int
    
    2146 2191
     koutput_get_prop_idx(int fd, drmModeConnectorPtr koutput,
    
    2147 2192
             int type, const char *name)
    
    ... ... @@ -2213,6 +2258,8 @@ static DisplayModePtr drmmode_output_get_modes(xf86OutputPtr output)
    2213 2258
     	}
    
    2214 2259
     	xf86OutputSetEDID(output, mon);
    
    2215 2260
     
    
    2261
    +	drmmode_output_attach_tile(output);
    
    2262
    +
    
    2216 2263
     	/* modes should already be available */
    
    2217 2264
     	for (i = 0; i < koutput->count_modes; i++) {
    
    2218 2265
     		Mode = xnfalloc(sizeof(DisplayModeRec));
    
    ... ... @@ -2230,8 +2277,11 @@ static void drmmode_output_destroy(xf86OutputPtr output)
    2230 2277
     	drmmode_output_private_ptr drmmode_output = output->driver_private;
    
    2231 2278
     	int i;
    
    2232 2279
     
    
    2233
    -	if (drmmode_output->edid_blob)
    
    2234
    -		drmModeFreePropertyBlob(drmmode_output->edid_blob);
    
    2280
    +	drmModeFreePropertyBlob(drmmode_output->edid_blob);
    
    2281
    +#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1, 17, 99, 901, 0)
    
    2282
    +	drmModeFreePropertyBlob(drmmode_output->tile_blob);
    
    2283
    +#endif
    
    2284
    +
    
    2235 2285
     	for (i = 0; i < drmmode_output->num_props; i++) {
    
    2236 2286
     		drmModeFreeProperty(drmmode_output->props[i].mode_prop);
    
    2237 2287
     		free(drmmode_output->props[i].atoms);
    

  • src/drmmode_display.h
    ... ... @@ -163,6 +163,9 @@ typedef struct {
    163 163
     	drmModeConnectorPtr mode_output;
    
    164 164
     	drmModeEncoderPtr *mode_encoders;
    
    165 165
     	drmModePropertyBlobPtr edid_blob;
    
    166
    +#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1, 17, 99, 901, 0)
    
    167
    +	drmModePropertyBlobPtr tile_blob;
    
    168
    +#endif
    
    166 169
     	int dpms_enum_id;
    
    167 170
     	int num_props;
    
    168 171
     	drmmode_prop_ptr props;
    


  • Reply to: