Merge branch 'urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6

* 'urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-2.6:
PCMCIA: resource, fix lock imbalance
pcmcia: add important if statement
pcmcia: re-route Cardbus IRQ to ISA on ti1130 bridges if necessary
pcmcia: allow for cb_irq to differ from pci_dev's irq in yenta_socket
pcmcia: honor saved flags in yenta_socket's I365_CSCINT register
pcmcia: revert "irq probe can be done without risking an IRQ storm"
pcmcia: pd6729, i82092: use parent (PCI) resources
pcmcia/vrc4171: use local spinlock for device local lock.

+86 -42
+1
drivers/pcmcia/i82092.c
··· 133 sockets[i].socket.map_size = 0x1000; 134 sockets[i].socket.irq_mask = 0; 135 sockets[i].socket.pci_irq = dev->irq; 136 sockets[i].socket.owner = THIS_MODULE; 137 138 sockets[i].number = i;
··· 133 sockets[i].socket.map_size = 0x1000; 134 sockets[i].socket.irq_mask = 0; 135 sockets[i].socket.pci_irq = dev->irq; 136 + sockets[i].socket.cb_dev = dev; 137 sockets[i].socket.owner = THIS_MODULE; 138 139 sockets[i].number = i;
+1
drivers/pcmcia/i82365.h
··· 95 #define I365_CSC_DETECT 0x08 96 #define I365_CSC_ANY 0x0F 97 #define I365_CSC_GPI 0x10 98 99 /* Flags for I365_ADDRWIN */ 100 #define I365_ENA_IO(map) (0x40 << (map))
··· 95 #define I365_CSC_DETECT 0x08 96 #define I365_CSC_ANY 0x0F 97 #define I365_CSC_GPI 0x10 98 + #define I365_CSC_IRQ_MASK 0xF0 99 100 /* Flags for I365_ADDRWIN */ 101 #define I365_ENA_IO(map) (0x40 << (map))
+16 -20
drivers/pcmcia/pcmcia_resource.c
··· 256 { 257 struct pcmcia_socket *s; 258 config_t *c; 259 260 s = p_dev->socket; 261 ··· 265 266 if (!(s->state & SOCKET_PRESENT)) { 267 dev_dbg(&s->dev, "No card present\n"); 268 - mutex_unlock(&s->ops_mutex); 269 - return -ENODEV; 270 } 271 if (!(c->state & CONFIG_LOCKED)) { 272 dev_dbg(&s->dev, "Configuration isnt't locked\n"); 273 - mutex_unlock(&s->ops_mutex); 274 - return -EACCES; 275 } 276 277 if (mod->Attributes & CONF_IRQ_CHANGE_VALID) { ··· 287 288 if (mod->Attributes & CONF_VCC_CHANGE_VALID) { 289 dev_dbg(&s->dev, "changing Vcc is not allowed at this time\n"); 290 - return -EINVAL; 291 } 292 293 /* We only allow changing Vpp1 and Vpp2 to the same value */ ··· 296 (mod->Attributes & CONF_VPP2_CHANGE_VALID)) { 297 if (mod->Vpp1 != mod->Vpp2) { 298 dev_dbg(&s->dev, "Vpp1 and Vpp2 must be the same\n"); 299 - mutex_unlock(&s->ops_mutex); 300 - return -EINVAL; 301 } 302 s->socket.Vpp = mod->Vpp1; 303 if (s->ops->set_socket(s, &s->socket)) { 304 - mutex_unlock(&s->ops_mutex); 305 dev_printk(KERN_WARNING, &s->dev, 306 "Unable to set VPP\n"); 307 - return -EIO; 308 } 309 } else if ((mod->Attributes & CONF_VPP1_CHANGE_VALID) || 310 (mod->Attributes & CONF_VPP2_CHANGE_VALID)) { 311 dev_dbg(&s->dev, "changing Vcc is not allowed at this time\n"); 312 - mutex_unlock(&s->ops_mutex); 313 - return -EINVAL; 314 } 315 316 if (mod->Attributes & CONF_IO_CHANGE_WIDTH) { ··· 334 s->ops->set_io_map(s, &io_on); 335 } 336 } 337 mutex_unlock(&s->ops_mutex); 338 339 - return 0; 340 } /* modify_configuration */ 341 EXPORT_SYMBOL(pcmcia_modify_configuration); 342 ··· 755 printk(KERN_WARNING "pcmcia: Driver needs updating to support IRQ sharing.\n"); 756 757 #ifdef CONFIG_PCMCIA_PROBE 758 - 759 - #ifdef IRQ_NOAUTOEN 760 - /* if the underlying IRQ infrastructure allows for it, only allocate 761 - * the IRQ, but do not enable it 762 - */ 763 - if (!(req->Handler)) 764 - type |= IRQ_NOAUTOEN; 765 - #endif /* IRQ_NOAUTOEN */ 766 767 if (s->irq.AssignedIRQ != 0) { 768 /* If the interrupt is already assigned, it must be the same */
··· 256 { 257 struct pcmcia_socket *s; 258 config_t *c; 259 + int ret; 260 261 s = p_dev->socket; 262 ··· 264 265 if (!(s->state & SOCKET_PRESENT)) { 266 dev_dbg(&s->dev, "No card present\n"); 267 + ret = -ENODEV; 268 + goto unlock; 269 } 270 if (!(c->state & CONFIG_LOCKED)) { 271 dev_dbg(&s->dev, "Configuration isnt't locked\n"); 272 + ret = -EACCES; 273 + goto unlock; 274 } 275 276 if (mod->Attributes & CONF_IRQ_CHANGE_VALID) { ··· 286 287 if (mod->Attributes & CONF_VCC_CHANGE_VALID) { 288 dev_dbg(&s->dev, "changing Vcc is not allowed at this time\n"); 289 + ret = -EINVAL; 290 + goto unlock; 291 } 292 293 /* We only allow changing Vpp1 and Vpp2 to the same value */ ··· 294 (mod->Attributes & CONF_VPP2_CHANGE_VALID)) { 295 if (mod->Vpp1 != mod->Vpp2) { 296 dev_dbg(&s->dev, "Vpp1 and Vpp2 must be the same\n"); 297 + ret = -EINVAL; 298 + goto unlock; 299 } 300 s->socket.Vpp = mod->Vpp1; 301 if (s->ops->set_socket(s, &s->socket)) { 302 dev_printk(KERN_WARNING, &s->dev, 303 "Unable to set VPP\n"); 304 + ret = -EIO; 305 + goto unlock; 306 } 307 } else if ((mod->Attributes & CONF_VPP1_CHANGE_VALID) || 308 (mod->Attributes & CONF_VPP2_CHANGE_VALID)) { 309 dev_dbg(&s->dev, "changing Vcc is not allowed at this time\n"); 310 + ret = -EINVAL; 311 + goto unlock; 312 } 313 314 if (mod->Attributes & CONF_IO_CHANGE_WIDTH) { ··· 332 s->ops->set_io_map(s, &io_on); 333 } 334 } 335 + ret = 0; 336 + unlock: 337 mutex_unlock(&s->ops_mutex); 338 339 + return ret; 340 } /* modify_configuration */ 341 EXPORT_SYMBOL(pcmcia_modify_configuration); 342 ··· 751 printk(KERN_WARNING "pcmcia: Driver needs updating to support IRQ sharing.\n"); 752 753 #ifdef CONFIG_PCMCIA_PROBE 754 755 if (s->irq.AssignedIRQ != 0) { 756 /* If the interrupt is already assigned, it must be the same */
+1
drivers/pcmcia/pd6729.c
··· 671 socket[i].socket.map_size = 0x1000; 672 socket[i].socket.irq_mask = mask; 673 socket[i].socket.pci_irq = dev->irq; 674 socket[i].socket.owner = THIS_MODULE; 675 676 socket[i].number = i;
··· 671 socket[i].socket.map_size = 0x1000; 672 socket[i].socket.irq_mask = mask; 673 socket[i].socket.pci_irq = dev->irq; 674 + socket[i].socket.cb_dev = dev; 675 socket[i].socket.owner = THIS_MODULE; 676 677 socket[i].number = i;
+35 -2
drivers/pcmcia/ti113x.h
··· 296 u8 new, reg = exca_readb(socket, I365_INTCTL); 297 298 new = reg & ~I365_INTR_ENA; 299 - if (socket->cb_irq) 300 new |= I365_INTR_ENA; 301 if (new != reg) 302 exca_writeb(socket, I365_INTCTL, new); ··· 316 return 0; 317 } 318 319 static int ti113x_override(struct yenta_socket *socket) 320 { 321 u8 cardctl; 322 323 cardctl = config_readb(socket, TI113X_CARD_CONTROL); 324 cardctl &= ~(TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_IREQ | TI113X_CCR_PCI_CSC); 325 - if (socket->cb_irq) 326 cardctl |= TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_CSC | TI113X_CCR_PCI_IREQ; 327 config_writeb(socket, TI113X_CARD_CONTROL, cardctl); 328 329 return ti_override(socket);
··· 296 u8 new, reg = exca_readb(socket, I365_INTCTL); 297 298 new = reg & ~I365_INTR_ENA; 299 + if (socket->dev->irq) 300 new |= I365_INTR_ENA; 301 if (new != reg) 302 exca_writeb(socket, I365_INTCTL, new); ··· 316 return 0; 317 } 318 319 + static void ti113x_use_isa_irq(struct yenta_socket *socket) 320 + { 321 + int isa_irq = -1; 322 + u8 intctl; 323 + u32 isa_irq_mask = 0; 324 + 325 + if (!isa_probe) 326 + return; 327 + 328 + /* get a free isa int */ 329 + isa_irq_mask = yenta_probe_irq(socket, isa_interrupts); 330 + if (!isa_irq_mask) 331 + return; /* no useable isa irq found */ 332 + 333 + /* choose highest available */ 334 + for (; isa_irq_mask; isa_irq++) 335 + isa_irq_mask >>= 1; 336 + socket->cb_irq = isa_irq; 337 + 338 + exca_writeb(socket, I365_CSCINT, (isa_irq << 4)); 339 + 340 + intctl = exca_readb(socket, I365_INTCTL); 341 + intctl &= ~(I365_INTR_ENA | I365_IRQ_MASK); /* CSC Enable */ 342 + exca_writeb(socket, I365_INTCTL, intctl); 343 + 344 + dev_info(&socket->dev->dev, 345 + "Yenta TI113x: using isa irq %d for CardBus\n", isa_irq); 346 + } 347 + 348 + 349 static int ti113x_override(struct yenta_socket *socket) 350 { 351 u8 cardctl; 352 353 cardctl = config_readb(socket, TI113X_CARD_CONTROL); 354 cardctl &= ~(TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_IREQ | TI113X_CCR_PCI_CSC); 355 + if (socket->dev->irq) 356 cardctl |= TI113X_CCR_PCI_IRQ_ENA | TI113X_CCR_PCI_CSC | TI113X_CCR_PCI_IREQ; 357 + else 358 + ti113x_use_isa_irq(socket); 359 + 360 config_writeb(socket, TI113X_CARD_CONTROL, cardctl); 361 362 return ti_override(socket);
+3 -2
drivers/pcmcia/vrc4171_card.c
··· 105 char name[24]; 106 int csc_irq; 107 int io_irq; 108 } vrc4171_socket_t; 109 110 static vrc4171_socket_t vrc4171_sockets[CARD_MAX_SLOTS]; ··· 328 slot = sock->sock; 329 socket = &vrc4171_sockets[slot]; 330 331 - spin_lock_irq(&sock->lock); 332 333 voltage = set_Vcc_value(state->Vcc); 334 exca_write_byte(slot, CARD_VOLTAGE_SELECT, voltage); ··· 371 cscint |= I365_CSC_DETECT; 372 exca_write_byte(slot, I365_CSCINT, cscint); 373 374 - spin_unlock_irq(&sock->lock); 375 376 return 0; 377 }
··· 105 char name[24]; 106 int csc_irq; 107 int io_irq; 108 + spinlock_t lock; 109 } vrc4171_socket_t; 110 111 static vrc4171_socket_t vrc4171_sockets[CARD_MAX_SLOTS]; ··· 327 slot = sock->sock; 328 socket = &vrc4171_sockets[slot]; 329 330 + spin_lock_irq(&socket->lock); 331 332 voltage = set_Vcc_value(state->Vcc); 333 exca_write_byte(slot, CARD_VOLTAGE_SELECT, voltage); ··· 370 cscint |= I365_CSC_DETECT; 371 exca_write_byte(slot, I365_CSCINT, cscint); 372 373 + spin_unlock_irq(&socket->lock); 374 375 return 0; 376 }
+28 -18
drivers/pcmcia/yenta_socket.c
··· 42 MODULE_PARM_DESC(o2_speedup, "Use prefetch/burst for O2-bridges: 'on', 'off' " 43 "or 'default' (uses recommended behaviour for the detected bridge)"); 44 45 #define debug(x, s, args...) dev_dbg(&s->dev->dev, x, ##args) 46 47 /* Don't ask.. */ ··· 66 */ 67 #ifdef CONFIG_YENTA_TI 68 static int yenta_probe_cb_irq(struct yenta_socket *socket); 69 #endif 70 71 ··· 343 /* ISA interrupt control? */ 344 intr = exca_readb(socket, I365_INTCTL); 345 intr = (intr & ~0xf); 346 - if (!socket->cb_irq) { 347 - intr |= state->io_irq; 348 bridge |= CB_BRIDGE_INTR; 349 } 350 exca_writeb(socket, I365_INTCTL, intr); ··· 354 reg = exca_readb(socket, I365_INTCTL) & (I365_RING_ENA | I365_INTR_ENA); 355 reg |= (state->flags & SS_RESET) ? 0 : I365_PC_RESET; 356 reg |= (state->flags & SS_IOCARD) ? I365_PC_IOCARD : 0; 357 - if (state->io_irq != socket->cb_irq) { 358 reg |= state->io_irq; 359 bridge |= CB_BRIDGE_INTR; 360 } ··· 370 exca_writeb(socket, I365_POWER, reg); 371 372 /* CSC interrupt: no ISA irq for CSC */ 373 - reg = I365_CSC_DETECT; 374 if (state->flags & SS_IOCARD) { 375 if (state->csc_mask & SS_STSCHG) 376 reg |= I365_CSC_STSCHG; ··· 912 }; 913 914 915 - /* 916 - * Only probe "regular" interrupts, don't 917 - * touch dangerous spots like the mouse irq, 918 - * because there are mice that apparently 919 - * get really confused if they get fondled 920 - * too intimately. 921 - * 922 - * Default to 11, 10, 9, 7, 6, 5, 4, 3. 923 - */ 924 - static u32 isa_interrupts = 0x0ef8; 925 - 926 static unsigned int yenta_probe_irq(struct yenta_socket *socket, u32 isa_irq_mask) 927 { 928 int i; 929 unsigned long val; 930 u32 mask; 931 932 /* 933 * Probe for usable interrupts using the force ··· 925 */ 926 cb_writel(socket, CB_SOCKET_EVENT, -1); 927 cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK); 928 exca_writeb(socket, I365_CSCINT, 0); 929 val = probe_irq_on() & isa_irq_mask; 930 for (i = 1; i < 16; i++) { ··· 937 cb_writel(socket, CB_SOCKET_EVENT, -1); 938 } 939 cb_writel(socket, CB_SOCKET_MASK, 0); 940 - exca_writeb(socket, I365_CSCINT, 0); 941 942 mask = probe_irq_mask(val) & 0xffff; 943 ··· 974 /* probes the PCI interrupt, use only on override functions */ 975 static int yenta_probe_cb_irq(struct yenta_socket *socket) 976 { 977 if (!socket->cb_irq) 978 return -1; 979 ··· 988 } 989 990 /* generate interrupt, wait */ 991 - exca_writeb(socket, I365_CSCINT, I365_CSC_STSCHG); 992 cb_writel(socket, CB_SOCKET_EVENT, -1); 993 cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK); 994 cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS); ··· 998 999 /* disable interrupts */ 1000 cb_writel(socket, CB_SOCKET_MASK, 0); 1001 - exca_writeb(socket, I365_CSCINT, 0); 1002 cb_writel(socket, CB_SOCKET_EVENT, -1); 1003 exca_readb(socket, I365_CSC); 1004
··· 42 MODULE_PARM_DESC(o2_speedup, "Use prefetch/burst for O2-bridges: 'on', 'off' " 43 "or 'default' (uses recommended behaviour for the detected bridge)"); 44 45 + /* 46 + * Only probe "regular" interrupts, don't 47 + * touch dangerous spots like the mouse irq, 48 + * because there are mice that apparently 49 + * get really confused if they get fondled 50 + * too intimately. 51 + * 52 + * Default to 11, 10, 9, 7, 6, 5, 4, 3. 53 + */ 54 + static u32 isa_interrupts = 0x0ef8; 55 + 56 + 57 #define debug(x, s, args...) dev_dbg(&s->dev->dev, x, ##args) 58 59 /* Don't ask.. */ ··· 54 */ 55 #ifdef CONFIG_YENTA_TI 56 static int yenta_probe_cb_irq(struct yenta_socket *socket); 57 + static unsigned int yenta_probe_irq(struct yenta_socket *socket, 58 + u32 isa_irq_mask); 59 #endif 60 61 ··· 329 /* ISA interrupt control? */ 330 intr = exca_readb(socket, I365_INTCTL); 331 intr = (intr & ~0xf); 332 + if (!socket->dev->irq) { 333 + intr |= socket->cb_irq ? socket->cb_irq : state->io_irq; 334 bridge |= CB_BRIDGE_INTR; 335 } 336 exca_writeb(socket, I365_INTCTL, intr); ··· 340 reg = exca_readb(socket, I365_INTCTL) & (I365_RING_ENA | I365_INTR_ENA); 341 reg |= (state->flags & SS_RESET) ? 0 : I365_PC_RESET; 342 reg |= (state->flags & SS_IOCARD) ? I365_PC_IOCARD : 0; 343 + if (state->io_irq != socket->dev->irq) { 344 reg |= state->io_irq; 345 bridge |= CB_BRIDGE_INTR; 346 } ··· 356 exca_writeb(socket, I365_POWER, reg); 357 358 /* CSC interrupt: no ISA irq for CSC */ 359 + reg = exca_readb(socket, I365_CSCINT); 360 + reg &= I365_CSC_IRQ_MASK; 361 + reg |= I365_CSC_DETECT; 362 if (state->flags & SS_IOCARD) { 363 if (state->csc_mask & SS_STSCHG) 364 reg |= I365_CSC_STSCHG; ··· 896 }; 897 898 899 static unsigned int yenta_probe_irq(struct yenta_socket *socket, u32 isa_irq_mask) 900 { 901 int i; 902 unsigned long val; 903 u32 mask; 904 + u8 reg; 905 906 /* 907 * Probe for usable interrupts using the force ··· 919 */ 920 cb_writel(socket, CB_SOCKET_EVENT, -1); 921 cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK); 922 + reg = exca_readb(socket, I365_CSCINT); 923 exca_writeb(socket, I365_CSCINT, 0); 924 val = probe_irq_on() & isa_irq_mask; 925 for (i = 1; i < 16; i++) { ··· 930 cb_writel(socket, CB_SOCKET_EVENT, -1); 931 } 932 cb_writel(socket, CB_SOCKET_MASK, 0); 933 + exca_writeb(socket, I365_CSCINT, reg); 934 935 mask = probe_irq_mask(val) & 0xffff; 936 ··· 967 /* probes the PCI interrupt, use only on override functions */ 968 static int yenta_probe_cb_irq(struct yenta_socket *socket) 969 { 970 + u8 reg; 971 + 972 if (!socket->cb_irq) 973 return -1; 974 ··· 979 } 980 981 /* generate interrupt, wait */ 982 + reg = exca_readb(socket, I365_CSCINT); 983 + exca_writeb(socket, I365_CSCINT, reg | I365_CSC_STSCHG); 984 cb_writel(socket, CB_SOCKET_EVENT, -1); 985 cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK); 986 cb_writel(socket, CB_SOCKET_FORCE, CB_FCARDSTS); ··· 988 989 /* disable interrupts */ 990 cb_writel(socket, CB_SOCKET_MASK, 0); 991 + exca_writeb(socket, I365_CSCINT, reg); 992 cb_writel(socket, CB_SOCKET_EVENT, -1); 993 exca_readb(socket, I365_CSC); 994
+1
drivers/scsi/pcmcia/nsp_cs.c
··· 1717 cfg_mem->data = data; 1718 1719 ret = pcmcia_loop_config(link, nsp_cs_config_check, cfg_mem); 1720 goto cs_failed; 1721 1722 if (link->conf.Attributes & CONF_ENABLE_IRQ) {
··· 1717 cfg_mem->data = data; 1718 1719 ret = pcmcia_loop_config(link, nsp_cs_config_check, cfg_mem); 1720 + if (ret) 1721 goto cs_failed; 1722 1723 if (link->conf.Attributes & CONF_ENABLE_IRQ) {