@@ -3584,6 +3584,15 @@ void L1_HW_IP_Prefetch_Update(TGrid *grid, DATA_TYPE data[])
35843584 TechUpdate(grid, bix, pos, 3, ENABLED(bix));
35853585}
35863586
3587+ void L1_Scrubbing_Update(TGrid *grid, DATA_TYPE data[])
3588+ {
3589+ const unsigned int bix = RO(Shm)->Proc.Technology.L1_Scrubbing == 1;
3590+ const signed int pos = grid->cell.length - 5;
3591+ UNUSED(data);
3592+
3593+ TechUpdate(grid, bix, pos, 3, ENABLED(bix));
3594+ }
3595+
35873596void L2_HW_Prefetch_Update(TGrid *grid, DATA_TYPE data[])
35883597{
35893598 const unsigned int bix = RO(Shm)->Proc.Technology.L2_HW_Prefetch == 1;
@@ -3739,6 +3748,16 @@ REASON_CODE SysInfoTech(Window *win,
37393748 BOXKEY_L1_HW_IP_PREFETCH,
37403749 L1_HW_IP_Prefetch_Update
37413750 },
3751+ {
3752+ (unsigned int[]) { CRC_INTEL, 0 },
3753+ RO(Shm)->Proc.Technology.L1_Scrubbing,
3754+ 3, "%s%.*sL1 Scrubbing <%3s>",
3755+ RSC(TECH_L1_SCRUBBING).CODE(), NULL,
3756+ width - (OutFunc ? 24 : 26) - RSZ(TECH_L1_SCRUBBING),
3757+ NULL,
3758+ BOXKEY_L1_SCRUBBING,
3759+ L1_Scrubbing_Update
3760+ },
37423761 {
37433762 (unsigned int[]) { CRC_INTEL, CRC_AMD, CRC_HYGON, 0 },
37443763 RO(Shm)->Proc.Technology.L2_HW_Prefetch,
@@ -13315,6 +13334,54 @@ int Shortcut(SCANKEY *scan)
1331513334 }
1331613335 break;
1331713336
13337+ case BOXKEY_L1_SCRUBBING:
13338+ {
13339+ Window *win = SearchWinListById(scan->key, &winList);
13340+ if (win == NULL)
13341+ {
13342+ const Coordinate origin = {
13343+ .col = (Draw.Size.width - RSZ(BOX_BLANK_DESC)) / 2,
13344+ .row = TOP_HEADER_ROW + 4
13345+ }, select = {
13346+ .col = 0,
13347+ .row = RO(Shm)->Proc.Technology.L1_Scrubbing ? 2 : 1
13348+ };
13349+ AppendWindow(
13350+ CreateBox(scan->key, origin, select,
13351+ (char*) RSC(BOX_L1_SCRUBBING_TITLE).CODE(),
13352+ RSC(BOX_BLANK_DESC).CODE(), blankAttr, SCANKEY_NULL,
13353+ stateStr[1][RO(Shm)->Proc.Technology.L1_Scrubbing],
13354+ stateAttr[RO(Shm)->Proc.Technology.L1_Scrubbing],
13355+ BOXKEY_L1_SCRUBBING_ON,
13356+ stateStr[0][!RO(Shm)->Proc.Technology.L1_Scrubbing],
13357+ stateAttr[!RO(Shm)->Proc.Technology.L1_Scrubbing],
13358+ BOXKEY_L1_SCRUBBING_OFF,
13359+ RSC(BOX_BLANK_DESC).CODE(), blankAttr, SCANKEY_NULL),
13360+ &winList);
13361+ } else {
13362+ SetHead(&winList, win);
13363+ }
13364+ }
13365+ break;
13366+
13367+ case BOXKEY_L1_SCRUBBING_OFF:
13368+ if (!RING_FULL(RW(Shm)->Ring[0])) {
13369+ RING_WRITE( RW(Shm)->Ring[0],
13370+ COREFREQ_IOCTL_TECHNOLOGY,
13371+ COREFREQ_TOGGLE_OFF,
13372+ TECHNOLOGY_L1_SCRUBBING );
13373+ }
13374+ break;
13375+
13376+ case BOXKEY_L1_SCRUBBING_ON:
13377+ if (!RING_FULL(RW(Shm)->Ring[0])) {
13378+ RING_WRITE( RW(Shm)->Ring[0],
13379+ COREFREQ_IOCTL_TECHNOLOGY,
13380+ COREFREQ_TOGGLE_ON,
13381+ TECHNOLOGY_L1_SCRUBBING );
13382+ }
13383+ break;
13384+
1331813385 case BOXKEY_L2_HW_PREFETCH:
1331913386 {
1332013387 Window *win = SearchWinListById(scan->key, &winList);
0 commit comments