diff mbox

[RFC,74/71] ncr5380: Enable PDMA for NCR53C400A

Message ID 1448789980-30094-2-git-send-email-linux@rainbow-software.org (mailing list archive)
State Deferred, archived
Headers show

Commit Message

Ondrej Zary Nov. 29, 2015, 9:39 a.m. UTC
Add I/O register mapping for NCR53C400A and enable PDMA mode to
improve performance and fix non-working IRQ.

Tested with HP C2502 (and user-space enabler).

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/scsi/g_NCR5380.c |   11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

Comments

Finn Thain Nov. 30, 2015, 11:52 a.m. UTC | #1
On Sun, 29 Nov 2015, Ondrej Zary wrote:

> Add I/O register mapping for NCR53C400A and enable PDMA mode to
> improve performance and fix non-working IRQ.
> 
> Tested with HP C2502 (and user-space enabler).
> 
> Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
> ---
>  drivers/scsi/g_NCR5380.c |   11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/g_NCR5380.c b/drivers/scsi/g_NCR5380.c
> index ce444da..c3abe48 100644
> --- a/drivers/scsi/g_NCR5380.c
> +++ b/drivers/scsi/g_NCR5380.c
> @@ -324,7 +324,10 @@ static int __init generic_NCR5380_detect(struct scsi_host_template *tpnt)
>  #endif
>  			break;
>  		case BOARD_NCR53C400A:
> +			flags = FLAG_NO_DMA_FIXUP;
> +#ifndef PSEUDO_DMA
>  			flags = FLAG_NO_PSEUDO_DMA;
> +#endif

FLAG_NO_PSEUDO_DMA is not tested unless defined(PSEUDO_DMA), so it 
shouldn't be set here. I know I made the same mistake in patch 8; it will 
be fixed in the next submission.
Finn Thain Nov. 30, 2015, 12:04 p.m. UTC | #2
On Sun, 29 Nov 2015, Ondrej Zary wrote:

> Add I/O register mapping for NCR53C400A and enable PDMA mode to
> improve performance and fix non-working IRQ.
> 

Is CONFIG_SCSI_GENERIC_NCR53C400 is still needed? Can the driver be fully 
configured at runtime now?

> Tested with HP C2502 (and user-space enabler).
> 

It would be nice if the enabler was documented.  
Documentation/scsi/g_NCR5380.txt might be a good place for that. That file 
could perhaps be updated (?) Certainly obsolete and misleading information 
should be removed if you see any.
Ondrej Zary Nov. 30, 2015, 1:40 p.m. UTC | #3
On Monday 30 November 2015, Finn Thain wrote:
> 
> On Sun, 29 Nov 2015, Ondrej Zary wrote:
> 
> > Add I/O register mapping for NCR53C400A and enable PDMA mode to
> > improve performance and fix non-working IRQ.
> > 
> 
> Is CONFIG_SCSI_GENERIC_NCR53C400 is still needed? Can the driver be fully 
> configured at runtime now?

Things depending on CONFIG_SCSI_GENERIC_NCR53C400:

#ifdef CONFIG_SCSI_GENERIC_NCR53C400
#define PSEUDO_DMA
#endif

Defining PSEUDO_DMA should not break anything, just makes code bigger a bit. We can probably just define it always in g_NCR5380.c.


This looks weird. I don't have any card with a BIOS to test.
#ifdef CONFIG_SCSI_GENERIC_NCR53C400
#define BIOSPARAM
#define NCR5380_BIOSPARAM generic_NCR5380_biosparam
#else
#define NCR5380_BIOSPARAM NULL
#endif


This looks very wrong and should be done at runtime:
#ifdef CONFIG_SCSI_GENERIC_NCR53C400
#define NCR5380_region_size 16
#else
#define NCR5380_region_size 8
#endif


> > Tested with HP C2502 (and user-space enabler).
> > 
> 
> It would be nice if the enabler was documented.  
> Documentation/scsi/g_NCR5380.txt might be a good place for that. That file 
> could perhaps be updated (?) Certainly obsolete and misleading information 
> should be removed if you see any.
 
I'll integrate the enabler into the driver. It's like "wakeup sequence for the NCR53C400A and DTC3181E */" in g_NCR5380.c, only the magic numbers are different.
diff mbox

Patch

diff --git a/drivers/scsi/g_NCR5380.c b/drivers/scsi/g_NCR5380.c
index ce444da..c3abe48 100644
--- a/drivers/scsi/g_NCR5380.c
+++ b/drivers/scsi/g_NCR5380.c
@@ -324,7 +324,10 @@  static int __init generic_NCR5380_detect(struct scsi_host_template *tpnt)
 #endif
 			break;
 		case BOARD_NCR53C400A:
+			flags = FLAG_NO_DMA_FIXUP;
+#ifndef PSEUDO_DMA
 			flags = FLAG_NO_PSEUDO_DMA;
+#endif
 			ports = ncr_53c400a_ports;
 			break;
 		case BOARD_DTC3181E:
@@ -412,6 +415,11 @@  static int __init generic_NCR5380_detect(struct scsi_host_template *tpnt)
 			hostdata->c400_blk_cnt = 1;
 			hostdata->c400_host_buf = 4;
 		}
+		if (overrides[current_override].board == BOARD_NCR53C400A) {
+			hostdata->c400_ctl_status = 9;
+			hostdata->c400_blk_cnt = 10;
+			hostdata->c400_host_buf = 8;
+		}
 #else
 		instance->base = overrides[current_override].NCR5380_map_name;
 		hostdata->iomem = iomem;
@@ -425,7 +433,8 @@  static int __init generic_NCR5380_detect(struct scsi_host_template *tpnt)
 		if (NCR5380_init(instance, flags))
 			goto out_unregister;
 
-		if (overrides[current_override].board == BOARD_NCR53C400)
+		if (overrides[current_override].board == BOARD_NCR53C400 ||
+		    overrides[current_override].board == BOARD_NCR53C400A)
 			NCR5380_write(hostdata->c400_ctl_status, CSR_BASE);
 
 		NCR5380_maybe_reset_bus(instance);