drm/nouveau: Add support for SLCG for Kepler2
That's right, there's still more power saving to go! Starting with kepler 2, nvidia hardware has an additional level of clockgating known as second level clockgating. The details of this are not exact, but it seems to work by waiting for a collection of dependent hardware blocks to be gated before taking affect. As with the previous series, this results in another noticeable drop in power consumption and is programmed in the same manner. Signed-off-by: Lyude Paul <lyude@redhat.com> Reviewed-by: Martin Peres <martin.peres@free.fr> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
7d094d2958
commit
a0f79082bd
|
@ -187,6 +187,87 @@ gk110_clkgate_blcg_init_gpc_mp_0[] = {
|
|||
{}
|
||||
};
|
||||
|
||||
static const struct nvkm_therm_clkgate_init
|
||||
gk110_clkgate_slcg_init_main_0[] = {
|
||||
{ 0x4041f4, 1, 0x00000000 },
|
||||
{ 0x409894, 1, 0x00000000 },
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct nvkm_therm_clkgate_init
|
||||
gk110_clkgate_slcg_init_unk_0[] = {
|
||||
{ 0x406004, 1, 0x00000000 },
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct nvkm_therm_clkgate_init
|
||||
gk110_clkgate_slcg_init_sked_0[] = {
|
||||
{ 0x407004, 1, 0x00000000 },
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct nvkm_therm_clkgate_init
|
||||
gk110_clkgate_slcg_init_gpc_ctxctl_0[] = {
|
||||
{ 0x41a894, 1, 0x00000000 },
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct nvkm_therm_clkgate_init
|
||||
gk110_clkgate_slcg_init_gpc_unk_0[] = {
|
||||
{ 0x418504, 1, 0x00000000 },
|
||||
{ 0x41860c, 1, 0x00000000 },
|
||||
{ 0x41868c, 1, 0x00000000 },
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct nvkm_therm_clkgate_init
|
||||
gk110_clkgate_slcg_init_gpc_esetup_0[] = {
|
||||
{ 0x41882c, 1, 0x00000000 },
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct nvkm_therm_clkgate_init
|
||||
gk110_clkgate_slcg_init_gpc_zcull_0[] = {
|
||||
{ 0x418974, 1, 0x00000000 },
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct nvkm_therm_clkgate_init
|
||||
gk110_clkgate_slcg_init_gpc_l1c_0[] = {
|
||||
{ 0x419cd8, 2, 0x00000000 },
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct nvkm_therm_clkgate_init
|
||||
gk110_clkgate_slcg_init_gpc_unk_1[] = {
|
||||
{ 0x419c74, 1, 0x00000000 },
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct nvkm_therm_clkgate_init
|
||||
gk110_clkgate_slcg_init_gpc_mp_0[] = {
|
||||
{ 0x419fd4, 1, 0x00004a4a },
|
||||
{ 0x419fdc, 1, 0x00000014 },
|
||||
{ 0x419fe4, 1, 0x00000000 },
|
||||
{ 0x419ff4, 1, 0x00001724 },
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct nvkm_therm_clkgate_init
|
||||
gk110_clkgate_slcg_init_gpc_ppc_0[] = {
|
||||
{ 0x41be2c, 1, 0x00000000 },
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct nvkm_therm_clkgate_init
|
||||
gk110_clkgate_slcg_init_pcounter_0[] = {
|
||||
{ 0x1be018, 1, 0x000001ff },
|
||||
{ 0x1bc018, 1, 0x000001ff },
|
||||
{ 0x1b8018, 1, 0x000001ff },
|
||||
{ 0x1b4124, 1, 0x00000000 },
|
||||
{}
|
||||
};
|
||||
|
||||
static const struct nvkm_therm_clkgate_pack
|
||||
gk110_clkgate_pack[] = {
|
||||
{ gk104_clkgate_blcg_init_main_0 },
|
||||
|
@ -214,6 +295,18 @@ gk110_clkgate_pack[] = {
|
|||
{ gk104_clkgate_blcg_init_rop_0 },
|
||||
{ gk104_clkgate_blcg_init_rop_crop_0 },
|
||||
{ gk104_clkgate_blcg_init_pxbar_0 },
|
||||
{ gk110_clkgate_slcg_init_main_0 },
|
||||
{ gk110_clkgate_slcg_init_unk_0 },
|
||||
{ gk110_clkgate_slcg_init_sked_0 },
|
||||
{ gk110_clkgate_slcg_init_gpc_ctxctl_0 },
|
||||
{ gk110_clkgate_slcg_init_gpc_unk_0 },
|
||||
{ gk110_clkgate_slcg_init_gpc_esetup_0 },
|
||||
{ gk110_clkgate_slcg_init_gpc_zcull_0 },
|
||||
{ gk110_clkgate_slcg_init_gpc_l1c_0 },
|
||||
{ gk110_clkgate_slcg_init_gpc_unk_1 },
|
||||
{ gk110_clkgate_slcg_init_gpc_mp_0 },
|
||||
{ gk110_clkgate_slcg_init_gpc_ppc_0 },
|
||||
{ gk110_clkgate_slcg_init_pcounter_0 },
|
||||
{}
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue