Hi Kars,
thanks for your patch. Comments inline below. Note that in order to get
this patch integrated into the next release, you should resend it to
linux-scsi@xxxxxxxxxxxxxxx. The SCSI maintainers won't pick it up here.
FWIW, you are welcome to add my Reviewed-by tag (though it won't count
for much - Finn's may carry more weight).
Cheers,
Michael
On 30/10/19 11:05 AM, Kars de Jong wrote:
The FSC (NCR53CF9x-2 / SYM53CF9x-2) has a different family code than QLogic
or Emulex parts. This caused it to be detected as a FAS100A.
Unforunately, this meant the configuration of the CONFIG3 register was
incorrect. This causes data transfer issues.
The FSC also has a feature called Active Negation which should always be
enabled according to the data manual. This is done using the CONFIG4
register.
Signed-off-by: Kars de Jong <jongk@xxxxxxxxxxxxxx>
---
drivers/scsi/esp_scsi.c | 10 ++++++++--
drivers/scsi/esp_scsi.h | 10 ++++++----
2 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/drivers/scsi/esp_scsi.c b/drivers/scsi/esp_scsi.c
index bb88995a12c7..6b34a5764de5 100644
--- a/drivers/scsi/esp_scsi.c
+++ b/drivers/scsi/esp_scsi.c
@@ -263,7 +263,11 @@ static void esp_reset_esp(struct esp *esp)
esp->rev = FAS236;
else if (family_code == 0x0a)
esp->rev = FASHME; /* Version is usually '5'. */
- else
+ else if (family_code == 0x14) {
+ esp->rev = FSC;
+ /* Enable Active Negation */
+ esp_write8(ESP_CONFIG4_RADE, ESP_CFG4);
Please move that into the below section ...
+ } else
esp->rev = FAS100A;
esp->min_period = ((4 * esp->ccycle) / 1000);
} else {
@@ -308,7 +312,8 @@ static void esp_reset_esp(struct esp *esp)
case FAS236:
case PCSCSI:
- /* Fast 236, AM53c974 or HME */
+ case FSC:
+ /* Fast 236, AM53c974, FSC or HME */
esp_write8(esp->config2, ESP_CFG2);
if (esp->rev == FASHME) {
u8 cfg3 = esp->target[0].esp_config3;
... here, where chip-specific config bits are otherwise set. Just to
keep with driver style.
Also consider whether esp->radelay can be set shorter than the default
96 with active negation enabled (couldn't make sense of the data book on
that point - may well be unrelated to active negation).
@@ -2373,6 +2378,7 @@ static const char *esp_chip_names[] = {
"ESP100A",
"ESP236",
"FAS236",
+ "FSC",
"FAS100A",
"FAST",
"FASHME",
diff --git a/drivers/scsi/esp_scsi.h b/drivers/scsi/esp_scsi.h
index 91b32f2a1a1b..b60ea3e5e0eb 100644
--- a/drivers/scsi/esp_scsi.h
+++ b/drivers/scsi/esp_scsi.h
@@ -211,6 +211,7 @@
/* ESP unique ID register read-only, found on fas236+fas100a only */
#define ESP_UID_F100A 0x00 /* ESP FAS100A */
#define ESP_UID_F236 0x02 /* ESP FAS236 */
+#define ESP_UID_FSC 0x14 /* NCR/Symbios Logic FSC */
#define ESP_UID_REV 0x07 /* ESP revision */
#define ESP_UID_FAM 0xf8 /* ESP family */
Can't find these used anywhere in the code ... I suppose they could be
removed, or the detection code above rewritten to make use of these macros.
@@ -262,10 +263,11 @@ enum esp_rev {
ESP100A = 0x01, /* NCR53C90A */
ESP236 = 0x02,
FAS236 = 0x03,
- FAS100A = 0x04,
- FAST = 0x05,
- FASHME = 0x06,
- PCSCSI = 0x07, /* AM53c974 */
+ FSC = 0x04, /* NCR/Symbios Logic FSC */
+ FAS100A = 0x05,
+ FAST = 0x06,
+ FASHME = 0x07,
+ PCSCSI = 0x08, /* AM53c974 */
};
struct esp_cmd_entry {