Rev 3192 | Rev 5179 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3192 | Rev 3764 | ||
---|---|---|---|
Line 100... | Line 100... | ||
100 | extern int radeon_disp_priority; |
100 | extern int radeon_disp_priority; |
101 | extern int radeon_hw_i2c; |
101 | extern int radeon_hw_i2c; |
102 | extern int radeon_pcie_gen2; |
102 | extern int radeon_pcie_gen2; |
103 | extern int radeon_msi; |
103 | extern int radeon_msi; |
104 | extern int radeon_lockup_timeout; |
104 | extern int radeon_lockup_timeout; |
105 | - | ||
- | 105 | extern int radeon_fastfb; |
|
Line 106... | Line 106... | ||
106 | 106 | ||
107 | 107 | ||
108 | typedef struct pm_message { |
108 | typedef struct pm_message { |
Line 122... | Line 122... | ||
122 | static inline u32 ioread32(const volatile void __iomem *addr) |
122 | static inline u32 ioread32(const volatile void __iomem *addr) |
123 | { |
123 | { |
124 | return in32((u32)addr); |
124 | return in32((u32)addr); |
125 | } |
125 | } |
Line 126... | Line 126... | ||
126 | 126 | ||
127 | static inline void iowrite32(uint32_t b, volatile void __iomem *addr) |
127 | //static inline void iowrite32(uint32_t b, volatile void __iomem *addr) |
128 | { |
128 | //{ |
129 | out32((u32)addr, b); |
129 | // out32((u32)addr, b); |
Line 130... | Line 130... | ||
130 | } |
130 | //} |
131 | 131 | ||
132 | 132 | ||
Line 141... | Line 141... | ||
141 | #define RADEON_DEBUGFS_MAX_COMPONENTS 32 |
141 | #define RADEON_DEBUGFS_MAX_COMPONENTS 32 |
142 | #define RADEONFB_CONN_LIMIT 4 |
142 | #define RADEONFB_CONN_LIMIT 4 |
143 | #define RADEON_BIOS_NUM_SCRATCH 8 |
143 | #define RADEON_BIOS_NUM_SCRATCH 8 |
Line 144... | Line 144... | ||
144 | 144 | ||
145 | /* max number of rings */ |
145 | /* max number of rings */ |
Line 146... | Line 146... | ||
146 | #define RADEON_NUM_RINGS 5 |
146 | #define RADEON_NUM_RINGS 6 |
147 | 147 | ||
Line 148... | Line 148... | ||
148 | /* fence seq are set to this number when signaled */ |
148 | /* fence seq are set to this number when signaled */ |
Line 159... | Line 159... | ||
159 | /* R600+ has an async dma ring */ |
159 | /* R600+ has an async dma ring */ |
160 | #define R600_RING_TYPE_DMA_INDEX 3 |
160 | #define R600_RING_TYPE_DMA_INDEX 3 |
161 | /* cayman add a second async dma ring */ |
161 | /* cayman add a second async dma ring */ |
162 | #define CAYMAN_RING_TYPE_DMA1_INDEX 4 |
162 | #define CAYMAN_RING_TYPE_DMA1_INDEX 4 |
Line -... | Line 163... | ||
- | 163 | ||
- | 164 | /* R600+ */ |
|
- | 165 | #define R600_RING_TYPE_UVD_INDEX 5 |
|
163 | 166 | ||
164 | /* hardcode those limit for now */ |
167 | /* hardcode those limit for now */ |
165 | #define RADEON_VA_IB_OFFSET (1 << 20) |
168 | #define RADEON_VA_IB_OFFSET (1 << 20) |
166 | #define RADEON_VA_RESERVED_SIZE (8 << 20) |
169 | #define RADEON_VA_RESERVED_SIZE (8 << 20) |
Line 167... | Line 170... | ||
167 | #define RADEON_IB_VM_MAX_SIZE (64 << 10) |
170 | #define RADEON_IB_VM_MAX_SIZE (64 << 10) |
168 | 171 | ||
169 | /* reset flags */ |
172 | /* reset flags */ |
170 | #define RADEON_RESET_GFX (1 << 0) |
173 | #define RADEON_RESET_GFX (1 << 0) |
- | 174 | #define RADEON_RESET_COMPUTE (1 << 1) |
|
- | 175 | #define RADEON_RESET_DMA (1 << 2) |
|
- | 176 | #define RADEON_RESET_CP (1 << 3) |
|
- | 177 | #define RADEON_RESET_GRBM (1 << 4) |
|
- | 178 | #define RADEON_RESET_DMA1 (1 << 5) |
|
- | 179 | #define RADEON_RESET_RLC (1 << 6) |
|
- | 180 | #define RADEON_RESET_SEM (1 << 7) |
|
- | 181 | #define RADEON_RESET_IH (1 << 8) |
|
- | 182 | #define RADEON_RESET_VMC (1 << 9) |
|
Line 171... | Line 183... | ||
171 | #define RADEON_RESET_COMPUTE (1 << 1) |
183 | #define RADEON_RESET_MC (1 << 10) |
172 | #define RADEON_RESET_DMA (1 << 2) |
184 | #define RADEON_RESET_DISPLAY (1 << 11) |
173 | 185 | ||
174 | /* |
186 | /* |
Line 225... | Line 237... | ||
225 | void radeon_pm_compute_clocks(struct radeon_device *rdev); |
237 | void radeon_pm_compute_clocks(struct radeon_device *rdev); |
226 | void radeon_pm_suspend(struct radeon_device *rdev); |
238 | void radeon_pm_suspend(struct radeon_device *rdev); |
227 | void radeon_pm_resume(struct radeon_device *rdev); |
239 | void radeon_pm_resume(struct radeon_device *rdev); |
228 | void radeon_combios_get_power_modes(struct radeon_device *rdev); |
240 | void radeon_combios_get_power_modes(struct radeon_device *rdev); |
229 | void radeon_atombios_get_power_modes(struct radeon_device *rdev); |
241 | void radeon_atombios_get_power_modes(struct radeon_device *rdev); |
- | 242 | int radeon_atom_get_clock_dividers(struct radeon_device *rdev, |
|
- | 243 | u8 clock_type, |
|
- | 244 | u32 clock, |
|
- | 245 | bool strobe_mode, |
|
- | 246 | struct atom_clock_dividers *dividers); |
|
230 | void radeon_atom_set_voltage(struct radeon_device *rdev, u16 voltage_level, u8 voltage_type); |
247 | void radeon_atom_set_voltage(struct radeon_device *rdev, u16 voltage_level, u8 voltage_type); |
231 | void rs690_pm_info(struct radeon_device *rdev); |
248 | void rs690_pm_info(struct radeon_device *rdev); |
232 | extern int rv6xx_get_temp(struct radeon_device *rdev); |
249 | extern int rv6xx_get_temp(struct radeon_device *rdev); |
233 | extern int rv770_get_temp(struct radeon_device *rdev); |
250 | extern int rv770_get_temp(struct radeon_device *rdev); |
234 | extern int evergreen_get_temp(struct radeon_device *rdev); |
251 | extern int evergreen_get_temp(struct radeon_device *rdev); |
Line 327... | Line 344... | ||
327 | /* |
344 | /* |
328 | * TTM. |
345 | * TTM. |
329 | */ |
346 | */ |
330 | struct radeon_mman { |
347 | struct radeon_mman { |
331 | struct ttm_bo_global_ref bo_global_ref; |
348 | struct ttm_bo_global_ref bo_global_ref; |
332 | // struct drm_global_reference mem_global_ref; |
349 | struct drm_global_reference mem_global_ref; |
333 | struct ttm_bo_device bdev; |
350 | struct ttm_bo_device bdev; |
334 | bool mem_global_referenced; |
351 | bool mem_global_referenced; |
335 | bool initialized; |
352 | bool initialized; |
336 | }; |
353 | }; |
Line 356... | Line 373... | ||
356 | struct radeon_bo { |
373 | struct radeon_bo { |
357 | /* Protected by gem.mutex */ |
374 | /* Protected by gem.mutex */ |
358 | struct list_head list; |
375 | struct list_head list; |
359 | /* Protected by tbo.reserved */ |
376 | /* Protected by tbo.reserved */ |
360 | u32 placements[3]; |
377 | u32 placements[3]; |
361 | u32 busy_placements[3]; |
378 | u32 domain; |
362 | struct ttm_placement placement; |
379 | struct ttm_placement placement; |
363 | struct ttm_buffer_object tbo; |
380 | struct ttm_buffer_object tbo; |
364 | struct ttm_bo_kmap_obj kmap; |
381 | struct ttm_bo_kmap_obj kmap; |
365 | unsigned pin_count; |
382 | unsigned pin_count; |
366 | void *kptr; |
383 | void *kptr; |
Line 375... | Line 392... | ||
375 | struct list_head va; |
392 | struct list_head va; |
376 | /* Constant after initialization */ |
393 | /* Constant after initialization */ |
377 | struct radeon_device *rdev; |
394 | struct radeon_device *rdev; |
378 | struct drm_gem_object gem_base; |
395 | struct drm_gem_object gem_base; |
Line 379... | Line 396... | ||
379 | 396 | ||
380 | u32 domain; |
- | |
381 | int vmapping_count; |
397 | struct ttm_bo_kmap_obj dma_buf_vmap; |
382 | }; |
398 | }; |
Line 383... | Line 399... | ||
383 | #define gem_to_radeon_bo(gobj) container_of((gobj), struct radeon_bo, gem_base) |
399 | #define gem_to_radeon_bo(gobj) container_of((gobj), struct radeon_bo, gem_base) |
384 | 400 | ||
Line 388... | Line 404... | ||
388 | unsigned rdomain; |
404 | unsigned rdomain; |
389 | unsigned wdomain; |
405 | unsigned wdomain; |
390 | u32 tiling_flags; |
406 | u32 tiling_flags; |
391 | }; |
407 | }; |
Line -... | Line 408... | ||
- | 408 | ||
- | 409 | int radeon_gem_debugfs_init(struct radeon_device *rdev); |
|
392 | 410 | ||
393 | /* sub-allocation manager, it has to be protected by another lock. |
411 | /* sub-allocation manager, it has to be protected by another lock. |
394 | * By conception this is an helper for other part of the driver |
412 | * By conception this is an helper for other part of the driver |
395 | * like the indirect buffer or semaphore, which both have their |
413 | * like the indirect buffer or semaphore, which both have their |
396 | * locking. |
414 | * locking. |
Line 543... | Line 561... | ||
543 | u64 real_vram_size; |
561 | u64 real_vram_size; |
544 | int vram_mtrr; |
562 | int vram_mtrr; |
545 | bool vram_is_ddr; |
563 | bool vram_is_ddr; |
546 | bool igp_sideport_enabled; |
564 | bool igp_sideport_enabled; |
547 | u64 gtt_base_align; |
565 | u64 gtt_base_align; |
- | 566 | u64 mc_mask; |
|
548 | }; |
567 | }; |
Line 549... | Line 568... | ||
549 | 568 | ||
550 | bool radeon_combios_sideport_present(struct radeon_device *rdev); |
569 | bool radeon_combios_sideport_present(struct radeon_device *rdev); |
Line 676... | Line 695... | ||
676 | bool ready; |
695 | bool ready; |
677 | u32 ptr_reg_shift; |
696 | u32 ptr_reg_shift; |
678 | u32 ptr_reg_mask; |
697 | u32 ptr_reg_mask; |
679 | u32 nop; |
698 | u32 nop; |
680 | u32 idx; |
699 | u32 idx; |
- | 700 | u64 last_semaphore_signal_addr; |
|
- | 701 | u64 last_semaphore_wait_addr; |
|
681 | }; |
702 | }; |
Line 682... | Line 703... | ||
682 | 703 | ||
683 | /* |
704 | /* |
684 | * VM |
705 | * VM |
Line 792... | Line 813... | ||
792 | 813 | ||
793 | int radeon_ib_get(struct radeon_device *rdev, int ring, |
814 | int radeon_ib_get(struct radeon_device *rdev, int ring, |
794 | struct radeon_ib *ib, struct radeon_vm *vm, |
815 | struct radeon_ib *ib, struct radeon_vm *vm, |
795 | unsigned size); |
816 | unsigned size); |
- | 817 | void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib *ib); |
|
796 | void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib *ib); |
818 | void radeon_ib_sync_to(struct radeon_ib *ib, struct radeon_fence *fence); |
797 | int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib, |
819 | int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib, |
798 | struct radeon_ib *const_ib); |
820 | struct radeon_ib *const_ib); |
799 | int radeon_ib_pool_init(struct radeon_device *rdev); |
821 | int radeon_ib_pool_init(struct radeon_device *rdev); |
800 | void radeon_ib_pool_fini(struct radeon_device *rdev); |
822 | void radeon_ib_pool_fini(struct radeon_device *rdev); |
Line 930... | Line 952... | ||
930 | #define RADEON_WB_CP1_RPTR_OFFSET 1280 |
952 | #define RADEON_WB_CP1_RPTR_OFFSET 1280 |
931 | #define RADEON_WB_CP2_RPTR_OFFSET 1536 |
953 | #define RADEON_WB_CP2_RPTR_OFFSET 1536 |
932 | #define R600_WB_DMA_RPTR_OFFSET 1792 |
954 | #define R600_WB_DMA_RPTR_OFFSET 1792 |
933 | #define R600_WB_IH_WPTR_OFFSET 2048 |
955 | #define R600_WB_IH_WPTR_OFFSET 2048 |
934 | #define CAYMAN_WB_DMA1_RPTR_OFFSET 2304 |
956 | #define CAYMAN_WB_DMA1_RPTR_OFFSET 2304 |
- | 957 | #define R600_WB_UVD_RPTR_OFFSET 2560 |
|
935 | #define R600_WB_EVENT_OFFSET 3072 |
958 | #define R600_WB_EVENT_OFFSET 3072 |
Line 936... | Line 959... | ||
936 | 959 | ||
937 | /** |
960 | /** |
938 | * struct radeon_pm - power management datas |
961 | * struct radeon_pm - power management datas |
Line 1130... | Line 1153... | ||
1130 | }; |
1153 | }; |
Line 1131... | Line 1154... | ||
1131 | 1154 | ||
1132 | int radeon_pm_get_type_index(struct radeon_device *rdev, |
1155 | int radeon_pm_get_type_index(struct radeon_device *rdev, |
1133 | enum radeon_pm_state_type ps_type, |
1156 | enum radeon_pm_state_type ps_type, |
- | 1157 | int instance); |
|
- | 1158 | /* |
|
- | 1159 | * UVD |
|
- | 1160 | */ |
|
- | 1161 | #define RADEON_MAX_UVD_HANDLES 10 |
|
- | 1162 | #define RADEON_UVD_STACK_SIZE (1024*1024) |
|
- | 1163 | #define RADEON_UVD_HEAP_SIZE (1024*1024) |
|
- | 1164 | ||
- | 1165 | struct radeon_uvd { |
|
- | 1166 | struct radeon_bo *vcpu_bo; |
|
- | 1167 | void *cpu_addr; |
|
- | 1168 | uint64_t gpu_addr; |
|
- | 1169 | atomic_t handles[RADEON_MAX_UVD_HANDLES]; |
|
- | 1170 | struct drm_file *filp[RADEON_MAX_UVD_HANDLES]; |
|
- | 1171 | struct delayed_work idle_work; |
|
- | 1172 | }; |
|
- | 1173 | ||
- | 1174 | int radeon_uvd_init(struct radeon_device *rdev); |
|
- | 1175 | void radeon_uvd_fini(struct radeon_device *rdev); |
|
- | 1176 | int radeon_uvd_suspend(struct radeon_device *rdev); |
|
- | 1177 | int radeon_uvd_resume(struct radeon_device *rdev); |
|
- | 1178 | int radeon_uvd_get_create_msg(struct radeon_device *rdev, int ring, |
|
- | 1179 | uint32_t handle, struct radeon_fence **fence); |
|
- | 1180 | int radeon_uvd_get_destroy_msg(struct radeon_device *rdev, int ring, |
|
- | 1181 | uint32_t handle, struct radeon_fence **fence); |
|
- | 1182 | void radeon_uvd_force_into_uvd_segment(struct radeon_bo *rbo); |
|
- | 1183 | void radeon_uvd_free_handles(struct radeon_device *rdev, |
|
- | 1184 | struct drm_file *filp); |
|
- | 1185 | int radeon_uvd_cs_parse(struct radeon_cs_parser *parser); |
|
- | 1186 | void radeon_uvd_note_usage(struct radeon_device *rdev); |
|
- | 1187 | int radeon_uvd_calc_upll_dividers(struct radeon_device *rdev, |
|
- | 1188 | unsigned vclk, unsigned dclk, |
|
- | 1189 | unsigned vco_min, unsigned vco_max, |
|
- | 1190 | unsigned fb_factor, unsigned fb_mask, |
|
- | 1191 | unsigned pd_min, unsigned pd_max, |
|
- | 1192 | unsigned pd_even, |
|
- | 1193 | unsigned *optimal_fb_div, |
|
- | 1194 | unsigned *optimal_vclk_div, |
|
- | 1195 | unsigned *optimal_dclk_div); |
|
- | 1196 | int radeon_uvd_send_upll_ctlreq(struct radeon_device *rdev, |
|
Line 1134... | Line 1197... | ||
1134 | int instance); |
1197 | unsigned cg_upll_func_cntl); |
1135 | 1198 | ||
1136 | struct r600_audio { |
1199 | struct r600_audio { |
1137 | int channels; |
1200 | int channels; |
Line 1159... | Line 1222... | ||
1159 | void (*ioctl_wait_idle)(struct radeon_device *rdev, struct radeon_bo *bo); |
1222 | void (*ioctl_wait_idle)(struct radeon_device *rdev, struct radeon_bo *bo); |
1160 | /* check if 3D engine is idle */ |
1223 | /* check if 3D engine is idle */ |
1161 | bool (*gui_idle)(struct radeon_device *rdev); |
1224 | bool (*gui_idle)(struct radeon_device *rdev); |
1162 | /* wait for mc_idle */ |
1225 | /* wait for mc_idle */ |
1163 | int (*mc_wait_for_idle)(struct radeon_device *rdev); |
1226 | int (*mc_wait_for_idle)(struct radeon_device *rdev); |
- | 1227 | /* get the reference clock */ |
|
- | 1228 | u32 (*get_xclk)(struct radeon_device *rdev); |
|
- | 1229 | /* get the gpu clock counter */ |
|
- | 1230 | uint64_t (*get_gpu_clock_counter)(struct radeon_device *rdev); |
|
1164 | /* gart */ |
1231 | /* gart */ |
1165 | struct { |
1232 | struct { |
1166 | void (*tlb_flush)(struct radeon_device *rdev); |
1233 | void (*tlb_flush)(struct radeon_device *rdev); |
1167 | int (*set_page)(struct radeon_device *rdev, int i, uint64_t addr); |
1234 | int (*set_page)(struct radeon_device *rdev, int i, uint64_t addr); |
1168 | } gart; |
1235 | } gart; |
1169 | struct { |
1236 | struct { |
1170 | int (*init)(struct radeon_device *rdev); |
1237 | int (*init)(struct radeon_device *rdev); |
1171 | void (*fini)(struct radeon_device *rdev); |
1238 | void (*fini)(struct radeon_device *rdev); |
Line 1172... | Line 1239... | ||
1172 | 1239 | ||
1173 | u32 pt_ring_index; |
1240 | u32 pt_ring_index; |
- | 1241 | void (*set_page)(struct radeon_device *rdev, |
|
- | 1242 | struct radeon_ib *ib, |
|
1174 | void (*set_page)(struct radeon_device *rdev, uint64_t pe, |
1243 | uint64_t pe, |
1175 | uint64_t addr, unsigned count, |
1244 | uint64_t addr, unsigned count, |
1176 | uint32_t incr, uint32_t flags); |
1245 | uint32_t incr, uint32_t flags); |
1177 | } vm; |
1246 | } vm; |
1178 | /* ring specific callbacks */ |
1247 | /* ring specific callbacks */ |
Line 1204... | Line 1273... | ||
1204 | void (*wait_for_vblank)(struct radeon_device *rdev, int crtc); |
1273 | void (*wait_for_vblank)(struct radeon_device *rdev, int crtc); |
1205 | /* set backlight level */ |
1274 | /* set backlight level */ |
1206 | void (*set_backlight_level)(struct radeon_encoder *radeon_encoder, u8 level); |
1275 | void (*set_backlight_level)(struct radeon_encoder *radeon_encoder, u8 level); |
1207 | /* get backlight level */ |
1276 | /* get backlight level */ |
1208 | u8 (*get_backlight_level)(struct radeon_encoder *radeon_encoder); |
1277 | u8 (*get_backlight_level)(struct radeon_encoder *radeon_encoder); |
- | 1278 | /* audio callbacks */ |
|
- | 1279 | void (*hdmi_enable)(struct drm_encoder *encoder, bool enable); |
|
- | 1280 | void (*hdmi_setmode)(struct drm_encoder *encoder, struct drm_display_mode *mode); |
|
1209 | } display; |
1281 | } display; |
1210 | /* copy functions for bo handling */ |
1282 | /* copy functions for bo handling */ |
1211 | struct { |
1283 | struct { |
1212 | int (*blit)(struct radeon_device *rdev, |
1284 | int (*blit)(struct radeon_device *rdev, |
1213 | uint64_t src_offset, |
1285 | uint64_t src_offset, |
Line 1256... | Line 1328... | ||
1256 | uint32_t (*get_memory_clock)(struct radeon_device *rdev); |
1328 | uint32_t (*get_memory_clock)(struct radeon_device *rdev); |
1257 | void (*set_memory_clock)(struct radeon_device *rdev, uint32_t mem_clock); |
1329 | void (*set_memory_clock)(struct radeon_device *rdev, uint32_t mem_clock); |
1258 | int (*get_pcie_lanes)(struct radeon_device *rdev); |
1330 | int (*get_pcie_lanes)(struct radeon_device *rdev); |
1259 | void (*set_pcie_lanes)(struct radeon_device *rdev, int lanes); |
1331 | void (*set_pcie_lanes)(struct radeon_device *rdev, int lanes); |
1260 | void (*set_clock_gating)(struct radeon_device *rdev, int enable); |
1332 | void (*set_clock_gating)(struct radeon_device *rdev, int enable); |
- | 1333 | int (*set_uvd_clocks)(struct radeon_device *rdev, u32 vclk, u32 dclk); |
|
1261 | } pm; |
1334 | } pm; |
1262 | /* pageflipping */ |
1335 | /* pageflipping */ |
1263 | struct { |
1336 | struct { |
1264 | void (*pre_page_flip)(struct radeon_device *rdev, int crtc); |
1337 | void (*pre_page_flip)(struct radeon_device *rdev, int crtc); |
1265 | u32 (*page_flip)(struct radeon_device *rdev, int crtc, u64 crtc_base); |
1338 | u32 (*page_flip)(struct radeon_device *rdev, int crtc, u64 crtc_base); |
Line 1418... | Line 1491... | ||
1418 | unsigned shader_engine_tile_size; |
1491 | unsigned shader_engine_tile_size; |
1419 | unsigned num_gpus; |
1492 | unsigned num_gpus; |
1420 | unsigned multi_gpu_tile_size; |
1493 | unsigned multi_gpu_tile_size; |
Line 1421... | Line 1494... | ||
1421 | 1494 | ||
- | 1495 | unsigned tile_config; |
|
1422 | unsigned tile_config; |
1496 | uint32_t tile_mode_array[32]; |
Line 1423... | Line 1497... | ||
1423 | }; |
1497 | }; |
1424 | 1498 | ||
1425 | union radeon_asic_config { |
1499 | union radeon_asic_config { |
Line 1503... | Line 1577... | ||
1503 | struct radeon_sa_manager ring_tmp_bo; |
1577 | struct radeon_sa_manager ring_tmp_bo; |
1504 | struct radeon_irq irq; |
1578 | struct radeon_irq irq; |
1505 | struct radeon_asic *asic; |
1579 | struct radeon_asic *asic; |
1506 | struct radeon_gem gem; |
1580 | struct radeon_gem gem; |
1507 | struct radeon_pm pm; |
1581 | struct radeon_pm pm; |
- | 1582 | struct radeon_uvd uvd; |
|
1508 | uint32_t bios_scratch[RADEON_BIOS_NUM_SCRATCH]; |
1583 | uint32_t bios_scratch[RADEON_BIOS_NUM_SCRATCH]; |
1509 | struct radeon_wb wb; |
1584 | struct radeon_wb wb; |
1510 | struct radeon_dummy_page dummy_page; |
1585 | struct radeon_dummy_page dummy_page; |
1511 | bool shutdown; |
1586 | bool shutdown; |
1512 | bool suspend; |
1587 | bool suspend; |
1513 | bool need_dma32; |
1588 | bool need_dma32; |
1514 | bool accel_working; |
1589 | bool accel_working; |
- | 1590 | bool fastfb_working; /* IGP feature*/ |
|
1515 | struct radeon_surface_reg surface_regs[RADEON_GEM_MAX_SURFACES]; |
1591 | struct radeon_surface_reg surface_regs[RADEON_GEM_MAX_SURFACES]; |
1516 | const struct firmware *me_fw; /* all family ME firmware */ |
1592 | const struct firmware *me_fw; /* all family ME firmware */ |
1517 | const struct firmware *pfp_fw; /* r6/700 PFP firmware */ |
1593 | const struct firmware *pfp_fw; /* r6/700 PFP firmware */ |
1518 | const struct firmware *rlc_fw; /* r6/700 RLC firmware */ |
1594 | const struct firmware *rlc_fw; /* r6/700 RLC firmware */ |
1519 | const struct firmware *mc_fw; /* NI MC firmware */ |
1595 | const struct firmware *mc_fw; /* NI MC firmware */ |
1520 | const struct firmware *ce_fw; /* SI CE firmware */ |
1596 | const struct firmware *ce_fw; /* SI CE firmware */ |
- | 1597 | const struct firmware *uvd_fw; /* UVD firmware */ |
|
1521 | struct r600_blit r600_blit; |
1598 | struct r600_blit r600_blit; |
1522 | struct r600_vram_scratch vram_scratch; |
1599 | struct r600_vram_scratch vram_scratch; |
1523 | int msi_enabled; /* msi enabled */ |
1600 | int msi_enabled; /* msi enabled */ |
1524 | struct r600_ih ih; /* r6/700 interrupt ring */ |
1601 | struct r600_ih ih; /* r6/700 interrupt ring */ |
1525 | struct si_rlc rlc; |
1602 | struct si_rlc rlc; |
1526 | // struct work_struct hotplug_work; |
1603 | // struct work_struct hotplug_work; |
1527 | // struct work_struct audio_work; |
1604 | // struct work_struct audio_work; |
1528 | int num_crtc; /* number of crtcs */ |
1605 | int num_crtc; /* number of crtcs */ |
1529 | struct mutex dc_hw_i2c_mutex; /* display controller hw i2c mutex */ |
1606 | struct mutex dc_hw_i2c_mutex; /* display controller hw i2c mutex */ |
1530 | bool audio_enabled; |
1607 | bool audio_enabled; |
- | 1608 | bool has_uvd; |
|
1531 | // struct r600_audio audio_status; /* audio stuff */ |
1609 | // struct r600_audio audio_status; /* audio stuff */ |
1532 | // struct notifier_block acpi_nb; |
1610 | // struct notifier_block acpi_nb; |
1533 | /* only one userspace can use Hyperz features or CMASK at a time */ |
1611 | /* only one userspace can use Hyperz features or CMASK at a time */ |
1534 | // struct drm_file *hyperz_filp; |
1612 | // struct drm_file *hyperz_filp; |
1535 | // struct drm_file *cmask_filp; |
1613 | // struct drm_file *cmask_filp; |
Line 1583... | Line 1661... | ||
1583 | #define WREG32_PLL(reg, v) rdev->pll_wreg(rdev, (reg), (v)) |
1661 | #define WREG32_PLL(reg, v) rdev->pll_wreg(rdev, (reg), (v)) |
1584 | #define RREG32_MC(reg) rdev->mc_rreg(rdev, (reg)) |
1662 | #define RREG32_MC(reg) rdev->mc_rreg(rdev, (reg)) |
1585 | #define WREG32_MC(reg, v) rdev->mc_wreg(rdev, (reg), (v)) |
1663 | #define WREG32_MC(reg, v) rdev->mc_wreg(rdev, (reg), (v)) |
1586 | #define RREG32_PCIE(reg) rv370_pcie_rreg(rdev, (reg)) |
1664 | #define RREG32_PCIE(reg) rv370_pcie_rreg(rdev, (reg)) |
1587 | #define WREG32_PCIE(reg, v) rv370_pcie_wreg(rdev, (reg), (v)) |
1665 | #define WREG32_PCIE(reg, v) rv370_pcie_wreg(rdev, (reg), (v)) |
1588 | #define RREG32_PCIE_P(reg) rdev->pciep_rreg(rdev, (reg)) |
1666 | #define RREG32_PCIE_PORT(reg) rdev->pciep_rreg(rdev, (reg)) |
1589 | #define WREG32_PCIE_P(reg, v) rdev->pciep_wreg(rdev, (reg), (v)) |
1667 | #define WREG32_PCIE_PORT(reg, v) rdev->pciep_wreg(rdev, (reg), (v)) |
1590 | #define WREG32_P(reg, val, mask) \ |
1668 | #define WREG32_P(reg, val, mask) \ |
1591 | do { \ |
1669 | do { \ |
1592 | uint32_t tmp_ = RREG32(reg); \ |
1670 | uint32_t tmp_ = RREG32(reg); \ |
1593 | tmp_ &= (mask); \ |
1671 | tmp_ &= (mask); \ |
1594 | tmp_ |= ((val) & ~(mask)); \ |
1672 | tmp_ |= ((val) & ~(mask)); \ |
1595 | WREG32(reg, tmp_); \ |
1673 | WREG32(reg, tmp_); \ |
1596 | } while (0) |
1674 | } while (0) |
- | 1675 | #define WREG32_AND(reg, and) WREG32_P(reg, 0, and) |
|
- | 1676 | #define WREG32_OR(reg, or) WREG32_P(reg, or, ~or) |
|
1597 | #define WREG32_PLL_P(reg, val, mask) \ |
1677 | #define WREG32_PLL_P(reg, val, mask) \ |
1598 | do { \ |
1678 | do { \ |
1599 | uint32_t tmp_ = RREG32_PLL(reg); \ |
1679 | uint32_t tmp_ = RREG32_PLL(reg); \ |
1600 | tmp_ &= (mask); \ |
1680 | tmp_ &= (mask); \ |
1601 | tmp_ |= ((val) & ~(mask)); \ |
1681 | tmp_ |= ((val) & ~(mask)); \ |
Line 1666... | Line 1746... | ||
1666 | (rdev->flags & RADEON_IS_IGP)) |
1746 | (rdev->flags & RADEON_IS_IGP)) |
1667 | #define ASIC_IS_DCE5(rdev) ((rdev->family >= CHIP_BARTS)) |
1747 | #define ASIC_IS_DCE5(rdev) ((rdev->family >= CHIP_BARTS)) |
1668 | #define ASIC_IS_DCE6(rdev) ((rdev->family >= CHIP_ARUBA)) |
1748 | #define ASIC_IS_DCE6(rdev) ((rdev->family >= CHIP_ARUBA)) |
1669 | #define ASIC_IS_DCE61(rdev) ((rdev->family >= CHIP_ARUBA) && \ |
1749 | #define ASIC_IS_DCE61(rdev) ((rdev->family >= CHIP_ARUBA) && \ |
1670 | (rdev->flags & RADEON_IS_IGP)) |
1750 | (rdev->flags & RADEON_IS_IGP)) |
- | 1751 | #define ASIC_IS_DCE64(rdev) ((rdev->family == CHIP_OLAND)) |
|
- | 1752 | #define ASIC_IS_NODCE(rdev) ((rdev->family == CHIP_HAINAN)) |
|
Line 1671... | Line 1753... | ||
1671 | 1753 | ||
1672 | /* |
1754 | /* |
1673 | * BIOS helpers. |
1755 | * BIOS helpers. |
1674 | */ |
1756 | */ |
Line 1710... | Line 1792... | ||
1710 | #define radeon_asic_reset(rdev) (rdev)->asic->asic_reset((rdev)) |
1792 | #define radeon_asic_reset(rdev) (rdev)->asic->asic_reset((rdev)) |
1711 | #define radeon_gart_tlb_flush(rdev) (rdev)->asic->gart.tlb_flush((rdev)) |
1793 | #define radeon_gart_tlb_flush(rdev) (rdev)->asic->gart.tlb_flush((rdev)) |
1712 | #define radeon_gart_set_page(rdev, i, p) (rdev)->asic->gart.set_page((rdev), (i), (p)) |
1794 | #define radeon_gart_set_page(rdev, i, p) (rdev)->asic->gart.set_page((rdev), (i), (p)) |
1713 | #define radeon_asic_vm_init(rdev) (rdev)->asic->vm.init((rdev)) |
1795 | #define radeon_asic_vm_init(rdev) (rdev)->asic->vm.init((rdev)) |
1714 | #define radeon_asic_vm_fini(rdev) (rdev)->asic->vm.fini((rdev)) |
1796 | #define radeon_asic_vm_fini(rdev) (rdev)->asic->vm.fini((rdev)) |
1715 | #define radeon_asic_vm_set_page(rdev, pe, addr, count, incr, flags) ((rdev)->asic->vm.set_page((rdev), (pe), (addr), (count), (incr), (flags))) |
1797 | #define radeon_asic_vm_set_page(rdev, ib, pe, addr, count, incr, flags) ((rdev)->asic->vm.set_page((rdev), (ib), (pe), (addr), (count), (incr), (flags))) |
1716 | #define radeon_ring_start(rdev, r, cp) (rdev)->asic->ring[(r)].ring_start((rdev), (cp)) |
1798 | #define radeon_ring_start(rdev, r, cp) (rdev)->asic->ring[(r)].ring_start((rdev), (cp)) |
1717 | #define radeon_ring_test(rdev, r, cp) (rdev)->asic->ring[(r)].ring_test((rdev), (cp)) |
1799 | #define radeon_ring_test(rdev, r, cp) (rdev)->asic->ring[(r)].ring_test((rdev), (cp)) |
1718 | #define radeon_ib_test(rdev, r, cp) (rdev)->asic->ring[(r)].ib_test((rdev), (cp)) |
1800 | #define radeon_ib_test(rdev, r, cp) (rdev)->asic->ring[(r)].ib_test((rdev), (cp)) |
1719 | #define radeon_ring_ib_execute(rdev, r, ib) (rdev)->asic->ring[(r)].ib_execute((rdev), (ib)) |
1801 | #define radeon_ring_ib_execute(rdev, r, ib) (rdev)->asic->ring[(r)].ib_execute((rdev), (ib)) |
1720 | #define radeon_ring_ib_parse(rdev, r, ib) (rdev)->asic->ring[(r)].ib_parse((rdev), (ib)) |
1802 | #define radeon_ring_ib_parse(rdev, r, ib) (rdev)->asic->ring[(r)].ib_parse((rdev), (ib)) |
Line 1723... | Line 1805... | ||
1723 | #define radeon_irq_set(rdev) (rdev)->asic->irq.set((rdev)) |
1805 | #define radeon_irq_set(rdev) (rdev)->asic->irq.set((rdev)) |
1724 | #define radeon_irq_process(rdev) (rdev)->asic->irq.process((rdev)) |
1806 | #define radeon_irq_process(rdev) (rdev)->asic->irq.process((rdev)) |
1725 | #define radeon_get_vblank_counter(rdev, crtc) (rdev)->asic->display.get_vblank_counter((rdev), (crtc)) |
1807 | #define radeon_get_vblank_counter(rdev, crtc) (rdev)->asic->display.get_vblank_counter((rdev), (crtc)) |
1726 | #define radeon_set_backlight_level(rdev, e, l) (rdev)->asic->display.set_backlight_level((e), (l)) |
1808 | #define radeon_set_backlight_level(rdev, e, l) (rdev)->asic->display.set_backlight_level((e), (l)) |
1727 | #define radeon_get_backlight_level(rdev, e) (rdev)->asic->display.get_backlight_level((e)) |
1809 | #define radeon_get_backlight_level(rdev, e) (rdev)->asic->display.get_backlight_level((e)) |
- | 1810 | #define radeon_hdmi_enable(rdev, e, b) (rdev)->asic->display.hdmi_enable((e), (b)) |
|
- | 1811 | #define radeon_hdmi_setmode(rdev, e, m) (rdev)->asic->display.hdmi_setmode((e), (m)) |
|
1728 | #define radeon_fence_ring_emit(rdev, r, fence) (rdev)->asic->ring[(r)].emit_fence((rdev), (fence)) |
1812 | #define radeon_fence_ring_emit(rdev, r, fence) (rdev)->asic->ring[(r)].emit_fence((rdev), (fence)) |
1729 | #define radeon_semaphore_ring_emit(rdev, r, cp, semaphore, emit_wait) (rdev)->asic->ring[(r)].emit_semaphore((rdev), (cp), (semaphore), (emit_wait)) |
1813 | #define radeon_semaphore_ring_emit(rdev, r, cp, semaphore, emit_wait) (rdev)->asic->ring[(r)].emit_semaphore((rdev), (cp), (semaphore), (emit_wait)) |
1730 | #define radeon_copy_blit(rdev, s, d, np, f) (rdev)->asic->copy.blit((rdev), (s), (d), (np), (f)) |
1814 | #define radeon_copy_blit(rdev, s, d, np, f) (rdev)->asic->copy.blit((rdev), (s), (d), (np), (f)) |
1731 | #define radeon_copy_dma(rdev, s, d, np, f) (rdev)->asic->copy.dma((rdev), (s), (d), (np), (f)) |
1815 | #define radeon_copy_dma(rdev, s, d, np, f) (rdev)->asic->copy.dma((rdev), (s), (d), (np), (f)) |
1732 | #define radeon_copy(rdev, s, d, np, f) (rdev)->asic->copy.copy((rdev), (s), (d), (np), (f)) |
1816 | #define radeon_copy(rdev, s, d, np, f) (rdev)->asic->copy.copy((rdev), (s), (d), (np), (f)) |
Line 1738... | Line 1822... | ||
1738 | #define radeon_get_memory_clock(rdev) (rdev)->asic->pm.get_memory_clock((rdev)) |
1822 | #define radeon_get_memory_clock(rdev) (rdev)->asic->pm.get_memory_clock((rdev)) |
1739 | #define radeon_set_memory_clock(rdev, e) (rdev)->asic->pm.set_memory_clock((rdev), (e)) |
1823 | #define radeon_set_memory_clock(rdev, e) (rdev)->asic->pm.set_memory_clock((rdev), (e)) |
1740 | #define radeon_get_pcie_lanes(rdev) (rdev)->asic->pm.get_pcie_lanes((rdev)) |
1824 | #define radeon_get_pcie_lanes(rdev) (rdev)->asic->pm.get_pcie_lanes((rdev)) |
1741 | #define radeon_set_pcie_lanes(rdev, l) (rdev)->asic->pm.set_pcie_lanes((rdev), (l)) |
1825 | #define radeon_set_pcie_lanes(rdev, l) (rdev)->asic->pm.set_pcie_lanes((rdev), (l)) |
1742 | #define radeon_set_clock_gating(rdev, e) (rdev)->asic->pm.set_clock_gating((rdev), (e)) |
1826 | #define radeon_set_clock_gating(rdev, e) (rdev)->asic->pm.set_clock_gating((rdev), (e)) |
- | 1827 | #define radeon_set_uvd_clocks(rdev, v, d) (rdev)->asic->pm.set_uvd_clocks((rdev), (v), (d)) |
|
1743 | #define radeon_set_surface_reg(rdev, r, f, p, o, s) ((rdev)->asic->surface.set_reg((rdev), (r), (f), (p), (o), (s))) |
1828 | #define radeon_set_surface_reg(rdev, r, f, p, o, s) ((rdev)->asic->surface.set_reg((rdev), (r), (f), (p), (o), (s))) |
1744 | #define radeon_clear_surface_reg(rdev, r) ((rdev)->asic->surface.clear_reg((rdev), (r))) |
1829 | #define radeon_clear_surface_reg(rdev, r) ((rdev)->asic->surface.clear_reg((rdev), (r))) |
1745 | #define radeon_bandwidth_update(rdev) (rdev)->asic->display.bandwidth_update((rdev)) |
1830 | #define radeon_bandwidth_update(rdev) (rdev)->asic->display.bandwidth_update((rdev)) |
1746 | #define radeon_hpd_init(rdev) (rdev)->asic->hpd.init((rdev)) |
1831 | #define radeon_hpd_init(rdev) (rdev)->asic->hpd.init((rdev)) |
1747 | #define radeon_hpd_fini(rdev) (rdev)->asic->hpd.fini((rdev)) |
1832 | #define radeon_hpd_fini(rdev) (rdev)->asic->hpd.fini((rdev)) |
Line 1756... | Line 1841... | ||
1756 | #define radeon_pre_page_flip(rdev, crtc) (rdev)->asic->pflip.pre_page_flip((rdev), (crtc)) |
1841 | #define radeon_pre_page_flip(rdev, crtc) (rdev)->asic->pflip.pre_page_flip((rdev), (crtc)) |
1757 | #define radeon_page_flip(rdev, crtc, base) (rdev)->asic->pflip.page_flip((rdev), (crtc), (base)) |
1842 | #define radeon_page_flip(rdev, crtc, base) (rdev)->asic->pflip.page_flip((rdev), (crtc), (base)) |
1758 | #define radeon_post_page_flip(rdev, crtc) (rdev)->asic->pflip.post_page_flip((rdev), (crtc)) |
1843 | #define radeon_post_page_flip(rdev, crtc) (rdev)->asic->pflip.post_page_flip((rdev), (crtc)) |
1759 | #define radeon_wait_for_vblank(rdev, crtc) (rdev)->asic->display.wait_for_vblank((rdev), (crtc)) |
1844 | #define radeon_wait_for_vblank(rdev, crtc) (rdev)->asic->display.wait_for_vblank((rdev), (crtc)) |
1760 | #define radeon_mc_wait_for_idle(rdev) (rdev)->asic->mc_wait_for_idle((rdev)) |
1845 | #define radeon_mc_wait_for_idle(rdev) (rdev)->asic->mc_wait_for_idle((rdev)) |
- | 1846 | #define radeon_get_xclk(rdev) (rdev)->asic->get_xclk((rdev)) |
|
- | 1847 | #define radeon_get_gpu_clock_counter(rdev) (rdev)->asic->get_gpu_clock_counter((rdev)) |
|
Line 1761... | Line 1848... | ||
1761 | 1848 | ||
1762 | /* Common functions */ |
1849 | /* Common functions */ |
1763 | /* AGP */ |
1850 | /* AGP */ |
- | 1851 | extern int radeon_gpu_reset(struct radeon_device *rdev); |
|
1764 | extern int radeon_gpu_reset(struct radeon_device *rdev); |
1852 | extern void r600_set_bios_scratch_engine_hung(struct radeon_device *rdev, bool hung); |
1765 | extern void radeon_agp_disable(struct radeon_device *rdev); |
1853 | extern void radeon_agp_disable(struct radeon_device *rdev); |
1766 | extern int radeon_modeset_init(struct radeon_device *rdev); |
1854 | extern int radeon_modeset_init(struct radeon_device *rdev); |
1767 | extern void radeon_modeset_fini(struct radeon_device *rdev); |
1855 | extern void radeon_modeset_fini(struct radeon_device *rdev); |
1768 | extern bool radeon_card_posted(struct radeon_device *rdev); |
1856 | extern bool radeon_card_posted(struct radeon_device *rdev); |
Line 1782... | Line 1870... | ||
1782 | extern void radeon_vram_location(struct radeon_device *rdev, struct radeon_mc *mc, u64 base); |
1870 | extern void radeon_vram_location(struct radeon_device *rdev, struct radeon_mc *mc, u64 base); |
1783 | extern void radeon_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc); |
1871 | extern void radeon_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc); |
1784 | extern int radeon_resume_kms(struct drm_device *dev); |
1872 | extern int radeon_resume_kms(struct drm_device *dev); |
1785 | extern int radeon_suspend_kms(struct drm_device *dev, pm_message_t state); |
1873 | extern int radeon_suspend_kms(struct drm_device *dev, pm_message_t state); |
1786 | extern void radeon_ttm_set_active_vram_size(struct radeon_device *rdev, u64 size); |
1874 | extern void radeon_ttm_set_active_vram_size(struct radeon_device *rdev, u64 size); |
- | 1875 | extern void radeon_program_register_sequence(struct radeon_device *rdev, |
|
- | 1876 | const u32 *registers, |
|
- | 1877 | const u32 array_size); |
|
Line 1787... | Line 1878... | ||
1787 | 1878 | ||
1788 | /* |
1879 | /* |
1789 | * vm |
1880 | * vm |
1790 | */ |
1881 | */ |
Line 1854... | Line 1945... | ||
1854 | 1945 | ||
Line 1855... | Line 1946... | ||
1855 | }; |
1946 | }; |
Line 1856... | Line -... | ||
1856 | - | ||
1857 | extern struct radeon_hdmi_acr r600_hdmi_acr(uint32_t clock); |
- | |
1858 | - | ||
1859 | extern void r600_hdmi_enable(struct drm_encoder *encoder); |
1947 | |
1860 | extern void r600_hdmi_disable(struct drm_encoder *encoder); |
1948 | extern struct radeon_hdmi_acr r600_hdmi_acr(uint32_t clock); |
1861 | extern void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mode); |
1949 | |
1862 | extern u32 r6xx_remap_render_backend(struct radeon_device *rdev, |
1950 | extern u32 r6xx_remap_render_backend(struct radeon_device *rdev, |
1863 | u32 tiling_pipe_num, |
1951 | u32 tiling_pipe_num, |
Line 1864... | Line 1952... | ||
1864 | u32 max_rb_num, |
1952 | u32 max_rb_num, |
1865 | u32 total_max_rb_num, |
1953 | u32 total_max_rb_num, |
1866 | u32 enabled_rb_mask); |
1954 | u32 enabled_rb_mask); |
Line 1867... | Line -... | ||
1867 | - | ||
1868 | /* |
- | |
1869 | * evergreen functions used by radeon_encoder.c |
1955 | |
1870 | */ |
1956 | /* |
Line 1871... | Line 1957... | ||
1871 | 1957 | * evergreen functions used by radeon_encoder.c |
|
1872 | extern void evergreen_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mode); |
1958 | */ |
Line 1894... | Line 1980... | ||
1894 | 1980 | ||
1895 | bool set_mode(struct drm_device *dev, struct drm_connector *connector, |
1981 | bool set_mode(struct drm_device *dev, struct drm_connector *connector, |
Line 1896... | Line 1982... | ||
1896 | videomode_t *mode, bool strict); |
1982 | videomode_t *mode, bool strict); |
1897 | 1983 | ||
- | 1984 | ||
Line 1898... | Line 1985... | ||
1898 | 1985 | #ifndef __TTM__ |