[PATCH 10/12] esp_scsi: let DMA driver provide a config2 value

2014-11-24 Thread Hannes Reinecke
From: Paolo Bonzini pbonz...@redhat.com

On PCscsi, the FENAB configuration also enables 24-bit DMA
transfer lengths (and provides the chip id in TCHI after reset).
We want to be able to enable this parameter from the DMA driver.

Check if the caller of scsi_esp_register provided a value for esp-config2.
If this is the case, assume this is not an ESP100, skip the detection
phase and leave esp-config2 untouched.  It will be used in esp_reset_esp.

Reviewed-by: Hannes Reinecke h...@suse.de
Acked-by: David S. Miller da...@davemloft.net
Signed-off-by: Paolo Bonzini pbonz...@redhat.com
---
 drivers/scsi/esp_scsi.c | 70 ++---
 1 file changed, 37 insertions(+), 33 deletions(-)

diff --git a/drivers/scsi/esp_scsi.c b/drivers/scsi/esp_scsi.c
index 8a162be..cfbae52 100644
--- a/drivers/scsi/esp_scsi.c
+++ b/drivers/scsi/esp_scsi.c
@@ -2219,46 +2219,50 @@ static void esp_get_revision(struct esp *esp)
u8 val;
 
esp-config1 = (ESP_CONFIG1_PENABLE | (esp-scsi_id  7));
-   esp-config2 = (ESP_CONFIG2_SCSI2ENAB | ESP_CONFIG2_REGPARITY);
+   if (esp-config2 == 0) {
+   esp-config2 = (ESP_CONFIG2_SCSI2ENAB | ESP_CONFIG2_REGPARITY);
+   esp_write8(esp-config2, ESP_CFG2);
+
+   val = esp_read8(ESP_CFG2);
+   val = ~ESP_CONFIG2_MAGIC;
+
+   esp-config2 = 0;
+   if (val != (ESP_CONFIG2_SCSI2ENAB | ESP_CONFIG2_REGPARITY)) {
+   /*
+* If what we write to cfg2 does not come back,
+* cfg2 is not implemented.
+* Therefore this must be a plain esp100.
+*/
+   esp-rev = ESP100;
+   return;
+   }
+   }
+
+   esp_set_all_config3(esp, 5);
+   esp-prev_cfg3 = 5;
esp_write8(esp-config2, ESP_CFG2);
+   esp_write8(0, ESP_CFG3);
+   esp_write8(esp-prev_cfg3, ESP_CFG3);
 
-   val = esp_read8(ESP_CFG2);
-   val = ~ESP_CONFIG2_MAGIC;
-   if (val != (ESP_CONFIG2_SCSI2ENAB | ESP_CONFIG2_REGPARITY)) {
-   /* If what we write to cfg2 does not come back, cfg2 is not
-* implemented, therefore this must be a plain esp100.
+   val = esp_read8(ESP_CFG3);
+   if (val != 5) {
+   /* The cfg2 register is implemented, however
+* cfg3 is not, must be esp100a.
 */
-   esp-rev = ESP100;
+   esp-rev = ESP100A;
} else {
-   esp-config2 = 0;
-   esp_set_all_config3(esp, 5);
-   esp-prev_cfg3 = 5;
-   esp_write8(esp-config2, ESP_CFG2);
-   esp_write8(0, ESP_CFG3);
+   esp_set_all_config3(esp, 0);
+   esp-prev_cfg3 = 0;
esp_write8(esp-prev_cfg3, ESP_CFG3);
 
-   val = esp_read8(ESP_CFG3);
-   if (val != 5) {
-   /* The cfg2 register is implemented, however
-* cfg3 is not, must be esp100a.
-*/
-   esp-rev = ESP100A;
+   /* All of cfg{1,2,3} implemented, must be one of
+* the fas variants, figure out which one.
+*/
+   if (esp-cfact == 0 || esp-cfact  ESP_CCF_F5) {
+   esp-rev = FAST;
+   esp-sync_defp = SYNC_DEFP_FAST;
} else {
-   esp_set_all_config3(esp, 0);
-   esp-prev_cfg3 = 0;
-   esp_write8(esp-prev_cfg3, ESP_CFG3);
-
-   /* All of cfg{1,2,3} implemented, must be one of
-* the fas variants, figure out which one.
-*/
-   if (esp-cfact == 0 || esp-cfact  ESP_CCF_F5) {
-   esp-rev = FAST;
-   esp-sync_defp = SYNC_DEFP_FAST;
-   } else {
-   esp-rev = ESP236;
-   }
-   esp-config2 = 0;
-   esp_write8(esp-config2, ESP_CFG2);
+   esp-rev = ESP236;
}
}
 }
