Re: wd33c93 question

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

 



On Sat, Jun 02, 2001 at 07:07:46PM +0200, Geert Uytterhoeven wrote:
> 	Hi,
> 
> Anyone who can explain these changes? Here the MIPS tree differs from Linus'
> (and the m68k) tree.
> 
> According to the CVS logs, this change entered in revision 1.7 due to a sync
> with Linus' tree (which introduced other formatting changes) somewhere in 1998.
> In Linus' tree it must have changed afterwards a long time ago (before 2.2.0).
> 
> --- linux-2.4.5/drivers/scsi/wd33c93.c	Tue Dec  5 21:43:48 2000
> +++ linux-mips/drivers/scsi/wd33c93.c	Mon Mar 26 02:38:20 2001
> @@ -614,7 +614,6 @@
>                       (is_dir_out(cmd))?DATA_OUT_DIR:DATA_IN_DIR))
>              write_wd33c93_count(regp,0); /* guarantee a DATA_PHASE interrupt */
>           else {
> -            write_wd33c93_count(regp, cmd->SCp.this_residual);
>              write_wd33c93(regp,WD_CONTROL, CTRL_IDI | CTRL_EDI | CTRL_DMA);
>              hostdata->dma = D_DMA_RUNNING;
>              }
> @@ -735,7 +734,6 @@
>        hostdata->dma_cnt++;
>  #endif
>        write_wd33c93(regp, WD_CONTROL, CTRL_IDI | CTRL_EDI | CTRL_DMA);
> -      write_wd33c93_count(regp,cmd->SCp.this_residual);
>  
>        if ((hostdata->level2 >= L2_DATA) ||
>            (hostdata->level2 == L2_BASIC && cmd->SCp.phase == 0)) {

I guess this is due to the fact that the HPC on the Indy/Indigo2 does
the scatter gather alread so we let the HPC DMA controller do the scatter
gather and just let the SCSI controller run the whole request.

The corresponding codelines should be in

drivers/scsi/sgiwd93.c
    113         if(cmd->SCp.buffers_residual) {
    114                 struct scatterlist *slp = cmd->SCp.buffer;
    115                 int i, totlen = 0;
    116
    117 #ifdef DEBUG_DMA
    118                 printk("SCLIST<");
    119 #endif
    120                 for(i = 0; i <= cmd->SCp.buffers_residual; i++) {
    121 #ifdef DEBUG_DMA
    122                         printk("[%p,%d]", slp[i].address, slp[i].length);
    123 #endif
    124                         fill_hpc_entries (&hcp, slp[i].address, slp[i].length);
    125                         totlen += slp[i].length;
    126                 }
    127 #ifdef DEBUG_DMA
    128                 printk(">tlen<%d>", totlen);
    129 #endif
    130                 hdata->dma_bounce_len = totlen; /* a trick... */
    131                 write_wd33c93_count(regp, totlen);
    132         } else {
    133                 /* Non-scattered dma. */
    134 #ifdef DEBUG_DMA
    135                 printk("ONEBUF<%p,%d>", cmd->SCp.ptr, cmd->SCp.this_residual);
    136 #endif
    137                 /*
    138                  * wd33c93 shouldn't pass us bogus dma_setups, but
    139                  * it does:-( The other wd33c93 drivers deal with
    140                  * it the same way (which isn't that obvious).
    141                  * IMHO a better fix would be, not to do these
    142                  * dma setups in the first place
    143                  */
    144                 if (cmd->SCp.ptr == NULL)
    145                         return 1;
    146                 fill_hpc_entries (&hcp, cmd->SCp.ptr,cmd->SCp.this_residual);
    147                 write_wd33c93_count(regp, cmd->SCp.this_residual);
    148         }

So we have an incompatibility with the sgiwd93.c from the mips tree
and the wd33c93.c from the linus tree where we dont want the generic part
of the wd33c93.c to (re)write the length of the current transfer block
(scatter gather part) as we want it to do the whole transfer in one
part (From the generic wd33c93.c we dont do scatter gather).

Flo
-- 
Florian Lohoff                  flo@rfc822.org             +49-5201-669912
     Why is it called "common sense" when nobody seems to have any?



[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux