Lines Matching refs:ainfo
242 static int nv3_iterate(nv3_fifo_info *res_info, nv3_sim_state * state, nv3_arb_info *ainfo)
260 cur = ainfo->cur;
264 if (ainfo->gburst_size == 128) max_gfsize = GFIFO_SIZE_128;
269 if (ainfo->vid_en)
271 if (ainfo->wcvocc > ainfo->vocc) ainfo->wcvocc = ainfo->vocc;
272 if (ainfo->wcvlwm > vlwm) ainfo->wcvlwm = vlwm ;
273 ns = 1000000 * ainfo->vburst_size/(state->memory_width/8)/state->mclk_khz;
274 vfsize = ns * ainfo->vdrain_rate / 1000000;
275 vfsize = ainfo->wcvlwm - ainfo->vburst_size + vfsize;
279 if (ainfo->wcmocc > ainfo->mocc) ainfo->wcmocc = ainfo->mocc;
281 if (ainfo->gr_en)
283 if (ainfo->wcglwm > glwm) ainfo->wcglwm = glwm ;
284 if (ainfo->wcgocc > ainfo->gocc) ainfo->wcgocc = ainfo->gocc;
285 ns = 1000000 * (ainfo->gburst_size/(state->memory_width/8))/state->mclk_khz;
286 gfsize = (ns * (long) ainfo->gdrain_rate)/1000000;
287 gfsize = ainfo->wcglwm - ainfo->gburst_size + gfsize;
290 if (!state->gr_during_vid && ainfo->vid_en)
291 if (ainfo->vid_en && (ainfo->vocc < 0) && !ainfo->vid_only_once)
293 else if (ainfo->mocc < 0)
295 else if (ainfo->gocc< ainfo->by_gfacc)
298 else switch (ainfo->priority)
301 if (ainfo->vid_en && ainfo->vocc<0 && !ainfo->vid_only_once)
303 else if (ainfo->gr_en && ainfo->gocc<0 && !ainfo->gr_only_once)
305 else if (ainfo->mocc<0)
310 if (ainfo->gr_en && ainfo->gocc<0 && !ainfo->gr_only_once)
312 else if (ainfo->vid_en && ainfo->vocc<0 && !ainfo->vid_only_once)
314 else if (ainfo->mocc<0)
319 if (ainfo->mocc<0)
321 else if (ainfo->gr_en && ainfo->gocc<0 && !ainfo->gr_only_once)
323 else if (ainfo->vid_en && ainfo->vocc<0 && !ainfo->vid_only_once)
335 else if (ainfo->first_vacc) misses = vmisses;
337 ainfo->first_vacc = 0;
341 vlwm = ns * ainfo->vdrain_rate/ 1000000;
342 vlwm = ainfo->vocc - vlwm;
344 ns = 1000000*(misses*state->mem_page_miss + ainfo->vburst_size)/(state->memory_width/8)/state->mclk_khz;
345 ainfo->vocc = ainfo->vocc + ainfo->vburst_size - ns*ainfo->vdrain_rate/1000000;
346 ainfo->gocc = ainfo->gocc - ns*ainfo->gdrain_rate/1000000;
347 ainfo->mocc = ainfo->mocc - ns*ainfo->mdrain_rate/1000000;
351 else if (ainfo->first_gacc) misses = gmisses;
353 ainfo->first_gacc = 0;
357 glwm = ns * ainfo->gdrain_rate/1000000;
358 glwm = ainfo->gocc - glwm;
360 ns = 1000000*(misses*state->mem_page_miss + ainfo->gburst_size/(state->memory_width/8))/state->mclk_khz;
361 ainfo->vocc = ainfo->vocc + 0 - ns*ainfo->vdrain_rate/1000000;
362 ainfo->gocc = ainfo->gocc + ainfo->gburst_size - ns*ainfo->gdrain_rate/1000000;
363 ainfo->mocc = ainfo->mocc + 0 - ns*ainfo->mdrain_rate/1000000;
367 else if (ainfo->first_macc) misses = mmisses;
369 ainfo->first_macc = 0;
371 ainfo->vocc = ainfo->vocc + 0 - ns*ainfo->vdrain_rate/1000000;
372 ainfo->gocc = ainfo->gocc + 0 - ns*ainfo->gdrain_rate/1000000;
373 ainfo->mocc = ainfo->mocc + mburst_size - ns*ainfo->mdrain_rate/1000000;
378 ainfo->converged = 0;
381 ns = 1000000*ainfo->gburst_size/(state->memory_width/8)/state->mclk_khz;
382 tmp = ns * ainfo->gdrain_rate/1000000;
383 if (abs(ainfo->gburst_size) + ((abs(ainfo->wcglwm) + 16 ) & ~0x7) - tmp > max_gfsize)
385 ainfo->converged = 0;
388 ns = 1000000*ainfo->vburst_size/(state->memory_width/8)/state->mclk_khz;
389 tmp = ns * ainfo->vdrain_rate/1000000;
390 if (abs(ainfo->vburst_size) + (abs(ainfo->wcvlwm + 32) & ~0xf) - tmp> VFIFO_SIZE)
392 ainfo->converged = 0;
395 if (abs(ainfo->gocc) > max_gfsize)
397 ainfo->converged = 0;
400 if (abs(ainfo->vocc) > VFIFO_SIZE)
402 ainfo->converged = 0;
405 if (abs(ainfo->mocc) > MFIFO_SIZE)
407 ainfo->converged = 0;
412 ainfo->converged = 0;
417 ainfo->converged = 0;
422 ainfo->converged = 0;
427 static char nv3_arb(nv3_fifo_info * res_info, nv3_sim_state * state, nv3_arb_info *ainfo)
441 ainfo->by_gfacc = gns*ainfo->gdrain_rate/1000000;
442 ainfo->wcmocc = 0;
443 ainfo->wcgocc = 0;
444 ainfo->wcvocc = 0;
445 ainfo->wcvlwm = 0;
446 ainfo->wcglwm = 0;
447 ainfo->engine_en = 1;
448 ainfo->converged = 1;
449 if (ainfo->engine_en)
452 ainfo->mocc = state->enable_mp ? 0-ens*ainfo->mdrain_rate/1000000 : 0;
453 ainfo->vocc = ainfo->vid_en ? 0-ens*ainfo->vdrain_rate/1000000 : 0;
454 ainfo->gocc = ainfo->gr_en ? 0-ens*ainfo->gdrain_rate/1000000 : 0;
455 ainfo->cur = ENGINE;
456 ainfo->first_vacc = 1;
457 ainfo->first_gacc = 1;
458 ainfo->first_macc = 1;
459 nv3_iterate(res_info, state,ainfo);
464 ainfo->mocc = state->enable_mp ? 0 : mburst_size - mns*ainfo->mdrain_rate/1000000;
465 ainfo->vocc = ainfo->vid_en ? 0 : 0- mns*ainfo->vdrain_rate/1000000;
466 ainfo->gocc = ainfo->gr_en ? 0: 0- mns*ainfo->gdrain_rate/1000000;
467 ainfo->cur = MPORT;
468 ainfo->first_vacc = 1;
469 ainfo->first_gacc = 1;
470 ainfo->first_macc = 0;
471 nv3_iterate(res_info, state,ainfo);
473 if (ainfo->gr_en)
475 ainfo->first_vacc = 1;
476 ainfo->first_gacc = 0;
477 ainfo->first_macc = 1;
478 gns = 1000000*(gmisses*state->mem_page_miss + ainfo->gburst_size/(state->memory_width/8) + refresh_cycle)/state->mclk_khz;
479 ainfo->gocc = ainfo->gburst_size - gns*ainfo->gdrain_rate/1000000;
480 ainfo->vocc = ainfo->vid_en? 0-gns*ainfo->vdrain_rate/1000000 : 0;
481 ainfo->mocc = state->enable_mp ? 0-gns*ainfo->mdrain_rate/1000000: 0;
482 ainfo->cur = GRAPHICS;
483 nv3_iterate(res_info, state,ainfo);
485 if (ainfo->vid_en)
487 ainfo->first_vacc = 0;
488 ainfo->first_gacc = 1;
489 ainfo->first_macc = 1;
490 vns = 1000000*(vmisses*state->mem_page_miss + ainfo->vburst_size/(state->memory_width/8) + refresh_cycle)/state->mclk_khz;
491 ainfo->vocc = ainfo->vburst_size - vns*ainfo->vdrain_rate/1000000;
492 ainfo->gocc = ainfo->gr_en? (0-vns*ainfo->gdrain_rate/1000000) : 0;
493 ainfo->mocc = state->enable_mp? 0-vns*ainfo->mdrain_rate/1000000 :0 ;
494 ainfo->cur = VIDEO;
495 nv3_iterate(res_info, state, ainfo);
497 if (ainfo->converged)
499 res_info->graphics_lwm = (int)abs(ainfo->wcglwm) + 16;
500 res_info->video_lwm = (int)abs(ainfo->wcvlwm) + 32;
501 res_info->graphics_burst_size = ainfo->gburst_size;
502 res_info->video_burst_size = ainfo->vburst_size;
503 res_info->graphics_hi_priority = (ainfo->priority == GRAPHICS);
504 res_info->media_hi_priority = (ainfo->priority == MPORT);
513 ainfo->converged = 0;
533 static char nv3_get_param(nv3_fifo_info *res_info, nv3_sim_state * state, nv3_arb_info *ainfo)
544 ainfo->priority = p;
545 ainfo->gburst_size = g;
546 ainfo->vburst_size = v;
547 done = nv3_arb(res_info, state,ainfo);
567 nv3_arb_info ainfo;
570 ainfo.gr_en = 1;
571 ainfo.vid_en = state->enable_video;
572 ainfo.vid_only_once = 0;
573 ainfo.gr_only_once = 0;
574 ainfo.gdrain_rate = (int) state->pclk_khz * (state->pix_bpp/8);
575 ainfo.vdrain_rate = (int) state->pclk_khz * 2;
577 ainfo.vdrain_rate = ainfo.vdrain_rate/state->video_scale;
578 ainfo.mdrain_rate = 33000;
582 ainfo.gr_only_once = 1;
583 ainfo.gr_en = 1;
584 ainfo.gdrain_rate = 0;
585 res_vid = nv3_get_param(res_info, state, &ainfo);
586 res_vid = ainfo.converged;
589 ainfo.vid_en = 1;
590 ainfo.vid_only_once = 1;
591 ainfo.gr_en = 1;
592 ainfo.gdrain_rate = (int) state->pclk_khz * (state->pix_bpp/8);
593 ainfo.vdrain_rate = 0;
594 res_gr = nv3_get_param(res_info, state, &ainfo);
595 res_gr = ainfo.converged;
602 if (!ainfo.gr_en) ainfo.gdrain_rate = 0;
603 if (!ainfo.vid_en) ainfo.vdrain_rate = 0;
604 res_gr = nv3_get_param(res_info, state, &ainfo);
605 res_info->valid = ainfo.converged;