From: Danilo Krummrich <dakr@kernel.org>
To: Zhi Wang <zhiw@nvidia.com>
Cc: nouveau@lists.freedesktop.org, airlied@gmail.com,
daniel@ffwll.ch, bskeggs@nvidia.com, mtijanic@nvidia.com,
jgg@nvidia.com, acurrid@nvidia.com, cjia@nvidia.com,
smitra@nvidia.com, ankita@nvidia.com, aniketa@nvidia.com,
kwankhede@nvidia.com, targupta@nvidia.com, zhiwang@kernel.org
Subject: Re: [RFC 3/8] drm/nouveau: load scrubber ucode image when WPR2 heap size > 256MB
Date: Fri, 17 Jan 2025 16:04:32 +0100 [thread overview]
Message-ID: <Z4pxgD2Dntr_PWWj@pollux> (raw)
In-Reply-To: <20241122125712.3653406-4-zhiw@nvidia.com>
On Fri, Nov 22, 2024 at 04:57:07AM -0800, Zhi Wang wrote:
> When WPR2 heap size > 256MB, the FB memory needs to be scrubbed before
> use.
>
> If not, the GSP firmware hangs when booting.
>
> Introduce ad102_gsp_init_fw_heap(). Load scrubber ucode image when
> WRP2 heap size > 256MB after the FB memory layout initialization. Save the
WPR
> fwif in nvkm_gsp for firmware loading in ad102_gsp_init_fw_heap().
>
> Cc: Surath Mitra <smitra@nvidia.com>
> Signed-off-by: Zhi Wang <zhiw@nvidia.com>
> ---
> .../gpu/drm/nouveau/include/nvkm/subdev/gsp.h | 3 ++-
> .../gpu/drm/nouveau/nvkm/subdev/gsp/ad102.c | 21 ++++++++++++++++++-
> .../gpu/drm/nouveau/nvkm/subdev/gsp/priv.h | 4 +++-
> .../gpu/drm/nouveau/nvkm/subdev/gsp/r535.c | 6 +++++-
> 4 files changed, 30 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h
> index a2055f2a014a..c6fe2d9d47de 100644
> --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h
> +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h
> @@ -33,7 +33,7 @@ struct nvkm_gsp {
> struct nvkm_subdev subdev;
>
> struct nvkm_falcon falcon;
> -
> + const struct nvkm_gsp_fwif *fwif;
> struct {
> struct {
> const struct firmware *load;
> @@ -41,6 +41,7 @@ struct nvkm_gsp {
> } booter;
> const struct firmware *bl;
> const struct firmware *rm;
> + const struct firmware *scrubber;
> } fws;
>
> struct nvkm_firmware fw;
> diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ad102.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ad102.c
> index 00a7ec875400..bd8bd37955fa 100644
> --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ad102.c
> +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ad102.c
> @@ -21,6 +21,25 @@
> */
> #include "priv.h"
>
> +static int
> +ad102_gsp_init_fw_heap(struct nvkm_gsp *gsp)
> +{
> + int ret;
> +
> + nvkm_gsp_init_fw_heap(gsp);
> +
> + if (gsp->fb.wpr2.heap.size <= SZ_256M)
> + return 0;
> +
> + /* Load scrubber ucode image */
> + ret = r535_gsp_load_fw(gsp, "scrubber", gsp->fwif->ver,
> + &gsp->fws.scrubber);
> + if (ret)
> + return ret;
> +
> + return 0;
> +}
> +
> static const struct nvkm_gsp_func
> ad102_gsp_r535_113_01 = {
> .flcn = &ga102_gsp_flcn,
> @@ -31,7 +50,7 @@ ad102_gsp_r535_113_01 = {
> .wpr_heap.os_carveout_size = 20 << 20,
> .wpr_heap.base_size = 8 << 20,
> .wpr_heap.min_size = 84 << 20,
> - .wpr_heap.init_fw_heap = tu102_gsp_init_fw_heap,
> + .wpr_heap.init_fw_heap = ad102_gsp_init_fw_heap,
>
> .booter.ctor = ga102_gsp_booter_ctor,
>
> diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h
> index dfb41be3d677..a89ab7b22263 100644
> --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h
> +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h
> @@ -16,7 +16,9 @@ struct nvkm_gsp_fwif {
> };
>
> int gv100_gsp_nofw(struct nvkm_gsp *, int, const struct nvkm_gsp_fwif *);
> -int r535_gsp_load(struct nvkm_gsp *, int, const struct nvkm_gsp_fwif *);
> +int r535_gsp_load_fw(struct nvkm_gsp *gsp, const char *name,
> + const char *ver, const struct firmware **pfw);
> +int r535_gsp_load(struct nvkm_gsp *gsp, int ver, const struct nvkm_gsp_fwif *fwif);
>
> struct nvkm_gsp_func {
> const struct nvkm_falcon_func *flcn;
> diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c
> index c56c545f2bdb..ef867eb20cff 100644
> --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c
> +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c
> @@ -2489,6 +2489,8 @@ r535_gsp_dtor_fws(struct nvkm_gsp *gsp)
> gsp->fws.booter.load = NULL;
> nvkm_firmware_put(gsp->fws.rm);
> gsp->fws.rm = NULL;
> + nvkm_firmware_put(gsp->fws.scrubber);
> + gsp->fws.scrubber = NULL;
> }
>
> void
> @@ -2656,7 +2658,7 @@ r535_gsp_oneinit(struct nvkm_gsp *gsp)
> return 0;
> }
>
> -static int
> +int
> r535_gsp_load_fw(struct nvkm_gsp *gsp, const char *name, const char *ver,
> const struct firmware **pfw)
> {
> @@ -2687,6 +2689,8 @@ r535_gsp_load(struct nvkm_gsp *gsp, int ver, const struct nvkm_gsp_fwif *fwif)
> return ret;
> }
>
> + gsp->fwif = fwif;
> +
> return 0;
> }
>
> --
> 2.34.1
>
next prev parent reply other threads:[~2025-01-17 15:04 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-22 12:57 [RFC 0/8] drm/nouveau: scrubber ucode image support for vGPU Zhi Wang
2024-11-22 12:57 ` [RFC 1/8] drm/nouveau: factor out nvkm_gsp_init_fw_heap() Zhi Wang
2025-01-17 15:13 ` Danilo Krummrich
2024-11-22 12:57 ` [RFC 2/8] drm/nouveau: introduce tu102_gsp_init_fw_heap() Zhi Wang
2024-11-22 16:26 ` Timur Tabi
2025-01-31 11:00 ` Zhi Wang
2024-11-22 12:57 ` [RFC 3/8] drm/nouveau: load scrubber ucode image when WPR2 heap size > 256MB Zhi Wang
2025-01-17 15:04 ` Danilo Krummrich [this message]
2024-11-22 12:57 ` [RFC 4/8] drm/nouveau: scrub the FB memory when scrubber firmware is loaded Zhi Wang
2025-01-09 22:58 ` Timur Tabi
2025-01-17 14:54 ` Danilo Krummrich
2025-01-17 14:57 ` Danilo Krummrich
2024-11-22 12:57 ` [RFC 5/8] drm/nouveau: support WPR2 heap size override Zhi Wang
2025-01-17 15:19 ` Danilo Krummrich
2024-11-22 12:57 ` [RFC 6/8] drm/nouveau: override the WPR2 heap size when SRIOV is supported on Ada Zhi Wang
2025-01-17 15:19 ` Danilo Krummrich
2024-11-22 12:57 ` [RFC 7/8] drm/nouveau: set max supported vGPU count when SRIOV is supported Zhi Wang
2025-01-17 15:24 ` Danilo Krummrich
2024-11-22 12:57 ` [RFC 8/8] drm/nouveau: introduce the scrubber on Ada in a kernel doc Zhi Wang
2025-01-17 15:27 ` Danilo Krummrich
2024-11-22 16:37 ` [RFC 0/8] drm/nouveau: scrubber ucode image support for vGPU Timur Tabi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z4pxgD2Dntr_PWWj@pollux \
--to=dakr@kernel.org \
--cc=acurrid@nvidia.com \
--cc=airlied@gmail.com \
--cc=aniketa@nvidia.com \
--cc=ankita@nvidia.com \
--cc=bskeggs@nvidia.com \
--cc=cjia@nvidia.com \
--cc=daniel@ffwll.ch \
--cc=jgg@nvidia.com \
--cc=kwankhede@nvidia.com \
--cc=mtijanic@nvidia.com \
--cc=nouveau@lists.freedesktop.org \
--cc=smitra@nvidia.com \
--cc=targupta@nvidia.com \
--cc=zhiw@nvidia.com \
--cc=zhiwang@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.