From: kernel test robot <lkp@intel.com>
To: Fangzhi Zuo <Jerry.Zuo@amd.com>
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org,
linux-kernel@vger.kernel.org,
Alex Deucher <alexander.deucher@amd.com>,
Hersen Wu <hersenxs.wu@amd.com>
Subject: [agd5f:drm-next 150/190] drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_mst_types.c:213:6: warning: no previous prototype for function 'retrieve_downstream_port_device'
Date: Wed, 26 Jan 2022 18:52:31 +0800 [thread overview]
Message-ID: <202201261822.GyXGxsid-lkp@intel.com> (raw)
tree: https://gitlab.freedesktop.org/agd5f/linux.git drm-next
head: 63e583c8843f305a3e334a96d5de00435f4d38a2
commit: 09db246ceef70bc6bd9c3e0d02b3c855f8fc25fb [150/190] drm/amd/display: Retrieve MST Downstream Port Status
config: i386-randconfig-a013-20220124 (https://download.01.org/0day-ci/archive/20220126/202201261822.GyXGxsid-lkp@intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 2a1b7aa016c0f4b5598806205bdfbab1ea2d92c4)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
git remote add agd5f https://gitlab.freedesktop.org/agd5f/linux.git
git fetch --no-tags agd5f drm-next
git checkout 09db246ceef70bc6bd9c3e0d02b3c855f8fc25fb
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/gpu/drm/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
In file included from drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_mst_types.c:43:
drivers/gpu/drm/amd/amdgpu/../display/dmub/inc/dmub_cmd.h:2918:12: warning: variable 'temp' set but not used [-Wunused-but-set-variable]
uint64_t temp;
^
>> drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_mst_types.c:213:6: warning: no previous prototype for function 'retrieve_downstream_port_device' [-Wmissing-prototypes]
bool retrieve_downstream_port_device(struct amdgpu_dm_connector *aconnector)
^
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_mst_types.c:213:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
bool retrieve_downstream_port_device(struct amdgpu_dm_connector *aconnector)
^
static
2 warnings generated.
vim +/retrieve_downstream_port_device +213 drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_mst_types.c
41
42 #include "i2caux_interface.h"
> 43 #include "dmub_cmd.h"
44 #if defined(CONFIG_DEBUG_FS)
45 #include "amdgpu_dm_debugfs.h"
46 #endif
47
48 #if defined(CONFIG_DRM_AMD_DC_DCN)
49 #include "dc/dcn20/dcn20_resource.h"
50 #endif
51
52 static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux,
53 struct drm_dp_aux_msg *msg)
54 {
55 ssize_t result = 0;
56 struct aux_payload payload;
57 enum aux_return_code_type operation_result;
58
59 if (WARN_ON(msg->size > 16))
60 return -E2BIG;
61
62 payload.address = msg->address;
63 payload.data = msg->buffer;
64 payload.length = msg->size;
65 payload.reply = &msg->reply;
66 payload.i2c_over_aux = (msg->request & DP_AUX_NATIVE_WRITE) == 0;
67 payload.write = (msg->request & DP_AUX_I2C_READ) == 0;
68 payload.mot = (msg->request & DP_AUX_I2C_MOT) != 0;
69 payload.write_status_update =
70 (msg->request & DP_AUX_I2C_WRITE_STATUS_UPDATE) != 0;
71 payload.defer_delay = 0;
72
73 result = dc_link_aux_transfer_raw(TO_DM_AUX(aux)->ddc_service, &payload,
74 &operation_result);
75
76 if (payload.write && result >= 0)
77 result = msg->size;
78
79 if (result < 0)
80 switch (operation_result) {
81 case AUX_RET_SUCCESS:
82 break;
83 case AUX_RET_ERROR_HPD_DISCON:
84 case AUX_RET_ERROR_UNKNOWN:
85 case AUX_RET_ERROR_INVALID_OPERATION:
86 case AUX_RET_ERROR_PROTOCOL_ERROR:
87 result = -EIO;
88 break;
89 case AUX_RET_ERROR_INVALID_REPLY:
90 case AUX_RET_ERROR_ENGINE_ACQUIRE:
91 result = -EBUSY;
92 break;
93 case AUX_RET_ERROR_TIMEOUT:
94 result = -ETIMEDOUT;
95 break;
96 }
97
98 return result;
99 }
100
101 static void
102 dm_dp_mst_connector_destroy(struct drm_connector *connector)
103 {
104 struct amdgpu_dm_connector *aconnector =
105 to_amdgpu_dm_connector(connector);
106
107 if (aconnector->dc_sink) {
108 dc_link_remove_remote_sink(aconnector->dc_link,
109 aconnector->dc_sink);
110 dc_sink_release(aconnector->dc_sink);
111 }
112
113 kfree(aconnector->edid);
114
115 drm_connector_cleanup(connector);
116 drm_dp_mst_put_port_malloc(aconnector->port);
117 kfree(aconnector);
118 }
119
120 static int
121 amdgpu_dm_mst_connector_late_register(struct drm_connector *connector)
122 {
123 struct amdgpu_dm_connector *amdgpu_dm_connector =
124 to_amdgpu_dm_connector(connector);
125 int r;
126
127 r = drm_dp_mst_connector_late_register(connector,
128 amdgpu_dm_connector->port);
129 if (r < 0)
130 return r;
131
132 #if defined(CONFIG_DEBUG_FS)
133 connector_debugfs_init(amdgpu_dm_connector);
134 #endif
135
136 return 0;
137 }
138
139 static void
140 amdgpu_dm_mst_connector_early_unregister(struct drm_connector *connector)
141 {
142 struct amdgpu_dm_connector *amdgpu_dm_connector =
143 to_amdgpu_dm_connector(connector);
144 struct drm_dp_mst_port *port = amdgpu_dm_connector->port;
145
146 drm_dp_mst_connector_early_unregister(connector, port);
147 }
148
149 static const struct drm_connector_funcs dm_dp_mst_connector_funcs = {
150 .fill_modes = drm_helper_probe_single_connector_modes,
151 .destroy = dm_dp_mst_connector_destroy,
152 .reset = amdgpu_dm_connector_funcs_reset,
153 .atomic_duplicate_state = amdgpu_dm_connector_atomic_duplicate_state,
154 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
155 .atomic_set_property = amdgpu_dm_connector_atomic_set_property,
156 .atomic_get_property = amdgpu_dm_connector_atomic_get_property,
157 .late_register = amdgpu_dm_mst_connector_late_register,
158 .early_unregister = amdgpu_dm_mst_connector_early_unregister,
159 };
160
161 #if defined(CONFIG_DRM_AMD_DC_DCN)
162 bool needs_dsc_aux_workaround(struct dc_link *link)
163 {
164 if (link->dpcd_caps.branch_dev_id == DP_BRANCH_DEVICE_ID_90CC24 &&
165 (link->dpcd_caps.dpcd_rev.raw == DPCD_REV_14 || link->dpcd_caps.dpcd_rev.raw == DPCD_REV_12) &&
166 link->dpcd_caps.sink_count.bits.SINK_COUNT >= 2)
167 return true;
168
169 return false;
170 }
171
172 static bool validate_dsc_caps_on_connector(struct amdgpu_dm_connector *aconnector)
173 {
174 struct dc_sink *dc_sink = aconnector->dc_sink;
175 struct drm_dp_mst_port *port = aconnector->port;
176 u8 dsc_caps[16] = { 0 };
177 u8 dsc_branch_dec_caps_raw[3] = { 0 }; // DSC branch decoder caps 0xA0 ~ 0xA2
178 u8 *dsc_branch_dec_caps = NULL;
179
180 aconnector->dsc_aux = drm_dp_mst_dsc_aux_for_port(port);
181
182 /*
183 * drm_dp_mst_dsc_aux_for_port() will return NULL for certain configs
184 * because it only check the dsc/fec caps of the "port variable" and not the dock
185 *
186 * This case will return NULL: DSC capabe MST dock connected to a non fec/dsc capable display
187 *
188 * Workaround: explicitly check the use case above and use the mst dock's aux as dsc_aux
189 *
190 */
191 if (!aconnector->dsc_aux && !port->parent->port_parent &&
192 needs_dsc_aux_workaround(aconnector->dc_link))
193 aconnector->dsc_aux = &aconnector->mst_port->dm_dp_aux.aux;
194
195 if (!aconnector->dsc_aux)
196 return false;
197
198 if (drm_dp_dpcd_read(aconnector->dsc_aux, DP_DSC_SUPPORT, dsc_caps, 16) < 0)
199 return false;
200
201 if (drm_dp_dpcd_read(aconnector->dsc_aux,
202 DP_DSC_BRANCH_OVERALL_THROUGHPUT_0, dsc_branch_dec_caps_raw, 3) == 3)
203 dsc_branch_dec_caps = dsc_branch_dec_caps_raw;
204
205 if (!dc_dsc_parse_dsc_dpcd(aconnector->dc_link->ctx->dc,
206 dsc_caps, dsc_branch_dec_caps,
207 &dc_sink->dsc_caps.dsc_dec_caps))
208 return false;
209
210 return true;
211 }
212
> 213 bool retrieve_downstream_port_device(struct amdgpu_dm_connector *aconnector)
214 {
215 union dp_downstream_port_present ds_port_present;
216
217 if (!aconnector->dsc_aux)
218 return false;
219
220 if (drm_dp_dpcd_read(aconnector->dsc_aux, DP_DOWNSTREAMPORT_PRESENT, &ds_port_present, 1) < 0) {
221 DRM_INFO("Failed to read downstream_port_present 0x05 from DFP of branch device\n");
222 return false;
223 }
224
225 aconnector->mst_downstream_port_present = ds_port_present;
226 DRM_INFO("Downstream port present %d, type %d\n",
227 ds_port_present.fields.PORT_PRESENT, ds_port_present.fields.PORT_TYPE);
228
229 return true;
230 }
231 #endif
232
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: [agd5f:drm-next 150/190] drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_mst_types.c:213:6: warning: no previous prototype for function 'retrieve_downstream_port_device'
Date: Wed, 26 Jan 2022 18:52:31 +0800 [thread overview]
Message-ID: <202201261822.GyXGxsid-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 9369 bytes --]
tree: https://gitlab.freedesktop.org/agd5f/linux.git drm-next
head: 63e583c8843f305a3e334a96d5de00435f4d38a2
commit: 09db246ceef70bc6bd9c3e0d02b3c855f8fc25fb [150/190] drm/amd/display: Retrieve MST Downstream Port Status
config: i386-randconfig-a013-20220124 (https://download.01.org/0day-ci/archive/20220126/202201261822.GyXGxsid-lkp(a)intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 2a1b7aa016c0f4b5598806205bdfbab1ea2d92c4)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
git remote add agd5f https://gitlab.freedesktop.org/agd5f/linux.git
git fetch --no-tags agd5f drm-next
git checkout 09db246ceef70bc6bd9c3e0d02b3c855f8fc25fb
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/gpu/drm/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
In file included from drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_mst_types.c:43:
drivers/gpu/drm/amd/amdgpu/../display/dmub/inc/dmub_cmd.h:2918:12: warning: variable 'temp' set but not used [-Wunused-but-set-variable]
uint64_t temp;
^
>> drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_mst_types.c:213:6: warning: no previous prototype for function 'retrieve_downstream_port_device' [-Wmissing-prototypes]
bool retrieve_downstream_port_device(struct amdgpu_dm_connector *aconnector)
^
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_mst_types.c:213:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
bool retrieve_downstream_port_device(struct amdgpu_dm_connector *aconnector)
^
static
2 warnings generated.
vim +/retrieve_downstream_port_device +213 drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_mst_types.c
41
42 #include "i2caux_interface.h"
> 43 #include "dmub_cmd.h"
44 #if defined(CONFIG_DEBUG_FS)
45 #include "amdgpu_dm_debugfs.h"
46 #endif
47
48 #if defined(CONFIG_DRM_AMD_DC_DCN)
49 #include "dc/dcn20/dcn20_resource.h"
50 #endif
51
52 static ssize_t dm_dp_aux_transfer(struct drm_dp_aux *aux,
53 struct drm_dp_aux_msg *msg)
54 {
55 ssize_t result = 0;
56 struct aux_payload payload;
57 enum aux_return_code_type operation_result;
58
59 if (WARN_ON(msg->size > 16))
60 return -E2BIG;
61
62 payload.address = msg->address;
63 payload.data = msg->buffer;
64 payload.length = msg->size;
65 payload.reply = &msg->reply;
66 payload.i2c_over_aux = (msg->request & DP_AUX_NATIVE_WRITE) == 0;
67 payload.write = (msg->request & DP_AUX_I2C_READ) == 0;
68 payload.mot = (msg->request & DP_AUX_I2C_MOT) != 0;
69 payload.write_status_update =
70 (msg->request & DP_AUX_I2C_WRITE_STATUS_UPDATE) != 0;
71 payload.defer_delay = 0;
72
73 result = dc_link_aux_transfer_raw(TO_DM_AUX(aux)->ddc_service, &payload,
74 &operation_result);
75
76 if (payload.write && result >= 0)
77 result = msg->size;
78
79 if (result < 0)
80 switch (operation_result) {
81 case AUX_RET_SUCCESS:
82 break;
83 case AUX_RET_ERROR_HPD_DISCON:
84 case AUX_RET_ERROR_UNKNOWN:
85 case AUX_RET_ERROR_INVALID_OPERATION:
86 case AUX_RET_ERROR_PROTOCOL_ERROR:
87 result = -EIO;
88 break;
89 case AUX_RET_ERROR_INVALID_REPLY:
90 case AUX_RET_ERROR_ENGINE_ACQUIRE:
91 result = -EBUSY;
92 break;
93 case AUX_RET_ERROR_TIMEOUT:
94 result = -ETIMEDOUT;
95 break;
96 }
97
98 return result;
99 }
100
101 static void
102 dm_dp_mst_connector_destroy(struct drm_connector *connector)
103 {
104 struct amdgpu_dm_connector *aconnector =
105 to_amdgpu_dm_connector(connector);
106
107 if (aconnector->dc_sink) {
108 dc_link_remove_remote_sink(aconnector->dc_link,
109 aconnector->dc_sink);
110 dc_sink_release(aconnector->dc_sink);
111 }
112
113 kfree(aconnector->edid);
114
115 drm_connector_cleanup(connector);
116 drm_dp_mst_put_port_malloc(aconnector->port);
117 kfree(aconnector);
118 }
119
120 static int
121 amdgpu_dm_mst_connector_late_register(struct drm_connector *connector)
122 {
123 struct amdgpu_dm_connector *amdgpu_dm_connector =
124 to_amdgpu_dm_connector(connector);
125 int r;
126
127 r = drm_dp_mst_connector_late_register(connector,
128 amdgpu_dm_connector->port);
129 if (r < 0)
130 return r;
131
132 #if defined(CONFIG_DEBUG_FS)
133 connector_debugfs_init(amdgpu_dm_connector);
134 #endif
135
136 return 0;
137 }
138
139 static void
140 amdgpu_dm_mst_connector_early_unregister(struct drm_connector *connector)
141 {
142 struct amdgpu_dm_connector *amdgpu_dm_connector =
143 to_amdgpu_dm_connector(connector);
144 struct drm_dp_mst_port *port = amdgpu_dm_connector->port;
145
146 drm_dp_mst_connector_early_unregister(connector, port);
147 }
148
149 static const struct drm_connector_funcs dm_dp_mst_connector_funcs = {
150 .fill_modes = drm_helper_probe_single_connector_modes,
151 .destroy = dm_dp_mst_connector_destroy,
152 .reset = amdgpu_dm_connector_funcs_reset,
153 .atomic_duplicate_state = amdgpu_dm_connector_atomic_duplicate_state,
154 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
155 .atomic_set_property = amdgpu_dm_connector_atomic_set_property,
156 .atomic_get_property = amdgpu_dm_connector_atomic_get_property,
157 .late_register = amdgpu_dm_mst_connector_late_register,
158 .early_unregister = amdgpu_dm_mst_connector_early_unregister,
159 };
160
161 #if defined(CONFIG_DRM_AMD_DC_DCN)
162 bool needs_dsc_aux_workaround(struct dc_link *link)
163 {
164 if (link->dpcd_caps.branch_dev_id == DP_BRANCH_DEVICE_ID_90CC24 &&
165 (link->dpcd_caps.dpcd_rev.raw == DPCD_REV_14 || link->dpcd_caps.dpcd_rev.raw == DPCD_REV_12) &&
166 link->dpcd_caps.sink_count.bits.SINK_COUNT >= 2)
167 return true;
168
169 return false;
170 }
171
172 static bool validate_dsc_caps_on_connector(struct amdgpu_dm_connector *aconnector)
173 {
174 struct dc_sink *dc_sink = aconnector->dc_sink;
175 struct drm_dp_mst_port *port = aconnector->port;
176 u8 dsc_caps[16] = { 0 };
177 u8 dsc_branch_dec_caps_raw[3] = { 0 }; // DSC branch decoder caps 0xA0 ~ 0xA2
178 u8 *dsc_branch_dec_caps = NULL;
179
180 aconnector->dsc_aux = drm_dp_mst_dsc_aux_for_port(port);
181
182 /*
183 * drm_dp_mst_dsc_aux_for_port() will return NULL for certain configs
184 * because it only check the dsc/fec caps of the "port variable" and not the dock
185 *
186 * This case will return NULL: DSC capabe MST dock connected to a non fec/dsc capable display
187 *
188 * Workaround: explicitly check the use case above and use the mst dock's aux as dsc_aux
189 *
190 */
191 if (!aconnector->dsc_aux && !port->parent->port_parent &&
192 needs_dsc_aux_workaround(aconnector->dc_link))
193 aconnector->dsc_aux = &aconnector->mst_port->dm_dp_aux.aux;
194
195 if (!aconnector->dsc_aux)
196 return false;
197
198 if (drm_dp_dpcd_read(aconnector->dsc_aux, DP_DSC_SUPPORT, dsc_caps, 16) < 0)
199 return false;
200
201 if (drm_dp_dpcd_read(aconnector->dsc_aux,
202 DP_DSC_BRANCH_OVERALL_THROUGHPUT_0, dsc_branch_dec_caps_raw, 3) == 3)
203 dsc_branch_dec_caps = dsc_branch_dec_caps_raw;
204
205 if (!dc_dsc_parse_dsc_dpcd(aconnector->dc_link->ctx->dc,
206 dsc_caps, dsc_branch_dec_caps,
207 &dc_sink->dsc_caps.dsc_dec_caps))
208 return false;
209
210 return true;
211 }
212
> 213 bool retrieve_downstream_port_device(struct amdgpu_dm_connector *aconnector)
214 {
215 union dp_downstream_port_present ds_port_present;
216
217 if (!aconnector->dsc_aux)
218 return false;
219
220 if (drm_dp_dpcd_read(aconnector->dsc_aux, DP_DOWNSTREAMPORT_PRESENT, &ds_port_present, 1) < 0) {
221 DRM_INFO("Failed to read downstream_port_present 0x05 from DFP of branch device\n");
222 return false;
223 }
224
225 aconnector->mst_downstream_port_present = ds_port_present;
226 DRM_INFO("Downstream port present %d, type %d\n",
227 ds_port_present.fields.PORT_PRESENT, ds_port_present.fields.PORT_TYPE);
228
229 return true;
230 }
231 #endif
232
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
next reply other threads:[~2022-01-26 10:52 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-26 10:52 kernel test robot [this message]
2022-01-26 10:52 ` [agd5f:drm-next 150/190] drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_mst_types.c:213:6: warning: no previous prototype for function 'retrieve_downstream_port_device' kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202201261822.GyXGxsid-lkp@intel.com \
--to=lkp@intel.com \
--cc=Jerry.Zuo@amd.com \
--cc=alexander.deucher@amd.com \
--cc=hersenxs.wu@amd.com \
--cc=kbuild-all@lists.01.org \
--cc=linux-kernel@vger.kernel.org \
--cc=llvm@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.