Chip UID

Hello,

When I flashing with tegrarcm, I can see “chip uid” like below.
I’d like to use this for unique id.
How can I read this from u-boot or kernel ?
where does it saved?
I try to dump many registers but can’t find it.

Thanks in advance.

Nvflash 4.13.0000 started
BR_CID: 0x340010017410b0c810000000150000c0
rcm version 0X400001
Skipping BoardID read at miniloader level
System Information:
   chip name: unknown
   chip id: 0x40 major: 1 minor: 1
   chip sku: 0x0
   <b>chip uid: 0x000000017410b0c810000000150000c0</b>
   macrovision: disabled
   hdcp: disabled
   jtag: disabled
   sbk burned: false
   board id: 0
   warranty fuse: 0
   dk burned: false
   boot device: emmc
   operating mode: 3
   device config strap: 0
   device config fuse: 0
   sdram config strap: 0

RCM communication completed

hello Jack71,

UID is generated by reading the ECID fuse from ECID0 to ECID3,
we’re going to take a look and then get back to you, thanks

Thannks Jerry,

Any news please ?

hello Jack71,

here’s kernel function to read tegra chip uid for your reference, please check.

$TOP/kernel/drivers/misc/tegra-fuse/tegra210_fuse_offsets.h
unsigned long long tegra_chip_uid(void) {…}

Awesome!! Thank you very much.

Hi Jerry,

I try to find the header tegra210_fuse_offsets.h both on my tk1 and tx1, but nothing found. I found the folder named tegra-fuse in the path /usr/src/linux-headers-3.10.96-tegra/drivers/misc/tegra-fuse, but there is only one Makefile under this folder, tegra210_fuse_offsets.h is not found. Do you have any idea how I can use the kernel function tegra_chip_uid?

Best,
Mike

hello WALLES,

that’s a kernel function, you should check the source code via L4T sources package.
please download L4T sources via Embedded Download Center. thanks

Under L4T R21.5 (TK1) the file is:

drivers/misc/tegra-fuse/tegra12x_fuse_offsets.h

Under L4T R24.2.1 (TX1) the file is:

drivers/misc/tegra-fuse/tegra210_fuse_offsets.h

Under L4T R27.1 (TX2) the file is:

drivers/misc/tegra-fuse/tegra18x_fuse_offsets.h

The above are from the download of the respective L4T release page. See:
https://developer.nvidia.com/embedded/linux-tegra-archive

Does this mean, that I have to compile my custom kernel with a way to use that function?
Or is it sufficient if I can have some kernel modules using that function that can be inserted into an already running kernel?

Or is there a better way to get the chip UUID?

Please suggest a direction to proceed. Any starting point would help a lot.

Thanks.

hello samthedevil.sp,

please refer to comment #4 to read chip UID.
thanks

Hello,

could you provide some more info on how to read chip UID? Do I need to build a tool, is there one already? Some examples?

It depends on your L4T version, but for chip ID you may check this.
For unique Chip ID you’ll have to dig into driver source for how to get it.
You may also have a look to /proc/cmdline and check value of option androidboot.serialno.

Has anybody made this work?
I made a kernel driver module which calls " tegra_chip_uid", but the module fails to load with error message “Unknown symbol tegra_chip_uid (err 0)”.
I also tried to make the module built-in but doesn’t link with the same reason.
I use R27.1 (4.4.15-tegra).

hello tamo2,

please note that l4t-r27.1 dose not support TX1 devices.
you might also check the [L4T Release Notes] from Jetson Download Center,
since we continuously public BSP releases, could you please upgrade your working environment to the latest JetPack release, thanks

Hi Jerry,
Thanks for the quick response.
I used TX2 for this experiment (we own TX1 and TK1 as well).
I don’t mind upgrading the environment to the latest, but if I do, then calling tegra_chip_uid() should work?
I used R27.1 because it was the latest at the time comment #4 was posted.

R27.1 is only for a TX1. You’re probably thinking of R21.7…this is the most recent version a TK1 can use. To check:

head -n 1 /etc/nv_tegra_release