Home | History | Annotate | Download | only in src

Lines Matching refs:ainfo

151 static int nv3_iterate(nv3_fifo_info *res_info, nv3_sim_state * state, nv3_arb_info *ainfo)
168 cur = ainfo->cur;
172 if (ainfo->gburst_size == 128) max_gfsize = GFIFO_SIZE_128;
177 if (ainfo->vid_en)
179 if (ainfo->wcvocc > ainfo->vocc) ainfo->wcvocc = ainfo->vocc;
180 if (ainfo->wcvlwm > vlwm) ainfo->wcvlwm = vlwm ;
181 ns = 1000000 * ainfo->vburst_size/(state->memory_width/8)/state->mclk_khz;
182 vfsize = ns * ainfo->vdrain_rate / 1000000;
183 vfsize = ainfo->wcvlwm - ainfo->vburst_size + vfsize;
187 if (ainfo->wcmocc > ainfo->mocc) ainfo->wcmocc = ainfo->mocc;
189 if (ainfo->gr_en)
191 if (ainfo->wcglwm > glwm) ainfo->wcglwm = glwm ;
192 if (ainfo->wcgocc > ainfo->gocc) ainfo->wcgocc = ainfo->gocc;
193 ns = 1000000 * (ainfo->gburst_size/(state->memory_width/8))/state->mclk_khz;
194 gfsize = (ns * (long) ainfo->gdrain_rate)/1000000;
195 gfsize = ainfo->wcglwm - ainfo->gburst_size + gfsize;
198 if (!state->gr_during_vid && ainfo->vid_en)
199 if (ainfo->vid_en && (ainfo->vocc < 0) && !ainfo->vid_only_once)
201 else if (ainfo->mocc < 0)
203 else if (ainfo->gocc< ainfo->by_gfacc)
206 else switch (ainfo->priority)
209 if (ainfo->vid_en && ainfo->vocc<0 && !ainfo->vid_only_once)
211 else if (ainfo->gr_en && ainfo->gocc<0 && !ainfo->gr_only_once)
213 else if (ainfo->mocc<0)
218 if (ainfo->gr_en && ainfo->gocc<0 && !ainfo->gr_only_once)
220 else if (ainfo->vid_en && ainfo->vocc<0 && !ainfo->vid_only_once)
222 else if (ainfo->mocc<0)
227 if (ainfo->mocc<0)
229 else if (ainfo->gr_en && ainfo->gocc<0 && !ainfo->gr_only_once)
231 else if (ainfo->vid_en && ainfo->vocc<0 && !ainfo->vid_only_once)
243 else if (ainfo->first_vacc) misses = vmisses;
245 ainfo->first_vacc = 0;
249 vlwm = ns * ainfo->vdrain_rate/ 1000000;
250 vlwm = ainfo->vocc - vlwm;
252 ns = 1000000*(misses*state->mem_page_miss + ainfo->vburst_size)/(state->memory_width/8)/state->mclk_khz;
253 ainfo->vocc = ainfo->vocc + ainfo->vburst_size - ns*ainfo->vdrain_rate/1000000;
254 ainfo->gocc = ainfo->gocc - ns*ainfo->gdrain_rate/1000000;
255 ainfo->mocc = ainfo->mocc - ns*ainfo->mdrain_rate/1000000;
259 else if (ainfo->first_gacc) misses = gmisses;
261 ainfo->first_gacc = 0;
265 glwm = ns * ainfo->gdrain_rate/1000000;
266 glwm = ainfo->gocc - glwm;
268 ns = 1000000*(misses*state->mem_page_miss + ainfo->gburst_size/(state->memory_width/8))/state->mclk_khz;
269 ainfo->vocc = ainfo->vocc + 0 - ns*ainfo->vdrain_rate/1000000;
270 ainfo->gocc = ainfo->gocc + ainfo->gburst_size - ns*ainfo->gdrain_rate/1000000;
271 ainfo->mocc = ainfo->mocc + 0 - ns*ainfo->mdrain_rate/1000000;
275 else if (ainfo->first_macc) misses = mmisses;
277 ainfo->first_macc = 0;
279 ainfo->vocc = ainfo->vocc + 0 - ns*ainfo->vdrain_rate/1000000;
280 ainfo->gocc = ainfo->gocc + 0 - ns*ainfo->gdrain_rate/1000000;
281 ainfo->mocc = ainfo->mocc + mburst_size - ns*ainfo->mdrain_rate/1000000;
286 ainfo->converged = 0;
289 ns = 1000000*ainfo->gburst_size/(state->memory_width/8)/state->mclk_khz;
290 tmp = ns * ainfo->gdrain_rate/1000000;
291 if (ABS(ainfo->gburst_size) + ((ABS(ainfo->wcglwm) + 16 ) & ~0x7) - tmp > max_gfsize)
293 ainfo->converged = 0;
296 ns = 1000000*ainfo->vburst_size/(state->memory_width/8)/state->mclk_khz;
297 tmp = ns * ainfo->vdrain_rate/1000000;
298 if (ABS(ainfo->vburst_size) + (ABS(ainfo->wcvlwm + 32) & ~0xf) - tmp> VFIFO_SIZE)
300 ainfo->converged = 0;
303 if (ABS(ainfo->gocc) > max_gfsize)
305 ainfo->converged = 0;
308 if (ABS(ainfo->vocc) > VFIFO_SIZE)
310 ainfo->converged = 0;
313 if (ABS(ainfo->mocc) > MFIFO_SIZE)
315 ainfo->converged = 0;
320 ainfo->converged = 0;
325 ainfo->converged = 0;
330 ainfo->converged = 0;
335 static char nv3_arb(nv3_fifo_info * res_info, nv3_sim_state * state, nv3_arb_info *ainfo)
350 ainfo->by_gfacc = gns*ainfo->gdrain_rate/1000000;
351 ainfo->wcmocc = 0;
352 ainfo->wcgocc = 0;
353 ainfo->wcvocc = 0;
354 ainfo->wcvlwm = 0;
355 ainfo->wcglwm = 0;
356 ainfo->engine_en = 1;
357 ainfo->converged = 1;
358 if (ainfo->engine_en)
361 ainfo->mocc = state->enable_mp ? 0-ens*ainfo->mdrain_rate/1000000 : 0;
362 ainfo->vocc = ainfo->vid_en ? 0-ens*ainfo->vdrain_rate/1000000 : 0;
363 ainfo->gocc = ainfo->gr_en ? 0-ens*ainfo->gdrain_rate/1000000 : 0;
364 ainfo->cur = ENGINE;
365 ainfo->first_vacc = 1;
366 ainfo->first_gacc = 1;
367 ainfo->first_macc = 1;
368 nv3_iterate(res_info, state,ainfo);
373 ainfo->mocc = state->enable_mp ? 0 : mburst_size - mns*ainfo->mdrain_rate/1000000;
374 ainfo->vocc = ainfo->vid_en ? 0 : 0- mns*ainfo->vdrain_rate/1000000;
375 ainfo->gocc = ainfo->gr_en ? 0: 0- mns*ainfo->gdrain_rate/1000000;
376 ainfo->cur = MPORT;
377 ainfo->first_vacc = 1;
378 ainfo->first_gacc = 1;
379 ainfo->first_macc = 0;
380 nv3_iterate(res_info, state,ainfo);
382 if (ainfo->gr_en)
384 ainfo->first_vacc = 1;
385 ainfo->first_gacc = 0;
386 ainfo->first_macc = 1;
387 gns = 1000000*(gmisses*state->mem_page_miss + ainfo->gburst_size/(state->memory_width/8) + refresh_cycle)/state->mclk_khz;
388 ainfo->gocc = ainfo->gburst_size - gns*ainfo->gdrain_rate/1000000;
389 ainfo->vocc = ainfo->vid_en? 0-gns*ainfo->vdrain_rate/1000000 : 0;
390 ainfo->mocc = state->enable_mp ? 0-gns*ainfo->mdrain_rate/1000000: 0;
391 ainfo->cur = GRAPHICS;
392 nv3_iterate(res_info, state,ainfo);
394 if (ainfo->vid_en)
396 ainfo->first_vacc = 0;
397 ainfo->first_gacc = 1;
398 ainfo->first_macc = 1;
399 vns = 1000000*(vmisses*state->mem_page_miss + ainfo->vburst_size/(state->memory_width/8) + refresh_cycle)/state->mclk_khz;
400 ainfo->vocc = ainfo->vburst_size - vns*ainfo->vdrain_rate/1000000;
401 ainfo->gocc = ainfo->gr_en? (0-vns*ainfo->gdrain_rate/1000000) : 0;
402 ainfo->mocc = state->enable_mp? 0-vns*ainfo->mdrain_rate/1000000 :0 ;
403 ainfo->cur = VIDEO;
404 nv3_iterate(res_info, state, ainfo);
406 if (ainfo->converged)
408 res_info->graphics_lwm = (int)ABS(ainfo->wcglwm) + 16;
409 res_info->video_lwm = (int)ABS(ainfo->wcvlwm) + 32;
410 res_info->graphics_burst_size = ainfo->gburst_size;
411 res_info->video_burst_size = ainfo->vburst_size;
412 res_info->graphics_hi_priority = (ainfo->priority == GRAPHICS);
413 res_info->media_hi_priority = (ainfo->priority == MPORT);
422 ainfo->converged = 0;
442 static char nv3_get_param(nv3_fifo_info *res_info, nv3_sim_state * state, nv3_arb_info *ainfo)
453 ainfo->priority = p;
454 ainfo->gburst_size = g;
455 ainfo->vburst_size = v;
456 done = nv3_arb(res_info, state,ainfo);
476 nv3_arb_info ainfo;
479 ainfo.gr_en = 1;
480 ainfo.vid_en = state->enable_video;
481 ainfo.vid_only_once = 0;
482 ainfo.gr_only_once = 0;
483 ainfo.gdrain_rate = (int) state->pclk_khz * (state->pix_bpp/8);
484 ainfo.vdrain_rate = (int) state->pclk_khz * 2;
486 ainfo.vdrain_rate = ainfo.vdrain_rate/state->video_scale;
487 ainfo.mdrain_rate = 33000;
491 ainfo.gr_only_once = 1;
492 ainfo.gr_en = 1;
493 ainfo.gdrain_rate = 0;
494 res_vid = nv3_get_param(res_info, state, &ainfo);
495 res_vid = ainfo.converged;
498 ainfo.vid_en = 1;
499 ainfo.vid_only_once = 1;
500 ainfo.gr_en = 1;
501 ainfo.gdrain_rate = (int) state->pclk_khz * (state->pix_bpp/8);
502 ainfo.vdrain_rate = 0;
503 res_gr = nv3_get_param(res_info, state, &ainfo);
504 res_gr = ainfo.converged;
511 if (!ainfo.gr_en) ainfo.gdrain_rate = 0;
512 if (!ainfo.vid_en) ainfo.vdrain_rate = 0;
513 res_gr = nv3_get_param(res_info, state, &ainfo);
514 res_info->valid = ainfo.converged;