mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-22 09:12:24 +03:00
gpu: nvgpu: sim init for iGPU-PCIe
Implement the sim init for the iGPU-PCIe devices. JIRA NVGPU-9348 Change-Id: I9088308b96c57bb1cea01959326446ccad0a8c24 Signed-off-by: Ramalingam C <ramalingamc@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2851163 Reviewed-by: svcacv <svcacv@nvidia.com> Reviewed-by: Sagar Kamble <skamble@nvidia.com> Reviewed-by: Seema Khowala <seemaj@nvidia.com> GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
d0ed86ab1e
commit
b2c4cdb25b
@@ -2,7 +2,7 @@
|
|||||||
*
|
*
|
||||||
* nvgpu sim support
|
* nvgpu sim support
|
||||||
*
|
*
|
||||||
* Copyright (c) 2018-2021, NVIDIA CORPORATION. All rights reserved.
|
* Copyright (c) 2018-2023, NVIDIA CORPORATION. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
@@ -21,6 +21,7 @@
|
|||||||
#define __SIM_LINUX_H__
|
#define __SIM_LINUX_H__
|
||||||
|
|
||||||
struct platform_device;
|
struct platform_device;
|
||||||
|
struct gk20a_platform;
|
||||||
|
|
||||||
struct sim_nvgpu_linux {
|
struct sim_nvgpu_linux {
|
||||||
struct sim_nvgpu sim;
|
struct sim_nvgpu sim;
|
||||||
@@ -30,5 +31,7 @@ struct sim_nvgpu_linux {
|
|||||||
|
|
||||||
int nvgpu_init_sim_support_linux(struct gk20a *g,
|
int nvgpu_init_sim_support_linux(struct gk20a *g,
|
||||||
struct platform_device *dev);
|
struct platform_device *dev);
|
||||||
|
int nvgpu_init_sim_support_linux_igpu_pci(struct gk20a *g,
|
||||||
|
struct gk20a_platform *platform);
|
||||||
void nvgpu_remove_sim_support_linux(struct gk20a *g);
|
void nvgpu_remove_sim_support_linux(struct gk20a *g);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
#include <nvgpu/string.h>
|
#include <nvgpu/string.h>
|
||||||
#include <nvgpu/gr/gr.h>
|
#include <nvgpu/gr/gr.h>
|
||||||
#include <nvgpu/nvgpu_init.h>
|
#include <nvgpu/nvgpu_init.h>
|
||||||
|
#include <nvgpu/linux/sim.h>
|
||||||
|
|
||||||
#include "nvlink.h"
|
#include "nvlink.h"
|
||||||
#include "module.h"
|
#include "module.h"
|
||||||
@@ -394,8 +395,9 @@ static irqreturn_t nvgpu_pci_intr_thread(int irq, void *dev_id)
|
|||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int nvgpu_pci_init_support(struct pci_dev *pdev)
|
static int nvgpu_pci_init_support(struct pci_dev *pdev, bool is_pci_igpu)
|
||||||
{
|
{
|
||||||
|
struct gk20a_platform *platform = pci_get_drvdata(pdev);
|
||||||
int err = 0;
|
int err = 0;
|
||||||
struct gk20a *g = get_gk20a(&pdev->dev);
|
struct gk20a *g = get_gk20a(&pdev->dev);
|
||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
@@ -427,17 +429,29 @@ static int nvgpu_pci_init_support(struct pci_dev *pdev)
|
|||||||
}
|
}
|
||||||
g->bar1 = (uintptr_t)addr;
|
g->bar1 = (uintptr_t)addr;
|
||||||
|
|
||||||
err = nvgpu_init_sim_support_linux_pci(g);
|
if (is_pci_igpu) {
|
||||||
if (err)
|
err = nvgpu_init_sim_support_linux_igpu_pci(g, platform);
|
||||||
goto fail;
|
if (err)
|
||||||
err = nvgpu_init_sim_support_pci(g);
|
goto fail;
|
||||||
if (err)
|
err = nvgpu_init_sim_support(g);
|
||||||
goto fail_sim;
|
if (err)
|
||||||
|
goto fail_sim;
|
||||||
|
} else {
|
||||||
|
err = nvgpu_init_sim_support_linux_pci(g);
|
||||||
|
if (err)
|
||||||
|
goto fail;
|
||||||
|
err = nvgpu_init_sim_support_pci(g);
|
||||||
|
if (err)
|
||||||
|
goto fail_sim;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail_sim:
|
fail_sim:
|
||||||
nvgpu_remove_sim_support_linux_pci(g);
|
if (is_pci_igpu)
|
||||||
|
nvgpu_remove_sim_support_linux(g);
|
||||||
|
else
|
||||||
|
nvgpu_remove_sim_support_linux_pci(g);
|
||||||
fail:
|
fail:
|
||||||
if (g->regs)
|
if (g->regs)
|
||||||
g->regs = 0U;
|
g->regs = 0U;
|
||||||
@@ -675,7 +689,7 @@ static int nvgpu_pci_probe(struct pci_dev *pdev,
|
|||||||
}
|
}
|
||||||
nvgpu_disable_irqs(g);
|
nvgpu_disable_irqs(g);
|
||||||
|
|
||||||
err = nvgpu_pci_init_support(pdev);
|
err = nvgpu_pci_init_support(pdev, g->is_pci_igpu);
|
||||||
if (err)
|
if (err)
|
||||||
goto err_free_irq;
|
goto err_free_irq;
|
||||||
|
|
||||||
|
|||||||
@@ -358,6 +358,11 @@ struct gk20a_platform {
|
|||||||
|
|
||||||
/* Check if igpu is available as pci device. */
|
/* Check if igpu is available as pci device. */
|
||||||
bool is_pci_igpu;
|
bool is_pci_igpu;
|
||||||
|
|
||||||
|
#ifdef CONFIG_NVGPU_SIM
|
||||||
|
u32 fake_rpc_base;
|
||||||
|
u32 fake_rpc_size;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline struct gk20a_platform *gk20a_get_platform(
|
static inline struct gk20a_platform *gk20a_get_platform(
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2018-2021, NVIDIA CORPORATION. All rights reserved.
|
* Copyright (c) 2018-2023, NVIDIA CORPORATION. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
@@ -80,3 +80,36 @@ fail:
|
|||||||
nvgpu_remove_sim_support_linux(g);
|
nvgpu_remove_sim_support_linux(g);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int nvgpu_init_sim_support_linux_igpu_pci(struct gk20a *g,
|
||||||
|
struct gk20a_platform *platform)
|
||||||
|
{
|
||||||
|
struct device *dev = dev_from_gk20a(g);
|
||||||
|
struct sim_nvgpu_linux *sim_linux;
|
||||||
|
void __iomem *addr;
|
||||||
|
int err = -ENOMEM;
|
||||||
|
|
||||||
|
if (!nvgpu_platform_is_simulation(g))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
sim_linux = nvgpu_kzalloc(g, sizeof(*sim_linux));
|
||||||
|
if (!sim_linux)
|
||||||
|
return err;
|
||||||
|
g->sim = &sim_linux->sim;
|
||||||
|
g->sim->g = g;
|
||||||
|
addr = nvgpu_devm_ioremap(dev,
|
||||||
|
(resource_size_t)platform->fake_rpc_base,
|
||||||
|
(resource_size_t)platform->fake_rpc_size);
|
||||||
|
if (IS_ERR(addr)) {
|
||||||
|
nvgpu_err(g, "failed to remap gpu sim regs");
|
||||||
|
err = PTR_ERR(addr);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
g->sim->regs = (uintptr_t)addr;
|
||||||
|
sim_linux->remove_support_linux = nvgpu_remove_sim_support_linux;
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
fail:
|
||||||
|
nvgpu_remove_sim_support_linux(g);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user