aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorSamson Tam <Samson.Tam@amd.com>2018-05-30 15:44:50 -0400
committerAlex Deucher <alexander.deucher@amd.com>2018-07-05 17:38:45 -0400
commit1eeedbcc20d64ff2ef7eb9823f85bbb1c2545064 (patch)
treea04bda4497b806276a08ddefafb324e3cbf36ede /drivers/gpu
parent7f93c1de64693dc18afe55559f14cee6b5403c6c (diff)
drm/amd/display: get board layout for edid emulation
Signed-off-by: Samson Tam <Samson.Tam@amd.com> Reviewed-by: Aric Cyr <Aric.Cyr@amd.com> Acked-by: Harry Wentland <harry.wentland@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/amd/display/dc/bios/bios_parser.c196
-rw-r--r--drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c218
-rw-r--r--drivers/gpu/drm/amd/display/dc/dc_bios_types.h4
-rw-r--r--drivers/gpu/drm/amd/display/include/grph_object_defs.h46
-rw-r--r--drivers/gpu/drm/amd/display/include/grph_object_id.h11
5 files changed, 474 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c b/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c
index c7f0b27e457e..be8a2494355a 100644
--- a/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c
+++ b/drivers/gpu/drm/amd/display/dc/bios/bios_parser.c
@@ -3762,6 +3762,200 @@ static struct integrated_info *bios_parser_create_integrated_info(
3762 return NULL; 3762 return NULL;
3763} 3763}
3764 3764
3765enum bp_result update_slot_layout_info(
3766 struct dc_bios *dcb,
3767 unsigned int i,
3768 struct slot_layout_info *slot_layout_info,
3769 unsigned int record_offset)
3770{
3771 unsigned int j;
3772 struct bios_parser *bp;
3773 ATOM_BRACKET_LAYOUT_RECORD *record;
3774 ATOM_COMMON_RECORD_HEADER *record_header;
3775 enum bp_result result = BP_RESULT_NORECORD;
3776
3777 bp = BP_FROM_DCB(dcb);
3778 record = NULL;
3779 record_header = NULL;
3780
3781 for (;;) {
3782
3783 record_header = (ATOM_COMMON_RECORD_HEADER *)
3784 GET_IMAGE(ATOM_COMMON_RECORD_HEADER, record_offset);
3785 if (record_header == NULL) {
3786 result = BP_RESULT_BADBIOSTABLE;
3787 break;
3788 }
3789
3790 /* the end of the list */
3791 if (record_header->ucRecordType == 0xff ||
3792 record_header->ucRecordSize == 0) {
3793 break;
3794 }
3795
3796 if (record_header->ucRecordType ==
3797 ATOM_BRACKET_LAYOUT_RECORD_TYPE &&
3798 sizeof(ATOM_BRACKET_LAYOUT_RECORD)
3799 <= record_header->ucRecordSize) {
3800 record = (ATOM_BRACKET_LAYOUT_RECORD *)
3801 (record_header);
3802 result = BP_RESULT_OK;
3803 break;
3804 }
3805
3806 record_offset += record_header->ucRecordSize;
3807 }
3808
3809 /* return if the record not found */
3810 if (result != BP_RESULT_OK)
3811 return result;
3812
3813 /* get slot sizes */
3814 slot_layout_info->length = record->ucLength;
3815 slot_layout_info->width = record->ucWidth;
3816
3817 /* get info for each connector in the slot */
3818 slot_layout_info->num_of_connectors = record->ucConnNum;
3819 for (j = 0; j < slot_layout_info->num_of_connectors; ++j) {
3820 slot_layout_info->connectors[j].connector_type =
3821 (enum connector_layout_type)
3822 (record->asConnInfo[j].ucConnectorType);
3823 switch (record->asConnInfo[j].ucConnectorType) {
3824 case CONNECTOR_TYPE_DVI_D:
3825 slot_layout_info->connectors[j].connector_type =
3826 CONNECTOR_LAYOUT_TYPE_DVI_D;
3827 slot_layout_info->connectors[j].length =
3828 CONNECTOR_SIZE_DVI;
3829 break;
3830
3831 case CONNECTOR_TYPE_HDMI:
3832 slot_layout_info->connectors[j].connector_type =
3833 CONNECTOR_LAYOUT_TYPE_HDMI;
3834 slot_layout_info->connectors[j].length =
3835 CONNECTOR_SIZE_HDMI;
3836 break;
3837
3838 case CONNECTOR_TYPE_DISPLAY_PORT:
3839 slot_layout_info->connectors[j].connector_type =
3840 CONNECTOR_LAYOUT_TYPE_DP;
3841 slot_layout_info->connectors[j].length =
3842 CONNECTOR_SIZE_DP;
3843 break;
3844
3845 case CONNECTOR_TYPE_MINI_DISPLAY_PORT:
3846 slot_layout_info->connectors[j].connector_type =
3847 CONNECTOR_LAYOUT_TYPE_MINI_DP;
3848 slot_layout_info->connectors[j].length =
3849 CONNECTOR_SIZE_MINI_DP;
3850 break;
3851
3852 default:
3853 slot_layout_info->connectors[j].connector_type =
3854 CONNECTOR_LAYOUT_TYPE_UNKNOWN;
3855 slot_layout_info->connectors[j].length =
3856 CONNECTOR_SIZE_UNKNOWN;
3857 }
3858
3859 slot_layout_info->connectors[j].position =
3860 record->asConnInfo[j].ucPosition;
3861 slot_layout_info->connectors[j].connector_id =
3862 object_id_from_bios_object_id(
3863 record->asConnInfo[j].usConnectorObjectId);
3864 }
3865 return result;
3866}
3867
3868
3869enum bp_result get_bracket_layout_record(
3870 struct dc_bios *dcb,
3871 unsigned int bracket_layout_id,
3872 struct slot_layout_info *slot_layout_info)
3873{
3874 unsigned int i;
3875 unsigned int record_offset;
3876 struct bios_parser *bp;
3877 enum bp_result result;
3878 ATOM_OBJECT *object;
3879 ATOM_OBJECT_TABLE *object_table;
3880 unsigned int genericTableOffset;
3881
3882 bp = BP_FROM_DCB(dcb);
3883 object = NULL;
3884 if (slot_layout_info == NULL) {
3885 DC_LOG_DETECTION_EDID_PARSER("Invalid slot_layout_info\n");
3886 return BP_RESULT_BADINPUT;
3887 }
3888
3889
3890 genericTableOffset = bp->object_info_tbl_offset +
3891 bp->object_info_tbl.v1_3->usMiscObjectTableOffset;
3892 object_table = (ATOM_OBJECT_TABLE *)
3893 GET_IMAGE(ATOM_OBJECT_TABLE, genericTableOffset);
3894 if (!object_table)
3895 return BP_RESULT_FAILURE;
3896
3897 result = BP_RESULT_NORECORD;
3898 for (i = 0; i < object_table->ucNumberOfObjects; ++i) {
3899
3900 if (bracket_layout_id ==
3901 object_table->asObjects[i].usObjectID) {
3902
3903 object = &object_table->asObjects[i];
3904 record_offset = object->usRecordOffset +
3905 bp->object_info_tbl_offset;
3906
3907 result = update_slot_layout_info(dcb, i,
3908 slot_layout_info, record_offset);
3909 break;
3910 }
3911 }
3912 return result;
3913}
3914
3915static enum bp_result bios_get_board_layout_info(
3916 struct dc_bios *dcb,
3917 struct board_layout_info *board_layout_info)
3918{
3919 unsigned int i;
3920 struct bios_parser *bp;
3921 enum bp_result record_result;
3922
3923 const unsigned int slot_index_to_vbios_id[MAX_BOARD_SLOTS] = {
3924 GENERICOBJECT_BRACKET_LAYOUT_ENUM_ID1,
3925 GENERICOBJECT_BRACKET_LAYOUT_ENUM_ID2,
3926 0, 0
3927 };
3928
3929 bp = BP_FROM_DCB(dcb);
3930 if (board_layout_info == NULL) {
3931 DC_LOG_DETECTION_EDID_PARSER("Invalid board_layout_info\n");
3932 return BP_RESULT_BADINPUT;
3933 }
3934
3935 board_layout_info->num_of_slots = 0;
3936
3937 for (i = 0; i < MAX_BOARD_SLOTS; ++i) {
3938 record_result = get_bracket_layout_record(dcb,
3939 slot_index_to_vbios_id[i],
3940 &board_layout_info->slots[i]);
3941
3942 if (record_result == BP_RESULT_NORECORD && i > 0)
3943 break; /* no more slots present in bios */
3944 else if (record_result != BP_RESULT_OK)
3945 return record_result; /* fail */
3946
3947 ++board_layout_info->num_of_slots;
3948 }
3949
3950 /* all data is valid */
3951 board_layout_info->is_number_of_slots_valid = 1;
3952 board_layout_info->is_slots_size_valid = 1;
3953 board_layout_info->is_connector_offsets_valid = 1;
3954 board_layout_info->is_connector_lengths_valid = 1;
3955
3956 return BP_RESULT_OK;
3957}
3958
3765/******************************************************************************/ 3959/******************************************************************************/
3766 3960
3767static const struct dc_vbios_funcs vbios_funcs = { 3961static const struct dc_vbios_funcs vbios_funcs = {
@@ -3836,6 +4030,8 @@ static const struct dc_vbios_funcs vbios_funcs = {
3836 .post_init = bios_parser_post_init, /* patch vbios table for mxm module by reading i2c */ 4030 .post_init = bios_parser_post_init, /* patch vbios table for mxm module by reading i2c */
3837 4031
3838 .bios_parser_destroy = bios_parser_destroy, 4032 .bios_parser_destroy = bios_parser_destroy,
4033
4034 .get_board_layout_info = bios_get_board_layout_info,
3839}; 4035};
3840 4036
3841static bool bios_parser_construct( 4037static bool bios_parser_construct(
diff --git a/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c b/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c
index b8cef7af3c4a..aeb56e402ccc 100644
--- a/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c
+++ b/drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c
@@ -43,6 +43,29 @@
43#include "bios_parser_interface.h" 43#include "bios_parser_interface.h"
44 44
45#include "bios_parser_common.h" 45#include "bios_parser_common.h"
46
47/* Temporarily add in defines until ObjectID.h patch is updated in a few days */
48#ifndef GENERIC_OBJECT_ID_BRACKET_LAYOUT
49#define GENERIC_OBJECT_ID_BRACKET_LAYOUT 0x05
50#endif /* GENERIC_OBJECT_ID_BRACKET_LAYOUT */
51
52#ifndef GENERICOBJECT_BRACKET_LAYOUT_ENUM_ID1
53#define GENERICOBJECT_BRACKET_LAYOUT_ENUM_ID1 \
54 (GRAPH_OBJECT_TYPE_GENERIC << OBJECT_TYPE_SHIFT |\
55 GRAPH_OBJECT_ENUM_ID1 << ENUM_ID_SHIFT |\
56 GENERIC_OBJECT_ID_BRACKET_LAYOUT << OBJECT_ID_SHIFT)
57#endif /* GENERICOBJECT_BRACKET_LAYOUT_ENUM_ID1 */
58
59#ifndef GENERICOBJECT_BRACKET_LAYOUT_ENUM_ID2
60#define GENERICOBJECT_BRACKET_LAYOUT_ENUM_ID2 \
61 (GRAPH_OBJECT_TYPE_GENERIC << OBJECT_TYPE_SHIFT |\
62 GRAPH_OBJECT_ENUM_ID2 << ENUM_ID_SHIFT |\
63 GENERIC_OBJECT_ID_BRACKET_LAYOUT << OBJECT_ID_SHIFT)
64#endif /* GENERICOBJECT_BRACKET_LAYOUT_ENUM_ID2 */
65
66#define DC_LOGGER \
67 bp->base.ctx->logger
68
46#define LAST_RECORD_TYPE 0xff 69#define LAST_RECORD_TYPE 0xff
47#define SMU9_SYSPLL0_ID 0 70#define SMU9_SYSPLL0_ID 0
48 71
@@ -86,7 +109,6 @@ static struct atom_encoder_caps_record *get_encoder_cap_record(
86 109
87#define DATA_TABLES(table) (bp->master_data_tbl->listOfdatatables.table) 110#define DATA_TABLES(table) (bp->master_data_tbl->listOfdatatables.table)
88 111
89
90static void destruct(struct bios_parser *bp) 112static void destruct(struct bios_parser *bp)
91{ 113{
92 kfree(bp->base.bios_local_image); 114 kfree(bp->base.bios_local_image);
@@ -1854,6 +1876,198 @@ static struct integrated_info *bios_parser_create_integrated_info(
1854 return NULL; 1876 return NULL;
1855} 1877}
1856 1878
1879static enum bp_result update_slot_layout_info(
1880 struct dc_bios *dcb,
1881 unsigned int i,
1882 struct slot_layout_info *slot_layout_info)
1883{
1884 unsigned int record_offset;
1885 unsigned int j;
1886 struct atom_display_object_path_v2 *object;
1887 struct atom_bracket_layout_record *record;
1888 struct atom_common_record_header *record_header;
1889 enum bp_result result;
1890 struct bios_parser *bp;
1891 struct object_info_table *tbl;
1892 struct display_object_info_table_v1_4 *v1_4;
1893
1894 record = NULL;
1895 record_header = NULL;
1896 result = BP_RESULT_NORECORD;
1897
1898 bp = BP_FROM_DCB(dcb);
1899 tbl = &bp->object_info_tbl;
1900 v1_4 = tbl->v1_4;
1901
1902 object = &v1_4->display_path[i];
1903 record_offset = (unsigned int)
1904 (object->disp_recordoffset) +
1905 (unsigned int)(bp->object_info_tbl_offset);
1906
1907 for (;;) {
1908
1909 record_header = (struct atom_common_record_header *)
1910 GET_IMAGE(struct atom_common_record_header,
1911 record_offset);
1912 if (record_header == NULL) {
1913 result = BP_RESULT_BADBIOSTABLE;
1914 break;
1915 }
1916
1917 /* the end of the list */
1918 if (record_header->record_type == 0xff ||
1919 record_header->record_size == 0) {
1920 break;
1921 }
1922
1923 if (record_header->record_type ==
1924 ATOM_BRACKET_LAYOUT_RECORD_TYPE &&
1925 sizeof(struct atom_bracket_layout_record)
1926 <= record_header->record_size) {
1927 record = (struct atom_bracket_layout_record *)
1928 (record_header);
1929 result = BP_RESULT_OK;
1930 break;
1931 }
1932
1933 record_offset += record_header->record_size;
1934 }
1935
1936 /* return if the record not found */
1937 if (result != BP_RESULT_OK)
1938 return result;
1939
1940 /* get slot sizes */
1941 slot_layout_info->length = record->bracketlen;
1942 slot_layout_info->width = record->bracketwidth;
1943
1944 /* get info for each connector in the slot */
1945 slot_layout_info->num_of_connectors = record->conn_num;
1946 for (j = 0; j < slot_layout_info->num_of_connectors; ++j) {
1947 slot_layout_info->connectors[j].connector_type =
1948 (enum connector_layout_type)
1949 (record->conn_info[j].connector_type);
1950 switch (record->conn_info[j].connector_type) {
1951 case CONNECTOR_TYPE_DVI_D:
1952 slot_layout_info->connectors[j].connector_type =
1953 CONNECTOR_LAYOUT_TYPE_DVI_D;
1954 slot_layout_info->connectors[j].length =
1955 CONNECTOR_SIZE_DVI;
1956 break;
1957
1958 case CONNECTOR_TYPE_HDMI:
1959 slot_layout_info->connectors[j].connector_type =
1960 CONNECTOR_LAYOUT_TYPE_HDMI;
1961 slot_layout_info->connectors[j].length =
1962 CONNECTOR_SIZE_HDMI;
1963 break;
1964
1965 case CONNECTOR_TYPE_DISPLAY_PORT:
1966 slot_layout_info->connectors[j].connector_type =
1967 CONNECTOR_LAYOUT_TYPE_DP;
1968 slot_layout_info->connectors[j].length =
1969 CONNECTOR_SIZE_DP;
1970 break;
1971
1972 case CONNECTOR_TYPE_MINI_DISPLAY_PORT:
1973 slot_layout_info->connectors[j].connector_type =
1974 CONNECTOR_LAYOUT_TYPE_MINI_DP;
1975 slot_layout_info->connectors[j].length =
1976 CONNECTOR_SIZE_MINI_DP;
1977 break;
1978
1979 default:
1980 slot_layout_info->connectors[j].connector_type =
1981 CONNECTOR_LAYOUT_TYPE_UNKNOWN;
1982 slot_layout_info->connectors[j].length =
1983 CONNECTOR_SIZE_UNKNOWN;
1984 }
1985
1986 slot_layout_info->connectors[j].position =
1987 record->conn_info[j].position;
1988 slot_layout_info->connectors[j].connector_id =
1989 object_id_from_bios_object_id(
1990 record->conn_info[j].connectorobjid);
1991 }
1992 return result;
1993}
1994
1995
1996static enum bp_result get_bracket_layout_record(
1997 struct dc_bios *dcb,
1998 unsigned int bracket_layout_id,
1999 struct slot_layout_info *slot_layout_info)
2000{
2001 unsigned int i;
2002 struct bios_parser *bp = BP_FROM_DCB(dcb);
2003 enum bp_result result;
2004 struct object_info_table *tbl;
2005 struct display_object_info_table_v1_4 *v1_4;
2006
2007 if (slot_layout_info == NULL) {
2008 DC_LOG_DETECTION_EDID_PARSER("Invalid slot_layout_info\n");
2009 return BP_RESULT_BADINPUT;
2010 }
2011 tbl = &bp->object_info_tbl;
2012 v1_4 = tbl->v1_4;
2013
2014 result = BP_RESULT_NORECORD;
2015 for (i = 0; i < v1_4->number_of_path; ++i) {
2016
2017 if (bracket_layout_id ==
2018 v1_4->display_path[i].display_objid) {
2019 result = update_slot_layout_info(dcb, i,
2020 slot_layout_info);
2021 break;
2022 }
2023 }
2024 return result;
2025}
2026
2027static enum bp_result bios_get_board_layout_info(
2028 struct dc_bios *dcb,
2029 struct board_layout_info *board_layout_info)
2030{
2031 unsigned int i;
2032 struct bios_parser *bp;
2033 enum bp_result record_result;
2034
2035 const unsigned int slot_index_to_vbios_id[MAX_BOARD_SLOTS] = {
2036 GENERICOBJECT_BRACKET_LAYOUT_ENUM_ID1,
2037 GENERICOBJECT_BRACKET_LAYOUT_ENUM_ID2,
2038 0, 0
2039 };
2040
2041 bp = BP_FROM_DCB(dcb);
2042 if (board_layout_info == NULL) {
2043 DC_LOG_DETECTION_EDID_PARSER("Invalid board_layout_info\n");
2044 return BP_RESULT_BADINPUT;
2045 }
2046
2047 board_layout_info->num_of_slots = 0;
2048
2049 for (i = 0; i < MAX_BOARD_SLOTS; ++i) {
2050 record_result = get_bracket_layout_record(dcb,
2051 slot_index_to_vbios_id[i],
2052 &board_layout_info->slots[i]);
2053
2054 if (record_result == BP_RESULT_NORECORD && i > 0)
2055 break; /* no more slots present in bios */
2056 else if (record_result != BP_RESULT_OK)
2057 return record_result; /* fail */
2058
2059 ++board_layout_info->num_of_slots;
2060 }
2061
2062 /* all data is valid */
2063 board_layout_info->is_number_of_slots_valid = 1;
2064 board_layout_info->is_slots_size_valid = 1;
2065 board_layout_info->is_connector_offsets_valid = 1;
2066 board_layout_info->is_connector_lengths_valid = 1;
2067
2068 return BP_RESULT_OK;
2069}
2070
1857static const struct dc_vbios_funcs vbios_funcs = { 2071static const struct dc_vbios_funcs vbios_funcs = {
1858 .get_connectors_number = bios_parser_get_connectors_number, 2072 .get_connectors_number = bios_parser_get_connectors_number,
1859 2073
@@ -1925,6 +2139,8 @@ static const struct dc_vbios_funcs vbios_funcs = {
1925 .bios_parser_destroy = firmware_parser_destroy, 2139 .bios_parser_destroy = firmware_parser_destroy,
1926 2140
1927 .get_smu_clock_info = bios_parser_get_smu_clock_info, 2141 .get_smu_clock_info = bios_parser_get_smu_clock_info,
2142
2143 .get_board_layout_info = bios_get_board_layout_info,
1928}; 2144};
1929 2145
1930static bool bios_parser_construct( 2146static bool bios_parser_construct(
diff --git a/drivers/gpu/drm/amd/display/dc/dc_bios_types.h b/drivers/gpu/drm/amd/display/dc/dc_bios_types.h
index d9b84ec7954c..90082bab71f0 100644
--- a/drivers/gpu/drm/amd/display/dc/dc_bios_types.h
+++ b/drivers/gpu/drm/amd/display/dc/dc_bios_types.h
@@ -198,6 +198,10 @@ struct dc_vbios_funcs {
198 void (*post_init)(struct dc_bios *bios); 198 void (*post_init)(struct dc_bios *bios);
199 199
200 void (*bios_parser_destroy)(struct dc_bios **dcb); 200 void (*bios_parser_destroy)(struct dc_bios **dcb);
201
202 enum bp_result (*get_board_layout_info)(
203 struct dc_bios *dcb,
204 struct board_layout_info *board_layout_info);
201}; 205};
202 206
203struct bios_registers { 207struct bios_registers {
diff --git a/drivers/gpu/drm/amd/display/include/grph_object_defs.h b/drivers/gpu/drm/amd/display/include/grph_object_defs.h
index 2941b882b0b6..58bb42ed85ca 100644
--- a/drivers/gpu/drm/amd/display/include/grph_object_defs.h
+++ b/drivers/gpu/drm/amd/display/include/grph_object_defs.h
@@ -37,6 +37,10 @@
37 * ******************************************************************** 37 * ********************************************************************
38 */ 38 */
39 39
40#define MAX_CONNECTOR_NUMBER_PER_SLOT (16)
41#define MAX_BOARD_SLOTS (4)
42#define INVALID_CONNECTOR_INDEX ((unsigned int)(-1))
43
40/* HPD unit id - HW direct translation */ 44/* HPD unit id - HW direct translation */
41enum hpd_source_id { 45enum hpd_source_id {
42 HPD_SOURCEID1 = 0, 46 HPD_SOURCEID1 = 0,
@@ -136,5 +140,47 @@ enum sync_source {
136 SYNC_SOURCE_DUAL_GPU_PIN 140 SYNC_SOURCE_DUAL_GPU_PIN
137}; 141};
138 142
143/* connector sizes in millimeters - from BiosParserTypes.hpp */
144#define CONNECTOR_SIZE_DVI 40
145#define CONNECTOR_SIZE_VGA 32
146#define CONNECTOR_SIZE_HDMI 16
147#define CONNECTOR_SIZE_DP 16
148#define CONNECTOR_SIZE_MINI_DP 9
149#define CONNECTOR_SIZE_UNKNOWN 30
150
151enum connector_layout_type {
152 CONNECTOR_LAYOUT_TYPE_UNKNOWN,
153 CONNECTOR_LAYOUT_TYPE_DVI_D,
154 CONNECTOR_LAYOUT_TYPE_DVI_I,
155 CONNECTOR_LAYOUT_TYPE_VGA,
156 CONNECTOR_LAYOUT_TYPE_HDMI,
157 CONNECTOR_LAYOUT_TYPE_DP,
158 CONNECTOR_LAYOUT_TYPE_MINI_DP,
159};
160struct connector_layout_info {
161 struct graphics_object_id connector_id;
162 enum connector_layout_type connector_type;
163 unsigned int length;
164 unsigned int position; /* offset in mm from right side of the board */
165};
166
167/* length and width in mm */
168struct slot_layout_info {
169 unsigned int length;
170 unsigned int width;
171 unsigned int num_of_connectors;
172 struct connector_layout_info connectors[MAX_CONNECTOR_NUMBER_PER_SLOT];
173};
174
175struct board_layout_info {
176 unsigned int num_of_slots;
139 177
178 /* indicates valid information in bracket layout structure. */
179 unsigned int is_number_of_slots_valid : 1;
180 unsigned int is_slots_size_valid : 1;
181 unsigned int is_connector_offsets_valid : 1;
182 unsigned int is_connector_lengths_valid : 1;
183
184 struct slot_layout_info slots[MAX_BOARD_SLOTS];
185};
140#endif 186#endif
diff --git a/drivers/gpu/drm/amd/display/include/grph_object_id.h b/drivers/gpu/drm/amd/display/include/grph_object_id.h
index 92cc6c112ea6..33b3d755fe65 100644
--- a/drivers/gpu/drm/amd/display/include/grph_object_id.h
+++ b/drivers/gpu/drm/amd/display/include/grph_object_id.h
@@ -292,4 +292,15 @@ static inline enum engine_id dal_graphics_object_id_get_engine_id(
292 return (enum engine_id) id.id; 292 return (enum engine_id) id.id;
293 return ENGINE_ID_UNKNOWN; 293 return ENGINE_ID_UNKNOWN;
294} 294}
295
296static inline bool dal_graphics_object_id_equal(
297 struct graphics_object_id id_1,
298 struct graphics_object_id id_2)
299{
300 if ((id_1.id == id_2.id) && (id_1.enum_id == id_2.enum_id) &&
301 (id_1.type == id_2.type)) {
302 return true;
303 }
304 return false;
305}
295#endif 306#endif