Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
59470101
Commit
59470101
authored
May 31, 2004
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://linux-dj.bkbits.net/agpgart
into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents
a7cf3f04
6cf5f82c
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
257 additions
and
189 deletions
+257
-189
drivers/char/agp/amd-k7-agp.c
drivers/char/agp/amd-k7-agp.c
+30
-21
drivers/char/agp/amd64-agp.c
drivers/char/agp/amd64-agp.c
+76
-69
drivers/char/agp/ati-agp.c
drivers/char/agp/ati-agp.c
+1
-0
drivers/char/agp/backend.c
drivers/char/agp/backend.c
+8
-5
drivers/char/agp/intel-agp.c
drivers/char/agp/intel-agp.c
+40
-18
drivers/char/agp/intel-mch-agp.c
drivers/char/agp/intel-mch-agp.c
+13
-10
drivers/char/agp/nvidia-agp.c
drivers/char/agp/nvidia-agp.c
+9
-1
drivers/char/agp/sis-agp.c
drivers/char/agp/sis-agp.c
+36
-24
drivers/char/agp/sworks-agp.c
drivers/char/agp/sworks-agp.c
+7
-20
drivers/char/agp/via-agp.c
drivers/char/agp/via-agp.c
+37
-21
No files found.
drivers/char/agp/amd-k7-agp.c
View file @
59470101
...
@@ -20,6 +20,8 @@
...
@@ -20,6 +20,8 @@
#define AMD_TLBFLUSH 0x0c
/* In mmio region (32-bit register) */
#define AMD_TLBFLUSH 0x0c
/* In mmio region (32-bit register) */
#define AMD_CACHEENTRY 0x10
/* In mmio region (32-bit register) */
#define AMD_CACHEENTRY 0x10
/* In mmio region (32-bit register) */
static
struct
pci_device_id
agp_amdk7_pci_table
[];
struct
amd_page_map
{
struct
amd_page_map
{
unsigned
long
*
real
;
unsigned
long
*
real
;
unsigned
long
*
remapped
;
unsigned
long
*
remapped
;
...
@@ -394,7 +396,6 @@ static struct agp_device_ids amd_agp_device_ids[] __devinitdata =
...
@@ -394,7 +396,6 @@ static struct agp_device_ids amd_agp_device_ids[] __devinitdata =
static
int
__devinit
agp_amdk7_probe
(
struct
pci_dev
*
pdev
,
static
int
__devinit
agp_amdk7_probe
(
struct
pci_dev
*
pdev
,
const
struct
pci_device_id
*
ent
)
const
struct
pci_device_id
*
ent
)
{
{
struct
agp_device_ids
*
devs
=
amd_agp_device_ids
;
struct
agp_bridge_data
*
bridge
;
struct
agp_bridge_data
*
bridge
;
u8
cap_ptr
;
u8
cap_ptr
;
int
j
;
int
j
;
...
@@ -403,19 +404,10 @@ static int __devinit agp_amdk7_probe(struct pci_dev *pdev,
...
@@ -403,19 +404,10 @@ static int __devinit agp_amdk7_probe(struct pci_dev *pdev,
if
(
!
cap_ptr
)
if
(
!
cap_ptr
)
return
-
ENODEV
;
return
-
ENODEV
;
for
(
j
=
0
;
devs
[
j
].
chipset_name
;
j
++
)
{
j
=
ent
-
agp_amdk7_pci_table
;
if
(
pdev
->
device
==
devs
[
j
].
device_id
)
{
printk
(
KERN_INFO
PFX
"Detected AMD %s chipset
\n
"
,
printk
(
KERN_INFO
PFX
"Detected AMD %s chipset
\n
"
,
amd_agp_device_ids
[
j
].
chipset_name
);
devs
[
j
].
chipset_name
);
goto
found
;
}
}
printk
(
KERN_ERR
PFX
"Unsupported AMD chipset (device id: %04x)
\n
"
,
pdev
->
device
);
return
-
ENODEV
;
found:
bridge
=
agp_alloc_bridge
();
bridge
=
agp_alloc_bridge
();
if
(
!
bridge
)
if
(
!
bridge
)
return
-
ENOMEM
;
return
-
ENOMEM
;
...
@@ -442,12 +434,29 @@ static void __devexit agp_amdk7_remove(struct pci_dev *pdev)
...
@@ -442,12 +434,29 @@ static void __devexit agp_amdk7_remove(struct pci_dev *pdev)
agp_put_bridge
(
bridge
);
agp_put_bridge
(
bridge
);
}
}
/* must be the same order as name table above */
static
struct
pci_device_id
agp_amdk7_pci_table
[]
=
{
static
struct
pci_device_id
agp_amdk7_pci_table
[]
=
{
{
{
.
class
=
(
PCI_CLASS_BRIDGE_HOST
<<
8
),
.
class
=
(
PCI_CLASS_BRIDGE_HOST
<<
8
),
.
class_mask
=
~
0
,
.
class_mask
=
~
0
,
.
vendor
=
PCI_VENDOR_ID_AMD
,
.
vendor
=
PCI_VENDOR_ID_AMD
,
.
device
=
PCI_ANY_ID
,
.
device
=
PCI_DEVICE_ID_AMD_FE_GATE_7006
,
.
subvendor
=
PCI_ANY_ID
,
.
subdevice
=
PCI_ANY_ID
,
},
{
.
class
=
(
PCI_CLASS_BRIDGE_HOST
<<
8
),
.
class_mask
=
~
0
,
.
vendor
=
PCI_VENDOR_ID_AMD
,
.
device
=
PCI_DEVICE_ID_AMD_FE_GATE_700E
,
.
subvendor
=
PCI_ANY_ID
,
.
subdevice
=
PCI_ANY_ID
,
},
{
.
class
=
(
PCI_CLASS_BRIDGE_HOST
<<
8
),
.
class_mask
=
~
0
,
.
vendor
=
PCI_VENDOR_ID_AMD
,
.
device
=
PCI_DEVICE_ID_AMD_FE_GATE_700C
,
.
subvendor
=
PCI_ANY_ID
,
.
subvendor
=
PCI_ANY_ID
,
.
subdevice
=
PCI_ANY_ID
,
.
subdevice
=
PCI_ANY_ID
,
},
},
...
...
drivers/char/agp/amd64-agp.c
View file @
59470101
...
@@ -288,8 +288,8 @@ static int __devinit aperture_valid(u64 aper, u32 size)
...
@@ -288,8 +288,8 @@ static int __devinit aperture_valid(u64 aper, u32 size)
/* Request the Aperture. This catches cases when someone else
/* Request the Aperture. This catches cases when someone else
already put a mapping in there - happens with some very broken BIOS
already put a mapping in there - happens with some very broken BIOS
Maybe better to use pci_assign_resource/pci_enable_device instead
trusting
Maybe better to use pci_assign_resource/pci_enable_device instead
the bridges? */
t
rusting t
he bridges? */
if
(
!
aperture_resource
&&
if
(
!
aperture_resource
&&
!
(
aperture_resource
=
request_mem_region
(
aper
,
size
,
"aperture"
)))
{
!
(
aperture_resource
=
request_mem_region
(
aper
,
size
,
"aperture"
)))
{
printk
(
KERN_ERR
PFX
"Aperture conflicts with PCI mapping.
\n
"
);
printk
(
KERN_ERR
PFX
"Aperture conflicts with PCI mapping.
\n
"
);
...
@@ -377,7 +377,6 @@ static __devinit int cache_nbs (struct pci_dev *pdev, u32 cap_ptr)
...
@@ -377,7 +377,6 @@ static __devinit int cache_nbs (struct pci_dev *pdev, u32 cap_ptr)
/* Handle AMD 8151 quirks */
/* Handle AMD 8151 quirks */
static
void
__devinit
amd8151_init
(
struct
pci_dev
*
pdev
,
struct
agp_bridge_data
*
bridge
)
static
void
__devinit
amd8151_init
(
struct
pci_dev
*
pdev
,
struct
agp_bridge_data
*
bridge
)
{
{
char
*
revstring
;
char
*
revstring
;
u8
rev_id
;
u8
rev_id
;
...
@@ -491,8 +490,7 @@ static int __devinit agp_amd64_probe(struct pci_dev *pdev,
...
@@ -491,8 +490,7 @@ static int __devinit agp_amd64_probe(struct pci_dev *pdev,
pdev
->
device
==
PCI_DEVICE_ID_AMD_8151_0
)
{
pdev
->
device
==
PCI_DEVICE_ID_AMD_8151_0
)
{
amd8151_init
(
pdev
,
bridge
);
amd8151_init
(
pdev
,
bridge
);
}
else
{
}
else
{
printk
(
KERN_INFO
PFX
"Detected AGP bridge %x
\n
"
,
printk
(
KERN_INFO
PFX
"Detected AGP bridge %x
\n
"
,
pdev
->
devfn
);
pdev
->
devfn
);
}
}
bridge
->
driver
=
&
amd_8151_driver
;
bridge
->
driver
=
&
amd_8151_driver
;
...
@@ -581,6 +579,15 @@ static struct pci_device_id agp_amd64_pci_table[] = {
...
@@ -581,6 +579,15 @@ static struct pci_device_id agp_amd64_pci_table[] = {
.
subvendor
=
PCI_ANY_ID
,
.
subvendor
=
PCI_ANY_ID
,
.
subdevice
=
PCI_ANY_ID
,
.
subdevice
=
PCI_ANY_ID
,
},
},
/* SIS 755 */
{
.
class
=
(
PCI_CLASS_BRIDGE_HOST
<<
8
),
.
class_mask
=
~
0
,
.
vendor
=
PCI_VENDOR_ID_SI
,
.
device
=
PCI_DEVICE_ID_SI_755
,
.
subvendor
=
PCI_ANY_ID
,
.
subdevice
=
PCI_ANY_ID
,
},
{
}
{
}
};
};
...
...
drivers/char/agp/ati-agp.c
View file @
59470101
...
@@ -131,6 +131,7 @@ static int ati_create_gatt_pages(int nr_tables)
...
@@ -131,6 +131,7 @@ static int ati_create_gatt_pages(int nr_tables)
i
--
;
i
--
;
}
}
kfree
(
tables
);
kfree
(
tables
);
tables
=
NULL
;
retval
=
-
ENOMEM
;
retval
=
-
ENOMEM
;
break
;
break
;
}
}
...
...
drivers/char/agp/backend.c
View file @
59470101
...
@@ -243,6 +243,9 @@ int agp_add_bridge(struct agp_bridge_data *bridge)
...
@@ -243,6 +243,9 @@ int agp_add_bridge(struct agp_bridge_data *bridge)
{
{
int
error
;
int
error
;
if
(
agp_off
)
return
-
ENODEV
;
if
(
!
bridge
->
dev
)
{
if
(
!
bridge
->
dev
)
{
printk
(
KERN_DEBUG
PFX
"Erk, registering with no pci_dev!
\n
"
);
printk
(
KERN_DEBUG
PFX
"Erk, registering with no pci_dev!
\n
"
);
return
-
EINVAL
;
return
-
EINVAL
;
...
...
drivers/char/agp/intel-agp.c
View file @
59470101
...
@@ -1382,8 +1382,10 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev,
...
@@ -1382,8 +1382,10 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev,
name
=
"E7205"
;
name
=
"E7205"
;
break
;
break
;
default:
default:
printk
(
KERN_ERR
PFX
"Unsupported Intel chipset (device id: %04x)
\n
"
,
if
(
cap_ptr
)
printk
(
KERN_WARNING
PFX
"Unsupported Intel chipset (device id: %04x)
\n
"
,
pdev
->
device
);
pdev
->
device
);
agp_put_bridge
(
bridge
);
return
-
ENODEV
;
return
-
ENODEV
;
};
};
...
@@ -1406,7 +1408,8 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev,
...
@@ -1406,7 +1408,8 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev,
if
(
!
r
->
start
&&
r
->
end
)
{
if
(
!
r
->
start
&&
r
->
end
)
{
if
(
pci_assign_resource
(
pdev
,
0
))
{
if
(
pci_assign_resource
(
pdev
,
0
))
{
printk
(
KERN_ERR
PFX
"could not assign resource 0
\n
"
);
printk
(
KERN_ERR
PFX
"could not assign resource 0
\n
"
);
return
(
-
ENODEV
);
agp_put_bridge
(
bridge
);
return
-
ENODEV
;
}
}
}
}
...
@@ -1417,7 +1420,8 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev,
...
@@ -1417,7 +1420,8 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev,
*/
*/
if
(
pci_enable_device
(
pdev
))
{
if
(
pci_enable_device
(
pdev
))
{
printk
(
KERN_ERR
PFX
"Unable to Enable PCI device
\n
"
);
printk
(
KERN_ERR
PFX
"Unable to Enable PCI device
\n
"
);
return
(
-
ENODEV
);
agp_put_bridge
(
bridge
);
return
-
ENODEV
;
}
}
/* Fill in the mode register */
/* Fill in the mode register */
...
@@ -1442,15 +1446,12 @@ static void __devexit agp_intel_remove(struct pci_dev *pdev)
...
@@ -1442,15 +1446,12 @@ static void __devexit agp_intel_remove(struct pci_dev *pdev)
agp_put_bridge
(
bridge
);
agp_put_bridge
(
bridge
);
}
}
static
int
agp_intel_suspend
(
struct
pci_dev
*
dev
,
u32
state
)
{
return
0
;
}
static
int
agp_intel_resume
(
struct
pci_dev
*
pdev
)
static
int
agp_intel_resume
(
struct
pci_dev
*
pdev
)
{
{
struct
agp_bridge_data
*
bridge
=
pci_get_drvdata
(
pdev
);
struct
agp_bridge_data
*
bridge
=
pci_get_drvdata
(
pdev
);
pci_restore_state
(
pdev
,
pdev
->
saved_config_space
);
if
(
bridge
->
driver
==
&
intel_generic_driver
)
if
(
bridge
->
driver
==
&
intel_generic_driver
)
intel_configure
();
intel_configure
();
else
if
(
bridge
->
driver
==
&
intel_845_driver
)
else
if
(
bridge
->
driver
==
&
intel_845_driver
)
...
@@ -1462,14 +1463,36 @@ static int agp_intel_resume(struct pci_dev *pdev)
...
@@ -1462,14 +1463,36 @@ static int agp_intel_resume(struct pci_dev *pdev)
}
}
static
struct
pci_device_id
agp_intel_pci_table
[]
=
{
static
struct
pci_device_id
agp_intel_pci_table
[]
=
{
{
#define ID(x) \
.
class
=
(
PCI_CLASS_BRIDGE_HOST
<<
8
),
{ \
.
class_mask
=
~
0
,
.class = (PCI_CLASS_BRIDGE_HOST << 8), \
.
vendor
=
PCI_VENDOR_ID_INTEL
,
.class_mask = ~0, \
.
device
=
PCI_ANY_ID
,
.vendor = PCI_VENDOR_ID_INTEL, \
.
subvendor
=
PCI_ANY_ID
,
.device = x, \
.
subdevice
=
PCI_ANY_ID
,
.subvendor = PCI_ANY_ID, \
},
.subdevice = PCI_ANY_ID, \
}
ID
(
PCI_DEVICE_ID_INTEL_82443LX_0
),
ID
(
PCI_DEVICE_ID_INTEL_82443BX_0
),
ID
(
PCI_DEVICE_ID_INTEL_82443GX_0
),
ID
(
PCI_DEVICE_ID_INTEL_82810_MC1
),
ID
(
PCI_DEVICE_ID_INTEL_82810_MC3
),
ID
(
PCI_DEVICE_ID_INTEL_82810E_MC
),
ID
(
PCI_DEVICE_ID_INTEL_82815_MC
),
ID
(
PCI_DEVICE_ID_INTEL_82820_HB
),
ID
(
PCI_DEVICE_ID_INTEL_82820_UP_HB
),
ID
(
PCI_DEVICE_ID_INTEL_82830_HB
),
ID
(
PCI_DEVICE_ID_INTEL_82840_HB
),
ID
(
PCI_DEVICE_ID_INTEL_82845_HB
),
ID
(
PCI_DEVICE_ID_INTEL_82845G_HB
),
ID
(
PCI_DEVICE_ID_INTEL_82850_HB
),
ID
(
PCI_DEVICE_ID_INTEL_82855PM_HB
),
ID
(
PCI_DEVICE_ID_INTEL_82855GM_HB
),
ID
(
PCI_DEVICE_ID_INTEL_82860_HB
),
ID
(
PCI_DEVICE_ID_INTEL_82865_HB
),
ID
(
PCI_DEVICE_ID_INTEL_82875_HB
),
ID
(
PCI_DEVICE_ID_INTEL_7505_0
),
ID
(
PCI_DEVICE_ID_INTEL_7205_0
),
{
}
{
}
};
};
...
@@ -1480,7 +1503,6 @@ static struct pci_driver agp_intel_pci_driver = {
...
@@ -1480,7 +1503,6 @@ static struct pci_driver agp_intel_pci_driver = {
.
id_table
=
agp_intel_pci_table
,
.
id_table
=
agp_intel_pci_table
,
.
probe
=
agp_intel_probe
,
.
probe
=
agp_intel_probe
,
.
remove
=
agp_intel_remove
,
.
remove
=
agp_intel_remove
,
.
suspend
=
agp_intel_suspend
,
.
resume
=
agp_intel_resume
,
.
resume
=
agp_intel_resume
,
};
};
...
...
drivers/char/agp/intel-mch-agp.c
View file @
59470101
...
@@ -491,10 +491,9 @@ static int __devinit agp_intelmch_probe(struct pci_dev *pdev,
...
@@ -491,10 +491,9 @@ static int __devinit agp_intelmch_probe(struct pci_dev *pdev,
char
*
name
=
"(unknown)"
;
char
*
name
=
"(unknown)"
;
u8
cap_ptr
=
0
;
u8
cap_ptr
=
0
;
if
(
!
boot_cpu_has
(
X86_FEATURE_LM
))
return
-
ENODEV
;
cap_ptr
=
pci_find_capability
(
pdev
,
PCI_CAP_ID_AGP
);
cap_ptr
=
pci_find_capability
(
pdev
,
PCI_CAP_ID_AGP
);
if
(
!
cap_ptr
)
return
-
ENODEV
;
bridge
=
agp_alloc_bridge
();
bridge
=
agp_alloc_bridge
();
if
(
!
bridge
)
if
(
!
bridge
)
...
@@ -570,15 +569,12 @@ static void __devexit agp_intelmch_remove(struct pci_dev *pdev)
...
@@ -570,15 +569,12 @@ static void __devexit agp_intelmch_remove(struct pci_dev *pdev)
agp_put_bridge
(
bridge
);
agp_put_bridge
(
bridge
);
}
}
static
int
agp_intelmch_suspend
(
struct
pci_dev
*
dev
,
u32
state
)
{
return
0
;
}
static
int
agp_intelmch_resume
(
struct
pci_dev
*
pdev
)
static
int
agp_intelmch_resume
(
struct
pci_dev
*
pdev
)
{
{
struct
agp_bridge_data
*
bridge
=
pci_get_drvdata
(
pdev
);
struct
agp_bridge_data
*
bridge
=
pci_get_drvdata
(
pdev
);
pci_restore_state
(
pdev
,
pdev
->
saved_config_space
);
if
(
bridge
->
driver
==
&
intel_845_driver
)
if
(
bridge
->
driver
==
&
intel_845_driver
)
intel_845_configure
();
intel_845_configure
();
...
@@ -590,7 +586,15 @@ static struct pci_device_id agp_intelmch_pci_table[] = {
...
@@ -590,7 +586,15 @@ static struct pci_device_id agp_intelmch_pci_table[] = {
.
class
=
(
PCI_CLASS_BRIDGE_HOST
<<
8
),
.
class
=
(
PCI_CLASS_BRIDGE_HOST
<<
8
),
.
class_mask
=
~
0
,
.
class_mask
=
~
0
,
.
vendor
=
PCI_VENDOR_ID_INTEL
,
.
vendor
=
PCI_VENDOR_ID_INTEL
,
.
device
=
PCI_ANY_ID
,
.
device
=
PCI_DEVICE_ID_INTEL_82865_HB
,
.
subvendor
=
PCI_ANY_ID
,
.
subdevice
=
PCI_ANY_ID
,
},
{
.
class
=
(
PCI_CLASS_BRIDGE_HOST
<<
8
),
.
class_mask
=
~
0
,
.
vendor
=
PCI_VENDOR_ID_INTEL
,
.
device
=
PCI_DEVICE_ID_INTEL_82875_HB
,
.
subvendor
=
PCI_ANY_ID
,
.
subvendor
=
PCI_ANY_ID
,
.
subdevice
=
PCI_ANY_ID
,
.
subdevice
=
PCI_ANY_ID
,
},
},
...
@@ -604,7 +608,6 @@ static struct pci_driver agp_intelmch_pci_driver = {
...
@@ -604,7 +608,6 @@ static struct pci_driver agp_intelmch_pci_driver = {
.
id_table
=
agp_intelmch_pci_table
,
.
id_table
=
agp_intelmch_pci_table
,
.
probe
=
agp_intelmch_probe
,
.
probe
=
agp_intelmch_probe
,
.
remove
=
agp_intelmch_remove
,
.
remove
=
agp_intelmch_remove
,
.
suspend
=
agp_intelmch_suspend
,
.
resume
=
agp_intelmch_resume
,
.
resume
=
agp_intelmch_resume
,
};
};
...
...
drivers/char/agp/nvidia-agp.c
View file @
59470101
...
@@ -380,7 +380,15 @@ static struct pci_device_id agp_nvidia_pci_table[] = {
...
@@ -380,7 +380,15 @@ static struct pci_device_id agp_nvidia_pci_table[] = {
.
class
=
(
PCI_CLASS_BRIDGE_HOST
<<
8
),
.
class
=
(
PCI_CLASS_BRIDGE_HOST
<<
8
),
.
class_mask
=
~
0
,
.
class_mask
=
~
0
,
.
vendor
=
PCI_VENDOR_ID_NVIDIA
,
.
vendor
=
PCI_VENDOR_ID_NVIDIA
,
.
device
=
PCI_ANY_ID
,
.
device
=
PCI_DEVICE_ID_NVIDIA_NFORCE
,
.
subvendor
=
PCI_ANY_ID
,
.
subdevice
=
PCI_ANY_ID
,
},
{
.
class
=
(
PCI_CLASS_BRIDGE_HOST
<<
8
),
.
class_mask
=
~
0
,
.
vendor
=
PCI_VENDOR_ID_NVIDIA
,
.
device
=
PCI_DEVICE_ID_NVIDIA_NFORCE2
,
.
subvendor
=
PCI_ANY_ID
,
.
subvendor
=
PCI_ANY_ID
,
.
subdevice
=
PCI_ANY_ID
,
.
subdevice
=
PCI_ANY_ID
,
},
},
...
...
drivers/char/agp/sis-agp.c
View file @
59470101
...
@@ -13,6 +13,8 @@
...
@@ -13,6 +13,8 @@
#define SIS_TLBCNTRL 0x97
#define SIS_TLBCNTRL 0x97
#define SIS_TLBFLUSH 0x98
#define SIS_TLBFLUSH 0x98
static
int
__devinitdata
agp_sis_force_delay
=
0
;
static
int
__devinitdata
agp_sis_agp_spec
=
-
1
;
static
int
sis_fetch_size
(
void
)
static
int
sis_fetch_size
(
void
)
{
{
...
@@ -67,7 +69,7 @@ static void sis_cleanup(void)
...
@@ -67,7 +69,7 @@ static void sis_cleanup(void)
(
previous_size
->
size_value
&
~
(
0x03
)));
(
previous_size
->
size_value
&
~
(
0x03
)));
}
}
static
void
sis_
648
_enable
(
u32
mode
)
static
void
sis_
delayed
_enable
(
u32
mode
)
{
{
struct
pci_dev
*
device
=
NULL
;
struct
pci_dev
*
device
=
NULL
;
u32
command
;
u32
command
;
...
@@ -94,13 +96,12 @@ static void sis_648_enable(u32 mode)
...
@@ -94,13 +96,12 @@ static void sis_648_enable(u32 mode)
pci_write_config_dword
(
device
,
agp
+
PCI_AGP_COMMAND
,
command
);
pci_write_config_dword
(
device
,
agp
+
PCI_AGP_COMMAND
,
command
);
/*
/*
* Weird: on
648(fx) and 746(fx)
chipsets any rate change in the target
* Weird: on
some sis
chipsets any rate change in the target
* command register triggers a 5ms screwup during which the master
* command register triggers a 5ms screwup during which the master
* cannot be configured
* cannot be configured
*/
*/
if
(
device
->
device
==
PCI_DEVICE_ID_SI_648
||
if
(
device
->
device
==
agp_bridge
->
dev
->
device
)
{
device
->
device
==
PCI_DEVICE_ID_SI_746
)
{
printk
(
KERN_INFO
PFX
"SiS delay workaround: giving bridge time to recover.
\n
"
);
printk
(
KERN_INFO
PFX
"SiS chipset with AGP problems detected. Giving bridge time to recover.
\n
"
);
set_current_state
(
TASK_UNINTERRUPTIBLE
);
set_current_state
(
TASK_UNINTERRUPTIBLE
);
schedule_timeout
(
1
+
(
HZ
*
10
)
/
1000
);
schedule_timeout
(
1
+
(
HZ
*
10
)
/
1000
);
}
}
...
@@ -223,11 +224,28 @@ static struct agp_device_ids sis_agp_device_ids[] __devinitdata =
...
@@ -223,11 +224,28 @@ static struct agp_device_ids sis_agp_device_ids[] __devinitdata =
};
};
// chipsets that require the 'delay hack'
static
int
sis_broken_chipsets
[]
__devinitdata
=
{
PCI_DEVICE_ID_SI_648
,
PCI_DEVICE_ID_SI_746
,
0
// terminator
};
static
void
__devinit
sis_get_driver
(
struct
agp_bridge_data
*
bridge
)
static
void
__devinit
sis_get_driver
(
struct
agp_bridge_data
*
bridge
)
{
{
if
(
bridge
->
dev
->
device
==
PCI_DEVICE_ID_SI_648
)
{
int
i
;
sis_driver
.
agp_enable
=
sis_648_enable
;
if
(
agp_bridge
->
major_version
==
3
)
{
for
(
i
=
0
;
sis_broken_chipsets
[
i
]
!=
0
;
++
i
)
if
(
bridge
->
dev
->
device
==
sis_broken_chipsets
[
i
])
break
;
if
(
sis_broken_chipsets
[
i
]
||
agp_sis_force_delay
)
sis_driver
.
agp_enable
=
sis_delayed_enable
;
// sis chipsets that indicate less than agp3.5
// are not actually fully agp3 compliant
if
((
agp_bridge
->
major_version
==
3
&&
agp_bridge
->
minor_version
>=
5
&&
agp_sis_agp_spec
!=
0
)
||
agp_sis_agp_spec
==
1
)
{
sis_driver
.
aperture_sizes
=
agp3_generic_sizes
;
sis_driver
.
aperture_sizes
=
agp3_generic_sizes
;
sis_driver
.
size_type
=
U16_APER_SIZE
;
sis_driver
.
size_type
=
U16_APER_SIZE
;
sis_driver
.
num_aperture_sizes
=
AGP_GENERIC_SIZES_ENTRIES
;
sis_driver
.
num_aperture_sizes
=
AGP_GENERIC_SIZES_ENTRIES
;
...
@@ -236,16 +254,6 @@ static void __devinit sis_get_driver(struct agp_bridge_data *bridge)
...
@@ -236,16 +254,6 @@ static void __devinit sis_get_driver(struct agp_bridge_data *bridge)
sis_driver
.
cleanup
=
agp3_generic_cleanup
;
sis_driver
.
cleanup
=
agp3_generic_cleanup
;
sis_driver
.
tlb_flush
=
agp3_generic_tlbflush
;
sis_driver
.
tlb_flush
=
agp3_generic_tlbflush
;
}
}
}
if
(
bridge
->
dev
->
device
==
PCI_DEVICE_ID_SI_746
)
{
/*
* We don't know enough about the 746 to enable it properly.
* Though we do know that it needs the 'delay' hack to settle
* after changing modes.
*/
sis_driver
.
agp_enable
=
sis_648_enable
;
}
}
}
...
@@ -335,4 +343,8 @@ static void __exit agp_sis_cleanup(void)
...
@@ -335,4 +343,8 @@ static void __exit agp_sis_cleanup(void)
module_init
(
agp_sis_init
);
module_init
(
agp_sis_init
);
module_exit
(
agp_sis_cleanup
);
module_exit
(
agp_sis_cleanup
);
MODULE_PARM
(
agp_sis_force_delay
,
"i"
);
MODULE_PARM_DESC
(
agp_sis_force_delay
,
"forces sis delay hack"
);
MODULE_PARM
(
agp_sis_agp_spec
,
"i"
);
MODULE_PARM_DESC
(
agp_sis_agp_spec
,
"0=force sis init, 1=force generic agp3 init, default: autodetect"
);
MODULE_LICENSE
(
"GPL and additional rights"
);
MODULE_LICENSE
(
"GPL and additional rights"
);
drivers/char/agp/sworks-agp.c
View file @
59470101
...
@@ -248,26 +248,13 @@ static int serverworks_fetch_size(void)
...
@@ -248,26 +248,13 @@ static int serverworks_fetch_size(void)
*/
*/
static
void
serverworks_tlbflush
(
struct
agp_memory
*
temp
)
static
void
serverworks_tlbflush
(
struct
agp_memory
*
temp
)
{
{
unsigned
long
end
;
OUTREG8
(
serverworks_private
.
registers
,
SVWRKS_POSTFLUSH
,
1
);
while
(
INREG8
(
serverworks_private
.
registers
,
SVWRKS_POSTFLUSH
)
==
1
)
OUTREG8
(
serverworks_private
.
registers
,
SVWRKS_POSTFLUSH
,
0x01
);
cpu_relax
();
end
=
jiffies
+
3
*
HZ
;
while
(
INREG8
(
serverworks_private
.
registers
,
OUTREG32
(
serverworks_private
.
registers
,
SVWRKS_DIRFLUSH
,
1
);
SVWRKS_POSTFLUSH
)
==
0x01
)
{
while
(
INREG32
(
serverworks_private
.
registers
,
SVWRKS_DIRFLUSH
)
==
1
)
if
((
signed
)(
end
-
jiffies
)
<=
0
)
{
cpu_relax
();
printk
(
KERN_ERR
PFX
"Posted write buffer flush took more"
"then 3 seconds
\n
"
);
}
}
OUTREG32
(
serverworks_private
.
registers
,
SVWRKS_DIRFLUSH
,
0x00000001
);
end
=
jiffies
+
3
*
HZ
;
while
(
INREG32
(
serverworks_private
.
registers
,
SVWRKS_DIRFLUSH
)
==
0x00000001
)
{
if
((
signed
)(
end
-
jiffies
)
<=
0
)
{
printk
(
KERN_ERR
PFX
"TLB flush took more"
"then 3 seconds
\n
"
);
}
}
}
}
static
int
serverworks_configure
(
void
)
static
int
serverworks_configure
(
void
)
...
...
drivers/char/agp/via-agp.c
View file @
59470101
...
@@ -9,6 +9,8 @@
...
@@ -9,6 +9,8 @@
#include <linux/agp_backend.h>
#include <linux/agp_backend.h>
#include "agp.h"
#include "agp.h"
static
struct
pci_device_id
agp_via_pci_table
[];
#define VIA_GARTCTRL 0x80
#define VIA_GARTCTRL 0x80
#define VIA_APSIZE 0x84
#define VIA_APSIZE 0x84
#define VIA_ATTBASE 0x88
#define VIA_ATTBASE 0x88
...
@@ -378,20 +380,9 @@ static int __devinit agp_via_probe(struct pci_dev *pdev,
...
@@ -378,20 +380,9 @@ static int __devinit agp_via_probe(struct pci_dev *pdev,
if
(
!
cap_ptr
)
if
(
!
cap_ptr
)
return
-
ENODEV
;
return
-
ENODEV
;
/* probe for known chipsets */
j
=
ent
-
agp_via_pci_table
;
for
(
j
=
0
;
devs
[
j
].
chipset_name
;
j
++
)
{
printk
(
KERN_INFO
PFX
"Detected VIA %s chipset
\n
"
,
devs
[
j
].
chipset_name
);
if
(
pdev
->
device
==
devs
[
j
].
device_id
)
{
printk
(
KERN_INFO
PFX
"Detected VIA %s chipset
\n
"
,
devs
[
j
].
chipset_name
);
goto
found
;
}
}
printk
(
KERN_ERR
PFX
"Unsupported VIA chipset (device id: %04x)
\n
"
,
pdev
->
device
);
return
-
ENODEV
;
found:
bridge
=
agp_alloc_bridge
();
bridge
=
agp_alloc_bridge
();
if
(
!
bridge
)
if
(
!
bridge
)
return
-
ENOMEM
;
return
-
ENOMEM
;
...
@@ -432,15 +423,40 @@ static void __devexit agp_via_remove(struct pci_dev *pdev)
...
@@ -432,15 +423,40 @@ static void __devexit agp_via_remove(struct pci_dev *pdev)
agp_put_bridge
(
bridge
);
agp_put_bridge
(
bridge
);
}
}
/* must be the same order as name table above */
static
struct
pci_device_id
agp_via_pci_table
[]
=
{
static
struct
pci_device_id
agp_via_pci_table
[]
=
{
{
#define ID(x) \
.
class
=
(
PCI_CLASS_BRIDGE_HOST
<<
8
),
{ \
.
class_mask
=
~
0
,
.class = (PCI_CLASS_BRIDGE_HOST << 8), \
.
vendor
=
PCI_VENDOR_ID_VIA
,
.class_mask = ~0, \
.
device
=
PCI_ANY_ID
,
.vendor = PCI_VENDOR_ID_VIA, \
.
subvendor
=
PCI_ANY_ID
,
.device = x, \
.
subdevice
=
PCI_ANY_ID
,
.subvendor = PCI_ANY_ID, \
},
.subdevice = PCI_ANY_ID, \
}
ID
(
PCI_DEVICE_ID_VIA_82C598_0
),
ID
(
PCI_DEVICE_ID_VIA_8501_0
),
ID
(
PCI_DEVICE_ID_VIA_8601_0
),
ID
(
PCI_DEVICE_ID_VIA_82C691_0
),
ID
(
PCI_DEVICE_ID_VIA_8371_0
),
ID
(
PCI_DEVICE_ID_VIA_8633_0
),
ID
(
PCI_DEVICE_ID_VIA_XN266
),
ID
(
PCI_DEVICE_ID_VIA_8361
),
ID
(
PCI_DEVICE_ID_VIA_8363_0
),
ID
(
PCI_DEVICE_ID_VIA_8753_0
),
ID
(
PCI_DEVICE_ID_VIA_8367_0
),
ID
(
PCI_DEVICE_ID_VIA_8653_0
),
ID
(
PCI_DEVICE_ID_VIA_XM266
),
ID
(
PCI_DEVICE_ID_VIA_862X_0
),
ID
(
PCI_DEVICE_ID_VIA_8377_0
),
ID
(
PCI_DEVICE_ID_VIA_8605_0
),
ID
(
PCI_DEVICE_ID_VIA_8703_51_0
),
ID
(
PCI_DEVICE_ID_VIA_8754C_0
),
ID
(
PCI_DEVICE_ID_VIA_8763_0
),
ID
(
PCI_DEVICE_ID_VIA_8378_0
),
ID
(
PCI_DEVICE_ID_VIA_PT880
),
ID
(
PCI_DEVICE_ID_VIA_8783_0
),
ID
(
PCI_DEVICE_ID_VIA_PX8X0_0
),
{
}
{
}
};
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment