From: Oliver Heilmann <heilmano@yahoo.com>
To: linux-kernel@vger.kernel.org
Subject: Re: [PATCH] SIS AGP clean up, blacklist and module options
Date: Sat, 24 Apr 2004 05:13:10 -0700 (PDT) [thread overview]
Message-ID: <20040424121310.83586.qmail@web10102.mail.yahoo.com> (raw)
In-Reply-To: <20040423225938.57650.qmail@web10105.mail.yahoo.com>
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=us-ascii, Size: 267 bytes --]
Sorry, I'm not used to using yahoo webmail. It
stupidly wrapped all the lines. Patch vs 2.6.5. is
attached.
Oliver
__________________________________
Do you Yahoo!?
Yahoo! Photos: High-quality 4x6 digital prints for 25¢
http://photos.yahoo.com/ph/print_splash
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: sis-agp.patch --]
[-- Type: text/x-diff; name="sis-agp.patch", Size: 3527 bytes --]
--- drivers/char/agp/sis-agp.c.orig 2004-04-23 23:14:35.000000000 +0100
+++ drivers/char/agp/sis-agp.c 2004-04-23 19:51:46.000000000 +0100
@@ -13,6 +13,8 @@
#define SIS_TLBCNTRL 0x97
#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)
{
@@ -67,7 +69,7 @@ static void sis_cleanup(void)
(previous_size->size_value & ~(0x03)));
}
-static void sis_648_enable(u32 mode)
+static void sis_delayed_enable(u32 mode)
{
struct pci_dev *device = NULL;
u32 command;
@@ -93,10 +95,13 @@ static void sis_648_enable(u32 mode)
pci_write_config_dword(device, agp + PCI_AGP_COMMAND, command);
- if(device->device == PCI_DEVICE_ID_SI_648) {
- // weird: on 648 and 648fx chipsets any rate change in the target command register
- // triggers a 5ms screwup during which the master cannot be configured
- printk(KERN_INFO PFX "sis 648 agp fix - giving bridge time to recover\n");
+ /*
+ * Weird: on some sis chipsets any rate change in the target
+ * command register triggers a 5ms screwup during which the master
+ * cannot be configured
+ */
+ if (device->device == agp_bridge->dev->device) {
+ printk(KERN_INFO PFX "SiS delay workaround: giving bridge time to recover.\n");
set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout (1+(HZ*10)/1000);
}
@@ -219,21 +224,35 @@ static struct agp_device_ids sis_agp_dev
};
+// 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)
{
- if (bridge->dev->device == PCI_DEVICE_ID_SI_648) {
- if (agp_bridge->major_version == 3 && agp_bridge->minor_version < 5) {
- sis_driver.agp_enable=sis_648_enable;
- } else {
- sis_driver.agp_enable = sis_648_enable;
- sis_driver.aperture_sizes = agp3_generic_sizes;
- sis_driver.size_type = U16_APER_SIZE;
- sis_driver.num_aperture_sizes = AGP_GENERIC_SIZES_ENTRIES;
- sis_driver.configure = agp3_generic_configure;
- sis_driver.fetch_size = agp3_generic_fetch_size;
- sis_driver.cleanup = agp3_generic_cleanup;
- sis_driver.tlb_flush = agp3_generic_tlbflush;
- }
+ int i;
+
+ 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.size_type = U16_APER_SIZE;
+ sis_driver.num_aperture_sizes = AGP_GENERIC_SIZES_ENTRIES;
+ sis_driver.configure = agp3_generic_configure;
+ sis_driver.fetch_size = agp3_generic_fetch_size;
+ sis_driver.cleanup = agp3_generic_cleanup;
+ sis_driver.tlb_flush = agp3_generic_tlbflush;
}
}
@@ -324,4 +343,8 @@ static void __exit agp_sis_cleanup(void)
module_init(agp_sis_init);
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");
next prev parent reply other threads:[~2004-04-24 12:13 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-04-23 22:59 Oliver Heilmann
2004-04-24 12:13 ` Oliver Heilmann [this message]
[not found] <20040426082159.90513.qmail@web10102.mail.yahoo.com>
2004-04-26 9:32 ` Heilmann, Oliver
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20040424121310.83586.qmail@web10102.mail.yahoo.com \
--to=heilmano@yahoo.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®