public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Andrey Borzenkov <arvidjaar@mail.ru>
To: Samuel Ortiz <samuel@sortiz.org>
Cc: Bjorn Helgaas <bjorn.helgaas@hp.com>,
	"Linus Walleij \(LD/EAB\)" <linus.walleij@ericsson.com>,
	linux-kernel@vger.kernel.org,
	Michal Piotrowski <michal.k.k.piotrowski@gmail.com>,
	ambx1@neo.rr.com, linux-pcmcia@lists.infradead.org
Subject: Re: 2.6.22-rc: regression: no irda0 interface (2.6.21 was OK), smsc does not find chip
Date: Sun, 10 Jun 2007 10:47:07 +0400	[thread overview]
Message-ID: <200706101047.12118.arvidjaar@mail.ru> (raw)
In-Reply-To: <20070607204759.GA6809@sortiz.org>

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

On Friday 08 June 2007, Samuel Ortiz wrote:
> Hi Bjorn,
>
> On 6/7/2007, "Bjorn Helgaas" <bjorn.helgaas@hp.com> wrote:
> >On Wednesday 06 June 2007 02:45:01 pm Andrey Borzenkov wrote:
> >> On Wednesday 06 June 2007, Bjorn Helgaas wrote:
> >> > On Tuesday 05 June 2007 09:29:11 pm Andrey Borzenkov wrote:
> >> > > On Wednesday 06 June 2007, Bjorn Helgaas wrote:
> >> > > > Something's wrong with this strategy.  The BIOS is telling us that
> >> > > > an SMCf010 device is present, active, and responds at io ports
> >> > > > 0x100-0x107 and 0x2e8-0x2ef.  The fact that it happens to be on
> >> > > > the other side of an ISA or LPC bridge should be immaterial to the
> >> > > > OS driver.
> >> > >
> >> > > I thought this as well.
> >> >
> >> > If this is really true, it also means we shouldn't twiddle with the
> >> > bridge.  If the BIOS left us a working setup, the preconfiguration
> >> > is certainly going to change it to something incompatible with the
> >> > PNP info.
> >> >
> >> > What if we try the following patch, which keeps the FIR/SIR swap and
> >> > just removes the preconfiguration?
> >>
> >> I already tried different patch but with similar effect (switch off
> >> preconfiguration) - it does not work. I am beginning to doubt whether
> >> drier works on my system at all (i.e. before PnP change); have to find
> >> time to test.
> >
> >OK.  My patch wasn't the right approach anyway.  Attached is what I
> >think we should do instead -- do the preconfig if we're not using PNP.
>
> Thats sounds good, yes.
> Maybe we should also run the legacy probe when the PnP one fails. I
> don't know how the preconfiguration stuff will behave with the device
> being PnP enabled, but with your patch Andrey will still need to
> modprobe smsc-ircc with smsc_nopnp.
>

One thing that makes me uneasy - ideally we have to do it *after* PnP probe 
fails. Currently we lie to PnP layer that we successfully probed for device 
while in effect we did not (at least, not where PnP told us to).

> So, here is the patch I propose (I had to move smsc_ircc_legacy_probe()
> a bit earlier in the code to avoid forward declaration, but it's
> basically your patch plus a call to smsc_ircc_legacy_probe() from the
> pnp_probe() routine):
>

Yes this patch works:

[58674.337465] pnp: Device 00:0a activated.
[58674.337465] smsc_ircc_present(), addr 0x02e8 - no device found!
[58674.337465] PnP probe failed
[58674.340799] Detected unconfigured Toshiba laptop with ALi ISA bridge SMSC 
IrDA chip, pre-configuring device.
[58674.340799] Activated ALi 1533 ISA bridge port 0x02e8.
[58674.340799] Activated ALi 1533 ISA bridge port 0x02f8.
[58674.340799] found SMC SuperIO Chip (devid=0x5a rev=00 base=0x002e): 
LPC47N227
[58674.340799] smsc_superio_flat(): IrDA not enabled
[58674.340799] smsc_superio_flat(): fir: 0x2f8, sir: 0x2e8, dma: 03, irq: 7, 
mode: 0x02
[58674.340799] SMsC IrDA Controller found
[58674.340799]  IrCC version 2.0, firport 0x2f8, sirport 0x2e8 dma=3, irq=7
[58674.340799] No transceiver found. Defaulting to Fast pin select


But I noticed something very strange.

{pts/1}% lspnp -vv 00:0a
00:0a SMCf010 SMC Fast Infrared Port
    state = active
    allocated resources:
        io 0x100-0x107
        io 0x2e8-0x2ef
        irq 5
        dma 1
    possible resources:
        port 0x100-0x130, align 0xf, size 0x8, 16-bit address decoding
        irq 3,4,5,6,7,10,11 High-Edge
        dma 1,2,3 16-bit compatible
        Dependent: 01 - Priority acceptable
           port 0x3f8-0x3f8, align 0x0, size 0x8, 16-bit address decoding
        Dependent: 02 - Priority acceptable
           port 0x2e8-0x2e8, align 0x0, size 0x8, 16-bit address decoding
        Dependent: 03 - Priority acceptable
           port 0x2f8-0x2f8, align 0x0, size 0x8, 16-bit address decoding
        Dependent: 04 - Priority acceptable
           port 0x3e8-0x3e8, align 0x0, size 0x8, 16-bit address decoding

