From: Stefan Richter <stefanr@s5r6.in-berlin.de>
To: Linus Torvalds <torvalds@osdl.org>
Cc: Ben Collins <bcollins@ubuntu.com>, linux-kernel@vger.kernel.org
Subject: [PATCH 2.6.18-rc4 1/5] ieee1394: sbp2: workaround for write protect bit of Initio firmware
Date: Sun, 27 Aug 2006 13:26:50 +0200 (CEST) [thread overview]
Message-ID: <tkrat.94cecc462a778dde@s5r6.in-berlin.de> (raw)
In-Reply-To: <tkrat.bbaf8d081f6a31b7@s5r6.in-berlin.de>
Yet another mode pages related bug of Initio firmwares was seen.
INIC-1530 with a firmware by Initio responded with garbage to MODE SENSE
(10). Some HDDs were therefore incorrectly marked as write protected:
http://bugzilla.kernel.org/show_bug.cgi?id=6947
Sbp2 now tells scsi_lib to use MODE SENSE (6) for the one known
defective model. The workaround could be expanded to other or perhaps
even all model IDs of Initio firmwares if necessary. At least it worked
OK with an INIC-2430 with different model ID and without the MS(10) bug.
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
---
Index: linux-2.6.18-rc4/drivers/ieee1394/sbp2.h
===================================================================
--- linux-2.6.18-rc4.orig/drivers/ieee1394/sbp2.h 2006-08-27 12:27:55.000000000 +0200
+++ linux-2.6.18-rc4/drivers/ieee1394/sbp2.h 2006-08-27 12:35:40.000000000 +0200
@@ -237,8 +237,9 @@ struct sbp2_status_block {
/* Flags for detected oddities and brokeness */
#define SBP2_WORKAROUND_128K_MAX_TRANS 0x1
#define SBP2_WORKAROUND_INQUIRY_36 0x2
-#define SBP2_WORKAROUND_MODE_SENSE_8 0x4
+#define SBP2_WORKAROUND_SKIP_PAGE_08 0x4
#define SBP2_WORKAROUND_FIX_CAPACITY 0x8
+#define SBP2_WORKAROUND_MODE_SENSE_6 0x10
#define SBP2_WORKAROUND_OVERRIDE 0x100
/* This is the two dma types we use for cmd_dma below */
Index: linux-2.6.18-rc4/drivers/ieee1394/sbp2.c
===================================================================
--- linux-2.6.18-rc4.orig/drivers/ieee1394/sbp2.c 2006-08-27 12:27:59.000000000 +0200
+++ linux-2.6.18-rc4/drivers/ieee1394/sbp2.c 2006-08-27 12:35:40.000000000 +0200
@@ -168,8 +168,9 @@ module_param_named(workarounds, sbp2_def
MODULE_PARM_DESC(workarounds, "Work around device bugs (default = 0"
", 128kB max transfer = " __stringify(SBP2_WORKAROUND_128K_MAX_TRANS)
", 36 byte inquiry = " __stringify(SBP2_WORKAROUND_INQUIRY_36)
- ", skip mode page 8 = " __stringify(SBP2_WORKAROUND_MODE_SENSE_8)
+ ", skip mode page 08 = " __stringify(SBP2_WORKAROUND_SKIP_PAGE_08)
", fix capacity = " __stringify(SBP2_WORKAROUND_FIX_CAPACITY)
+ ", use mode sense 6 = " __stringify(SBP2_WORKAROUND_MODE_SENSE_6)
", override internal blacklist = " __stringify(SBP2_WORKAROUND_OVERRIDE)
", or a combination)");
@@ -301,6 +302,10 @@ static struct hpsb_protocol_driver sbp2_
* The firmware_revision field, masked with 0xffff00, is the best indicator
* for the type of bridge chip of a device. It yields a few false positives
* but this did not break correctly behaving devices so far.
+ *
+ * The order of table entries is from special to general, like for example
+ * the Initio entries. This order is necessary because once an entry matches,
+ * the rest of the table is skipped.
*/
static const struct {
u32 firmware_revision;
@@ -311,7 +316,12 @@ static const struct {
.firmware_revision = 0x002800,
.model_id = 0x001010,
.workarounds = SBP2_WORKAROUND_INQUIRY_36 |
- SBP2_WORKAROUND_MODE_SENSE_8,
+ SBP2_WORKAROUND_SKIP_PAGE_08,
+ },
+ /* Initio INIC-1530 with a firmware apparently from Initio */ {
+ .firmware_revision = 0x000200,
+ .model_id = 0x000540,
+ .workarounds = SBP2_WORKAROUND_MODE_SENSE_6,
},
/* Initio bridges, actually only needed for some older ones */ {
.firmware_revision = 0x000200,
@@ -2511,10 +2521,12 @@ static int sbp2scsi_slave_configure(stru
sdev->use_10_for_ms = 1;
if (sdev->type == TYPE_DISK &&
- scsi_id->workarounds & SBP2_WORKAROUND_MODE_SENSE_8)
+ scsi_id->workarounds & SBP2_WORKAROUND_SKIP_PAGE_08)
sdev->skip_ms_page_8 = 1;
if (scsi_id->workarounds & SBP2_WORKAROUND_FIX_CAPACITY)
sdev->fix_capacity = 1;
+ if (scsi_id->workarounds & SBP2_WORKAROUND_MODE_SENSE_6)
+ sdev->use_10_for_ms = 0;
if (scsi_id->ne->guid_vendor_id == 0x0010b9 && /* Maxtor's OUI */
(sdev->type == TYPE_DISK || sdev->type == TYPE_RBC))
sdev->allow_restart = 1;
next prev parent reply other threads:[~2006-08-27 11:29 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-08-27 11:25 [PATCH 2.6.18-rc4 0/5] drivers/ieee1394/sbp2: fixes for 2.6.18-rc Stefan Richter
2006-08-27 11:26 ` Stefan Richter [this message]
2006-08-27 20:17 ` [PATCH 2.6.18-rc4 1/5] ieee1394: sbp2: workaround for write protect bit of Initio firmware Linus Torvalds
2006-08-28 1:19 ` Jeff Garzik
2006-08-28 9:24 ` Christoph Hellwig
2006-08-28 11:44 ` Stefan Richter
[not found] ` <44FC8AAC.10609@s5r6.in-berlin.de>
2006-09-04 20:52 ` Linus Torvalds
2006-09-04 21:26 ` Stefan Richter
2006-08-27 11:27 ` [PATCH 2.6.18-rc4 2/5] ieee1394: sbp2: safer agent reset in error handlers Stefan Richter
2006-08-27 11:28 ` [PATCH 2.6.18-rc4 3/5] ieee1394: sbp2: safer last_orb and next_ORB handling Stefan Richter
2006-08-27 11:29 ` [PATCH 2.6.18-rc4 4/5] ieee1394: sbp2: discard return value of sbp2_link_orb_command Stefan Richter
2006-08-27 11:31 ` [PATCH 2.6.18-rc4 5/5] ieee1394: sbp2: handle "sbp2util_node_write_no_wait failed" Stefan Richter
2006-08-27 11:34 ` [PATCH 2.6.18-rc4 3/5] ieee1394: sbp2: safer last_orb and next_ORB handling Stefan Richter
2006-08-27 11:34 ` [PATCH 2.6.18-rc4 4/5] ieee1394: sbp2: discard return value of sbp2_link_orb_command Stefan Richter
2006-08-27 11:35 ` [PATCH 2.6.18-rc4 5/5] ieee1394: sbp2: handle "sbp2util_node_write_no_wait failed" Stefan Richter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=tkrat.94cecc462a778dde@s5r6.in-berlin.de \
--to=stefanr@s5r6.in-berlin.de \
--cc=bcollins@ubuntu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@osdl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox