|
@@ -37,9 +37,39 @@
|
|
#include <asm/arch/dp_info.h>
|
|
#include <asm/arch/dp_info.h>
|
|
#include <power/pmic.h>
|
|
#include <power/pmic.h>
|
|
#include <power/max77686_pmic.h>
|
|
#include <power/max77686_pmic.h>
|
|
|
|
+#include <tmu.h>
|
|
|
|
|
|
DECLARE_GLOBAL_DATA_PTR;
|
|
DECLARE_GLOBAL_DATA_PTR;
|
|
|
|
|
|
|
|
+#if defined CONFIG_EXYNOS_TMU
|
|
|
|
+/*
|
|
|
|
+ * Boot Time Thermal Analysis for SoC temperature threshold breach
|
|
|
|
+ */
|
|
|
|
+static void boot_temp_check(void)
|
|
|
|
+{
|
|
|
|
+ int temp;
|
|
|
|
+
|
|
|
|
+ switch (tmu_monitor(&temp)) {
|
|
|
|
+ /* Status TRIPPED ans WARNING means corresponding threshold breach */
|
|
|
|
+ case TMU_STATUS_TRIPPED:
|
|
|
|
+ puts("EXYNOS_TMU: TRIPPING! Device power going down ...\n");
|
|
|
|
+ set_ps_hold_ctrl();
|
|
|
|
+ hang();
|
|
|
|
+ break;
|
|
|
|
+ case TMU_STATUS_WARNING:
|
|
|
|
+ puts("EXYNOS_TMU: WARNING! Temperature very high\n");
|
|
|
|
+ break;
|
|
|
|
+ /*
|
|
|
|
+ * TMU_STATUS_INIT means something is wrong with temperature sensing
|
|
|
|
+ * and TMU status was changed back from NORMAL to INIT.
|
|
|
|
+ */
|
|
|
|
+ case TMU_STATUS_INIT:
|
|
|
|
+ default:
|
|
|
|
+ debug("EXYNOS_TMU: Unknown TMU state\n");
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+#endif
|
|
|
|
+
|
|
#ifdef CONFIG_USB_EHCI_EXYNOS
|
|
#ifdef CONFIG_USB_EHCI_EXYNOS
|
|
int board_usb_vbus_init(void)
|
|
int board_usb_vbus_init(void)
|
|
{
|
|
{
|
|
@@ -71,6 +101,15 @@ static void board_enable_audio_codec(void)
|
|
int board_init(void)
|
|
int board_init(void)
|
|
{
|
|
{
|
|
gd->bd->bi_boot_params = (PHYS_SDRAM_1 + 0x100UL);
|
|
gd->bd->bi_boot_params = (PHYS_SDRAM_1 + 0x100UL);
|
|
|
|
+
|
|
|
|
+#if defined CONFIG_EXYNOS_TMU
|
|
|
|
+ if (tmu_init(gd->fdt_blob) != TMU_STATUS_NORMAL) {
|
|
|
|
+ debug("%s: Failed to init TMU\n", __func__);
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
+ boot_temp_check();
|
|
|
|
+#endif
|
|
|
|
+
|
|
#ifdef CONFIG_EXYNOS_SPI
|
|
#ifdef CONFIG_EXYNOS_SPI
|
|
spi_init();
|
|
spi_init();
|
|
#endif
|
|
#endif
|