From patchwork Thu Feb 21 09:40:26 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akshay Saraswat X-Patchwork-Id: 222219 X-Patchwork-Delegate: promsoft@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 6D40C2C007C for ; Thu, 21 Feb 2013 20:22:10 +1100 (EST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id DB5244A15F; Thu, 21 Feb 2013 10:21:20 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id hQw9QpS-7QYt; Thu, 21 Feb 2013 10:21:20 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 501B24A17F; Thu, 21 Feb 2013 10:20:32 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 040154A10A for ; Thu, 21 Feb 2013 10:20:22 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id OMkjoAP++a+Z for ; Thu, 21 Feb 2013 10:20:21 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mailout2.samsung.com (mailout2.samsung.com [203.254.224.25]) by theia.denx.de (Postfix) with ESMTP id C41264A108 for ; Thu, 21 Feb 2013 10:20:10 +0100 (CET) Received: from epcpsbgr4.samsung.com (u144.gpu120.samsung.co.kr [203.254.230.144]) by mailout2.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0MIK00FKFCL36CK0@mailout2.samsung.com> for u-boot@lists.denx.de; Thu, 21 Feb 2013 18:20:03 +0900 (KST) Received: from epcpsbgm2.samsung.com ( [172.20.52.122]) by epcpsbgr4.samsung.com (EPCPMTA) with SMTP id C9.1C.05791.3C6E5215; Thu, 21 Feb 2013 18:20:03 +0900 (KST) X-AuditID: cbfee690-b7f066d00000169f-3e-5125e6c327c2 Received: from epmmp1.local.host ( [203.254.227.16]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id B0.F0.03880.3C6E5215; Thu, 21 Feb 2013 18:20:03 +0900 (KST) Received: from chrome-ubuntu.sisodomain.com ([107.108.73.106]) by mmp1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0MIK00DJKCKVSC40@mmp1.samsung.com> for u-boot@lists.denx.de; Thu, 21 Feb 2013 18:20:03 +0900 (KST) From: Akshay Saraswat To: u-boot@lists.denx.de Date: Thu, 21 Feb 2013 04:40:26 -0500 Message-id: <1361439627-20504-8-git-send-email-akshay.s@samsung.com> X-Mailer: git-send-email 1.8.0 In-reply-to: <1361439627-20504-1-git-send-email-akshay.s@samsung.com> References: <1361439627-20504-1-git-send-email-akshay.s@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrMLMWRmVeSWpSXmKPExsWyRsSkSvfwM9VAg9Ur9Sze7u1kd2D0OHtn B2MAYxSXTUpqTmZZapG+XQJXxrPpzgXLVCvmHzvD1sD4Xa6LkZNDQsBE4ub6+WwQtpjEhXvr gWwuDiGBpYwSyy+/YYEpOvypESqxiFHi5OMlzCAJIYFlTBIPr/iD2GwCOhLbl3xnB7FFBCQk fvVfZQSxmQXsJGbv/s7UxcjBISxgI9G7pwQkzCKgKrH43EqwMbwCLhLbDmxjhNglJ/FhzyOw MZwCrhLbbp1lhFjlIvH4w02wGyQErrNJ/Hu2ihlikIDEt8mHWEDmSwjISmw6wAwxR1Li4Iob LBMYhRcwMqxiFE0tSC4oTkovMtErTswtLs1L10vOz93ECAzA0/+eTdjBeO+A9SHGZKBxE5ml RJPzgQGcVxJvaGxibmpsamZkaWlpSpqwkjiv/CWZQCGB9MSS1OzU1ILUovii0pzU4kOMTByc Ug2MhfIdsX8O3LBNTz46iynpPlPDpZQsxtsiZU7/PpmayhSs+HTt9o/J6/2TGq0+u280Dj/Y 2nVEzT//28cf7D8sn5SLC70NvM7bdfLSQoaPfKv+iBZdjHHLyxW981Dz6yyuf0wHo7Lsvt69 Hd/2UCP46NltKkvkufYvVLrLc1Jgy/SbKbOnXlswWYmlOCPRUIu5qDgRAH3HTqNWAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrAIsWRmVeSWpSXmKPExsVy+t9jAd3Dz1QDDbYeVbJ4u7eT3YHR4+yd HYwBjFENjDYZqYkpqUUKqXnJ+SmZeem2St7B8c7xpmYGhrqGlhbmSgp5ibmptkouPgG6bpk5 QGOVFMoSc0qBQgGJxcVK+naYJoSGuOlawDRG6PqGBMH1GBmggYQ1jBnPpjsXLFOtmH/sDFsD 43e5LkZODgkBE4nDnxrZIGwxiQv31gPZXBxCAosYJU4+XsIMkhASWMYk8fCKP4jNJqAjsX3J d3YQW0RAQuJX/1VGEJtZwE5i9u7vTF2MHBzCAjYSvXtKQMIsAqoSi8+tBBvDK+Aise3ANkaI XXISH/Y8AhvDKeAqse3WWUaIVS4Sjz/cZJvAyLuAkWEVo2hqQXJBcVJ6rpFecWJucWleul5y fu4mRnB4P5PewbiqweIQowAHoxIP74KXKoFCrIllxZW5hxglOJiVRHgVb6sGCvGmJFZWpRbl xxeV5qQWH2JMBrpqIrOUaHI+MPbySuINjU3MTY1NLU0sTMwsSRNWEudlPPUkQEggPbEkNTs1 tSC1CGYLEwenVAPjYl/1qUfem+p0BmVP01XRjNFy8Z0juTf5wqVTnYkp/dLWUnyrrbXPHVUy e7D8T2iGraui2uxEw+1znk89PzlTP392BePZeGvTmJjJVWd/nTYvEQte+cWxcI1Q17Gf3fOa /JtkWoMe/Uu6EHb0d/Oaj9YMjaeXH3P/ervCwVPD74iPy5TAu6+VWIozEg21mIuKEwGxAolD swIAAA== DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Cc: hatim.rv@samsung.com Subject: [U-Boot] [PATCH 7/8 v10] Exynos5: TMU: Add hardware tripping X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.11 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de This adds hardware tripping at 110 degrees celsius which must enable forced system shutdown in case TMU fails to power off. Signed-off-by: Akshay Saraswat Acked-by: Simon Glass --- Changes since v9: - Changed power_enable_hw_thermal_trip() to set_hw_thermal_trip(). arch/arm/cpu/armv7/exynos/power.c | 12 ++++++++++++ arch/arm/include/asm/arch-exynos/power.h | 4 ++++ drivers/power/exynos-tmu.c | 25 ++++++++++++++++++++----- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/arch/arm/cpu/armv7/exynos/power.c b/arch/arm/cpu/armv7/exynos/power.c index 400c8bc..363c20a 100644 --- a/arch/arm/cpu/armv7/exynos/power.c +++ b/arch/arm/cpu/armv7/exynos/power.c @@ -111,3 +111,15 @@ void set_ps_hold_ctrl(void) if (cpu_is_exynos5()) exynos5_set_ps_hold_ctrl(); } + +/* Enables hardware tripping to power off the system when TMU fails */ +void set_hw_thermal_trip(void) +{ + if (cpu_is_exynos5()) { + struct exynos5_power *power = + (struct exynos5_power *)samsung_get_base_power(); + + /* PS_HOLD_CONTROL register ENABLE_HW_TRIP bit*/ + setbits_le32(&power->ps_hold_control, POWER_ENABLE_HW_TRIP); + } +} diff --git a/arch/arm/include/asm/arch-exynos/power.h b/arch/arm/include/asm/arch-exynos/power.h index f2f73fa..e409b24 100644 --- a/arch/arm/include/asm/arch-exynos/power.h +++ b/arch/arm/include/asm/arch-exynos/power.h @@ -857,6 +857,9 @@ void set_mipi_phy_ctrl(unsigned int dev_index, unsigned int enable); void set_usbhost_phy_ctrl(unsigned int enable); +/* Enables hardware tripping to power off the system when TMU fails */ +void set_hw_thermal_trip(void); + #define POWER_USB_HOST_PHY_CTRL_EN (1 << 0) #define POWER_USB_HOST_PHY_CTRL_DISABLE (0 << 0) @@ -865,6 +868,7 @@ void set_dp_phy_ctrl(unsigned int enable); #define EXYNOS_DP_PHY_ENABLE (1 << 0) #define EXYNOS_PS_HOLD_CONTROL_DATA_HIGH (1 << 8) +#define POWER_ENABLE_HW_TRIP (1UL << 31) /* * Set ps_hold data driving value high diff --git a/drivers/power/exynos-tmu.c b/drivers/power/exynos-tmu.c index e73404a..bde936b 100644 --- a/drivers/power/exynos-tmu.c +++ b/drivers/power/exynos-tmu.c @@ -22,9 +22,11 @@ #include #include #include +#include #define TRIMINFO_RELOAD 1 #define CORE_EN 1 +#define THERM_TRIP_EN (1 << 12) #define INTEN_RISE0 1 #define INTEN_RISE1 (1 << 4) @@ -55,6 +57,8 @@ struct temperature_params { 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 */ @@ -196,6 +200,9 @@ static int get_tmu_fdt_values(struct tmu_info *info, const void *blob) 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; @@ -230,7 +237,7 @@ static int get_tmu_fdt_values(struct tmu_info *info, const void *blob) 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; @@ -254,9 +261,14 @@ static void tmu_setup_parameters(struct tmu_info *info) + 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); @@ -276,12 +288,15 @@ static void tmu_setup_parameters(struct tmu_info *info) /* 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); } /*