From patchwork Wed Aug 5 22:47:04 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Marcel Ziswiler X-Patchwork-Id: 504428 X-Patchwork-Delegate: twarren@nvidia.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 42D4E1402B7 for ; Thu, 6 Aug 2015 09:03:03 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id E24D83A2D; Thu, 6 Aug 2015 01:03:00 +0200 (CEST) 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 KPytWoO4kInQ; Thu, 6 Aug 2015 01:03:00 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 4B6433A1C; Thu, 6 Aug 2015 01:03:00 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id F06F73A1C for ; Thu, 6 Aug 2015 01:02:55 +0200 (CEST) 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 xcTnF8hYQCXp for ; Thu, 6 Aug 2015 01:02:55 +0200 (CEST) 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 mout.perfora.net (mout.perfora.net [74.208.4.197]) by theia.denx.de (Postfix) with ESMTPS id 710A139A7 for ; Thu, 6 Aug 2015 01:02:51 +0200 (CEST) Received: from localhost.net ([62.167.132.2]) by mrelay.perfora.net (mreueus002) with ESMTPSA (Nemesis) id 0MQPOs-1ZHjkI3O8q-00TkVq; Thu, 06 Aug 2015 00:50:07 +0200 From: Marcel Ziswiler To: u-boot@lists.denx.de Date: Thu, 6 Aug 2015 00:47:04 +0200 Message-Id: <55874729bff23e2c31289be3e25d622a231e23f2.1438813726.git.marcel.ziswiler@toradex.com> X-Mailer: git-send-email 2.4.3 In-Reply-To: References: MIME-Version: 1.0 X-Provags-ID: V03:K0:j2qprW9bN/uquG6PBMkZV3F1lwvTMeWoSlbV9+7HP0cd4lfk4xq sZ3VZ4U8LBhATDezQtrkEwmuyGOs72j+aEVmWXCgSrRaev5EaKxRLa8X1ZnrYrS7aKQjAEm BdOTWPMbvwpKvzRDfM4rynE5dSoXtEM2QH9JWwqeceprZz2I99/3bVuK+YvXjoFLlZHM3S2 oUDWChIr9VS6P2AbvIQ5w== X-UI-Out-Filterresults: notjunk:1; V01:K0:QK8yvqvAWAU=:YKLH2M0U+tAbAkNtS/nf4G 783uOTReMiAmIDWJ9pSBv4CQ4cIugHFlnv4zrsZZjOG5cb0um55zhzwP1CqWH4Fjv90lDl5bE AzaiSQ7ElvtC98CbXybSqs4PW0bWccR7YSD6M2+W2oD1fR4ByJ4iiZAvyMvsYz1da79zE5VmX KY3fKlj2iL+tsracfxUFubh5AjH79vvgCLQyMs1WPd4wHFc+8xoIjQ6b6LZHU/87IgVc42Xp/ WI6BdcS/ydF9Rby5oA3uswYdtVFw2zYS5cpFtPhJSfYQtJgBQ/JYuFFHvVADK3wVBJes+4kV+ 0M2E53uFDmHoEJ0JQYs8yzS/Q5mxacbc+JSbBSbKbp6UczSqqTaWw76Bonr1SAJuek9Fj49Xh 4Fek9HbVE1Wi6G9QRere/6AFBeaUyLftVIKDVTxwRAtW8MVjEf+q2Uf/+hohHAHcM41OXvOOk JlaiCouZxsyvML5Ur7A0JLHFc4ssvhMngj8f/KLWlZWtnXhqUf6FlY/NaV5TsQRZff+iBXlOi EOFQoHlWhoZOnCa63uANxgFa2oGlen3n902rkGo/n8N4Yrl8vGItKwuK4h+qtyTSqxh+srxPa klZBwh0bLjxTVVF3TgxFDHTivy1FATty3fcv6OYtNqJQhXNhpx/qgGsVpx0sIc3z1JspgXImf miNV3BpTLryWWQikkwiRBB3Ex7LSZgXlrYxN9zccsgN5JPQ== Cc: Stefan Agner , Tom Rini , Marcel Ziswiler , Tom Warren , Scott Wood , Stephen Warren , Marcel Ziswiler Subject: [U-Boot] [PATCH v3 07/16] colibri_t20: disable PMIC sleep mode on low supply voltage X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" From: Marcel Ziswiler The Colibri T20's PMIC enters a sleep mode on low supply voltage < 3.0V ±2.5% (2.92...3.08V). Rising the main supply voltage again does not bring it back to regular operation. Not even a full reset does bring the module back. A full power cycle was required to reboot the system. A long positive pulse on the PMICs resume pin also reboots the system but this pin is only accessible as a test point on the module. This patch configures the PMIC through I2C to not enter this sleep mode plus force it to normal state upon sleep request exit should this ever happen. Signed-off-by: Marcel Ziswiler Reviewed-by: Simon Glass Acked-by: Stephen Warren --- board/toradex/colibri_t20/colibri_t20.c | 35 +++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/board/toradex/colibri_t20/colibri_t20.c b/board/toradex/colibri_t20/colibri_t20.c index 81d344c..42b293d 100644 --- a/board/toradex/colibri_t20/colibri_t20.c +++ b/board/toradex/colibri_t20/colibri_t20.c @@ -13,9 +13,44 @@ #include #include #include +#include + +#define PMU_I2C_ADDRESS 0x34 +#define MAX_I2C_RETRY 3 +#define PMU_SUPPLYENE 0x14 +#define PMU_SUPPLYENE_SYSINEN (1<<5) +#define PMU_SUPPLYENE_EXITSLREQ (1<<1) int arch_misc_init(void) { + /* Disable PMIC sleep mode on low supply voltage */ + struct udevice *dev; + u8 addr, data[1]; + int err; + + err = i2c_get_chip_for_busnum(0, PMU_I2C_ADDRESS, 1, &dev); + if (err) { + debug("%s: Cannot find PMIC I2C chip\n", __func__); + return err; + } + + addr = PMU_SUPPLYENE; + + err = dm_i2c_read(dev, addr, data, 1); + if (err) { + debug("failed to get PMU_SUPPLYENE\n"); + return err; + } + + data[0] &= ~PMU_SUPPLYENE_SYSINEN; + data[0] |= PMU_SUPPLYENE_EXITSLREQ; + + err = dm_i2c_write(dev, addr, data, 1); + if (err) { + debug("failed to set PMU_SUPPLYENE\n"); + return err; + } + if (readl(NV_PA_BASE_SRAM + NVBOOTINFOTABLE_BOOTTYPE) == NVBOOTTYPE_RECOVERY) printf("USB recovery mode\n");