From patchwork Mon Jul 6 08:20:33 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Marcel Ziswiler X-Patchwork-Id: 491468 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 6D53C140DB8 for ; Mon, 6 Jul 2015 18:22:56 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id A427A4B703; Mon, 6 Jul 2015 10:22:32 +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 usM1slkCV7_N; Mon, 6 Jul 2015 10:22:32 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id B2AAA4B6C7; Mon, 6 Jul 2015 10:22:27 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id DF0E24B672 for ; Mon, 6 Jul 2015 10:22:24 +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 0aC2I7sD6Rrk for ; Mon, 6 Jul 2015 10:22:24 +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.196]) by theia.denx.de (Postfix) with ESMTPS id 1CD404B6E2 for ; Mon, 6 Jul 2015 10:22:13 +0200 (CEST) Received: from localhost.localdomain ([46.140.72.82]) by mrelay.perfora.net (mreueus002) with ESMTPSA (Nemesis) id 0MPWh5-1Z7sv729zt-004g5T; Mon, 06 Jul 2015 10:21:41 +0200 From: Marcel Ziswiler To: u-boot@lists.denx.de Date: Mon, 6 Jul 2015 10:20:33 +0200 Message-Id: X-Mailer: git-send-email 1.9.3 In-Reply-To: References: MIME-Version: 1.0 X-Provags-ID: V03:K0:0h08KLJg7VtjX/sWJiAuYVftVZ0Qy1j3a57v68l4MxJn3XwkA8Q IhyyC7o9dDvgcxbD4C91o/l9KgksVeMwKFLzAQGLo8lyPx6ZuAVNMrEJ/9Yb59YwsnrN3e4 Wifvct7xqaNQn/t7UmVVmhyMGVjIAxtKUAZGsJZZgWCgXygpOBzREYN/VJqBal60CuEz7iU 968xi8eF4l5hTVRk26G+Q== X-UI-Out-Filterresults: notjunk:1; V01:K0:Mu4isPM48oE=:ElpBplX/EnnED8CXWMGiab lXoOSQiDKAAXuoOEVU64ayqheNWf1+hrKASG6fus6kswutoOabk1tZfnrqg/setFpBc1Dxl8r l8sf9DUZ/FUUbU3MDOF/WUXJmg+rmf5lnyyZ4tQQo/njXmgK4KCPf1piuVLStZwtvv6AgnH/N XhSPUmkLckUZtAk0zViCGmnU3iYXyzT/eJ963VAnWPUi6MvCIuQZBD+hesOJ97Bj0Ti7L0i8v /OCob+thBG72iZO/JKeu173ZRHRCLVVAeIiBWW/OZEQ9vvrxNgAs1u3tY20t4K/jSjfUiiM3f 9xNY0Xa7HD0eDVhIYexoF4uAmq/O+GcMmaLIgT/YGqLqVY/0arrAB82/bnN7Jt3EODuheQI8y iTbfg7vRqeXl8iWHKxYNYyk1xduJ4byc9SABCu15LRt8LWIbFDW/BUU1z0vODcdAJraXvHU3C qKREQBO9FNKhN6iED88fffT+5OylqBBqBCjrP7dfwXM+B6eDw62nfrJbntD+v7+NvZDveF/bD 07ez6iSsSR+0y/drFeYi/jA5Q19jSo5SuUXoR1f4F6JWDqa6ZCtThbQoayM+S9K3F4UAi2DVD mk6T1PJWQumDfX0vi2c9WiA3PjIn0D3ohgI1LnLkaEVcRtjpOvuQnO6+Nxm/nGtZxr3g7wC7I O+v5USK25xAixg7WmNj+0C1Vt0ZLK4vbCnHnMqW6jtPCIiQ== Cc: Stefan Agner , Tom Rini , Marcel Ziswiler , Tom Warren , Max Krummenacher , Scott Wood , Stephen Warren Subject: [U-Boot] [PATCH 07/13] 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 --- 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");