|
6 | 6 | * Author: Kishon Vijay Abraham I <kishon@ti.com>
|
7 | 7 | */
|
8 | 8 |
|
| 9 | +#include <linux/align.h> |
9 | 10 | #include <linux/bitfield.h>
|
10 | 11 | #include <linux/of.h>
|
11 | 12 | #include <linux/platform_device.h>
|
@@ -482,9 +483,10 @@ int dw_pcie_ep_raise_msi_irq(struct dw_pcie_ep *ep, u8 func_no,
|
482 | 483 | reg = ep_func->msi_cap + PCI_MSI_DATA_32;
|
483 | 484 | msg_data = dw_pcie_ep_readw_dbi(ep, func_no, reg);
|
484 | 485 | }
|
485 |
| - aligned_offset = msg_addr_lower & (epc->mem->window.page_size - 1); |
486 |
| - msg_addr = ((u64)msg_addr_upper) << 32 | |
487 |
| - (msg_addr_lower & ~aligned_offset); |
| 486 | + msg_addr = ((u64)msg_addr_upper) << 32 | msg_addr_lower; |
| 487 | + |
| 488 | + aligned_offset = msg_addr & (epc->mem->window.page_size - 1); |
| 489 | + msg_addr = ALIGN_DOWN(msg_addr, epc->mem->window.page_size); |
488 | 490 | ret = dw_pcie_ep_map_addr(epc, func_no, 0, ep->msi_mem_phys, msg_addr,
|
489 | 491 | epc->mem->window.page_size);
|
490 | 492 | if (ret)
|
@@ -551,7 +553,7 @@ int dw_pcie_ep_raise_msix_irq(struct dw_pcie_ep *ep, u8 func_no,
|
551 | 553 | }
|
552 | 554 |
|
553 | 555 | aligned_offset = msg_addr & (epc->mem->window.page_size - 1);
|
554 |
| - msg_addr &= ~aligned_offset; |
| 556 | + msg_addr = ALIGN_DOWN(msg_addr, epc->mem->window.page_size); |
555 | 557 | ret = dw_pcie_ep_map_addr(epc, func_no, 0, ep->msi_mem_phys, msg_addr,
|
556 | 558 | epc->mem->window.page_size);
|
557 | 559 | if (ret)
|
|
0 commit comments