summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYe.Li <B37916@freescale.com>2014-11-20 21:14:14 +0800
committerStefano Babic <sbabic@denx.de>2014-11-21 15:30:12 +0100
commit7a264168473b8a9ad94352d55a0392ae251676a8 (patch)
tree0bf7a7c8374ab2ad281bccfa0fea8747e48650c5
parente3568d2ecadda3e6c24ffab1670b77763df7419f (diff)
downloadu-boot-imx-7a264168473b8a9ad94352d55a0392ae251676a8.zip
u-boot-imx-7a264168473b8a9ad94352d55a0392ae251676a8.tar.gz
u-boot-imx-7a264168473b8a9ad94352d55a0392ae251676a8.tar.bz2
mx6: thermal: Check cpu temperature via thermal sensor
Add imx6 thermal device to mx6 soc file. Read the cpu temperature using this device to access onchip thermal sensor. Signed-off-by: Ye.Li <B37916@freescale.com> Signed-off-by: Nitin Garg <nitin.garg@freescale.com>
-rw-r--r--arch/arm/cpu/armv7/mx6/soc.c15
-rw-r--r--arch/arm/imx-common/cpu.c21
2 files changed, 36 insertions, 0 deletions
diff --git a/arch/arm/cpu/armv7/mx6/soc.c b/arch/arm/cpu/armv7/mx6/soc.c
index 5fd2a63..5f5f497 100644
--- a/arch/arm/cpu/armv7/mx6/soc.c
+++ b/arch/arm/cpu/armv7/mx6/soc.c
@@ -22,6 +22,8 @@
#include <asm/arch/mxc_hdmi.h>
#include <asm/arch/crm_regs.h>
#include <asm/bootm.h>
+#include <dm.h>
+#include <imx_thermal.h>
enum ldo_reg {
LDO_ARM,
@@ -37,6 +39,19 @@ struct scu_regs {
u32 fpga_rev;
};
+#if defined(CONFIG_IMX6_THERMAL)
+static const struct imx_thermal_plat imx6_thermal_plat = {
+ .regs = (void *)ANATOP_BASE_ADDR,
+ .fuse_bank = 1,
+ .fuse_word = 6,
+};
+
+U_BOOT_DEVICE(imx6_thermal) = {
+ .name = "imx_thermal",
+ .platdata = &imx6_thermal_plat,
+};
+#endif
+
u32 get_nr_cpus(void)
{
struct scu_regs *scu = (struct scu_regs *)SCU_BASE_ADDR;
diff --git a/arch/arm/imx-common/cpu.c b/arch/arm/imx-common/cpu.c
index 24740b8..8b2dfca 100644
--- a/arch/arm/imx-common/cpu.c
+++ b/arch/arm/imx-common/cpu.c
@@ -17,6 +17,7 @@
#include <asm/arch/sys_proto.h>
#include <asm/arch/crm_regs.h>
#include <ipu_pixfmt.h>
+#include <thermal.h>
#ifdef CONFIG_FSL_ESDHC
#include <fsl_esdhc.h>
@@ -134,6 +135,11 @@ int print_cpuinfo(void)
{
u32 cpurev;
+#if defined(CONFIG_MX6) && defined(CONFIG_IMX6_THERMAL)
+ struct udevice *thermal_dev;
+ int cpu_tmp, ret;
+#endif
+
cpurev = get_cpu_rev();
printf("CPU: Freescale i.MX%s rev%d.%d at %d MHz\n",
@@ -141,6 +147,21 @@ int print_cpuinfo(void)
(cpurev & 0x000F0) >> 4,
(cpurev & 0x0000F) >> 0,
mxc_get_clock(MXC_ARM_CLK) / 1000000);
+
+#if defined(CONFIG_MX6) && defined(CONFIG_IMX6_THERMAL)
+ ret = uclass_get_device(UCLASS_THERMAL, 0, &thermal_dev);
+ if (!ret) {
+ ret = thermal_get_temp(thermal_dev, &cpu_tmp);
+
+ if (!ret)
+ printf("CPU: Temperature %d C\n", cpu_tmp);
+ else
+ printf("CPU: Temperature: invalid sensor data\n");
+ } else {
+ printf("CPU: Temperature: Can't find sensor device\n");
+ }
+#endif
+
printf("Reset cause: %s\n", get_reset_cause());
return 0;
}