diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/acpi/processor_perflib.c | 5 | ||||
| -rw-r--r-- | drivers/char/Makefile | 2 | ||||
| -rw-r--r-- | drivers/char/n_tty.c | 4 | ||||
| -rw-r--r-- | drivers/message/fusion/mptspi.c | 2 | ||||
| -rw-r--r-- | drivers/message/i2o/exec-osm.c | 72 | ||||
| -rw-r--r-- | drivers/message/i2o/iop.c | 4 | ||||
| -rw-r--r-- | drivers/net/sky2.c | 46 | ||||
| -rw-r--r-- | drivers/net/tg3.c | 144 | ||||
| -rw-r--r-- | drivers/net/tg3.h | 3 | ||||
| -rw-r--r-- | drivers/pci/pci-driver.c | 13 | ||||
| -rw-r--r-- | drivers/pci/pci.c | 18 | ||||
| -rw-r--r-- | drivers/scsi/sata_mv.c | 3 | ||||
| -rw-r--r-- | drivers/usb/host/ohci-pxa27x.c | 3 | ||||
| -rw-r--r-- | drivers/video/console/fbcon.c | 2 |
14 files changed, 160 insertions, 161 deletions
diff --git a/drivers/acpi/processor_perflib.c b/drivers/acpi/processor_perflib.c index abbdb37a7f5f..f36db22ce1ae 100644 --- a/drivers/acpi/processor_perflib.c +++ b/drivers/acpi/processor_perflib.c | |||
| @@ -577,6 +577,8 @@ acpi_processor_register_performance(struct acpi_processor_performance | |||
| 577 | return_VALUE(-EBUSY); | 577 | return_VALUE(-EBUSY); |
| 578 | } | 578 | } |
| 579 | 579 | ||
| 580 | WARN_ON(!performance); | ||
| 581 | |||
| 580 | pr->performance = performance; | 582 | pr->performance = performance; |
| 581 | 583 | ||
| 582 | if (acpi_processor_get_performance_info(pr)) { | 584 | if (acpi_processor_get_performance_info(pr)) { |
| @@ -609,7 +611,8 @@ acpi_processor_unregister_performance(struct acpi_processor_performance | |||
| 609 | return_VOID; | 611 | return_VOID; |
| 610 | } | 612 | } |
| 611 | 613 | ||
| 612 | kfree(pr->performance->states); | 614 | if (pr->performance) |
| 615 | kfree(pr->performance->states); | ||
| 613 | pr->performance = NULL; | 616 | pr->performance = NULL; |
| 614 | 617 | ||
| 615 | acpi_cpufreq_remove_file(pr); | 618 | acpi_cpufreq_remove_file(pr); |
diff --git a/drivers/char/Makefile b/drivers/char/Makefile index f5b01c6d498e..fb919bfb2824 100644 --- a/drivers/char/Makefile +++ b/drivers/char/Makefile | |||
| @@ -41,9 +41,9 @@ obj-$(CONFIG_N_HDLC) += n_hdlc.o | |||
| 41 | obj-$(CONFIG_AMIGA_BUILTIN_SERIAL) += amiserial.o | 41 | obj-$(CONFIG_AMIGA_BUILTIN_SERIAL) += amiserial.o |
| 42 | obj-$(CONFIG_SX) += sx.o generic_serial.o | 42 | obj-$(CONFIG_SX) += sx.o generic_serial.o |
| 43 | obj-$(CONFIG_RIO) += rio/ generic_serial.o | 43 | obj-$(CONFIG_RIO) += rio/ generic_serial.o |
| 44 | obj-$(CONFIG_HVC_DRIVER) += hvc_console.o | ||
| 45 | obj-$(CONFIG_HVC_CONSOLE) += hvc_vio.o hvsi.o | 44 | obj-$(CONFIG_HVC_CONSOLE) += hvc_vio.o hvsi.o |
| 46 | obj-$(CONFIG_HVC_RTAS) += hvc_rtas.o | 45 | obj-$(CONFIG_HVC_RTAS) += hvc_rtas.o |
| 46 | obj-$(CONFIG_HVC_DRIVER) += hvc_console.o | ||
| 47 | obj-$(CONFIG_RAW_DRIVER) += raw.o | 47 | obj-$(CONFIG_RAW_DRIVER) += raw.o |
| 48 | obj-$(CONFIG_SGI_SNSC) += snsc.o snsc_event.o | 48 | obj-$(CONFIG_SGI_SNSC) += snsc.o snsc_event.o |
| 49 | obj-$(CONFIG_MMTIMER) += mmtimer.o | 49 | obj-$(CONFIG_MMTIMER) += mmtimer.o |
diff --git a/drivers/char/n_tty.c b/drivers/char/n_tty.c index ede365d05387..b9371d5bf790 100644 --- a/drivers/char/n_tty.c +++ b/drivers/char/n_tty.c | |||
| @@ -1384,8 +1384,10 @@ do_it_again: | |||
| 1384 | * longer than TTY_THRESHOLD_UNTHROTTLE in canonical mode, | 1384 | * longer than TTY_THRESHOLD_UNTHROTTLE in canonical mode, |
| 1385 | * we won't get any more characters. | 1385 | * we won't get any more characters. |
| 1386 | */ | 1386 | */ |
| 1387 | if (n_tty_chars_in_buffer(tty) <= TTY_THRESHOLD_UNTHROTTLE) | 1387 | if (n_tty_chars_in_buffer(tty) <= TTY_THRESHOLD_UNTHROTTLE) { |
| 1388 | n_tty_set_room(tty); | ||
| 1388 | check_unthrottle(tty); | 1389 | check_unthrottle(tty); |
| 1390 | } | ||
| 1389 | 1391 | ||
| 1390 | if (b - buf >= minimum) | 1392 | if (b - buf >= minimum) |
| 1391 | break; | 1393 | break; |
diff --git a/drivers/message/fusion/mptspi.c b/drivers/message/fusion/mptspi.c index f2a4d382ea19..3201de053943 100644 --- a/drivers/message/fusion/mptspi.c +++ b/drivers/message/fusion/mptspi.c | |||
| @@ -831,6 +831,7 @@ mptspi_ioc_reset(MPT_ADAPTER *ioc, int reset_phase) | |||
| 831 | return rc; | 831 | return rc; |
| 832 | } | 832 | } |
| 833 | 833 | ||
| 834 | #ifdef CONFIG_PM | ||
| 834 | /* | 835 | /* |
| 835 | * spi module resume handler | 836 | * spi module resume handler |
| 836 | */ | 837 | */ |
| @@ -846,6 +847,7 @@ mptspi_resume(struct pci_dev *pdev) | |||
| 846 | 847 | ||
| 847 | return rc; | 848 | return rc; |
| 848 | } | 849 | } |
| 850 | #endif | ||
| 849 | 851 | ||
| 850 | /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ | 852 | /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ |
| 851 | /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ | 853 | /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ |
diff --git a/drivers/message/i2o/exec-osm.c b/drivers/message/i2o/exec-osm.c index 5ea133c59afb..7bd4d85d0b42 100644 --- a/drivers/message/i2o/exec-osm.c +++ b/drivers/message/i2o/exec-osm.c | |||
| @@ -55,6 +55,7 @@ struct i2o_exec_wait { | |||
| 55 | u32 m; /* message id */ | 55 | u32 m; /* message id */ |
| 56 | struct i2o_message *msg; /* pointer to the reply message */ | 56 | struct i2o_message *msg; /* pointer to the reply message */ |
| 57 | struct list_head list; /* node in global wait list */ | 57 | struct list_head list; /* node in global wait list */ |
| 58 | spinlock_t lock; /* lock before modifying */ | ||
| 58 | }; | 59 | }; |
| 59 | 60 | ||
| 60 | /* Work struct needed to handle LCT NOTIFY replies */ | 61 | /* Work struct needed to handle LCT NOTIFY replies */ |
| @@ -87,6 +88,7 @@ static struct i2o_exec_wait *i2o_exec_wait_alloc(void) | |||
| 87 | return NULL; | 88 | return NULL; |
| 88 | 89 | ||
| 89 | INIT_LIST_HEAD(&wait->list); | 90 | INIT_LIST_HEAD(&wait->list); |
| 91 | spin_lock_init(&wait->lock); | ||
| 90 | 92 | ||
| 91 | return wait; | 93 | return wait; |
| 92 | }; | 94 | }; |
| @@ -125,6 +127,7 @@ int i2o_msg_post_wait_mem(struct i2o_controller *c, struct i2o_message *msg, | |||
| 125 | DECLARE_WAIT_QUEUE_HEAD(wq); | 127 | DECLARE_WAIT_QUEUE_HEAD(wq); |
| 126 | struct i2o_exec_wait *wait; | 128 | struct i2o_exec_wait *wait; |
| 127 | static u32 tcntxt = 0x80000000; | 129 | static u32 tcntxt = 0x80000000; |
| 130 | long flags; | ||
| 128 | int rc = 0; | 131 | int rc = 0; |
| 129 | 132 | ||
| 130 | wait = i2o_exec_wait_alloc(); | 133 | wait = i2o_exec_wait_alloc(); |
| @@ -146,33 +149,28 @@ int i2o_msg_post_wait_mem(struct i2o_controller *c, struct i2o_message *msg, | |||
| 146 | wait->tcntxt = tcntxt++; | 149 | wait->tcntxt = tcntxt++; |
| 147 | msg->u.s.tcntxt = cpu_to_le32(wait->tcntxt); | 150 | msg->u.s.tcntxt = cpu_to_le32(wait->tcntxt); |
| 148 | 151 | ||
| 152 | wait->wq = &wq; | ||
| 153 | /* | ||
| 154 | * we add elements to the head, because if a entry in the list will | ||
| 155 | * never be removed, we have to iterate over it every time | ||
| 156 | */ | ||
| 157 | list_add(&wait->list, &i2o_exec_wait_list); | ||
| 158 | |||
| 149 | /* | 159 | /* |
| 150 | * Post the message to the controller. At some point later it will | 160 | * Post the message to the controller. At some point later it will |
| 151 | * return. If we time out before it returns then complete will be zero. | 161 | * return. If we time out before it returns then complete will be zero. |
| 152 | */ | 162 | */ |
| 153 | i2o_msg_post(c, msg); | 163 | i2o_msg_post(c, msg); |
| 154 | 164 | ||
| 155 | if (!wait->complete) { | 165 | wait_event_interruptible_timeout(wq, wait->complete, timeout * HZ); |
| 156 | wait->wq = &wq; | ||
| 157 | /* | ||
| 158 | * we add elements add the head, because if a entry in the list | ||
| 159 | * will never be removed, we have to iterate over it every time | ||
| 160 | */ | ||
| 161 | list_add(&wait->list, &i2o_exec_wait_list); | ||
| 162 | |||
| 163 | wait_event_interruptible_timeout(wq, wait->complete, | ||
| 164 | timeout * HZ); | ||
| 165 | 166 | ||
| 166 | wait->wq = NULL; | 167 | spin_lock_irqsave(&wait->lock, flags); |
| 167 | } | ||
| 168 | 168 | ||
| 169 | barrier(); | 169 | wait->wq = NULL; |
| 170 | 170 | ||
| 171 | if (wait->complete) { | 171 | if (wait->complete) |
| 172 | rc = le32_to_cpu(wait->msg->body[0]) >> 24; | 172 | rc = le32_to_cpu(wait->msg->body[0]) >> 24; |
| 173 | i2o_flush_reply(c, wait->m); | 173 | else { |
| 174 | i2o_exec_wait_free(wait); | ||
| 175 | } else { | ||
| 176 | /* | 174 | /* |
| 177 | * We cannot remove it now. This is important. When it does | 175 | * We cannot remove it now. This is important. When it does |
| 178 | * terminate (which it must do if the controller has not | 176 | * terminate (which it must do if the controller has not |
| @@ -186,6 +184,13 @@ int i2o_msg_post_wait_mem(struct i2o_controller *c, struct i2o_message *msg, | |||
| 186 | rc = -ETIMEDOUT; | 184 | rc = -ETIMEDOUT; |
| 187 | } | 185 | } |
| 188 | 186 | ||
| 187 | spin_unlock_irqrestore(&wait->lock, flags); | ||
| 188 | |||
| 189 | if (rc != -ETIMEDOUT) { | ||
| 190 | i2o_flush_reply(c, wait->m); | ||
| 191 | i2o_exec_wait_free(wait); | ||
| 192 | } | ||
| 193 | |||
| 189 | return rc; | 194 | return rc; |
| 190 | }; | 195 | }; |
| 191 | 196 | ||
| @@ -213,7 +218,6 @@ static int i2o_msg_post_wait_complete(struct i2o_controller *c, u32 m, | |||
| 213 | { | 218 | { |
| 214 | struct i2o_exec_wait *wait, *tmp; | 219 | struct i2o_exec_wait *wait, *tmp; |
| 215 | unsigned long flags; | 220 | unsigned long flags; |
| 216 | static spinlock_t lock = SPIN_LOCK_UNLOCKED; | ||
| 217 | int rc = 1; | 221 | int rc = 1; |
| 218 | 222 | ||
| 219 | /* | 223 | /* |
| @@ -223,23 +227,24 @@ static int i2o_msg_post_wait_complete(struct i2o_controller *c, u32 m, | |||
| 223 | * already expired. Not much we can do about that except log it for | 227 | * already expired. Not much we can do about that except log it for |
| 224 | * debug purposes, increase timeout, and recompile. | 228 | * debug purposes, increase timeout, and recompile. |
| 225 | */ | 229 | */ |
| 226 | spin_lock_irqsave(&lock, flags); | ||
| 227 | list_for_each_entry_safe(wait, tmp, &i2o_exec_wait_list, list) { | 230 | list_for_each_entry_safe(wait, tmp, &i2o_exec_wait_list, list) { |
| 228 | if (wait->tcntxt == context) { | 231 | if (wait->tcntxt == context) { |
| 229 | list_del(&wait->list); | 232 | spin_lock_irqsave(&wait->lock, flags); |
| 230 | 233 | ||
| 231 | spin_unlock_irqrestore(&lock, flags); | 234 | list_del(&wait->list); |
| 232 | 235 | ||
| 233 | wait->m = m; | 236 | wait->m = m; |
| 234 | wait->msg = msg; | 237 | wait->msg = msg; |
| 235 | wait->complete = 1; | 238 | wait->complete = 1; |
| 236 | 239 | ||
| 237 | barrier(); | 240 | if (wait->wq) |
| 238 | |||
| 239 | if (wait->wq) { | ||
| 240 | wake_up_interruptible(wait->wq); | ||
| 241 | rc = 0; | 241 | rc = 0; |
| 242 | } else { | 242 | else |
| 243 | rc = -1; | ||
| 244 | |||
| 245 | spin_unlock_irqrestore(&wait->lock, flags); | ||
| 246 | |||
| 247 | if (rc) { | ||
| 243 | struct device *dev; | 248 | struct device *dev; |
| 244 | 249 | ||
| 245 | dev = &c->pdev->dev; | 250 | dev = &c->pdev->dev; |
| @@ -248,15 +253,13 @@ static int i2o_msg_post_wait_complete(struct i2o_controller *c, u32 m, | |||
| 248 | c->name); | 253 | c->name); |
| 249 | i2o_dma_free(dev, &wait->dma); | 254 | i2o_dma_free(dev, &wait->dma); |
| 250 | i2o_exec_wait_free(wait); | 255 | i2o_exec_wait_free(wait); |
| 251 | rc = -1; | 256 | } else |
| 252 | } | 257 | wake_up_interruptible(wait->wq); |
| 253 | 258 | ||
| 254 | return rc; | 259 | return rc; |
| 255 | } | 260 | } |
| 256 | } | 261 | } |
| 257 | 262 | ||
| 258 | spin_unlock_irqrestore(&lock, flags); | ||
| 259 | |||
| 260 | osm_warn("%s: Bogus reply in POST WAIT (tr-context: %08x)!\n", c->name, | 263 | osm_warn("%s: Bogus reply in POST WAIT (tr-context: %08x)!\n", c->name, |
| 261 | context); | 264 | context); |
| 262 | 265 | ||
| @@ -322,14 +325,9 @@ static DEVICE_ATTR(product_id, S_IRUGO, i2o_exec_show_product_id, NULL); | |||
| 322 | static int i2o_exec_probe(struct device *dev) | 325 | static int i2o_exec_probe(struct device *dev) |
| 323 | { | 326 | { |
| 324 | struct i2o_device *i2o_dev = to_i2o_device(dev); | 327 | struct i2o_device *i2o_dev = to_i2o_device(dev); |
| 325 | struct i2o_controller *c = i2o_dev->iop; | ||
| 326 | 328 | ||
| 327 | i2o_event_register(i2o_dev, &i2o_exec_driver, 0, 0xffffffff); | 329 | i2o_event_register(i2o_dev, &i2o_exec_driver, 0, 0xffffffff); |
| 328 | 330 | ||
| 329 | c->exec = i2o_dev; | ||
| 330 | |||
| 331 | i2o_exec_lct_notify(c, c->lct->change_ind + 1); | ||
| 332 | |||
| 333 | device_create_file(dev, &dev_attr_vendor_id); | 331 | device_create_file(dev, &dev_attr_vendor_id); |
| 334 | device_create_file(dev, &dev_attr_product_id); | 332 | device_create_file(dev, &dev_attr_product_id); |
| 335 | 333 | ||
| @@ -523,6 +521,8 @@ static int i2o_exec_lct_notify(struct i2o_controller *c, u32 change_ind) | |||
| 523 | struct device *dev; | 521 | struct device *dev; |
| 524 | struct i2o_message *msg; | 522 | struct i2o_message *msg; |
| 525 | 523 | ||
| 524 | down(&c->lct_lock); | ||
| 525 | |||
| 526 | dev = &c->pdev->dev; | 526 | dev = &c->pdev->dev; |
| 527 | 527 | ||
| 528 | if (i2o_dma_realloc | 528 | if (i2o_dma_realloc |
| @@ -545,6 +545,8 @@ static int i2o_exec_lct_notify(struct i2o_controller *c, u32 change_ind) | |||
| 545 | 545 | ||
| 546 | i2o_msg_post(c, msg); | 546 | i2o_msg_post(c, msg); |
| 547 | 547 | ||
| 548 | up(&c->lct_lock); | ||
| 549 | |||
| 548 | return 0; | 550 | return 0; |
| 549 | }; | 551 | }; |
| 550 | 552 | ||
diff --git a/drivers/message/i2o/iop.c b/drivers/message/i2o/iop.c index 492167446936..febbdd4e0605 100644 --- a/drivers/message/i2o/iop.c +++ b/drivers/message/i2o/iop.c | |||
| @@ -804,8 +804,6 @@ void i2o_iop_remove(struct i2o_controller *c) | |||
| 804 | 804 | ||
| 805 | /* Ask the IOP to switch to RESET state */ | 805 | /* Ask the IOP to switch to RESET state */ |
| 806 | i2o_iop_reset(c); | 806 | i2o_iop_reset(c); |
| 807 | |||
| 808 | put_device(&c->device); | ||
| 809 | } | 807 | } |
| 810 | 808 | ||
| 811 | /** | 809 | /** |
| @@ -1059,7 +1057,7 @@ struct i2o_controller *i2o_iop_alloc(void) | |||
| 1059 | 1057 | ||
| 1060 | snprintf(poolname, sizeof(poolname), "i2o_%s_msg_inpool", c->name); | 1058 | snprintf(poolname, sizeof(poolname), "i2o_%s_msg_inpool", c->name); |
| 1061 | if (i2o_pool_alloc | 1059 | if (i2o_pool_alloc |
| 1062 | (&c->in_msg, poolname, I2O_INBOUND_MSG_FRAME_SIZE * 4, | 1060 | (&c->in_msg, poolname, I2O_INBOUND_MSG_FRAME_SIZE * 4 + sizeof(u32), |
| 1063 | I2O_MSG_INPOOL_MIN)) { | 1061 | I2O_MSG_INPOOL_MIN)) { |
| 1064 | kfree(c); | 1062 | kfree(c); |
| 1065 | return ERR_PTR(-ENOMEM); | 1063 | return ERR_PTR(-ENOMEM); |
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index 959109609d85..97fe95666f3b 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c | |||
| @@ -187,12 +187,11 @@ static u16 gm_phy_read(struct sky2_hw *hw, unsigned port, u16 reg) | |||
| 187 | return v; | 187 | return v; |
| 188 | } | 188 | } |
| 189 | 189 | ||
| 190 | static int sky2_set_power_state(struct sky2_hw *hw, pci_power_t state) | 190 | static void sky2_set_power_state(struct sky2_hw *hw, pci_power_t state) |
| 191 | { | 191 | { |
| 192 | u16 power_control; | 192 | u16 power_control; |
| 193 | u32 reg1; | 193 | u32 reg1; |
| 194 | int vaux; | 194 | int vaux; |
| 195 | int ret = 0; | ||
| 196 | 195 | ||
| 197 | pr_debug("sky2_set_power_state %d\n", state); | 196 | pr_debug("sky2_set_power_state %d\n", state); |
| 198 | sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON); | 197 | sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_ON); |
| @@ -275,12 +274,10 @@ static int sky2_set_power_state(struct sky2_hw *hw, pci_power_t state) | |||
| 275 | break; | 274 | break; |
| 276 | default: | 275 | default: |
| 277 | printk(KERN_ERR PFX "Unknown power state %d\n", state); | 276 | printk(KERN_ERR PFX "Unknown power state %d\n", state); |
| 278 | ret = -1; | ||
| 279 | } | 277 | } |
| 280 | 278 | ||
| 281 | sky2_pci_write16(hw, hw->pm_cap + PCI_PM_CTRL, power_control); | 279 | sky2_pci_write16(hw, hw->pm_cap + PCI_PM_CTRL, power_control); |
| 282 | sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF); | 280 | sky2_write8(hw, B2_TST_CTRL1, TST_CFG_WRITE_OFF); |
| 283 | return ret; | ||
| 284 | } | 281 | } |
| 285 | 282 | ||
| 286 | static void sky2_phy_reset(struct sky2_hw *hw, unsigned port) | 283 | static void sky2_phy_reset(struct sky2_hw *hw, unsigned port) |
| @@ -2164,6 +2161,13 @@ static void sky2_descriptor_error(struct sky2_hw *hw, unsigned port, | |||
| 2164 | /* If idle then force a fake soft NAPI poll once a second | 2161 | /* If idle then force a fake soft NAPI poll once a second |
| 2165 | * to work around cases where sharing an edge triggered interrupt. | 2162 | * to work around cases where sharing an edge triggered interrupt. |
| 2166 | */ | 2163 | */ |
| 2164 | static inline void sky2_idle_start(struct sky2_hw *hw) | ||
| 2165 | { | ||
| 2166 | if (idle_timeout > 0) | ||
| 2167 | mod_timer(&hw->idle_timer, | ||
| 2168 | jiffies + msecs_to_jiffies(idle_timeout)); | ||
| 2169 | } | ||
| 2170 | |||
| 2167 | static void sky2_idle(unsigned long arg) | 2171 | static void sky2_idle(unsigned long arg) |
| 2168 | { | 2172 | { |
| 2169 | struct sky2_hw *hw = (struct sky2_hw *) arg; | 2173 | struct sky2_hw *hw = (struct sky2_hw *) arg; |
| @@ -2183,6 +2187,9 @@ static int sky2_poll(struct net_device *dev0, int *budget) | |||
| 2183 | int work_done = 0; | 2187 | int work_done = 0; |
| 2184 | u32 status = sky2_read32(hw, B0_Y2_SP_EISR); | 2188 | u32 status = sky2_read32(hw, B0_Y2_SP_EISR); |
| 2185 | 2189 | ||
| 2190 | if (!~status) | ||
| 2191 | goto out; | ||
| 2192 | |||
| 2186 | if (status & Y2_IS_HW_ERR) | 2193 | if (status & Y2_IS_HW_ERR) |
| 2187 | sky2_hw_intr(hw); | 2194 | sky2_hw_intr(hw); |
| 2188 | 2195 | ||
| @@ -2219,7 +2226,7 @@ static int sky2_poll(struct net_device *dev0, int *budget) | |||
| 2219 | 2226 | ||
| 2220 | if (sky2_more_work(hw)) | 2227 | if (sky2_more_work(hw)) |
| 2221 | return 1; | 2228 | return 1; |
| 2222 | 2229 | out: | |
| 2223 | netif_rx_complete(dev0); | 2230 | netif_rx_complete(dev0); |
| 2224 | 2231 | ||
| 2225 | sky2_read32(hw, B0_Y2_SP_LISR); | 2232 | sky2_read32(hw, B0_Y2_SP_LISR); |
| @@ -3350,9 +3357,7 @@ static int __devinit sky2_probe(struct pci_dev *pdev, | |||
| 3350 | sky2_write32(hw, B0_IMSK, Y2_IS_BASE); | 3357 | sky2_write32(hw, B0_IMSK, Y2_IS_BASE); |
| 3351 | 3358 | ||
| 3352 | setup_timer(&hw->idle_timer, sky2_idle, (unsigned long) hw); | 3359 | setup_timer(&hw->idle_timer, sky2_idle, (unsigned long) hw); |
| 3353 | if (idle_timeout > 0) | 3360 | sky2_idle_start(hw); |
| 3354 | mod_timer(&hw->idle_timer, | ||
| 3355 | jiffies + msecs_to_jiffies(idle_timeout)); | ||
| 3356 | 3361 | ||
| 3357 | pci_set_drvdata(pdev, hw); | 3362 | pci_set_drvdata(pdev, hw); |
| 3358 | 3363 | ||
| @@ -3425,8 +3430,14 @@ static int sky2_suspend(struct pci_dev *pdev, pm_message_t state) | |||
| 3425 | { | 3430 | { |
| 3426 | struct sky2_hw *hw = pci_get_drvdata(pdev); | 3431 | struct sky2_hw *hw = pci_get_drvdata(pdev); |
| 3427 | int i; | 3432 | int i; |
| 3433 | pci_power_t pstate = pci_choose_state(pdev, state); | ||
| 3434 | |||
| 3435 | if (!(pstate == PCI_D3hot || pstate == PCI_D3cold)) | ||
| 3436 | return -EINVAL; | ||
| 3437 | |||
| 3438 | del_timer_sync(&hw->idle_timer); | ||
| 3428 | 3439 | ||
| 3429 | for (i = 0; i < 2; i++) { | 3440 | for (i = 0; i < hw->ports; i++) { |
| 3430 | struct net_device *dev = hw->dev[i]; | 3441 | struct net_device *dev = hw->dev[i]; |
| 3431 | 3442 | ||
| 3432 | if (dev) { | 3443 | if (dev) { |
| @@ -3438,7 +3449,10 @@ static int sky2_suspend(struct pci_dev *pdev, pm_message_t state) | |||
| 3438 | } | 3449 | } |
| 3439 | } | 3450 | } |
| 3440 | 3451 | ||
| 3441 | return sky2_set_power_state(hw, pci_choose_state(pdev, state)); | 3452 | sky2_write32(hw, B0_IMSK, 0); |
| 3453 | pci_save_state(pdev); | ||
| 3454 | sky2_set_power_state(hw, pstate); | ||
| 3455 | return 0; | ||
| 3442 | } | 3456 | } |
| 3443 | 3457 | ||
| 3444 | static int sky2_resume(struct pci_dev *pdev) | 3458 | static int sky2_resume(struct pci_dev *pdev) |
| @@ -3448,15 +3462,15 @@ static int sky2_resume(struct pci_dev *pdev) | |||
| 3448 | 3462 | ||
| 3449 | pci_restore_state(pdev); | 3463 | pci_restore_state(pdev); |
| 3450 | pci_enable_wake(pdev, PCI_D0, 0); | 3464 | pci_enable_wake(pdev, PCI_D0, 0); |
| 3451 | err = sky2_set_power_state(hw, PCI_D0); | 3465 | sky2_set_power_state(hw, PCI_D0); |
| 3452 | if (err) | ||
| 3453 | goto out; | ||
| 3454 | 3466 | ||
| 3455 | err = sky2_reset(hw); | 3467 | err = sky2_reset(hw); |
| 3456 | if (err) | 3468 | if (err) |
| 3457 | goto out; | 3469 | goto out; |
| 3458 | 3470 | ||
| 3459 | for (i = 0; i < 2; i++) { | 3471 | sky2_write32(hw, B0_IMSK, Y2_IS_BASE); |
| 3472 | |||
| 3473 | for (i = 0; i < hw->ports; i++) { | ||
| 3460 | struct net_device *dev = hw->dev[i]; | 3474 | struct net_device *dev = hw->dev[i]; |
| 3461 | if (dev && netif_running(dev)) { | 3475 | if (dev && netif_running(dev)) { |
| 3462 | netif_device_attach(dev); | 3476 | netif_device_attach(dev); |
| @@ -3465,10 +3479,12 @@ static int sky2_resume(struct pci_dev *pdev) | |||
| 3465 | printk(KERN_ERR PFX "%s: could not up: %d\n", | 3479 | printk(KERN_ERR PFX "%s: could not up: %d\n", |
| 3466 | dev->name, err); | 3480 | dev->name, err); |
| 3467 | dev_close(dev); | 3481 | dev_close(dev); |
| 3468 | break; | 3482 | goto out; |
| 3469 | } | 3483 | } |
| 3470 | } | 3484 | } |
| 3471 | } | 3485 | } |
| 3486 | |||
| 3487 | sky2_idle_start(hw); | ||
| 3472 | out: | 3488 | out: |
| 3473 | return err; | 3489 | return err; |
| 3474 | } | 3490 | } |
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index 49ad60b72657..862c226dbbe2 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
| @@ -69,8 +69,8 @@ | |||
| 69 | 69 | ||
| 70 | #define DRV_MODULE_NAME "tg3" | 70 | #define DRV_MODULE_NAME "tg3" |
| 71 | #define PFX DRV_MODULE_NAME ": " | 71 | #define PFX DRV_MODULE_NAME ": " |
| 72 | #define DRV_MODULE_VERSION "3.58" | 72 | #define DRV_MODULE_VERSION "3.59" |
| 73 | #define DRV_MODULE_RELDATE "May 22, 2006" | 73 | #define DRV_MODULE_RELDATE "June 8, 2006" |
| 74 | 74 | ||
| 75 | #define TG3_DEF_MAC_MODE 0 | 75 | #define TG3_DEF_MAC_MODE 0 |
| 76 | #define TG3_DEF_RX_MODE 0 | 76 | #define TG3_DEF_RX_MODE 0 |
| @@ -4485,9 +4485,8 @@ static void tg3_disable_nvram_access(struct tg3 *tp) | |||
| 4485 | /* tp->lock is held. */ | 4485 | /* tp->lock is held. */ |
| 4486 | static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind) | 4486 | static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind) |
| 4487 | { | 4487 | { |
| 4488 | if (!(tp->tg3_flags2 & TG3_FLG2_SUN_570X)) | 4488 | tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX, |
| 4489 | tg3_write_mem(tp, NIC_SRAM_FIRMWARE_MBOX, | 4489 | NIC_SRAM_FIRMWARE_MBOX_MAGIC1); |
| 4490 | NIC_SRAM_FIRMWARE_MBOX_MAGIC1); | ||
| 4491 | 4490 | ||
| 4492 | if (tp->tg3_flags2 & TG3_FLG2_ASF_NEW_HANDSHAKE) { | 4491 | if (tp->tg3_flags2 & TG3_FLG2_ASF_NEW_HANDSHAKE) { |
| 4493 | switch (kind) { | 4492 | switch (kind) { |
| @@ -4568,13 +4567,12 @@ static int tg3_chip_reset(struct tg3 *tp) | |||
| 4568 | void (*write_op)(struct tg3 *, u32, u32); | 4567 | void (*write_op)(struct tg3 *, u32, u32); |
| 4569 | int i; | 4568 | int i; |
| 4570 | 4569 | ||
| 4571 | if (!(tp->tg3_flags2 & TG3_FLG2_SUN_570X)) { | 4570 | tg3_nvram_lock(tp); |
| 4572 | tg3_nvram_lock(tp); | 4571 | |
| 4573 | /* No matching tg3_nvram_unlock() after this because | 4572 | /* No matching tg3_nvram_unlock() after this because |
| 4574 | * chip reset below will undo the nvram lock. | 4573 | * chip reset below will undo the nvram lock. |
| 4575 | */ | 4574 | */ |
| 4576 | tp->nvram_lock_cnt = 0; | 4575 | tp->nvram_lock_cnt = 0; |
| 4577 | } | ||
| 4578 | 4576 | ||
| 4579 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || | 4577 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5752 || |
| 4580 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || | 4578 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || |
| @@ -4727,20 +4725,25 @@ static int tg3_chip_reset(struct tg3 *tp) | |||
| 4727 | tw32_f(MAC_MODE, 0); | 4725 | tw32_f(MAC_MODE, 0); |
| 4728 | udelay(40); | 4726 | udelay(40); |
| 4729 | 4727 | ||
| 4730 | if (!(tp->tg3_flags2 & TG3_FLG2_SUN_570X)) { | 4728 | /* Wait for firmware initialization to complete. */ |
| 4731 | /* Wait for firmware initialization to complete. */ | 4729 | for (i = 0; i < 100000; i++) { |
| 4732 | for (i = 0; i < 100000; i++) { | 4730 | tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val); |
| 4733 | tg3_read_mem(tp, NIC_SRAM_FIRMWARE_MBOX, &val); | 4731 | if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1) |
| 4734 | if (val == ~NIC_SRAM_FIRMWARE_MBOX_MAGIC1) | 4732 | break; |
| 4735 | break; | 4733 | udelay(10); |
| 4736 | udelay(10); | 4734 | } |
| 4737 | } | 4735 | |
| 4738 | if (i >= 100000) { | 4736 | /* Chip might not be fitted with firmare. Some Sun onboard |
| 4739 | printk(KERN_ERR PFX "tg3_reset_hw timed out for %s, " | 4737 | * parts are configured like that. So don't signal the timeout |
| 4740 | "firmware will not restart magic=%08x\n", | 4738 | * of the above loop as an error, but do report the lack of |
| 4741 | tp->dev->name, val); | 4739 | * running firmware once. |
| 4742 | return -ENODEV; | 4740 | */ |
| 4743 | } | 4741 | if (i >= 100000 && |
| 4742 | !(tp->tg3_flags2 & TG3_FLG2_NO_FWARE_REPORTED)) { | ||
| 4743 | tp->tg3_flags2 |= TG3_FLG2_NO_FWARE_REPORTED; | ||
| 4744 | |||
| 4745 | printk(KERN_INFO PFX "%s: No firmware running.\n", | ||
| 4746 | tp->dev->name); | ||
| 4744 | } | 4747 | } |
| 4745 | 4748 | ||
| 4746 | if ((tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) && | 4749 | if ((tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) && |
| @@ -9075,9 +9078,6 @@ static void __devinit tg3_nvram_init(struct tg3 *tp) | |||
| 9075 | { | 9078 | { |
| 9076 | int j; | 9079 | int j; |
| 9077 | 9080 | ||
| 9078 | if (tp->tg3_flags2 & TG3_FLG2_SUN_570X) | ||
| 9079 | return; | ||
| 9080 | |||
| 9081 | tw32_f(GRC_EEPROM_ADDR, | 9081 | tw32_f(GRC_EEPROM_ADDR, |
| 9082 | (EEPROM_ADDR_FSM_RESET | | 9082 | (EEPROM_ADDR_FSM_RESET | |
| 9083 | (EEPROM_DEFAULT_CLOCK_PERIOD << | 9083 | (EEPROM_DEFAULT_CLOCK_PERIOD << |
| @@ -9210,11 +9210,6 @@ static int tg3_nvram_read(struct tg3 *tp, u32 offset, u32 *val) | |||
| 9210 | { | 9210 | { |
| 9211 | int ret; | 9211 | int ret; |
| 9212 | 9212 | ||
| 9213 | if (tp->tg3_flags2 & TG3_FLG2_SUN_570X) { | ||
| 9214 | printk(KERN_ERR PFX "Attempt to do nvram_read on Sun 570X\n"); | ||
| 9215 | return -EINVAL; | ||
| 9216 | } | ||
| 9217 | |||
| 9218 | if (!(tp->tg3_flags & TG3_FLAG_NVRAM)) | 9213 | if (!(tp->tg3_flags & TG3_FLAG_NVRAM)) |
| 9219 | return tg3_nvram_read_using_eeprom(tp, offset, val); | 9214 | return tg3_nvram_read_using_eeprom(tp, offset, val); |
| 9220 | 9215 | ||
| @@ -9447,11 +9442,6 @@ static int tg3_nvram_write_block(struct tg3 *tp, u32 offset, u32 len, u8 *buf) | |||
| 9447 | { | 9442 | { |
| 9448 | int ret; | 9443 | int ret; |
| 9449 | 9444 | ||
| 9450 | if (tp->tg3_flags2 & TG3_FLG2_SUN_570X) { | ||
| 9451 | printk(KERN_ERR PFX "Attempt to do nvram_write on Sun 570X\n"); | ||
| 9452 | return -EINVAL; | ||
| 9453 | } | ||
| 9454 | |||
| 9455 | if (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) { | 9445 | if (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) { |
| 9456 | tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl & | 9446 | tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl & |
| 9457 | ~GRC_LCLCTRL_GPIO_OUTPUT1); | 9447 | ~GRC_LCLCTRL_GPIO_OUTPUT1); |
| @@ -9578,15 +9568,19 @@ static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp) | |||
| 9578 | pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, | 9568 | pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, |
| 9579 | tp->misc_host_ctrl); | 9569 | tp->misc_host_ctrl); |
| 9580 | 9570 | ||
| 9571 | /* The memory arbiter has to be enabled in order for SRAM accesses | ||
| 9572 | * to succeed. Normally on powerup the tg3 chip firmware will make | ||
| 9573 | * sure it is enabled, but other entities such as system netboot | ||
| 9574 | * code might disable it. | ||
| 9575 | */ | ||
| 9576 | val = tr32(MEMARB_MODE); | ||
| 9577 | tw32(MEMARB_MODE, val | MEMARB_MODE_ENABLE); | ||
| 9578 | |||
| 9581 | tp->phy_id = PHY_ID_INVALID; | 9579 | tp->phy_id = PHY_ID_INVALID; |
| 9582 | tp->led_ctrl = LED_CTRL_MODE_PHY_1; | 9580 | tp->led_ctrl = LED_CTRL_MODE_PHY_1; |
| 9583 | 9581 | ||
| 9584 | /* Do not even try poking around in here on Sun parts. */ | 9582 | /* Assume an onboard device by default. */ |
| 9585 | if (tp->tg3_flags2 & TG3_FLG2_SUN_570X) { | 9583 | tp->tg3_flags |= TG3_FLAG_EEPROM_WRITE_PROT; |
| 9586 | /* All SUN chips are built-in LOMs. */ | ||
| 9587 | tp->tg3_flags |= TG3_FLAG_EEPROM_WRITE_PROT; | ||
| 9588 | return; | ||
| 9589 | } | ||
| 9590 | 9584 | ||
| 9591 | tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); | 9585 | tg3_read_mem(tp, NIC_SRAM_DATA_SIG, &val); |
| 9592 | if (val == NIC_SRAM_DATA_SIG_MAGIC) { | 9586 | if (val == NIC_SRAM_DATA_SIG_MAGIC) { |
| @@ -9686,6 +9680,8 @@ static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp) | |||
| 9686 | 9680 | ||
| 9687 | if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) | 9681 | if (nic_cfg & NIC_SRAM_DATA_CFG_EEPROM_WP) |
| 9688 | tp->tg3_flags |= TG3_FLAG_EEPROM_WRITE_PROT; | 9682 | tp->tg3_flags |= TG3_FLAG_EEPROM_WRITE_PROT; |
| 9683 | else | ||
| 9684 | tp->tg3_flags &= ~TG3_FLAG_EEPROM_WRITE_PROT; | ||
| 9689 | 9685 | ||
| 9690 | if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { | 9686 | if (nic_cfg & NIC_SRAM_DATA_CFG_ASF_ENABLE) { |
| 9691 | tp->tg3_flags |= TG3_FLAG_ENABLE_ASF; | 9687 | tp->tg3_flags |= TG3_FLAG_ENABLE_ASF; |
| @@ -9834,16 +9830,8 @@ static void __devinit tg3_read_partno(struct tg3 *tp) | |||
| 9834 | int i; | 9830 | int i; |
| 9835 | u32 magic; | 9831 | u32 magic; |
| 9836 | 9832 | ||
| 9837 | if (tp->tg3_flags2 & TG3_FLG2_SUN_570X) { | ||
| 9838 | /* Sun decided not to put the necessary bits in the | ||
| 9839 | * NVRAM of their onboard tg3 parts :( | ||
| 9840 | */ | ||
| 9841 | strcpy(tp->board_part_number, "Sun 570X"); | ||
| 9842 | return; | ||
| 9843 | } | ||
| 9844 | |||
| 9845 | if (tg3_nvram_read_swab(tp, 0x0, &magic)) | 9833 | if (tg3_nvram_read_swab(tp, 0x0, &magic)) |
| 9846 | return; | 9834 | goto out_not_found; |
| 9847 | 9835 | ||
| 9848 | if (magic == TG3_EEPROM_MAGIC) { | 9836 | if (magic == TG3_EEPROM_MAGIC) { |
| 9849 | for (i = 0; i < 256; i += 4) { | 9837 | for (i = 0; i < 256; i += 4) { |
| @@ -9874,6 +9862,9 @@ static void __devinit tg3_read_partno(struct tg3 *tp) | |||
| 9874 | break; | 9862 | break; |
| 9875 | msleep(1); | 9863 | msleep(1); |
| 9876 | } | 9864 | } |
| 9865 | if (!(tmp16 & 0x8000)) | ||
| 9866 | goto out_not_found; | ||
| 9867 | |||
| 9877 | pci_read_config_dword(tp->pdev, vpd_cap + PCI_VPD_DATA, | 9868 | pci_read_config_dword(tp->pdev, vpd_cap + PCI_VPD_DATA, |
| 9878 | &tmp); | 9869 | &tmp); |
| 9879 | tmp = cpu_to_le32(tmp); | 9870 | tmp = cpu_to_le32(tmp); |
| @@ -9965,37 +9956,6 @@ static void __devinit tg3_read_fw_ver(struct tg3 *tp) | |||
| 9965 | } | 9956 | } |
| 9966 | } | 9957 | } |
| 9967 | 9958 | ||
| 9968 | #ifdef CONFIG_SPARC64 | ||
| 9969 | static int __devinit tg3_is_sun_570X(struct tg3 *tp) | ||
| 9970 | { | ||
| 9971 | struct pci_dev *pdev = tp->pdev; | ||
| 9972 | struct pcidev_cookie *pcp = pdev->sysdata; | ||
| 9973 | |||
| 9974 | if (pcp != NULL) { | ||
| 9975 | int node = pcp->prom_node; | ||
| 9976 | u32 venid; | ||
| 9977 | int err; | ||
| 9978 | |||
| 9979 | err = prom_getproperty(node, "subsystem-vendor-id", | ||
| 9980 | (char *) &venid, sizeof(venid)); | ||
| 9981 | if (err == 0 || err == -1) | ||
| 9982 | return 0; | ||
| 9983 | if (venid == PCI_VENDOR_ID_SUN) | ||
| 9984 | return 1; | ||
| 9985 | |||
| 9986 | /* TG3 chips onboard the SunBlade-2500 don't have the | ||
| 9987 | * subsystem-vendor-id set to PCI_VENDOR_ID_SUN but they | ||
| 9988 | * are distinguishable from non-Sun variants by being | ||
| 9989 | * named "network" by the firmware. Non-Sun cards will | ||
| 9990 | * show up as being named "ethernet". | ||
| 9991 | */ | ||
| 9992 | if (!strcmp(pcp->prom_name, "network")) | ||
| 9993 | return 1; | ||
| 9994 | } | ||
| 9995 | return 0; | ||
| 9996 | } | ||
| 9997 | #endif | ||
| 9998 | |||
| 9999 | static int __devinit tg3_get_invariants(struct tg3 *tp) | 9959 | static int __devinit tg3_get_invariants(struct tg3 *tp) |
| 10000 | { | 9960 | { |
| 10001 | static struct pci_device_id write_reorder_chipsets[] = { | 9961 | static struct pci_device_id write_reorder_chipsets[] = { |
| @@ -10012,11 +9972,6 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
| 10012 | u16 pci_cmd; | 9972 | u16 pci_cmd; |
| 10013 | int err; | 9973 | int err; |
| 10014 | 9974 | ||
| 10015 | #ifdef CONFIG_SPARC64 | ||
| 10016 | if (tg3_is_sun_570X(tp)) | ||
| 10017 | tp->tg3_flags2 |= TG3_FLG2_SUN_570X; | ||
| 10018 | #endif | ||
| 10019 | |||
| 10020 | /* Force memory write invalidate off. If we leave it on, | 9975 | /* Force memory write invalidate off. If we leave it on, |
| 10021 | * then on 5700_BX chips we have to enable a workaround. | 9976 | * then on 5700_BX chips we have to enable a workaround. |
| 10022 | * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary | 9977 | * The workaround is to set the TG3PCI_DMA_RW_CTRL boundary |
| @@ -10312,8 +10267,7 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
| 10312 | if (tp->write32 == tg3_write_indirect_reg32 || | 10267 | if (tp->write32 == tg3_write_indirect_reg32 || |
| 10313 | ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) && | 10268 | ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) && |
| 10314 | (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || | 10269 | (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5700 || |
| 10315 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) || | 10270 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701))) |
| 10316 | (tp->tg3_flags2 & TG3_FLG2_SUN_570X)) | ||
| 10317 | tp->tg3_flags |= TG3_FLAG_SRAM_USE_CONFIG; | 10271 | tp->tg3_flags |= TG3_FLAG_SRAM_USE_CONFIG; |
| 10318 | 10272 | ||
| 10319 | /* Get eeprom hw config before calling tg3_set_power_state(). | 10273 | /* Get eeprom hw config before calling tg3_set_power_state(). |
| @@ -10594,8 +10548,7 @@ static int __devinit tg3_get_device_address(struct tg3 *tp) | |||
| 10594 | #endif | 10548 | #endif |
| 10595 | 10549 | ||
| 10596 | mac_offset = 0x7c; | 10550 | mac_offset = 0x7c; |
| 10597 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 && | 10551 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) || |
| 10598 | !(tp->tg3_flags & TG3_FLG2_SUN_570X)) || | ||
| 10599 | (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) { | 10552 | (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) { |
| 10600 | if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) | 10553 | if (tr32(TG3PCI_DUAL_MAC_CTRL) & DUAL_MAC_CTRL_ID) |
| 10601 | mac_offset = 0xcc; | 10554 | mac_offset = 0xcc; |
| @@ -10622,8 +10575,7 @@ static int __devinit tg3_get_device_address(struct tg3 *tp) | |||
| 10622 | } | 10575 | } |
| 10623 | if (!addr_ok) { | 10576 | if (!addr_ok) { |
| 10624 | /* Next, try NVRAM. */ | 10577 | /* Next, try NVRAM. */ |
| 10625 | if (!(tp->tg3_flags & TG3_FLG2_SUN_570X) && | 10578 | if (!tg3_nvram_read(tp, mac_offset + 0, &hi) && |
| 10626 | !tg3_nvram_read(tp, mac_offset + 0, &hi) && | ||
| 10627 | !tg3_nvram_read(tp, mac_offset + 4, &lo)) { | 10579 | !tg3_nvram_read(tp, mac_offset + 4, &lo)) { |
| 10628 | dev->dev_addr[0] = ((hi >> 16) & 0xff); | 10580 | dev->dev_addr[0] = ((hi >> 16) & 0xff); |
| 10629 | dev->dev_addr[1] = ((hi >> 24) & 0xff); | 10581 | dev->dev_addr[1] = ((hi >> 24) & 0xff); |
diff --git a/drivers/net/tg3.h b/drivers/net/tg3.h index 0e29b885d449..ff0faab94bd5 100644 --- a/drivers/net/tg3.h +++ b/drivers/net/tg3.h | |||
| @@ -2184,7 +2184,7 @@ struct tg3 { | |||
| 2184 | #define TG3_FLAG_INIT_COMPLETE 0x80000000 | 2184 | #define TG3_FLAG_INIT_COMPLETE 0x80000000 |
| 2185 | u32 tg3_flags2; | 2185 | u32 tg3_flags2; |
| 2186 | #define TG3_FLG2_RESTART_TIMER 0x00000001 | 2186 | #define TG3_FLG2_RESTART_TIMER 0x00000001 |
| 2187 | #define TG3_FLG2_SUN_570X 0x00000002 | 2187 | /* 0x00000002 available */ |
| 2188 | #define TG3_FLG2_NO_ETH_WIRE_SPEED 0x00000004 | 2188 | #define TG3_FLG2_NO_ETH_WIRE_SPEED 0x00000004 |
| 2189 | #define TG3_FLG2_IS_5788 0x00000008 | 2189 | #define TG3_FLG2_IS_5788 0x00000008 |
| 2190 | #define TG3_FLG2_MAX_RXPEND_64 0x00000010 | 2190 | #define TG3_FLG2_MAX_RXPEND_64 0x00000010 |
| @@ -2216,6 +2216,7 @@ struct tg3 { | |||
| 2216 | #define TG3_FLG2_HW_TSO (TG3_FLG2_HW_TSO_1 | TG3_FLG2_HW_TSO_2) | 2216 | #define TG3_FLG2_HW_TSO (TG3_FLG2_HW_TSO_1 | TG3_FLG2_HW_TSO_2) |
| 2217 | #define TG3_FLG2_1SHOT_MSI 0x10000000 | 2217 | #define TG3_FLG2_1SHOT_MSI 0x10000000 |
| 2218 | #define TG3_FLG2_PHY_JITTER_BUG 0x20000000 | 2218 | #define TG3_FLG2_PHY_JITTER_BUG 0x20000000 |
| 2219 | #define TG3_FLG2_NO_FWARE_REPORTED 0x40000000 | ||
| 2219 | 2220 | ||
| 2220 | u32 split_mode_max_reqs; | 2221 | u32 split_mode_max_reqs; |
| 2221 | #define SPLIT_MODE_5704_MAX_REQ 3 | 2222 | #define SPLIT_MODE_5704_MAX_REQ 3 |
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c index 1456759936c5..10e1a905c144 100644 --- a/drivers/pci/pci-driver.c +++ b/drivers/pci/pci-driver.c | |||
| @@ -285,9 +285,9 @@ static int pci_device_suspend(struct device * dev, pm_message_t state) | |||
| 285 | * Default resume method for devices that have no driver provided resume, | 285 | * Default resume method for devices that have no driver provided resume, |
| 286 | * or not even a driver at all. | 286 | * or not even a driver at all. |
| 287 | */ | 287 | */ |
| 288 | static void pci_default_resume(struct pci_dev *pci_dev) | 288 | static int pci_default_resume(struct pci_dev *pci_dev) |
| 289 | { | 289 | { |
| 290 | int retval; | 290 | int retval = 0; |
| 291 | 291 | ||
| 292 | /* restore the PCI config space */ | 292 | /* restore the PCI config space */ |
| 293 | pci_restore_state(pci_dev); | 293 | pci_restore_state(pci_dev); |
| @@ -297,18 +297,21 @@ static void pci_default_resume(struct pci_dev *pci_dev) | |||
| 297 | /* if the device was busmaster before the suspend, make it busmaster again */ | 297 | /* if the device was busmaster before the suspend, make it busmaster again */ |
| 298 | if (pci_dev->is_busmaster) | 298 | if (pci_dev->is_busmaster) |
| 299 | pci_set_master(pci_dev); | 299 | pci_set_master(pci_dev); |
| 300 | |||
| 301 | return retval; | ||
| 300 | } | 302 | } |
| 301 | 303 | ||
| 302 | static int pci_device_resume(struct device * dev) | 304 | static int pci_device_resume(struct device * dev) |
| 303 | { | 305 | { |
| 306 | int error; | ||
| 304 | struct pci_dev * pci_dev = to_pci_dev(dev); | 307 | struct pci_dev * pci_dev = to_pci_dev(dev); |
| 305 | struct pci_driver * drv = pci_dev->driver; | 308 | struct pci_driver * drv = pci_dev->driver; |
| 306 | 309 | ||
| 307 | if (drv && drv->resume) | 310 | if (drv && drv->resume) |
| 308 | drv->resume(pci_dev); | 311 | error = drv->resume(pci_dev); |
| 309 | else | 312 | else |
| 310 | pci_default_resume(pci_dev); | 313 | error = pci_default_resume(pci_dev); |
| 311 | return 0; | 314 | return error; |
| 312 | } | 315 | } |
| 313 | 316 | ||
| 314 | static void pci_device_shutdown(struct device *dev) | 317 | static void pci_device_shutdown(struct device *dev) |
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 8d107c6c2c70..fde41cc14734 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c | |||
| @@ -460,9 +460,23 @@ int | |||
| 460 | pci_restore_state(struct pci_dev *dev) | 460 | pci_restore_state(struct pci_dev *dev) |
| 461 | { | 461 | { |
| 462 | int i; | 462 | int i; |
| 463 | int val; | ||
| 463 | 464 | ||
| 464 | for (i = 0; i < 16; i++) | 465 | /* |
| 465 | pci_write_config_dword(dev,i * 4, dev->saved_config_space[i]); | 466 | * The Base Address register should be programmed before the command |
| 467 | * register(s) | ||
| 468 | */ | ||
| 469 | for (i = 15; i >= 0; i--) { | ||
| 470 | pci_read_config_dword(dev, i * 4, &val); | ||
| 471 | if (val != dev->saved_config_space[i]) { | ||
| 472 | printk(KERN_DEBUG "PM: Writing back config space on " | ||
| 473 | "device %s at offset %x (was %x, writing %x)\n", | ||
| 474 | pci_name(dev), i, | ||
| 475 | val, (int)dev->saved_config_space[i]); | ||
| 476 | pci_write_config_dword(dev,i * 4, | ||
| 477 | dev->saved_config_space[i]); | ||
| 478 | } | ||
| 479 | } | ||
| 466 | pci_restore_msi_state(dev); | 480 | pci_restore_msi_state(dev); |
| 467 | pci_restore_msix_state(dev); | 481 | pci_restore_msix_state(dev); |
| 468 | return 0; | 482 | return 0; |
diff --git a/drivers/scsi/sata_mv.c b/drivers/scsi/sata_mv.c index 9b8bca1ac1f0..f16f92a6ec0f 100644 --- a/drivers/scsi/sata_mv.c +++ b/drivers/scsi/sata_mv.c | |||
| @@ -2035,6 +2035,7 @@ static void mv_phy_reset(struct ata_port *ap) | |||
| 2035 | static void mv_eng_timeout(struct ata_port *ap) | 2035 | static void mv_eng_timeout(struct ata_port *ap) |
| 2036 | { | 2036 | { |
| 2037 | struct ata_queued_cmd *qc; | 2037 | struct ata_queued_cmd *qc; |
| 2038 | unsigned long flags; | ||
| 2038 | 2039 | ||
| 2039 | printk(KERN_ERR "ata%u: Entering mv_eng_timeout\n",ap->id); | 2040 | printk(KERN_ERR "ata%u: Entering mv_eng_timeout\n",ap->id); |
| 2040 | DPRINTK("All regs @ start of eng_timeout\n"); | 2041 | DPRINTK("All regs @ start of eng_timeout\n"); |
| @@ -2046,8 +2047,10 @@ static void mv_eng_timeout(struct ata_port *ap) | |||
| 2046 | ap->host_set->mmio_base, ap, qc, qc->scsicmd, | 2047 | ap->host_set->mmio_base, ap, qc, qc->scsicmd, |
| 2047 | &qc->scsicmd->cmnd); | 2048 | &qc->scsicmd->cmnd); |
| 2048 | 2049 | ||
| 2050 | spin_lock_irqsave(&ap->host_set->lock, flags); | ||
| 2049 | mv_err_intr(ap, 0); | 2051 | mv_err_intr(ap, 0); |
| 2050 | mv_stop_and_reset(ap); | 2052 | mv_stop_and_reset(ap); |
| 2053 | spin_unlock_irqrestore(&ap->host_set->lock, flags); | ||
| 2051 | 2054 | ||
| 2052 | WARN_ON(!(qc->flags & ATA_QCFLAG_ACTIVE)); | 2055 | WARN_ON(!(qc->flags & ATA_QCFLAG_ACTIVE)); |
| 2053 | if (qc->flags & ATA_QCFLAG_ACTIVE) { | 2056 | if (qc->flags & ATA_QCFLAG_ACTIVE) { |
diff --git a/drivers/usb/host/ohci-pxa27x.c b/drivers/usb/host/ohci-pxa27x.c index acde8868da21..fafe7c1265b3 100644 --- a/drivers/usb/host/ohci-pxa27x.c +++ b/drivers/usb/host/ohci-pxa27x.c | |||
| @@ -185,6 +185,9 @@ int usb_hcd_pxa27x_probe (const struct hc_driver *driver, struct platform_device | |||
| 185 | /* Select Power Management Mode */ | 185 | /* Select Power Management Mode */ |
| 186 | pxa27x_ohci_select_pmm(inf->port_mode); | 186 | pxa27x_ohci_select_pmm(inf->port_mode); |
| 187 | 187 | ||
| 188 | if (inf->power_budget) | ||
| 189 | hcd->power_budget = inf->power_budget; | ||
| 190 | |||
| 188 | ohci_hcd_init(hcd_to_ohci(hcd)); | 191 | ohci_hcd_init(hcd_to_ohci(hcd)); |
| 189 | 192 | ||
| 190 | retval = usb_add_hcd(hcd, pdev->resource[1].start, SA_INTERRUPT); | 193 | retval = usb_add_hcd(hcd, pdev->resource[1].start, SA_INTERRUPT); |
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index 953eb8c171d6..47ba1a79adcd 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c | |||
| @@ -1745,7 +1745,7 @@ static int fbcon_scroll(struct vc_data *vc, int t, int b, int dir, | |||
| 1745 | fbcon_redraw_move(vc, p, 0, t, count); | 1745 | fbcon_redraw_move(vc, p, 0, t, count); |
| 1746 | ypan_up_redraw(vc, t, count); | 1746 | ypan_up_redraw(vc, t, count); |
| 1747 | if (vc->vc_rows - b > 0) | 1747 | if (vc->vc_rows - b > 0) |
| 1748 | fbcon_redraw_move(vc, p, b - count, | 1748 | fbcon_redraw_move(vc, p, b, |
| 1749 | vc->vc_rows - b, b); | 1749 | vc->vc_rows - b, b); |
| 1750 | } else | 1750 | } else |
| 1751 | fbcon_redraw_move(vc, p, t + count, b - t - count, t); | 1751 | fbcon_redraw_move(vc, p, t + count, b - t - count, t); |
