class PipeScalerControlTigerLake

Defined at line 155 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

PS_CTRL (Pipe Scaler Control) for Tiger Lake

A pipe Scaler can be used to scale the output of a display pipe or a display

plane. It can scale up / down the resolution and / or scale up the

downsampled chroma pixels or subplanes (for YUV images).

Each pipe has two scalers and they can be assigned to any plane (except for

color) or the display output.

This register is double buffered. See PipeScalerWindowSize for arming and

dis-arming double-buffer updates.

This register has bits that are reserved but not MBZ (must be zero). So, it

can only be safely updated via read-modify-write operations.

Tiger Lake: IHD-OS-TGL-Vol 2c-1.22-Rev 2.0 Part 2, Pages 998-1003

Public Members

 field_is_enabled_164
 field_chroma_upscaling_enabled_173
 field_adaptive_filtering_enabled_186
 field_scaled_plane_index_203
 field_normal_filter_selection_249
 field_adaptive_filter_selection_264
 field_pipe_scaler_location_294
 field_RsvdZ_296
 field_RsvdZ_297
 field_RsvdZ_298
 field_RsvdZ_299
 field_double_buffer_update_disabling_allowed_305
 field_y_plane_binding_raw_318
 field_y_plane_vertical_filter_set_353
 field_y_plane_horizontal_filter_set_361
 field_vertical_filter_set_373
 field_horizontal_filter_set_382
 field_RsvdZ_384
static const uint32_t kBaseAddr

Public Methods

template <, >
typename SelfType::ValueType is_enabled ()

Enables the pipe scaler.

Before enabling the scaler, software should make sure that the scaler

configuration fulfills all the scaler constraints.

Defined at line 164 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
SelfType & set_is_enabled (typename SelfType::ValueType val)

Enables the pipe scaler.

Before enabling the scaler, software should make sure that the scaler

configuration fulfills all the scaler constraints.

Defined at line 164 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
typename SelfType::ValueType chroma_upscaling_enabled ()

If true, the scaler performs YUV chroma upsampling while scaling the

output, which is also called "planar mode" in some documentation.

This bit must be true if and only if the following conditions are met:

- The scaler must be bound to a universal plane instead of a pipe.

- The plane it binds to must be an SDR plane (Plane 4 or 5).

- The plane's active image must be of YUV 420 format.

Defined at line 173 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
SelfType & set_chroma_upscaling_enabled (typename SelfType::ValueType val)

If true, the scaler performs YUV chroma upsampling while scaling the

output, which is also called "planar mode" in some documentation.

This bit must be true if and only if the following conditions are met:

- The scaler must be bound to a universal plane instead of a pipe.

- The plane it binds to must be an SDR plane (Plane 4 or 5).

- The plane's active image must be of YUV 420 format.

Defined at line 173 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
typename SelfType::ValueType adaptive_filtering_enabled ()

Enables the "Adaptive filtering" mode of the pipe scaler.

When set to true, a multi-threshold adaptive filter will be used for

vertical and horizontal filtering. The `filter_selection` field will be

ignored, instead `adaptive_filter_selection` will be used to choose the

filter type.

There are two sets of adaptive filtering thresholds for each pipe scaler.

Threshold values (in `PipeScalerAdaptiveFilterThresholds` register) and

threshold set selection (in `*_filter_set` field) must be programmed before

this bit being enabled.

Defined at line 186 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
SelfType & set_adaptive_filtering_enabled (typename SelfType::ValueType val)

Enables the "Adaptive filtering" mode of the pipe scaler.

When set to true, a multi-threshold adaptive filter will be used for

vertical and horizontal filtering. The `filter_selection` field will be

ignored, instead `adaptive_filter_selection` will be used to choose the

filter type.

There are two sets of adaptive filtering thresholds for each pipe scaler.

Threshold values (in `PipeScalerAdaptiveFilterThresholds` register) and

threshold set selection (in `*_filter_set` field) must be programmed before

this bit being enabled.

Defined at line 186 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
typename SelfType::ValueType scaled_plane_index ()

Selects the index of the plane where the output is scaled. An index of 0

indicates that the output of the whole pipe is scaled.

The value of `scaled_plane_index` must not exceed the number of

planes supported by the pipe. On Tiger Lake, each pipe has 7 planes.

The caller must guarantee that the plane / pipe fulfills all the

constraints below:

- The input size of the pipe / plane must be at least 8 scanlines.

- IF (Interlaced fetch) mode must be disabled.

- Keying can only be enabled if the scaling factor is 1.

- The pixel format must not be 8-bit indexed or XR_BIAS.

- Floating point source pixel values must be within the [0.0, 1.0] range.

