fb.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  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 list_head regions;
  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. };
  48. bool nvkm_fb_memtype_valid(struct nvkm_fb *, u32 memtype);
  49. void nvkm_fb_tile_init(struct nvkm_fb *, int region, u32 addr, u32 size,
  50. u32 pitch, u32 flags, struct nvkm_fb_tile *);
  51. void nvkm_fb_tile_fini(struct nvkm_fb *, int region, struct nvkm_fb_tile *);
  52. void nvkm_fb_tile_prog(struct nvkm_fb *, int region, struct nvkm_fb_tile *);
  53. int nv04_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  54. int nv10_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  55. int nv1a_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  56. int nv20_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  57. int nv25_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  58. int nv30_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  59. int nv35_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  60. int nv36_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  61. int nv40_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  62. int nv41_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  63. int nv44_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  64. int nv46_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  65. int nv47_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  66. int nv49_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  67. int nv4e_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  68. int nv50_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  69. int g84_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  70. int gt215_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  71. int mcp77_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  72. int mcp89_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  73. int gf100_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  74. int gk104_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  75. int gk20a_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  76. int gm107_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
  77. #include <subdev/bios.h>
  78. #include <subdev/bios/ramcfg.h>
  79. struct nvkm_ram_data {
  80. struct list_head head;
  81. struct nvbios_ramcfg bios;
  82. u32 freq;
  83. };
  84. enum nvkm_ram_type {
  85. NVKM_RAM_TYPE_UNKNOWN = 0,
  86. NVKM_RAM_TYPE_STOLEN,
  87. NVKM_RAM_TYPE_SGRAM,
  88. NVKM_RAM_TYPE_SDRAM,
  89. NVKM_RAM_TYPE_DDR1,
  90. NVKM_RAM_TYPE_DDR2,
  91. NVKM_RAM_TYPE_DDR3,
  92. NVKM_RAM_TYPE_GDDR2,
  93. NVKM_RAM_TYPE_GDDR3,
  94. NVKM_RAM_TYPE_GDDR4,
  95. NVKM_RAM_TYPE_GDDR5
  96. };
  97. struct nvkm_ram {
  98. const struct nvkm_ram_func *func;
  99. struct nvkm_fb *fb;
  100. enum nvkm_ram_type type;
  101. u64 size;
  102. #define NVKM_RAM_MM_SHIFT 12
  103. struct nvkm_mm vram;
  104. struct nvkm_mm tags;
  105. u64 stolen;
  106. int ranks;
  107. int parts;
  108. int part_mask;
  109. u32 freq;
  110. u32 mr[16];
  111. u32 mr1_nuts;
  112. struct nvkm_ram_data *next;
  113. struct nvkm_ram_data former;
  114. struct nvkm_ram_data xition;
  115. struct nvkm_ram_data target;
  116. };
  117. struct nvkm_ram_func {
  118. void *(*dtor)(struct nvkm_ram *);
  119. int (*init)(struct nvkm_ram *);
  120. int (*get)(struct nvkm_ram *, u64 size, u32 align, u32 size_nc,
  121. u32 type, struct nvkm_mem **);
  122. void (*put)(struct nvkm_ram *, struct nvkm_mem **);
  123. int (*calc)(struct nvkm_ram *, u32 freq);
  124. int (*prog)(struct nvkm_ram *);
  125. void (*tidy)(struct nvkm_ram *);
  126. };
  127. #endif