aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/scsi/qla2xxx/qla_sup.c36
1 files changed, 15 insertions, 21 deletions
diff --git a/drivers/scsi/qla2xxx/qla_sup.c b/drivers/scsi/qla2xxx/qla_sup.c
index b68fb73613ed..26822c8807ee 100644
--- a/drivers/scsi/qla2xxx/qla_sup.c
+++ b/drivers/scsi/qla2xxx/qla_sup.c
@@ -893,6 +893,8 @@ qla2x00_flip_colors(scsi_qla_host_t *ha, uint16_t *pflags)
893 } 893 }
894} 894}
895 895
896#define PIO_REG(h, r) ((h)->pio_address + offsetof(struct device_reg_2xxx, r))
897
896void 898void
897qla2x00_beacon_blink(struct scsi_qla_host *ha) 899qla2x00_beacon_blink(struct scsi_qla_host *ha)
898{ 900{
@@ -902,15 +904,12 @@ qla2x00_beacon_blink(struct scsi_qla_host *ha)
902 unsigned long flags; 904 unsigned long flags;
903 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; 905 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp;
904 906
905 if (ha->pio_address)
906 reg = (struct device_reg_2xxx __iomem *)ha->pio_address;
907
908 spin_lock_irqsave(&ha->hardware_lock, flags); 907 spin_lock_irqsave(&ha->hardware_lock, flags);
909 908
910 /* Save the Original GPIOE. */ 909 /* Save the Original GPIOE. */
911 if (ha->pio_address) { 910 if (ha->pio_address) {
912 gpio_enable = RD_REG_WORD_PIO(&reg->gpioe); 911 gpio_enable = RD_REG_WORD_PIO(PIO_REG(ha, gpioe));
913 gpio_data = RD_REG_WORD_PIO(&reg->gpiod); 912 gpio_data = RD_REG_WORD_PIO(PIO_REG(ha, gpiod));
914 } else { 913 } else {
915 gpio_enable = RD_REG_WORD(&reg->gpioe); 914 gpio_enable = RD_REG_WORD(&reg->gpioe);
916 gpio_data = RD_REG_WORD(&reg->gpiod); 915 gpio_data = RD_REG_WORD(&reg->gpiod);
@@ -920,7 +919,7 @@ qla2x00_beacon_blink(struct scsi_qla_host *ha)
920 gpio_enable |= GPIO_LED_MASK; 919 gpio_enable |= GPIO_LED_MASK;
921 920
922 if (ha->pio_address) { 921 if (ha->pio_address) {
923 WRT_REG_WORD_PIO(&reg->gpioe, gpio_enable); 922 WRT_REG_WORD_PIO(PIO_REG(ha, gpioe), gpio_enable);
924 } else { 923 } else {
925 WRT_REG_WORD(&reg->gpioe, gpio_enable); 924 WRT_REG_WORD(&reg->gpioe, gpio_enable);
926 RD_REG_WORD(&reg->gpioe); 925 RD_REG_WORD(&reg->gpioe);
@@ -936,7 +935,7 @@ qla2x00_beacon_blink(struct scsi_qla_host *ha)
936 935
937 /* Set the modified gpio_data values */ 936 /* Set the modified gpio_data values */
938 if (ha->pio_address) { 937 if (ha->pio_address) {
939 WRT_REG_WORD_PIO(&reg->gpiod, gpio_data); 938 WRT_REG_WORD_PIO(PIO_REG(ha, gpiod), gpio_data);
940 } else { 939 } else {
941 WRT_REG_WORD(&reg->gpiod, gpio_data); 940 WRT_REG_WORD(&reg->gpiod, gpio_data);
942 RD_REG_WORD(&reg->gpiod); 941 RD_REG_WORD(&reg->gpiod);
@@ -962,14 +961,11 @@ qla2x00_beacon_on(struct scsi_qla_host *ha)
962 return QLA_FUNCTION_FAILED; 961 return QLA_FUNCTION_FAILED;
963 } 962 }
964 963
965 if (ha->pio_address)
966 reg = (struct device_reg_2xxx __iomem *)ha->pio_address;
967
968 /* Turn off LEDs. */ 964 /* Turn off LEDs. */
969 spin_lock_irqsave(&ha->hardware_lock, flags); 965 spin_lock_irqsave(&ha->hardware_lock, flags);
970 if (ha->pio_address) { 966 if (ha->pio_address) {
971 gpio_enable = RD_REG_WORD_PIO(&reg->gpioe); 967 gpio_enable = RD_REG_WORD_PIO(PIO_REG(ha, gpioe));
972 gpio_data = RD_REG_WORD_PIO(&reg->gpiod); 968 gpio_data = RD_REG_WORD_PIO(PIO_REG(ha, gpiod));
973 } else { 969 } else {
974 gpio_enable = RD_REG_WORD(&reg->gpioe); 970 gpio_enable = RD_REG_WORD(&reg->gpioe);
975 gpio_data = RD_REG_WORD(&reg->gpiod); 971 gpio_data = RD_REG_WORD(&reg->gpiod);
@@ -978,7 +974,7 @@ qla2x00_beacon_on(struct scsi_qla_host *ha)
978 974
979 /* Set the modified gpio_enable values. */ 975 /* Set the modified gpio_enable values. */
980 if (ha->pio_address) { 976 if (ha->pio_address) {
981 WRT_REG_WORD_PIO(&reg->gpioe, gpio_enable); 977 WRT_REG_WORD_PIO(PIO_REG(ha, gpioe), gpio_enable);
982 } else { 978 } else {
983 WRT_REG_WORD(&reg->gpioe, gpio_enable); 979 WRT_REG_WORD(&reg->gpioe, gpio_enable);
984 RD_REG_WORD(&reg->gpioe); 980 RD_REG_WORD(&reg->gpioe);
@@ -987,7 +983,7 @@ qla2x00_beacon_on(struct scsi_qla_host *ha)
987 /* Clear out previously set LED colour. */ 983 /* Clear out previously set LED colour. */
988 gpio_data &= ~GPIO_LED_MASK; 984 gpio_data &= ~GPIO_LED_MASK;
989 if (ha->pio_address) { 985 if (ha->pio_address) {
990 WRT_REG_WORD_PIO(&reg->gpiod, gpio_data); 986 WRT_REG_WORD_PIO(PIO_REG(ha, gpiod), gpio_data);
991 } else { 987 } else {
992 WRT_REG_WORD(&reg->gpiod, gpio_data); 988 WRT_REG_WORD(&reg->gpiod, gpio_data);
993 RD_REG_WORD(&reg->gpiod); 989 RD_REG_WORD(&reg->gpiod);
@@ -1244,13 +1240,12 @@ qla2x00_read_flash_byte(scsi_qla_host_t *ha, uint32_t addr)
1244 if (ha->pio_address) { 1240 if (ha->pio_address) {
1245 uint16_t data2; 1241 uint16_t data2;
1246 1242
1247 reg = (struct device_reg_2xxx __iomem *)ha->pio_address; 1243 WRT_REG_WORD_PIO(PIO_REG(ha, flash_address), (uint16_t)addr);
1248 WRT_REG_WORD_PIO(&reg->flash_address, (uint16_t)addr);
1249 do { 1244 do {
1250 data = RD_REG_WORD_PIO(&reg->flash_data); 1245 data = RD_REG_WORD_PIO(PIO_REG(ha, flash_data));
1251 barrier(); 1246 barrier();
1252 cpu_relax(); 1247 cpu_relax();
1253 data2 = RD_REG_WORD_PIO(&reg->flash_data); 1248 data2 = RD_REG_WORD_PIO(PIO_REG(ha, flash_data));
1254 } while (data != data2); 1249 } while (data != data2);
1255 } else { 1250 } else {
1256 WRT_REG_WORD(&reg->flash_address, (uint16_t)addr); 1251 WRT_REG_WORD(&reg->flash_address, (uint16_t)addr);
@@ -1304,9 +1299,8 @@ qla2x00_write_flash_byte(scsi_qla_host_t *ha, uint32_t addr, uint8_t data)
1304 1299
1305 /* Always perform IO mapped accesses to the FLASH registers. */ 1300 /* Always perform IO mapped accesses to the FLASH registers. */
1306 if (ha->pio_address) { 1301 if (ha->pio_address) {
1307 reg = (struct device_reg_2xxx __iomem *)ha->pio_address; 1302 WRT_REG_WORD_PIO(PIO_REG(ha, flash_address), (uint16_t)addr);
1308 WRT_REG_WORD_PIO(&reg->flash_address, (uint16_t)addr); 1303 WRT_REG_WORD_PIO(PIO_REG(ha, flash_data), (uint16_t)data);
1309 WRT_REG_WORD_PIO(&reg->flash_data, (uint16_t)data);
1310 } else { 1304 } else {
1311 WRT_REG_WORD(&reg->flash_address, (uint16_t)addr); 1305 WRT_REG_WORD(&reg->flash_address, (uint16_t)addr);
1312 RD_REG_WORD(&reg->ctrl_status); /* PCI Posting. */ 1306 RD_REG_WORD(&reg->ctrl_status); /* PCI Posting. */