diff options
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_cp.c | 24 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_drv.h | 4 | ||||
-rw-r--r-- | include/drm/drm_pciids.h | 4 |
3 files changed, 23 insertions, 9 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_cp.c b/drivers/gpu/drm/radeon/radeon_cp.c index 6157cd4bb436..e6e0c2933efd 100644 --- a/drivers/gpu/drm/radeon/radeon_cp.c +++ b/drivers/gpu/drm/radeon/radeon_cp.c | |||
@@ -71,7 +71,8 @@ static u32 RS690_READ_MCIND(drm_radeon_private_t *dev_priv, int addr) | |||
71 | 71 | ||
72 | static u32 IGP_READ_MCIND(drm_radeon_private_t *dev_priv, int addr) | 72 | static u32 IGP_READ_MCIND(drm_radeon_private_t *dev_priv, int addr) |
73 | { | 73 | { |
74 | if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) | 74 | if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) || |
75 | ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS740)) | ||
75 | return RS690_READ_MCIND(dev_priv, addr); | 76 | return RS690_READ_MCIND(dev_priv, addr); |
76 | else | 77 | else |
77 | return RS480_READ_MCIND(dev_priv, addr); | 78 | return RS480_READ_MCIND(dev_priv, addr); |
@@ -82,7 +83,8 @@ u32 radeon_read_fb_location(drm_radeon_private_t *dev_priv) | |||
82 | 83 | ||
83 | if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515) | 84 | if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515) |
84 | return R500_READ_MCIND(dev_priv, RV515_MC_FB_LOCATION); | 85 | return R500_READ_MCIND(dev_priv, RV515_MC_FB_LOCATION); |
85 | else if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) | 86 | else if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) || |
87 | ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS740)) | ||
86 | return RS690_READ_MCIND(dev_priv, RS690_MC_FB_LOCATION); | 88 | return RS690_READ_MCIND(dev_priv, RS690_MC_FB_LOCATION); |
87 | else if ((dev_priv->flags & RADEON_FAMILY_MASK) > CHIP_RV515) | 89 | else if ((dev_priv->flags & RADEON_FAMILY_MASK) > CHIP_RV515) |
88 | return R500_READ_MCIND(dev_priv, R520_MC_FB_LOCATION); | 90 | return R500_READ_MCIND(dev_priv, R520_MC_FB_LOCATION); |
@@ -94,7 +96,8 @@ static void radeon_write_fb_location(drm_radeon_private_t *dev_priv, u32 fb_loc) | |||
94 | { | 96 | { |
95 | if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515) | 97 | if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515) |
96 | R500_WRITE_MCIND(RV515_MC_FB_LOCATION, fb_loc); | 98 | R500_WRITE_MCIND(RV515_MC_FB_LOCATION, fb_loc); |
97 | else if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) | 99 | else if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) || |
100 | ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS740)) | ||
98 | RS690_WRITE_MCIND(RS690_MC_FB_LOCATION, fb_loc); | 101 | RS690_WRITE_MCIND(RS690_MC_FB_LOCATION, fb_loc); |
99 | else if ((dev_priv->flags & RADEON_FAMILY_MASK) > CHIP_RV515) | 102 | else if ((dev_priv->flags & RADEON_FAMILY_MASK) > CHIP_RV515) |
100 | R500_WRITE_MCIND(R520_MC_FB_LOCATION, fb_loc); | 103 | R500_WRITE_MCIND(R520_MC_FB_LOCATION, fb_loc); |
@@ -106,7 +109,8 @@ static void radeon_write_agp_location(drm_radeon_private_t *dev_priv, u32 agp_lo | |||
106 | { | 109 | { |
107 | if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515) | 110 | if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515) |
108 | R500_WRITE_MCIND(RV515_MC_AGP_LOCATION, agp_loc); | 111 | R500_WRITE_MCIND(RV515_MC_AGP_LOCATION, agp_loc); |
109 | else if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) | 112 | else if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) || |
113 | ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS740)) | ||
110 | RS690_WRITE_MCIND(RS690_MC_AGP_LOCATION, agp_loc); | 114 | RS690_WRITE_MCIND(RS690_MC_AGP_LOCATION, agp_loc); |
111 | else if ((dev_priv->flags & RADEON_FAMILY_MASK) > CHIP_RV515) | 115 | else if ((dev_priv->flags & RADEON_FAMILY_MASK) > CHIP_RV515) |
112 | R500_WRITE_MCIND(R520_MC_AGP_LOCATION, agp_loc); | 116 | R500_WRITE_MCIND(R520_MC_AGP_LOCATION, agp_loc); |
@@ -122,7 +126,8 @@ static void radeon_write_agp_base(drm_radeon_private_t *dev_priv, u64 agp_base) | |||
122 | if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515) { | 126 | if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515) { |
123 | R500_WRITE_MCIND(RV515_MC_AGP_BASE, agp_base_lo); | 127 | R500_WRITE_MCIND(RV515_MC_AGP_BASE, agp_base_lo); |
124 | R500_WRITE_MCIND(RV515_MC_AGP_BASE_2, agp_base_hi); | 128 | R500_WRITE_MCIND(RV515_MC_AGP_BASE_2, agp_base_hi); |
125 | } else if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) { | 129 | } else if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) || |
130 | ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS740)) { | ||
126 | RS690_WRITE_MCIND(RS690_MC_AGP_BASE, agp_base_lo); | 131 | RS690_WRITE_MCIND(RS690_MC_AGP_BASE, agp_base_lo); |
127 | RS690_WRITE_MCIND(RS690_MC_AGP_BASE_2, agp_base_hi); | 132 | RS690_WRITE_MCIND(RS690_MC_AGP_BASE_2, agp_base_hi); |
128 | } else if ((dev_priv->flags & RADEON_FAMILY_MASK) > CHIP_RV515) { | 133 | } else if ((dev_priv->flags & RADEON_FAMILY_MASK) > CHIP_RV515) { |
@@ -364,8 +369,9 @@ static void radeon_cp_load_microcode(drm_radeon_private_t * dev_priv) | |||
364 | RADEON_WRITE(RADEON_CP_ME_RAM_DATAL, | 369 | RADEON_WRITE(RADEON_CP_ME_RAM_DATAL, |
365 | R420_cp_microcode[i][0]); | 370 | R420_cp_microcode[i][0]); |
366 | } | 371 | } |
367 | } else if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) { | 372 | } else if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) || |
368 | DRM_INFO("Loading RS690 Microcode\n"); | 373 | ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS740)) { |
374 | DRM_INFO("Loading RS690/RS740 Microcode\n"); | ||
369 | for (i = 0; i < 256; i++) { | 375 | for (i = 0; i < 256; i++) { |
370 | RADEON_WRITE(RADEON_CP_ME_RAM_DATAH, | 376 | RADEON_WRITE(RADEON_CP_ME_RAM_DATAH, |
371 | RS690_cp_microcode[i][1]); | 377 | RS690_cp_microcode[i][1]); |
@@ -720,7 +726,8 @@ static void radeon_set_igpgart(drm_radeon_private_t * dev_priv, int on) | |||
720 | dev_priv->gart_size); | 726 | dev_priv->gart_size); |
721 | 727 | ||
722 | temp = IGP_READ_MCIND(dev_priv, RS480_MC_MISC_CNTL); | 728 | temp = IGP_READ_MCIND(dev_priv, RS480_MC_MISC_CNTL); |
723 | if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) | 729 | if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) || |
730 | ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS740)) | ||
724 | IGP_WRITE_MCIND(RS480_MC_MISC_CNTL, (RS480_GART_INDEX_REG_EN | | 731 | IGP_WRITE_MCIND(RS480_MC_MISC_CNTL, (RS480_GART_INDEX_REG_EN | |
725 | RS690_BLOCK_GFX_D3_EN)); | 732 | RS690_BLOCK_GFX_D3_EN)); |
726 | else | 733 | else |
@@ -813,6 +820,7 @@ static void radeon_set_pcigart(drm_radeon_private_t * dev_priv, int on) | |||
813 | u32 tmp; | 820 | u32 tmp; |
814 | 821 | ||
815 | if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) || | 822 | if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) || |
823 | ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS740) || | ||
816 | (dev_priv->flags & RADEON_IS_IGPGART)) { | 824 | (dev_priv->flags & RADEON_IS_IGPGART)) { |
817 | radeon_set_igpgart(dev_priv, on); | 825 | radeon_set_igpgart(dev_priv, on); |
818 | return; | 826 | return; |
diff --git a/drivers/gpu/drm/radeon/radeon_drv.h b/drivers/gpu/drm/radeon/radeon_drv.h index d7e9c6cc6a1a..9d752bc0602b 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.h +++ b/drivers/gpu/drm/radeon/radeon_drv.h | |||
@@ -125,6 +125,7 @@ enum radeon_family { | |||
125 | CHIP_RV410, | 125 | CHIP_RV410, |
126 | CHIP_RS480, | 126 | CHIP_RS480, |
127 | CHIP_RS690, | 127 | CHIP_RS690, |
128 | CHIP_RS740, | ||
128 | CHIP_RV515, | 129 | CHIP_RV515, |
129 | CHIP_R520, | 130 | CHIP_R520, |
130 | CHIP_RV530, | 131 | CHIP_RV530, |
@@ -1207,7 +1208,8 @@ do { \ | |||
1207 | 1208 | ||
1208 | #define IGP_WRITE_MCIND(addr, val) \ | 1209 | #define IGP_WRITE_MCIND(addr, val) \ |
1209 | do { \ | 1210 | do { \ |
1210 | if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) \ | 1211 | if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) || \ |
1212 | ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS740)) \ | ||
1211 | RS690_WRITE_MCIND(addr, val); \ | 1213 | RS690_WRITE_MCIND(addr, val); \ |
1212 | else \ | 1214 | else \ |
1213 | RS480_WRITE_MCIND(addr, val); \ | 1215 | RS480_WRITE_MCIND(addr, val); \ |
diff --git a/include/drm/drm_pciids.h b/include/drm/drm_pciids.h index 135bd19499fc..e3a7b93fdefc 100644 --- a/include/drm/drm_pciids.h +++ b/include/drm/drm_pciids.h | |||
@@ -237,6 +237,10 @@ | |||
237 | {0x1002, 0x7835, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ | 237 | {0x1002, 0x7835, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ |
238 | {0x1002, 0x791e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS690|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ | 238 | {0x1002, 0x791e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS690|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ |
239 | {0x1002, 0x791f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS690|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ | 239 | {0x1002, 0x791f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS690|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ |
240 | {0x1002, 0x796c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ | ||
241 | {0x1002, 0x796d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ | ||
242 | {0x1002, 0x796e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ | ||
243 | {0x1002, 0x796f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS740|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \ | ||
240 | {0, 0, 0} | 244 | {0, 0, 0} |
241 | 245 | ||
242 | #define r128_PCI_IDS \ | 246 | #define r128_PCI_IDS \ |