public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "H. J. Lu" <hjl@lucon.org>
To: dhinds <dhinds@sonic.net>, bombe@informatik.tu-muenchen.de
Cc: linux kernel <linux-kernel@vger.kernel.org>
Subject: PATCH: Fix CardBus bridge behind a PCI bridge
Date: Mon, 12 Aug 2002 10:49:02 -0700	[thread overview]
Message-ID: <20020812104902.A18430@lucon.org> (raw)
In-Reply-To: <20020810222355.A13749@lucon.org>; from hjl@lucon.org on Sat, Aug 10, 2002 at 10:23:55PM -0700

[-- Attachment #1: Type: text/plain, Size: 1490 bytes --]

On Sat, Aug 10, 2002 at 10:23:55PM -0700, H. J. Lu wrote:
> On Fri, Aug 09, 2002 at 05:21:40PM -0700, dhinds wrote:
> > On Fri, Aug 09, 2002 at 04:48:35PM -0700, H. J. Lu wrote:
> > > On Fri, Aug 09, 2002 at 04:05:06PM -0700, dhinds wrote:
> > > > There's a current thread on linux-kernel about "PCI hotplug resource
> > > > reservation" that is relevant, and there's a patch that claims to
> > > > provide a workable solution to the problem for cPCI.
> > > 
> > > Thanks. Do you think if the "PCI<->PCI bridges, transparent resource
> > > fix" thread is related to it?
> > 
> > I glanced at that and didn't think so, but I didn't read much.
> > 
> 
> I think they are relevant. Your pcmcia-cs 3.20 works fine on Sony. Here
> is the output of "lspci -v". PCI bride has
> 
> 	I/O behind bridge: 00004000-00004fff
> 	Memory behind bridge: e8200000-e82fffff
> 
> The kernel cardbus code tries to allocate memory and I/O from them. It
> doesn't work. BTW, I checked another notebook. That code is not reached
> at all since slot has been initialized by BIOS. Your pcmcia-cs doesn't
> follow the PCI brigde:
> 
> 	I/O ports at 0200
> 	Memory at 60040000 (32-bit, non-prefetchable)
> 
> and works. Any ides why?
> 

Here is a patch against 2.4.18 to fix CardBus bridge behind a PCI
bridge with positive decode. I checked Windows XP. It is how it
allocates resources for the CardBus slots, that is outside of
the memory and I/O windows on the PCI bridge.

Let me know if it works for you. 


H.J.

[-- Attachment #2: linux-2.4.18-yenta-bridge.patch --]
[-- Type: text/plain, Size: 1470 bytes --]

--- linux/drivers/pcmcia/yenta.c.bridge	Sat Aug 10 20:30:35 2002
+++ linux/drivers/pcmcia/yenta.c	Mon Aug 12 10:41:56 2002
@@ -712,6 +712,7 @@ static void yenta_allocate_res(pci_socke
 	u32 align, size, min, max;
 	unsigned offset;
 	unsigned mask;
+	int failed;
 
 	/* The granularity of the memory limit is 4kB, on IO it's 4 bytes */
 	mask = ~0xfff;
@@ -739,17 +740,39 @@ static void yenta_allocate_res(pci_socke
 		return;
 	}
 
-	align = size = 4*1024*1024;
-	min = PCIBIOS_MIN_MEM; max = ~0U;
 	if (type & IORESOURCE_IO) {
 		align = 1024;
 		size = 256;
 		min = 0x4000;
 		max = 0xffff;
 	}
+	else {
+		align = size = 4*1024*1024;
+		min = PCIBIOS_MIN_MEM;
+		max = ~0U;
+	}
 		
-	if (allocate_resource(root, res, size, min, max, align, NULL, NULL) < 0)
-		return;
+
+	do {
+		failed = allocate_resource(root, res, size, min, max,
+					   align, NULL, NULL);
+		if (failed) {
+			/* If we failed to allocate the resources here, we
+			   try its parent if we are on a bridge with
+			   positive decode.  */
+			struct pci_dev *bridge;
+			bus = bus->parent;
+			if (bus == NULL)
+				return;
+			bridge = bus->self;
+			if (bridge == NULL
+			    || (bridge->class >> 16) != PCI_BASE_CLASS_BRIDGE
+			    || (bridge->class & 0xff) != 0)
+				return;
+			res->name = bridge->subordinate->name;
+			root = pci_find_parent_resource(bridge, res);
+		}
+	} while (failed);
 
 	config_writel(socket, offset, res->start);
 	config_writel(socket, offset+4, res->end);

       reply	other threads:[~2002-08-12 17:45 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20020806105023.A17451@lucon.org>
     [not found] ` <20020806112636.A29360@sonic.net>
     [not found]   ` <20020806130420.A19613@lucon.org>
     [not found]     ` <20020809160506.A19549@sonic.net>
     [not found]       ` <20020809164835.B21110@lucon.org>
     [not found]         ` <20020809172140.A30911@sonic.net>
     [not found]           ` <20020810222355.A13749@lucon.org>
2002-08-12 17:49             ` H. J. Lu [this message]
     [not found]               ` <20020812110431.A14125@sonic.net>
     [not found]                 ` <20020812112911.A18947@lucon.org>
     [not found]                   ` <20020812122158.A27172@sonic.net>
2002-08-12 21:07                     ` PATCH: Fix CardBus bridge behind a PCI bridge H. J. Lu
     [not found]                       ` <20020812154851.A20073@sonic.net>
2002-08-13  3:29                         ` PATCH: New fix for " H. J. Lu
2002-08-16 15:48                           ` Ivan Kokshaysky
2002-08-17  5:49                             ` H. J. Lu
2002-08-17 14:55                               ` Ivan Kokshaysky
2002-08-17 15:26                               ` Jeff Garzik
2002-08-17 15:36                                 ` H. J. Lu
2002-08-18 10:49                                   ` Ivan Kokshaysky
2002-08-18 14:28                                     ` H. J. Lu

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=20020812104902.A18430@lucon.org \
    --to=hjl@lucon.org \
    --cc=bombe@informatik.tu-muenchen.de \
    --cc=dhinds@sonic.net \
    --cc=linux-kernel@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox