1 /* 2 * Copyright (c) 2024 Nuvoton Technology Corporation. 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #include <soc.h> 8 #include <zephyr/drivers/hwinfo.h> 9 #include <zephyr/sys/byteorder.h> 10 #include <string.h> 11 12 struct numaker_uid { 13 uint32_t id[3]; 14 }; 15 z_impl_hwinfo_get_device_id(uint8_t * buffer,size_t length)16ssize_t z_impl_hwinfo_get_device_id(uint8_t *buffer, size_t length) 17 { 18 struct numaker_uid dev_id; 19 20 SYS_UnlockReg(); 21 RMC_Open(); 22 23 dev_id.id[0] = sys_cpu_to_be32(RMC_ReadUID(0)); 24 dev_id.id[1] = sys_cpu_to_be32(RMC_ReadUID(1)); 25 dev_id.id[2] = sys_cpu_to_be32(RMC_ReadUID(2)); 26 27 length = MIN(length, sizeof(dev_id.id)); 28 memcpy(buffer, dev_id.id, length); 29 30 RMC_Close(); 31 SYS_LockReg(); 32 33 return length; 34 } 35