Commit 417cf39c authored by Serge Semin's avatar Serge Semin Committed by Jon Mason

NTB: Set dma mask and dma coherent mask to NTB devices

The dma_mask and dma_coherent_mask fields of the NTB struct device
weren't initialized in hardware drivers. In fact it should be done
instead of PCIe interface usage, since NTB clients are supposed to
use NTB API and left unaware of real hardware implementation.
In addition to that ntb_device_register() method shouldn't clear
the passed ntb_dev structure, since it dma_mask is initialized
by hardware drivers.
Signed-off-by: default avatarSerge Semin <fancer.lancer@gmail.com>
Signed-off-by: default avatarJon Mason <jdmason@kudzu.us>
parent b87ab219
...@@ -1020,6 +1020,10 @@ static int amd_ntb_init_pci(struct amd_ntb_dev *ndev, ...@@ -1020,6 +1020,10 @@ static int amd_ntb_init_pci(struct amd_ntb_dev *ndev,
goto err_dma_mask; goto err_dma_mask;
dev_warn(&pdev->dev, "Cannot DMA consistent highmem\n"); dev_warn(&pdev->dev, "Cannot DMA consistent highmem\n");
} }
rc = dma_coerce_mask_and_coherent(&ndev->ntb.dev,
dma_get_mask(&pdev->dev));
if (rc)
goto err_dma_mask;
ndev->self_mmio = pci_iomap(pdev, 0, 0); ndev->self_mmio = pci_iomap(pdev, 0, 0);
if (!ndev->self_mmio) { if (!ndev->self_mmio) {
......
...@@ -2426,7 +2426,7 @@ static int idt_init_pci(struct idt_ntb_dev *ndev) ...@@ -2426,7 +2426,7 @@ static int idt_init_pci(struct idt_ntb_dev *ndev)
struct pci_dev *pdev = ndev->ntb.pdev; struct pci_dev *pdev = ndev->ntb.pdev;
int ret; int ret;
/* Initialize the bit mask of DMA */ /* Initialize the bit mask of PCI/NTB DMA */
ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(64)); ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(64));
if (ret != 0) { if (ret != 0) {
ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
...@@ -2447,6 +2447,12 @@ static int idt_init_pci(struct idt_ntb_dev *ndev) ...@@ -2447,6 +2447,12 @@ static int idt_init_pci(struct idt_ntb_dev *ndev)
dev_warn(&pdev->dev, dev_warn(&pdev->dev,
"Cannot set consistent DMA highmem bit mask\n"); "Cannot set consistent DMA highmem bit mask\n");
} }
ret = dma_coerce_mask_and_coherent(&ndev->ntb.dev,
dma_get_mask(&pdev->dev));
if (ret != 0) {
dev_err(&pdev->dev, "Failed to set NTB device DMA bit mask\n");
return ret;
}
/* /*
* Enable the device advanced error reporting. It's not critical to * Enable the device advanced error reporting. It's not critical to
......
...@@ -2334,6 +2334,10 @@ static int intel_ntb_init_pci(struct intel_ntb_dev *ndev, struct pci_dev *pdev) ...@@ -2334,6 +2334,10 @@ static int intel_ntb_init_pci(struct intel_ntb_dev *ndev, struct pci_dev *pdev)
goto err_dma_mask; goto err_dma_mask;
dev_warn(&pdev->dev, "Cannot DMA consistent highmem\n"); dev_warn(&pdev->dev, "Cannot DMA consistent highmem\n");
} }
rc = dma_coerce_mask_and_coherent(&ndev->ntb.dev,
dma_get_mask(&pdev->dev));
if (rc)
goto err_dma_mask;
ndev->self_mmio = pci_iomap(pdev, 0, 0); ndev->self_mmio = pci_iomap(pdev, 0, 0);
if (!ndev->self_mmio) { if (!ndev->self_mmio) {
......
...@@ -111,7 +111,6 @@ int ntb_register_device(struct ntb_dev *ntb) ...@@ -111,7 +111,6 @@ int ntb_register_device(struct ntb_dev *ntb)
init_completion(&ntb->released); init_completion(&ntb->released);
memset(&ntb->dev, 0, sizeof(ntb->dev));
ntb->dev.bus = &ntb_bus; ntb->dev.bus = &ntb_bus;
ntb->dev.parent = &ntb->pdev->dev; ntb->dev.parent = &ntb->pdev->dev;
ntb->dev.release = ntb_dev_release; ntb->dev.release = ntb_dev_release;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment