无比疯狂的三元运算符,这代码绝对不是给人看的,不知道厂家自己能不能看的懂。
static gceSTATUS
_ResetFun(
IN gckHARDWARE Hardware,
IN gckOS Os,
IN gceCORE Core
)
{
gctUINT32 control, idle;
gceSTATUS status;
gctUINT32 count = 0;
gctUINT32 mmuEnabled;
while (count < 2)
{
/* Disable clock gating. */
gcmkONERROR(gckOS_WriteRegisterEx(Os,
Core,
Hardware->powerBaseAddress +
0x00104,
0x00000000));
control = ((((gctUINT32) (0x015B0880)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
17:17) - (0 ?
17:17) + 1) == 32) ?
~0U : (~(~0U << ((1 ?
17:17) - (0 ?
17:17) + 1))))))) << (0 ?
17:17))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ?
17:17) - (0 ?
17:17) + 1) == 32) ?
~0U : (~(~0U << ((1 ? 17:17) - (0 ? 17:17) + 1))))))) << (0 ? 17:17)));
/* Disable pulse-eater. */
gcmkONERROR(gckOS_WriteRegisterEx(Os,
Core,
0x0010C,
control));
gcmkONERROR(gckOS_WriteRegisterEx(Os,
Core,
0x0010C,
((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
0:0) - (0 ?
0:0) + 1) == 32) ?
~0U : (~(~0U << ((1 ?
0:0) - (0 ?
0:0) + 1))))))) << (0 ?
0:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ?
0:0) - (0 ?
0:0) + 1) == 32) ?
~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))));
gcmkONERROR(gckOS_WriteRegisterEx(Os,
Core,
0x0010C,
control));
gcmkONERROR(gckOS_WriteRegisterEx(Os,
Core,
0x00000,
((((gctUINT32) (0x00010900)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
9:9) - (0 ?
9:9) + 1) == 32) ?
~0U : (~(~0U << ((1 ?
9:9) - (0 ?
9:9) + 1))))))) << (0 ?
9:9))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ?
9:9) - (0 ?
9:9) + 1) == 32) ?
~0U : (~(~0U << ((1 ? 9:9) - (0 ? 9:9) + 1))))))) << (0 ? 9:9)))));
gcmkONERROR(gckOS_WriteRegisterEx(Os,
Core,
0x00000,
0x00010900));
/* Wait for clock being stable. */
gcmkONERROR(gckOS_Delay(Os, 1));
/* Isolate the GPU. */
control = ((((gctUINT32) (0x00010900)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
19:19) - (0 ?
19:19) + 1) == 32) ?
~0U : (~(~0U << ((1 ?
19:19) - (0 ?
19:19) + 1))))))) << (0 ?
19:19))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ?
19:19) - (0 ?
19:19) + 1) == 32) ?
~0U : (~(~0U << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ? 19:19)));
gcmkONERROR(gckOS_WriteRegisterEx(Os,
Core,
0x00000,
control));
if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_SECURITY_AHB) &&
(Hardware->options.secureMode == gcvSECURE_IN_NORMAL))
{
gcmkONERROR(gckOS_WriteRegisterEx(Os,
Core,
0x003A8,
((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
0:0) - (0 ?
0:0) + 1) == 32) ?
~0U : (~(~0U << ((1 ?
0:0) - (0 ?
0:0) + 1))))))) << (0 ?
0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ?
0:0) - (0 ?
0:0) + 1) == 32) ?
~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0)))));
}
else
{
/* Set soft reset. */
gcmkONERROR(gckOS_WriteRegisterEx(Os,
Core,
0x00000,
((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
12:12) - (0 ?
12:12) + 1) == 32) ?
~0U : (~(~0U << ((1 ?
12:12) - (0 ?
12:12) + 1))))))) << (0 ?
12:12))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ?
12:12) - (0 ?
12:12) + 1) == 32) ?
~0U : (~(~0U << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ? 12:12)))));
}
if (Hardware->hasQchannel)
{
/* Reset Qchannel. */
gcmkONERROR(gckOS_WriteRegisterEx(Os,
Core,
0x005E8,
((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
2:2) - (0 ?
2:2) + 1) == 32) ?
~0U : (~(~0U << ((1 ?
2:2) - (0 ?
2:2) + 1))))))) << (0 ?
2:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ?
2:2) - (0 ?
2:2) + 1) == 32) ?
~0U : (~(~0U << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2)))));
}
#if gcdFPGA_BUILD
/* Wait more time on FPGA for reset as lower frequency */
gcmkONERROR(gckOS_Delay(Os, 10));
#else
/* Wait for reset. */
gcmkONERROR(gckOS_Delay(Os, 1));
#endif
/* Reset soft reset bit. */
gcmkONERROR(gckOS_WriteRegisterEx(Os,
Core,
0x00000,
((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
12:12) - (0 ?
12:12) + 1) == 32) ?
~0U : (~(~0U << ((1 ?
12:12) - (0 ?
12:12) + 1))))))) << (0 ?
12:12))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ?
12:12) - (0 ?
12:12) + 1) == 32) ?
~0U : (~(~0U << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ? 12:12)))));
if (Hardware->hasQchannel)
{
Hardware->powerState = gcvFALSE;
gcmkONERROR(gckHARDWARE_QchannelPowerControl(Hardware, gcvTRUE, gcvTRUE));
/* Bypass Qchannel power management after reset. */
if (!Hardware->options.powerManagement)
{
gcmkONERROR(gckHARDWARE_QchannelBypass(Hardware, gcvTRUE));
}
}
/* Reset GPU isolation. */
control = ((((gctUINT32) (control)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
19:19) - (0 ?
19:19) + 1) == 32) ?
~0U : (~(~0U << ((1 ?
19:19) - (0 ?
19:19) + 1))))))) << (0 ?
19:19))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ?
19:19) - (0 ?
19:19) + 1) == 32) ?
~0U : (~(~0U << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ? 19:19)));
gcmkONERROR(gckOS_WriteRegisterEx(Os,
Core,
0x00000,
control));
/* Read idle register. */
gcmkONERROR(gckOS_ReadRegisterEx(Os,
Core,
0x00004,
&idle));
if ((((((gctUINT32) (idle)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) ) == 0)
{
continue;
}
gcmkDUMP(Os, "@[register.wait 0x%05X 0x%08X 0x%08X]",
0x00004,
((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
0:0) - (0 ?
0:0) + 1) == 32) ?
~0U : (~(~0U << ((1 ?
0:0) - (0 ?
0:0) + 1))))))) << (0 ?
0:0))) | (((gctUINT32) ((gctUINT32) (~0U) & ((gctUINT32) ((((1 ?
0:0) - (0 ?
0:0) + 1) == 32) ?
~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))),
idle);
/* Read reset register. */
gcmkONERROR(gckOS_ReadRegisterEx(Os,
Core,
0x00000,
&control));
if (((((((gctUINT32) (control)) >> (0 ? 16:16)) & ((gctUINT32) ((((1 ? 16:16) - (0 ? 16:16) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 16:16) - (0 ? 16:16) + 1)))))) ) == 0)
|| ((((((gctUINT32) (control)) >> (0 ? 17:17)) & ((gctUINT32) ((((1 ? 17:17) - (0 ? 17:17) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 17:17) - (0 ? 17:17) + 1)))))) ) == 0)
)
{
continue;
}
gcmkDUMP(Os, "@[register.wait 0x%05X 0x%08X 0x%08X]",
0x00000,
((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
16:16) - (0 ?
16:16) + 1) == 32) ?
~0U : (~(~0U << ((1 ?
16:16) - (0 ?
16:16) + 1))))))) << (0 ?
16:16))) | (((gctUINT32) ((gctUINT32) (~0U) & ((gctUINT32) ((((1 ?
16:16) - (0 ?
16:16) + 1) == 32) ?
~0U : (~(~0U << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16)))
| ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
17:17) - (0 ?
17:17) + 1) == 32) ?
~0U : (~(~0U << ((1 ?
17:17) - (0 ?
17:17) + 1))))))) << (0 ?
17:17))) | (((gctUINT32) ((gctUINT32) (~0U) & ((gctUINT32) ((((1 ?
17:17) - (0 ?
17:17) + 1) == 32) ?
~0U : (~(~0U << ((1 ? 17:17) - (0 ? 17:17) + 1))))))) << (0 ? 17:17))),
control);
/* Force Disable MMU to guarantee setup command be read from physical addr */
if (Hardware->options.secureMode == gcvSECURE_IN_NORMAL)
{
gctUINT32 regMmuCtrl = 0;
gcmkONERROR(gckOS_ReadRegisterEx(
Hardware->os,
Hardware->core,
0x00388,
®MmuCtrl
));
mmuEnabled = (((((gctUINT32) (regMmuCtrl)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) );
}
else
{
gctUINT32 regMmuCtrl = 0;
gcmkONERROR(gckOS_ReadRegisterEx(
Hardware->os,
Hardware->core,
0x0018C,
®MmuCtrl
));
mmuEnabled = (((((gctUINT32) (regMmuCtrl)) >> (0 ? 0:0)) & ((gctUINT32) ((((1 ? 0:0) - (0 ? 0:0) + 1) == 32) ? ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1)))))) );
}
if (mmuEnabled)
{
/* Not reset properly, reset again. */
continue;
}
count++;
}
/* Success. */
return gcvSTATUS_OK;
OnError:
/* Return the error. */
return status;
}