but

{pts/1}% cat /proc/ioports
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-006f : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0100-013f : pcmcia_socket0
^^^^^^^^^^^^^^^^^^^^^^^^^^ hell, what's it?

and really

{pts/1}% sudo 
cat /sys/class/pcmcia_socket/pcmcia_socket0/available_resources_io
0x00000100 - 0x000003af
0x000003e0 - 0x000004ff
0x00000820 - 0x000008ff
0x00000a00 - 0x00000aff
0x00000c00 - 0x00000cf7

Does it mean we did not inform PnP layer when PCMCIA is configured? Should we 
do it? I Cc to PCMCIA maintainer as well :) Configuration I have

{pts/1}% pccardctl status
Socket 0:
  3.3V 16-bit PC Card
  Subdevice 0 (function 0) bound to driver "wlags49"
Socket 1:
  no card
Socket 2:
  no card
{pts/1}% pccardctl info
PRODID_1="TOSHIBA"
PRODID_2="Wireless LAN Card"
PRODID_3="Version 01.01"
PRODID_4=""
MANFID=0156,0002
FUNCID=6
PRODID_1=""
PRODID_2=""
PRODID_3=""
PRODID_4=""
MANFID=0000,0000
FUNCID=255
PRODID_1=""
PRODID_2=""
PRODID_3=""
PRODID_4=""
MANFID=0000,0000
FUNCID=255

