Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/msm/dp: cleanup debugfs handling

Currently there are two subdirs for DP debugfs files, e.g. DP-1, created
by the drm core for the connector, and the msm_dp-DP-1, created by the
DP driver itself. Merge those two, so that there are no extraneous
connector-related subdirs.

Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
Patchwork: https://patchwork.freedesktop.org/patch/563523/
Link: https://lore.kernel.org/r/20231019104419.1032329-1-dmitry.baryshkov@linaro.org
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>

+42 -89
-11
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
··· 274 274 struct dpu_kms *dpu_kms = to_dpu_kms(kms); 275 275 void *p = dpu_hw_util_get_log_mask_ptr(); 276 276 struct dentry *entry; 277 - struct drm_device *dev; 278 - struct msm_drm_private *priv; 279 - int i; 280 277 281 278 if (!p) 282 279 return -EINVAL; ··· 281 284 /* Only create a set of debugfs for the primary node, ignore render nodes */ 282 285 if (minor->type != DRM_MINOR_PRIMARY) 283 286 return 0; 284 - 285 - dev = dpu_kms->dev; 286 - priv = dev->dev_private; 287 287 288 288 entry = debugfs_create_dir("debug", minor->debugfs_root); 289 289 ··· 290 296 dpu_debugfs_vbif_init(dpu_kms, entry); 291 297 dpu_debugfs_core_irq_init(dpu_kms, entry); 292 298 dpu_debugfs_sspp_init(dpu_kms, entry); 293 - 294 - for (i = 0; i < ARRAY_SIZE(priv->dp); i++) { 295 - if (priv->dp[i]) 296 - msm_dp_debugfs_init(priv->dp[i], minor); 297 - } 298 299 299 300 return dpu_core_perf_debugfs_init(dpu_kms, entry); 300 301 }
+16 -53
drivers/gpu/drm/msm/dp/dp_debug.c
··· 19 19 #define DEBUG_NAME "msm_dp" 20 20 21 21 struct dp_debug_private { 22 - struct dentry *root; 23 - 24 22 struct dp_link *link; 25 23 struct dp_panel *panel; 26 24 struct drm_connector *connector; 27 - struct device *dev; 28 - struct drm_device *drm_dev; 29 25 30 26 struct dp_debug dp_debug; 31 27 }; ··· 200 204 .write = dp_test_active_write 201 205 }; 202 206 203 - static void dp_debug_init(struct dp_debug *dp_debug, struct drm_minor *minor) 207 + static void dp_debug_init(struct dp_debug *dp_debug, struct dentry *root, bool is_edp) 204 208 { 205 - char path[64]; 206 209 struct dp_debug_private *debug = container_of(dp_debug, 207 210 struct dp_debug_private, dp_debug); 208 211 209 - snprintf(path, sizeof(path), "msm_dp-%s", debug->connector->name); 210 - 211 - debug->root = debugfs_create_dir(path, minor->debugfs_root); 212 - 213 - debugfs_create_file("dp_debug", 0444, debug->root, 212 + debugfs_create_file("dp_debug", 0444, root, 214 213 debug, &dp_debug_fops); 215 214 216 - debugfs_create_file("msm_dp_test_active", 0444, 217 - debug->root, 218 - debug, &test_active_fops); 215 + if (!is_edp) { 216 + debugfs_create_file("msm_dp_test_active", 0444, 217 + root, 218 + debug, &test_active_fops); 219 219 220 - debugfs_create_file("msm_dp_test_data", 0444, 221 - debug->root, 222 - debug, &dp_test_data_fops); 220 + debugfs_create_file("msm_dp_test_data", 0444, 221 + root, 222 + debug, &dp_test_data_fops); 223 223 224 - debugfs_create_file("msm_dp_test_type", 0444, 225 - debug->root, 226 - debug, &dp_test_type_fops); 224 + debugfs_create_file("msm_dp_test_type", 0444, 225 + root, 226 + debug, &dp_test_type_fops); 227 + } 227 228 } 228 229 229 230 struct dp_debug *dp_debug_get(struct device *dev, struct dp_panel *panel, 230 231 struct dp_link *link, 231 - struct drm_connector *connector, struct drm_minor *minor) 232 + struct drm_connector *connector, 233 + struct dentry *root, bool is_edp) 232 234 { 233 235 struct dp_debug_private *debug; 234 236 struct dp_debug *dp_debug; ··· 247 253 debug->dp_debug.debug_en = false; 248 254 debug->link = link; 249 255 debug->panel = panel; 250 - debug->dev = dev; 251 - debug->drm_dev = minor->dev; 252 - debug->connector = connector; 253 256 254 257 dp_debug = &debug->dp_debug; 255 258 dp_debug->vdisplay = 0; 256 259 dp_debug->hdisplay = 0; 257 260 dp_debug->vrefresh = 0; 258 261 259 - dp_debug_init(dp_debug, minor); 262 + dp_debug_init(dp_debug, root, is_edp); 260 263 261 264 return dp_debug; 262 265 error: 263 266 return ERR_PTR(rc); 264 - } 265 - 266 - static int dp_debug_deinit(struct dp_debug *dp_debug) 267 - { 268 - struct dp_debug_private *debug; 269 - 270 - if (!dp_debug) 271 - return -EINVAL; 272 - 273 - debug = container_of(dp_debug, struct dp_debug_private, dp_debug); 274 - 275 - debugfs_remove_recursive(debug->root); 276 - 277 - return 0; 278 - } 279 - 280 - void dp_debug_put(struct dp_debug *dp_debug) 281 - { 282 - struct dp_debug_private *debug; 283 - 284 - if (!dp_debug) 285 - return; 286 - 287 - debug = container_of(dp_debug, struct dp_debug_private, dp_debug); 288 - 289 - dp_debug_deinit(dp_debug); 290 - 291 - devm_kfree(debug->dev, debug); 292 267 }
+7 -16
drivers/gpu/drm/msm/dp/dp_debug.h
··· 34 34 * @panel: instance of panel module 35 35 * @link: instance of link module 36 36 * @connector: double pointer to display connector 37 - * @minor: pointer to drm minor number after device registration 37 + * @root: connector's debugfs root 38 + * @is_edp: set for eDP connectors / panels 38 39 * return: pointer to allocated debug module data 39 40 * 40 41 * This function sets up the debug module and provides a way ··· 44 43 struct dp_debug *dp_debug_get(struct device *dev, struct dp_panel *panel, 45 44 struct dp_link *link, 46 45 struct drm_connector *connector, 47 - struct drm_minor *minor); 48 - 49 - /** 50 - * dp_debug_put() 51 - * 52 - * Cleans up dp_debug instance 53 - * 54 - * @dp_debug: instance of dp_debug 55 - */ 56 - void dp_debug_put(struct dp_debug *dp_debug); 46 + struct dentry *root, 47 + bool is_edp); 57 48 58 49 #else 59 50 60 51 static inline 61 52 struct dp_debug *dp_debug_get(struct device *dev, struct dp_panel *panel, 62 53 struct dp_link *link, 63 - struct drm_connector *connector, struct drm_minor *minor) 54 + struct drm_connector *connector, 55 + struct dentry *root, 56 + bool is_edp) 64 57 { 65 58 return ERR_PTR(-EINVAL); 66 - } 67 - 68 - static inline void dp_debug_put(struct dp_debug *dp_debug) 69 - { 70 59 } 71 60 72 61 #endif /* defined(CONFIG_DEBUG_FS) */
+2 -3
drivers/gpu/drm/msm/dp/dp_display.c
··· 715 715 716 716 static void dp_display_deinit_sub_modules(struct dp_display_private *dp) 717 717 { 718 - dp_debug_put(dp->debug); 719 718 dp_audio_put(dp->audio); 720 719 dp_panel_put(dp->panel); 721 720 dp_aux_put(dp->aux); ··· 1450 1451 return dp->wide_bus_en; 1451 1452 } 1452 1453 1453 - void msm_dp_debugfs_init(struct msm_dp *dp_display, struct drm_minor *minor) 1454 + void dp_display_debugfs_init(struct msm_dp *dp_display, struct dentry *root, bool is_edp) 1454 1455 { 1455 1456 struct dp_display_private *dp; 1456 1457 struct device *dev; ··· 1461 1462 1462 1463 dp->debug = dp_debug_get(dev, dp->panel, 1463 1464 dp->link, dp->dp_display.connector, 1464 - minor); 1465 + root, is_edp); 1465 1466 if (IS_ERR(dp->debug)) { 1466 1467 rc = PTR_ERR(dp->debug); 1467 1468 DRM_ERROR("failed to initialize debug, rc = %d\n", rc);
+1
drivers/gpu/drm/msm/dp/dp_display.h
··· 42 42 void dp_display_signal_audio_start(struct msm_dp *dp_display); 43 43 void dp_display_signal_audio_complete(struct msm_dp *dp_display); 44 44 void dp_display_set_psr(struct msm_dp *dp, bool enter); 45 + void dp_display_debugfs_init(struct msm_dp *dp_display, struct dentry *dentry, bool is_edp); 45 46 46 47 #endif /* _DP_DISPLAY_H_ */
+16
drivers/gpu/drm/msm/dp/dp_drm.c
··· 90 90 return rc; 91 91 } 92 92 93 + static void dp_bridge_debugfs_init(struct drm_bridge *bridge, struct dentry *root) 94 + { 95 + struct msm_dp *dp = to_dp_bridge(bridge)->dp_display; 96 + 97 + dp_display_debugfs_init(dp, root, false); 98 + } 99 + 93 100 static const struct drm_bridge_funcs dp_bridge_ops = { 94 101 .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state, 95 102 .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state, ··· 112 105 .hpd_enable = dp_bridge_hpd_enable, 113 106 .hpd_disable = dp_bridge_hpd_disable, 114 107 .hpd_notify = dp_bridge_hpd_notify, 108 + .debugfs_init = dp_bridge_debugfs_init, 115 109 }; 116 110 117 111 static int edp_bridge_atomic_check(struct drm_bridge *drm_bridge, ··· 268 260 return MODE_OK; 269 261 } 270 262 263 + static void edp_bridge_debugfs_init(struct drm_bridge *bridge, struct dentry *root) 264 + { 265 + struct msm_dp *dp = to_dp_bridge(bridge)->dp_display; 266 + 267 + dp_display_debugfs_init(dp, root, true); 268 + } 269 + 271 270 static const struct drm_bridge_funcs edp_bridge_ops = { 272 271 .atomic_enable = edp_bridge_atomic_enable, 273 272 .atomic_disable = edp_bridge_atomic_disable, ··· 285 270 .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state, 286 271 .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state, 287 272 .atomic_check = edp_bridge_atomic_check, 273 + .debugfs_init = edp_bridge_debugfs_init, 288 274 }; 289 275 290 276 int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev,
-6
drivers/gpu/drm/msm/msm_drv.h
··· 389 389 void msm_dp_irq_postinstall(struct msm_dp *dp_display); 390 390 void msm_dp_snapshot(struct msm_disp_state *disp_state, struct msm_dp *dp_display); 391 391 392 - void msm_dp_debugfs_init(struct msm_dp *dp_display, struct drm_minor *minor); 393 392 bool msm_dp_wide_bus_available(const struct msm_dp *dp_display); 394 393 395 394 #else ··· 411 412 } 412 413 413 414 static inline void msm_dp_snapshot(struct msm_disp_state *disp_state, struct msm_dp *dp_display) 414 - { 415 - } 416 - 417 - static inline void msm_dp_debugfs_init(struct msm_dp *dp_display, 418 - struct drm_minor *minor) 419 415 { 420 416 } 421 417