From 6dbffcb2a8174e7e81a70e38332c1aecfb2b27c4 Mon Sep 17 00:00:00 2001 From: Mahesh Mahadevan Date: Tue, 18 May 2021 10:28:19 -0500 Subject: [PATCH] hwinfo: Support NXP LPC family add hwinfo driver support for NXP's LPC family. Signed-off-by: Mahesh Mahadevan --- boards/arm/mimxrt685_evk/doc/index.rst | 2 ++ drivers/hwinfo/CMakeLists.txt | 1 + drivers/hwinfo/Kconfig | 7 +++++++ drivers/hwinfo/hwinfo_mcux_syscon.c | 28 ++++++++++++++++++++++++++ dts/arm/nxp/nxp_rt6xx_common.dtsi | 5 +++++ dts/bindings/hwinfo/nxp,lpc-uid.yaml | 12 +++++++++++ 6 files changed, 55 insertions(+) create mode 100644 drivers/hwinfo/hwinfo_mcux_syscon.c create mode 100644 dts/bindings/hwinfo/nxp,lpc-uid.yaml diff --git a/boards/arm/mimxrt685_evk/doc/index.rst b/boards/arm/mimxrt685_evk/doc/index.rst index 675edb9a15e..f8faa66e664 100644 --- a/boards/arm/mimxrt685_evk/doc/index.rst +++ b/boards/arm/mimxrt685_evk/doc/index.rst @@ -83,6 +83,8 @@ features: +-----------+------------+-------------------------------------+ | CLOCK | on-chip | clock_control | +-----------+------------+-------------------------------------+ +| HWINFO | on-chip | Unique device serial number | ++-----------+------------+-------------------------------------+ The default configuration can be found in the defconfig file: diff --git a/drivers/hwinfo/CMakeLists.txt b/drivers/hwinfo/CMakeLists.txt index 099b1361221..83a29af3b4c 100644 --- a/drivers/hwinfo/CMakeLists.txt +++ b/drivers/hwinfo/CMakeLists.txt @@ -6,6 +6,7 @@ zephyr_sources_ifdef(CONFIG_HWINFO hwinfo_weak_impl.c) zephyr_sources_ifdef(CONFIG_HWINFO_STM32 hwinfo_stm32.c) zephyr_sources_ifdef(CONFIG_HWINFO_NRF hwinfo_nrf.c) zephyr_sources_ifdef(CONFIG_HWINFO_MCUX_SIM hwinfo_mcux_sim.c) +zephyr_sources_ifdef(CONFIG_HWINFO_MCUX_SYSCON hwinfo_mcux_syscon.c) zephyr_sources_ifdef(CONFIG_HWINFO_ESP32 hwinfo_esp32.c) zephyr_sources_ifdef(CONFIG_HWINFO_IMXRT hwinfo_imxrt.c) zephyr_sources_ifdef(CONFIG_HWINFO_SAM hwinfo_sam.c) diff --git a/drivers/hwinfo/Kconfig b/drivers/hwinfo/Kconfig index aa27ff54715..1e4a34f4df1 100644 --- a/drivers/hwinfo/Kconfig +++ b/drivers/hwinfo/Kconfig @@ -38,6 +38,13 @@ config HWINFO_MCUX_SIM help Enable NXP kinetis mcux hwinfo driver. +config HWINFO_MCUX_SYSCON + bool "NXP LPC device ID" + default y + depends on HAS_MCUX_SYSCON + help + Enable NXP LPC mcux hwinfo driver. + config HWINFO_IMXRT bool "NXP i.mx RT device ID" default y diff --git a/drivers/hwinfo/hwinfo_mcux_syscon.c b/drivers/hwinfo/hwinfo_mcux_syscon.c new file mode 100644 index 00000000000..5b4e79a27c0 --- /dev/null +++ b/drivers/hwinfo/hwinfo_mcux_syscon.c @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2021 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#define DT_DRV_COMPAT nxp_lpc_uid + +#include +#include +#include + +ssize_t z_impl_hwinfo_get_device_id(uint8_t *buffer, size_t length) +{ + uint8_t *uid_addr = (uint8_t *) DT_INST_REG_ADDR(0); + + if (buffer == NULL) { + return 0; + } + + if (length > DT_INST_REG_SIZE(0)) { + length = DT_INST_REG_SIZE(0); + } + + memcpy(buffer, uid_addr, length); + + return length; +} diff --git a/dts/arm/nxp/nxp_rt6xx_common.dtsi b/dts/arm/nxp/nxp_rt6xx_common.dtsi index 3a374d896ca..420c05529e1 100644 --- a/dts/arm/nxp/nxp_rt6xx_common.dtsi +++ b/dts/arm/nxp/nxp_rt6xx_common.dtsi @@ -66,6 +66,11 @@ #clock-cells = <1>; }; + uuid: uuid@2f50 { + compatible = "nxp,lpc-uid"; + reg = <0x2f50 0x10>; + }; + gpio0: gpio@0 { compatible = "nxp,lpc-gpio"; reg = <0x100000 0x4000>; diff --git a/dts/bindings/hwinfo/nxp,lpc-uid.yaml b/dts/bindings/hwinfo/nxp,lpc-uid.yaml new file mode 100644 index 00000000000..9d47c3b7157 --- /dev/null +++ b/dts/bindings/hwinfo/nxp,lpc-uid.yaml @@ -0,0 +1,12 @@ +# Copyright (c) 2021 NXP +# SPDX-License-Identifier: Apache-2.0 + +description: NXP LPC 128-bit Unique identifier + +compatible: "nxp,lpc-uid" + +include: base.yaml + +properties: + reg: + required: true