18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * MX35 CPU type detection
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (c) 2009 Daniel Mack <daniel@caiaq.de>
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci#include <linux/module.h>
88c2ecf20Sopenharmony_ci#include <linux/of_address.h>
98c2ecf20Sopenharmony_ci#include <linux/io.h>
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#include "hardware.h"
128c2ecf20Sopenharmony_ci#include "iim.h"
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_cistatic int mx35_cpu_rev = -1;
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_cistatic int mx35_read_cpu_rev(void)
178c2ecf20Sopenharmony_ci{
188c2ecf20Sopenharmony_ci	void __iomem *iim_base;
198c2ecf20Sopenharmony_ci	struct device_node *np;
208c2ecf20Sopenharmony_ci	u32 rev;
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci	np = of_find_compatible_node(NULL, NULL, "fsl,imx35-iim");
238c2ecf20Sopenharmony_ci	iim_base = of_iomap(np, 0);
248c2ecf20Sopenharmony_ci	of_node_put(np);
258c2ecf20Sopenharmony_ci	BUG_ON(!iim_base);
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ci	rev = imx_readl(iim_base + MXC_IIMSREV);
288c2ecf20Sopenharmony_ci	switch (rev) {
298c2ecf20Sopenharmony_ci	case 0x00:
308c2ecf20Sopenharmony_ci		return IMX_CHIP_REVISION_1_0;
318c2ecf20Sopenharmony_ci	case 0x10:
328c2ecf20Sopenharmony_ci		return IMX_CHIP_REVISION_2_0;
338c2ecf20Sopenharmony_ci	case 0x11:
348c2ecf20Sopenharmony_ci		return IMX_CHIP_REVISION_2_1;
358c2ecf20Sopenharmony_ci	default:
368c2ecf20Sopenharmony_ci		return IMX_CHIP_REVISION_UNKNOWN;
378c2ecf20Sopenharmony_ci	}
388c2ecf20Sopenharmony_ci}
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_ciint mx35_revision(void)
418c2ecf20Sopenharmony_ci{
428c2ecf20Sopenharmony_ci	if (mx35_cpu_rev == -1)
438c2ecf20Sopenharmony_ci		mx35_cpu_rev = mx35_read_cpu_rev();
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ci	return mx35_cpu_rev;
468c2ecf20Sopenharmony_ci}
478c2ecf20Sopenharmony_ciEXPORT_SYMBOL(mx35_revision);
48