diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon.h')
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon.h | 87 |
1 files changed, 82 insertions, 5 deletions
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index d61f2fc61df5..b1d945b8ed6c 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h | |||
| @@ -64,6 +64,7 @@ extern int radeon_agpmode; | |||
| 64 | extern int radeon_vram_limit; | 64 | extern int radeon_vram_limit; |
| 65 | extern int radeon_gart_size; | 65 | extern int radeon_gart_size; |
| 66 | extern int radeon_benchmarking; | 66 | extern int radeon_benchmarking; |
| 67 | extern int radeon_testing; | ||
| 67 | extern int radeon_connector_table; | 68 | extern int radeon_connector_table; |
| 68 | 69 | ||
| 69 | /* | 70 | /* |
| @@ -113,6 +114,7 @@ enum radeon_family { | |||
| 113 | CHIP_RV770, | 114 | CHIP_RV770, |
| 114 | CHIP_RV730, | 115 | CHIP_RV730, |
| 115 | CHIP_RV710, | 116 | CHIP_RV710, |
| 117 | CHIP_RS880, | ||
| 116 | CHIP_LAST, | 118 | CHIP_LAST, |
| 117 | }; | 119 | }; |
| 118 | 120 | ||
| @@ -201,6 +203,14 @@ int radeon_fence_wait_last(struct radeon_device *rdev); | |||
| 201 | struct radeon_fence *radeon_fence_ref(struct radeon_fence *fence); | 203 | struct radeon_fence *radeon_fence_ref(struct radeon_fence *fence); |
| 202 | void radeon_fence_unref(struct radeon_fence **fence); | 204 | void radeon_fence_unref(struct radeon_fence **fence); |
| 203 | 205 | ||
| 206 | /* | ||
| 207 | * Tiling registers | ||
| 208 | */ | ||
| 209 | struct radeon_surface_reg { | ||
| 210 | struct radeon_object *robj; | ||
| 211 | }; | ||
| 212 | |||
| 213 | #define RADEON_GEM_MAX_SURFACES 8 | ||
| 204 | 214 | ||
| 205 | /* | 215 | /* |
| 206 | * Radeon buffer. | 216 | * Radeon buffer. |
| @@ -213,6 +223,7 @@ struct radeon_object_list { | |||
| 213 | uint64_t gpu_offset; | 223 | uint64_t gpu_offset; |
| 214 | unsigned rdomain; | 224 | unsigned rdomain; |
| 215 | unsigned wdomain; | 225 | unsigned wdomain; |
| 226 | uint32_t tiling_flags; | ||
| 216 | }; | 227 | }; |
| 217 | 228 | ||
| 218 | int radeon_object_init(struct radeon_device *rdev); | 229 | int radeon_object_init(struct radeon_device *rdev); |
| @@ -242,8 +253,15 @@ void radeon_object_list_clean(struct list_head *head); | |||
| 242 | int radeon_object_fbdev_mmap(struct radeon_object *robj, | 253 | int radeon_object_fbdev_mmap(struct radeon_object *robj, |
| 243 | struct vm_area_struct *vma); | 254 | struct vm_area_struct *vma); |
| 244 | unsigned long radeon_object_size(struct radeon_object *robj); | 255 | unsigned long radeon_object_size(struct radeon_object *robj); |
| 245 | 256 | void radeon_object_clear_surface_reg(struct radeon_object *robj); | |
| 246 | 257 | int radeon_object_check_tiling(struct radeon_object *robj, bool has_moved, | |
| 258 | bool force_drop); | ||
| 259 | void radeon_object_set_tiling_flags(struct radeon_object *robj, | ||
| 260 | uint32_t tiling_flags, uint32_t pitch); | ||
| 261 | void radeon_object_get_tiling_flags(struct radeon_object *robj, uint32_t *tiling_flags, uint32_t *pitch); | ||
| 262 | void radeon_bo_move_notify(struct ttm_buffer_object *bo, | ||
| 263 | struct ttm_mem_reg *mem); | ||
| 264 | void radeon_bo_fault_reserve_notify(struct ttm_buffer_object *bo); | ||
| 247 | /* | 265 | /* |
| 248 | * GEM objects. | 266 | * GEM objects. |
| 249 | */ | 267 | */ |
| @@ -315,8 +333,11 @@ struct radeon_mc { | |||
| 315 | unsigned gtt_location; | 333 | unsigned gtt_location; |
| 316 | unsigned gtt_size; | 334 | unsigned gtt_size; |
| 317 | unsigned vram_location; | 335 | unsigned vram_location; |
| 318 | unsigned vram_size; | 336 | /* for some chips with <= 32MB we need to lie |
| 337 | * about vram size near mc fb location */ | ||
| 338 | unsigned mc_vram_size; | ||
| 319 | unsigned vram_width; | 339 | unsigned vram_width; |
| 340 | unsigned real_vram_size; | ||
| 320 | int vram_mtrr; | 341 | int vram_mtrr; |
| 321 | bool vram_is_ddr; | 342 | bool vram_is_ddr; |
| 322 | }; | 343 | }; |
| @@ -474,6 +495,39 @@ struct radeon_wb { | |||
| 474 | uint64_t gpu_addr; | 495 | uint64_t gpu_addr; |
| 475 | }; | 496 | }; |
| 476 | 497 | ||
| 498 | /** | ||
| 499 | * struct radeon_pm - power management datas | ||
| 500 | * @max_bandwidth: maximum bandwidth the gpu has (MByte/s) | ||
| 501 | * @igp_sideport_mclk: sideport memory clock Mhz (rs690,rs740,rs780,rs880) | ||
| 502 | * @igp_system_mclk: system clock Mhz (rs690,rs740,rs780,rs880) | ||
| 503 | * @igp_ht_link_clk: ht link clock Mhz (rs690,rs740,rs780,rs880) | ||
| 504 | * @igp_ht_link_width: ht link width in bits (rs690,rs740,rs780,rs880) | ||
| 505 | * @k8_bandwidth: k8 bandwidth the gpu has (MByte/s) (IGP) | ||
| 506 | * @sideport_bandwidth: sideport bandwidth the gpu has (MByte/s) (IGP) | ||
| 507 | * @ht_bandwidth: ht bandwidth the gpu has (MByte/s) (IGP) | ||
| 508 | * @core_bandwidth: core GPU bandwidth the gpu has (MByte/s) (IGP) | ||
| 509 | * @sclk: GPU clock Mhz (core bandwith depends of this clock) | ||
| 510 | * @needed_bandwidth: current bandwidth needs | ||
| 511 | * | ||
| 512 | * It keeps track of various data needed to take powermanagement decision. | ||
| 513 | * Bandwith need is used to determine minimun clock of the GPU and memory. | ||
| 514 | * Equation between gpu/memory clock and available bandwidth is hw dependent | ||
| 515 | * (type of memory, bus size, efficiency, ...) | ||
| 516 | */ | ||
| 517 | struct radeon_pm { | ||
| 518 | fixed20_12 max_bandwidth; | ||
| 519 | fixed20_12 igp_sideport_mclk; | ||
| 520 | fixed20_12 igp_system_mclk; | ||
| 521 | fixed20_12 igp_ht_link_clk; | ||
| 522 | fixed20_12 igp_ht_link_width; | ||
| 523 | fixed20_12 k8_bandwidth; | ||
| 524 | fixed20_12 sideport_bandwidth; | ||
| 525 | fixed20_12 ht_bandwidth; | ||
| 526 | fixed20_12 core_bandwidth; | ||
| 527 | fixed20_12 sclk; | ||
| 528 | fixed20_12 needed_bandwidth; | ||
| 529 | }; | ||
| 530 | |||
| 477 | 531 | ||
| 478 | /* | 532 | /* |
| 479 | * Benchmarking | 533 | * Benchmarking |
| @@ -482,6 +536,12 @@ void radeon_benchmark(struct radeon_device *rdev); | |||
| 482 | 536 | ||
| 483 | 537 | ||
| 484 | /* | 538 | /* |
| 539 | * Testing | ||
| 540 | */ | ||
| 541 | void radeon_test_moves(struct radeon_device *rdev); | ||
| 542 | |||
| 543 | |||
| 544 | /* | ||
| 485 | * Debugfs | 545 | * Debugfs |
| 486 | */ | 546 | */ |
| 487 | int radeon_debugfs_add_files(struct radeon_device *rdev, | 547 | int radeon_debugfs_add_files(struct radeon_device *rdev, |
| @@ -535,6 +595,11 @@ struct radeon_asic { | |||
| 535 | void (*set_memory_clock)(struct radeon_device *rdev, uint32_t mem_clock); | 595 | void (*set_memory_clock)(struct radeon_device *rdev, uint32_t mem_clock); |
| 536 | void (*set_pcie_lanes)(struct radeon_device *rdev, int lanes); | 596 | void (*set_pcie_lanes)(struct radeon_device *rdev, int lanes); |
| 537 | void (*set_clock_gating)(struct radeon_device *rdev, int enable); | 597 | void (*set_clock_gating)(struct radeon_device *rdev, int enable); |
| 598 | int (*set_surface_reg)(struct radeon_device *rdev, int reg, | ||
| 599 | uint32_t tiling_flags, uint32_t pitch, | ||
| 600 | uint32_t offset, uint32_t obj_size); | ||
| 601 | int (*clear_surface_reg)(struct radeon_device *rdev, int reg); | ||
| 602 | void (*bandwidth_update)(struct radeon_device *rdev); | ||
| 538 | }; | 603 | }; |
| 539 | 604 | ||
| 540 | union radeon_asic_config { | 605 | union radeon_asic_config { |
| @@ -566,6 +631,10 @@ int radeon_gem_busy_ioctl(struct drm_device *dev, void *data, | |||
| 566 | int radeon_gem_wait_idle_ioctl(struct drm_device *dev, void *data, | 631 | int radeon_gem_wait_idle_ioctl(struct drm_device *dev, void *data, |
| 567 | struct drm_file *filp); | 632 | struct drm_file *filp); |
| 568 | int radeon_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp); | 633 | int radeon_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp); |
| 634 | int radeon_gem_set_tiling_ioctl(struct drm_device *dev, void *data, | ||
| 635 | struct drm_file *filp); | ||
| 636 | int radeon_gem_get_tiling_ioctl(struct drm_device *dev, void *data, | ||
| 637 | struct drm_file *filp); | ||
| 569 | 638 | ||
| 570 | 639 | ||
| 571 | /* | 640 | /* |
| @@ -594,8 +663,8 @@ struct radeon_device { | |||
| 594 | struct radeon_object *fbdev_robj; | 663 | struct radeon_object *fbdev_robj; |
| 595 | struct radeon_framebuffer *fbdev_rfb; | 664 | struct radeon_framebuffer *fbdev_rfb; |
| 596 | /* Register mmio */ | 665 | /* Register mmio */ |
| 597 | unsigned long rmmio_base; | 666 | resource_size_t rmmio_base; |
| 598 | unsigned long rmmio_size; | 667 | resource_size_t rmmio_size; |
| 599 | void *rmmio; | 668 | void *rmmio; |
| 600 | radeon_rreg_t mm_rreg; | 669 | radeon_rreg_t mm_rreg; |
| 601 | radeon_wreg_t mm_wreg; | 670 | radeon_wreg_t mm_wreg; |
| @@ -619,11 +688,14 @@ struct radeon_device { | |||
| 619 | struct radeon_irq irq; | 688 | struct radeon_irq irq; |
| 620 | struct radeon_asic *asic; | 689 | struct radeon_asic *asic; |
| 621 | struct radeon_gem gem; | 690 | struct radeon_gem gem; |
| 691 | struct radeon_pm pm; | ||
| 622 | struct mutex cs_mutex; | 692 | struct mutex cs_mutex; |
| 623 | struct radeon_wb wb; | 693 | struct radeon_wb wb; |
| 624 | bool gpu_lockup; | 694 | bool gpu_lockup; |
| 625 | bool shutdown; | 695 | bool shutdown; |
| 626 | bool suspend; | 696 | bool suspend; |
| 697 | bool need_dma32; | ||
| 698 | struct radeon_surface_reg surface_regs[RADEON_GEM_MAX_SURFACES]; | ||
| 627 | }; | 699 | }; |
| 628 | 700 | ||
| 629 | int radeon_device_init(struct radeon_device *rdev, | 701 | int radeon_device_init(struct radeon_device *rdev, |
| @@ -670,6 +742,8 @@ void r100_pll_errata_after_index(struct radeon_device *rdev); | |||
| 670 | /* | 742 | /* |
| 671 | * ASICs helpers. | 743 | * ASICs helpers. |
| 672 | */ | 744 | */ |
| 745 | #define ASIC_IS_RN50(rdev) ((rdev->pdev->device == 0x515e) || \ | ||
| 746 | (rdev->pdev->device == 0x5969)) | ||
| 673 | #define ASIC_IS_RV100(rdev) ((rdev->family == CHIP_RV100) || \ | 747 | #define ASIC_IS_RV100(rdev) ((rdev->family == CHIP_RV100) || \ |
| 674 | (rdev->family == CHIP_RV200) || \ | 748 | (rdev->family == CHIP_RV200) || \ |
| 675 | (rdev->family == CHIP_RS100) || \ | 749 | (rdev->family == CHIP_RS100) || \ |
| @@ -796,5 +870,8 @@ static inline void radeon_ring_write(struct radeon_device *rdev, uint32_t v) | |||
| 796 | #define radeon_set_memory_clock(rdev, e) (rdev)->asic->set_engine_clock((rdev), (e)) | 870 | #define radeon_set_memory_clock(rdev, e) (rdev)->asic->set_engine_clock((rdev), (e)) |
| 797 | #define radeon_set_pcie_lanes(rdev, l) (rdev)->asic->set_pcie_lanes((rdev), (l)) | 871 | #define radeon_set_pcie_lanes(rdev, l) (rdev)->asic->set_pcie_lanes((rdev), (l)) |
| 798 | #define radeon_set_clock_gating(rdev, e) (rdev)->asic->set_clock_gating((rdev), (e)) | 872 | #define radeon_set_clock_gating(rdev, e) (rdev)->asic->set_clock_gating((rdev), (e)) |
| 873 | #define radeon_set_surface_reg(rdev, r, f, p, o, s) ((rdev)->asic->set_surface_reg((rdev), (r), (f), (p), (o), (s))) | ||
| 874 | #define radeon_clear_surface_reg(rdev, r) ((rdev)->asic->clear_surface_reg((rdev), (r))) | ||
| 875 | #define radeon_bandwidth_update(rdev) (rdev)->asic->bandwidth_update((rdev)) | ||
| 799 | 876 | ||
| 800 | #endif | 877 | #endif |
