brucech...@via.com.tw wrote:
> Hello Sirs:
>     This patch is to solve the video hang issue caused by verification 
> function. These 3 patches has been verified in (1) CX700M platform (2) CLE266 
> platform (3) K8M800 platform (4) CN400 platform with UniChrome/OpenChrome 
> driver except few of these platform is not supported by UniChrome such as 
> CX700 chipset.
>
> Signed-off-by Bruce C. Chang <brucech...@via.com.tw>
>
> diff -ruN old/drivers/gpu/drm/via/via_3d_reg.h 
> new/drivers/gpu/drm/via/via_3d_reg.h
> --- old/drivers/gpu/drm/via/via_3d_reg.h      2009-10-22 13:01:06.000000000 
> +0800
> +++ new/drivers/gpu/drm/via/via_3d_reg.h      2009-10-22 13:11:31.000000000 
> +0800
> @@ -1647,4 +1647,6 @@
>  #define VIA_VIDEO_HEADER6       0xFE050000
>  #define VIA_VIDEO_HEADER7       0xFE060000
>  #define VIA_VIDEOMASK           0xFFFF0000
> +#define INV_DUMMY_MASK               0xFF000000
> +#define HALCYON_HEADER_MASK     0xFE000000
>  #endif
> diff -ruN old/drivers/gpu/drm/via/via_verifier.c 
> new/drivers/gpu/drm/via/via_verifier.c
> --- old/drivers/gpu/drm/via/via_verifier.c    2009-10-22 13:01:06.000000000 
> +0800
> +++ new/drivers/gpu/drm/via/via_verifier.c    2009-10-22 13:05:49.000000000 
> +0800
> @@ -227,7 +227,10 @@
>       {0xf2, check_for_header2_err},
>       {0xf0, check_for_header1_err},
>       {0xcc, check_for_dummy},
> -     {0x00, check_number_texunits}
> +     {0x00, check_number_texunits},
> +     {0x01, no_check},
> +     {0x02, no_check},
> +     {0x03, no_check}
>  };
>  
>  static hazard_t table1[256];
> @@ -768,11 +771,12 @@
>               DRM_ERROR("Invalid VIDEO DMA command. "
>                         "Attempt to access 3D- or command burst area.\n");
>               return 1;
> -     } else if ((address > 0xCFF) && (address < 0x1300)) {
> +     } else if ((address > 0xDFF) && (address < 0x1200)) {
>               DRM_ERROR("Invalid VIDEO DMA command. "
>                         "Attempt to access PCI DMA area.\n");
>               return 1;
> -     } else if (address > 0x13FF) {
> +     } else if (((address > 0x13FF) && (address < 0x2200)) ||
> +             (address > 0x33ff)) {
>               DRM_ERROR("Invalid VIDEO DMA command. "
>                         "Attempt to access VGA registers.\n");
>               return 1;
> @@ -791,10 +795,11 @@
>               return 1;
>       }
>       while (dwords--) {
> -             if (*buf++) {
> +             if (*buf && !is_dummy_cmd(*buf)) {
>                       DRM_ERROR("Illegal video command tail.\n");
>                       return 1;
>               }
> +             buf++;
>       }
>       *buffer = buf;
>       return 0;
> diff -ruN old/drivers/gpu/drm/via/via_verifier.h 
> new/drivers/gpu/drm/via/via_verifier.h
> --- old/drivers/gpu/drm/via/via_verifier.h    2009-10-22 13:01:06.000000000 
> +0800
> +++ new/drivers/gpu/drm/via/via_verifier.h    2009-10-22 13:05:49.000000000 
> +0800
> @@ -25,7 +25,7 @@
>  
>  #ifndef _VIA_VERIFIER_H_
>  #define _VIA_VERIFIER_H_
> -
> +#include "via_3d_reg.h"
>  typedef enum {
>       no_sequence = 0,
>       z_address,
> @@ -59,4 +59,31 @@
>  extern int via_parse_command_stream(struct drm_device *dev, const uint32_t 
> *buf,
>                                   unsigned int size);
>  
> +static inline int is_agp_header(unsigned int data)
> +{
> +     if (data == HALCYON_HEADER2)
> +             return 1;
> +     else if ((data & VIA_VIDEOMASK) == VIA_VIDEO_HEADER5)
> +             ;
> +     else if ((data & VIA_VIDEOMASK) == VIA_VIDEO_HEADER6)
> +             ;
> +     else if ((data & HALCYON_HEADER_MASK) == HALCYON_HEADER1)
> +             ;
> +     else
> +             return 0;
> +
> +     return 1;
> +}
> +
> +static inline int is_dummy_cmd(uint32_t cmd)
> +{
> +             if ((cmd & INV_DUMMY_MASK) == 0xCC000000 ||
> +                     (cmd & INV_DUMMY_MASK) == 0xCD000000 ||
> +                     (cmd & INV_DUMMY_MASK) == 0xCE000000 ||
> +                     (cmd & INV_DUMMY_MASK) == 0xCF000000 ||
> +                     (cmd & INV_DUMMY_MASK) == 0xDD000000)
> +                     return 1;
> +             return 0;
> +}
> +
>  #endif
>
> Thanks and Best Regards 
> =================================================
> Bruce C. Chang(張祖明)
> VIA Technologies, Inc. 
> Address: 1F, 531, Chung-Cheng Road, Hsin-Tien, 231 Taipei
> Tel: +886-2-22185452 Ext 7323
> Mobile: +886-968343824
> Fax: +886-2-22186282
> Skype: Bruce.C.Chang
> Email: brucech...@via.com.tw
>   
Acked-By: Thomas Hellstrom <thellst...@vmware.com>




------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to