dc-fu.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /*
  3. * Copyright 2024 NXP
  4. */
  5. #ifndef __DC_FETCHUNIT_H__
  6. #define __DC_FETCHUNIT_H__
  7. #include <linux/bitfield.h>
  8. #include <linux/bits.h>
  9. #include <linux/regmap.h>
  10. #include <linux/types.h>
  11. #include <drm/drm_fourcc.h>
  12. #include "dc-pe.h"
  13. #define FRAC_OFFSET 0x28
  14. #define STATICCONTROL 0x8
  15. #define BURSTBUFFERMANAGEMENT 0xc
  16. /* COLORCOMPONENTBITS */
  17. #define R_BITS(x) FIELD_PREP_CONST(GENMASK(27, 24), (x))
  18. #define G_BITS(x) FIELD_PREP_CONST(GENMASK(19, 16), (x))
  19. #define B_BITS(x) FIELD_PREP_CONST(GENMASK(11, 8), (x))
  20. #define A_BITS(x) FIELD_PREP_CONST(GENMASK(3, 0), (x))
  21. /* COLORCOMPONENTSHIFT */
  22. #define R_SHIFT(x) FIELD_PREP_CONST(GENMASK(28, 24), (x))
  23. #define G_SHIFT(x) FIELD_PREP_CONST(GENMASK(20, 16), (x))
  24. #define B_SHIFT(x) FIELD_PREP_CONST(GENMASK(12, 8), (x))
  25. #define A_SHIFT(x) FIELD_PREP_CONST(GENMASK(4, 0), (x))
  26. /* LAYERPROPERTY */
  27. #define SOURCEBUFFERENABLE BIT(31)
  28. #define YUVCONVERSIONMODE_MASK GENMASK(18, 17)
  29. #define YUVCONVERSIONMODE(x) FIELD_PREP(YUVCONVERSIONMODE_MASK, (x))
  30. /* FRAMEDIMENSIONS */
  31. #define FRAMEHEIGHT(x) FIELD_PREP(GENMASK(29, 16), (x))
  32. #define FRAMEWIDTH(x) FIELD_PREP(GENMASK(13, 0), (x))
  33. /* CONTROL */
  34. #define INPUTSELECT_MASK GENMASK(4, 3)
  35. #define INPUTSELECT(x) FIELD_PREP(INPUTSELECT_MASK, (x))
  36. #define RASTERMODE_MASK GENMASK(2, 0)
  37. #define RASTERMODE(x) FIELD_PREP(RASTERMODE_MASK, (x))
  38. enum dc_yuvconversionmode {
  39. YUVCONVERSIONMODE_OFF,
  40. };
  41. enum dc_inputselect {
  42. INPUTSELECT_INACTIVE,
  43. };
  44. enum dc_rastermode {
  45. RASTERMODE_NORMAL,
  46. };
  47. enum {
  48. DC_FETCHUNIT_FL0,
  49. DC_FETCHUNIT_FW2,
  50. };
  51. enum dc_fu_frac {
  52. DC_FETCHUNIT_FRAC0,
  53. DC_FETCHUNIT_FRAC1,
  54. DC_FETCHUNIT_FRAC2,
  55. DC_FETCHUNIT_FRAC3,
  56. DC_FETCHUNIT_FRAC4,
  57. DC_FETCHUNIT_FRAC5,
  58. DC_FETCHUNIT_FRAC6,
  59. DC_FETCHUNIT_FRAC7,
  60. DC_FETCHUNIT_FRAC_NUM
  61. };
  62. struct dc_fu;
  63. struct dc_lb;
  64. struct dc_fu_ops {
  65. void (*init)(struct dc_fu *fu);
  66. void (*set_burstlength)(struct dc_fu *fu, dma_addr_t baddr);
  67. void (*set_baseaddress)(struct dc_fu *fu, enum dc_fu_frac frac,
  68. dma_addr_t baddr);
  69. void (*set_src_stride)(struct dc_fu *fu, enum dc_fu_frac frac,
  70. unsigned int stride);
  71. void (*set_src_buf_dimensions)(struct dc_fu *fu, enum dc_fu_frac frac,
  72. int w, int h);
  73. void (*set_fmt)(struct dc_fu *fu, enum dc_fu_frac frac,
  74. const struct drm_format_info *format);
  75. void (*enable_src_buf)(struct dc_fu *fu, enum dc_fu_frac frac);
  76. void (*disable_src_buf)(struct dc_fu *fu, enum dc_fu_frac frac);
  77. void (*set_framedimensions)(struct dc_fu *fu, int w, int h);
  78. void (*set_layerblend)(struct dc_fu *fu, struct dc_lb *lb);
  79. enum dc_link_id (*get_link_id)(struct dc_fu *fu);
  80. const char *(*get_name)(struct dc_fu *fu);
  81. };
  82. struct dc_fu {
  83. struct regmap *reg_pec;
  84. struct regmap *reg_cfg;
  85. char name[21];
  86. u32 reg_baseaddr[DC_FETCHUNIT_FRAC_NUM];
  87. u32 reg_sourcebufferattributes[DC_FETCHUNIT_FRAC_NUM];
  88. u32 reg_sourcebufferdimension[DC_FETCHUNIT_FRAC_NUM];
  89. u32 reg_layeroffset[DC_FETCHUNIT_FRAC_NUM];
  90. u32 reg_clipwindowoffset[DC_FETCHUNIT_FRAC_NUM];
  91. u32 reg_clipwindowdimensions[DC_FETCHUNIT_FRAC_NUM];
  92. u32 reg_constantcolor[DC_FETCHUNIT_FRAC_NUM];
  93. u32 reg_layerproperty[DC_FETCHUNIT_FRAC_NUM];
  94. unsigned int id;
  95. enum dc_link_id link_id;
  96. struct dc_fu_ops ops;
  97. struct dc_lb *lb;
  98. };
  99. extern const struct dc_fu_ops dc_fu_common_ops;
  100. void dc_fu_get_pixel_format_bits(struct dc_fu *fu, u32 format, u32 *bits);
  101. void dc_fu_get_pixel_format_shifts(struct dc_fu *fu, u32 format, u32 *shifts);
  102. void dc_fu_shdldreq_sticky(struct dc_fu *fu, u8 layer_mask);
  103. void dc_fu_set_src_bpp(struct dc_fu *fu, enum dc_fu_frac frac, unsigned int bpp);
  104. void dc_fu_common_hw_init(struct dc_fu *fu);
  105. const struct dc_fu_ops *dc_fu_get_ops(struct dc_fu *fu);
  106. #endif /* __DC_FETCHUNIT_H__ */