dpu_encoder.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
  4. * Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
  5. * Copyright (C) 2013 Red Hat
  6. * Author: Rob Clark <robdclark@gmail.com>
  7. */
  8. #ifndef __DPU_ENCODER_H__
  9. #define __DPU_ENCODER_H__
  10. #include <drm/drm_crtc.h>
  11. #include "dpu_hw_mdss.h"
  12. #define DPU_ENCODER_FRAME_EVENT_DONE BIT(0)
  13. #define DPU_ENCODER_FRAME_EVENT_ERROR BIT(1)
  14. #define DPU_ENCODER_FRAME_EVENT_PANEL_DEAD BIT(2)
  15. #define DPU_ENCODER_FRAME_EVENT_IDLE BIT(3)
  16. #define IDLE_TIMEOUT (66 - 16/2)
  17. #define MAX_H_TILES_PER_DISPLAY 2
  18. /**
  19. * struct msm_display_info - defines display properties
  20. * @intf_type: INTF_ type
  21. * @num_of_h_tiles: Number of horizontal tiles in case of split interface
  22. * @h_tile_instance: Controller instance used per tile. Number of elements is
  23. * based on num_of_h_tiles
  24. * @is_cmd_mode Boolean to indicate if the CMD mode is requested
  25. * @vsync_source: Source of the TE signal for DSI CMD devices
  26. */
  27. struct msm_display_info {
  28. enum dpu_intf_type intf_type;
  29. uint32_t num_of_h_tiles;
  30. uint32_t h_tile_instance[MAX_H_TILES_PER_DISPLAY];
  31. bool is_cmd_mode;
  32. enum dpu_vsync_source vsync_source;
  33. };
  34. void dpu_encoder_assign_crtc(struct drm_encoder *encoder,
  35. struct drm_crtc *crtc);
  36. void dpu_encoder_toggle_vblank_for_crtc(struct drm_encoder *encoder,
  37. struct drm_crtc *crtc, bool enable);
  38. void dpu_encoder_prepare_for_kickoff(struct drm_encoder *encoder);
  39. void dpu_encoder_trigger_kickoff_pending(struct drm_encoder *encoder);
  40. void dpu_encoder_kickoff(struct drm_encoder *encoder);
  41. int dpu_encoder_vsync_time(struct drm_encoder *drm_enc, ktime_t *wakeup_time);
  42. int dpu_encoder_wait_for_commit_done(struct drm_encoder *drm_encoder);
  43. int dpu_encoder_wait_for_tx_complete(struct drm_encoder *drm_encoder);
  44. enum dpu_intf_mode dpu_encoder_get_intf_mode(struct drm_encoder *encoder);
  45. void dpu_encoder_virt_runtime_resume(struct drm_encoder *encoder);
  46. uint32_t dpu_encoder_get_clones(struct drm_encoder *drm_enc);
  47. struct drm_encoder *dpu_encoder_init(struct drm_device *dev,
  48. int drm_enc_mode,
  49. struct msm_display_info *disp_info);
  50. int dpu_encoder_get_linecount(struct drm_encoder *drm_enc);
  51. int dpu_encoder_get_vsync_count(struct drm_encoder *drm_enc);
  52. bool dpu_encoder_is_widebus_enabled(const struct drm_encoder *drm_enc);
  53. bool dpu_encoder_is_dsc_enabled(const struct drm_encoder *drm_enc);
  54. int dpu_encoder_get_crc_values_cnt(const struct drm_encoder *drm_enc);
  55. void dpu_encoder_setup_misr(const struct drm_encoder *drm_encoder);
  56. int dpu_encoder_get_crc(const struct drm_encoder *drm_enc, u32 *crcs, int pos);
  57. bool dpu_encoder_use_dsc_merge(struct drm_encoder *drm_enc);
  58. void dpu_encoder_update_topology(struct drm_encoder *drm_enc,
  59. struct msm_display_topology *topology,
  60. struct drm_atomic_state *state,
  61. const struct drm_display_mode *adj_mode);
  62. bool dpu_encoder_needs_modeset(struct drm_encoder *drm_enc, struct drm_atomic_state *state);
  63. void dpu_encoder_prepare_wb_job(struct drm_encoder *drm_enc,
  64. struct drm_writeback_job *job);
  65. void dpu_encoder_cleanup_wb_job(struct drm_encoder *drm_enc,
  66. struct drm_writeback_job *job);
  67. bool dpu_encoder_is_valid_for_commit(struct drm_encoder *drm_enc);
  68. void dpu_encoder_start_frame_done_timer(struct drm_encoder *drm_enc);
  69. #endif /* __DPU_ENCODER_H__ */