blob: 53d7ba868a5d9b6920837282e71c773f9b89b509 [file] [log] [blame]
// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/graphics/display/drivers/intel-i915/registers-pipe.h"
#include <gtest/gtest.h>
#include <hwreg/bitfields.h>
namespace i915 {
namespace {
TEST(PlaneControlTest, PipeSliceRequestArbitrationSlotCountTigerLake) {
auto plane_ctl_1_a = hwreg::RegisterAddr<registers::PlaneControl>(0x70280).FromValue(0);
plane_ctl_1_a.set_reg_value(0).set_pipe_slice_request_arbitration_slot_count_tiger_lake(8);
EXPECT_EQ(0b0111'0000'0000'0000'0000'0000'0000'0000u, plane_ctl_1_a.reg_value());
EXPECT_EQ(8, plane_ctl_1_a.pipe_slice_request_arbitration_slot_count_tiger_lake());
plane_ctl_1_a.set_reg_value(0).set_pipe_slice_request_arbitration_slot_count_tiger_lake(7);
EXPECT_EQ(0b0110'0000'0000'0000'0000'0000'0000'0000u, plane_ctl_1_a.reg_value());
EXPECT_EQ(7, plane_ctl_1_a.pipe_slice_request_arbitration_slot_count_tiger_lake());
plane_ctl_1_a.set_reg_value(0).set_pipe_slice_request_arbitration_slot_count_tiger_lake(5);
EXPECT_EQ(0b0100'0000'0000'0000'0000'0000'0000'0000u, plane_ctl_1_a.reg_value());
EXPECT_EQ(5, plane_ctl_1_a.pipe_slice_request_arbitration_slot_count_tiger_lake());
plane_ctl_1_a.set_reg_value(0xffff'ffff)
.set_pipe_slice_request_arbitration_slot_count_tiger_lake(1);
EXPECT_EQ(0b1000'1111'1111'1111'1111'1111'1111'1111u, plane_ctl_1_a.reg_value());
EXPECT_EQ(1, plane_ctl_1_a.pipe_slice_request_arbitration_slot_count_tiger_lake());
}
TEST(PlaneControlTest, HasYComponentInPlanarYuv420TigerLake) {
auto plane_ctl_1_a = hwreg::RegisterAddr<registers::PlaneControl>(0x70280).FromValue(0);
plane_ctl_1_a.set_reg_value(0).set_has_y_component_in_planar_yuv420_tiger_lake(true);
EXPECT_EQ(0b0000'0000'0000'1000'0000'0000'0000'0000u, plane_ctl_1_a.reg_value());
EXPECT_EQ(true, plane_ctl_1_a.has_y_component_in_planar_yuv420_tiger_lake());
plane_ctl_1_a.set_reg_value(0xffff'ffff).set_has_y_component_in_planar_yuv420_tiger_lake(false);
EXPECT_EQ(0b1111'1111'1111'0111'1111'1111'1111'1111u, plane_ctl_1_a.reg_value());
EXPECT_EQ(false, plane_ctl_1_a.has_y_component_in_planar_yuv420_tiger_lake());
}
TEST(PlaneControlTest, RenderDecompressionClearColorDisabledTigerLake) {
auto plane_ctl_1_a = hwreg::RegisterAddr<registers::PlaneControl>(0x70280).FromValue(0);
plane_ctl_1_a.set_reg_value(0).set_render_decompression_clear_color_disabled_tiger_lake(true);
EXPECT_EQ(0b0000'0000'0000'0000'0010'0000'0000'0000u, plane_ctl_1_a.reg_value());
EXPECT_EQ(true, plane_ctl_1_a.render_decompression_clear_color_disabled_tiger_lake());
plane_ctl_1_a.set_reg_value(0xffff'ffff)
.set_render_decompression_clear_color_disabled_tiger_lake(false);
EXPECT_EQ(0b1111'1111'1111'1111'1101'1111'1111'1111u, plane_ctl_1_a.reg_value());
EXPECT_EQ(false, plane_ctl_1_a.render_decompression_clear_color_disabled_tiger_lake());
}
TEST(PlaneControlTest, DecompressMediaCompressedSurfacesTigerLake) {
auto plane_ctl_1_a = hwreg::RegisterAddr<registers::PlaneControl>(0x70280).FromValue(0);
plane_ctl_1_a.set_reg_value(0).set_decompress_media_compressed_surfaces_tiger_lake(true);
EXPECT_EQ(0b0000'0000'0000'0000'0000'0000'0001'0000u, plane_ctl_1_a.reg_value());
EXPECT_EQ(true, plane_ctl_1_a.decompress_media_compressed_surfaces_tiger_lake());
plane_ctl_1_a.set_reg_value(0xffff'ffff)
.set_decompress_media_compressed_surfaces_tiger_lake(false);
EXPECT_EQ(0b1111'1111'1111'1111'1111'1111'1110'1111u, plane_ctl_1_a.reg_value());
EXPECT_EQ(false, plane_ctl_1_a.decompress_media_compressed_surfaces_tiger_lake());
}
} // namespace
} // namespace i915