#include <fdtdec.h>
 #include <tmu.h>
 #include <asm/arch/tmu.h>
+#include <asm/arch/power.h>
 
 #define TRIMINFO_RELOAD                1
 #define CORE_EN                        1
+#define THERM_TRIP_EN          (1 << 12)
 
 #define INTEN_RISE0            1
 #define INTEN_RISE1            (1 << 4)
        unsigned int start_warning;
        /* temperature threshold CPU tripping */
        unsigned int start_tripping;
+       /* temperature threshold for HW tripping */
+       unsigned int hardware_tripping;
 };
 
 /* Pre-defined values and thresholds for calibration of current temperature */
        info->data.ts.start_tripping = fdtdec_get_int(blob,
                                node, "samsung,start-tripping", -1);
        error |= info->data.ts.start_tripping;
+       info->data.ts.hardware_tripping = fdtdec_get_int(blob,
+                               node, "samsung,hw-tripping", -1);
+       error |= info->data.ts.hardware_tripping;
        info->data.efuse_min_value = fdtdec_get_int(blob,
                                node, "samsung,efuse-min-value", -1);
        error |= info->data.efuse_min_value;
 static void tmu_setup_parameters(struct tmu_info *info)
 {
        unsigned int te_code, con;
-       unsigned int warning_code, trip_code;
+       unsigned int warning_code, trip_code, hwtrip_code;
        unsigned int cooling_temp;
        unsigned int rising_value;
        struct tmu_data *data = &info->data;
                        + info->te1 - info->dc_value;
        trip_code = data->ts.start_tripping
                        + info->te1 - info->dc_value;
+       hwtrip_code = data->ts.hardware_tripping
+                       + info->te1 - info->dc_value;
+
        cooling_temp = 0;
 
-       rising_value = ((warning_code << 8) | (trip_code << 16));
+       rising_value = ((warning_code << 8) |
+                       (trip_code << 16) |
+                       (hwtrip_code << 24));
 
        /* Set interrupt level */
        writel(rising_value, ®->threshold_temp_rise);
 
        /* TMU core enable */
        con = readl(®->tmu_control);
-       con |= CORE_EN;
+       con |= THERM_TRIP_EN | CORE_EN;
 
        writel(con, ®->tmu_control);
 
-       /* LEV0 LEV1 LEV2 interrupt enable */
-       writel(INTEN_RISE0 | INTEN_RISE1 | INTEN_RISE2, ®->inten);
+       /* Enable HW thermal trip */
+       set_hw_thermal_trip();
+
+       /* LEV1 LEV2 interrupt enable */
+       writel(INTEN_RISE1 | INTEN_RISE2, ®->inten);
 }
 
 /*