soc: imx-scu: Using existing serial_number instead of UID
The soc_device_attribute structure already contains a serial_number
attribute to show SoC's unique ID, just use it to show SoC's unique
ID instead of creating a new file called soc_uid.
Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
(cherry picked from commit 7ae399b7d0
)
Signed-off-by: Andrey Zhizhikin <andrey.zhizhikin@leica-geosystems.com>
5.4-rM2-2.2.x-imx-squashed
parent
8b77065f10
commit
4c32adb803
|
@ -35,14 +35,11 @@ struct imx_sc_msg_misc_get_soc_uid {
|
||||||
u32 uid_high;
|
u32 uid_high;
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
static ssize_t soc_uid_show(struct device *dev,
|
static int imx_scu_soc_uid(u64 *soc_uid)
|
||||||
struct device_attribute *attr, char *buf)
|
|
||||||
{
|
{
|
||||||
struct imx_sc_msg_misc_get_soc_uid msg;
|
struct imx_sc_msg_misc_get_soc_uid msg;
|
||||||
struct imx_sc_rpc_msg *hdr = &msg.hdr;
|
struct imx_sc_rpc_msg *hdr = &msg.hdr;
|
||||||
u64 soc_uid;
|
int ret;
|
||||||
|
|
||||||
memset(&msg, 0, sizeof(msg));
|
|
||||||
|
|
||||||
hdr->ver = IMX_SC_RPC_VERSION;
|
hdr->ver = IMX_SC_RPC_VERSION;
|
||||||
hdr->svc = IMX_SC_RPC_SVC_MISC;
|
hdr->svc = IMX_SC_RPC_SVC_MISC;
|
||||||
|
@ -51,15 +48,13 @@ static ssize_t soc_uid_show(struct device *dev,
|
||||||
|
|
||||||
imx_scu_call_rpc(soc_ipc_handle, &msg, true);
|
imx_scu_call_rpc(soc_ipc_handle, &msg, true);
|
||||||
|
|
||||||
soc_uid = msg.uid_high;
|
*soc_uid = msg.uid_high;
|
||||||
soc_uid <<= 32;
|
*soc_uid <<= 32;
|
||||||
soc_uid |= msg.uid_low;
|
*soc_uid |= msg.uid_low;
|
||||||
|
|
||||||
return sprintf(buf, "%016llX\n", soc_uid);
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static DEVICE_ATTR_RO(soc_uid);
|
|
||||||
|
|
||||||
static int imx_scu_soc_id(void)
|
static int imx_scu_soc_id(void)
|
||||||
{
|
{
|
||||||
struct imx_sc_msg_misc_get_soc_id msg;
|
struct imx_sc_msg_misc_get_soc_id msg;
|
||||||
|
@ -88,6 +83,7 @@ static int imx_scu_soc_probe(struct platform_device *pdev)
|
||||||
struct soc_device_attribute *soc_dev_attr;
|
struct soc_device_attribute *soc_dev_attr;
|
||||||
struct soc_device *soc_dev;
|
struct soc_device *soc_dev;
|
||||||
int id, ret;
|
int id, ret;
|
||||||
|
u64 uid = 0;
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
ret = imx_scu_get_handle(&soc_ipc_handle);
|
ret = imx_scu_get_handle(&soc_ipc_handle);
|
||||||
|
@ -111,6 +107,10 @@ static int imx_scu_soc_probe(struct platform_device *pdev)
|
||||||
if (id < 0)
|
if (id < 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
ret = imx_scu_soc_uid(&uid);
|
||||||
|
if (ret < 0)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
/* format soc_id value passed from SCU firmware */
|
/* format soc_id value passed from SCU firmware */
|
||||||
val = id & 0x1f;
|
val = id & 0x1f;
|
||||||
if (of_machine_is_compatible("fsl,imx8qm")) {
|
if (of_machine_is_compatible("fsl,imx8qm")) {
|
||||||
|
@ -133,19 +133,22 @@ static int imx_scu_soc_probe(struct platform_device *pdev)
|
||||||
goto free_soc_id;
|
goto free_soc_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
soc_dev = soc_device_register(soc_dev_attr);
|
soc_dev_attr->serial_number = kasprintf(GFP_KERNEL, "%016llX", uid);
|
||||||
if (IS_ERR(soc_dev)) {
|
if (!soc_dev_attr->serial_number) {
|
||||||
ret = PTR_ERR(soc_dev);
|
ret = -ENOMEM;
|
||||||
goto free_revision;
|
goto free_revision;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = device_create_file(soc_device_to_device(soc_dev),
|
soc_dev = soc_device_register(soc_dev_attr);
|
||||||
&dev_attr_soc_uid);
|
if (IS_ERR(soc_dev)) {
|
||||||
if (ret)
|
ret = PTR_ERR(soc_dev);
|
||||||
goto free_revision;
|
goto free_serial_number;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
free_serial_number:
|
||||||
|
kfree(soc_dev_attr->serial_number);
|
||||||
free_revision:
|
free_revision:
|
||||||
kfree(soc_dev_attr->revision);
|
kfree(soc_dev_attr->revision);
|
||||||
free_soc_id:
|
free_soc_id:
|
||||||
|
|
Loading…
Reference in New Issue