diff options
author | Wayne Boyer <wayneb@linux.vnet.ibm.com> | 2010-06-04 13:26:50 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2010-07-27 13:01:30 -0400 |
commit | 8701f18504751a5b89be3203e28c5ec04c147167 (patch) | |
tree | 58f15f58a76ce73e1d92c72a21c19b350b8ded30 /drivers/scsi/ipr.h | |
parent | da2907ffd08a2d708c829ec171f05fe3ceab1315 (diff) |
[SCSI] ipr: add endian swap enablement for 64 bit adapters
A change in the hardware design of the chip for the new adapters changes the
default endianness of MMIO operations. This patch adds a register definition
which when written to with a predefined value will change the endianness
back to what the driver expects.
This patch also fixes two problems found during testing.
First, the first reserved field in the ipr_hostrcb64_fabirc_desc structure only
reserved one byte. The correct amount to reserve is 2 bytes.
Second, the reserved field of the ipr_hostrcb64_error structure only reserved
2 bytes. The correct amount to reserve is 16 bytes.
Signed-off-by: Wayne Boyer <wayneb@linux.vnet.ibm.com>
Acked-by: Brian King <brking@linux.vnet.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/ipr.h')
-rw-r--r-- | drivers/scsi/ipr.h | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/scsi/ipr.h b/drivers/scsi/ipr.h index b965f3587c9d..ea391ffc8711 100644 --- a/drivers/scsi/ipr.h +++ b/drivers/scsi/ipr.h | |||
@@ -996,7 +996,7 @@ struct ipr_hostrcb64_fabric_desc { | |||
996 | __be16 length; | 996 | __be16 length; |
997 | u8 descriptor_id; | 997 | u8 descriptor_id; |
998 | 998 | ||
999 | u8 reserved; | 999 | u8 reserved[2]; |
1000 | u8 path_state; | 1000 | u8 path_state; |
1001 | 1001 | ||
1002 | u8 reserved2[2]; | 1002 | u8 reserved2[2]; |
@@ -1054,7 +1054,7 @@ struct ipr_hostrcb64_error { | |||
1054 | __be64 fd_lun; | 1054 | __be64 fd_lun; |
1055 | u8 fd_res_path[8]; | 1055 | u8 fd_res_path[8]; |
1056 | __be64 time_stamp; | 1056 | __be64 time_stamp; |
1057 | u8 reserved[2]; | 1057 | u8 reserved[16]; |
1058 | union { | 1058 | union { |
1059 | struct ipr_hostrcb_type_ff_error type_ff_error; | 1059 | struct ipr_hostrcb_type_ff_error type_ff_error; |
1060 | struct ipr_hostrcb_type_12_error type_12_error; | 1060 | struct ipr_hostrcb_type_12_error type_12_error; |
@@ -1254,6 +1254,9 @@ struct ipr_interrupt_offsets { | |||
1254 | 1254 | ||
1255 | unsigned long dump_addr_reg; | 1255 | unsigned long dump_addr_reg; |
1256 | unsigned long dump_data_reg; | 1256 | unsigned long dump_data_reg; |
1257 | |||
1258 | #define IPR_ENDIAN_SWAP_KEY 0x000C0C00 | ||
1259 | unsigned long endian_swap_reg; | ||
1257 | }; | 1260 | }; |
1258 | 1261 | ||
1259 | struct ipr_interrupts { | 1262 | struct ipr_interrupts { |
@@ -1279,6 +1282,8 @@ struct ipr_interrupts { | |||
1279 | 1282 | ||
1280 | void __iomem *dump_addr_reg; | 1283 | void __iomem *dump_addr_reg; |
1281 | void __iomem *dump_data_reg; | 1284 | void __iomem *dump_data_reg; |
1285 | |||
1286 | void __iomem *endian_swap_reg; | ||
1282 | }; | 1287 | }; |
1283 | 1288 | ||
1284 | struct ipr_chip_cfg_t { | 1289 | struct ipr_chip_cfg_t { |