>
> diff --git a/drivers/net/irda/smsc-ircc2.c b/drivers/net/irda/smsc-ircc2.c
> index 9043bf4..1d7ab3f 100644
> --- a/drivers/net/irda/smsc-ircc2.c
> +++ b/drivers/net/irda/smsc-ircc2.c
> @@ -366,6 +366,44 @@ static inline void register_bank(int iobase, int bank)
>                 iobase + IRCC_MASTER);
>  }
>
> +
> +static int __init smsc_ircc_legacy_probe(void)
> +{
> +	int ret = 0;
> +
> +#ifdef CONFIG_PCI
> +	if (smsc_ircc_preconfigure_subsystems(ircc_cfg, ircc_fir, ircc_sir,
> +					      ircc_dma, ircc_irq) < 0) {
> +		/* Ignore errors from preconfiguration */
> +		IRDA_ERROR("%s, Preconfiguration failed !\n", driver_name);
> +	}
> +#endif
> +
> +	if (ircc_fir > 0 && ircc_sir > 0) {
> +		IRDA_MESSAGE(" Overriding FIR address 0x%04x\n", ircc_fir);
> +		IRDA_MESSAGE(" Overriding SIR address 0x%04x\n", ircc_sir);
> +
> +		if (smsc_ircc_open(ircc_fir, ircc_sir, ircc_dma, ircc_irq))
> +			ret = -ENODEV;
> +	} else {
> +		ret = -ENODEV;
> +
> +		/* try user provided configuration register base address */
> +		if (ircc_cfg > 0) {
> +			IRDA_MESSAGE(" Overriding configuration address "
> +				     "0x%04x\n", ircc_cfg);
> +			if (!smsc_superio_fdc(ircc_cfg))
> +				ret = 0;
> +			if (!smsc_superio_lpc(ircc_cfg))
> +				ret = 0;
> +		}
> +
> +		if (smsc_ircc_look_for_chips() > 0)
> +			ret = 0;
> +	}
> +	return ret;
> +}
> +
>  /* PNP hotplug support */
>  static const struct pnp_device_id smsc_ircc_pnp_table[] = {
>  	{ .id = "SMCf010", .driver_data = 0 },
> @@ -391,9 +429,14 @@ static int __init smsc_ircc_pnp_probe(struct pnp_dev
> *dev, dma = pnp_dma(dev, 0);
>  	irq = pnp_irq(dev, 0);
>
> -	if (smsc_ircc_open(firbase, sirbase, dma, irq))
> -		return -ENODEV;
> -
> +	if (smsc_ircc_open(firbase, sirbase, dma, irq)) {
> +		IRDA_ERROR("PnP probe failed\n");
> +		if (smsc_ircc_legacy_probe()) {
> +			IRDA_ERROR("Legacy probe failed\n");
> +			return -ENODEV;
> +		}
> +	}
> +
>  	return 0;
>  }
>
> @@ -412,35 +455,6 @@ static struct pnp_driver smsc_ircc_pnp_driver = {
>   *
>  
> ***************************************************************************
>****/
>
> -static int __init smsc_ircc_legacy_probe(void)
> -{
> -	int ret = 0;
> -
> -	if (ircc_fir > 0 && ircc_sir > 0) {
> -		IRDA_MESSAGE(" Overriding FIR address 0x%04x\n", ircc_fir);
> -		IRDA_MESSAGE(" Overriding SIR address 0x%04x\n", ircc_sir);
> -
> -		if (smsc_ircc_open(ircc_fir, ircc_sir, ircc_dma, ircc_irq))
> -			ret = -ENODEV;
> -	} else {
> -		ret = -ENODEV;
> -
> -		/* try user provided configuration register base address */
> -		if (ircc_cfg > 0) {
> -			IRDA_MESSAGE(" Overriding configuration address "
> -				     "0x%04x\n", ircc_cfg);
> -			if (!smsc_superio_fdc(ircc_cfg))
> -				ret = 0;
> -			if (!smsc_superio_lpc(ircc_cfg))
> -				ret = 0;
> -		}
> -
> -		if (smsc_ircc_look_for_chips() > 0)
> -			ret = 0;
> -	}
> -	return ret;
> -}
> -
>  /*
>   * Function smsc_ircc_init ()
>   *
> @@ -459,13 +473,6 @@ static int __init smsc_ircc_init(void)
>  		return ret;
>  	}
>
> -#ifdef CONFIG_PCI
> -	if (smsc_ircc_preconfigure_subsystems(ircc_cfg, ircc_fir, ircc_sir,
> ircc_dma, ircc_irq) < 0) { -		/* Ignore errors from preconfiguration */
> -		IRDA_ERROR("%s, Preconfiguration failed !\n", driver_name);
> -	}
> -#endif
> -
>  	dev_count = 0;
>
>  	if (smsc_nopnp || !pnp_platform_devices ||



[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

  reply	other threads:[~2007-06-10  6:47 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-06-03  8:00 2.6.22-rc: regression: no irda0 interface (2.6.21 was OK), smsc does not find chip Andrey Borzenkov
2007-06-03  8:16 ` Andrey Borzenkov
2007-06-03 23:10   ` Samuel Ortiz
2007-06-04  2:33     ` Andrey Borzenkov
2007-06-04 20:44       ` Samuel Ortiz
2007-06-05  3:10         ` Andrey Borzenkov
2007-06-05  7:18           ` Linus Walleij (LD/EAB)
2007-06-05  7:57             ` Samuel Ortiz
2007-06-05 11:57               ` Linus Walleij (LD/EAB)
2007-06-05 13:04                 ` Samuel Ortiz
2007-06-05 23:23                 ` Bjorn Helgaas
2007-06-06  3:29                   ` Andrey Borzenkov
2007-06-06 19:09                     ` Bjorn Helgaas
2007-06-06 20:45                       ` Andrey Borzenkov
2007-06-07 15:52                         ` Bjorn Helgaas
2007-06-07 20:47                           ` Samuel Ortiz
2007-06-10  6:47                             ` Andrey Borzenkov [this message]
2007-06-10 21:03                               ` Bjorn Helgaas
2007-06-11 14:04                                 ` Andrey Borzenkov
2007-06-14 21:30                                   ` Bjorn Helgaas
2007-06-15 13:44                                     ` Andrey Borzenkov
2007-06-15 15:19                                       ` Bjorn Helgaas
2007-06-16 16:38                                         ` Andrey Borzenkov
2007-06-19 23:31                                           ` Bjorn Helgaas
2007-06-28  3:56                                             ` Bjorn Helgaas
2007-06-30  2:41                                               ` Bjorn Helgaas
2007-06-30  7:16                                                 ` Andrey Borzenkov
2007-06-30 11:45                                                   ` Bjorn Helgaas
2007-06-30 14:47                                                     ` Andrey Borzenkov
2007-06-30 21:13                                                       ` Andrey Borzenkov
2007-07-01  3:30                                                         ` Bjorn Helgaas
2007-07-01  7:08                                                           ` Andrey Borzenkov
2007-07-01 13:57                                                             ` Bjorn Helgaas
2007-08-11 18:39                                                     ` Andrey Borzenkov
2007-08-13 16:09                                                       ` Bjorn Helgaas
2007-08-13 17:39                                                         ` Peter Stuge
2007-08-18  6:59                                                         ` Andrey Borzenkov
2007-07-01  0:01                                                 ` Michal Piotrowski
2007-07-01  0:04                                                   ` Michal Piotrowski
2007-06-07 18:34                         ` Bjorn Helgaas
2007-06-08  5:24                           ` Andrey Borzenkov
2007-06-10  8:03                           ` Andrey Borzenkov
2007-06-10 20:04                             ` Bjorn Helgaas
2007-06-07 12:23                   ` Linus Walleij (LD/EAB)
2007-06-07 15:44                     ` Bjorn Helgaas
2007-06-05 12:06         ` Linus Walleij (LD/EAB)
2007-06-04 16:34   ` Bjorn Helgaas
2007-06-05  3:08     ` Andrey Borzenkov

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=200706101047.12118.arvidjaar@mail.ru \
    --to=arvidjaar@mail.ru \
    --cc=ambx1@neo.rr.com \
    --cc=bjorn.helgaas@hp.com \
    --cc=linus.walleij@ericsson.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pcmcia@lists.infradead.org \
    --cc=michal.k.k.piotrowski@gmail.com \
    --cc=samuel@sortiz.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