Rev 1128 | Rev 1221 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1128 | Rev 1179 | ||
---|---|---|---|
Line 43... | Line 43... | ||
43 | * - Unmappabled vram ? |
43 | * - Unmappabled vram ? |
44 | * - TESTING, TESTING, TESTING |
44 | * - TESTING, TESTING, TESTING |
45 | */ |
45 | */ |
Line 46... | Line 46... | ||
46 | 46 | ||
47 | #include |
47 | #include |
Line 48... | Line 48... | ||
48 | #include |
48 | #include |
Line 49... | Line 49... | ||
49 | 49 | ||
50 | #include |
50 | #include |
- | 51 | ||
- | 52 | #include |
|
51 | 53 | #include "drm_edid.h" |
|
52 | #include |
54 | |
53 | #include "drm_edid.h" |
- | |
Line 54... | Line 55... | ||
54 | #include "radeon_mode.h" |
55 | #include "radeon_family.h" |
Line -... | Line 56... | ||
- | 56 | #include "radeon_mode.h" |
|
- | 57 | #include "radeon_reg.h" |
|
- | 58 | ||
- | 59 | #include |
|
55 | #include "radeon_reg.h" |
60 | |
56 | #include "r300.h" |
61 | /* |
57 | 62 | * Modules parameters. |
|
58 | #include |
63 | */ |
59 | 64 | extern int radeon_no_wb; |
|
60 | extern int radeon_modeset; |
65 | extern int radeon_modeset; |
61 | extern int radeon_dynclks; |
66 | extern int radeon_dynclks; |
- | 67 | extern int radeon_r4xx_atom; |
|
62 | extern int radeon_r4xx_atom; |
68 | extern int radeon_agpmode; |
- | 69 | extern int radeon_vram_limit; |
|
- | 70 | extern int radeon_gart_size; |
|
- | 71 | extern int radeon_benchmarking; |
|
- | 72 | extern int radeon_testing; |
|
- | 73 | extern int radeon_connector_table; |
|
- | 74 | extern int radeon_tv; |
|
- | 75 | ||
- | 76 | ||
- | 77 | static inline uint8_t __raw_readb(const volatile void __iomem *addr) |
|
- | 78 | { |
|
- | 79 | return *(const volatile uint8_t __force *) addr; |
|
- | 80 | } |
|
- | 81 | ||
- | 82 | static inline uint16_t __raw_readw(const volatile void __iomem *addr) |
|
- | 83 | { |
|
- | 84 | return *(const volatile uint16_t __force *) addr; |
|
- | 85 | } |
|
- | 86 | ||
- | 87 | static inline uint32_t __raw_readl(const volatile void __iomem *addr) |
|
- | 88 | { |
|
- | 89 | return *(const volatile uint32_t __force *) addr; |
|
- | 90 | } |
|
- | 91 | ||
- | 92 | #define readb __raw_readb |
|
- | 93 | #define readw __raw_readw |
|
- | 94 | #define readl __raw_readl |
|
- | 95 | ||
- | 96 | ||
- | 97 | ||
- | 98 | static inline void __raw_writeb(uint8_t b, volatile void __iomem *addr) |
|
- | 99 | { |
|
- | 100 | *(volatile uint8_t __force *) addr = b; |
|
- | 101 | } |
|
- | 102 | ||
- | 103 | static inline void __raw_writew(uint16_t b, volatile void __iomem *addr) |
|
- | 104 | { |
|
- | 105 | *(volatile uint16_t __force *) addr = b; |
|
- | 106 | } |
|
- | 107 | ||
- | 108 | static inline void __raw_writel(uint32_t b, volatile void __iomem *addr) |
|
- | 109 | { |
|
- | 110 | *(volatile uint32_t __force *) addr = b; |
|
- | 111 | } |
|
- | 112 | ||
- | 113 | static inline void __raw_writeq(__u64 b, volatile void __iomem *addr) |
|
- | 114 | { |
|
- | 115 | *(volatile __u64 *)addr = b; |
|
- | 116 | } |
|
- | 117 | ||
- | 118 | #define writeb __raw_writeb |
|
- | 119 | #define writew __raw_writew |
|
- | 120 | #define writel __raw_writel |
|
- | 121 | #define writeq __raw_writeq |
|
Line 63... | Line 122... | ||
63 | extern int radeon_agpmode; |
122 | |
64 | extern int radeon_vram_limit; |
123 | //#define writeb(b,addr) *(volatile uint8_t* ) addr = (uint8_t)b |
65 | extern int radeon_gart_size; |
124 | //#define writew(b,addr) *(volatile uint16_t*) addr = (uint16_t)b |
66 | extern int radeon_benchmarking; |
125 | //#define writel(b,addr) *(volatile uint32_t*) addr = (uint32_t)b |
67 | extern int radeon_connector_table; |
126 | |
68 | 127 | ||
69 | /* |
128 | /* |
70 | * Copy from radeon_drv.h so we don't have to include both and have conflicting |
129 | * Copy from radeon_drv.h so we don't have to include both and have conflicting |
71 | * symbol; |
- | |
72 | */ |
- | |
73 | #define RADEON_MAX_USEC_TIMEOUT 100000 /* 100 ms */ |
- | |
74 | #define RADEON_IB_POOL_SIZE 16 |
- | |
75 | #define RADEON_DEBUGFS_MAX_NUM_FILES 32 |
- | |
76 | #define RADEONFB_CONN_LIMIT 4 |
- | |
77 | - | ||
78 | enum radeon_family { |
- | |
79 | CHIP_R100, |
- | |
80 | CHIP_RV100, |
- | |
81 | CHIP_RS100, |
- | |
82 | CHIP_RV200, |
- | |
83 | CHIP_RS200, |
- | |
84 | CHIP_R200, |
- | |
85 | CHIP_RV250, |
- | |
86 | CHIP_RS300, |
- | |
87 | CHIP_RV280, |
- | |
88 | CHIP_R300, |
- | |
89 | CHIP_R350, |
- | |
90 | CHIP_RV350, |
- | |
91 | CHIP_RV380, |
- | |
92 | CHIP_R420, |
- | |
93 | CHIP_R423, |
- | |
94 | CHIP_RV410, |
- | |
95 | CHIP_RS400, |
- | |
96 | CHIP_RS480, |
- | |
97 | CHIP_RS600, |
- | |
98 | CHIP_RS690, |
- | |
99 | CHIP_RS740, |
- | |
100 | CHIP_RV515, |
- | |
101 | CHIP_R520, |
- | |
102 | CHIP_RV530, |
- | |
103 | CHIP_RV560, |
- | |
104 | CHIP_RV570, |
- | |
105 | CHIP_R580, |
- | |
106 | CHIP_R600, |
- | |
107 | CHIP_RV610, |
- | |
108 | CHIP_RV630, |
- | |
109 | CHIP_RV620, |
- | |
110 | CHIP_RV635, |
- | |
111 | CHIP_RV670, |
- | |
112 | CHIP_RS780, |
- | |
113 | CHIP_RV770, |
- | |
114 | CHIP_RV730, |
- | |
115 | CHIP_RV710, |
- | |
116 | CHIP_LAST, |
- | |
117 | }; |
- | |
118 | - | ||
119 | enum radeon_chip_flags { |
- | |
120 | RADEON_FAMILY_MASK = 0x0000ffffUL, |
- | |
121 | RADEON_FLAGS_MASK = 0xffff0000UL, |
- | |
122 | RADEON_IS_MOBILITY = 0x00010000UL, |
- | |
123 | RADEON_IS_IGP = 0x00020000UL, |
130 | * symbol; |
124 | RADEON_SINGLE_CRTC = 0x00040000UL, |
- | |
125 | RADEON_IS_AGP = 0x00080000UL, |
- | |
126 | RADEON_HAS_HIERZ = 0x00100000UL, |
- | |
Line 127... | Line 131... | ||
127 | RADEON_IS_PCIE = 0x00200000UL, |
131 | */ |
128 | RADEON_NEW_MEMMAP = 0x00400000UL, |
132 | #define RADEON_MAX_USEC_TIMEOUT 100000 /* 100 ms */ |
129 | RADEON_IS_PCI = 0x00800000UL, |
133 | #define RADEON_IB_POOL_SIZE 16 |
130 | RADEON_IS_IGPGART = 0x01000000UL, |
134 | #define RADEON_DEBUGFS_MAX_NUM_FILES 32 |
Line 147... | Line 151... | ||
147 | /* |
151 | /* |
148 | * BIOS. |
152 | * BIOS. |
149 | */ |
153 | */ |
150 | bool radeon_get_bios(struct radeon_device *rdev); |
154 | bool radeon_get_bios(struct radeon_device *rdev); |
Line -... | Line 155... | ||
- | 155 | ||
151 | 156 | ||
152 | /* |
157 | /* |
153 | * Clocks |
158 | * Dummy page |
- | 159 | */ |
|
- | 160 | struct radeon_dummy_page { |
|
- | 161 | struct page *page; |
|
- | 162 | dma_addr_t addr; |
|
- | 163 | }; |
|
- | 164 | int radeon_dummy_page_init(struct radeon_device *rdev); |
|
- | 165 | void radeon_dummy_page_fini(struct radeon_device *rdev); |
|
Line -... | Line 166... | ||
- | 166 | ||
- | 167 | ||
- | 168 | /* |
|
154 | */ |
169 | * Clocks |
155 | 170 | */ |
|
156 | struct radeon_clock { |
171 | struct radeon_clock { |
157 | struct radeon_pll p1pll; |
172 | struct radeon_pll p1pll; |
158 | struct radeon_pll p2pll; |
173 | struct radeon_pll p2pll; |
159 | struct radeon_pll spll; |
174 | struct radeon_pll spll; |
160 | struct radeon_pll mpll; |
175 | struct radeon_pll mpll; |
161 | /* 10 Khz units */ |
176 | /* 10 Khz units */ |
162 | uint32_t default_mclk; |
177 | uint32_t default_mclk; |
Line -... | Line 178... | ||
- | 178 | uint32_t default_sclk; |
|
163 | uint32_t default_sclk; |
179 | }; |
164 | }; |
180 | |
165 | 181 | ||
166 | /* |
182 | /* |
167 | * Fences. |
183 | * Fences. |
Line 199... | Line 215... | ||
199 | int radeon_fence_wait_next(struct radeon_device *rdev); |
215 | int radeon_fence_wait_next(struct radeon_device *rdev); |
200 | int radeon_fence_wait_last(struct radeon_device *rdev); |
216 | int radeon_fence_wait_last(struct radeon_device *rdev); |
201 | struct radeon_fence *radeon_fence_ref(struct radeon_fence *fence); |
217 | struct radeon_fence *radeon_fence_ref(struct radeon_fence *fence); |
202 | void radeon_fence_unref(struct radeon_fence **fence); |
218 | void radeon_fence_unref(struct radeon_fence **fence); |
Line -... | Line 219... | ||
- | 219 | ||
- | 220 | /* |
|
- | 221 | * Tiling registers |
|
- | 222 | */ |
|
- | 223 | struct radeon_surface_reg { |
|
- | 224 | struct radeon_object *robj; |
|
- | 225 | }; |
|
- | 226 | ||
Line 203... | Line 227... | ||
203 | 227 | #define RADEON_GEM_MAX_SURFACES 8 |
|
204 | 228 | ||
205 | /* |
229 | /* |
206 | * Radeon buffer. |
230 | * Radeon buffer. |
Line 211... | Line 235... | ||
211 | struct list_head list; |
235 | struct list_head list; |
212 | struct radeon_object *robj; |
236 | struct radeon_object *robj; |
213 | uint64_t gpu_offset; |
237 | uint64_t gpu_offset; |
214 | unsigned rdomain; |
238 | unsigned rdomain; |
215 | unsigned wdomain; |
239 | unsigned wdomain; |
- | 240 | uint32_t tiling_flags; |
|
216 | }; |
241 | }; |
Line 217... | Line 242... | ||
217 | 242 | ||
218 | int radeon_object_init(struct radeon_device *rdev); |
243 | int radeon_object_init(struct radeon_device *rdev); |
219 | void radeon_object_fini(struct radeon_device *rdev); |
244 | void radeon_object_fini(struct radeon_device *rdev); |
Line 292... | Line 317... | ||
292 | */ |
317 | */ |
293 | struct radeon_mc { |
318 | struct radeon_mc { |
294 | resource_size_t aper_size; |
319 | resource_size_t aper_size; |
295 | resource_size_t aper_base; |
320 | resource_size_t aper_base; |
296 | resource_size_t agp_base; |
321 | resource_size_t agp_base; |
- | 322 | /* for some chips with <= 32MB we need to lie |
|
297 | unsigned gtt_location; |
323 | * about vram size near mc fb location */ |
- | 324 | u64 mc_vram_size; |
|
- | 325 | u64 gtt_location; |
|
298 | unsigned gtt_size; |
326 | u64 gtt_size; |
- | 327 | u64 gtt_start; |
|
- | 328 | u64 gtt_end; |
|
299 | unsigned vram_location; |
329 | u64 vram_location; |
300 | unsigned vram_size; |
330 | u64 vram_start; |
- | 331 | u64 vram_end; |
|
301 | unsigned vram_width; |
332 | unsigned vram_width; |
- | 333 | u64 real_vram_size; |
|
302 | int vram_mtrr; |
334 | int vram_mtrr; |
303 | bool vram_is_ddr; |
335 | bool vram_is_ddr; |
304 | }; |
336 | }; |
Line 305... | Line 337... | ||
305 | 337 | ||
Line 343... | Line 375... | ||
343 | struct radeon_fence *fence; |
375 | struct radeon_fence *fence; |
344 | volatile uint32_t *ptr; |
376 | volatile uint32_t *ptr; |
345 | uint32_t length_dw; |
377 | uint32_t length_dw; |
346 | }; |
378 | }; |
Line -... | Line 379... | ||
- | 379 | ||
- | 380 | /* |
|
- | 381 | * locking - |
|
- | 382 | * mutex protects scheduled_ibs, ready, alloc_bm |
|
347 | 383 | */ |
|
348 | struct radeon_ib_pool { |
384 | struct radeon_ib_pool { |
349 | // struct mutex mutex; |
385 | // struct mutex mutex; |
350 | struct radeon_object *robj; |
386 | struct radeon_object *robj; |
351 | struct list_head scheduled_ibs; |
387 | struct list_head scheduled_ibs; |
Line 368... | Line 404... | ||
368 | uint32_t ptr_mask; |
404 | uint32_t ptr_mask; |
369 | // struct mutex mutex; |
405 | // struct mutex mutex; |
370 | bool ready; |
406 | bool ready; |
371 | }; |
407 | }; |
Line -... | Line 408... | ||
- | 408 | ||
- | 409 | struct r600_blit { |
|
- | 410 | struct radeon_object *shader_obj; |
|
- | 411 | u64 shader_gpu_addr; |
|
- | 412 | u32 vs_offset, ps_offset; |
|
- | 413 | u32 state_offset; |
|
- | 414 | u32 state_len; |
|
- | 415 | u32 vb_used, vb_total; |
|
- | 416 | struct radeon_ib *vb_ib; |
|
- | 417 | }; |
|
372 | 418 | ||
373 | int radeon_ib_get(struct radeon_device *rdev, struct radeon_ib **ib); |
419 | int radeon_ib_get(struct radeon_device *rdev, struct radeon_ib **ib); |
374 | void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib **ib); |
420 | void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib **ib); |
375 | int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib); |
421 | int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib); |
376 | int radeon_ib_pool_init(struct radeon_device *rdev); |
422 | int radeon_ib_pool_init(struct radeon_device *rdev); |
Line 420... | Line 466... | ||
420 | /* indices of various chunks */ |
466 | /* indices of various chunks */ |
421 | int chunk_ib_idx; |
467 | int chunk_ib_idx; |
422 | int chunk_relocs_idx; |
468 | int chunk_relocs_idx; |
423 | struct radeon_ib *ib; |
469 | struct radeon_ib *ib; |
424 | void *track; |
470 | void *track; |
- | 471 | unsigned family; |
|
425 | }; |
472 | }; |
Line 426... | Line 473... | ||
426 | 473 | ||
427 | struct radeon_cs_packet { |
474 | struct radeon_cs_packet { |
428 | unsigned idx; |
475 | unsigned idx; |
Line 454... | Line 501... | ||
454 | struct radeon_object *wb_obj; |
501 | struct radeon_object *wb_obj; |
455 | volatile uint32_t *wb; |
502 | volatile uint32_t *wb; |
456 | uint64_t gpu_addr; |
503 | uint64_t gpu_addr; |
457 | }; |
504 | }; |
Line -... | Line 505... | ||
- | 505 | ||
- | 506 | /** |
|
- | 507 | * struct radeon_pm - power management datas |
|
- | 508 | * @max_bandwidth: maximum bandwidth the gpu has (MByte/s) |
|
- | 509 | * @igp_sideport_mclk: sideport memory clock Mhz (rs690,rs740,rs780,rs880) |
|
- | 510 | * @igp_system_mclk: system clock Mhz (rs690,rs740,rs780,rs880) |
|
- | 511 | * @igp_ht_link_clk: ht link clock Mhz (rs690,rs740,rs780,rs880) |
|
- | 512 | * @igp_ht_link_width: ht link width in bits (rs690,rs740,rs780,rs880) |
|
- | 513 | * @k8_bandwidth: k8 bandwidth the gpu has (MByte/s) (IGP) |
|
- | 514 | * @sideport_bandwidth: sideport bandwidth the gpu has (MByte/s) (IGP) |
|
- | 515 | * @ht_bandwidth: ht bandwidth the gpu has (MByte/s) (IGP) |
|
- | 516 | * @core_bandwidth: core GPU bandwidth the gpu has (MByte/s) (IGP) |
|
- | 517 | * @sclk: GPU clock Mhz (core bandwith depends of this clock) |
|
- | 518 | * @needed_bandwidth: current bandwidth needs |
|
- | 519 | * |
|
- | 520 | * It keeps track of various data needed to take powermanagement decision. |
|
- | 521 | * Bandwith need is used to determine minimun clock of the GPU and memory. |
|
- | 522 | * Equation between gpu/memory clock and available bandwidth is hw dependent |
|
- | 523 | * (type of memory, bus size, efficiency, ...) |
|
- | 524 | */ |
|
- | 525 | struct radeon_pm { |
|
- | 526 | fixed20_12 max_bandwidth; |
|
- | 527 | fixed20_12 igp_sideport_mclk; |
|
- | 528 | fixed20_12 igp_system_mclk; |
|
- | 529 | fixed20_12 igp_ht_link_clk; |
|
- | 530 | fixed20_12 igp_ht_link_width; |
|
- | 531 | fixed20_12 k8_bandwidth; |
|
- | 532 | fixed20_12 sideport_bandwidth; |
|
- | 533 | fixed20_12 ht_bandwidth; |
|
- | 534 | fixed20_12 core_bandwidth; |
|
- | 535 | fixed20_12 sclk; |
|
- | 536 | fixed20_12 needed_bandwidth; |
|
Line 458... | Line 537... | ||
458 | 537 | }; |
|
459 | 538 | ||
460 | /* |
539 | /* |
461 | * ASIC specific functions. |
540 | * ASIC specific functions. |
462 | */ |
541 | */ |
- | 542 | struct radeon_asic { |
|
- | 543 | int (*init)(struct radeon_device *rdev); |
|
- | 544 | void (*fini)(struct radeon_device *rdev); |
|
463 | struct radeon_asic { |
545 | int (*resume)(struct radeon_device *rdev); |
464 | int (*init)(struct radeon_device *rdev); |
546 | int (*suspend)(struct radeon_device *rdev); |
- | 547 | void (*errata)(struct radeon_device *rdev); |
|
465 | void (*errata)(struct radeon_device *rdev); |
548 | void (*vram_info)(struct radeon_device *rdev); |
466 | void (*vram_info)(struct radeon_device *rdev); |
549 | void (*vga_set_state)(struct radeon_device *rdev, bool state); |
467 | int (*gpu_reset)(struct radeon_device *rdev); |
550 | int (*gpu_reset)(struct radeon_device *rdev); |
468 | int (*mc_init)(struct radeon_device *rdev); |
551 | int (*mc_init)(struct radeon_device *rdev); |
469 | void (*mc_fini)(struct radeon_device *rdev); |
552 | void (*mc_fini)(struct radeon_device *rdev); |
- | 553 | int (*wb_init)(struct radeon_device *rdev); |
|
- | 554 | void (*wb_fini)(struct radeon_device *rdev); |
|
470 | int (*wb_init)(struct radeon_device *rdev); |
555 | int (*gart_init)(struct radeon_device *rdev); |
471 | void (*wb_fini)(struct radeon_device *rdev); |
556 | void (*gart_fini)(struct radeon_device *rdev); |
472 | int (*gart_enable)(struct radeon_device *rdev); |
557 | int (*gart_enable)(struct radeon_device *rdev); |
473 | void (*gart_disable)(struct radeon_device *rdev); |
558 | void (*gart_disable)(struct radeon_device *rdev); |
474 | void (*gart_tlb_flush)(struct radeon_device *rdev); |
559 | void (*gart_tlb_flush)(struct radeon_device *rdev); |
475 | int (*gart_set_page)(struct radeon_device *rdev, int i, uint64_t addr); |
560 | int (*gart_set_page)(struct radeon_device *rdev, int i, uint64_t addr); |
476 | int (*cp_init)(struct radeon_device *rdev, unsigned ring_size); |
561 | int (*cp_init)(struct radeon_device *rdev, unsigned ring_size); |
- | 562 | void (*cp_fini)(struct radeon_device *rdev); |
|
477 | void (*cp_fini)(struct radeon_device *rdev); |
563 | void (*cp_disable)(struct radeon_device *rdev); |
- | 564 | void (*cp_commit)(struct radeon_device *rdev); |
|
- | 565 | void (*ring_start)(struct radeon_device *rdev); |
|
- | 566 | int (*ring_test)(struct radeon_device *rdev); |
|
478 | void (*cp_disable)(struct radeon_device *rdev); |
567 | void (*ring_ib_execute)(struct radeon_device *rdev, struct radeon_ib *ib); |
479 | void (*ring_start)(struct radeon_device *rdev); |
568 | int (*ib_test)(struct radeon_device *rdev); |
- | 569 | int (*irq_set)(struct radeon_device *rdev); |
|
480 | int (*irq_set)(struct radeon_device *rdev); |
570 | int (*irq_process)(struct radeon_device *rdev); |
481 | int (*irq_process)(struct radeon_device *rdev); |
571 | u32 (*get_vblank_counter)(struct radeon_device *rdev, int crtc); |
482 | void (*fence_ring_emit)(struct radeon_device *rdev, struct radeon_fence *fence); |
572 | void (*fence_ring_emit)(struct radeon_device *rdev, struct radeon_fence *fence); |
483 | int (*cs_parse)(struct radeon_cs_parser *p); |
573 | int (*cs_parse)(struct radeon_cs_parser *p); |
484 | int (*copy_blit)(struct radeon_device *rdev, |
574 | int (*copy_blit)(struct radeon_device *rdev, |
Line 498... | Line 588... | ||
498 | struct radeon_fence *fence); |
588 | struct radeon_fence *fence); |
499 | void (*set_engine_clock)(struct radeon_device *rdev, uint32_t eng_clock); |
589 | void (*set_engine_clock)(struct radeon_device *rdev, uint32_t eng_clock); |
500 | void (*set_memory_clock)(struct radeon_device *rdev, uint32_t mem_clock); |
590 | void (*set_memory_clock)(struct radeon_device *rdev, uint32_t mem_clock); |
501 | void (*set_pcie_lanes)(struct radeon_device *rdev, int lanes); |
591 | void (*set_pcie_lanes)(struct radeon_device *rdev, int lanes); |
502 | void (*set_clock_gating)(struct radeon_device *rdev, int enable); |
592 | void (*set_clock_gating)(struct radeon_device *rdev, int enable); |
- | 593 | int (*set_surface_reg)(struct radeon_device *rdev, int reg, |
|
- | 594 | uint32_t tiling_flags, uint32_t pitch, |
|
- | 595 | uint32_t offset, uint32_t obj_size); |
|
- | 596 | int (*clear_surface_reg)(struct radeon_device *rdev, int reg); |
|
- | 597 | void (*bandwidth_update)(struct radeon_device *rdev); |
|
- | 598 | }; |
|
- | 599 | ||
- | 600 | /* |
|
- | 601 | * Asic structures |
|
- | 602 | */ |
|
- | 603 | struct r100_asic { |
|
- | 604 | const unsigned *reg_safe_bm; |
|
- | 605 | unsigned reg_safe_bm_size; |
|
- | 606 | }; |
|
- | 607 | ||
- | 608 | struct r300_asic { |
|
- | 609 | const unsigned *reg_safe_bm; |
|
- | 610 | unsigned reg_safe_bm_size; |
|
- | 611 | }; |
|
- | 612 | ||
- | 613 | struct r600_asic { |
|
- | 614 | unsigned max_pipes; |
|
- | 615 | unsigned max_tile_pipes; |
|
- | 616 | unsigned max_simds; |
|
- | 617 | unsigned max_backends; |
|
- | 618 | unsigned max_gprs; |
|
- | 619 | unsigned max_threads; |
|
- | 620 | unsigned max_stack_entries; |
|
- | 621 | unsigned max_hw_contexts; |
|
- | 622 | unsigned max_gs_threads; |
|
- | 623 | unsigned sx_max_export_size; |
|
- | 624 | unsigned sx_max_export_pos_size; |
|
- | 625 | unsigned sx_max_export_smx_size; |
|
- | 626 | unsigned sq_num_cf_insts; |
|
- | 627 | }; |
|
- | 628 | ||
- | 629 | struct rv770_asic { |
|
- | 630 | unsigned max_pipes; |
|
- | 631 | unsigned max_tile_pipes; |
|
- | 632 | unsigned max_simds; |
|
- | 633 | unsigned max_backends; |
|
- | 634 | unsigned max_gprs; |
|
- | 635 | unsigned max_threads; |
|
- | 636 | unsigned max_stack_entries; |
|
- | 637 | unsigned max_hw_contexts; |
|
- | 638 | unsigned max_gs_threads; |
|
- | 639 | unsigned sx_max_export_size; |
|
- | 640 | unsigned sx_max_export_pos_size; |
|
- | 641 | unsigned sx_max_export_smx_size; |
|
- | 642 | unsigned sq_num_cf_insts; |
|
- | 643 | unsigned sx_num_of_sets; |
|
- | 644 | unsigned sc_prim_fifo_size; |
|
- | 645 | unsigned sc_hiz_tile_fifo_size; |
|
- | 646 | unsigned sc_earlyz_tile_fifo_fize; |
|
503 | }; |
647 | }; |
Line 504... | Line 648... | ||
504 | 648 | ||
505 | union radeon_asic_config { |
649 | union radeon_asic_config { |
- | 650 | struct r300_asic r300; |
|
- | 651 | struct r100_asic r100; |
|
- | 652 | struct r600_asic r600; |
|
506 | struct r300_asic r300; |
653 | struct rv770_asic rv770; |
Line 507... | Line 654... | ||
507 | }; |
654 | }; |
- | 655 | ||
- | 656 | ||
- | 657 | /* |
|
- | 658 | ||
508 | 659 | ||
509 | 660 | ||
510 | /* |
661 | |
511 | /* |
662 | /* |
512 | * Core structure, functions and helpers. |
663 | * Core structure, functions and helpers. |
Line 522... | Line 673... | ||
522 | enum radeon_family family; |
673 | enum radeon_family family; |
523 | unsigned long flags; |
674 | unsigned long flags; |
524 | int usec_timeout; |
675 | int usec_timeout; |
525 | enum radeon_pll_errata pll_errata; |
676 | enum radeon_pll_errata pll_errata; |
526 | int num_gb_pipes; |
677 | int num_gb_pipes; |
- | 678 | int num_z_pipes; |
|
527 | int disp_priority; |
679 | int disp_priority; |
528 | /* BIOS */ |
680 | /* BIOS */ |
529 | uint8_t *bios; |
681 | uint8_t *bios; |
530 | bool is_atom_bios; |
682 | bool is_atom_bios; |
531 | uint16_t bios_header_start; |
683 | uint16_t bios_header_start; |
Line 532... | Line 684... | ||
532 | 684 | ||
533 | // struct radeon_object *stollen_vga_memory; |
685 | // struct radeon_object *stollen_vga_memory; |
534 | struct fb_info *fbdev_info; |
686 | struct fb_info *fbdev_info; |
535 | struct radeon_object *fbdev_robj; |
687 | struct radeon_object *fbdev_robj; |
536 | struct radeon_framebuffer *fbdev_rfb; |
- | |
537 | 688 | struct radeon_framebuffer *fbdev_rfb; |
|
538 | /* Register mmio */ |
689 | /* Register mmio */ |
539 | unsigned long rmmio_base; |
690 | unsigned long rmmio_base; |
540 | unsigned long rmmio_size; |
691 | unsigned long rmmio_size; |
541 | void *rmmio; |
- | |
542 | - | ||
543 | radeon_rreg_t mm_rreg; |
- | |
544 | radeon_wreg_t mm_wreg; |
692 | void *rmmio; |
545 | radeon_rreg_t mc_rreg; |
693 | radeon_rreg_t mc_rreg; |
546 | radeon_wreg_t mc_wreg; |
694 | radeon_wreg_t mc_wreg; |
547 | radeon_rreg_t pll_rreg; |
695 | radeon_rreg_t pll_rreg; |
548 | radeon_wreg_t pll_wreg; |
- | |
549 | radeon_rreg_t pcie_rreg; |
696 | radeon_wreg_t pll_wreg; |
550 | radeon_wreg_t pcie_wreg; |
697 | uint32_t pcie_reg_mask; |
551 | radeon_rreg_t pciep_rreg; |
698 | radeon_rreg_t pciep_rreg; |
552 | radeon_wreg_t pciep_wreg; |
699 | radeon_wreg_t pciep_wreg; |
553 | struct radeon_clock clock; |
700 | struct radeon_clock clock; |
554 | struct radeon_mc mc; |
701 | struct radeon_mc mc; |
Line 560... | Line 707... | ||
560 | struct radeon_cp cp; |
707 | struct radeon_cp cp; |
561 | struct radeon_ib_pool ib_pool; |
708 | struct radeon_ib_pool ib_pool; |
562 | // struct radeon_irq irq; |
709 | // struct radeon_irq irq; |
563 | struct radeon_asic *asic; |
710 | struct radeon_asic *asic; |
564 | struct radeon_gem gem; |
711 | struct radeon_gem gem; |
- | 712 | struct radeon_pm pm; |
|
- | 713 | uint32_t bios_scratch[RADEON_BIOS_NUM_SCRATCH]; |
|
565 | // struct mutex cs_mutex; |
714 | // struct mutex cs_mutex; |
566 | struct radeon_wb wb; |
715 | struct radeon_wb wb; |
- | 716 | struct radeon_dummy_page dummy_page; |
|
567 | bool gpu_lockup; |
717 | bool gpu_lockup; |
568 | bool shutdown; |
718 | bool shutdown; |
569 | bool suspend; |
719 | bool suspend; |
- | 720 | bool need_dma32; |
|
- | 721 | bool new_init_path; |
|
- | 722 | bool accel_working; |
|
- | 723 | struct radeon_surface_reg surface_regs[RADEON_GEM_MAX_SURFACES]; |
|
- | 724 | const struct firmware *me_fw; /* all family ME firmware */ |
|
- | 725 | const struct firmware *pfp_fw; /* r6/700 PFP firmware */ |
|
- | 726 | struct r600_blit r600_blit; |
|
570 | }; |
727 | }; |
Line 571... | Line 728... | ||
571 | 728 | ||
572 | int radeon_device_init(struct radeon_device *rdev, |
729 | int radeon_device_init(struct radeon_device *rdev, |
573 | struct drm_device *ddev, |
730 | struct drm_device *ddev, |
574 | struct pci_dev *pdev, |
731 | struct pci_dev *pdev, |
575 | uint32_t flags); |
732 | uint32_t flags); |
576 | void radeon_device_fini(struct radeon_device *rdev); |
733 | void radeon_device_fini(struct radeon_device *rdev); |
Line 577... | Line 734... | ||
577 | int radeon_gpu_wait_for_idle(struct radeon_device *rdev); |
734 | int radeon_gpu_wait_for_idle(struct radeon_device *rdev); |
- | 735 | ||
- | 736 | /* r600 blit */ |
|
- | 737 | int r600_blit_prepare_copy(struct radeon_device *rdev, int size_bytes); |
|
- | 738 | void r600_blit_done_copy(struct radeon_device *rdev, struct radeon_fence *fence); |
|
578 | 739 | void r600_kms_blit_copy(struct radeon_device *rdev, |
|
579 | #define __iomem |
- | |
580 | #define __force |
- | |
Line 581... | Line -... | ||
581 | - | ||
582 | - | ||
583 | - | ||
584 | static inline uint8_t __raw_readb(const volatile void __iomem *addr) |
- | |
585 | { |
- | |
586 | return *(const volatile uint8_t __force *) addr; |
740 | u64 src_gpu_addr, u64 dst_gpu_addr, |
587 | } |
741 | int size_bytes); |
- | 742 | ||
588 | 743 | static inline uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg) |
|
- | 744 | { |
|
- | 745 | if (reg < 0x10000) |
|
- | 746 | return readl(((void __iomem *)rdev->rmmio) + reg); |
|
589 | static inline uint16_t __raw_readw(const volatile void __iomem *addr) |
747 | else { |
590 | { |
- | |
591 | return *(const volatile uint16_t __force *) addr; |
- | |
592 | } |
- | |
593 | - | ||
594 | static inline uint32_t __raw_readl(const volatile void __iomem *addr) |
748 | writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX); |
Line 595... | Line -... | ||
595 | { |
- | |
596 | return *(const volatile uint32_t __force *) addr; |
- | |
597 | } |
- | |
598 | - | ||
599 | #define readb __raw_readb |
- | |
600 | #define readw __raw_readw |
- | |
601 | #define readl __raw_readl |
749 | return readl(((void __iomem *)rdev->rmmio) + RADEON_MM_DATA); |
602 | 750 | } |
|
- | 751 | } |
|
603 | 752 | ||
- | 753 | static inline void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v) |
|
- | 754 | { |
|
- | 755 | if (reg < 0x10000) |
|
604 | 756 | writel(v, ((void __iomem *)rdev->rmmio) + reg); |
|
605 | static inline void __raw_writeb(uint8_t b, volatile void __iomem *addr) |
- | |
606 | { |
- | |
607 | *(volatile uint8_t __force *) addr = b; |
- | |
608 | } |
- | |
609 | 757 | else { |
|
Line 610... | Line -... | ||
610 | static inline void __raw_writew(uint16_t b, volatile void __iomem *addr) |
- | |
611 | { |
- | |
612 | *(volatile uint16_t __force *) addr = b; |
- | |
613 | } |
- | |
614 | - | ||
615 | static inline void __raw_writel(uint32_t b, volatile void __iomem *addr) |
- | |
616 | { |
- | |
617 | *(volatile uint32_t __force *) addr = b; |
- | |
618 | } |
- | |
619 | - | ||
620 | static inline void __raw_writeq(__u64 b, volatile void __iomem *addr) |
- | |
621 | { |
- | |
622 | *(volatile __u64 *)addr = b; |
- | |
623 | } |
- | |
624 | - | ||
625 | #define writeb __raw_writeb |
- | |
626 | #define writew __raw_writew |
- | |
627 | #define writel __raw_writel |
- | |
628 | #define writeq __raw_writeq |
- | |
629 | - | ||
Line 630... | Line 758... | ||
630 | //#define writeb(b,addr) *(volatile uint8_t* ) addr = (uint8_t)b |
758 | writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX); |
631 | //#define writew(b,addr) *(volatile uint16_t*) addr = (uint16_t)b |
759 | writel(v, ((void __iomem *)rdev->rmmio) + RADEON_MM_DATA); |
632 | //#define writel(b,addr) *(volatile uint32_t*) addr = (uint32_t)b |
760 | } |
633 | 761 | } |
|
634 | 762 | ||
635 | 763 | ||
636 | /* |
764 | /* |
637 | * Registers read & write functions. |
765 | * Registers read & write functions. |
638 | */ |
766 | */ |
639 | #define RREG8(reg) readb(((void __iomem *)rdev->rmmio) + (reg)) |
767 | #define RREG8(reg) readb(((void __iomem *)rdev->rmmio) + (reg)) |
640 | #define WREG8(reg, v) writeb(v, ((void __iomem *)rdev->rmmio) + (reg)) |
768 | #define WREG8(reg, v) writeb(v, ((void __iomem *)rdev->rmmio) + (reg)) |
641 | #define RREG32(reg) rdev->mm_rreg(rdev, (reg)) |
769 | #define RREG32(reg) r100_mm_rreg(rdev, (reg)) |
642 | #define WREG32(reg, v) rdev->mm_wreg(rdev, (reg), (v)) |
770 | #define WREG32(reg, v) r100_mm_wreg(rdev, (reg), (v)) |
643 | #define REG_SET(FIELD, v) (((v) << FIELD##_SHIFT) & FIELD##_MASK) |
771 | #define REG_SET(FIELD, v) (((v) << FIELD##_SHIFT) & FIELD##_MASK) |
644 | #define REG_GET(FIELD, v) (((v) << FIELD##_SHIFT) & FIELD##_MASK) |
772 | #define REG_GET(FIELD, v) (((v) << FIELD##_SHIFT) & FIELD##_MASK) |
645 | #define RREG32_PLL(reg) rdev->pll_rreg(rdev, (reg)) |
773 | #define RREG32_PLL(reg) rdev->pll_rreg(rdev, (reg)) |
646 | #define WREG32_PLL(reg, v) rdev->pll_wreg(rdev, (reg), (v)) |
774 | #define WREG32_PLL(reg, v) rdev->pll_wreg(rdev, (reg), (v)) |
647 | #define RREG32_MC(reg) rdev->mc_rreg(rdev, (reg)) |
775 | #define RREG32_MC(reg) rdev->mc_rreg(rdev, (reg)) |
648 | #define WREG32_MC(reg, v) rdev->mc_wreg(rdev, (reg), (v)) |
776 | #define WREG32_MC(reg, v) rdev->mc_wreg(rdev, (reg), (v)) |
649 | #define RREG32_PCIE(reg) rdev->pcie_rreg(rdev, (reg)) |
777 | #define RREG32_PCIE(reg) rv370_pcie_rreg(rdev, (reg)) |
Line 661... | Line 789... | ||
661 | tmp_ &= (mask); \ |
789 | tmp_ &= (mask); \ |
662 | tmp_ |= ((val) & ~(mask)); \ |
790 | tmp_ |= ((val) & ~(mask)); \ |
663 | WREG32_PLL(reg, tmp_); \ |
791 | WREG32_PLL(reg, tmp_); \ |
664 | } while (0) |
792 | } while (0) |
Line -... | Line 793... | ||
- | 793 | ||
- | 794 | /* |
|
- | 795 | * Indirect registers accessor |
|
- | 796 | */ |
|
- | 797 | static inline uint32_t rv370_pcie_rreg(struct radeon_device *rdev, uint32_t reg) |
|
- | 798 | { |
|
- | 799 | uint32_t r; |
|
- | 800 | ||
- | 801 | WREG32(RADEON_PCIE_INDEX, ((reg) & rdev->pcie_reg_mask)); |
|
- | 802 | r = RREG32(RADEON_PCIE_DATA); |
|
- | 803 | return r; |
|
- | 804 | } |
|
- | 805 | ||
- | 806 | static inline void rv370_pcie_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v) |
|
- | 807 | { |
|
- | 808 | WREG32(RADEON_PCIE_INDEX, ((reg) & rdev->pcie_reg_mask)); |
|
- | 809 | WREG32(RADEON_PCIE_DATA, (v)); |
|
- | 810 | } |
|
- | 811 | ||
- | 812 | void r100_pll_errata_after_index(struct radeon_device *rdev); |
|
- | 813 | ||
- | 814 | ||
- | 815 | ||
- | 816 | ||
- | 817 | ||
- | 818 | ||
- | 819 | ||
Line 665... | Line 820... | ||
665 | 820 | ||
666 | 821 | ||
667 | #define radeon_PCI_IDS \ |
822 | #define radeon_PCI_IDS \ |
668 | {0x1002, 0x3150, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \ |
823 | {0x1002, 0x3150, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \ |
Line 1073... | Line 1228... | ||
1073 | 1228 | ||
1074 | 1229 | ||
1075 | /* |
1230 | /* |
- | 1231 | * ASICs helpers. |
|
- | 1232 | */ |
|
1076 | * ASICs helpers. |
1233 | #define ASIC_IS_RN50(rdev) ((rdev->pdev->device == 0x515e) || \ |
1077 | */ |
1234 | (rdev->pdev->device == 0x5969)) |
1078 | #define ASIC_IS_RV100(rdev) ((rdev->family == CHIP_RV100) || \ |
1235 | #define ASIC_IS_RV100(rdev) ((rdev->family == CHIP_RV100) || \ |
1079 | (rdev->family == CHIP_RV200) || \ |
1236 | (rdev->family == CHIP_RV200) || \ |
1080 | (rdev->family == CHIP_RS100) || \ |
1237 | (rdev->family == CHIP_RS100) || \ |
Line 1173... | Line 1330... | ||
1173 | 1330 | ||
1174 | /* |
1331 | /* |
1175 | * ASICs macro. |
1332 | * ASICs macro. |
1176 | */ |
1333 | */ |
- | 1334 | #define radeon_init(rdev) (rdev)->asic->init((rdev)) |
|
- | 1335 | #define radeon_fini(rdev) (rdev)->asic->fini((rdev)) |
|
- | 1336 | #define radeon_resume(rdev) (rdev)->asic->resume((rdev)) |
|
1177 | #define radeon_init(rdev) (rdev)->asic->init((rdev)) |
1337 | #define radeon_suspend(rdev) (rdev)->asic->suspend((rdev)) |
1178 | #define radeon_cs_parse(p) rdev->asic->cs_parse((p)) |
1338 | #define radeon_cs_parse(p) rdev->asic->cs_parse((p)) |
1179 | #define radeon_errata(rdev) (rdev)->asic->errata((rdev)) |
1339 | #define radeon_errata(rdev) (rdev)->asic->errata((rdev)) |
- | 1340 | #define radeon_vram_info(rdev) (rdev)->asic->vram_info((rdev)) |
|
1180 | #define radeon_vram_info(rdev) (rdev)->asic->vram_info((rdev)) |
1341 | #define radeon_vga_set_state(rdev, state) (rdev)->asic->vga_set_state((rdev), (state)) |
1181 | #define radeon_gpu_reset(rdev) (rdev)->asic->gpu_reset((rdev)) |
1342 | #define radeon_gpu_reset(rdev) (rdev)->asic->gpu_reset((rdev)) |
1182 | #define radeon_mc_init(rdev) (rdev)->asic->mc_init((rdev)) |
1343 | #define radeon_mc_init(rdev) (rdev)->asic->mc_init((rdev)) |
1183 | #define radeon_mc_fini(rdev) (rdev)->asic->mc_fini((rdev)) |
1344 | #define radeon_mc_fini(rdev) (rdev)->asic->mc_fini((rdev)) |
1184 | #define radeon_wb_init(rdev) (rdev)->asic->wb_init((rdev)) |
1345 | #define radeon_wb_init(rdev) (rdev)->asic->wb_init((rdev)) |
- | 1346 | #define radeon_wb_fini(rdev) (rdev)->asic->wb_fini((rdev)) |
|
- | 1347 | #define radeon_gpu_gart_init(rdev) (rdev)->asic->gart_init((rdev)) |
|
1185 | #define radeon_wb_fini(rdev) (rdev)->asic->wb_fini((rdev)) |
1348 | #define radeon_gpu_gart_fini(rdev) (rdev)->asic->gart_fini((rdev)) |
1186 | #define radeon_gart_enable(rdev) (rdev)->asic->gart_enable((rdev)) |
1349 | #define radeon_gart_enable(rdev) (rdev)->asic->gart_enable((rdev)) |
1187 | #define radeon_gart_disable(rdev) (rdev)->asic->gart_disable((rdev)) |
1350 | #define radeon_gart_disable(rdev) (rdev)->asic->gart_disable((rdev)) |
1188 | #define radeon_gart_tlb_flush(rdev) (rdev)->asic->gart_tlb_flush((rdev)) |
1351 | #define radeon_gart_tlb_flush(rdev) (rdev)->asic->gart_tlb_flush((rdev)) |
1189 | #define radeon_gart_set_page(rdev, i, p) (rdev)->asic->gart_set_page((rdev), (i), (p)) |
1352 | #define radeon_gart_set_page(rdev, i, p) (rdev)->asic->gart_set_page((rdev), (i), (p)) |
1190 | #define radeon_cp_init(rdev,rsize) (rdev)->asic->cp_init((rdev), (rsize)) |
1353 | #define radeon_cp_init(rdev,rsize) (rdev)->asic->cp_init((rdev), (rsize)) |
1191 | #define radeon_cp_fini(rdev) (rdev)->asic->cp_fini((rdev)) |
1354 | #define radeon_cp_fini(rdev) (rdev)->asic->cp_fini((rdev)) |
- | 1355 | #define radeon_cp_disable(rdev) (rdev)->asic->cp_disable((rdev)) |
|
1192 | #define radeon_cp_disable(rdev) (rdev)->asic->cp_disable((rdev)) |
1356 | #define radeon_cp_commit(rdev) (rdev)->asic->cp_commit((rdev)) |
- | 1357 | #define radeon_ring_start(rdev) (rdev)->asic->ring_start((rdev)) |
|
- | 1358 | #define radeon_ring_test(rdev) (rdev)->asic->ring_test((rdev)) |
|
- | 1359 | #define radeon_ring_ib_execute(rdev, ib) (rdev)->asic->ring_ib_execute((rdev), (ib)) |
|
1193 | #define radeon_ring_start(rdev) (rdev)->asic->ring_start((rdev)) |
1360 | #define radeon_ib_test(rdev) (rdev)->asic->ib_test((rdev)) |
1194 | #define radeon_irq_set(rdev) (rdev)->asic->irq_set((rdev)) |
1361 | #define radeon_irq_set(rdev) (rdev)->asic->irq_set((rdev)) |
- | 1362 | #define radeon_irq_process(rdev) (rdev)->asic->irq_process((rdev)) |
|
1195 | #define radeon_irq_process(rdev) (rdev)->asic->irq_process((rdev)) |
1363 | #define radeon_get_vblank_counter(rdev, crtc) (rdev)->asic->get_vblank_counter((rdev), (crtc)) |
1196 | #define radeon_fence_ring_emit(rdev, fence) (rdev)->asic->fence_ring_emit((rdev), (fence)) |
1364 | #define radeon_fence_ring_emit(rdev, fence) (rdev)->asic->fence_ring_emit((rdev), (fence)) |
1197 | #define radeon_copy_blit(rdev, s, d, np, f) (rdev)->asic->copy_blit((rdev), (s), (d), (np), (f)) |
1365 | #define radeon_copy_blit(rdev, s, d, np, f) (rdev)->asic->copy_blit((rdev), (s), (d), (np), (f)) |
1198 | #define radeon_copy_dma(rdev, s, d, np, f) (rdev)->asic->copy_dma((rdev), (s), (d), (np), (f)) |
1366 | #define radeon_copy_dma(rdev, s, d, np, f) (rdev)->asic->copy_dma((rdev), (s), (d), (np), (f)) |
1199 | #define radeon_copy(rdev, s, d, np, f) (rdev)->asic->copy((rdev), (s), (d), (np), (f)) |
1367 | #define radeon_copy(rdev, s, d, np, f) (rdev)->asic->copy((rdev), (s), (d), (np), (f)) |
1200 | #define radeon_set_engine_clock(rdev, e) (rdev)->asic->set_engine_clock((rdev), (e)) |
1368 | #define radeon_set_engine_clock(rdev, e) (rdev)->asic->set_engine_clock((rdev), (e)) |
1201 | #define radeon_set_memory_clock(rdev, e) (rdev)->asic->set_engine_clock((rdev), (e)) |
1369 | #define radeon_set_memory_clock(rdev, e) (rdev)->asic->set_engine_clock((rdev), (e)) |
1202 | #define radeon_set_pcie_lanes(rdev, l) (rdev)->asic->set_pcie_lanes((rdev), (l)) |
1370 | #define radeon_set_pcie_lanes(rdev, l) (rdev)->asic->set_pcie_lanes((rdev), (l)) |
- | 1371 | #define radeon_set_clock_gating(rdev, e) (rdev)->asic->set_clock_gating((rdev), (e)) |
|
- | 1372 | #define radeon_set_surface_reg(rdev, r, f, p, o, s) ((rdev)->asic->set_surface_reg((rdev), (r), (f), (p), (o), (s))) |
|
- | 1373 | #define radeon_clear_surface_reg(rdev, r) ((rdev)->asic->clear_surface_reg((rdev), (r))) |
|
- | 1374 | #define radeon_bandwidth_update(rdev) (rdev)->asic->bandwidth_update((rdev)) |
|
- | 1375 | ||
- | 1376 | /* Common functions */ |
|
- | 1377 | extern int radeon_gart_table_vram_pin(struct radeon_device *rdev); |
|
- | 1378 | extern int radeon_modeset_init(struct radeon_device *rdev); |
|
- | 1379 | extern void radeon_modeset_fini(struct radeon_device *rdev); |
|
- | 1380 | extern bool radeon_card_posted(struct radeon_device *rdev); |
|
- | 1381 | extern int radeon_clocks_init(struct radeon_device *rdev); |
|
- | 1382 | extern void radeon_clocks_fini(struct radeon_device *rdev); |
|
- | 1383 | extern void radeon_scratch_init(struct radeon_device *rdev); |
|
- | 1384 | extern void radeon_surface_init(struct radeon_device *rdev); |
|
- | 1385 | extern int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data); |
|
- | 1386 | ||
- | 1387 | /* r100,rv100,rs100,rv200,rs200,r200,rv250,rs300,rv280 */ |
|
- | 1388 | struct r100_mc_save { |
|
- | 1389 | u32 GENMO_WT; |
|
- | 1390 | u32 CRTC_EXT_CNTL; |
|
- | 1391 | u32 CRTC_GEN_CNTL; |
|
- | 1392 | u32 CRTC2_GEN_CNTL; |
|
- | 1393 | u32 CUR_OFFSET; |
|
- | 1394 | u32 CUR2_OFFSET; |
|
- | 1395 | }; |
|
- | 1396 | extern void r100_cp_disable(struct radeon_device *rdev); |
|
- | 1397 | extern int r100_cp_init(struct radeon_device *rdev, unsigned ring_size); |
|
- | 1398 | extern void r100_cp_fini(struct radeon_device *rdev); |
|
- | 1399 | extern void r100_pci_gart_tlb_flush(struct radeon_device *rdev); |
|
- | 1400 | extern int r100_pci_gart_init(struct radeon_device *rdev); |
|
- | 1401 | extern void r100_pci_gart_fini(struct radeon_device *rdev); |
|
- | 1402 | extern int r100_pci_gart_enable(struct radeon_device *rdev); |
|
- | 1403 | extern void r100_pci_gart_disable(struct radeon_device *rdev); |
|
- | 1404 | extern int r100_pci_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr); |
|
- | 1405 | extern int r100_debugfs_mc_info_init(struct radeon_device *rdev); |
|
- | 1406 | extern int r100_gui_wait_for_idle(struct radeon_device *rdev); |
|
- | 1407 | extern void r100_ib_fini(struct radeon_device *rdev); |
|
- | 1408 | extern int r100_ib_init(struct radeon_device *rdev); |
|
- | 1409 | extern void r100_irq_disable(struct radeon_device *rdev); |
|
- | 1410 | extern int r100_irq_set(struct radeon_device *rdev); |
|
- | 1411 | extern void r100_mc_stop(struct radeon_device *rdev, struct r100_mc_save *save); |
|
- | 1412 | extern void r100_mc_resume(struct radeon_device *rdev, struct r100_mc_save *save); |
|
- | 1413 | extern void r100_vram_init_sizes(struct radeon_device *rdev); |
|
- | 1414 | extern void r100_wb_disable(struct radeon_device *rdev); |
|
- | 1415 | extern void r100_wb_fini(struct radeon_device *rdev); |
|
- | 1416 | extern int r100_wb_init(struct radeon_device *rdev); |
|
- | 1417 | ||
- | 1418 | /* r300,r350,rv350,rv370,rv380 */ |
|
- | 1419 | extern void r300_set_reg_safe(struct radeon_device *rdev); |
|
- | 1420 | extern void r300_mc_program(struct radeon_device *rdev); |
|
- | 1421 | extern void r300_vram_info(struct radeon_device *rdev); |
|
- | 1422 | extern int rv370_pcie_gart_init(struct radeon_device *rdev); |
|
- | 1423 | extern void rv370_pcie_gart_fini(struct radeon_device *rdev); |
|
- | 1424 | extern int rv370_pcie_gart_enable(struct radeon_device *rdev); |
|
- | 1425 | extern void rv370_pcie_gart_disable(struct radeon_device *rdev); |
|
- | 1426 | ||
- | 1427 | /* r420,r423,rv410 */ |
|
- | 1428 | extern u32 r420_mc_rreg(struct radeon_device *rdev, u32 reg); |
|
- | 1429 | extern void r420_mc_wreg(struct radeon_device *rdev, u32 reg, u32 v); |
|
- | 1430 | extern int r420_debugfs_pipes_info_init(struct radeon_device *rdev); |
|
- | 1431 | ||
- | 1432 | /* rv515 */ |
|
- | 1433 | extern void rv515_bandwidth_avivo_update(struct radeon_device *rdev); |
|
- | 1434 | ||
- | 1435 | /* rs690, rs740 */ |
|
- | 1436 | extern void rs690_line_buffer_adjust(struct radeon_device *rdev, |
|
- | 1437 | struct drm_display_mode *mode1, |
|
- | 1438 | struct drm_display_mode *mode2); |
|
- | 1439 | ||
- | 1440 | /* r600, rv610, rv630, rv620, rv635, rv670, rs780, rs880 */ |
|
- | 1441 | extern bool r600_card_posted(struct radeon_device *rdev); |
|
- | 1442 | extern void r600_cp_stop(struct radeon_device *rdev); |
|
- | 1443 | extern void r600_ring_init(struct radeon_device *rdev, unsigned ring_size); |
|
- | 1444 | extern int r600_cp_resume(struct radeon_device *rdev); |
|
- | 1445 | extern int r600_count_pipe_bits(uint32_t val); |
|
- | 1446 | extern int r600_gart_clear_page(struct radeon_device *rdev, int i); |
|
- | 1447 | extern int r600_mc_wait_for_idle(struct radeon_device *rdev); |
|
- | 1448 | extern int r600_pcie_gart_init(struct radeon_device *rdev); |
|
- | 1449 | extern void r600_pcie_gart_tlb_flush(struct radeon_device *rdev); |
|
- | 1450 | extern int r600_ib_test(struct radeon_device *rdev); |
|
- | 1451 | extern int r600_ring_test(struct radeon_device *rdev); |
|
- | 1452 | extern int r600_wb_init(struct radeon_device *rdev); |
|
- | 1453 | extern void r600_wb_fini(struct radeon_device *rdev); |
|
- | 1454 | extern void r600_scratch_init(struct radeon_device *rdev); |
|
- | 1455 | extern int r600_blit_init(struct radeon_device *rdev); |
|
- | 1456 | extern void r600_blit_fini(struct radeon_device *rdev); |
|
- | 1457 | extern int r600_cp_init_microcode(struct radeon_device *rdev); |
|
- | 1458 | extern int r600_gpu_reset(struct radeon_device *rdev); |
|
- | 1459 | ||
- | 1460 | ||
- | 1461 | ||
- | 1462 | ||
- | 1463 | ||
- | 1464 | ||
Line 1203... | Line 1465... | ||
1203 | #define radeon_set_clock_gating(rdev, e) (rdev)->asic->set_clock_gating((rdev), (e)) |
1465 | |
Line 1204... | Line 1466... | ||
1204 | 1466 | ||
Line 1210... | Line 1472... | ||
1210 | resource_size_t |
1472 | resource_size_t |
1211 | drm_get_resource_len(struct drm_device *dev, unsigned int resource); |
1473 | drm_get_resource_len(struct drm_device *dev, unsigned int resource); |
Line 1212... | Line 1474... | ||
1212 | 1474 | ||
Line -... | Line 1475... | ||
- | 1475 | bool set_mode(struct drm_device *dev, int width, int height); |
|
- | 1476 | ||
1213 | bool set_mode(struct drm_device *dev, int width, int height); |
1477 |