-- 
1.8.5.2

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


[PATCH 10/12] esp_scsi: let DMA driver provide a config2 value

2014-11-21 Thread Hannes Reinecke
From: Paolo Bonzini pbonz...@redhat.com

On PCscsi, the FENAB configuration also enables 24-bit DMA
transfer lengths (and provides the chip id in TCHI after reset).
We want to be able to enable this parameter from the DMA driver.

Check if the caller of scsi_esp_register provided a value for esp-config2.
If this is the case, assume this is not an ESP100, skip the detection
phase and leave esp-config2 untouched.  It will be used in esp_reset_esp.

Reviewed-by: Hannes Reinecke h...@suse.de
Signed-off-by: Paolo Bonzini pbonz...@redhat.com
---
 drivers/scsi/esp_scsi.c | 70 ++---
 1 file changed, 37 insertions(+), 33 deletions(-)

diff --git a/drivers/scsi/esp_scsi.c b/drivers/scsi/esp_scsi.c
index 797e208..bd17516 100644
--- a/drivers/scsi/esp_scsi.c
+++ b/drivers/scsi/esp_scsi.c
@@ -2219,46 +2219,50 @@ static void esp_get_revision(struct esp *esp)
u8 val;
 
esp-config1 = (ESP_CONFIG1_PENABLE | (esp-scsi_id  7));
-   esp-config2 = (ESP_CONFIG2_SCSI2ENAB | ESP_CONFIG2_REGPARITY);
+   if (esp-config2 == 0) {
+   esp-config2 = (ESP_CONFIG2_SCSI2ENAB | ESP_CONFIG2_REGPARITY);
+   esp_write8(esp-config2, ESP_CFG2);
+
+   val = esp_read8(ESP_CFG2);
+   val = ~ESP_CONFIG2_MAGIC;
+
+   esp-config2 = 0;
+   if (val != (ESP_CONFIG2_SCSI2ENAB | ESP_CONFIG2_REGPARITY)) {
+   /*
+* If what we write to cfg2 does not come back,
+* cfg2 is not implemented.
+* Therefore this must be a plain esp100.
+*/
+   esp-rev = ESP100;
+   return;
+   }
+   }
+
+   esp_set_all_config3(esp, 5);
+   esp-prev_cfg3 = 5;
esp_write8(esp-config2, ESP_CFG2);
+   esp_write8(0, ESP_CFG3);
+   esp_write8(esp-prev_cfg3, ESP_CFG3);
 
-   val = esp_read8(ESP_CFG2);
-   val = ~ESP_CONFIG2_MAGIC;
-   if (val != (ESP_CONFIG2_SCSI2ENAB | ESP_CONFIG2_REGPARITY)) {
-   /* If what we write to cfg2 does not come back, cfg2 is not
-* implemented, therefore this must be a plain esp100.
+   val = esp_read8(ESP_CFG3);
+   if (val != 5) {
+   /* The cfg2 register is implemented, however
+* cfg3 is not, must be esp100a.
 */
-   esp-rev = ESP100;
+   esp-rev = ESP100A;
} else {
-   esp-config2 = 0;
-   esp_set_all_config3(esp, 5);
-   esp-prev_cfg3 = 5;
-   esp_write8(esp-config2, ESP_CFG2);
-   esp_write8(0, ESP_CFG3);
+   esp_set_all_config3(esp, 0);
+   esp-prev_cfg3 = 0;
esp_write8(esp-prev_cfg3, ESP_CFG3);
 
-   val = esp_read8(ESP_CFG3);
-   if (val != 5) {
-   /* The cfg2 register is implemented, however
-* cfg3 is not, must be esp100a.
-*/
-   esp-rev = ESP100A;
+   /* All of cfg{1,2,3} implemented, must be one of
+* the fas variants, figure out which one.
+*/
+   if (esp-cfact == 0 || esp-cfact  ESP_CCF_F5) {
+   esp-rev = FAST;
+   esp-sync_defp = SYNC_DEFP_FAST;
} else {
-   esp_set_all_config3(esp, 0);
-   esp-prev_cfg3 = 0;
-   esp_write8(esp-prev_cfg3, ESP_CFG3);
-
-   /* All of cfg{1,2,3} implemented, must be one of
-* the fas variants, figure out which one.
-*/
-   if (esp-cfact == 0 || esp-cfact  ESP_CCF_F5) {
-   esp-rev = FAST;
-   esp-sync_defp = SYNC_DEFP_FAST;
-   } else {
-   esp-rev = ESP236;
-   }
-   esp-config2 = 0;
-   esp_write8(esp-config2, ESP_CFG2);
+   esp-rev = ESP236;
}
}
 }
-- 
1.8.5.2

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