mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-22 17:36:20 +03:00
gpu: nvgpu: store bus addr of gpu regs
Usermode submit needs to access the usermode region of registers from userspace. Store the start address of register resource in struct nvgpu_os_linux to be used in remap to userspace. Bug 200145225 Change-Id: I3796b6bf67942af0cc16c86accb82a013032bfc8 Signed-off-by: Konsta Holtta <kholtta@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1811838 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
757f028320
commit
38c11db264
@@ -648,6 +648,16 @@ void __iomem *nvgpu_devm_ioremap(struct device *dev, resource_size_t offset,
|
||||
return devm_ioremap(dev, offset, size);
|
||||
}
|
||||
|
||||
u64 nvgpu_resource_addr(struct platform_device *dev, int i)
|
||||
{
|
||||
struct resource *r = platform_get_resource(dev, IORESOURCE_MEM, i);
|
||||
|
||||
if (!r)
|
||||
return 0;
|
||||
|
||||
return r->start;
|
||||
}
|
||||
|
||||
static irqreturn_t gk20a_intr_isr_stall(int irq, void *dev_id)
|
||||
{
|
||||
struct gk20a *g = dev_id;
|
||||
@@ -736,6 +746,14 @@ static int gk20a_init_support(struct platform_device *pdev)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
l->regs_bus_addr = nvgpu_resource_addr(pdev,
|
||||
GK20A_BAR0_IORESOURCE_MEM);
|
||||
if (!l->regs_bus_addr) {
|
||||
nvgpu_err(g, "failed to read register bus offset");
|
||||
err = -ENODEV;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
l->bar1 = nvgpu_devm_ioremap_resource(pdev,
|
||||
GK20A_BAR1_IORESOURCE_MEM,
|
||||
&l->bar1_mem);
|
||||
|
||||
@@ -31,6 +31,7 @@ void __iomem *nvgpu_devm_ioremap_resource(struct platform_device *dev, int i,
|
||||
struct resource **out);
|
||||
void __iomem *nvgpu_devm_ioremap(struct device *dev, resource_size_t offset,
|
||||
resource_size_t size);
|
||||
u64 nvgpu_resource_addr(struct platform_device *dev, int i);
|
||||
extern struct class nvgpu_class;
|
||||
|
||||
#endif
|
||||
|
||||
@@ -128,6 +128,8 @@ struct nvgpu_os_linux {
|
||||
void __iomem *usermode_regs;
|
||||
void __iomem *usermode_regs_saved;
|
||||
|
||||
u64 regs_bus_addr;
|
||||
|
||||
struct nvgpu_os_linux_ops ops;
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
|
||||
@@ -537,6 +537,13 @@ static int nvgpu_pci_init_support(struct pci_dev *pdev)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
l->regs_bus_addr = pci_resource_start(pdev, 0);
|
||||
if (!l->regs_bus_addr) {
|
||||
nvgpu_err(g, "failed to read register bus offset");
|
||||
err = -ENODEV;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
l->bar1 = nvgpu_devm_ioremap(dev, pci_resource_start(pdev, 1),
|
||||
pci_resource_len(pdev, 1));
|
||||
if (IS_ERR(l->bar1)) {
|
||||
|
||||
Reference in New Issue
Block a user