Re: [PATCH 23/29] atari_scsi: Convert to platform device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, 5 Oct 2014, Michael Schmitz wrote:

> > 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).

Yes, possible, but is it desirable?

> >   
> > > > +#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.

Geert didn't say so, but after thinking about his review comments I 
imagine that he wants all the Atari IRQ numbers kept in one place and all 
the Mac IRQ numbers in a different place, and so on. Makes sense.

> 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

If there's no third configuration then I see little to be gained from 
completely parameterizing the driver using a bunch of resources.

What am I missing? Why would it be desirable to have bits of driver code 
in arch/m68k/ and other bits of the same driver kept elsewhere in the 
tree (in drivers/)?

> 
> > > (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.

My patch tests for IS_A_TT not 0 because 0 has a different meaning 
depending on which core driver you use. I don't want to support three 
forks of NCR5380.c. One of the objectives of this patch series is to try 
to move toward convergence on a common core driver.

> 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 don't know what you mean. AFAIK, the SCSI mid layer doesn't care about 
instance->irq.

> I guess this is still relevant - I would not have seen the ST-DMA locked 
> by IDE during SCSI queuecmd otherwise.

Lock-ups were due to disabling local IRQs. Please see,

[PATCH 22/29] atari_scsi: Fix atari_scsi deadlocks on Falcon

in this series and (from our personal correspondence) the patch called
ncr5380-atari_scsi-stdma_try_lock

-- 
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux