http://bugzilla.kernel.org/show_bug.cgi?id=2944

[EMAIL PROTECTED] changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Attachment #7844|fix the subordinate number  |fix the subordinate number
        description|of parent bridge in         |of parent bridge in
                   |yenta_socket_probe as far as|yenta_socket_probe within
                   |possible                    |limits



------- Additional Comments From [EMAIL PROTECTED]  2006-04-12 11:01 -------
(From update of attachment 7844)
>Fixup the subordinate number parent bridge of yenta Cardbus Bridges
>before the PCI bus scan starts to make the cardbus cards which are
>otherwise hidden for PCI scans work. Previous versions of this code
>in the form of a test module (before putting it into yenta_socket_probe)
>have been tested on a Compaq R3120 AMD 64 laptop and (I assume) a R3140
>and another R3000 series laptop.
>
>The number of affected systems is longer (from an internet search):
>* ASUS Z71V and L3s
>* Samsung X20 (fixed in latest BIOS, but older BIOSes are affected)
>* Compaq R3140us and all Compaq R3000 series laptops with TI1620 Controller
>  (AMD64-based Laptops), also Compaq R4000 series
>* HP zv5000z (AMD64 3700+, known that fixup_parent_subordinate_busnr fixes it)
>* HP zv5200z
>* IBM ThinkPad 240
>* An IBM ThinkPad (1.8 GHz Pentium M) debugged by Pavel Machek
>  gives the correspondig message which detects the breakage.
>* MSI S260 / Medion SIM 2100 MD 95600
>
>Signed-off-by: Bernhard Kaindl <[EMAIL PROTECTED]>
>
>--- linux-2.6.16/drivers/pcmcia/yenta_socket.c
>+++ linux-2.6.16/drivers/pcmcia/yenta_socket.c 2006/04/08 11:51:20
>@@ -998,6 +998,77 @@
>       config_writew(socket, CB_BRIDGE_CONTROL, bridge);
> }
>
>+/**
>+ * pci_fixup_parent_subordinate - Fix the subordinate number parent bridge
>+ * @cardbus_bridge: Bus the CardBus bridge bridge to
>+ *
>+ * Checks if devices on the bus the CardBus bridge bridges to would be
>+ * invisible during PCI scans because of a misconfigured subordinate number
>+ * of the parent brige - some BIOSes seem to be too lazy to set it right.
>+ * Does to fixup carefully by checking how far it can go without overlap.
>+ */
>+static void yenta_fixup_parent_bridge(struct pci_bus *cardbus_bridge)
>+{
>+      struct list_head *tmp;
>+      /* Our starting point is the max PCI bus number */
>+      unsigned char upper_limit = 0xff;
>+      /*
>+       * We only check and fix the parent bridge: All systems which need
>+       * this fixup that have been reviewed are laptops and the only bridge
>+       * which needed fixing was the parent bridge of the CardBus bridge:
>+       */
>+      struct pci_bus *bridge_to_fix = cardbus_bridge->parent;
>+
>+      /* Check bus numbers are already set up correctly: */
>+      if (bridge_to_fix->subordinate >= cardbus_bridge->subordinate)
>+              return; /* Thanks, nothing to do */
>+
>+      if (!bridge_to_fix->parent)
>+              return; /* The root bridges are ok */
>+
>+      /* stay within the limits of the bus range of the parent: */
>+      upper_limit = bridge_to_fix->parent->subordinate;
>+
>+      /* check the bus ranges of all silbling bridges to prevent overlap */
>+      list_for_each(tmp, &bridge_to_fix->parent->children) {
>+              struct pci_bus * silbling = pci_bus_b(tmp);
>+              /*
>+               * If the silbling has a higher secondary bus number
>+               * and it's secondary is equal or smaller than our
>+               * current upper limit, set the new upper limit to
>+               * the bus number below the silbling's range:
>+               */
>+              if (silbling->secondary > bridge_to_fix->subordinate
>+                  && silbling->secondary <= upper_limit)
>+                      upper_limit = silbling->secondary - 1;
>+      }
>+
>+      /* Show that the wanted subordinate number is not possible: */
>+      if (cardbus_bridge->subordinate > upper_limit)
>+              printk(KERN_WARNING "Yenta: Upper limit for fixing this "
>+                      "bridge's parent bridge: #%02x\n", upper_limit);
>+
>+      /* If we have room to increase the bridge's subordinate number, */
>+      if (bridge_to_fix->subordinate < upper_limit) {
>+
>+              /* use the highest number of the hidden bus, within limits */
>+              unsigned char subordinate_to_assign =
>+                      min(cardbus_bridge->subordinate, upper_limit);
>+
>+              printk(KERN_INFO "Yenta: Raising subordinate bus# of parent "
>+                      "bus (#%02x) from #%02x to #%02x\n",
>+                      bridge_to_fix->number,
>+                      bridge_to_fix->subordinate, subordinate_to_assign);
>+
>+              /* Save the new subordinate in the bus struct of the bridge */
>+              bridge_to_fix->subordinate = subordinate_to_assign;
>+
>+              /* and update the PCI config space with the new subordinate */
>+              pci_write_config_byte(bridge_to_fix->self,
>+                      PCI_SUBORDINATE_BUS, bridge_to_fix->subordinate);
>+      }
>+}
>+
> /*
>  * Initialize a cardbus controller. Make sure we have a usable
>  * interrupt, and that we can map the cardbus area. Fill in the
>@@ -1113,6 +1184,8 @@
>       yenta_get_socket_capabilities(socket, isa_interrupts);
>       printk(KERN_INFO "Socket status: %08x\n", cb_readl(socket, 
> CB_SOCKET_STATE));
>
>+      yenta_fixup_parent_bridge(dev->subordinate);
>+
>       /* Register it with the pcmcia layer.. */
>       ret = pcmcia_register_socket(&socket->socket);
>       if (ret == 0) {


------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
acpi-bugzilla mailing list
acpi-bugzilla@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/acpi-bugzilla

Reply via email to