- For HDR planes (Plane 1 - 3), the `plane_scaling_enabled` field of the

`PLANE_CUS_CTL` register must be enabled.

Defined at line 203 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
SelfType & set_scaled_plane_index (typename SelfType::ValueType val)

Selects the index of the plane where the output is scaled. An index of 0

indicates that the output of the whole pipe is scaled.

The value of `scaled_plane_index` must not exceed the number of

planes supported by the pipe. On Tiger Lake, each pipe has 7 planes.

The caller must guarantee that the plane / pipe fulfills all the

constraints below:

- The input size of the pipe / plane must be at least 8 scanlines.

- IF (Interlaced fetch) mode must be disabled.

- Keying can only be enabled if the scaling factor is 1.

- The pixel format must not be 8-bit indexed or XR_BIAS.

- Floating point source pixel values must be within the [0.0, 1.0] range.

- For HDR planes (Plane 1 - 3), the `plane_scaling_enabled` field of the

`PLANE_CUS_CTL` register must be enabled.

Defined at line 203 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
NormalFilterSelection normal_filter_selection ()

Selects the filter to use for the non-adaptive filter.

This field only works on non-adaptive mode. If `adaptive_filtering_enabled`

is true, this field will be ignored and `adaptive_filter_selection` will

be used instead.

Defined at line 249 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
SelfType & set_normal_filter_selection (NormalFilterSelection val)

Selects the filter to use for the non-adaptive filter.

This field only works on non-adaptive mode. If `adaptive_filtering_enabled`

is true, this field will be ignored and `adaptive_filter_selection` will

be used instead.

Defined at line 249 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
AdaptiveFilterSelection adaptive_filter_selection ()

Selects the filter to use for the adaptive filter.

This field only works on adaptive mode. If `adaptive_filtering_enabled`

is false, this field will be ignored and `normal_filter_selection` will

be used instead.

Defined at line 264 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
SelfType & set_adaptive_filter_selection (AdaptiveFilterSelection val)

Selects the filter to use for the adaptive filter.

This field only works on adaptive mode. If `adaptive_filtering_enabled`

is false, this field will be ignored and `normal_filter_selection` will

be used instead.

Defined at line 264 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
PipeScalerLocation pipe_scaler_location ()

Specifies the scaler interface on the display pipeline that the pipe

scaler binds to. See `PipeScalerLocation` for details.

This field is effective only when the scaler is bound to the pipe, i.e.

`scaler_binding_selection` field is 0.

Defined at line 294 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
SelfType & set_pipe_scaler_location (PipeScalerLocation val)

Specifies the scaler interface on the display pipeline that the pipe

scaler binds to. See `PipeScalerLocation` for details.

This field is effective only when the scaler is bound to the pipe, i.e.

`scaler_binding_selection` field is 0.

Defined at line 294 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
typename SelfType::ValueType double_buffer_update_disabling_allowed ()

If true, double-buffer updates can be disabled for this plane.

This field applies when the DOUBLE_BUFFER_CTL register is used to disable

the double-buffering of all the resources that allow disabling.

Defined at line 305 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
SelfType & set_double_buffer_update_disabling_allowed (typename SelfType::ValueType val)

If true, double-buffer updates can be disabled for this plane.

This field applies when the DOUBLE_BUFFER_CTL register is used to disable

the double-buffering of all the resources that allow disabling.

Defined at line 305 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
SelfType & set_y_plane_binding_raw (typename SelfType::ValueType val)

Selects the Y plane surface matching the UV plane selected in

`scaled_plane_index`.

This field is effective only if planar mode is enabled.

Only the following values are valid for this field:

- 6 (0b110): indicating Plane 6 is used as input Y plane;

- 7 (0b111): indicating Plane 7 is used as input Y plane.

`y_plane_binding()` and `set_y_plane_binding()` helper methods can be used

to get / set the value of this field.

Defined at line 318 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
typename SelfType::ValueType y_plane_binding_raw ()

Selects the Y plane surface matching the UV plane selected in

`scaled_plane_index`.

This field is effective only if planar mode is enabled.

Only the following values are valid for this field:

- 6 (0b110): indicating Plane 6 is used as input Y plane;

- 7 (0b111): indicating Plane 7 is used as input Y plane.

`y_plane_binding()` and `set_y_plane_binding()` helper methods can be used

to get / set the value of this field.

Defined at line 318 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

uint32_t y_plane_binding ()

Helper method to get the value of this field with validity check.

Defined at line 321 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

PipeScalerControlTigerLake & set_y_plane_binding (uint32_t plane_id)

Helper method to set the value of this field with validity check.

Defined at line 335 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
SelfType & set_y_plane_vertical_filter_set (typename SelfType::ValueType val)

