Commit 73c6c7fb authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6

* 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6:
  drm/radeon/kms: add FireMV 2400 PCI ID.
  drm/radeon/kms: allow R500 regs VAP_ALT_NUM_VERTICES and VAP_INDEX_OFFSET
  drivers/gpu/radeon: Add MSPOS regs to safe list.
  drm/radeon/kms: disable the tv encoder when tv/cv is not in use
  drm/radeon/kms: adjust pll settings for tv
  drm/radeon/kms: fix tv dac conflict resolver
  drm/radeon/kms/evergreen: don't enable hdmi audio stuff
  drm/radeon/kms/atom: fix dual-link DVI on DCE3.2/4.0
  drm/radeon/kms: fix rs600 tlb flush
  drm/radeon/kms: print GPU family and device id when loading
  drm/radeon/kms: fix calculation of mipmapped 3D texture sizes
  drm/radeon/kms: only change mode when coherent value changes.
  drm/radeon/kms: more atom parser fixes (v2)
parents eb3e5cce 79b9517a
...@@ -908,11 +908,16 @@ static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg) ...@@ -908,11 +908,16 @@ static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg)
uint8_t attr = U8((*ptr)++), shift; uint8_t attr = U8((*ptr)++), shift;
uint32_t saved, dst; uint32_t saved, dst;
int dptr = *ptr; int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
SDEBUG(" dst: "); SDEBUG(" dst: ");
dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1);
/* op needs to full dst value */
dst = saved;
shift = atom_get_src(ctx, attr, ptr); shift = atom_get_src(ctx, attr, ptr);
SDEBUG(" shift: %d\n", shift); SDEBUG(" shift: %d\n", shift);
dst <<= shift; dst <<= shift;
dst &= atom_arg_mask[dst_align];
dst >>= atom_arg_shift[dst_align];
SDEBUG(" dst: "); SDEBUG(" dst: ");
atom_put_dst(ctx, arg, attr, &dptr, dst, saved); atom_put_dst(ctx, arg, attr, &dptr, dst, saved);
} }
...@@ -922,11 +927,16 @@ static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg) ...@@ -922,11 +927,16 @@ static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg)
uint8_t attr = U8((*ptr)++), shift; uint8_t attr = U8((*ptr)++), shift;
uint32_t saved, dst; uint32_t saved, dst;
int dptr = *ptr; int dptr = *ptr;
uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3];
SDEBUG(" dst: "); SDEBUG(" dst: ");
dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1);
/* op needs to full dst value */
dst = saved;
shift = atom_get_src(ctx, attr, ptr); shift = atom_get_src(ctx, attr, ptr);
SDEBUG(" shift: %d\n", shift); SDEBUG(" shift: %d\n", shift);
dst >>= shift; dst >>= shift;
dst &= atom_arg_mask[dst_align];
dst >>= atom_arg_shift[dst_align];
SDEBUG(" dst: "); SDEBUG(" dst: ");
atom_put_dst(ctx, arg, attr, &dptr, dst, saved); atom_put_dst(ctx, arg, attr, &dptr, dst, saved);
} }
......
...@@ -521,6 +521,10 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc, ...@@ -521,6 +521,10 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
/* DVO wants 2x pixel clock if the DVO chip is in 12 bit mode */ /* DVO wants 2x pixel clock if the DVO chip is in 12 bit mode */
if (radeon_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1) if (radeon_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1)
adjusted_clock = mode->clock * 2; adjusted_clock = mode->clock * 2;
if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT)) {
pll->algo = PLL_ALGO_LEGACY;
pll->flags |= RADEON_PLL_PREFER_CLOSEST_LOWER;
}
} else { } else {
if (encoder->encoder_type != DRM_MODE_ENCODER_DAC) if (encoder->encoder_type != DRM_MODE_ENCODER_DAC)
pll->flags |= RADEON_PLL_NO_ODD_POST_DIV; pll->flags |= RADEON_PLL_NO_ODD_POST_DIV;
......
...@@ -2891,7 +2891,7 @@ static int r100_cs_track_texture_check(struct radeon_device *rdev, ...@@ -2891,7 +2891,7 @@ static int r100_cs_track_texture_check(struct radeon_device *rdev,
{ {
struct radeon_bo *robj; struct radeon_bo *robj;
unsigned long size; unsigned long size;
unsigned u, i, w, h; unsigned u, i, w, h, d;
int ret; int ret;
for (u = 0; u < track->num_texture; u++) { for (u = 0; u < track->num_texture; u++) {
...@@ -2923,20 +2923,25 @@ static int r100_cs_track_texture_check(struct radeon_device *rdev, ...@@ -2923,20 +2923,25 @@ static int r100_cs_track_texture_check(struct radeon_device *rdev,
h = h / (1 << i); h = h / (1 << i);
if (track->textures[u].roundup_h) if (track->textures[u].roundup_h)
h = roundup_pow_of_two(h); h = roundup_pow_of_two(h);
if (track->textures[u].tex_coord_type == 1) {
d = (1 << track->textures[u].txdepth) / (1 << i);
if (!d)
d = 1;
} else {
d = 1;
}
if (track->textures[u].compress_format) { if (track->textures[u].compress_format) {
size += r100_track_compress_size(track->textures[u].compress_format, w, h); size += r100_track_compress_size(track->textures[u].compress_format, w, h) * d;
/* compressed textures are block based */ /* compressed textures are block based */
} else } else
size += w * h; size += w * h * d;
} }
size *= track->textures[u].cpp; size *= track->textures[u].cpp;
switch (track->textures[u].tex_coord_type) { switch (track->textures[u].tex_coord_type) {
case 0: case 0:
break;
case 1: case 1:
size *= (1 << track->textures[u].txdepth);
break; break;
case 2: case 2:
if (track->separate_cube) { if (track->separate_cube) {
...@@ -3007,7 +3012,11 @@ int r100_cs_track_check(struct radeon_device *rdev, struct r100_cs_track *track) ...@@ -3007,7 +3012,11 @@ int r100_cs_track_check(struct radeon_device *rdev, struct r100_cs_track *track)
} }
} }
prim_walk = (track->vap_vf_cntl >> 4) & 0x3; prim_walk = (track->vap_vf_cntl >> 4) & 0x3;
if (track->vap_vf_cntl & (1 << 14)) {
nverts = track->vap_alt_nverts;
} else {
nverts = (track->vap_vf_cntl >> 16) & 0xFFFF; nverts = (track->vap_vf_cntl >> 16) & 0xFFFF;
}
switch (prim_walk) { switch (prim_walk) {
case 1: case 1:
for (i = 0; i < track->num_arrays; i++) { for (i = 0; i < track->num_arrays; i++) {
......
...@@ -64,6 +64,7 @@ struct r100_cs_track { ...@@ -64,6 +64,7 @@ struct r100_cs_track {
unsigned maxy; unsigned maxy;
unsigned vtx_size; unsigned vtx_size;
unsigned vap_vf_cntl; unsigned vap_vf_cntl;
unsigned vap_alt_nverts;
unsigned immd_dwords; unsigned immd_dwords;
unsigned num_arrays; unsigned num_arrays;
unsigned max_indx; unsigned max_indx;
......
...@@ -730,6 +730,12 @@ static int r300_packet0_check(struct radeon_cs_parser *p, ...@@ -730,6 +730,12 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
/* VAP_VF_MAX_VTX_INDX */ /* VAP_VF_MAX_VTX_INDX */
track->max_indx = idx_value & 0x00FFFFFFUL; track->max_indx = idx_value & 0x00FFFFFFUL;
break; break;
case 0x2088:
/* VAP_ALT_NUM_VERTICES - only valid on r500 */
if (p->rdev->family < CHIP_RV515)
goto fail;
track->vap_alt_nverts = idx_value & 0xFFFFFF;
break;
case 0x43E4: case 0x43E4:
/* SC_SCISSOR1 */ /* SC_SCISSOR1 */
track->maxy = ((idx_value >> 13) & 0x1FFF) + 1; track->maxy = ((idx_value >> 13) & 0x1FFF) + 1;
...@@ -767,7 +773,6 @@ static int r300_packet0_check(struct radeon_cs_parser *p, ...@@ -767,7 +773,6 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
tmp = idx_value & ~(0x7 << 16); tmp = idx_value & ~(0x7 << 16);
tmp |= tile_flags; tmp |= tile_flags;
ib[idx] = tmp; ib[idx] = tmp;
i = (reg - 0x4E38) >> 2; i = (reg - 0x4E38) >> 2;
track->cb[i].pitch = idx_value & 0x3FFE; track->cb[i].pitch = idx_value & 0x3FFE;
switch (((idx_value >> 21) & 0xF)) { switch (((idx_value >> 21) & 0xF)) {
...@@ -1052,11 +1057,13 @@ static int r300_packet0_check(struct radeon_cs_parser *p, ...@@ -1052,11 +1057,13 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
break; break;
/* fallthrough do not move */ /* fallthrough do not move */
default: default:
goto fail;
}
return 0;
fail:
printk(KERN_ERR "Forbidden register 0x%04X in cs at %d\n", printk(KERN_ERR "Forbidden register 0x%04X in cs at %d\n",
reg, idx); reg, idx);
return -EINVAL; return -EINVAL;
}
return 0;
} }
static int r300_packet3_check(struct radeon_cs_parser *p, static int r300_packet3_check(struct radeon_cs_parser *p,
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
*/ */
static int r600_audio_chipset_supported(struct radeon_device *rdev) static int r600_audio_chipset_supported(struct radeon_device *rdev)
{ {
return rdev->family >= CHIP_R600 return (rdev->family >= CHIP_R600 && rdev->family < CHIP_CEDAR)
|| rdev->family == CHIP_RS600 || rdev->family == CHIP_RS600
|| rdev->family == CHIP_RS690 || rdev->family == CHIP_RS690
|| rdev->family == CHIP_RS740; || rdev->family == CHIP_RS740;
......
...@@ -314,6 +314,9 @@ void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mod ...@@ -314,6 +314,9 @@ void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mod
struct radeon_device *rdev = dev->dev_private; struct radeon_device *rdev = dev->dev_private;
uint32_t offset = to_radeon_encoder(encoder)->hdmi_offset; uint32_t offset = to_radeon_encoder(encoder)->hdmi_offset;
if (ASIC_IS_DCE4(rdev))
return;
if (!offset) if (!offset)
return; return;
...@@ -484,6 +487,9 @@ void r600_hdmi_enable(struct drm_encoder *encoder) ...@@ -484,6 +487,9 @@ void r600_hdmi_enable(struct drm_encoder *encoder)
struct radeon_device *rdev = dev->dev_private; struct radeon_device *rdev = dev->dev_private;
struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
if (ASIC_IS_DCE4(rdev))
return;
if (!radeon_encoder->hdmi_offset) { if (!radeon_encoder->hdmi_offset) {
r600_hdmi_assign_block(encoder); r600_hdmi_assign_block(encoder);
if (!radeon_encoder->hdmi_offset) { if (!radeon_encoder->hdmi_offset) {
...@@ -525,6 +531,9 @@ void r600_hdmi_disable(struct drm_encoder *encoder) ...@@ -525,6 +531,9 @@ void r600_hdmi_disable(struct drm_encoder *encoder)
struct radeon_device *rdev = dev->dev_private; struct radeon_device *rdev = dev->dev_private;
struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
if (ASIC_IS_DCE4(rdev))
return;
if (!radeon_encoder->hdmi_offset) { if (!radeon_encoder->hdmi_offset) {
dev_err(rdev->dev, "Disabling not enabled HDMI\n"); dev_err(rdev->dev, "Disabling not enabled HDMI\n");
return; return;
......
...@@ -162,12 +162,14 @@ radeon_connector_analog_encoder_conflict_solve(struct drm_connector *connector, ...@@ -162,12 +162,14 @@ radeon_connector_analog_encoder_conflict_solve(struct drm_connector *connector,
{ {
struct drm_device *dev = connector->dev; struct drm_device *dev = connector->dev;
struct drm_connector *conflict; struct drm_connector *conflict;
struct radeon_connector *radeon_conflict;
int i; int i;
list_for_each_entry(conflict, &dev->mode_config.connector_list, head) { list_for_each_entry(conflict, &dev->mode_config.connector_list, head) {
if (conflict == connector) if (conflict == connector)
continue; continue;
radeon_conflict = to_radeon_connector(conflict);
for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
if (conflict->encoder_ids[i] == 0) if (conflict->encoder_ids[i] == 0)
break; break;
...@@ -177,6 +179,9 @@ radeon_connector_analog_encoder_conflict_solve(struct drm_connector *connector, ...@@ -177,6 +179,9 @@ radeon_connector_analog_encoder_conflict_solve(struct drm_connector *connector,
if (conflict->status != connector_status_connected) if (conflict->status != connector_status_connected)
continue; continue;
if (radeon_conflict->use_digital)
continue;
if (priority == true) { if (priority == true) {
DRM_INFO("1: conflicting encoders switching off %s\n", drm_get_connector_name(conflict)); DRM_INFO("1: conflicting encoders switching off %s\n", drm_get_connector_name(conflict));
DRM_INFO("in favor of %s\n", drm_get_connector_name(connector)); DRM_INFO("in favor of %s\n", drm_get_connector_name(connector));
...@@ -287,6 +292,7 @@ int radeon_connector_set_property(struct drm_connector *connector, struct drm_pr ...@@ -287,6 +292,7 @@ int radeon_connector_set_property(struct drm_connector *connector, struct drm_pr
if (property == rdev->mode_info.coherent_mode_property) { if (property == rdev->mode_info.coherent_mode_property) {
struct radeon_encoder_atom_dig *dig; struct radeon_encoder_atom_dig *dig;
bool new_coherent_mode;
/* need to find digital encoder on connector */ /* need to find digital encoder on connector */
encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS); encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
...@@ -299,9 +305,12 @@ int radeon_connector_set_property(struct drm_connector *connector, struct drm_pr ...@@ -299,9 +305,12 @@ int radeon_connector_set_property(struct drm_connector *connector, struct drm_pr
return 0; return 0;
dig = radeon_encoder->enc_priv; dig = radeon_encoder->enc_priv;
dig->coherent_mode = val ? true : false; new_coherent_mode = val ? true : false;
if (dig->coherent_mode != new_coherent_mode) {
dig->coherent_mode = new_coherent_mode;
radeon_property_change_mode(&radeon_encoder->base); radeon_property_change_mode(&radeon_encoder->base);
} }
}
if (property == rdev->mode_info.tv_std_property) { if (property == rdev->mode_info.tv_std_property) {
encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TVDAC); encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TVDAC);
......
...@@ -36,6 +36,54 @@ ...@@ -36,6 +36,54 @@
#include "radeon.h" #include "radeon.h"
#include "atom.h" #include "atom.h"
static const char radeon_family_name[][16] = {
"R100",
"RV100",
"RS100",
"RV200",
"RS200",
"R200",
"RV250",
"RS300",
"RV280",
"R300",
"R350",
"RV350",
"RV380",
"R420",
"R423",
"RV410",
"RS400",
"RS480",
"RS600",
"RS690",
"RS740",
"RV515",
"R520",
"RV530",
"RV560",
"RV570",
"R580",
"R600",
"RV610",
"RV630",
"RV670",
"RV620",
"RV635",
"RS780",
"RS880",
"RV770",
"RV730",
"RV710",
"RV740",
"CEDAR",
"REDWOOD",
"JUNIPER",
"CYPRESS",
"HEMLOCK",
"LAST",
};
/* /*
* Clear GPU surface registers. * Clear GPU surface registers.
*/ */
...@@ -526,7 +574,6 @@ int radeon_device_init(struct radeon_device *rdev, ...@@ -526,7 +574,6 @@ int radeon_device_init(struct radeon_device *rdev,
int r; int r;
int dma_bits; int dma_bits;
DRM_INFO("radeon: Initializing kernel modesetting.\n");
rdev->shutdown = false; rdev->shutdown = false;
rdev->dev = &pdev->dev; rdev->dev = &pdev->dev;
rdev->ddev = ddev; rdev->ddev = ddev;
...@@ -538,6 +585,10 @@ int radeon_device_init(struct radeon_device *rdev, ...@@ -538,6 +585,10 @@ int radeon_device_init(struct radeon_device *rdev,
rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024; rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024;
rdev->gpu_lockup = false; rdev->gpu_lockup = false;
rdev->accel_working = false; rdev->accel_working = false;
DRM_INFO("initializing kernel modesetting (%s 0x%04X:0x%04X).\n",
radeon_family_name[rdev->family], pdev->vendor, pdev->device);
/* mutex initialization are all done here so we /* mutex initialization are all done here so we
* can recall function without having locking issues */ * can recall function without having locking issues */
mutex_init(&rdev->cs_mutex); mutex_init(&rdev->cs_mutex);
......
...@@ -43,9 +43,10 @@ ...@@ -43,9 +43,10 @@
* - 2.0.0 - initial interface * - 2.0.0 - initial interface
* - 2.1.0 - add square tiling interface * - 2.1.0 - add square tiling interface
* - 2.2.0 - add r6xx/r7xx const buffer support * - 2.2.0 - add r6xx/r7xx const buffer support
* - 2.3.0 - add MSPOS + 3D texture + r500 VAP regs
*/ */
#define KMS_DRIVER_MAJOR 2 #define KMS_DRIVER_MAJOR 2
#define KMS_DRIVER_MINOR 2 #define KMS_DRIVER_MINOR 3
#define KMS_DRIVER_PATCHLEVEL 0 #define KMS_DRIVER_PATCHLEVEL 0
int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags); int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);
int radeon_driver_unload_kms(struct drm_device *dev); int radeon_driver_unload_kms(struct drm_device *dev);
......
...@@ -865,6 +865,8 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t ...@@ -865,6 +865,8 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t
else if (radeon_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) { else if (radeon_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) {
if (dig->coherent_mode) if (dig->coherent_mode)
args.v3.acConfig.fCoherentMode = 1; args.v3.acConfig.fCoherentMode = 1;
if (radeon_encoder->pixel_clock > 165000)
args.v3.acConfig.fDualLinkConnector = 1;
} }
} else if (ASIC_IS_DCE32(rdev)) { } else if (ASIC_IS_DCE32(rdev)) {
args.v2.acConfig.ucEncoderSel = dig->dig_encoder; args.v2.acConfig.ucEncoderSel = dig->dig_encoder;
...@@ -888,6 +890,8 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t ...@@ -888,6 +890,8 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t
else if (radeon_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) { else if (radeon_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) {
if (dig->coherent_mode) if (dig->coherent_mode)
args.v2.acConfig.fCoherentMode = 1; args.v2.acConfig.fCoherentMode = 1;
if (radeon_encoder->pixel_clock > 165000)
args.v2.acConfig.fDualLinkConnector = 1;
} }
} else { } else {
args.v1.ucConfig = ATOM_TRANSMITTER_CONFIG_CLKSRC_PPLL; args.v1.ucConfig = ATOM_TRANSMITTER_CONFIG_CLKSRC_PPLL;
...@@ -1373,8 +1377,12 @@ radeon_atom_encoder_mode_set(struct drm_encoder *encoder, ...@@ -1373,8 +1377,12 @@ radeon_atom_encoder_mode_set(struct drm_encoder *encoder,
case ENCODER_OBJECT_ID_INTERNAL_DAC2: case ENCODER_OBJECT_ID_INTERNAL_DAC2:
case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2: case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2:
atombios_dac_setup(encoder, ATOM_ENABLE); atombios_dac_setup(encoder, ATOM_ENABLE);
if (radeon_encoder->devices & (ATOM_DEVICE_TV_SUPPORT | ATOM_DEVICE_CV_SUPPORT)) {
if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT | ATOM_DEVICE_CV_SUPPORT)) if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT | ATOM_DEVICE_CV_SUPPORT))
atombios_tv_setup(encoder, ATOM_ENABLE); atombios_tv_setup(encoder, ATOM_ENABLE);
else
atombios_tv_setup(encoder, ATOM_DISABLE);
}
break; break;
} }
atombios_apply_encoder_quirks(encoder, adjusted_mode); atombios_apply_encoder_quirks(encoder, adjusted_mode);
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
* Radeon chip families * Radeon chip families
*/ */
enum radeon_family { enum radeon_family {
CHIP_R100, CHIP_R100 = 0,
CHIP_RV100, CHIP_RV100,
CHIP_RS100, CHIP_RS100,
CHIP_RV200, CHIP_RV200,
...@@ -99,4 +99,5 @@ enum radeon_chip_flags { ...@@ -99,4 +99,5 @@ enum radeon_chip_flags {
RADEON_IS_PCI = 0x00800000UL, RADEON_IS_PCI = 0x00800000UL,
RADEON_IS_IGPGART = 0x01000000UL, RADEON_IS_IGPGART = 0x01000000UL,
}; };
#endif #endif
...@@ -125,6 +125,8 @@ r300 0x4f60 ...@@ -125,6 +125,8 @@ r300 0x4f60
0x4000 GB_VAP_RASTER_VTX_FMT_0 0x4000 GB_VAP_RASTER_VTX_FMT_0
0x4004 GB_VAP_RASTER_VTX_FMT_1 0x4004 GB_VAP_RASTER_VTX_FMT_1
0x4008 GB_ENABLE 0x4008 GB_ENABLE
0x4010 GB_MSPOS0
0x4014 GB_MSPOS1
0x401C GB_SELECT 0x401C GB_SELECT
0x4020 GB_AA_CONFIG 0x4020 GB_AA_CONFIG
0x4024 GB_FIFO_SIZE 0x4024 GB_FIFO_SIZE
......
...@@ -125,6 +125,8 @@ r420 0x4f60 ...@@ -125,6 +125,8 @@ r420 0x4f60
0x4000 GB_VAP_RASTER_VTX_FMT_0 0x4000 GB_VAP_RASTER_VTX_FMT_0
0x4004 GB_VAP_RASTER_VTX_FMT_1 0x4004 GB_VAP_RASTER_VTX_FMT_1
0x4008 GB_ENABLE 0x4008 GB_ENABLE
0x4010 GB_MSPOS0
0x4014 GB_MSPOS1
0x401C GB_SELECT 0x401C GB_SELECT
0x4020 GB_AA_CONFIG 0x4020 GB_AA_CONFIG
0x4024 GB_FIFO_SIZE 0x4024 GB_FIFO_SIZE
......
...@@ -125,6 +125,8 @@ rs600 0x6d40 ...@@ -125,6 +125,8 @@ rs600 0x6d40
0x4000 GB_VAP_RASTER_VTX_FMT_0 0x4000 GB_VAP_RASTER_VTX_FMT_0
0x4004 GB_VAP_RASTER_VTX_FMT_1 0x4004 GB_VAP_RASTER_VTX_FMT_1
0x4008 GB_ENABLE 0x4008 GB_ENABLE
0x4010 GB_MSPOS0
0x4014 GB_MSPOS1
0x401C GB_SELECT 0x401C GB_SELECT
0x4020 GB_AA_CONFIG 0x4020 GB_AA_CONFIG
0x4024 GB_FIFO_SIZE 0x4024 GB_FIFO_SIZE
......
...@@ -35,6 +35,7 @@ rv515 0x6d40 ...@@ -35,6 +35,7 @@ rv515 0x6d40
0x1DA8 VAP_VPORT_ZSCALE 0x1DA8 VAP_VPORT_ZSCALE
0x1DAC VAP_VPORT_ZOFFSET 0x1DAC VAP_VPORT_ZOFFSET
0x2080 VAP_CNTL 0x2080 VAP_CNTL
0x208C VAP_INDEX_OFFSET
0x2090 VAP_OUT_VTX_FMT_0 0x2090 VAP_OUT_VTX_FMT_0
0x2094 VAP_OUT_VTX_FMT_1 0x2094 VAP_OUT_VTX_FMT_1
0x20B0 VAP_VTE_CNTL 0x20B0 VAP_VTE_CNTL
...@@ -158,6 +159,8 @@ rv515 0x6d40 ...@@ -158,6 +159,8 @@ rv515 0x6d40
0x4000 GB_VAP_RASTER_VTX_FMT_0 0x4000 GB_VAP_RASTER_VTX_FMT_0
0x4004 GB_VAP_RASTER_VTX_FMT_1 0x4004 GB_VAP_RASTER_VTX_FMT_1
0x4008 GB_ENABLE 0x4008 GB_ENABLE
0x4010 GB_MSPOS0
0x4014 GB_MSPOS1
0x401C GB_SELECT 0x401C GB_SELECT
0x4020 GB_AA_CONFIG 0x4020 GB_AA_CONFIG
0x4024 GB_FIFO_SIZE 0x4024 GB_FIFO_SIZE
......
...@@ -159,7 +159,7 @@ void rs600_gart_tlb_flush(struct radeon_device *rdev) ...@@ -159,7 +159,7 @@ void rs600_gart_tlb_flush(struct radeon_device *rdev)
WREG32_MC(R_000100_MC_PT0_CNTL, tmp); WREG32_MC(R_000100_MC_PT0_CNTL, tmp);
tmp = RREG32_MC(R_000100_MC_PT0_CNTL); tmp = RREG32_MC(R_000100_MC_PT0_CNTL);
tmp |= S_000100_INVALIDATE_ALL_L1_TLBS(1) & S_000100_INVALIDATE_L2_CACHE(1); tmp |= S_000100_INVALIDATE_ALL_L1_TLBS(1) | S_000100_INVALIDATE_L2_CACHE(1);
WREG32_MC(R_000100_MC_PT0_CNTL, tmp); WREG32_MC(R_000100_MC_PT0_CNTL, tmp);
tmp = RREG32_MC(R_000100_MC_PT0_CNTL); tmp = RREG32_MC(R_000100_MC_PT0_CNTL);
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
{0x1002, 0x3150, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \ {0x1002, 0x3150, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \
{0x1002, 0x3152, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x3152, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
{0x1002, 0x3154, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \ {0x1002, 0x3154, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
{0x1002, 0x3155, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
{0x1002, 0x3E50, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \ {0x1002, 0x3E50, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \
{0x1002, 0x3E54, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \ {0x1002, 0x3E54, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \
{0x1002, 0x4136, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS100|RADEON_IS_IGP}, \ {0x1002, 0x4136, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS100|RADEON_IS_IGP}, \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment