From: Ondrej Zary <linux@rainbow-software.org>
To: Finn Thain <fthain@telegraphics.com.au>
Cc: Christoph Hellwig <hch@infradead.org>,
linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 4/6] g_NCR5380: Add IRQ auto-configuration for HP C2502
Date: Wed, 2 Nov 2016 09:29:22 +0100 [thread overview]
Message-ID: <201611020929.22464.linux@rainbow-software.org> (raw)
In-Reply-To: <alpine.LNX.2.00.1611011258090.25806@nippy.intranet>
On Wednesday 02 November 2016, Finn Thain wrote:
> On Mon, 31 Oct 2016, Ondrej Zary wrote:
> > Find free and working IRQ automatically on HP C2502 cards.
> > Also allow IRQ 9 to work (aliases to IRQ 2 on the card).
> >
> > Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
> > ---
> > drivers/scsi/g_NCR5380.c | 29 +++++++++++++++++++++++++++--
> > 1 file changed, 27 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/scsi/g_NCR5380.c b/drivers/scsi/g_NCR5380.c
> > index e713dba..27fc499 100644
> > --- a/drivers/scsi/g_NCR5380.c
> > +++ b/drivers/scsi/g_NCR5380.c
> > @@ -156,6 +156,8 @@ static void magic_configure(int idx, u8 irq, u8
> > magic[]) outb(magic[4], 0x379);
> >
> > /* allowed IRQs for HP C2502 */
> > + if (irq == 9)
> > + irq = 2;
> > if (irq != 2 && irq != 3 && irq != 4 && irq != 5 && irq != 7)
> > irq = 0;
> > if (idx >= 0 && idx <= 7)
> > @@ -163,6 +165,21 @@ static void magic_configure(int idx, u8 irq, u8
> > magic[]) outb(cfg, 0x379);
> > }
> >
> > +/* find a free and working IRQ (for HP C2502) */
> > +static int NCR5380_find_irq(struct Scsi_Host *instance, u8 irqs[],
> > + int port_idx, u8 magic[])
> > +{
> > + int i;
> > +
> > + for (i = 0; irqs[i]; i++) {
> > + magic_configure(port_idx, irqs[i], magic);
> > + if (NCR5380_test_irq(instance, irqs[i]) == 0)
> > + return irqs[i];
>
> The NCR5380_test_irq routine in patch 2/6 doesn't work for shared irqs, so
> you may not get the IRQ you would expect. (The core driver does support
> shared irqs, BTW.)
ISA bus does not support IRQ sharing.
> Also, you've ignored the irq module parameters. From the user's point of
> view, surely the least surprising thing is to attempt to configure the
> card for whatever irq the user asked for.
I haven't. NCR5380_find_irq is only called when irq is set to IRQ_AUTO.
> If the specified irq isn't supported by the board, just log an error and
> fail. If you want to be user friendly, print a message to tell them what
> irqs the card supports.
If the IRQ is not supported (or does not work), user gets a warning and the
driver continues with IRQ disabled.
> If the user asks for IRQ_AUTO, just configure the board for a hard-coded
> default, say 9, and print a warning message to say so.
The card is almost Plug&Play. The base address is already configured
automatically by the driver so doing the same for IRQ makes sense.
> Either way, if request_irq fails just continue with NO_IRQ, as per usual.
>
> To me that's the most flexible and least surprising behaviour. But again,
> if someone with more ISA knowledge wishes to weigh in, that's fine too.
>
> > + }
> > + magic_configure(port_idx, 0, magic);
> > + return NO_IRQ;
> > +}
> > +
> > static unsigned int ncr_53c400a_ports[] = {
> > 0x280, 0x290, 0x300, 0x310, 0x330, 0x340, 0x348, 0x350, 0
> > };
> > @@ -175,6 +192,9 @@ static void magic_configure(int idx, u8 irq, u8
> > magic[]) static u8 hp_c2502_magic[] = { /* HP C2502 */
> > 0x0f, 0x22, 0xf0, 0x20, 0x80
> > };
> > +static u8 hp_c2502_irqs[] = {
> > + 9, 5, 7, 3, 4, 0
> > +};
> >
> > static int generic_NCR5380_init_one(struct scsi_host_template *tpnt,
> > struct device *pdev, int base, int irq, int board)
> > @@ -345,8 +365,13 @@ static int generic_NCR5380_init_one(struct
> > scsi_host_template *tpnt,
> >
> > if (irq != IRQ_AUTO)
> > instance->irq = irq;
> > - else
> > - instance->irq = NCR5380_probe_irq(instance);
> > + else {
> > + if (board == BOARD_HP_C2502)
> > + instance->irq = NCR5380_find_irq(instance,
> > + hp_c2502_irqs, port_idx, magic);
> > + else
> > + instance->irq = NCR5380_probe_irq(instance);
> > + }
> >
> > /* Compatibility with documented NCR5380 kernel parameters */
> > if (instance->irq == 255)
--
Ondrej Zary
next prev parent reply other threads:[~2016-11-02 8:29 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-31 20:18 [PATCH 0/6] (g_)NCR5380: Improve IRQ probing and some fixes Ondrej Zary
2016-10-31 20:18 ` [PATCH 1/6] NCR5380: Use probe_irq_*() for IRQ probing Ondrej Zary
2016-11-02 7:45 ` Finn Thain
2016-11-02 8:00 ` Ondrej Zary
2016-11-03 2:16 ` Finn Thain
2016-10-31 20:18 ` [PATCH 2/6] g_NCR5380: Test the IRQ before accepting it Ondrej Zary
2016-11-02 7:45 ` Finn Thain
2016-11-02 19:16 ` Ondrej Zary
2016-11-03 2:17 ` Finn Thain
2016-10-31 20:18 ` [PATCH 3/6] g_NCR5380: Check for chip presence before calling NCR5380_init() Ondrej Zary
2016-11-02 7:46 ` Finn Thain
2016-10-31 20:18 ` [PATCH 4/6] g_NCR5380: Add IRQ auto-configuration for HP C2502 Ondrej Zary
2016-11-02 7:46 ` Finn Thain
2016-11-02 8:29 ` Ondrej Zary [this message]
2016-11-03 2:17 ` Finn Thain
2016-11-03 8:00 ` Ondrej Zary
2016-11-04 3:00 ` Finn Thain
2016-10-31 20:18 ` [PATCH 5/6] g_NCR5380: Autoprobe IRQ by default Ondrej Zary
2016-11-02 7:47 ` Finn Thain
2016-12-03 0:39 ` Finn Thain
2016-10-31 20:18 ` [PATCH 6/6] g_NCR5380: Fix release region in error handling Ondrej Zary
2016-11-02 7:49 ` Finn Thain
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=201611020929.22464.linux@rainbow-software.org \
--to=linux@rainbow-software.org \
--cc=fthain@telegraphics.com.au \
--cc=hch@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@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;
as well as URLs for NNTP newsgroup(s).