diff options
Diffstat (limited to 'drivers/scsi/qla2xxx')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_sup.c | 36 |
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 | |||
896 | void | 898 | void |
897 | qla2x00_beacon_blink(struct scsi_qla_host *ha) | 899 | qla2x00_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(®->gpioe); | 911 | gpio_enable = RD_REG_WORD_PIO(PIO_REG(ha, gpioe)); |
913 | gpio_data = RD_REG_WORD_PIO(®->gpiod); | 912 | gpio_data = RD_REG_WORD_PIO(PIO_REG(ha, gpiod)); |
914 | } else { | 913 | } else { |
915 | gpio_enable = RD_REG_WORD(®->gpioe); | 914 | gpio_enable = RD_REG_WORD(®->gpioe); |
916 | gpio_data = RD_REG_WORD(®->gpiod); | 915 | gpio_data = RD_REG_WORD(®->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(®->gpioe, gpio_enable); | 922 | WRT_REG_WORD_PIO(PIO_REG(ha, gpioe), gpio_enable); |
924 | } else { | 923 | } else { |
925 | WRT_REG_WORD(®->gpioe, gpio_enable); | 924 | WRT_REG_WORD(®->gpioe, gpio_enable); |
926 | RD_REG_WORD(®->gpioe); | 925 | RD_REG_WORD(®->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(®->gpiod, gpio_data); | 938 | WRT_REG_WORD_PIO(PIO_REG(ha, gpiod), gpio_data); |
940 | } else { | 939 | } else { |
941 | WRT_REG_WORD(®->gpiod, gpio_data); | 940 | WRT_REG_WORD(®->gpiod, gpio_data); |
942 | RD_REG_WORD(®->gpiod); | 941 | RD_REG_WORD(®->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(®->gpioe); | 967 | gpio_enable = RD_REG_WORD_PIO(PIO_REG(ha, gpioe)); |
972 | gpio_data = RD_REG_WORD_PIO(®->gpiod); | 968 | gpio_data = RD_REG_WORD_PIO(PIO_REG(ha, gpiod)); |
973 | } else { | 969 | } else { |
974 | gpio_enable = RD_REG_WORD(®->gpioe); | 970 | gpio_enable = RD_REG_WORD(®->gpioe); |
975 | gpio_data = RD_REG_WORD(®->gpiod); | 971 | gpio_data = RD_REG_WORD(®->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(®->gpioe, gpio_enable); | 977 | WRT_REG_WORD_PIO(PIO_REG(ha, gpioe), gpio_enable); |
982 | } else { | 978 | } else { |
983 | WRT_REG_WORD(®->gpioe, gpio_enable); | 979 | WRT_REG_WORD(®->gpioe, gpio_enable); |
984 | RD_REG_WORD(®->gpioe); | 980 | RD_REG_WORD(®->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(®->gpiod, gpio_data); | 986 | WRT_REG_WORD_PIO(PIO_REG(ha, gpiod), gpio_data); |
991 | } else { | 987 | } else { |
992 | WRT_REG_WORD(®->gpiod, gpio_data); | 988 | WRT_REG_WORD(®->gpiod, gpio_data); |
993 | RD_REG_WORD(®->gpiod); | 989 | RD_REG_WORD(®->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(®->flash_address, (uint16_t)addr); | ||
1249 | do { | 1244 | do { |
1250 | data = RD_REG_WORD_PIO(®->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(®->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(®->flash_address, (uint16_t)addr); | 1251 | WRT_REG_WORD(®->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(®->flash_address, (uint16_t)addr); | 1303 | WRT_REG_WORD_PIO(PIO_REG(ha, flash_data), (uint16_t)data); |
1309 | WRT_REG_WORD_PIO(®->flash_data, (uint16_t)data); | ||
1310 | } else { | 1304 | } else { |
1311 | WRT_REG_WORD(®->flash_address, (uint16_t)addr); | 1305 | WRT_REG_WORD(®->flash_address, (uint16_t)addr); |
1312 | RD_REG_WORD(®->ctrl_status); /* PCI Posting. */ | 1306 | RD_REG_WORD(®->ctrl_status); /* PCI Posting. */ |