On Thu 01 Jan 2026 09:21:26 PM , Matthew Schwartz wrote: > On 1/1/26 8:18 PM, Dave Airlie wrote: > > From: Dave Airlie <[email protected]> > > > > The changes to always loads fwsec sb causes problems on newer GPUs > > which don't use this path. > > > > Add hooks and pass through the device specific layers. > > > > Fixes: da67179e5538 ("drm/nouveau/gsp: Allocate fwsec-sb at boot") > > Closes: > https://lore.kernel.org/nouveau/[email protected]/ > Tested-by: Matthew Schwartz <[email protected]> > > Thanks, > Matt
Closes: https://lore.kernel.org/all/176682185563.8256.115798774340102079@copycat/ Tested-by: Christopher Snowhill <[email protected]> My thanks as well, Christopher > > > Cc: <[email protected]> # v6.16+ > > Cc: Lyude Paul <[email protected]> > > Cc: Timur Tabi <[email protected]> > > Signed-off-by: Dave Airlie <[email protected]> > > --- > > .../gpu/drm/nouveau/nvkm/subdev/gsp/ad102.c | 3 +++ > > .../gpu/drm/nouveau/nvkm/subdev/gsp/fwsec.c | 12 +++------- > > .../gpu/drm/nouveau/nvkm/subdev/gsp/ga100.c | 3 +++ > > .../gpu/drm/nouveau/nvkm/subdev/gsp/ga102.c | 3 +++ > > .../gpu/drm/nouveau/nvkm/subdev/gsp/priv.h | 23 +++++++++++++++++-- > > .../gpu/drm/nouveau/nvkm/subdev/gsp/tu102.c | 15 ++++++++++++ > > .../gpu/drm/nouveau/nvkm/subdev/gsp/tu116.c | 3 +++ > > 7 files changed, 51 insertions(+), 11 deletions(-) > > > > diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ad102.c > > b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ad102.c > > index 35d1fcef520bf..b3e994386334d 100644 > > --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ad102.c > > +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ad102.c > > @@ -29,6 +29,9 @@ ad102_gsp = { > > .sig_section = ".fwsignature_ad10x", > > > > .booter.ctor = ga102_gsp_booter_ctor, > > + > > + .fwsec_sb.ctor = tu102_gsp_fwsec_sb_ctor, > > + .fwsec_sb.dtor = tu102_gsp_fwsec_sb_dtor, > > > > .dtor = r535_gsp_dtor, > > .oneinit = tu102_gsp_oneinit, > > diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/fwsec.c > > b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/fwsec.c > > index 5037602466604..8d4f40a443ce4 100644 > > --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/fwsec.c > > +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/fwsec.c > > @@ -337,16 +337,10 @@ nvkm_gsp_fwsec_sb(struct nvkm_gsp *gsp) > > } > > > > int > > -nvkm_gsp_fwsec_sb_ctor(struct nvkm_gsp *gsp) > > +nvkm_gsp_fwsec_sb_init(struct nvkm_gsp *gsp) > > { > > - return nvkm_gsp_fwsec_init(gsp, &gsp->fws.falcon.sb, "fwsec-sb", > > - NVFW_FALCON_APPIF_DMEMMAPPER_CMD_SB); > > -} > > - > > -void > > -nvkm_gsp_fwsec_sb_dtor(struct nvkm_gsp *gsp) > > -{ > > - nvkm_falcon_fw_dtor(&gsp->fws.falcon.sb); > > + return nvkm_gsp_fwsec_init(gsp, &gsp->fws.falcon.sb, "fwsec-sb", > > + NVFW_FALCON_APPIF_DMEMMAPPER_CMD_SB); > > } > > > > int > > diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ga100.c > > b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ga100.c > > index d201e8697226b..27a13aeccd3cb 100644 > > --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ga100.c > > +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ga100.c > > @@ -47,6 +47,9 @@ ga100_gsp = { > > > > .booter.ctor = tu102_gsp_booter_ctor, > > > > + .fwsec_sb.ctor = tu102_gsp_fwsec_sb_ctor, > > + .fwsec_sb.dtor = tu102_gsp_fwsec_sb_dtor, > > + > > .dtor = r535_gsp_dtor, > > .oneinit = tu102_gsp_oneinit, > > .init = tu102_gsp_init, > > diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ga102.c > > b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ga102.c > > index 917f7e2f6c466..a59fb74ef6315 100644 > > --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ga102.c > > +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ga102.c > > @@ -158,6 +158,9 @@ ga102_gsp_r535 = { > > > > .booter.ctor = ga102_gsp_booter_ctor, > > > > + .fwsec_sb.ctor = tu102_gsp_fwsec_sb_ctor, > > + .fwsec_sb.dtor = tu102_gsp_fwsec_sb_dtor, > > + > > .dtor = r535_gsp_dtor, > > .oneinit = tu102_gsp_oneinit, > > .init = tu102_gsp_init, > > diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h > > b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h > > index 86bdd203bc107..9dd66a2e38017 100644 > > --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h > > +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/priv.h > > @@ -7,9 +7,8 @@ enum nvkm_acr_lsf_id; > > > > int nvkm_gsp_fwsec_frts(struct nvkm_gsp *); > > > > -int nvkm_gsp_fwsec_sb_ctor(struct nvkm_gsp *); > > int nvkm_gsp_fwsec_sb(struct nvkm_gsp *); > > -void nvkm_gsp_fwsec_sb_dtor(struct nvkm_gsp *); > > +int nvkm_gsp_fwsec_sb_init(struct nvkm_gsp *gsp); > > > > struct nvkm_gsp_fwif { > > int version; > > @@ -52,6 +51,11 @@ struct nvkm_gsp_func { > > struct nvkm_falcon *, struct nvkm_falcon_fw *); > > } booter; > > > > + struct { > > + int (*ctor)(struct nvkm_gsp *); > > + void (*dtor)(struct nvkm_gsp *); > > + } fwsec_sb; > > + > > void (*dtor)(struct nvkm_gsp *); > > int (*oneinit)(struct nvkm_gsp *); > > int (*init)(struct nvkm_gsp *); > > @@ -67,6 +71,8 @@ extern const struct nvkm_falcon_func tu102_gsp_flcn; > > extern const struct nvkm_falcon_fw_func tu102_gsp_fwsec; > > int tu102_gsp_booter_ctor(struct nvkm_gsp *, const char *, const struct > > firmware *, > > struct nvkm_falcon *, struct nvkm_falcon_fw *); > > +int tu102_gsp_fwsec_sb_ctor(struct nvkm_gsp *); > > +void tu102_gsp_fwsec_sb_dtor(struct nvkm_gsp *); > > int tu102_gsp_oneinit(struct nvkm_gsp *); > > int tu102_gsp_init(struct nvkm_gsp *); > > int tu102_gsp_fini(struct nvkm_gsp *, bool suspend); > > @@ -91,5 +97,18 @@ int r535_gsp_fini(struct nvkm_gsp *, bool suspend); > > int nvkm_gsp_new_(const struct nvkm_gsp_fwif *, struct nvkm_device *, enum > > nvkm_subdev_type, int, > > struct nvkm_gsp **); > > > > +static inline int nvkm_gsp_fwsec_sb_ctor(struct nvkm_gsp *gsp) > > +{ > > + if (gsp->func->fwsec_sb.ctor) > > + return gsp->func->fwsec_sb.ctor(gsp); > > + return 0; > > +} > > + > > +static inline void nvkm_gsp_fwsec_sb_dtor(struct nvkm_gsp *gsp) > > +{ > > + if (gsp->func->fwsec_sb.dtor) > > + gsp->func->fwsec_sb.dtor(gsp); > > +} > > + > > extern const struct nvkm_gsp_func gv100_gsp; > > #endif > > diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/tu102.c > > b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/tu102.c > > index 81e56da0474a1..04b642a1f7305 100644 > > --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/tu102.c > > +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/tu102.c > > @@ -30,6 +30,18 @@ > > #include <nvfw/fw.h> > > #include <nvfw/hs.h> > > > > +int > > +tu102_gsp_fwsec_sb_ctor(struct nvkm_gsp *gsp) > > +{ > > + return nvkm_gsp_fwsec_sb_init(gsp); > > +} > > + > > +void > > +tu102_gsp_fwsec_sb_dtor(struct nvkm_gsp *gsp) > > +{ > > + nvkm_falcon_fw_dtor(&gsp->fws.falcon.sb); > > +} > > + > > static int > > tu102_gsp_booter_unload(struct nvkm_gsp *gsp, u32 mbox0, u32 mbox1) > > { > > @@ -370,6 +382,9 @@ tu102_gsp = { > > > > .booter.ctor = tu102_gsp_booter_ctor, > > > > + .fwsec_sb.ctor = tu102_gsp_fwsec_sb_ctor, > > + .fwsec_sb.dtor = tu102_gsp_fwsec_sb_dtor, > > + > > .dtor = r535_gsp_dtor, > > .oneinit = tu102_gsp_oneinit, > > .init = tu102_gsp_init, > > diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/tu116.c > > b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/tu116.c > > index 97eb046c25d07..58cf258424218 100644 > > --- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/tu116.c > > +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/tu116.c > > @@ -30,6 +30,9 @@ tu116_gsp = { > > > > .booter.ctor = tu102_gsp_booter_ctor, > > > > + .fwsec_sb.ctor = tu102_gsp_fwsec_sb_ctor, > > + .fwsec_sb.dtor = tu102_gsp_fwsec_sb_dtor, > > + > > .dtor = r535_gsp_dtor, > > .oneinit = tu102_gsp_oneinit, > > .init = tu102_gsp_init, >
signature.asc
Description: PGP signature
