fb.h 4.8 KB

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