NTB: Register and offset values fix for memory window
authorShyam Sundar S K <ssundark@amd.com>
Thu, 1 Dec 2016 19:14:28 +0000 (00:44 +0530)
committerJon Mason <jdmason@kudzu.us>
Fri, 23 Dec 2016 21:09:18 +0000 (16:09 -0500)
Due to incorrect limit and translation register values, NTB link was
going down when the memory window was setup. Made appropriate changes
as per spec.

Fix limit register values for BAR1, which was overlapping
with the BAR23 address.

Signed-off-by: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
Acked-by: Allen Hubbe <Allen.Hubbe@dell.com>
Signed-off-by: Jon Mason <jdmason@kudzu.us>
drivers/ntb/hw/amd/ntb_hw_amd.c

index b33f13b5b69d19529356ba8d9a240ebb8f885989..774918ca63d25d9b29ddfe35ccf68ea5fda31d23 100644 (file)
@@ -138,11 +138,11 @@ static int amd_ntb_mw_set_trans(struct ntb_dev *ntb, int idx,
        base_addr = pci_resource_start(ndev->ntb.pdev, bar);
 
        if (bar != 1) {
-               xlat_reg = AMD_BAR23XLAT_OFFSET + ((bar - 2) << 3);
-               limit_reg = AMD_BAR23LMT_OFFSET + ((bar - 2) << 3);
+               xlat_reg = AMD_BAR23XLAT_OFFSET + ((bar - 2) << 2);
+               limit_reg = AMD_BAR23LMT_OFFSET + ((bar - 2) << 2);
 
                /* Set the limit if supported */
-               limit = base_addr + size;
+               limit = size;
 
                /* set and verify setting the translation address */
                write64(addr, peer_mmio + xlat_reg);
@@ -164,14 +164,8 @@ static int amd_ntb_mw_set_trans(struct ntb_dev *ntb, int idx,
                xlat_reg = AMD_BAR1XLAT_OFFSET;
                limit_reg = AMD_BAR1LMT_OFFSET;
 
-               /* split bar addr range must all be 32 bit */
-               if (addr & (~0ull << 32))
-                       return -EINVAL;
-               if ((addr + size) & (~0ull << 32))
-                       return -EINVAL;
-
                /* Set the limit if supported */
-               limit = base_addr + size;
+               limit = size;
 
                /* set and verify setting the translation address */
                write64(addr, peer_mmio + xlat_reg);