File drivers/gpu/alga/amd/si/drv.c changed (mode: 100644) (index ba36e3c..4efeeae) |
49 |
49 |
#include "regs.h" |
#include "regs.h" |
50 |
50 |
|
|
51 |
51 |
bool fw_mc2 = 0; |
bool fw_mc2 = 0; |
|
52 |
|
bool no_dpm = 0; |
52 |
53 |
module_param(fw_mc2, bool, 0); |
module_param(fw_mc2, bool, 0); |
53 |
54 |
MODULE_PARM_DESC(fw_mc2, "enable the new memory controller firmware (breaks the 3D pipeline)"); |
MODULE_PARM_DESC(fw_mc2, "enable the new memory controller firmware (breaks the 3D pipeline)"); |
|
55 |
|
module_param(no_dpm, bool, 0); |
|
56 |
|
MODULE_PARM_DESC(no_dpm, "disable dynamic power management (end in power boot state which is not the highest)"); |
54 |
57 |
|
|
55 |
58 |
#define GPUS_MAX 256 |
#define GPUS_MAX 256 |
56 |
59 |
static DEFINE_IDA(ida); |
static DEFINE_IDA(ida); |
|
... |
... |
static void asic_deinit(struct pci_dev *dev) |
288 |
291 |
struct dev_drv_data *dd; |
struct dev_drv_data *dd; |
289 |
292 |
|
|
290 |
293 |
dd = pci_get_drvdata(dev); |
dd = pci_get_drvdata(dev); |
291 |
|
|
|
292 |
|
dyn_pm_dis(dev); |
|
|
294 |
|
|
|
295 |
|
if (!no_dpm) |
|
296 |
|
dyn_pm_dis(dev); |
293 |
297 |
dmas_stop(dev); |
dmas_stop(dev); |
294 |
298 |
cps_engines_stop(dev); |
cps_engines_stop(dev); |
295 |
|
vg_dis(dev); |
|
296 |
|
cg_dis(dev); |
|
|
299 |
|
if (!no_dpm) { |
|
300 |
|
vg_dis(dev); |
|
301 |
|
cg_dis(dev); |
|
302 |
|
} |
297 |
303 |
ih_dis(dev); |
ih_dis(dev); |
298 |
304 |
ih_reset(dev); |
ih_reset(dev); |
299 |
305 |
mdelay(1); |
mdelay(1); |
|
... |
... |
static long asic_init(struct pci_dev *dev) |
335 |
341 |
dev_info(&dev->dev, "vram size is %uMB\n", rr32(dev, CFG_MEM_SZ) |
dev_info(&dev->dev, "vram size is %uMB\n", rr32(dev, CFG_MEM_SZ) |
336 |
342 |
& 0xffff); |
& 0xffff); |
337 |
343 |
|
|
338 |
|
r = dyn_pm_ena(dev); |
|
339 |
|
if (r == -SI_ERR) |
|
340 |
|
goto err; |
|
|
344 |
|
if (!no_dpm) { |
|
345 |
|
r = dyn_pm_ena(dev); |
|
346 |
|
if (r == -SI_ERR) |
|
347 |
|
goto err; |
|
348 |
|
} |
341 |
349 |
|
|
342 |
350 |
/* claim back the 256k vga memory at vram beginning */ |
/* claim back the 256k vga memory at vram beginning */ |
343 |
351 |
dce6_vga_off(dd->dce); |
dce6_vga_off(dd->dce); |
|
... |
... |
static long asic_init(struct pci_dev *dev) |
411 |
419 |
gpu_3d_ring_intr_idle_dis(dev); |
gpu_3d_ring_intr_idle_dis(dev); |
412 |
420 |
rlc_serdes_wait(dev); |
rlc_serdes_wait(dev); |
413 |
421 |
rlc_reset(dev); |
rlc_reset(dev); |
414 |
|
vg_ena(dev);/* currently empty */ |
|
415 |
|
cg_ena(dev); |
|
|
422 |
|
if (!no_dpm) { |
|
423 |
|
vg_ena(dev);/* currently empty */ |
|
424 |
|
cg_ena(dev); |
|
425 |
|
} |
416 |
426 |
rlc_ucode_program(dev); |
rlc_ucode_program(dev); |
417 |
|
if (mc_lb_pwr_supported(dev)) { |
|
418 |
|
rlc_lb_pw_ena(dev); |
|
419 |
|
} else { |
|
420 |
|
rlc_lb_pw_dis(dev); |
|
421 |
|
gpu_lb_pw_dis(dev); |
|
|
427 |
|
if (!no_dpm) { |
|
428 |
|
if (mc_lb_pwr_supported(dev)) { |
|
429 |
|
rlc_lb_pw_ena(dev); |
|
430 |
|
} else { |
|
431 |
|
rlc_lb_pw_dis(dev); |
|
432 |
|
gpu_lb_pw_dis(dev); |
|
433 |
|
} |
422 |
434 |
} |
} |
423 |
435 |
rlc_ena(dev); |
rlc_ena(dev); |
424 |
436 |
gpu_3d_ring_intr_idle_ena(dev); |
gpu_3d_ring_intr_idle_ena(dev); |
|
... |
... |
err_stop_dmas: |
449 |
461 |
dmas_stop(dev); |
dmas_stop(dev); |
450 |
462 |
|
|
451 |
463 |
cps_engines_stop(dev); |
cps_engines_stop(dev); |
452 |
|
vg_dis(dev); |
|
453 |
|
cg_dis(dev); |
|
|
464 |
|
if (!no_dpm) { |
|
465 |
|
vg_dis(dev); |
|
466 |
|
cg_dis(dev); |
|
467 |
|
} |
454 |
468 |
ih_dis(dev); |
ih_dis(dev); |
455 |
469 |
ih_reset(dev); |
ih_reset(dev); |
456 |
470 |
mdelay(1); |
mdelay(1); |