File tree Expand file tree Collapse file tree 2 files changed +30
-0
lines changed
Expand file tree Collapse file tree 2 files changed +30
-0
lines changed Original file line number Diff line number Diff line change @@ -41,6 +41,31 @@ static void evergreen_gpu_init(struct radeon_device *rdev);
4141void evergreen_fini (struct radeon_device * rdev );
4242static void evergreen_pcie_gen2_enable (struct radeon_device * rdev );
4343
44+ void evergreen_fix_pci_max_read_req_size (struct radeon_device * rdev )
45+ {
46+ u16 ctl , v ;
47+ int cap , err ;
48+
49+ cap = pci_pcie_cap (rdev -> pdev );
50+ if (!cap )
51+ return ;
52+
53+ err = pci_read_config_word (rdev -> pdev , cap + PCI_EXP_DEVCTL , & ctl );
54+ if (err )
55+ return ;
56+
57+ v = (ctl & PCI_EXP_DEVCTL_READRQ ) >> 12 ;
58+
59+ /* if bios or OS sets MAX_READ_REQUEST_SIZE to an invalid value, fix it
60+ * to avoid hangs or perfomance issues
61+ */
62+ if ((v == 0 ) || (v == 6 ) || (v == 7 )) {
63+ ctl &= ~PCI_EXP_DEVCTL_READRQ ;
64+ ctl |= (2 << 12 );
65+ pci_write_config_word (rdev -> pdev , cap + PCI_EXP_DEVCTL , ctl );
66+ }
67+ }
68+
4469void evergreen_pre_page_flip (struct radeon_device * rdev , int crtc )
4570{
4671 /* enable the pflip int */
@@ -1863,6 +1888,8 @@ static void evergreen_gpu_init(struct radeon_device *rdev)
18631888
18641889 WREG32 (GRBM_CNTL , GRBM_READ_TIMEOUT (0xff ));
18651890
1891+ evergreen_fix_pci_max_read_req_size (rdev );
1892+
18661893 cc_gc_shader_pipe_config = RREG32 (CC_GC_SHADER_PIPE_CONFIG ) & ~2 ;
18671894
18681895 cc_gc_shader_pipe_config |=
Original file line number Diff line number Diff line change @@ -39,6 +39,7 @@ extern int evergreen_mc_wait_for_idle(struct radeon_device *rdev);
3939extern void evergreen_mc_program (struct radeon_device * rdev );
4040extern void evergreen_irq_suspend (struct radeon_device * rdev );
4141extern int evergreen_mc_init (struct radeon_device * rdev );
42+ extern void evergreen_fix_pci_max_read_req_size (struct radeon_device * rdev );
4243
4344#define EVERGREEN_PFP_UCODE_SIZE 1120
4445#define EVERGREEN_PM4_UCODE_SIZE 1376
@@ -669,6 +670,8 @@ static void cayman_gpu_init(struct radeon_device *rdev)
669670
670671 WREG32 (GRBM_CNTL , GRBM_READ_TIMEOUT (0xff ));
671672
673+ evergreen_fix_pci_max_read_req_size (rdev );
674+
672675 mc_shared_chmap = RREG32 (MC_SHARED_CHMAP );
673676 mc_arb_ramcfg = RREG32 (MC_ARB_RAMCFG );
674677
You can’t perform that action at this time.
0 commit comments