diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon.h')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon.h | 296 |
1 files changed, 196 insertions, 100 deletions
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index 1668ec1ee770..138b95216d8d 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h | |||
@@ -236,12 +236,15 @@ void radeon_pm_resume(struct radeon_device *rdev); | |||
236 | void radeon_combios_get_power_modes(struct radeon_device *rdev); | 236 | void radeon_combios_get_power_modes(struct radeon_device *rdev); |
237 | void radeon_atombios_get_power_modes(struct radeon_device *rdev); | 237 | void radeon_atombios_get_power_modes(struct radeon_device *rdev); |
238 | void radeon_atom_set_voltage(struct radeon_device *rdev, u16 voltage_level, u8 voltage_type); | 238 | void radeon_atom_set_voltage(struct radeon_device *rdev, u16 voltage_level, u8 voltage_type); |
239 | int radeon_atom_get_max_vddc(struct radeon_device *rdev, u16 *voltage); | ||
240 | void rs690_pm_info(struct radeon_device *rdev); | 239 | void rs690_pm_info(struct radeon_device *rdev); |
241 | extern int rv6xx_get_temp(struct radeon_device *rdev); | 240 | extern int rv6xx_get_temp(struct radeon_device *rdev); |
242 | extern int rv770_get_temp(struct radeon_device *rdev); | 241 | extern int rv770_get_temp(struct radeon_device *rdev); |
243 | extern int evergreen_get_temp(struct radeon_device *rdev); | 242 | extern int evergreen_get_temp(struct radeon_device *rdev); |
244 | extern int sumo_get_temp(struct radeon_device *rdev); | 243 | extern int sumo_get_temp(struct radeon_device *rdev); |
244 | extern int si_get_temp(struct radeon_device *rdev); | ||
245 | extern void evergreen_tiling_fields(unsigned tiling_flags, unsigned *bankw, | ||
246 | unsigned *bankh, unsigned *mtaspect, | ||
247 | unsigned *tile_split); | ||
245 | 248 | ||
246 | /* | 249 | /* |
247 | * Fences. | 250 | * Fences. |
@@ -411,9 +414,6 @@ int radeon_gem_object_create(struct radeon_device *rdev, int size, | |||
411 | int alignment, int initial_domain, | 414 | int alignment, int initial_domain, |
412 | bool discardable, bool kernel, | 415 | bool discardable, bool kernel, |
413 | struct drm_gem_object **obj); | 416 | struct drm_gem_object **obj); |
414 | int radeon_gem_object_pin(struct drm_gem_object *obj, uint32_t pin_domain, | ||
415 | uint64_t *gpu_addr); | ||
416 | void radeon_gem_object_unpin(struct drm_gem_object *obj); | ||
417 | 417 | ||
418 | int radeon_mode_dumb_create(struct drm_file *file_priv, | 418 | int radeon_mode_dumb_create(struct drm_file *file_priv, |
419 | struct drm_device *dev, | 419 | struct drm_device *dev, |
@@ -632,6 +632,7 @@ struct radeon_ib { | |||
632 | uint32_t *ptr; | 632 | uint32_t *ptr; |
633 | struct radeon_fence *fence; | 633 | struct radeon_fence *fence; |
634 | unsigned vm_id; | 634 | unsigned vm_id; |
635 | bool is_const_ib; | ||
635 | }; | 636 | }; |
636 | 637 | ||
637 | /* | 638 | /* |
@@ -771,6 +772,18 @@ struct r600_blit { | |||
771 | 772 | ||
772 | void r600_blit_suspend(struct radeon_device *rdev); | 773 | void r600_blit_suspend(struct radeon_device *rdev); |
773 | 774 | ||
775 | /* | ||
776 | * SI RLC stuff | ||
777 | */ | ||
778 | struct si_rlc { | ||
779 | /* for power gating */ | ||
780 | struct radeon_bo *save_restore_obj; | ||
781 | uint64_t save_restore_gpu_addr; | ||
782 | /* for clear state */ | ||
783 | struct radeon_bo *clear_state_obj; | ||
784 | uint64_t clear_state_gpu_addr; | ||
785 | }; | ||
786 | |||
774 | int radeon_ib_get(struct radeon_device *rdev, int ring, | 787 | int radeon_ib_get(struct radeon_device *rdev, int ring, |
775 | struct radeon_ib **ib, unsigned size); | 788 | struct radeon_ib **ib, unsigned size); |
776 | void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib **ib); | 789 | void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib **ib); |
@@ -780,7 +793,6 @@ int radeon_ib_pool_init(struct radeon_device *rdev); | |||
780 | void radeon_ib_pool_fini(struct radeon_device *rdev); | 793 | void radeon_ib_pool_fini(struct radeon_device *rdev); |
781 | int radeon_ib_pool_start(struct radeon_device *rdev); | 794 | int radeon_ib_pool_start(struct radeon_device *rdev); |
782 | int radeon_ib_pool_suspend(struct radeon_device *rdev); | 795 | int radeon_ib_pool_suspend(struct radeon_device *rdev); |
783 | int radeon_ib_test(struct radeon_device *rdev); | ||
784 | /* Ring access between begin & end cannot sleep */ | 796 | /* Ring access between begin & end cannot sleep */ |
785 | int radeon_ring_index(struct radeon_device *rdev, struct radeon_ring *cp); | 797 | int radeon_ring_index(struct radeon_device *rdev, struct radeon_ring *cp); |
786 | void radeon_ring_free_size(struct radeon_device *rdev, struct radeon_ring *cp); | 798 | void radeon_ring_free_size(struct radeon_device *rdev, struct radeon_ring *cp); |
@@ -833,12 +845,13 @@ struct radeon_cs_parser { | |||
833 | struct radeon_cs_reloc *relocs; | 845 | struct radeon_cs_reloc *relocs; |
834 | struct radeon_cs_reloc **relocs_ptr; | 846 | struct radeon_cs_reloc **relocs_ptr; |
835 | struct list_head validated; | 847 | struct list_head validated; |
836 | bool sync_to_ring[RADEON_NUM_RINGS]; | ||
837 | /* indices of various chunks */ | 848 | /* indices of various chunks */ |
838 | int chunk_ib_idx; | 849 | int chunk_ib_idx; |
839 | int chunk_relocs_idx; | 850 | int chunk_relocs_idx; |
840 | int chunk_flags_idx; | 851 | int chunk_flags_idx; |
852 | int chunk_const_ib_idx; | ||
841 | struct radeon_ib *ib; | 853 | struct radeon_ib *ib; |
854 | struct radeon_ib *const_ib; | ||
842 | void *track; | 855 | void *track; |
843 | unsigned family; | 856 | unsigned family; |
844 | int parser_error; | 857 | int parser_error; |
@@ -980,6 +993,7 @@ enum radeon_int_thermal_type { | |||
980 | THERMAL_TYPE_EVERGREEN, | 993 | THERMAL_TYPE_EVERGREEN, |
981 | THERMAL_TYPE_SUMO, | 994 | THERMAL_TYPE_SUMO, |
982 | THERMAL_TYPE_NI, | 995 | THERMAL_TYPE_NI, |
996 | THERMAL_TYPE_SI, | ||
983 | }; | 997 | }; |
984 | 998 | ||
985 | struct radeon_voltage { | 999 | struct radeon_voltage { |
@@ -1132,57 +1146,6 @@ struct radeon_asic { | |||
1132 | void (*vga_set_state)(struct radeon_device *rdev, bool state); | 1146 | void (*vga_set_state)(struct radeon_device *rdev, bool state); |
1133 | bool (*gpu_is_lockup)(struct radeon_device *rdev, struct radeon_ring *cp); | 1147 | bool (*gpu_is_lockup)(struct radeon_device *rdev, struct radeon_ring *cp); |
1134 | int (*asic_reset)(struct radeon_device *rdev); | 1148 | int (*asic_reset)(struct radeon_device *rdev); |
1135 | void (*gart_tlb_flush)(struct radeon_device *rdev); | ||
1136 | int (*gart_set_page)(struct radeon_device *rdev, int i, uint64_t addr); | ||
1137 | int (*cp_init)(struct radeon_device *rdev, unsigned ring_size); | ||
1138 | void (*cp_fini)(struct radeon_device *rdev); | ||
1139 | void (*cp_disable)(struct radeon_device *rdev); | ||
1140 | void (*ring_start)(struct radeon_device *rdev); | ||
1141 | |||
1142 | struct { | ||
1143 | void (*ib_execute)(struct radeon_device *rdev, struct radeon_ib *ib); | ||
1144 | int (*ib_parse)(struct radeon_device *rdev, struct radeon_ib *ib); | ||
1145 | void (*emit_fence)(struct radeon_device *rdev, struct radeon_fence *fence); | ||
1146 | void (*emit_semaphore)(struct radeon_device *rdev, struct radeon_ring *cp, | ||
1147 | struct radeon_semaphore *semaphore, bool emit_wait); | ||
1148 | } ring[RADEON_NUM_RINGS]; | ||
1149 | |||
1150 | int (*ring_test)(struct radeon_device *rdev, struct radeon_ring *cp); | ||
1151 | int (*irq_set)(struct radeon_device *rdev); | ||
1152 | int (*irq_process)(struct radeon_device *rdev); | ||
1153 | u32 (*get_vblank_counter)(struct radeon_device *rdev, int crtc); | ||
1154 | int (*cs_parse)(struct radeon_cs_parser *p); | ||
1155 | int (*copy_blit)(struct radeon_device *rdev, | ||
1156 | uint64_t src_offset, | ||
1157 | uint64_t dst_offset, | ||
1158 | unsigned num_gpu_pages, | ||
1159 | struct radeon_fence *fence); | ||
1160 | int (*copy_dma)(struct radeon_device *rdev, | ||
1161 | uint64_t src_offset, | ||
1162 | uint64_t dst_offset, | ||
1163 | unsigned num_gpu_pages, | ||
1164 | struct radeon_fence *fence); | ||
1165 | int (*copy)(struct radeon_device *rdev, | ||
1166 | uint64_t src_offset, | ||
1167 | uint64_t dst_offset, | ||
1168 | unsigned num_gpu_pages, | ||
1169 | struct radeon_fence *fence); | ||
1170 | uint32_t (*get_engine_clock)(struct radeon_device *rdev); | ||
1171 | void (*set_engine_clock)(struct radeon_device *rdev, uint32_t eng_clock); | ||
1172 | uint32_t (*get_memory_clock)(struct radeon_device *rdev); | ||
1173 | void (*set_memory_clock)(struct radeon_device *rdev, uint32_t mem_clock); | ||
1174 | int (*get_pcie_lanes)(struct radeon_device *rdev); | ||
1175 | void (*set_pcie_lanes)(struct radeon_device *rdev, int lanes); | ||
1176 | void (*set_clock_gating)(struct radeon_device *rdev, int enable); | ||
1177 | int (*set_surface_reg)(struct radeon_device *rdev, int reg, | ||
1178 | uint32_t tiling_flags, uint32_t pitch, | ||
1179 | uint32_t offset, uint32_t obj_size); | ||
1180 | void (*clear_surface_reg)(struct radeon_device *rdev, int reg); | ||
1181 | void (*bandwidth_update)(struct radeon_device *rdev); | ||
1182 | void (*hpd_init)(struct radeon_device *rdev); | ||
1183 | void (*hpd_fini)(struct radeon_device *rdev); | ||
1184 | bool (*hpd_sense)(struct radeon_device *rdev, enum radeon_hpd_id hpd); | ||
1185 | void (*hpd_set_polarity)(struct radeon_device *rdev, enum radeon_hpd_id hpd); | ||
1186 | /* ioctl hw specific callback. Some hw might want to perform special | 1149 | /* ioctl hw specific callback. Some hw might want to perform special |
1187 | * operation on specific ioctl. For instance on wait idle some hw | 1150 | * operation on specific ioctl. For instance on wait idle some hw |
1188 | * might want to perform and HDP flush through MMIO as it seems that | 1151 | * might want to perform and HDP flush through MMIO as it seems that |
@@ -1190,17 +1153,99 @@ struct radeon_asic { | |||
1190 | * through ring. | 1153 | * through ring. |
1191 | */ | 1154 | */ |
1192 | void (*ioctl_wait_idle)(struct radeon_device *rdev, struct radeon_bo *bo); | 1155 | void (*ioctl_wait_idle)(struct radeon_device *rdev, struct radeon_bo *bo); |
1156 | /* check if 3D engine is idle */ | ||
1193 | bool (*gui_idle)(struct radeon_device *rdev); | 1157 | bool (*gui_idle)(struct radeon_device *rdev); |
1158 | /* wait for mc_idle */ | ||
1159 | int (*mc_wait_for_idle)(struct radeon_device *rdev); | ||
1160 | /* gart */ | ||
1161 | struct { | ||
1162 | void (*tlb_flush)(struct radeon_device *rdev); | ||
1163 | int (*set_page)(struct radeon_device *rdev, int i, uint64_t addr); | ||
1164 | } gart; | ||
1165 | /* ring specific callbacks */ | ||
1166 | struct { | ||
1167 | void (*ib_execute)(struct radeon_device *rdev, struct radeon_ib *ib); | ||
1168 | int (*ib_parse)(struct radeon_device *rdev, struct radeon_ib *ib); | ||
1169 | void (*emit_fence)(struct radeon_device *rdev, struct radeon_fence *fence); | ||
1170 | void (*emit_semaphore)(struct radeon_device *rdev, struct radeon_ring *cp, | ||
1171 | struct radeon_semaphore *semaphore, bool emit_wait); | ||
1172 | int (*cs_parse)(struct radeon_cs_parser *p); | ||
1173 | void (*ring_start)(struct radeon_device *rdev, struct radeon_ring *cp); | ||
1174 | int (*ring_test)(struct radeon_device *rdev, struct radeon_ring *cp); | ||
1175 | int (*ib_test)(struct radeon_device *rdev, struct radeon_ring *cp); | ||
1176 | } ring[RADEON_NUM_RINGS]; | ||
1177 | /* irqs */ | ||
1178 | struct { | ||
1179 | int (*set)(struct radeon_device *rdev); | ||
1180 | int (*process)(struct radeon_device *rdev); | ||
1181 | } irq; | ||
1182 | /* displays */ | ||
1183 | struct { | ||
1184 | /* display watermarks */ | ||
1185 | void (*bandwidth_update)(struct radeon_device *rdev); | ||
1186 | /* get frame count */ | ||
1187 | u32 (*get_vblank_counter)(struct radeon_device *rdev, int crtc); | ||
1188 | /* wait for vblank */ | ||
1189 | void (*wait_for_vblank)(struct radeon_device *rdev, int crtc); | ||
1190 | } display; | ||
1191 | /* copy functions for bo handling */ | ||
1192 | struct { | ||
1193 | int (*blit)(struct radeon_device *rdev, | ||
1194 | uint64_t src_offset, | ||
1195 | uint64_t dst_offset, | ||
1196 | unsigned num_gpu_pages, | ||
1197 | struct radeon_fence *fence); | ||
1198 | u32 blit_ring_index; | ||
1199 | int (*dma)(struct radeon_device *rdev, | ||
1200 | uint64_t src_offset, | ||
1201 | uint64_t dst_offset, | ||
1202 | unsigned num_gpu_pages, | ||
1203 | struct radeon_fence *fence); | ||
1204 | u32 dma_ring_index; | ||
1205 | /* method used for bo copy */ | ||
1206 | int (*copy)(struct radeon_device *rdev, | ||
1207 | uint64_t src_offset, | ||
1208 | uint64_t dst_offset, | ||
1209 | unsigned num_gpu_pages, | ||
1210 | struct radeon_fence *fence); | ||
1211 | /* ring used for bo copies */ | ||
1212 | u32 copy_ring_index; | ||
1213 | } copy; | ||
1214 | /* surfaces */ | ||
1215 | struct { | ||
1216 | int (*set_reg)(struct radeon_device *rdev, int reg, | ||
1217 | uint32_t tiling_flags, uint32_t pitch, | ||
1218 | uint32_t offset, uint32_t obj_size); | ||
1219 | void (*clear_reg)(struct radeon_device *rdev, int reg); | ||
1220 | } surface; | ||
1221 | /* hotplug detect */ | ||
1222 | struct { | ||
1223 | void (*init)(struct radeon_device *rdev); | ||
1224 | void (*fini)(struct radeon_device *rdev); | ||
1225 | bool (*sense)(struct radeon_device *rdev, enum radeon_hpd_id hpd); | ||
1226 | void (*set_polarity)(struct radeon_device *rdev, enum radeon_hpd_id hpd); | ||
1227 | } hpd; | ||
1194 | /* power management */ | 1228 | /* power management */ |
1195 | void (*pm_misc)(struct radeon_device *rdev); | 1229 | struct { |
1196 | void (*pm_prepare)(struct radeon_device *rdev); | 1230 | void (*misc)(struct radeon_device *rdev); |
1197 | void (*pm_finish)(struct radeon_device *rdev); | 1231 | void (*prepare)(struct radeon_device *rdev); |
1198 | void (*pm_init_profile)(struct radeon_device *rdev); | 1232 | void (*finish)(struct radeon_device *rdev); |
1199 | void (*pm_get_dynpm_state)(struct radeon_device *rdev); | 1233 | void (*init_profile)(struct radeon_device *rdev); |
1234 | void (*get_dynpm_state)(struct radeon_device *rdev); | ||
1235 | uint32_t (*get_engine_clock)(struct radeon_device *rdev); | ||
1236 | void (*set_engine_clock)(struct radeon_device *rdev, uint32_t eng_clock); | ||
1237 | uint32_t (*get_memory_clock)(struct radeon_device *rdev); | ||
1238 | void (*set_memory_clock)(struct radeon_device *rdev, uint32_t mem_clock); | ||
1239 | int (*get_pcie_lanes)(struct radeon_device *rdev); | ||
1240 | void (*set_pcie_lanes)(struct radeon_device *rdev, int lanes); | ||
1241 | void (*set_clock_gating)(struct radeon_device *rdev, int enable); | ||
1242 | } pm; | ||
1200 | /* pageflipping */ | 1243 | /* pageflipping */ |
1201 | void (*pre_page_flip)(struct radeon_device *rdev, int crtc); | 1244 | struct { |
1202 | u32 (*page_flip)(struct radeon_device *rdev, int crtc, u64 crtc_base); | 1245 | void (*pre_page_flip)(struct radeon_device *rdev, int crtc); |
1203 | void (*post_page_flip)(struct radeon_device *rdev, int crtc); | 1246 | u32 (*page_flip)(struct radeon_device *rdev, int crtc, u64 crtc_base); |
1247 | void (*post_page_flip)(struct radeon_device *rdev, int crtc); | ||
1248 | } pflip; | ||
1204 | }; | 1249 | }; |
1205 | 1250 | ||
1206 | /* | 1251 | /* |
@@ -1340,6 +1385,37 @@ struct cayman_asic { | |||
1340 | struct r100_gpu_lockup lockup; | 1385 | struct r100_gpu_lockup lockup; |
1341 | }; | 1386 | }; |
1342 | 1387 | ||
1388 | struct si_asic { | ||
1389 | unsigned max_shader_engines; | ||
1390 | unsigned max_pipes_per_simd; | ||
1391 | unsigned max_tile_pipes; | ||
1392 | unsigned max_simds_per_se; | ||
1393 | unsigned max_backends_per_se; | ||
1394 | unsigned max_texture_channel_caches; | ||
1395 | unsigned max_gprs; | ||
1396 | unsigned max_gs_threads; | ||
1397 | unsigned max_hw_contexts; | ||
1398 | unsigned sc_prim_fifo_size_frontend; | ||
1399 | unsigned sc_prim_fifo_size_backend; | ||
1400 | unsigned sc_hiz_tile_fifo_size; | ||
1401 | unsigned sc_earlyz_tile_fifo_size; | ||
1402 | |||
1403 | unsigned num_shader_engines; | ||
1404 | unsigned num_tile_pipes; | ||
1405 | unsigned num_backends_per_se; | ||
1406 | unsigned backend_disable_mask_per_asic; | ||
1407 | unsigned backend_map; | ||
1408 | unsigned num_texture_channel_caches; | ||
1409 | unsigned mem_max_burst_length_bytes; | ||
1410 | unsigned mem_row_size_in_kb; | ||
1411 | unsigned shader_engine_tile_size; | ||
1412 | unsigned num_gpus; | ||
1413 | unsigned multi_gpu_tile_size; | ||
1414 | |||
1415 | unsigned tile_config; | ||
1416 | struct r100_gpu_lockup lockup; | ||
1417 | }; | ||
1418 | |||
1343 | union radeon_asic_config { | 1419 | union radeon_asic_config { |
1344 | struct r300_asic r300; | 1420 | struct r300_asic r300; |
1345 | struct r100_asic r100; | 1421 | struct r100_asic r100; |
@@ -1347,6 +1423,7 @@ union radeon_asic_config { | |||
1347 | struct rv770_asic rv770; | 1423 | struct rv770_asic rv770; |
1348 | struct evergreen_asic evergreen; | 1424 | struct evergreen_asic evergreen; |
1349 | struct cayman_asic cayman; | 1425 | struct cayman_asic cayman; |
1426 | struct si_asic si; | ||
1350 | }; | 1427 | }; |
1351 | 1428 | ||
1352 | /* | 1429 | /* |
@@ -1462,10 +1539,12 @@ struct radeon_device { | |||
1462 | const struct firmware *pfp_fw; /* r6/700 PFP firmware */ | 1539 | const struct firmware *pfp_fw; /* r6/700 PFP firmware */ |
1463 | const struct firmware *rlc_fw; /* r6/700 RLC firmware */ | 1540 | const struct firmware *rlc_fw; /* r6/700 RLC firmware */ |
1464 | const struct firmware *mc_fw; /* NI MC firmware */ | 1541 | const struct firmware *mc_fw; /* NI MC firmware */ |
1542 | const struct firmware *ce_fw; /* SI CE firmware */ | ||
1465 | struct r600_blit r600_blit; | 1543 | struct r600_blit r600_blit; |
1466 | struct r600_vram_scratch vram_scratch; | 1544 | struct r600_vram_scratch vram_scratch; |
1467 | int msi_enabled; /* msi enabled */ | 1545 | int msi_enabled; /* msi enabled */ |
1468 | struct r600_ih ih; /* r6/700 interrupt ring */ | 1546 | struct r600_ih ih; /* r6/700 interrupt ring */ |
1547 | struct si_rlc rlc; | ||
1469 | struct work_struct hotplug_work; | 1548 | struct work_struct hotplug_work; |
1470 | int num_crtc; /* number of crtcs */ | 1549 | int num_crtc; /* number of crtcs */ |
1471 | struct mutex dc_hw_i2c_mutex; /* display controller hw i2c mutex */ | 1550 | struct mutex dc_hw_i2c_mutex; /* display controller hw i2c mutex */ |
@@ -1491,8 +1570,6 @@ struct radeon_device { | |||
1491 | unsigned debugfs_count; | 1570 | unsigned debugfs_count; |
1492 | /* virtual memory */ | 1571 | /* virtual memory */ |
1493 | struct radeon_vm_manager vm_manager; | 1572 | struct radeon_vm_manager vm_manager; |
1494 | /* ring used for bo copies */ | ||
1495 | u32 copy_ring; | ||
1496 | }; | 1573 | }; |
1497 | 1574 | ||
1498 | int radeon_device_init(struct radeon_device *rdev, | 1575 | int radeon_device_init(struct radeon_device *rdev, |
@@ -1611,6 +1688,9 @@ void r100_pll_errata_after_index(struct radeon_device *rdev); | |||
1611 | #define ASIC_IS_DCE41(rdev) ((rdev->family >= CHIP_PALM) && \ | 1688 | #define ASIC_IS_DCE41(rdev) ((rdev->family >= CHIP_PALM) && \ |
1612 | (rdev->flags & RADEON_IS_IGP)) | 1689 | (rdev->flags & RADEON_IS_IGP)) |
1613 | #define ASIC_IS_DCE5(rdev) ((rdev->family >= CHIP_BARTS)) | 1690 | #define ASIC_IS_DCE5(rdev) ((rdev->family >= CHIP_BARTS)) |
1691 | #define ASIC_IS_DCE6(rdev) ((rdev->family >= CHIP_ARUBA)) | ||
1692 | #define ASIC_IS_DCE61(rdev) ((rdev->family >= CHIP_ARUBA) && \ | ||
1693 | (rdev->flags & RADEON_IS_IGP)) | ||
1614 | 1694 | ||
1615 | /* | 1695 | /* |
1616 | * BIOS helpers. | 1696 | * BIOS helpers. |
@@ -1648,47 +1728,53 @@ void radeon_ring_write(struct radeon_ring *ring, uint32_t v); | |||
1648 | #define radeon_fini(rdev) (rdev)->asic->fini((rdev)) | 1728 | #define radeon_fini(rdev) (rdev)->asic->fini((rdev)) |
1649 | #define radeon_resume(rdev) (rdev)->asic->resume((rdev)) | 1729 | #define radeon_resume(rdev) (rdev)->asic->resume((rdev)) |
1650 | #define radeon_suspend(rdev) (rdev)->asic->suspend((rdev)) | 1730 | #define radeon_suspend(rdev) (rdev)->asic->suspend((rdev)) |
1651 | #define radeon_cs_parse(p) rdev->asic->cs_parse((p)) | 1731 | #define radeon_cs_parse(rdev, r, p) (rdev)->asic->ring[(r)].cs_parse((p)) |
1652 | #define radeon_vga_set_state(rdev, state) (rdev)->asic->vga_set_state((rdev), (state)) | 1732 | #define radeon_vga_set_state(rdev, state) (rdev)->asic->vga_set_state((rdev), (state)) |
1653 | #define radeon_gpu_is_lockup(rdev, cp) (rdev)->asic->gpu_is_lockup((rdev), (cp)) | 1733 | #define radeon_gpu_is_lockup(rdev, cp) (rdev)->asic->gpu_is_lockup((rdev), (cp)) |
1654 | #define radeon_asic_reset(rdev) (rdev)->asic->asic_reset((rdev)) | 1734 | #define radeon_asic_reset(rdev) (rdev)->asic->asic_reset((rdev)) |
1655 | #define radeon_gart_tlb_flush(rdev) (rdev)->asic->gart_tlb_flush((rdev)) | 1735 | #define radeon_gart_tlb_flush(rdev) (rdev)->asic->gart.tlb_flush((rdev)) |
1656 | #define radeon_gart_set_page(rdev, i, p) (rdev)->asic->gart_set_page((rdev), (i), (p)) | 1736 | #define radeon_gart_set_page(rdev, i, p) (rdev)->asic->gart.set_page((rdev), (i), (p)) |
1657 | #define radeon_ring_start(rdev) (rdev)->asic->ring_start((rdev)) | 1737 | #define radeon_ring_start(rdev, r, cp) (rdev)->asic->ring[(r)].ring_start((rdev), (cp)) |
1658 | #define radeon_ring_test(rdev, cp) (rdev)->asic->ring_test((rdev), (cp)) | 1738 | #define radeon_ring_test(rdev, r, cp) (rdev)->asic->ring[(r)].ring_test((rdev), (cp)) |
1739 | #define radeon_ib_test(rdev, r, cp) (rdev)->asic->ring[(r)].ib_test((rdev), (cp)) | ||
1659 | #define radeon_ring_ib_execute(rdev, r, ib) (rdev)->asic->ring[(r)].ib_execute((rdev), (ib)) | 1740 | #define radeon_ring_ib_execute(rdev, r, ib) (rdev)->asic->ring[(r)].ib_execute((rdev), (ib)) |
1660 | #define radeon_ring_ib_parse(rdev, r, ib) (rdev)->asic->ring[(r)].ib_parse((rdev), (ib)) | 1741 | #define radeon_ring_ib_parse(rdev, r, ib) (rdev)->asic->ring[(r)].ib_parse((rdev), (ib)) |
1661 | #define radeon_irq_set(rdev) (rdev)->asic->irq_set((rdev)) | 1742 | #define radeon_irq_set(rdev) (rdev)->asic->irq.set((rdev)) |
1662 | #define radeon_irq_process(rdev) (rdev)->asic->irq_process((rdev)) | 1743 | #define radeon_irq_process(rdev) (rdev)->asic->irq.process((rdev)) |
1663 | #define radeon_get_vblank_counter(rdev, crtc) (rdev)->asic->get_vblank_counter((rdev), (crtc)) | 1744 | #define radeon_get_vblank_counter(rdev, crtc) (rdev)->asic->display.get_vblank_counter((rdev), (crtc)) |
1664 | #define radeon_fence_ring_emit(rdev, r, fence) (rdev)->asic->ring[(r)].emit_fence((rdev), (fence)) | 1745 | #define radeon_fence_ring_emit(rdev, r, fence) (rdev)->asic->ring[(r)].emit_fence((rdev), (fence)) |
1665 | #define radeon_semaphore_ring_emit(rdev, r, cp, semaphore, emit_wait) (rdev)->asic->ring[(r)].emit_semaphore((rdev), (cp), (semaphore), (emit_wait)) | 1746 | #define radeon_semaphore_ring_emit(rdev, r, cp, semaphore, emit_wait) (rdev)->asic->ring[(r)].emit_semaphore((rdev), (cp), (semaphore), (emit_wait)) |
1666 | #define radeon_copy_blit(rdev, s, d, np, f) (rdev)->asic->copy_blit((rdev), (s), (d), (np), (f)) | 1747 | #define radeon_copy_blit(rdev, s, d, np, f) (rdev)->asic->copy.blit((rdev), (s), (d), (np), (f)) |
1667 | #define radeon_copy_dma(rdev, s, d, np, f) (rdev)->asic->copy_dma((rdev), (s), (d), (np), (f)) | 1748 | #define radeon_copy_dma(rdev, s, d, np, f) (rdev)->asic->copy.dma((rdev), (s), (d), (np), (f)) |
1668 | #define radeon_copy(rdev, s, d, np, f) (rdev)->asic->copy((rdev), (s), (d), (np), (f)) | 1749 | #define radeon_copy(rdev, s, d, np, f) (rdev)->asic->copy.copy((rdev), (s), (d), (np), (f)) |
1669 | #define radeon_get_engine_clock(rdev) (rdev)->asic->get_engine_clock((rdev)) | 1750 | #define radeon_copy_blit_ring_index(rdev) (rdev)->asic->copy.blit_ring_index |
1670 | #define radeon_set_engine_clock(rdev, e) (rdev)->asic->set_engine_clock((rdev), (e)) | 1751 | #define radeon_copy_dma_ring_index(rdev) (rdev)->asic->copy.dma_ring_index |
1671 | #define radeon_get_memory_clock(rdev) (rdev)->asic->get_memory_clock((rdev)) | 1752 | #define radeon_copy_ring_index(rdev) (rdev)->asic->copy.copy_ring_index |
1672 | #define radeon_set_memory_clock(rdev, e) (rdev)->asic->set_memory_clock((rdev), (e)) | 1753 | #define radeon_get_engine_clock(rdev) (rdev)->asic->pm.get_engine_clock((rdev)) |
1673 | #define radeon_get_pcie_lanes(rdev) (rdev)->asic->get_pcie_lanes((rdev)) | 1754 | #define radeon_set_engine_clock(rdev, e) (rdev)->asic->pm.set_engine_clock((rdev), (e)) |
1674 | #define radeon_set_pcie_lanes(rdev, l) (rdev)->asic->set_pcie_lanes((rdev), (l)) | 1755 | #define radeon_get_memory_clock(rdev) (rdev)->asic->pm.get_memory_clock((rdev)) |
1675 | #define radeon_set_clock_gating(rdev, e) (rdev)->asic->set_clock_gating((rdev), (e)) | 1756 | #define radeon_set_memory_clock(rdev, e) (rdev)->asic->pm.set_memory_clock((rdev), (e)) |
1676 | #define radeon_set_surface_reg(rdev, r, f, p, o, s) ((rdev)->asic->set_surface_reg((rdev), (r), (f), (p), (o), (s))) | 1757 | #define radeon_get_pcie_lanes(rdev) (rdev)->asic->pm.get_pcie_lanes((rdev)) |
1677 | #define radeon_clear_surface_reg(rdev, r) ((rdev)->asic->clear_surface_reg((rdev), (r))) | 1758 | #define radeon_set_pcie_lanes(rdev, l) (rdev)->asic->pm.set_pcie_lanes((rdev), (l)) |
1678 | #define radeon_bandwidth_update(rdev) (rdev)->asic->bandwidth_update((rdev)) | 1759 | #define radeon_set_clock_gating(rdev, e) (rdev)->asic->pm.set_clock_gating((rdev), (e)) |
1679 | #define radeon_hpd_init(rdev) (rdev)->asic->hpd_init((rdev)) | 1760 | #define radeon_set_surface_reg(rdev, r, f, p, o, s) ((rdev)->asic->surface.set_reg((rdev), (r), (f), (p), (o), (s))) |
1680 | #define radeon_hpd_fini(rdev) (rdev)->asic->hpd_fini((rdev)) | 1761 | #define radeon_clear_surface_reg(rdev, r) ((rdev)->asic->surface.clear_reg((rdev), (r))) |
1681 | #define radeon_hpd_sense(rdev, hpd) (rdev)->asic->hpd_sense((rdev), (hpd)) | 1762 | #define radeon_bandwidth_update(rdev) (rdev)->asic->display.bandwidth_update((rdev)) |
1682 | #define radeon_hpd_set_polarity(rdev, hpd) (rdev)->asic->hpd_set_polarity((rdev), (hpd)) | 1763 | #define radeon_hpd_init(rdev) (rdev)->asic->hpd.init((rdev)) |
1764 | #define radeon_hpd_fini(rdev) (rdev)->asic->hpd.fini((rdev)) | ||
1765 | #define radeon_hpd_sense(rdev, h) (rdev)->asic->hpd.sense((rdev), (h)) | ||
1766 | #define radeon_hpd_set_polarity(rdev, h) (rdev)->asic->hpd.set_polarity((rdev), (h)) | ||
1683 | #define radeon_gui_idle(rdev) (rdev)->asic->gui_idle((rdev)) | 1767 | #define radeon_gui_idle(rdev) (rdev)->asic->gui_idle((rdev)) |
1684 | #define radeon_pm_misc(rdev) (rdev)->asic->pm_misc((rdev)) | 1768 | #define radeon_pm_misc(rdev) (rdev)->asic->pm.misc((rdev)) |
1685 | #define radeon_pm_prepare(rdev) (rdev)->asic->pm_prepare((rdev)) | 1769 | #define radeon_pm_prepare(rdev) (rdev)->asic->pm.prepare((rdev)) |
1686 | #define radeon_pm_finish(rdev) (rdev)->asic->pm_finish((rdev)) | 1770 | #define radeon_pm_finish(rdev) (rdev)->asic->pm.finish((rdev)) |
1687 | #define radeon_pm_init_profile(rdev) (rdev)->asic->pm_init_profile((rdev)) | 1771 | #define radeon_pm_init_profile(rdev) (rdev)->asic->pm.init_profile((rdev)) |
1688 | #define radeon_pm_get_dynpm_state(rdev) (rdev)->asic->pm_get_dynpm_state((rdev)) | 1772 | #define radeon_pm_get_dynpm_state(rdev) (rdev)->asic->pm.get_dynpm_state((rdev)) |
1689 | #define radeon_pre_page_flip(rdev, crtc) rdev->asic->pre_page_flip((rdev), (crtc)) | 1773 | #define radeon_pre_page_flip(rdev, crtc) rdev->asic->pflip.pre_page_flip((rdev), (crtc)) |
1690 | #define radeon_page_flip(rdev, crtc, base) rdev->asic->page_flip((rdev), (crtc), (base)) | 1774 | #define radeon_page_flip(rdev, crtc, base) rdev->asic->pflip.page_flip((rdev), (crtc), (base)) |
1691 | #define radeon_post_page_flip(rdev, crtc) rdev->asic->post_page_flip((rdev), (crtc)) | 1775 | #define radeon_post_page_flip(rdev, crtc) rdev->asic->pflip.post_page_flip((rdev), (crtc)) |
1776 | #define radeon_wait_for_vblank(rdev, crtc) rdev->asic->display.wait_for_vblank((rdev), (crtc)) | ||
1777 | #define radeon_mc_wait_for_idle(rdev) rdev->asic->mc_wait_for_idle((rdev)) | ||
1692 | 1778 | ||
1693 | /* Common functions */ | 1779 | /* Common functions */ |
1694 | /* AGP */ | 1780 | /* AGP */ |
@@ -1750,6 +1836,16 @@ int r600_vram_scratch_init(struct radeon_device *rdev); | |||
1750 | void r600_vram_scratch_fini(struct radeon_device *rdev); | 1836 | void r600_vram_scratch_fini(struct radeon_device *rdev); |
1751 | 1837 | ||
1752 | /* | 1838 | /* |
1839 | * r600 cs checking helper | ||
1840 | */ | ||
1841 | unsigned r600_mip_minify(unsigned size, unsigned level); | ||
1842 | bool r600_fmt_is_valid_color(u32 format); | ||
1843 | bool r600_fmt_is_valid_texture(u32 format, enum radeon_family family); | ||
1844 | int r600_fmt_get_blocksize(u32 format); | ||
1845 | int r600_fmt_get_nblocksx(u32 format, u32 w); | ||
1846 | int r600_fmt_get_nblocksy(u32 format, u32 h); | ||
1847 | |||
1848 | /* | ||
1753 | * r600 functions used by radeon_encoder.c | 1849 | * r600 functions used by radeon_encoder.c |
1754 | */ | 1850 | */ |
1755 | extern void r600_hdmi_enable(struct drm_encoder *encoder); | 1851 | extern void r600_hdmi_enable(struct drm_encoder *encoder); |