#include <linux/init.h>
#include <linux/io.h>
#include <linux/of_address.h>
#include <linux/slab.h>
#include <linux/sys_soc.h>
#include <linux/platform_device.h>
#include <linux/arm-smccc.h>
#include <linux/of.h>
#include <linux/clk.h>
#define REV_B1 …
#define IMX8MQ_SW_INFO_B1 …
#define IMX8MQ_SW_MAGIC_B1 …
#define IMX_SIP_GET_SOC_INFO …
#define OCOTP_UID_LOW …
#define OCOTP_UID_HIGH …
#define IMX8MP_OCOTP_UID_OFFSET …
#define ANADIG_DIGPROG_IMX8MM …
struct imx8_soc_data { … };
static u64 soc_uid;
#ifdef CONFIG_HAVE_ARM_SMCCC
static u32 imx8mq_soc_revision_from_atf(void)
{
struct arm_smccc_res res;
arm_smccc_smc(IMX_SIP_GET_SOC_INFO, 0, 0, 0, 0, 0, 0, 0, &res);
if (res.a0 == SMCCC_RET_NOT_SUPPORTED)
return 0;
else
return res.a0 & 0xff;
}
#else
static inline u32 imx8mq_soc_revision_from_atf(void) { return 0; };
#endif
static u32 __init imx8mq_soc_revision(void)
{ … }
static void __init imx8mm_soc_uid(void)
{ … }
static u32 __init imx8mm_soc_revision(void)
{ … }
static const struct imx8_soc_data imx8mq_soc_data = …;
static const struct imx8_soc_data imx8mm_soc_data = …;
static const struct imx8_soc_data imx8mn_soc_data = …;
static const struct imx8_soc_data imx8mp_soc_data = …;
static __maybe_unused const struct of_device_id imx8_soc_match[] = …;
#define imx8_revision(soc_rev) …
static int __init imx8_soc_init(void)
{ … }
device_initcall(imx8_soc_init);
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;