diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/rs600.c')
-rw-r--r-- | drivers/gpu/drm/radeon/rs600.c | 236 |
1 files changed, 200 insertions, 36 deletions
diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c index 5f117cd8736a..4f8ea4260572 100644 --- a/drivers/gpu/drm/radeon/rs600.c +++ b/drivers/gpu/drm/radeon/rs600.c | |||
@@ -45,6 +45,122 @@ | |||
45 | void rs600_gpu_init(struct radeon_device *rdev); | 45 | void rs600_gpu_init(struct radeon_device *rdev); |
46 | int rs600_mc_wait_for_idle(struct radeon_device *rdev); | 46 | int rs600_mc_wait_for_idle(struct radeon_device *rdev); |
47 | 47 | ||
48 | int rs600_mc_init(struct radeon_device *rdev) | ||
49 | { | ||
50 | /* read back the MC value from the hw */ | ||
51 | int r; | ||
52 | u32 tmp; | ||
53 | |||
54 | /* Setup GPU memory space */ | ||
55 | tmp = RREG32_MC(R_000004_MC_FB_LOCATION); | ||
56 | rdev->mc.vram_location = G_000004_MC_FB_START(tmp) << 16; | ||
57 | rdev->mc.gtt_location = 0xffffffffUL; | ||
58 | r = radeon_mc_setup(rdev); | ||
59 | if (r) | ||
60 | return r; | ||
61 | return 0; | ||
62 | } | ||
63 | |||
64 | /* hpd for digital panel detect/disconnect */ | ||
65 | bool rs600_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd) | ||
66 | { | ||
67 | u32 tmp; | ||
68 | bool connected = false; | ||
69 | |||
70 | switch (hpd) { | ||
71 | case RADEON_HPD_1: | ||
72 | tmp = RREG32(R_007D04_DC_HOT_PLUG_DETECT1_INT_STATUS); | ||
73 | if (G_007D04_DC_HOT_PLUG_DETECT1_SENSE(tmp)) | ||
74 | connected = true; | ||
75 | break; | ||
76 | case RADEON_HPD_2: | ||
77 | tmp = RREG32(R_007D14_DC_HOT_PLUG_DETECT2_INT_STATUS); | ||
78 | if (G_007D14_DC_HOT_PLUG_DETECT2_SENSE(tmp)) | ||
79 | connected = true; | ||
80 | break; | ||
81 | default: | ||
82 | break; | ||
83 | } | ||
84 | return connected; | ||
85 | } | ||
86 | |||
87 | void rs600_hpd_set_polarity(struct radeon_device *rdev, | ||
88 | enum radeon_hpd_id hpd) | ||
89 | { | ||
90 | u32 tmp; | ||
91 | bool connected = rs600_hpd_sense(rdev, hpd); | ||
92 | |||
93 | switch (hpd) { | ||
94 | case RADEON_HPD_1: | ||
95 | tmp = RREG32(R_007D08_DC_HOT_PLUG_DETECT1_INT_CONTROL); | ||
96 | if (connected) | ||
97 | tmp &= ~S_007D08_DC_HOT_PLUG_DETECT1_INT_POLARITY(1); | ||
98 | else | ||
99 | tmp |= S_007D08_DC_HOT_PLUG_DETECT1_INT_POLARITY(1); | ||
100 | WREG32(R_007D08_DC_HOT_PLUG_DETECT1_INT_CONTROL, tmp); | ||
101 | break; | ||
102 | case RADEON_HPD_2: | ||
103 | tmp = RREG32(R_007D18_DC_HOT_PLUG_DETECT2_INT_CONTROL); | ||
104 | if (connected) | ||
105 | tmp &= ~S_007D18_DC_HOT_PLUG_DETECT2_INT_POLARITY(1); | ||
106 | else | ||
107 | tmp |= S_007D18_DC_HOT_PLUG_DETECT2_INT_POLARITY(1); | ||
108 | WREG32(R_007D18_DC_HOT_PLUG_DETECT2_INT_CONTROL, tmp); | ||
109 | break; | ||
110 | default: | ||
111 | break; | ||
112 | } | ||
113 | } | ||
114 | |||
115 | void rs600_hpd_init(struct radeon_device *rdev) | ||
116 | { | ||
117 | struct drm_device *dev = rdev->ddev; | ||
118 | struct drm_connector *connector; | ||
119 | |||
120 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { | ||
121 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); | ||
122 | switch (radeon_connector->hpd.hpd) { | ||
123 | case RADEON_HPD_1: | ||
124 | WREG32(R_007D00_DC_HOT_PLUG_DETECT1_CONTROL, | ||
125 | S_007D00_DC_HOT_PLUG_DETECT1_EN(1)); | ||
126 | rdev->irq.hpd[0] = true; | ||
127 | break; | ||
128 | case RADEON_HPD_2: | ||
129 | WREG32(R_007D10_DC_HOT_PLUG_DETECT2_CONTROL, | ||
130 | S_007D10_DC_HOT_PLUG_DETECT2_EN(1)); | ||
131 | rdev->irq.hpd[1] = true; | ||
132 | break; | ||
133 | default: | ||
134 | break; | ||
135 | } | ||
136 | } | ||
137 | rs600_irq_set(rdev); | ||
138 | } | ||
139 | |||
140 | void rs600_hpd_fini(struct radeon_device *rdev) | ||
141 | { | ||
142 | struct drm_device *dev = rdev->ddev; | ||
143 | struct drm_connector *connector; | ||
144 | |||
145 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { | ||
146 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); | ||
147 | switch (radeon_connector->hpd.hpd) { | ||
148 | case RADEON_HPD_1: | ||
149 | WREG32(R_007D00_DC_HOT_PLUG_DETECT1_CONTROL, | ||
150 | S_007D00_DC_HOT_PLUG_DETECT1_EN(0)); | ||
151 | rdev->irq.hpd[0] = false; | ||
152 | break; | ||
153 | case RADEON_HPD_2: | ||
154 | WREG32(R_007D10_DC_HOT_PLUG_DETECT2_CONTROL, | ||
155 | S_007D10_DC_HOT_PLUG_DETECT2_EN(0)); | ||
156 | rdev->irq.hpd[1] = false; | ||
157 | break; | ||
158 | default: | ||
159 | break; | ||
160 | } | ||
161 | } | ||
162 | } | ||
163 | |||
48 | /* | 164 | /* |
49 | * GART. | 165 | * GART. |
50 | */ | 166 | */ |
@@ -100,40 +216,40 @@ int rs600_gart_enable(struct radeon_device *rdev) | |||
100 | WREG32(R_00004C_BUS_CNTL, tmp); | 216 | WREG32(R_00004C_BUS_CNTL, tmp); |
101 | /* FIXME: setup default page */ | 217 | /* FIXME: setup default page */ |
102 | WREG32_MC(R_000100_MC_PT0_CNTL, | 218 | WREG32_MC(R_000100_MC_PT0_CNTL, |
103 | (S_000100_EFFECTIVE_L2_CACHE_SIZE(6) | | 219 | (S_000100_EFFECTIVE_L2_CACHE_SIZE(6) | |
104 | S_000100_EFFECTIVE_L2_QUEUE_SIZE(6))); | 220 | S_000100_EFFECTIVE_L2_QUEUE_SIZE(6))); |
221 | |||
105 | for (i = 0; i < 19; i++) { | 222 | for (i = 0; i < 19; i++) { |
106 | WREG32_MC(R_00016C_MC_PT0_CLIENT0_CNTL + i, | 223 | WREG32_MC(R_00016C_MC_PT0_CLIENT0_CNTL + i, |
107 | S_00016C_ENABLE_TRANSLATION_MODE_OVERRIDE(1) | | 224 | S_00016C_ENABLE_TRANSLATION_MODE_OVERRIDE(1) | |
108 | S_00016C_SYSTEM_ACCESS_MODE_MASK( | 225 | S_00016C_SYSTEM_ACCESS_MODE_MASK( |
109 | V_00016C_SYSTEM_ACCESS_MODE_IN_SYS) | | 226 | V_00016C_SYSTEM_ACCESS_MODE_NOT_IN_SYS) | |
110 | S_00016C_SYSTEM_APERTURE_UNMAPPED_ACCESS( | 227 | S_00016C_SYSTEM_APERTURE_UNMAPPED_ACCESS( |
111 | V_00016C_SYSTEM_APERTURE_UNMAPPED_DEFAULT_PAGE) | | 228 | V_00016C_SYSTEM_APERTURE_UNMAPPED_PASSTHROUGH) | |
112 | S_00016C_EFFECTIVE_L1_CACHE_SIZE(1) | | 229 | S_00016C_EFFECTIVE_L1_CACHE_SIZE(3) | |
113 | S_00016C_ENABLE_FRAGMENT_PROCESSING(1) | | 230 | S_00016C_ENABLE_FRAGMENT_PROCESSING(1) | |
114 | S_00016C_EFFECTIVE_L1_QUEUE_SIZE(1)); | 231 | S_00016C_EFFECTIVE_L1_QUEUE_SIZE(3)); |
115 | } | 232 | } |
116 | |||
117 | /* System context map to GART space */ | ||
118 | WREG32_MC(R_000112_MC_PT0_SYSTEM_APERTURE_LOW_ADDR, rdev->mc.gtt_start); | ||
119 | WREG32_MC(R_000114_MC_PT0_SYSTEM_APERTURE_HIGH_ADDR, rdev->mc.gtt_end); | ||
120 | |||
121 | /* enable first context */ | 233 | /* enable first context */ |
122 | WREG32_MC(R_00013C_MC_PT0_CONTEXT0_FLAT_START_ADDR, rdev->mc.gtt_start); | ||
123 | WREG32_MC(R_00014C_MC_PT0_CONTEXT0_FLAT_END_ADDR, rdev->mc.gtt_end); | ||
124 | WREG32_MC(R_000102_MC_PT0_CONTEXT0_CNTL, | 234 | WREG32_MC(R_000102_MC_PT0_CONTEXT0_CNTL, |
125 | S_000102_ENABLE_PAGE_TABLE(1) | | 235 | S_000102_ENABLE_PAGE_TABLE(1) | |
126 | S_000102_PAGE_TABLE_DEPTH(V_000102_PAGE_TABLE_FLAT)); | 236 | S_000102_PAGE_TABLE_DEPTH(V_000102_PAGE_TABLE_FLAT)); |
237 | |||
127 | /* disable all other contexts */ | 238 | /* disable all other contexts */ |
128 | for (i = 1; i < 8; i++) { | 239 | for (i = 1; i < 8; i++) |
129 | WREG32_MC(R_000102_MC_PT0_CONTEXT0_CNTL + i, 0); | 240 | WREG32_MC(R_000102_MC_PT0_CONTEXT0_CNTL + i, 0); |
130 | } | ||
131 | 241 | ||
132 | /* setup the page table */ | 242 | /* setup the page table */ |
133 | WREG32_MC(R_00012C_MC_PT0_CONTEXT0_FLAT_BASE_ADDR, | 243 | WREG32_MC(R_00012C_MC_PT0_CONTEXT0_FLAT_BASE_ADDR, |
134 | rdev->gart.table_addr); | 244 | rdev->gart.table_addr); |
245 | WREG32_MC(R_00013C_MC_PT0_CONTEXT0_FLAT_START_ADDR, rdev->mc.gtt_start); | ||
246 | WREG32_MC(R_00014C_MC_PT0_CONTEXT0_FLAT_END_ADDR, rdev->mc.gtt_end); | ||
135 | WREG32_MC(R_00011C_MC_PT0_CONTEXT0_DEFAULT_READ_ADDR, 0); | 247 | WREG32_MC(R_00011C_MC_PT0_CONTEXT0_DEFAULT_READ_ADDR, 0); |
136 | 248 | ||
249 | /* System context maps to VRAM space */ | ||
250 | WREG32_MC(R_000112_MC_PT0_SYSTEM_APERTURE_LOW_ADDR, rdev->mc.vram_start); | ||
251 | WREG32_MC(R_000114_MC_PT0_SYSTEM_APERTURE_HIGH_ADDR, rdev->mc.vram_end); | ||
252 | |||
137 | /* enable page tables */ | 253 | /* enable page tables */ |
138 | tmp = RREG32_MC(R_000100_MC_PT0_CNTL); | 254 | tmp = RREG32_MC(R_000100_MC_PT0_CNTL); |
139 | WREG32_MC(R_000100_MC_PT0_CNTL, (tmp | S_000100_ENABLE_PT(1))); | 255 | WREG32_MC(R_000100_MC_PT0_CNTL, (tmp | S_000100_ENABLE_PT(1))); |
@@ -146,15 +262,20 @@ int rs600_gart_enable(struct radeon_device *rdev) | |||
146 | 262 | ||
147 | void rs600_gart_disable(struct radeon_device *rdev) | 263 | void rs600_gart_disable(struct radeon_device *rdev) |
148 | { | 264 | { |
149 | uint32_t tmp; | 265 | u32 tmp; |
266 | int r; | ||
150 | 267 | ||
151 | /* FIXME: disable out of gart access */ | 268 | /* FIXME: disable out of gart access */ |
152 | WREG32_MC(R_000100_MC_PT0_CNTL, 0); | 269 | WREG32_MC(R_000100_MC_PT0_CNTL, 0); |
153 | tmp = RREG32_MC(R_000009_MC_CNTL1); | 270 | tmp = RREG32_MC(R_000009_MC_CNTL1); |
154 | WREG32_MC(R_000009_MC_CNTL1, tmp & C_000009_ENABLE_PAGE_TABLES); | 271 | WREG32_MC(R_000009_MC_CNTL1, tmp & C_000009_ENABLE_PAGE_TABLES); |
155 | if (rdev->gart.table.vram.robj) { | 272 | if (rdev->gart.table.vram.robj) { |
156 | radeon_object_kunmap(rdev->gart.table.vram.robj); | 273 | r = radeon_bo_reserve(rdev->gart.table.vram.robj, false); |
157 | radeon_object_unpin(rdev->gart.table.vram.robj); | 274 | if (r == 0) { |
275 | radeon_bo_kunmap(rdev->gart.table.vram.robj); | ||
276 | radeon_bo_unpin(rdev->gart.table.vram.robj); | ||
277 | radeon_bo_unreserve(rdev->gart.table.vram.robj); | ||
278 | } | ||
158 | } | 279 | } |
159 | } | 280 | } |
160 | 281 | ||
@@ -189,6 +310,10 @@ int rs600_irq_set(struct radeon_device *rdev) | |||
189 | { | 310 | { |
190 | uint32_t tmp = 0; | 311 | uint32_t tmp = 0; |
191 | uint32_t mode_int = 0; | 312 | uint32_t mode_int = 0; |
313 | u32 hpd1 = RREG32(R_007D08_DC_HOT_PLUG_DETECT1_INT_CONTROL) & | ||
314 | ~S_007D08_DC_HOT_PLUG_DETECT1_INT_EN(1); | ||
315 | u32 hpd2 = RREG32(R_007D18_DC_HOT_PLUG_DETECT2_INT_CONTROL) & | ||
316 | ~S_007D18_DC_HOT_PLUG_DETECT2_INT_EN(1); | ||
192 | 317 | ||
193 | if (rdev->irq.sw_int) { | 318 | if (rdev->irq.sw_int) { |
194 | tmp |= S_000040_SW_INT_EN(1); | 319 | tmp |= S_000040_SW_INT_EN(1); |
@@ -199,8 +324,16 @@ int rs600_irq_set(struct radeon_device *rdev) | |||
199 | if (rdev->irq.crtc_vblank_int[1]) { | 324 | if (rdev->irq.crtc_vblank_int[1]) { |
200 | mode_int |= S_006540_D2MODE_VBLANK_INT_MASK(1); | 325 | mode_int |= S_006540_D2MODE_VBLANK_INT_MASK(1); |
201 | } | 326 | } |
327 | if (rdev->irq.hpd[0]) { | ||
328 | hpd1 |= S_007D08_DC_HOT_PLUG_DETECT1_INT_EN(1); | ||
329 | } | ||
330 | if (rdev->irq.hpd[1]) { | ||
331 | hpd2 |= S_007D18_DC_HOT_PLUG_DETECT2_INT_EN(1); | ||
332 | } | ||
202 | WREG32(R_000040_GEN_INT_CNTL, tmp); | 333 | WREG32(R_000040_GEN_INT_CNTL, tmp); |
203 | WREG32(R_006540_DxMODE_INT_MASK, mode_int); | 334 | WREG32(R_006540_DxMODE_INT_MASK, mode_int); |
335 | WREG32(R_007D08_DC_HOT_PLUG_DETECT1_INT_CONTROL, hpd1); | ||
336 | WREG32(R_007D18_DC_HOT_PLUG_DETECT2_INT_CONTROL, hpd2); | ||
204 | return 0; | 337 | return 0; |
205 | } | 338 | } |
206 | 339 | ||
@@ -208,6 +341,7 @@ static inline uint32_t rs600_irq_ack(struct radeon_device *rdev, u32 *r500_disp_ | |||
208 | { | 341 | { |
209 | uint32_t irqs = RREG32(R_000044_GEN_INT_STATUS); | 342 | uint32_t irqs = RREG32(R_000044_GEN_INT_STATUS); |
210 | uint32_t irq_mask = ~C_000044_SW_INT; | 343 | uint32_t irq_mask = ~C_000044_SW_INT; |
344 | u32 tmp; | ||
211 | 345 | ||
212 | if (G_000044_DISPLAY_INT_STAT(irqs)) { | 346 | if (G_000044_DISPLAY_INT_STAT(irqs)) { |
213 | *r500_disp_int = RREG32(R_007EDC_DISP_INTERRUPT_STATUS); | 347 | *r500_disp_int = RREG32(R_007EDC_DISP_INTERRUPT_STATUS); |
@@ -219,6 +353,16 @@ static inline uint32_t rs600_irq_ack(struct radeon_device *rdev, u32 *r500_disp_ | |||
219 | WREG32(R_006D34_D2MODE_VBLANK_STATUS, | 353 | WREG32(R_006D34_D2MODE_VBLANK_STATUS, |
220 | S_006D34_D2MODE_VBLANK_ACK(1)); | 354 | S_006D34_D2MODE_VBLANK_ACK(1)); |
221 | } | 355 | } |
356 | if (G_007EDC_DC_HOT_PLUG_DETECT1_INTERRUPT(*r500_disp_int)) { | ||
357 | tmp = RREG32(R_007D08_DC_HOT_PLUG_DETECT1_INT_CONTROL); | ||
358 | tmp |= S_007D08_DC_HOT_PLUG_DETECT1_INT_ACK(1); | ||
359 | WREG32(R_007D08_DC_HOT_PLUG_DETECT1_INT_CONTROL, tmp); | ||
360 | } | ||
361 | if (G_007EDC_DC_HOT_PLUG_DETECT2_INTERRUPT(*r500_disp_int)) { | ||
362 | tmp = RREG32(R_007D18_DC_HOT_PLUG_DETECT2_INT_CONTROL); | ||
363 | tmp |= S_007D18_DC_HOT_PLUG_DETECT2_INT_ACK(1); | ||
364 | WREG32(R_007D18_DC_HOT_PLUG_DETECT2_INT_CONTROL, tmp); | ||
365 | } | ||
222 | } else { | 366 | } else { |
223 | *r500_disp_int = 0; | 367 | *r500_disp_int = 0; |
224 | } | 368 | } |
@@ -244,6 +388,7 @@ int rs600_irq_process(struct radeon_device *rdev) | |||
244 | { | 388 | { |
245 | uint32_t status, msi_rearm; | 389 | uint32_t status, msi_rearm; |
246 | uint32_t r500_disp_int; | 390 | uint32_t r500_disp_int; |
391 | bool queue_hotplug = false; | ||
247 | 392 | ||
248 | status = rs600_irq_ack(rdev, &r500_disp_int); | 393 | status = rs600_irq_ack(rdev, &r500_disp_int); |
249 | if (!status && !r500_disp_int) { | 394 | if (!status && !r500_disp_int) { |
@@ -258,8 +403,18 @@ int rs600_irq_process(struct radeon_device *rdev) | |||
258 | drm_handle_vblank(rdev->ddev, 0); | 403 | drm_handle_vblank(rdev->ddev, 0); |
259 | if (G_007EDC_LB_D2_VBLANK_INTERRUPT(r500_disp_int)) | 404 | if (G_007EDC_LB_D2_VBLANK_INTERRUPT(r500_disp_int)) |
260 | drm_handle_vblank(rdev->ddev, 1); | 405 | drm_handle_vblank(rdev->ddev, 1); |
406 | if (G_007EDC_DC_HOT_PLUG_DETECT1_INTERRUPT(r500_disp_int)) { | ||
407 | queue_hotplug = true; | ||
408 | DRM_DEBUG("HPD1\n"); | ||
409 | } | ||
410 | if (G_007EDC_DC_HOT_PLUG_DETECT2_INTERRUPT(r500_disp_int)) { | ||
411 | queue_hotplug = true; | ||
412 | DRM_DEBUG("HPD2\n"); | ||
413 | } | ||
261 | status = rs600_irq_ack(rdev, &r500_disp_int); | 414 | status = rs600_irq_ack(rdev, &r500_disp_int); |
262 | } | 415 | } |
416 | if (queue_hotplug) | ||
417 | queue_work(rdev->wq, &rdev->hotplug_work); | ||
263 | if (rdev->msi_enabled) { | 418 | if (rdev->msi_enabled) { |
264 | switch (rdev->family) { | 419 | switch (rdev->family) { |
265 | case CHIP_RS600: | 420 | case CHIP_RS600: |
@@ -301,9 +456,7 @@ int rs600_mc_wait_for_idle(struct radeon_device *rdev) | |||
301 | 456 | ||
302 | void rs600_gpu_init(struct radeon_device *rdev) | 457 | void rs600_gpu_init(struct radeon_device *rdev) |
303 | { | 458 | { |
304 | /* FIXME: HDP same place on rs600 ? */ | ||
305 | r100_hdp_reset(rdev); | 459 | r100_hdp_reset(rdev); |
306 | /* FIXME: is this correct ? */ | ||
307 | r420_pipes_init(rdev); | 460 | r420_pipes_init(rdev); |
308 | /* Wait for mc idle */ | 461 | /* Wait for mc idle */ |
309 | if (rs600_mc_wait_for_idle(rdev)) | 462 | if (rs600_mc_wait_for_idle(rdev)) |
@@ -312,9 +465,20 @@ void rs600_gpu_init(struct radeon_device *rdev) | |||
312 | 465 | ||
313 | void rs600_vram_info(struct radeon_device *rdev) | 466 | void rs600_vram_info(struct radeon_device *rdev) |
314 | { | 467 | { |
315 | /* FIXME: to do or is these values sane ? */ | ||
316 | rdev->mc.vram_is_ddr = true; | 468 | rdev->mc.vram_is_ddr = true; |
317 | rdev->mc.vram_width = 128; | 469 | rdev->mc.vram_width = 128; |
470 | |||
471 | rdev->mc.real_vram_size = RREG32(RADEON_CONFIG_MEMSIZE); | ||
472 | rdev->mc.mc_vram_size = rdev->mc.real_vram_size; | ||
473 | |||
474 | rdev->mc.aper_base = drm_get_resource_start(rdev->ddev, 0); | ||
475 | rdev->mc.aper_size = drm_get_resource_len(rdev->ddev, 0); | ||
476 | |||
477 | if (rdev->mc.mc_vram_size > rdev->mc.aper_size) | ||
478 | rdev->mc.mc_vram_size = rdev->mc.aper_size; | ||
479 | |||
480 | if (rdev->mc.real_vram_size > rdev->mc.aper_size) | ||
481 | rdev->mc.real_vram_size = rdev->mc.aper_size; | ||
318 | } | 482 | } |
319 | 483 | ||
320 | void rs600_bandwidth_update(struct radeon_device *rdev) | 484 | void rs600_bandwidth_update(struct radeon_device *rdev) |
@@ -388,7 +552,6 @@ static int rs600_startup(struct radeon_device *rdev) | |||
388 | if (r) | 552 | if (r) |
389 | return r; | 553 | return r; |
390 | /* Enable IRQ */ | 554 | /* Enable IRQ */ |
391 | rdev->irq.sw_int = true; | ||
392 | rs600_irq_set(rdev); | 555 | rs600_irq_set(rdev); |
393 | /* 1M ring buffer */ | 556 | /* 1M ring buffer */ |
394 | r = r100_cp_init(rdev, 1024 * 1024); | 557 | r = r100_cp_init(rdev, 1024 * 1024); |
@@ -423,6 +586,8 @@ int rs600_resume(struct radeon_device *rdev) | |||
423 | atom_asic_init(rdev->mode_info.atom_context); | 586 | atom_asic_init(rdev->mode_info.atom_context); |
424 | /* Resume clock after posting */ | 587 | /* Resume clock after posting */ |
425 | rv515_clock_startup(rdev); | 588 | rv515_clock_startup(rdev); |
589 | /* Initialize surface registers */ | ||
590 | radeon_surface_init(rdev); | ||
426 | return rs600_startup(rdev); | 591 | return rs600_startup(rdev); |
427 | } | 592 | } |
428 | 593 | ||
@@ -445,7 +610,7 @@ void rs600_fini(struct radeon_device *rdev) | |||
445 | rs600_gart_fini(rdev); | 610 | rs600_gart_fini(rdev); |
446 | radeon_irq_kms_fini(rdev); | 611 | radeon_irq_kms_fini(rdev); |
447 | radeon_fence_driver_fini(rdev); | 612 | radeon_fence_driver_fini(rdev); |
448 | radeon_object_fini(rdev); | 613 | radeon_bo_fini(rdev); |
449 | radeon_atombios_fini(rdev); | 614 | radeon_atombios_fini(rdev); |
450 | kfree(rdev->bios); | 615 | kfree(rdev->bios); |
451 | rdev->bios = NULL; | 616 | rdev->bios = NULL; |
@@ -482,10 +647,9 @@ int rs600_init(struct radeon_device *rdev) | |||
482 | RREG32(R_0007C0_CP_STAT)); | 647 | RREG32(R_0007C0_CP_STAT)); |
483 | } | 648 | } |
484 | /* check if cards are posted or not */ | 649 | /* check if cards are posted or not */ |
485 | if (!radeon_card_posted(rdev) && rdev->bios) { | 650 | if (radeon_boot_test_post_card(rdev) == false) |
486 | DRM_INFO("GPU not posted. posting now...\n"); | 651 | return -EINVAL; |
487 | atom_asic_init(rdev->mode_info.atom_context); | 652 | |
488 | } | ||
489 | /* Initialize clocks */ | 653 | /* Initialize clocks */ |
490 | radeon_get_clock_info(rdev->ddev); | 654 | radeon_get_clock_info(rdev->ddev); |
491 | /* Initialize power management */ | 655 | /* Initialize power management */ |
@@ -493,7 +657,7 @@ int rs600_init(struct radeon_device *rdev) | |||
493 | /* Get vram informations */ | 657 | /* Get vram informations */ |
494 | rs600_vram_info(rdev); | 658 | rs600_vram_info(rdev); |
495 | /* Initialize memory controller (also test AGP) */ | 659 | /* Initialize memory controller (also test AGP) */ |
496 | r = r420_mc_init(rdev); | 660 | r = rs600_mc_init(rdev); |
497 | if (r) | 661 | if (r) |
498 | return r; | 662 | return r; |
499 | rs600_debugfs(rdev); | 663 | rs600_debugfs(rdev); |
@@ -505,7 +669,7 @@ int rs600_init(struct radeon_device *rdev) | |||
505 | if (r) | 669 | if (r) |
506 | return r; | 670 | return r; |
507 | /* Memory manager */ | 671 | /* Memory manager */ |
508 | r = radeon_object_init(rdev); | 672 | r = radeon_bo_init(rdev); |
509 | if (r) | 673 | if (r) |
510 | return r; | 674 | return r; |
511 | r = rs600_gart_init(rdev); | 675 | r = rs600_gart_init(rdev); |