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 [PATCH] SIS AGP clean up, blacklist and module options 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.