Selects the filter coefficient / threshold set used by the *vertical*

filter for the Y semi-plane bound to the scaler in YUV planar mode.

It's used only in the following conditions:

- When `chrome_upsampling_enabled` is true and `adaptive_filter_enabled`

is true, it indicates the adaptive filter threshold set index for Y

plane scaling filter.

- When `chrome_upsampling_enabled` is true, adaptive filtering is

disabled and `normal_filter_select` is `kProgrammed`, it indicates the

programmed filter coefficient set index for Y plane scaling filter.

Otherwise, this field will be ignored.

Defined at line 353 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
typename SelfType::ValueType y_plane_vertical_filter_set ()

Selects the filter coefficient / threshold set used by the *vertical*

filter for the Y semi-plane bound to the scaler in YUV planar mode.

It's used only in the following conditions:

- When `chrome_upsampling_enabled` is true and `adaptive_filter_enabled`

is true, it indicates the adaptive filter threshold set index for Y

plane scaling filter.

- When `chrome_upsampling_enabled` is true, adaptive filtering is

disabled and `normal_filter_select` is `kProgrammed`, it indicates the

programmed filter coefficient set index for Y plane scaling filter.

Otherwise, this field will be ignored.

Defined at line 353 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
SelfType & set_y_plane_horizontal_filter_set (typename SelfType::ValueType val)

Selects the filter coefficient / threshold set used by the *horizontal*

filter for the Y semi-plane bound to the scaler in YUV planar mode.

The semantics of this field is similar to

`y_plane_vertical_filter_set_selection` but it applies to the horizontal

filter instead.

Defined at line 361 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
typename SelfType::ValueType y_plane_horizontal_filter_set ()

Selects the filter coefficient / threshold set used by the *horizontal*

filter for the Y semi-plane bound to the scaler in YUV planar mode.

The semantics of this field is similar to

`y_plane_vertical_filter_set_selection` but it applies to the horizontal

filter instead.

Defined at line 361 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
SelfType & set_vertical_filter_set (typename SelfType::ValueType val)

Selects the filter coefficient / threshold set used by the *vertical*

filter for the plane (or UV semi-plane, if `chroma_upscaling_enabled`

is true) or pipe bound to the scaler.

It's used in the following conditions:

- If `adaptive_filter_enabled` is true, this field indicates the index of

the adaptive filter threshold set.

- If `adaptive_filter_enabled` is false and `normal_filter_select` is

`kProgrammed`, this field indicates the selected filter coefficient set.

Otherwise, this field is ignored.

Defined at line 373 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
typename SelfType::ValueType vertical_filter_set ()

Selects the filter coefficient / threshold set used by the *vertical*

filter for the plane (or UV semi-plane, if `chroma_upscaling_enabled`

is true) or pipe bound to the scaler.

It's used in the following conditions:

- If `adaptive_filter_enabled` is true, this field indicates the index of

the adaptive filter threshold set.

- If `adaptive_filter_enabled` is false and `normal_filter_select` is

`kProgrammed`, this field indicates the selected filter coefficient set.

Otherwise, this field is ignored.

Defined at line 373 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
typename SelfType::ValueType horizontal_filter_set ()

Selects the filter coefficient / threshold set used by the *horizontal*

filter for the plane (or UV semi-plane, if `chroma_upscaling_enabled` is

true) or pipe bound to the scaler.

The semantics of this field is similar to

`vertical_filter_set_selection` but it applies to the horizontal

filter instead.

Defined at line 382 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

template <, >
SelfType & set_horizontal_filter_set (typename SelfType::ValueType val)

Selects the filter coefficient / threshold set used by the *horizontal*

filter for the plane (or UV semi-plane, if `chroma_upscaling_enabled` is

true) or pipe bound to the scaler.

The semantics of this field is similar to

`vertical_filter_set_selection` but it applies to the horizontal

filter instead.

Defined at line 382 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

Enumerations

enum NormalFilterSelection
Name Value
kMedium 0b00
kProgrammed 0b01
kEdgeEnhance 0b10
kBilinear 0b11

Defined at line 205 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

enum AdaptiveFilterSelection
Name Value
kMedium 0b00
kEdgeEnhance 0b10

Defined at line 251 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

enum PipeScalerLocation
Name Value
kAfterOutputColorSpaceConversion 0b0
kAfterColorSpaceConversion 0b1

This enum class specifies the scaler interface on the display pipeline that

the pipe scaler binds to.

Tiger Lake: Section "Pipes", IHD-OS-TGL-Vol 12-1.22-Rev 2.0 Part 2, Pages 117

Defined at line 270 of file ../../src/graphics/display/drivers/intel-display/registers-pipe-scaler.h

Records