Skip to content

Commit

Permalink
drm/nouveau/secboot/gm20b: specify MC base address as argument
Browse files Browse the repository at this point in the history
Allow the MC base address to be specified as an argument for the WPR
region reading function. GP10B uses a different address layout as GM20B,
so this is necessary. Also export the function to be used by GP10B.

Signed-off-by: Alexandre Courbot <[email protected]>
Signed-off-by: Ben Skeggs <[email protected]>
  • Loading branch information
Gnurou authored and Ben Skeggs committed Apr 6, 2017
1 parent 008796d commit c79505c
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 8 deletions.
3 changes: 3 additions & 0 deletions drivers/gpu/drm/nouveau/nvkm/subdev/secboot/gm200.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,7 @@ void *gm200_secboot_dtor(struct nvkm_secboot *);
int gm200_secboot_run_blob(struct nvkm_secboot *, struct nvkm_gpuobj *,
struct nvkm_falcon *);

/* Tegra-only */
int gm20b_secboot_tegra_read_wpr(struct gm200_secboot *, u32);

#endif
17 changes: 9 additions & 8 deletions drivers/gpu/drm/nouveau/nvkm/subdev/secboot/gm20b.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,28 +23,29 @@
#include "acr.h"
#include "gm200.h"

#define TEGRA210_MC_BASE 0x70019000

#ifdef CONFIG_ARCH_TEGRA
#define TEGRA_MC_BASE 0x70019000
#define MC_SECURITY_CARVEOUT2_CFG0 0xc58
#define MC_SECURITY_CARVEOUT2_BOM_0 0xc5c
#define MC_SECURITY_CARVEOUT2_BOM_HI_0 0xc60
#define MC_SECURITY_CARVEOUT2_SIZE_128K 0xc64
#define TEGRA_MC_SECURITY_CARVEOUT_CFG_LOCKED (1 << 1)
/**
* sb_tegra_read_wpr() - read the WPR registers on Tegra
* gm20b_secboot_tegra_read_wpr() - read the WPR registers on Tegra
*
* On dGPU, we can manage the WPR region ourselves, but on Tegra the WPR region
* is reserved from system memory by the bootloader and irreversibly locked.
* This function reads the address and size of the pre-configured WPR region.
*/
static int
gm20b_tegra_read_wpr(struct gm200_secboot *gsb)
int
gm20b_secboot_tegra_read_wpr(struct gm200_secboot *gsb, u32 mc_base)
{
struct nvkm_secboot *sb = &gsb->base;
void __iomem *mc;
u32 cfg;

mc = ioremap(TEGRA_MC_BASE, 0xd00);
mc = ioremap(mc_base, 0xd00);
if (!mc) {
nvkm_error(&sb->subdev, "Cannot map Tegra MC registers\n");
return PTR_ERR(mc);
Expand All @@ -70,8 +71,8 @@ gm20b_tegra_read_wpr(struct gm200_secboot *gsb)
return 0;
}
#else
static int
gm20b_tegra_read_wpr(struct gm200_secboot *gsb)
int
gm20b_secboot_tegra_read_wpr(struct gm200_secboot *gsb, u32 mc_base)
{
nvkm_error(&gsb->base.subdev, "Tegra support not compiled in\n");
return -EINVAL;
Expand All @@ -84,7 +85,7 @@ gm20b_secboot_oneinit(struct nvkm_secboot *sb)
struct gm200_secboot *gsb = gm200_secboot(sb);
int ret;

ret = gm20b_tegra_read_wpr(gsb);
ret = gm20b_secboot_tegra_read_wpr(gsb, TEGRA210_MC_BASE);
if (ret)
return ret;

Expand Down

0 comments on commit c79505c

Please sign in to comment.