fb.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  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 gk104_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  78. int gk20a_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  79. int gm107_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  80. int gm200_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  81. int gm20b_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  82. int gp100_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  83. int gp102_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  84. #include <subdev/bios.h>
  85. #include <subdev/bios/ramcfg.h>
  86. struct nvkm_ram_data {
  87. struct list_head head;
  88. struct nvbios_ramcfg bios;
  89. u32 freq;
  90. };
  91. enum nvkm_ram_type {
  92. NVKM_RAM_TYPE_UNKNOWN = 0,
  93. NVKM_RAM_TYPE_STOLEN,
  94. NVKM_RAM_TYPE_SGRAM,
  95. NVKM_RAM_TYPE_SDRAM,
  96. NVKM_RAM_TYPE_DDR1,
  97. NVKM_RAM_TYPE_DDR2,
  98. NVKM_RAM_TYPE_DDR3,
  99. NVKM_RAM_TYPE_GDDR2,
  100. NVKM_RAM_TYPE_GDDR3,
  101. NVKM_RAM_TYPE_GDDR4,
  102. NVKM_RAM_TYPE_GDDR5
  103. };
  104. struct nvkm_ram {
  105. const struct nvkm_ram_func *func;
  106. struct nvkm_fb *fb;
  107. enum nvkm_ram_type type;
  108. u64 size;
  109. #define NVKM_RAM_MM_SHIFT 12
  110. struct nvkm_mm vram;
  111. struct nvkm_mm tags;
  112. u64 stolen;
  113. int ranks;
  114. int parts;
  115. int part_mask;
  116. u32 freq;
  117. u32 mr[16];
  118. u32 mr1_nuts;
  119. struct nvkm_ram_data *next;
  120. struct nvkm_ram_data former;
  121. struct nvkm_ram_data xition;
  122. struct nvkm_ram_data target;
  123. };
  124. struct nvkm_ram_func {
  125. void *(*dtor)(struct nvkm_ram *);
  126. int (*init)(struct nvkm_ram *);
  127. int (*get)(struct nvkm_ram *, u64 size, u32 align, u32 size_nc,
  128. u32 type, struct nvkm_mem **);
  129. void (*put)(struct nvkm_ram *, struct nvkm_mem **);
  130. int (*calc)(struct nvkm_ram *, u32 freq);
  131. int (*prog)(struct nvkm_ram *);
  132. void (*tidy)(struct nvkm_ram *);
  133. };
  134. extern const u8 gf100_pte_storage_type_map[256];
  135. #endif