@@ -138,8 +138,11 @@ static uint32_t convert_and_clamp(
138
138
ret_val = wm_ns * refclk_mhz ;
139
139
ret_val /= 1000 ;
140
140
141
- if (ret_val > clamp_value )
141
+ if (ret_val > clamp_value ) {
142
+ /* clamping WMs is abnormal, unexpected and may lead to underflow*/
143
+ ASSERT (0 );
142
144
ret_val = clamp_value ;
145
+ }
143
146
144
147
return ret_val ;
145
148
}
@@ -159,7 +162,7 @@ static bool hubbub31_program_urgent_watermarks(
159
162
if (safe_to_lower || watermarks -> a .urgent_ns > hubbub2 -> watermarks .a .urgent_ns ) {
160
163
hubbub2 -> watermarks .a .urgent_ns = watermarks -> a .urgent_ns ;
161
164
prog_wm_value = convert_and_clamp (watermarks -> a .urgent_ns ,
162
- refclk_mhz , 0x1fffff );
165
+ refclk_mhz , 0x3fff );
163
166
REG_SET (DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_A , 0 ,
164
167
DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_A , prog_wm_value );
165
168
@@ -193,7 +196,7 @@ static bool hubbub31_program_urgent_watermarks(
193
196
if (safe_to_lower || watermarks -> a .urgent_latency_ns > hubbub2 -> watermarks .a .urgent_latency_ns ) {
194
197
hubbub2 -> watermarks .a .urgent_latency_ns = watermarks -> a .urgent_latency_ns ;
195
198
prog_wm_value = convert_and_clamp (watermarks -> a .urgent_latency_ns ,
196
- refclk_mhz , 0x1fffff );
199
+ refclk_mhz , 0x3fff );
197
200
REG_SET (DCHUBBUB_ARB_REFCYC_PER_TRIP_TO_MEMORY_A , 0 ,
198
201
DCHUBBUB_ARB_REFCYC_PER_TRIP_TO_MEMORY_A , prog_wm_value );
199
202
} else if (watermarks -> a .urgent_latency_ns < hubbub2 -> watermarks .a .urgent_latency_ns )
@@ -203,7 +206,7 @@ static bool hubbub31_program_urgent_watermarks(
203
206
if (safe_to_lower || watermarks -> b .urgent_ns > hubbub2 -> watermarks .b .urgent_ns ) {
204
207
hubbub2 -> watermarks .b .urgent_ns = watermarks -> b .urgent_ns ;
205
208
prog_wm_value = convert_and_clamp (watermarks -> b .urgent_ns ,
206
- refclk_mhz , 0x1fffff );
209
+ refclk_mhz , 0x3fff );
207
210
REG_SET (DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_B , 0 ,
208
211
DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_B , prog_wm_value );
209
212
@@ -237,7 +240,7 @@ static bool hubbub31_program_urgent_watermarks(
237
240
if (safe_to_lower || watermarks -> b .urgent_latency_ns > hubbub2 -> watermarks .b .urgent_latency_ns ) {
238
241
hubbub2 -> watermarks .b .urgent_latency_ns = watermarks -> b .urgent_latency_ns ;
239
242
prog_wm_value = convert_and_clamp (watermarks -> b .urgent_latency_ns ,
240
- refclk_mhz , 0x1fffff );
243
+ refclk_mhz , 0x3fff );
241
244
REG_SET (DCHUBBUB_ARB_REFCYC_PER_TRIP_TO_MEMORY_B , 0 ,
242
245
DCHUBBUB_ARB_REFCYC_PER_TRIP_TO_MEMORY_B , prog_wm_value );
243
246
} else if (watermarks -> b .urgent_latency_ns < hubbub2 -> watermarks .b .urgent_latency_ns )
@@ -247,7 +250,7 @@ static bool hubbub31_program_urgent_watermarks(
247
250
if (safe_to_lower || watermarks -> c .urgent_ns > hubbub2 -> watermarks .c .urgent_ns ) {
248
251
hubbub2 -> watermarks .c .urgent_ns = watermarks -> c .urgent_ns ;
249
252
prog_wm_value = convert_and_clamp (watermarks -> c .urgent_ns ,
250
- refclk_mhz , 0x1fffff );
253
+ refclk_mhz , 0x3fff );
251
254
REG_SET (DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_C , 0 ,
252
255
DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_C , prog_wm_value );
253
256
@@ -281,7 +284,7 @@ static bool hubbub31_program_urgent_watermarks(
281
284
if (safe_to_lower || watermarks -> c .urgent_latency_ns > hubbub2 -> watermarks .c .urgent_latency_ns ) {
282
285
hubbub2 -> watermarks .c .urgent_latency_ns = watermarks -> c .urgent_latency_ns ;
283
286
prog_wm_value = convert_and_clamp (watermarks -> c .urgent_latency_ns ,
284
- refclk_mhz , 0x1fffff );
287
+ refclk_mhz , 0x3fff );
285
288
REG_SET (DCHUBBUB_ARB_REFCYC_PER_TRIP_TO_MEMORY_C , 0 ,
286
289
DCHUBBUB_ARB_REFCYC_PER_TRIP_TO_MEMORY_C , prog_wm_value );
287
290
} else if (watermarks -> c .urgent_latency_ns < hubbub2 -> watermarks .c .urgent_latency_ns )
@@ -291,7 +294,7 @@ static bool hubbub31_program_urgent_watermarks(
291
294
if (safe_to_lower || watermarks -> d .urgent_ns > hubbub2 -> watermarks .d .urgent_ns ) {
292
295
hubbub2 -> watermarks .d .urgent_ns = watermarks -> d .urgent_ns ;
293
296
prog_wm_value = convert_and_clamp (watermarks -> d .urgent_ns ,
294
- refclk_mhz , 0x1fffff );
297
+ refclk_mhz , 0x3fff );
295
298
REG_SET (DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_D , 0 ,
296
299
DCHUBBUB_ARB_DATA_URGENCY_WATERMARK_D , prog_wm_value );
297
300
@@ -325,7 +328,7 @@ static bool hubbub31_program_urgent_watermarks(
325
328
if (safe_to_lower || watermarks -> d .urgent_latency_ns > hubbub2 -> watermarks .d .urgent_latency_ns ) {
326
329
hubbub2 -> watermarks .d .urgent_latency_ns = watermarks -> d .urgent_latency_ns ;
327
330
prog_wm_value = convert_and_clamp (watermarks -> d .urgent_latency_ns ,
328
- refclk_mhz , 0x1fffff );
331
+ refclk_mhz , 0x3fff );
329
332
REG_SET (DCHUBBUB_ARB_REFCYC_PER_TRIP_TO_MEMORY_D , 0 ,
330
333
DCHUBBUB_ARB_REFCYC_PER_TRIP_TO_MEMORY_D , prog_wm_value );
331
334
} else if (watermarks -> d .urgent_latency_ns < hubbub2 -> watermarks .d .urgent_latency_ns )
@@ -351,7 +354,7 @@ static bool hubbub31_program_stutter_watermarks(
351
354
watermarks -> a .cstate_pstate .cstate_enter_plus_exit_ns ;
352
355
prog_wm_value = convert_and_clamp (
353
356
watermarks -> a .cstate_pstate .cstate_enter_plus_exit_ns ,
354
- refclk_mhz , 0x1fffff );
357
+ refclk_mhz , 0xffff );
355
358
REG_SET (DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_A , 0 ,
356
359
DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_A , prog_wm_value );
357
360
DC_LOG_BANDWIDTH_CALCS ("SR_ENTER_EXIT_WATERMARK_A calculated =%d\n"
@@ -367,7 +370,7 @@ static bool hubbub31_program_stutter_watermarks(
367
370
watermarks -> a .cstate_pstate .cstate_exit_ns ;
368
371
prog_wm_value = convert_and_clamp (
369
372
watermarks -> a .cstate_pstate .cstate_exit_ns ,
370
- refclk_mhz , 0x1fffff );
373
+ refclk_mhz , 0xffff );
371
374
REG_SET (DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_A , 0 ,
372
375
DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_A , prog_wm_value );
373
376
DC_LOG_BANDWIDTH_CALCS ("SR_EXIT_WATERMARK_A calculated =%d\n"
@@ -383,7 +386,7 @@ static bool hubbub31_program_stutter_watermarks(
383
386
watermarks -> a .cstate_pstate .cstate_enter_plus_exit_z8_ns ;
384
387
prog_wm_value = convert_and_clamp (
385
388
watermarks -> a .cstate_pstate .cstate_enter_plus_exit_z8_ns ,
386
- refclk_mhz , 0x1fffff );
389
+ refclk_mhz , 0xffff );
387
390
REG_SET (DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_Z8_A , 0 ,
388
391
DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_Z8_A , prog_wm_value );
389
392
DC_LOG_BANDWIDTH_CALCS ("SR_ENTER_WATERMARK_Z8_A calculated =%d\n"
@@ -399,7 +402,7 @@ static bool hubbub31_program_stutter_watermarks(
399
402
watermarks -> a .cstate_pstate .cstate_exit_z8_ns ;
400
403
prog_wm_value = convert_and_clamp (
401
404
watermarks -> a .cstate_pstate .cstate_exit_z8_ns ,
402
- refclk_mhz , 0x1fffff );
405
+ refclk_mhz , 0xffff );
403
406
REG_SET (DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_Z8_A , 0 ,
404
407
DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_Z8_A , prog_wm_value );
405
408
DC_LOG_BANDWIDTH_CALCS ("SR_EXIT_WATERMARK_Z8_A calculated =%d\n"
@@ -416,7 +419,7 @@ static bool hubbub31_program_stutter_watermarks(
416
419
watermarks -> b .cstate_pstate .cstate_enter_plus_exit_ns ;
417
420
prog_wm_value = convert_and_clamp (
418
421
watermarks -> b .cstate_pstate .cstate_enter_plus_exit_ns ,
419
- refclk_mhz , 0x1fffff );
422
+ refclk_mhz , 0xffff );
420
423
REG_SET (DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_B , 0 ,
421
424
DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_B , prog_wm_value );
422
425
DC_LOG_BANDWIDTH_CALCS ("SR_ENTER_EXIT_WATERMARK_B calculated =%d\n"
@@ -432,7 +435,7 @@ static bool hubbub31_program_stutter_watermarks(
432
435
watermarks -> b .cstate_pstate .cstate_exit_ns ;
433
436
prog_wm_value = convert_and_clamp (
434
437
watermarks -> b .cstate_pstate .cstate_exit_ns ,
435
- refclk_mhz , 0x1fffff );
438
+ refclk_mhz , 0xffff );
436
439
REG_SET (DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_B , 0 ,
437
440
DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_B , prog_wm_value );
438
441
DC_LOG_BANDWIDTH_CALCS ("SR_EXIT_WATERMARK_B calculated =%d\n"
@@ -448,7 +451,7 @@ static bool hubbub31_program_stutter_watermarks(
448
451
watermarks -> b .cstate_pstate .cstate_enter_plus_exit_z8_ns ;
449
452
prog_wm_value = convert_and_clamp (
450
453
watermarks -> b .cstate_pstate .cstate_enter_plus_exit_z8_ns ,
451
- refclk_mhz , 0x1fffff );
454
+ refclk_mhz , 0xffff );
452
455
REG_SET (DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_Z8_B , 0 ,
453
456
DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_Z8_B , prog_wm_value );
454
457
DC_LOG_BANDWIDTH_CALCS ("SR_ENTER_WATERMARK_Z8_B calculated =%d\n"
@@ -464,7 +467,7 @@ static bool hubbub31_program_stutter_watermarks(
464
467
watermarks -> b .cstate_pstate .cstate_exit_z8_ns ;
465
468
prog_wm_value = convert_and_clamp (
466
469
watermarks -> b .cstate_pstate .cstate_exit_z8_ns ,
467
- refclk_mhz , 0x1fffff );
470
+ refclk_mhz , 0xffff );
468
471
REG_SET (DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_Z8_B , 0 ,
469
472
DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_Z8_B , prog_wm_value );
470
473
DC_LOG_BANDWIDTH_CALCS ("SR_EXIT_WATERMARK_Z8_B calculated =%d\n"
@@ -481,7 +484,7 @@ static bool hubbub31_program_stutter_watermarks(
481
484
watermarks -> c .cstate_pstate .cstate_enter_plus_exit_ns ;
482
485
prog_wm_value = convert_and_clamp (
483
486
watermarks -> c .cstate_pstate .cstate_enter_plus_exit_ns ,
484
- refclk_mhz , 0x1fffff );
487
+ refclk_mhz , 0xffff );
485
488
REG_SET (DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_C , 0 ,
486
489
DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_C , prog_wm_value );
487
490
DC_LOG_BANDWIDTH_CALCS ("SR_ENTER_EXIT_WATERMARK_C calculated =%d\n"
@@ -497,7 +500,7 @@ static bool hubbub31_program_stutter_watermarks(
497
500
watermarks -> c .cstate_pstate .cstate_exit_ns ;
498
501
prog_wm_value = convert_and_clamp (
499
502
watermarks -> c .cstate_pstate .cstate_exit_ns ,
500
- refclk_mhz , 0x1fffff );
503
+ refclk_mhz , 0xffff );
501
504
REG_SET (DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_C , 0 ,
502
505
DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_C , prog_wm_value );
503
506
DC_LOG_BANDWIDTH_CALCS ("SR_EXIT_WATERMARK_C calculated =%d\n"
@@ -513,7 +516,7 @@ static bool hubbub31_program_stutter_watermarks(
513
516
watermarks -> c .cstate_pstate .cstate_enter_plus_exit_z8_ns ;
514
517
prog_wm_value = convert_and_clamp (
515
518
watermarks -> c .cstate_pstate .cstate_enter_plus_exit_z8_ns ,
516
- refclk_mhz , 0x1fffff );
519
+ refclk_mhz , 0xffff );
517
520
REG_SET (DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_Z8_C , 0 ,
518
521
DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_Z8_C , prog_wm_value );
519
522
DC_LOG_BANDWIDTH_CALCS ("SR_ENTER_WATERMARK_Z8_C calculated =%d\n"
@@ -529,7 +532,7 @@ static bool hubbub31_program_stutter_watermarks(
529
532
watermarks -> c .cstate_pstate .cstate_exit_z8_ns ;
530
533
prog_wm_value = convert_and_clamp (
531
534
watermarks -> c .cstate_pstate .cstate_exit_z8_ns ,
532
- refclk_mhz , 0x1fffff );
535
+ refclk_mhz , 0xffff );
533
536
REG_SET (DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_Z8_C , 0 ,
534
537
DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_Z8_C , prog_wm_value );
535
538
DC_LOG_BANDWIDTH_CALCS ("SR_EXIT_WATERMARK_Z8_C calculated =%d\n"
@@ -546,7 +549,7 @@ static bool hubbub31_program_stutter_watermarks(
546
549
watermarks -> d .cstate_pstate .cstate_enter_plus_exit_ns ;
547
550
prog_wm_value = convert_and_clamp (
548
551
watermarks -> d .cstate_pstate .cstate_enter_plus_exit_ns ,
549
- refclk_mhz , 0x1fffff );
552
+ refclk_mhz , 0xffff );
550
553
REG_SET (DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_D , 0 ,
551
554
DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_D , prog_wm_value );
552
555
DC_LOG_BANDWIDTH_CALCS ("SR_ENTER_EXIT_WATERMARK_D calculated =%d\n"
@@ -562,7 +565,7 @@ static bool hubbub31_program_stutter_watermarks(
562
565
watermarks -> d .cstate_pstate .cstate_exit_ns ;
563
566
prog_wm_value = convert_and_clamp (
564
567
watermarks -> d .cstate_pstate .cstate_exit_ns ,
565
- refclk_mhz , 0x1fffff );
568
+ refclk_mhz , 0xffff );
566
569
REG_SET (DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_D , 0 ,
567
570
DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_D , prog_wm_value );
568
571
DC_LOG_BANDWIDTH_CALCS ("SR_EXIT_WATERMARK_D calculated =%d\n"
@@ -578,7 +581,7 @@ static bool hubbub31_program_stutter_watermarks(
578
581
watermarks -> d .cstate_pstate .cstate_enter_plus_exit_z8_ns ;
579
582
prog_wm_value = convert_and_clamp (
580
583
watermarks -> d .cstate_pstate .cstate_enter_plus_exit_z8_ns ,
581
- refclk_mhz , 0x1fffff );
584
+ refclk_mhz , 0xffff );
582
585
REG_SET (DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_Z8_D , 0 ,
583
586
DCHUBBUB_ARB_ALLOW_SR_ENTER_WATERMARK_Z8_D , prog_wm_value );
584
587
DC_LOG_BANDWIDTH_CALCS ("SR_ENTER_WATERMARK_Z8_D calculated =%d\n"
@@ -594,7 +597,7 @@ static bool hubbub31_program_stutter_watermarks(
594
597
watermarks -> d .cstate_pstate .cstate_exit_z8_ns ;
595
598
prog_wm_value = convert_and_clamp (
596
599
watermarks -> d .cstate_pstate .cstate_exit_z8_ns ,
597
- refclk_mhz , 0x1fffff );
600
+ refclk_mhz , 0xffff );
598
601
REG_SET (DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_Z8_D , 0 ,
599
602
DCHUBBUB_ARB_ALLOW_SR_EXIT_WATERMARK_Z8_D , prog_wm_value );
600
603
DC_LOG_BANDWIDTH_CALCS ("SR_EXIT_WATERMARK_Z8_D calculated =%d\n"
@@ -625,7 +628,7 @@ static bool hubbub31_program_pstate_watermarks(
625
628
watermarks -> a .cstate_pstate .pstate_change_ns ;
626
629
prog_wm_value = convert_and_clamp (
627
630
watermarks -> a .cstate_pstate .pstate_change_ns ,
628
- refclk_mhz , 0x1fffff );
631
+ refclk_mhz , 0xffff );
629
632
REG_SET (DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_A , 0 ,
630
633
DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_A , prog_wm_value );
631
634
DC_LOG_BANDWIDTH_CALCS ("DRAM_CLK_CHANGE_WATERMARK_A calculated =%d\n"
@@ -642,7 +645,7 @@ static bool hubbub31_program_pstate_watermarks(
642
645
watermarks -> b .cstate_pstate .pstate_change_ns ;
643
646
prog_wm_value = convert_and_clamp (
644
647
watermarks -> b .cstate_pstate .pstate_change_ns ,
645
- refclk_mhz , 0x1fffff );
648
+ refclk_mhz , 0xffff );
646
649
REG_SET (DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_B , 0 ,
647
650
DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_B , prog_wm_value );
648
651
DC_LOG_BANDWIDTH_CALCS ("DRAM_CLK_CHANGE_WATERMARK_B calculated =%d\n"
@@ -659,7 +662,7 @@ static bool hubbub31_program_pstate_watermarks(
659
662
watermarks -> c .cstate_pstate .pstate_change_ns ;
660
663
prog_wm_value = convert_and_clamp (
661
664
watermarks -> c .cstate_pstate .pstate_change_ns ,
662
- refclk_mhz , 0x1fffff );
665
+ refclk_mhz , 0xffff );
663
666
REG_SET (DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_C , 0 ,
664
667
DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_C , prog_wm_value );
665
668
DC_LOG_BANDWIDTH_CALCS ("DRAM_CLK_CHANGE_WATERMARK_C calculated =%d\n"
@@ -676,7 +679,7 @@ static bool hubbub31_program_pstate_watermarks(
676
679
watermarks -> d .cstate_pstate .pstate_change_ns ;
677
680
prog_wm_value = convert_and_clamp (
678
681
watermarks -> d .cstate_pstate .pstate_change_ns ,
679
- refclk_mhz , 0x1fffff );
682
+ refclk_mhz , 0xffff );
680
683
REG_SET (DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_D , 0 ,
681
684
DCHUBBUB_ARB_ALLOW_DRAM_CLK_CHANGE_WATERMARK_D , prog_wm_value );
682
685
DC_LOG_BANDWIDTH_CALCS ("DRAM_CLK_CHANGE_WATERMARK_D calculated =%d\n"
0 commit comments