diff options
| -rw-r--r-- | drivers/gpu/drm/radeon/r100.c | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/r100_track.h | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/r300.c | 15 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_drv.c | 3 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/reg_srcs/rv515 | 1 |
5 files changed, 20 insertions, 6 deletions
diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c index e40dbdc4ebb3..c06207e4085c 100644 --- a/drivers/gpu/drm/radeon/r100.c +++ b/drivers/gpu/drm/radeon/r100.c | |||
| @@ -3011,7 +3011,11 @@ int r100_cs_track_check(struct radeon_device *rdev, struct r100_cs_track *track) | |||
| 3011 | } | 3011 | } |
| 3012 | } | 3012 | } |
| 3013 | prim_walk = (track->vap_vf_cntl >> 4) & 0x3; | 3013 | prim_walk = (track->vap_vf_cntl >> 4) & 0x3; |
| 3014 | nverts = (track->vap_vf_cntl >> 16) & 0xFFFF; | 3014 | if (track->vap_vf_cntl & (1 << 14)) { |
| 3015 | nverts = track->vap_alt_nverts; | ||
| 3016 | } else { | ||
| 3017 | nverts = (track->vap_vf_cntl >> 16) & 0xFFFF; | ||
| 3018 | } | ||
| 3015 | switch (prim_walk) { | 3019 | switch (prim_walk) { |
| 3016 | case 1: | 3020 | case 1: |
| 3017 | for (i = 0; i < track->num_arrays; i++) { | 3021 | for (i = 0; i < track->num_arrays; i++) { |
diff --git a/drivers/gpu/drm/radeon/r100_track.h b/drivers/gpu/drm/radeon/r100_track.h index b27a6999d219..fadfe68de9cc 100644 --- a/drivers/gpu/drm/radeon/r100_track.h +++ b/drivers/gpu/drm/radeon/r100_track.h | |||
| @@ -64,6 +64,7 @@ struct r100_cs_track { | |||
| 64 | unsigned maxy; | 64 | unsigned maxy; |
| 65 | unsigned vtx_size; | 65 | unsigned vtx_size; |
| 66 | unsigned vap_vf_cntl; | 66 | unsigned vap_vf_cntl; |
| 67 | unsigned vap_alt_nverts; | ||
| 67 | unsigned immd_dwords; | 68 | unsigned immd_dwords; |
| 68 | unsigned num_arrays; | 69 | unsigned num_arrays; |
| 69 | unsigned max_indx; | 70 | unsigned max_indx; |
diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c index 0e9eb761a90f..2a9b59457556 100644 --- a/drivers/gpu/drm/radeon/r300.c +++ b/drivers/gpu/drm/radeon/r300.c | |||
| @@ -729,6 +729,12 @@ static int r300_packet0_check(struct radeon_cs_parser *p, | |||
| 729 | /* VAP_VF_MAX_VTX_INDX */ | 729 | /* VAP_VF_MAX_VTX_INDX */ |
| 730 | track->max_indx = idx_value & 0x00FFFFFFUL; | 730 | track->max_indx = idx_value & 0x00FFFFFFUL; |
| 731 | break; | 731 | break; |
| 732 | case 0x2088: | ||
| 733 | /* VAP_ALT_NUM_VERTICES - only valid on r500 */ | ||
| 734 | if (p->rdev->family < CHIP_RV515) | ||
| 735 | goto fail; | ||
| 736 | track->vap_alt_nverts = idx_value & 0xFFFFFF; | ||
| 737 | break; | ||
| 732 | case 0x43E4: | 738 | case 0x43E4: |
| 733 | /* SC_SCISSOR1 */ | 739 | /* SC_SCISSOR1 */ |
| 734 | track->maxy = ((idx_value >> 13) & 0x1FFF) + 1; | 740 | track->maxy = ((idx_value >> 13) & 0x1FFF) + 1; |
| @@ -766,7 +772,6 @@ static int r300_packet0_check(struct radeon_cs_parser *p, | |||
| 766 | tmp = idx_value & ~(0x7 << 16); | 772 | tmp = idx_value & ~(0x7 << 16); |
| 767 | tmp |= tile_flags; | 773 | tmp |= tile_flags; |
| 768 | ib[idx] = tmp; | 774 | ib[idx] = tmp; |
| 769 | |||
| 770 | i = (reg - 0x4E38) >> 2; | 775 | i = (reg - 0x4E38) >> 2; |
| 771 | track->cb[i].pitch = idx_value & 0x3FFE; | 776 | track->cb[i].pitch = idx_value & 0x3FFE; |
| 772 | switch (((idx_value >> 21) & 0xF)) { | 777 | switch (((idx_value >> 21) & 0xF)) { |
| @@ -1051,11 +1056,13 @@ static int r300_packet0_check(struct radeon_cs_parser *p, | |||
| 1051 | break; | 1056 | break; |
| 1052 | /* fallthrough do not move */ | 1057 | /* fallthrough do not move */ |
| 1053 | default: | 1058 | default: |
| 1054 | printk(KERN_ERR "Forbidden register 0x%04X in cs at %d\n", | 1059 | goto fail; |
| 1055 | reg, idx); | ||
| 1056 | return -EINVAL; | ||
| 1057 | } | 1060 | } |
| 1058 | return 0; | 1061 | return 0; |
| 1062 | fail: | ||
| 1063 | printk(KERN_ERR "Forbidden register 0x%04X in cs at %d\n", | ||
| 1064 | reg, idx); | ||
| 1065 | return -EINVAL; | ||
| 1059 | } | 1066 | } |
| 1060 | 1067 | ||
| 1061 | static int r300_packet3_check(struct radeon_cs_parser *p, | 1068 | static int r300_packet3_check(struct radeon_cs_parser *p, |
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c index 055a51732dcb..4b05563d99e1 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.c +++ b/drivers/gpu/drm/radeon/radeon_drv.c | |||
| @@ -43,9 +43,10 @@ | |||
| 43 | * - 2.0.0 - initial interface | 43 | * - 2.0.0 - initial interface |
| 44 | * - 2.1.0 - add square tiling interface | 44 | * - 2.1.0 - add square tiling interface |
| 45 | * - 2.2.0 - add r6xx/r7xx const buffer support | 45 | * - 2.2.0 - add r6xx/r7xx const buffer support |
| 46 | * - 2.3.0 - add MSPOS + 3D texture + r500 VAP regs | ||
| 46 | */ | 47 | */ |
| 47 | #define KMS_DRIVER_MAJOR 2 | 48 | #define KMS_DRIVER_MAJOR 2 |
| 48 | #define KMS_DRIVER_MINOR 2 | 49 | #define KMS_DRIVER_MINOR 3 |
| 49 | #define KMS_DRIVER_PATCHLEVEL 0 | 50 | #define KMS_DRIVER_PATCHLEVEL 0 |
| 50 | int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags); | 51 | int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags); |
| 51 | int radeon_driver_unload_kms(struct drm_device *dev); | 52 | int radeon_driver_unload_kms(struct drm_device *dev); |
diff --git a/drivers/gpu/drm/radeon/reg_srcs/rv515 b/drivers/gpu/drm/radeon/reg_srcs/rv515 index 7f44adaf22d2..1e46233985eb 100644 --- a/drivers/gpu/drm/radeon/reg_srcs/rv515 +++ b/drivers/gpu/drm/radeon/reg_srcs/rv515 | |||
| @@ -35,6 +35,7 @@ rv515 0x6d40 | |||
| 35 | 0x1DA8 VAP_VPORT_ZSCALE | 35 | 0x1DA8 VAP_VPORT_ZSCALE |
| 36 | 0x1DAC VAP_VPORT_ZOFFSET | 36 | 0x1DAC VAP_VPORT_ZOFFSET |
| 37 | 0x2080 VAP_CNTL | 37 | 0x2080 VAP_CNTL |
| 38 | 0x208C VAP_INDEX_OFFSET | ||
| 38 | 0x2090 VAP_OUT_VTX_FMT_0 | 39 | 0x2090 VAP_OUT_VTX_FMT_0 |
| 39 | 0x2094 VAP_OUT_VTX_FMT_1 | 40 | 0x2094 VAP_OUT_VTX_FMT_1 |
| 40 | 0x20B0 VAP_VTE_CNTL | 41 | 0x20B0 VAP_VTE_CNTL |
