This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

66AK2H14 datasheet SPRS866E doesn't show that the address of the Device Speed DEVSPEED register depends upon the Silicon Revision

Other Parts Discussed in Thread: 66AK2H14

The 66AK2H14 datasheet SPRS866E Table 8-30 Device State Control Registers table shows that the DEVSPEED register is at address 0x02620C98:

Where the encoding of the DEVSPEED register is shown as:

With a 66AK2H14 silicon revision 2 device in a EVMK2H Rev 4 address 0x02620C98, which is the DEVSPEED according to the datasheet, reads as zero:

The value of zero at address 0x02620C98 decodes as a Device Speed grade of 800MHz for the DSP and 800MHz for the ARM which isn't a valid combination according to Figure 2-1 of the datasheet:

Note that the value of 0x00020008 at address 0x02620C90 decodes as a Device Speed grade of 1200MHz for the DSP and 1400MHz for the ARM, which is a valid combination.

Looking at the uboot source code for the Keystone architecture shows that for a CPU_66AK2Hx the read_efuse_bootrom() function in arch/arm/mach-keystone/clock.c reads from two different address depending upon the cpu_revision():

static inline u32 read_efuse_bootrom(void)
{
	if (cpu_is_k2hk() && (cpu_revision() <= 1))
		return __raw_readl(KS2_REV1_DEVSPEED);
	else
		return __raw_readl(KS2_EFUSE_BOOTROM);
}

int get_max_arm_speed(int *spds)
{
	u32 armspeed = read_efuse_bootrom();

	armspeed = (armspeed & DEVSPEED_ARMSPEED_MASK) >>
		    DEVSPEED_ARMSPEED_SHIFT;

	return get_max_speed(armspeed, ARM_SUPPORTED_SPEEDS, spds);
}

int get_max_dev_speed(int *spds)
{
	u32 devspeed = read_efuse_bootrom();

	devspeed = (devspeed & DEVSPEED_DEVSPEED_MASK) >>
		    DEVSPEED_DEVSPEED_SHIFT;

	return get_max_speed(devspeed, DEV_SUPPORTED_SPEEDS, spds);
}

Where KS2_REV1_DEVSPEED is address 0x02620c98 and KS2_EFUSE_BOOTROM is address 0x02620c90. i.e. the uboot source code shows for a Rev 1.x device the Device Speed is expected to be read from address 0x02620c98 and for a Rev 2 or above device the Device Speed is expected to be read from address 0x02620C90. The uboot cpu_revision() function returns the VARIANT field of the JTAG ID (JTAGID) Register.

Suggest that the 66AK2H14 datasheet SPRS866 is updated to note that for Silicon Revision 2 the DEVSPEED register is at address 0x02620c90, rather than address 0x02620c98 for Silicon Revisions 1.0 and 1.1.

Also, are there any other registers which different between Silicon Revision 1.0 / 1.1 and 2.0? The 66AK2H14 datasheet SPRS866E doesn't seem to contain any mention of Silicon Revision 2.0.