Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 1 Sep 2003 21:39:57 -0700 (PDT)
From:      Dan Angelescu <mrhsaacdoh@yahoo.com>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   kern/56297: Agp problem for intel chipsets ? DRM and DRI Related.
Message-ID:  <20030902043957.24635.qmail@web12207.mail.yahoo.com>
Resent-Message-ID: <200309020450.h824o118062240@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         56297
>Category:       kern
>Synopsis:       Agp problem for intel chipsets ? DRM and
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Mon Sep 01 21:50:00 PDT 2003
>Closed-Date:
>Last-Modified:
>Originator:     Dan Angelescu <mrhsaacdoh@yahoo.com>
>Release:        FreeBSD 4.8-STABLE i386
>Organization:
none
>Environment:
System: FreeBSD AdiLaura.sonix.ro 4.8-STABLE FreeBSD
4.8-STABLE #0: Fri
Aug 29 0
9:21:49 GMT 2003
root@AdiLaura.sonix.ro:/usr/src/sys/compile/MyComputer_DRM
i386
Machine I386 ,Cpu PIII 667MHz or Cpu Celeron 600Mhz
Os Any FreeBSD > 4.6.2-p13
Programs: XFree86-4.1.0 to XFree86-4.3.0
,drm-kmod-0.9.4 to
drm-kmod-0.9.6 and
drm included in Kernel from Kernel>= 4.8.
I use a motherboard frm MSI respectively MS 6334 wich
is intel 82815
chipset
based and has integrated graphics.I use  a Ati Radeon
VE QY video card
inserted
in
the agp slot.

>Description:
After FreeBSD > 4.6.2-p13 system crash at the second
,third or fourth
restart of
X Server when DRI and DRM are activated for Ati Radeon
VE QY video
card.
I have noticed that at the restarting of X sever on my
screen apears
images from my previous X session even i have changed
the windowmanager
from
.xinitrc.

>How-To-Repeat:
Install drm-kmod from ports or compile it in Kernel
for FReeBSD >=4.8.
Install and configure X Server to use DRI.
Start X Server once , exit and restart several times X
Server.
       
>Fix:
It seems that problem is due to code from function
agp_intel_flush_tlb(device_tdev)  wich is in 
/sys/pci/agp_intel.c.
In FreeBSD < 4.7 it was
  agp_intel_flush_tlb(device_t dev)
{
        pci_write_config(dev, AGP_INTEL_AGPCTRL,
0x2200, 4);
        pci_write_config(dev, AGP_INTEL_AGPCTRL,
0x2280, 4);
}
In FreeBSD> 4.6.2-p13
agp_intel_flush_tlb(device_t dev)
{
        u_int32_t val;
        val = pci_read_config(dev, AGP_INTEL_AGPCTRL,
4);
        pci_write_config(dev, AGP_INTEL_AGPCTRL,val &
~(1 << 8)  , 4);
        pci_write_config(dev, AGP_INTEL_AGPCTRL, val ,
4);
}.
After i have inspected agp code for intel chipsets in
NetBSD-1.6 ,
OpenBSD-3.2
and Linux i have noticed that:
In OpenBSD and NetBSD is used a code similar from
FreeBSD <= 4.6.2-p13.
In Linux it is used a code similar with FreeBSD>
4.6.2-p13 with a
little
diference:
In Linux instead of variabile val & ~(1 << 8) it is
used val & ~(1 <<
7) at the
first invocation
of function pci_write_config and at the second
invocation it is used
val | (1 <<7) instead of val used in FreeBSD.
To fix the problem it seems to be  three posibilities:

1) The use of the old FreeBSD code for
agp_intel_flush_tlb(device_t
dev)
but i don't know if it works for all chipsets. 
agp_intel_flush_tlb(device_t dev)
{
        pci_write_config(dev, AGP_INTEL_AGPCTRL,
0x2200, 4);
        pci_write_config(dev, AGP_INTEL_AGPCTRL,
0x2280, 4);
}

2) The use of the code from FreeBSD > 4.6.2-p13 with a
minor
modification
where we write 7 instead of 8 in val & ~(1 << 8) at
the first
invocation of pci_
write_config

agp_intel_flush_tlb(device_t dev)
{
        u_int32_t val;
        val = pci_read_config(dev, AGP_INTEL_AGPCTRL,
4);
        pci_write_config(dev, AGP_INTEL_AGPCTRL,val &
~(1 << 7)  , 4);
        pci_write_config(dev, AGP_INTEL_AGPCTRL, val ,
4);
}

 3) The use of the Linux code adapted for FreeBSD

agp_intel_flush_tlb(device_t dev)
{
        u_int32_t val;
        val = pci_read_config(dev, AGP_INTEL_AGPCTRL,
4);
        pci_write_config(dev, AGP_INTEL_AGPCTRL, val &
~(1 << 7), 4);
        val = pci_read_config(dev, AGP_INTEL_AGPCTRL,
4);
        pci_write_config(dev, AGP_INTEL_AGPCTRL, val |
(1 << 7), 4);
}.
With any of these modifications all works well on my
motherboard.
I haven't tested that for other motherboards or
chipsets because
i have only one Computer.
Hope it helps !


__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com
>Release-Note:
>Audit-Trail:
>Unformatted:
 DRI Related.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030902043957.24635.qmail>