source:
freewrt/target/linux/brcm-2.4/patches/009-wrt54g3g_pcmcia.patch@
475ad56
| Last change on this file since 475ad56 was 475ad56, checked in by , 20 years ago | |
|---|---|
|
|
| File size: 3.5 KB | |
-
arch/mips/bcm947xx/pcibios.c
diff -urN linux.old/arch/mips/bcm947xx/pcibios.c linux.dev/arch/mips/bcm947xx/pcibios.c
old new 157 157 158 158 static u32 pci_iobase = 0x100; 159 159 static u32 pci_membase = SB_PCI_DMA; 160 static u32 pcmcia_membase = 0x40004000; 160 161 161 162 void __init 162 163 pcibios_fixup_bus(struct pci_bus *b) … … 188 189 /* Fix up resource bases */ 189 190 for (pos = 0; pos < 6; pos++) { 190 191 res = &d->resource[pos]; 191 base = (res->flags & IORESOURCE_IO) ? &pci_iobase : &pci_membase;192 base = (res->flags & IORESOURCE_IO) ? &pci_iobase : ((b->number == 2) ? &pcmcia_membase : &pci_membase); 192 193 if (res->end) { 193 194 size = res->end - res->start + 1; 194 195 if (*base & (size - 1)) … … 308 309 where = PCI_BASE_ADDRESS_0 + (resource * 4); 309 310 size = res->end - res->start; 310 311 pci_read_config_dword(dev, where, ®); 311 reg = (reg & size) | (((u32)(res->start - root->start)) & ~size); 312 313 if (dev->bus->number == 1) 314 reg = (reg & size) | (((u32)(res->start - root->start)) & ~size); 315 else 316 reg = res->start; 317 312 318 pci_write_config_dword(dev, where, reg); 313 319 } 314 320 -
drivers/pcmcia/yenta.c
diff -urN linux.old/drivers/pcmcia/yenta.c linux.dev/drivers/pcmcia/yenta.c
old new 543 543 * Probe for usable interrupts using the force 544 544 * register to generate bogus card status events. 545 545 */ 546 547 #ifndef CONFIG_BCM947XX 548 /* WRT54G3G does not like this */ 546 549 cb_writel(socket, CB_SOCKET_EVENT, -1); 547 550 cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK); 548 551 exca_writeb(socket, I365_CSCINT, 0); … … 557 560 } 558 561 cb_writel(socket, CB_SOCKET_MASK, 0); 559 562 exca_writeb(socket, I365_CSCINT, 0); 560 563 #endif 564 561 565 mask = probe_irq_mask(val) & 0xffff; 562 566 563 567 bridge_ctrl &= ~CB_BRIDGE_INTR; … … 578 582 socket->cap.cb_dev = socket->dev; 579 583 socket->cap.bus = NULL; 580 584 585 #ifdef CONFIG_BCM947XX 586 /* irq mask probing is broken for the WRT54G3G */ 587 if (socket->cap.irq_mask == 0) 588 socket->cap.irq_mask = 0x6f8; 589 #endif 590 581 591 printk(KERN_INFO "Yenta ISA IRQ mask 0x%04x, PCI irq %d\n", 582 592 socket->cap.irq_mask, socket->cb_irq); 583 593 } … … 609 619 printk(KERN_INFO "Socket status: %08x\n", 610 620 cb_readl(socket, CB_SOCKET_STATE)); 611 621 622 /* Generate an interrupt on card insert/remove */ 623 config_writew(socket, CB_SOCKET_MASK, CB_CSTSMASK | CB_CDMASK); 624 625 /* Set up Multifunction Routing Status Register */ 626 config_writew(socket, 0x8C, 0x1000 /* MFUNC3 to GPIO3 */ | 0x2 /* MFUNC0 to INTA */); 627 628 /* Switch interrupts to parallelized */ 629 config_writeb(socket, 0x92, 0x64); 630 612 631 /* Register it with the pcmcia layer.. */ 613 632 cardbus_register(socket); 614 633 … … 731 750 { 732 751 struct pci_bus *bus; 733 752 struct resource *root, *res; 734 u32 start , end;753 u32 start = 0, end = 0; 735 754 u32 align, size, min, max; 736 755 unsigned offset; 737 756 unsigned mask; … … 750 769 res->end = 0; 751 770 root = pci_find_parent_resource(socket->dev, res); 752 771 772 #ifdef CONFIG_BCM947XX 773 /* default mem resources are completely fscked up on the wrt54g3g */ 774 /* bypass the entire resource allocation stuff below and just set it statically */ 775 if (type & IORESOURCE_MEM) { 776 res->start = 0x40004000; 777 res->end = res->start + 0x3fff; 778 } 779 780 #else 753 781 if (!root) 754 782 return; 755 783 … … 794 822 res->start = res->end = 0; 795 823 return; 796 824 } 825 #endif 797 826 798 827 config_writel(socket, offset, res->start); 799 828 config_writel(socket, offset+4, res->end);
Note:
See TracBrowser
for help on using the repository browser.
