All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Schmitz <schmitzmic@gmail.com>
To: Finn Thain <fthain@telegraphics.com.au>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>,
	"James E.J. Bottomley" <JBottomley@parallels.com>,
	Sam Creasey <sammy@sammy.net>, scsi <linux-scsi@vger.kernel.org>,
	Linux/m68k <linux-m68k@vger.kernel.org>
Subject: Re: [PATCH 23/29] atari_scsi: Convert to platform device
Date: Sun, 05 Oct 2014 12:43:37 +1300	[thread overview]
Message-ID: <54308629.6060800@gmail.com> (raw)
In-Reply-To: <alpine.LNX.2.00.1410032054150.12643@nippy.intranet>

Finn,
> On Fri, 3 Oct 2014, Geert Uytterhoeven wrote:
>
>   
>>> +       if (ATARIHW_PRESENT(TT_SCSI)) {
>>> +               atari_scsi_reg_read  = atari_scsi_tt_reg_read;
>>> +               atari_scsi_reg_write = atari_scsi_tt_reg_write;
>>> +       } else if (ATARIHW_PRESENT(ST_SCSI)) {
>>> +               atari_scsi_reg_read  = atari_scsi_falcon_reg_read;
>>> +               atari_scsi_reg_write = atari_scsi_falcon_reg_write;
>>>       
>> Can these be handled through the platform_device's resources?
>>
>>     
>
> I don't know.
>   

Should be possible - I've seen that used in the ISP116x HCD driver 
(arch-dependent post-register access delay function passed via platform 
data).

>>     
>>> +       /* Leave sg_tablesize at 0 on a Falcon! */
>>> +       if (IS_A_TT() && setup_sg_tablesize >= 0)
>>> +               atari_scsi_template.sg_tablesize = setup_sg_tablesize;
>>>       
>> I think the IS_A_TT() check can just be removed.
>>     
>
> Well, ST DMA will break if scatter/gather is enabled by the user.
>   

Concur - we'd have to make certain the SG buffers are contiguous in 
physical memory before allowing SG on Falcon.

>   
>>> +#ifdef REAL_DMA
>>> +       /* If running on a Falcon and if there's TT-Ram (i.e., more than one
>>> +        * memory block, since there's always ST-Ram in a Falcon), then
>>> +        * allocate a STRAM_BUFFER_SIZE byte dribble buffer for transfers
>>> +        * from/to alternative Ram.
>>> +        */
>>> +       if (ATARIHW_PRESENT(ST_SCSI) && !ATARIHW_PRESENT(EXTD_DMA) &&
>>> +           m68k_num_memory > 1) {
>>> +               atari_dma_buffer = atari_stram_alloc(STRAM_BUFFER_SIZE, "SCSI");
>>> +               if (!atari_dma_buffer) {
>>> +                       pr_err(PFX "can't allocate ST-RAM double buffer\n");
>>> +                       return -ENOMEM;
>>> +               }
>>> +               atari_dma_phys_buffer = atari_stram_to_phys(atari_dma_buffer);
>>> +               atari_dma_orig_addr = 0;
>>> +       }
>>> +#endif
>>>       
>> More platform data?
>>     

Perhaps.

>>     
>>> +       if (IS_A_TT())
>>> +               instance->irq = IRQ_TT_MFP_SCSI;
>>> +       else
>>> +               instance->irq = IRQ_NONE;
>>>       
>> platform_device resource?
>>     
>
> If I thought it possible to parameterize the driver such that it never had 
> to test IS_A_TT(), I'd probably agree that this would be more elegant.
>
> Otherwise I'd prefer not to have parts of the logic separated off into the 
> platform resources while the remaining logic remains in the driver itself.
>
> While I don't think platform resources are desirable in this driver, I 
> would like to hear Michael's views.
>   

The IRQ is a good candidate to be passed via platform data. Register 
access primitives can be done via platform data as well. Likewise, the 
ST-DMA locking primitives. That still leaves the DMA setup and 
completion code - Falcon and TT differ here in that they require a 
different order of DMA setup and NCR setup (the Falcon SCSI chip is 
hooked up via the ST-DMA, the TT one memory mapped so DMA setup must 
come last on Falcon, and DMA completion check first. TT has that 
reversed. That's a bit more hassle and might require  lib_NCR5380 
approach similar to the ESP SCSI driver.

> Aside from TT and ST, is there a third configuration that might benefit 
> from a more data driven configuration?
>   

TT and Falcon, not sure any of the ST/STE series ever had a SCSI 
adapter. Medusa is TT compatible

>> (and IRQ_NONE is wrong, you should use 0)
>>
>>     
>>> +       if (IS_A_TT()) {
>>>       
>> Check for instance->irq instead?
>>     
>
> Yes, you'd think so, but a later patch (not in this set) would have 
> to change it back to IS_A_TT().
>
> Further patches align atari_NCR5380.c with NCR5380.c, such that the core 
> driver then checks host->irq to find out whether an IRQ is in use. For 
> Atari ST, request_irq() is not called even though the ST DMA irq is in 
> use.
>   
That's why the IRQ is set to 0, I guess? Works for me. The old code 
states that setting instance->irq = 0 keeps the midlevel from tampering 
with the SCSI IRQ during queuecmd which would interfere with IDE and 
floppy. I guess this is still relevant - I would not have seen the 
ST-DMA locked by IDE during SCSI queuecmd otherwise.

Won't be able to test any of this for a while, sorry.

Cheers,

    Michael

  reply	other threads:[~2014-10-04 23:43 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-02  6:56 [PATCH 00/29] Fixes, cleanups and modernization for NCR5380 drivers Finn Thain
2014-10-02  6:56 ` [PATCH 01/29] ncr5380: Use printk() not pr_debug() Finn Thain
2014-10-06  9:11   ` Hannes Reinecke
2014-10-02  6:56 ` [PATCH 02/29] ncr5380: Remove unused hostdata fields Finn Thain
2014-10-06  9:12   ` Hannes Reinecke
2014-10-02  6:56 ` [PATCH 03/29] ncr5380: Fix compiler warnings and __setup options Finn Thain
2014-10-06  9:19   ` Hannes Reinecke
2014-10-02  6:56 ` [PATCH 04/29] ncr5380: Remove unused macros Finn Thain
2014-10-02  6:56   ` Finn Thain
2014-10-06  9:21   ` Hannes Reinecke
2014-10-06  9:21     ` Hannes Reinecke
2014-10-02  6:56 ` [PATCH 05/29] ncr5380: Remove useless prototypes Finn Thain
2014-10-02  6:56 ` [PATCH 06/29] ncr5380: Remove more " Finn Thain
2014-10-02  6:56 ` [PATCH 07/29] ncr5380: Cleanup TAG_NEXT and TAG_NONE macros Finn Thain
2014-10-03  8:09   ` Geert Uytterhoeven
2014-10-03 10:12     ` Finn Thain
2014-10-06  9:19   ` Hannes Reinecke
2014-10-06 12:26     ` Finn Thain
2014-10-02  6:56 ` [PATCH 08/29] ncr5380: Remove redundant AUTOSENSE macro Finn Thain
2014-10-02  6:56   ` Finn Thain
2014-10-02  6:56 ` [PATCH 09/29] ncr5380: Remove duplicate comments Finn Thain
2014-10-02  6:56 ` [PATCH 10/29] ncr5380: Fix SCSI_IRQ_NONE bugs Finn Thain
2014-10-03  8:22   ` Geert Uytterhoeven
2014-10-03 10:42     ` Finn Thain
2014-10-02  6:56 ` [PATCH 11/29] ncr5380: Remove NCR5380_STATS Finn Thain
2014-10-02  6:56 ` [PATCH 12/29] ncr5380: Cleanup host info() methods Finn Thain
2014-10-02  6:56   ` Finn Thain
2014-10-03  8:32   ` Geert Uytterhoeven
2014-10-03  8:32     ` Geert Uytterhoeven
2014-10-02  6:56 ` [PATCH 13/29] ncr5380: Move static PDMA spin counters to host data Finn Thain
2014-10-02  6:56   ` Finn Thain
2014-10-02  6:56 ` [PATCH 14/29] ncr5380: Remove pointless compiler command line override macros Finn Thain
2014-10-02  6:56 ` [PATCH 15/29] ncr5380: Remove *_RELEASE macros Finn Thain
2014-10-02  6:56   ` Finn Thain
2014-10-02  6:56 ` [PATCH 16/29] ncr5380: Drop legacy scsi.h include Finn Thain
2014-10-02  6:56   ` Finn Thain
2014-10-02  6:56 ` [PATCH 17/29] dmx3191d: Use IRQ_NONE Finn Thain
2014-10-03  8:41   ` Geert Uytterhoeven
2014-10-02  6:56 ` [PATCH 18/29] mac_scsi: Remove header Finn Thain
2014-10-02  6:56 ` [PATCH 19/29] mac_scsi: Add module option to Kconfig Finn Thain
2014-10-03  8:44   ` Geert Uytterhoeven
2014-10-03 10:49     ` Finn Thain
2014-10-03 11:31       ` Geert Uytterhoeven
2014-10-02  6:56 ` [PATCH 20/29] mac_scsi: Cleanup PDMA code Finn Thain
2014-10-02  6:56 ` [PATCH 21/29] mac_scsi: Convert to platform device Finn Thain
2014-10-03  9:08   ` Geert Uytterhoeven
2014-10-02  6:56 ` [PATCH 22/29] atari_scsi: Fix atari_scsi deadlocks on Falcon Finn Thain
2014-10-03  9:19   ` Geert Uytterhoeven
2014-10-02  6:56 ` [PATCH 23/29] atari_scsi: Convert to platform device Finn Thain
2014-10-03  9:34   ` Geert Uytterhoeven
2014-10-03 11:10     ` Finn Thain
2014-10-04 23:43       ` Michael Schmitz [this message]
2014-10-06  7:05         ` Finn Thain
2014-10-06  8:14           ` Michael Schmitz
2014-10-08 11:59             ` Finn Thain
2014-10-06  8:36           ` Geert Uytterhoeven
2014-10-20  7:33   ` Michael Schmitz
2014-10-20 11:22     ` Finn Thain
2014-10-20 18:34       ` Michael Schmitz
2014-10-26  7:37       ` Michael Schmitz
2014-10-27  0:15         ` Finn Thain
2014-10-02  6:56 ` [PATCH 24/29] atari_scsi: Remove header Finn Thain
2014-10-02  6:56 ` [PATCH 25/29] sun3_scsi: Convert to platform device Finn Thain
2014-10-02  6:56 ` [PATCH 26/29] sun3_scsi: Move macro definitions Finn Thain
2014-10-02  6:56 ` [PATCH 27/29] ncr5380: Remove ENABLE_IRQ/DISABLE_IRQ macros Finn Thain
2014-10-02  6:56 ` [PATCH 28/29] atari_NCR5380: Refactor Falcon special cases Finn Thain
2014-10-06  9:28   ` Hannes Reinecke
2014-10-06 11:34     ` Finn Thain
2014-10-06 13:41       ` Ondrej Zary
2014-10-02  6:56 ` [PATCH 29/29] atari_NCR5380: Refactor Falcon locking 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=54308629.6060800@gmail.com \
    --to=schmitzmic@gmail.com \
    --cc=JBottomley@parallels.com \
    --cc=fthain@telegraphics.com.au \
    --cc=geert@linux-m68k.org \
    --cc=linux-m68k@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=sammy@sammy.net \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.