From: Adam Belay <abelay@novell.com>
To: Linux-pm mailing list <linux-pm@lists.osdl.org>,
Greg KH <gregkh@suse.de>
Cc: linux-kernel@vger.kernel.org
Subject: [RFC][PATCH 6/6] PCI PM: pci_save/restore_state improvements
Date: Tue, 15 Nov 2005 22:31:42 -0500 [thread overview]
Message-ID: <1132111902.9809.59.camel@localhost.localdomain> (raw)
This patch makes some improvements to pci_save_state and
pci_restore_state. Instead of saving and restoring all standard
registers (even read-only ones), it only restores necessary registers.
Also, the command register is handled more carefully. Let me know if
I'm missing anything important.
--- a/drivers/pci/pm.c 2005-11-13 20:32:24.000000000 -0500
+++ b/drivers/pci/pm.c 2005-11-13 20:29:32.000000000 -0500
@@ -53,10 +53,13 @@
*/
int pci_save_state(struct pci_dev *dev)
{
- int i;
- /* XXX: 100% dword access ok here? */
- for (i = 0; i < 16; i++)
- pci_read_config_dword(dev, i * 4,&dev->saved_config_space[i]);
+ struct pci_dev_config * conf = &dev->saved_config;
+
+ pci_read_config_word(dev, PCI_COMMAND, &conf->command);
+ pci_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &conf->cacheline_size);
+ pci_read_config_byte(dev, PCI_LATENCY_TIMER, &conf->latency_timer);
+ pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &conf->interrupt_line);
+
return 0;
}
@@ -68,10 +71,20 @@
*/
int pci_restore_state(struct pci_dev *dev)
{
- int i;
+ u16 command;
+ struct pci_dev_config * conf = &dev->saved_config;
+
+ command = conf->command & ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY |
+ PCI_COMMAND_MASTER);
+
+ pci_write_config_word(dev, PCI_COMMAND, command);
+ pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, conf->cacheline_size);
+ pci_write_config_byte(dev, PCI_LATENCY_TIMER, conf->latency_timer);
+ pci_write_config_byte(dev, PCI_INTERRUPT_PIN, conf->interrupt_line);
+
+ pci_restore_bars(dev);
+
- for (i = 0; i < 16; i++)
- pci_write_config_dword(dev,i * 4, dev->saved_config_space[i]);
return 0;
}
--- a/include/linux/pci.h 2005-11-08 17:10:22.000000000 -0500
+++ b/include/linux/pci.h 2005-11-13 20:21:20.000000000 -0500
@@ -68,6 +68,13 @@
#define DEVICE_COUNT_COMPATIBLE 4
#define DEVICE_COUNT_RESOURCE 12
+struct pci_dev_config {
+ unsigned short command;
+ unsigned char cacheline_size;
+ unsigned char latency_timer;
+ unsigned char interrupt_line;
+};
+
struct pci_dev_pm {
unsigned int pm_offset; /* the PCI PM capability offset */
@@ -152,7 +159,7 @@
unsigned int is_busmaster:1; /* device is busmaster */
unsigned int no_msi:1; /* device may not use msi */
- u32 saved_config_space[16]; /* config space saved at suspend time */
+ struct pci_dev_config saved_config; /* config space saved for power management */
struct bin_attribute *rom_attr; /* attribute descriptor for sysfs ROM entry */
int rom_attr_enabled; /* has display of the rom attribute been enabled? */
struct bin_attribute *res_attr[DEVICE_COUNT_RESOURCE]; /* sysfs file for resources */
next reply other threads:[~2005-11-16 3:31 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-11-16 3:31 Adam Belay [this message]
2005-11-16 6:31 ` [RFC][PATCH 6/6] PCI PM: pci_save/restore_state improvements Greg KH
2005-11-16 7:26 ` Adam Belay
2005-11-16 18:06 ` Greg KH
2005-11-17 16:55 ` [linux-pm] " Patrick Mochel
2005-11-17 16:55 ` Patrick Mochel
2005-11-17 23:50 ` Adam Belay
2005-11-17 23:39 ` Greg KH
2005-11-17 23:39 ` [linux-pm] " Greg KH
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=1132111902.9809.59.camel@localhost.localdomain \
--to=abelay@novell.com \
--cc=gregkh@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@lists.osdl.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.