|
@@ -838,6 +838,23 @@ nve4_grctx_pack_ppc[] = {
|
|
|
* PGRAPH context implementation
|
|
|
******************************************************************************/
|
|
|
|
|
|
+void
|
|
|
+nve4_grctx_generate_bundle(struct nvc0_grctx *info)
|
|
|
+{
|
|
|
+ const struct nvc0_grctx_oclass *impl = nvc0_grctx_impl(info->priv);
|
|
|
+ const u32 state_limit = min(impl->bundle_min_gpm_fifo_depth,
|
|
|
+ impl->bundle_size / 0x20);
|
|
|
+ const u32 token_limit = impl->bundle_token_limit;
|
|
|
+ const u32 access = NV_MEM_ACCESS_RW | NV_MEM_ACCESS_SYS;
|
|
|
+ const int s = 8;
|
|
|
+ const int b = mmio_vram(info, impl->bundle_size, (1 << s), access);
|
|
|
+ mmio_refn(info, 0x408004, 0x00000000, s, b);
|
|
|
+ mmio_refn(info, 0x408008, 0x80000000 | (impl->bundle_size >> s), 0, b);
|
|
|
+ mmio_refn(info, 0x418808, 0x00000000, s, b);
|
|
|
+ mmio_refn(info, 0x41880c, 0x80000000 | (impl->bundle_size >> s), 0, b);
|
|
|
+ mmio_wr32(info, 0x4064c8, (state_limit << 16) | token_limit);
|
|
|
+}
|
|
|
+
|
|
|
void
|
|
|
nve4_grctx_generate_mods(struct nvc0_graph_priv *priv, struct nvc0_grctx *info)
|
|
|
{
|
|
@@ -845,7 +862,6 @@ nve4_grctx_generate_mods(struct nvc0_graph_priv *priv, struct nvc0_grctx *info)
|
|
|
u32 offset;
|
|
|
int gpc;
|
|
|
|
|
|
- mmio_data(0x003000, 0x0100, NV_MEM_ACCESS_RW | NV_MEM_ACCESS_SYS);
|
|
|
mmio_data(0x008000, 0x0100, NV_MEM_ACCESS_RW | NV_MEM_ACCESS_SYS);
|
|
|
mmio_data(0x060000, 0x1000, NV_MEM_ACCESS_RW);
|
|
|
mmio_list(0x40800c, 0x00000000, 8, 1);
|
|
@@ -853,11 +869,6 @@ nve4_grctx_generate_mods(struct nvc0_graph_priv *priv, struct nvc0_grctx *info)
|
|
|
mmio_list(0x419004, 0x00000000, 8, 1);
|
|
|
mmio_list(0x419008, 0x00000000, 0, 0);
|
|
|
mmio_list(0x4064cc, 0x80000000, 0, 0);
|
|
|
- mmio_list(0x408004, 0x00000000, 8, 0);
|
|
|
- mmio_list(0x408008, 0x80000030, 0, 0);
|
|
|
- mmio_list(0x418808, 0x00000000, 8, 0);
|
|
|
- mmio_list(0x41880c, 0x80000030, 0, 0);
|
|
|
- mmio_list(0x4064c8, 0x01800600, 0, 0);
|
|
|
mmio_list(0x418810, 0x80000000, 12, 2);
|
|
|
mmio_list(0x419848, 0x10000000, 12, 2);
|
|
|
|
|
@@ -967,6 +978,7 @@ nve4_grctx_generate_main(struct nvc0_graph_priv *priv, struct nvc0_grctx *info)
|
|
|
|
|
|
nv_wr32(priv, 0x404154, 0x00000000);
|
|
|
|
|
|
+ oclass->bundle(info);
|
|
|
oclass->mods(priv, info);
|
|
|
oclass->unkn(priv);
|
|
|
|
|
@@ -1018,4 +1030,8 @@ nve4_grctx_oclass = &(struct nvc0_grctx_oclass) {
|
|
|
.ppc = nve4_grctx_pack_ppc,
|
|
|
.icmd = nve4_grctx_pack_icmd,
|
|
|
.mthd = nve4_grctx_pack_mthd,
|
|
|
+ .bundle = nve4_grctx_generate_bundle,
|
|
|
+ .bundle_size = 0x3000,
|
|
|
+ .bundle_min_gpm_fifo_depth = 0x180,
|
|
|
+ .bundle_token_limit = 0x600,
|
|
|
}.base;
|