drm/radeon/kms: block RN50 from using 3D engine.
authorDave Airlie <airlied@linux.ie>
Mon, 13 Jul 2009 16:02:32 +0000 (02:02 +1000)
committerDave Airlie <airlied@redhat.com>
Wed, 15 Jul 2009 07:13:21 +0000 (17:13 +1000)
RN50/ES1000 is a cut-down rv100 chip used in the server market.
The 3D engine on these is either not there or unverified so refuse
any attempt to configure registers on it.

Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/radeon/r100.c
drivers/gpu/drm/radeon/radeon.h

index 97c9229b9299ce0fb0c2bb2b3139af306a2cb376..0d05909f03f655bdb8cf8412bac5d9d963c3885f 100644 (file)
@@ -973,6 +973,11 @@ static int r100_packet0_check(struct radeon_cs_parser *p,
                case R300_TX_OFFSET_0+52:
                case R300_TX_OFFSET_0+56:
                case R300_TX_OFFSET_0+60:
+                       /* rn50 has no 3D engine so fail on any 3d setup */
+                       if (ASIC_IS_RN50(p->rdev)) {
+                               DRM_ERROR("attempt to use RN50 3D engine failed\n");
+                               return -EINVAL;
+                       }
                        r = r100_cs_packet_next_reloc(p, &reloc);
                        if (r) {
                                DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
index 248e3341a984621f193fead3111473270afdfab8..7f007185e7f728b1061a337caa8873e5852cff02 100644 (file)
@@ -673,6 +673,8 @@ void r100_pll_errata_after_index(struct radeon_device *rdev);
 /*
  * ASICs helpers.
  */
+#define ASIC_IS_RN50(rdev) ((rdev->pdev->device == 0x515e) || \
+                           (rdev->pdev->device == 0x5969))
 #define ASIC_IS_RV100(rdev) ((rdev->family == CHIP_RV100) || \
                (rdev->family == CHIP_RV200) || \
                (rdev->family == CHIP_RS100) || \