fb.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef __NVKM_FB_H__
  3. #define __NVKM_FB_H__
  4. #include <core/subdev.h>
  5. #include <core/mm.h>
  6. /* memory type/access flags, do not match hardware values */
  7. #define NV_MEM_ACCESS_RO 1
  8. #define NV_MEM_ACCESS_WO 2
  9. #define NV_MEM_ACCESS_RW (NV_MEM_ACCESS_RO | NV_MEM_ACCESS_WO)
  10. #define NV_MEM_ACCESS_SYS 4
  11. #define NV_MEM_ACCESS_VM 8
  12. #define NV_MEM_ACCESS_NOSNOOP 16
  13. #define NV_MEM_TARGET_VRAM 0
  14. #define NV_MEM_TARGET_PCI 1
  15. #define NV_MEM_TARGET_PCI_NOSNOOP 2
  16. #define NV_MEM_TARGET_VM 3
  17. #define NV_MEM_TARGET_GART 4
  18. #define NVKM_RAM_TYPE_VM 0x7f
  19. #define NV_MEM_COMP_VM 0x03
  20. struct nvkm_fb_tile {
  21. struct nvkm_mm_node *tag;
  22. u32 addr;
  23. u32 limit;
  24. u32 pitch;
  25. u32 zcomp;
  26. };
  27. struct nvkm_fb {
  28. const struct nvkm_fb_func *func;
  29. struct nvkm_subdev subdev;
  30. struct nvkm_ram *ram;
  31. struct nvkm_mm tags;
  32. struct {
  33. struct nvkm_fb_tile region[16];
  34. int regions;
  35. } tile;
  36. u8 page;
  37. struct nvkm_memory *mmu_rd;
  38. struct nvkm_memory *mmu_wr;
  39. };
  40. void nvkm_fb_tile_init(struct nvkm_fb *, int region, u32 addr, u32 size,
  41. u32 pitch, u32 flags, struct nvkm_fb_tile *);
  42. void nvkm_fb_tile_fini(struct nvkm_fb *, int region, struct nvkm_fb_tile *);
  43. void nvkm_fb_tile_prog(struct nvkm_fb *, int region, struct nvkm_fb_tile *);
  44. int nv04_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  45. int nv10_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  46. int nv1a_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  47. int nv20_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  48. int nv25_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  49. int nv30_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  50. int nv35_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  51. int nv36_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  52. int nv40_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  53. int nv41_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  54. int nv44_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  55. int nv46_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  56. int nv47_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  57. int nv49_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  58. int nv4e_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  59. int nv50_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  60. int g84_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  61. int gt215_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  62. int mcp77_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  63. int mcp89_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  64. int gf100_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  65. int gf108_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  66. int gk104_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  67. int gk110_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  68. int gk20a_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  69. int gm107_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  70. int gm200_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  71. int gm20b_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  72. int gp100_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  73. int gp102_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  74. int gp10b_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  75. #include <subdev/bios.h>
  76. #include <subdev/bios/ramcfg.h>
  77. struct nvkm_ram_data {
  78. struct list_head head;
  79. struct nvbios_ramcfg bios;
  80. u32 freq;
  81. };
  82. enum nvkm_ram_type {
  83. NVKM_RAM_TYPE_UNKNOWN = 0,
  84. NVKM_RAM_TYPE_STOLEN,
  85. NVKM_RAM_TYPE_SGRAM,
  86. NVKM_RAM_TYPE_SDRAM,
  87. NVKM_RAM_TYPE_DDR1,
  88. NVKM_RAM_TYPE_DDR2,
  89. NVKM_RAM_TYPE_DDR3,
  90. NVKM_RAM_TYPE_GDDR2,
  91. NVKM_RAM_TYPE_GDDR3,
  92. NVKM_RAM_TYPE_GDDR4,
  93. NVKM_RAM_TYPE_GDDR5
  94. };
  95. struct nvkm_ram {
  96. const struct nvkm_ram_func *func;
  97. struct nvkm_fb *fb;
  98. enum nvkm_ram_type type;
  99. u64 size;
  100. #define NVKM_RAM_MM_SHIFT 12
  101. #define NVKM_RAM_MM_ANY (NVKM_MM_HEAP_ANY + 0)
  102. #define NVKM_RAM_MM_NORMAL (NVKM_MM_HEAP_ANY + 1)
  103. #define NVKM_RAM_MM_NOMAP (NVKM_MM_HEAP_ANY + 2)
  104. #define NVKM_RAM_MM_MIXED (NVKM_MM_HEAP_ANY + 3)
  105. struct nvkm_mm vram;
  106. u64 stolen;
  107. int ranks;
  108. int parts;
  109. int part_mask;
  110. u32 freq;
  111. u32 mr[16];
  112. u32 mr1_nuts;
  113. struct nvkm_ram_data *next;
  114. struct nvkm_ram_data former;
  115. struct nvkm_ram_data xition;
  116. struct nvkm_ram_data target;
  117. };
  118. int
  119. nvkm_ram_get(struct nvkm_device *, u8 heap, u8 type, u8 page, u64 size,
  120. bool contig, bool back, struct nvkm_memory **);
  121. struct nvkm_ram_func {
  122. u64 upper;
  123. u32 (*probe_fbp)(const struct nvkm_ram_func *, struct nvkm_device *,
  124. int fbp, int *pltcs);
  125. u32 (*probe_fbp_amount)(const struct nvkm_ram_func *, u32 fbpao,
  126. struct nvkm_device *, int fbp, int *pltcs);
  127. u32 (*probe_fbpa_amount)(struct nvkm_device *, int fbpa);
  128. void *(*dtor)(struct nvkm_ram *);
  129. int (*init)(struct nvkm_ram *);
  130. int (*calc)(struct nvkm_ram *, u32 freq);
  131. int (*prog)(struct nvkm_ram *);
  132. void (*tidy)(struct nvkm_ram *);
  133. };
  134. #endif