Hi all,
how can i read the iMX51 fuses inside a WEC700 driver?
I need to read the unique ID of the chip and my guess is that is contained in the fuses area.
My try is:
UINT8* pRegs;
int val;
PHYSICAL_ADDRESS phyAddr;
ULONG ulSize = 0x840*sizeof(UINT8);
phyAddr.QuadPart = CSP_BASE_REG_PA_IIM;
pRegs = (UINT8*)MmMapIoSpace(phyAddr, ulSize, FALSE);
RETAILMSG(1, (L": %x\r\n", pRegs));
val = INREG32(&pRegs[0x820]);
RETAILMSG(1, (L": %x\r\n", val));
val <<= 8;
val |= INREG32(&pRegs[0x824]);
RETAILMSG(1, (L": %x\r\n", val));
but the driver hangs and the system stop to work.
How can i do it?
Thanks!
已解决! 转到解答。
I don't see any code to enable IIM clock in your driver, so you violate the basic rule in the driver. I believe that's the root cause for your hang (and this is a typical case for a driver hang).
Please add following code before / after IIM access:
DDKClockSetGatingMode(DDK_CLOCK_GATE_INDEX_IIM, DDK_CLOCK_GATE_MODE_ENABLED_ALL);
......
DDKClockSetGatingMode(DDK_CLOCK_GATE_INDEX_IIM, DDK_CLOCK_GATE_MODE_DISABLED);
I don't see any code to enable IIM clock in your driver, so you violate the basic rule in the driver. I believe that's the root cause for your hang (and this is a typical case for a driver hang).
Please add following code before / after IIM access:
DDKClockSetGatingMode(DDK_CLOCK_GATE_INDEX_IIM, DDK_CLOCK_GATE_MODE_ENABLED_ALL);
......
DDKClockSetGatingMode(DDK_CLOCK_GATE_INDEX_IIM, DDK_CLOCK_GATE_MODE_DISABLED);