diff options
Diffstat (limited to 'drivers/infiniband/hw/mthca/mthca_cmd.c')
-rw-r--r-- | drivers/infiniband/hw/mthca/mthca_cmd.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/drivers/infiniband/hw/mthca/mthca_cmd.c b/drivers/infiniband/hw/mthca/mthca_cmd.c index d1e7ecb5f23..948a2861cae 100644 --- a/drivers/infiniband/hw/mthca/mthca_cmd.c +++ b/drivers/infiniband/hw/mthca/mthca_cmd.c | |||
@@ -652,8 +652,9 @@ static int mthca_map_cmd(struct mthca_dev *dev, u16 op, struct mthca_icm *icm, | |||
652 | * address or size and use that as our log2 size. | 652 | * address or size and use that as our log2 size. |
653 | */ | 653 | */ |
654 | lg = ffs(mthca_icm_addr(&iter) | mthca_icm_size(&iter)) - 1; | 654 | lg = ffs(mthca_icm_addr(&iter) | mthca_icm_size(&iter)) - 1; |
655 | if (lg < 12) { | 655 | if (lg < MTHCA_ICM_PAGE_SHIFT) { |
656 | mthca_warn(dev, "Got FW area not aligned to 4K (%llx/%lx).\n", | 656 | mthca_warn(dev, "Got FW area not aligned to %d (%llx/%lx).\n", |
657 | MTHCA_ICM_PAGE_SIZE, | ||
657 | (unsigned long long) mthca_icm_addr(&iter), | 658 | (unsigned long long) mthca_icm_addr(&iter), |
658 | mthca_icm_size(&iter)); | 659 | mthca_icm_size(&iter)); |
659 | err = -EINVAL; | 660 | err = -EINVAL; |
@@ -665,8 +666,9 @@ static int mthca_map_cmd(struct mthca_dev *dev, u16 op, struct mthca_icm *icm, | |||
665 | virt += 1 << lg; | 666 | virt += 1 << lg; |
666 | } | 667 | } |
667 | 668 | ||
668 | pages[nent * 2 + 1] = cpu_to_be64((mthca_icm_addr(&iter) + | 669 | pages[nent * 2 + 1] = |
669 | (i << lg)) | (lg - 12)); | 670 | cpu_to_be64((mthca_icm_addr(&iter) + (i << lg)) | |
671 | (lg - MTHCA_ICM_PAGE_SHIFT)); | ||
670 | ts += 1 << (lg - 10); | 672 | ts += 1 << (lg - 10); |
671 | ++tc; | 673 | ++tc; |
672 | 674 | ||
@@ -822,12 +824,12 @@ int mthca_QUERY_FW(struct mthca_dev *dev, u8 *status) | |||
822 | mthca_dbg(dev, "FW size %d KB\n", dev->fw.arbel.fw_pages << 2); | 824 | mthca_dbg(dev, "FW size %d KB\n", dev->fw.arbel.fw_pages << 2); |
823 | 825 | ||
824 | /* | 826 | /* |
825 | * Arbel page size is always 4 KB; round up number of | 827 | * Round up number of system pages needed in case |
826 | * system pages needed. | 828 | * MTHCA_ICM_PAGE_SIZE < PAGE_SIZE. |
827 | */ | 829 | */ |
828 | dev->fw.arbel.fw_pages = | 830 | dev->fw.arbel.fw_pages = |
829 | ALIGN(dev->fw.arbel.fw_pages, PAGE_SIZE >> 12) >> | 831 | ALIGN(dev->fw.arbel.fw_pages, PAGE_SIZE / MTHCA_ICM_PAGE_SIZE) >> |
830 | (PAGE_SHIFT - 12); | 832 | (PAGE_SHIFT - MTHCA_ICM_PAGE_SHIFT); |
831 | 833 | ||
832 | mthca_dbg(dev, "Clear int @ %llx, EQ arm @ %llx, EQ set CI @ %llx\n", | 834 | mthca_dbg(dev, "Clear int @ %llx, EQ arm @ %llx, EQ set CI @ %llx\n", |
833 | (unsigned long long) dev->fw.arbel.clr_int_base, | 835 | (unsigned long long) dev->fw.arbel.clr_int_base, |
@@ -1540,11 +1542,11 @@ int mthca_SET_ICM_SIZE(struct mthca_dev *dev, u64 icm_size, u64 *aux_pages, | |||
1540 | return ret; | 1542 | return ret; |
1541 | 1543 | ||
1542 | /* | 1544 | /* |
1543 | * Arbel page size is always 4 KB; round up number of system | 1545 | * Round up number of system pages needed in case |
1544 | * pages needed. | 1546 | * MTHCA_ICM_PAGE_SIZE < PAGE_SIZE. |
1545 | */ | 1547 | */ |
1546 | *aux_pages = (*aux_pages + (1 << (PAGE_SHIFT - 12)) - 1) >> (PAGE_SHIFT - 12); | 1548 | *aux_pages = ALIGN(*aux_pages, PAGE_SIZE / MTHCA_ICM_PAGE_SIZE) >> |
1547 | *aux_pages = ALIGN(*aux_pages, PAGE_SIZE >> 12) >> (PAGE_SHIFT - 12); | 1549 | (PAGE_SHIFT - MTHCA_ICM_PAGE_SHIFT); |
1548 | 1550 | ||
1549 | return 0; | 1551 | return 0; |
1550 | } | 1552 | } |