From patchwork Fri Dec 2 15:35:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1711447 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=seco.com header.i=@seco.com header.a=rsa-sha256 header.s=selector1 header.b=eo2SG3fp; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4NNxqz32Bdz23nB for ; Sat, 3 Dec 2022 02:36:29 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 5B9848492B; Fri, 2 Dec 2022 16:36:16 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=seco.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=seco.com header.i=@seco.com header.b="eo2SG3fp"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id E6092833FC; Fri, 2 Dec 2022 16:36:13 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_PASS,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.2 Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04on0629.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe0d::629]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id C3E388492B for ; Fri, 2 Dec 2022 16:36:10 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=seco.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=sean.anderson@seco.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oODAWt+7jaB33F0+4lL2WkzdTBJ3oxvRlpK+U0KoFOLQnMBKlmJkrcaZNyN4/L9tcuFuXSUEwVMPxwiFrw9fCoJq546qvW3OlKIwykXox65ckGRc0Cir06DE009A4tMQyikeg2bBkK2m0Qs7wjwsf/L1vHojt6/t3K0GyKEKBmrxXorvp/SIhDNue0+Aa2JaABCf/ySx78O4bJ7Q5XsLVTByETy60q0xfVi1ZA8s4U/yN695ev54+KIKx1hurHJ2Rd7bwTDUnj5mcZ7ygIeqxgdUvcwxQmpA0MC5tFHCodiiosoHWLcqXWR3UBdBliRAjCq/0fgpEAIBzDfoA/ADEA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=f0K3M40TfRXdZcEEWOebZJIb/P13mFpB+Gry7YVTm6o=; b=NyUojwb27NIHcv7/MGkAFXFeCf1gFTHruzvQ05mTPETJ8pX5gBX6obNnii5on1S1jt6uvWEF6EYTzPjnukwvXl6WriNE6rqeOWOQw7cwpS1S5qzBxqbpdcOrAAeA3Ca2uH1dTRf4jH/JE1m81Co0CSjVxX7W+9JB9FaCYtb6Ml7O5GJrMWmWaM89Q/I0Oc+FOt9RrttSvmEaCVqYhAjPoEVbXZ0bZsAXVecDjyHcy8C2iiMORaYMIhQmsjHLr3du7El5dkMtS1TaG2tujm8EgwNImUS5j93SNijWTvW5iROYfr8c15ZtJMflLUf9CuusFC8rdYMugDIXvbbDSDq3fA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=seco.com; dmarc=pass action=none header.from=seco.com; dkim=pass header.d=seco.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=seco.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=f0K3M40TfRXdZcEEWOebZJIb/P13mFpB+Gry7YVTm6o=; b=eo2SG3fpqfPcbOzJFHHC67tgwquRo/59HfTlpnpWit96yY7RmBWOrJlKzkCjscuy1+2aAh8QIYNBOcJcDZ6Ok/T/GxfYQE6iHqL7AwkgTLu/U90V5sBe56mtvz99yFXI4S3LF/caPisPDI4mZCCIGeZgC4mnYcHlqSNxzr5BrFNRKUw0FSrtVTkqoKNTY3P2anMM7USY/qw9oK5u6n7cCtK+zrQZ5c926SRJaNJiSeqg9rNZb59ZOMqoZaAUNiq3NHwTyIMsjqwNqqEgNpRPFjWOe3qcIckU7eD+y+eZBullkOWP0kUpF7u72OUmUsN6OvTFogx/0wILg00EPBSXTA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=seco.com; Received: from DB9PR03MB8847.eurprd03.prod.outlook.com (2603:10a6:10:3dd::13) by AS4PR03MB8580.eurprd03.prod.outlook.com (2603:10a6:20b:587::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.10; Fri, 2 Dec 2022 15:36:08 +0000 Received: from DB9PR03MB8847.eurprd03.prod.outlook.com ([fe80::2b95:1fe4:5d8f:22fb]) by DB9PR03MB8847.eurprd03.prod.outlook.com ([fe80::2b95:1fe4:5d8f:22fb%8]) with mapi id 15.20.5857.023; Fri, 2 Dec 2022 15:36:08 +0000 From: Sean Anderson To: Simon Glass , u-boot@lists.denx.de Cc: Fabio Estevam , Ying-Chun Liu , Sean Anderson Subject: [PATCH] rtc: abx8xx: Add support for reading RAM Date: Fri, 2 Dec 2022 10:35:19 -0500 Message-Id: <20221202153519.888910-1-sean.anderson@seco.com> X-Mailer: git-send-email 2.35.1.1320.gc452695387.dirty X-ClientProxiedBy: SJ0PR03CA0236.namprd03.prod.outlook.com (2603:10b6:a03:39f::31) To DB9PR03MB8847.eurprd03.prod.outlook.com (2603:10a6:10:3dd::13) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9PR03MB8847:EE_|AS4PR03MB8580:EE_ X-MS-Office365-Filtering-Correlation-Id: 3a523c79-f88e-4808-c329-08dad47aedb0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: RXF2dfQwkkWlOoJmCq3yPJ5Tq6RUYNBEyvIHUYBOFPRm9rrOWVoE4MCkzsCONupwuCv3n8BUxhHqBaDr3Sbi5IwHgAE87wNq3Z6LEyvOiZBMurjMM4BTQYTqeMRGcETKDu5S7NCDMdG5pxePM40fL6yCPJt7Hl6Cg1cXWzlYiS/9l5nQTigB4hGgB5J/Cd2PZuZsritRs8iSHoJbwZpT7qjOpqqKYJOIZZzOdc1nyTzxJFRTaY6Dbi1j/kbxZxJZTIuQtx6x1+892c4sYVZpKFv3aV1PW1E/UHTHcNqYdzssAcG+/WL1fOryM4NBSk12aVp5olij5/Ky1t+q2S6dAdBvx/eCkrr1GCuaBTTjKbk+ooZg54nHFqRSAbey2qz8IEKsOqWkk+Omn8G9IOxYS7PECZoWALJwel5ij18TK+fEhGeUsfkvJJOMk8xUBH3Mcs/gHjbyMgy/JkTfiFg8Cbx6XHmNjquJEs2aefYnOnCv8hDSeib/zBTwe8nAeS5dulJAbeZjq6Tiiej9w/lOGHRKridQlqPP0BFZoGJdnabcfxF0p3wQdfioWW1WCL42Kz1meqvpwBG23pGNR66jDC8h373YqubN6ue3AxAO8wA/447nFxcRUwSwbMUqIxjQWxOzqrz7MKgdkZKE5D9B4Ji2goh7hUR/oTs0gTjB1FkInGwSGGtu01hrsy7wfGn9/+ByTbFbpl0pnceqWiUYxg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DB9PR03MB8847.eurprd03.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(39850400004)(136003)(376002)(346002)(396003)(366004)(451199015)(6506007)(6666004)(52116002)(107886003)(6486002)(6512007)(54906003)(186003)(26005)(478600001)(316002)(4326008)(8676002)(66476007)(66556008)(66946007)(83380400001)(2616005)(44832011)(5660300002)(8936002)(2906002)(36756003)(1076003)(41300700001)(38100700002)(38350700002)(86362001)(32563001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Tnnp2G/WuiVSt61XN6C27s122skc1OK7c1yfhiRKD4y91lDW/qDSA+3tfKFIE8dIxOjBFHx2Io2ike29C1LxdUZtatk+5DD5Wto+D6uXvb+m2vS79FLB2ykbUYE/FMYj1H/JO1IuxxVN4vDGOlhjXFVt/LWg/YEv5phmU2YClKHVqZHC67tZQdSDjVYWqXKNGsfJ925xZK0092BF3a6SKvNWwSE5/1JWREkHQ8ODyKS3eYKAPMtNUOY7LcdAilFR7sqAYdnFpRwjjNhEEN2GRSX4e0mVZwXcllD3rUus5Z7bjuOU0pJxtYcdj3XYyoLJ2g/53B7V3PYczdY1cR/wqvD2Koj+8nn59Rm+Z5XXHDpRLrOT3NhEf8qQOPEZzGlWACDeXHolyQz/zh8luH86urEBniANNRN1u8COFEmDR3XZnkUQsYgs0JG7YSxHe9iIkfc296eq07QxMFqKZb0NL1QinZUObFvxZyXGyhhJZyTbn0u6FdiWnbtnI6Xfd+2gaH+cPKSjPiRx2wK6GYstyKxmYxX8Ky3cHUvy60oPW7tlyhEVemzSIP1zVef7YU42+R9fWupYX1RGfe7PVxLk+fRaNG6DMeXNuLRju7vUVt9gJS4Y8hWSaN/4JPBo+RI+5wFmHG9GgNgK9p1/bxLK+ZgNyaVDX+y5pzvIp+opQ/UAj7EGSP29OJ/KYfIo7DuRc/Nj1DPo6EPE0phk9WrF8t0nvBP4FwSj0G6EKq/x98g2A8j0UR5nkvD7kxu75ccAl8y12I8nkfrZfqwVv/gbapPNFbMKhUV36JjXd9l5e7dXMl14gqxcmFDrknnHXey22TDqA/oRtCcmb2LI7KutxvPl460vjJzu+bOpqmQ2si6wrskX/93hMMUpso+JCbftFjxTu08qyr/rPXtgrSVGl78JxfZTEL6XkkZrngl7RvAU6m19wLAZvL0Kj+ewOQC3M0WFBoy++rwhnuYdNj0FD9RKAdLYx4Oz3/g0WqFL1GDAKyiCa3GtI/QQ1tqak/hK48bwfvra/JHmhVOC8jAtTPTPYUCKsWg3BLpIGisih6zi1rhDNN9EgKRy1vfFdG4IQfZ5BopmjwH0wXfLiWEL0utRUmc76ncC6PI3xqLQeJExYxRws8Nso5XQoNm4RGrKZDz5v4qpyKU3jWfbJWUjooLym+flp5V6v+FlScedNjjccW36wcq3rM0kcJO42K0mGSMWkoVYYUftRnxqPrrBwdoyXaBCDMdtf+Gi0sfmZohbuc9yBiqX6CnNSkbdICJ8lZ1ng4ut/j+BXjDbFL1TV2SlufS3wAvoZ2RQNDn104JgngzdXHD47NEY1NBTVCw0qrJCT8q1aPyNxDLHJhgacKRIVtNjbKL5atG3HNzYAvDRmefk9mQdw149Rz0pQtgTiZv/53JPb7DoXhnmwXkErp95+GcdTvwRacoBLsNc365i6mQV1xCAZ5x05eCJLY9GrEpQZiABaTGouP3e3rv3wkwRLZzVJ8TbSh2MgEsu/OX9KRZWWt0wT90uMxNQ3pIXxFyAOz6XxZqnZNJkNSiDZ3bEC7e4vgNePgVW2NYJFIje2ilOeUJcnP+zpt4yhhVYIaxm/2WO5quIEYJIgIZ4ag== X-OriginatorOrg: seco.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3a523c79-f88e-4808-c329-08dad47aedb0 X-MS-Exchange-CrossTenant-AuthSource: DB9PR03MB8847.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Dec 2022 15:36:08.1018 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bebe97c3-6438-442e-ade3-ff17aa50e733 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: q1G8FMoQbFz4eK3X9cvgQeaiXBhmF15CcDhPcdoBX6USPng3xj7tOmYwRQsWDnAqxf+30P6bX056EmBfalVkEw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS4PR03MB8580 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 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" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean This adds support for reading the battery-backed memory present on these RTCs. This modifies the read/write methods to access the RAM instead of raw register offsets. No one was using these in-tree, so we should be fine changing them. We use the "standard" address space window to access the RAM. The extension RAM address register has some reserved bits, but we write the whole thing for simplicity (as these bits default to 0). Signed-off-by: Sean Anderson --- drivers/rtc/abx80x.c | 68 +++++++++++++++++++++++++++++++++----------- 1 file changed, 51 insertions(+), 17 deletions(-) diff --git a/drivers/rtc/abx80x.c b/drivers/rtc/abx80x.c index 528b06cbd6..823aff03f5 100644 --- a/drivers/rtc/abx80x.c +++ b/drivers/rtc/abx80x.c @@ -17,6 +17,7 @@ #include #include #include +#include #define ABX8XX_REG_HTH 0x00 #define ABX8XX_REG_SC 0x01 @@ -88,6 +89,16 @@ #define ABX8XX_TRICKLE_STANDARD_DIODE 0x8 #define ABX8XX_TRICKLE_SCHOTTKY_DIODE 0x4 +#define ABX8XX_REG_EXTRAM 0x3f +#define ABX8XX_EXTRAM_XADS GENMASK(1, 0) + +#define ABX8XX_SRAM_BASE 0x40 +#define ABX8XX_SRAM_WIN_SIZE 0x40U +#define ABX8XX_RAM_SIZE 256 + +#define RAM_ADDR_LOWER GENMASK(5, 0) +#define RAM_ADDR_UPPER GENMASK(7, 6) + static u8 trickle_resistors[] = {0, 3, 6, 11}; enum abx80x_chip {AB0801, AB0803, AB0804, AB0805, @@ -112,29 +123,52 @@ static struct abx80x_cap abx80x_caps[] = { [ABX80X] = {.pn = 0} }; -static int abx80x_rtc_read8(struct udevice *dev, unsigned int reg) +static int abx80x_rtc_xfer(struct udevice *dev, unsigned int offset, + u8 *val, unsigned int bytes, bool write) { - int ret = 0; - u8 buf; + int ret; - if (reg > 0xff) + if (offset + bytes > ABX8XX_RAM_SIZE) return -EINVAL; - ret = dm_i2c_read(dev, reg, &buf, sizeof(buf)); - if (ret < 0) - return ret; + while (bytes) { + u8 extram, reg, len, lower, upper; - return buf; + lower = FIELD_GET(RAM_ADDR_LOWER, offset); + upper = FIELD_GET(RAM_ADDR_UPPER, offset); + extram = FIELD_PREP(ABX8XX_EXTRAM_XADS, upper); + reg = ABX8XX_SRAM_BASE + lower; + len = min(lower + bytes, ABX8XX_SRAM_WIN_SIZE) - lower; + + ret = dm_i2c_reg_write(dev, ABX8XX_REG_EXTRAM, extram); + if (ret) + return ret; + + if (write) + ret = dm_i2c_write(dev, reg, val, len); + else + ret = dm_i2c_read(dev, reg, val, len); + if (ret) + return ret; + + offset += len; + val += len; + bytes -= len; + } + + return 0; } -static int abx80x_rtc_write8(struct udevice *dev, unsigned int reg, int val) +static int abx80x_rtc_read(struct udevice *dev, unsigned int offset, u8 *val, + unsigned int bytes) { - u8 buf = (u8)val; - - if (reg > 0xff) - return -EINVAL; + return abx80x_rtc_xfer(dev, offset, val, bytes, false); +} - return dm_i2c_write(dev, reg, &buf, sizeof(buf)); +static int abx80x_rtc_write(struct udevice *dev, unsigned int offset, + const u8 *val, unsigned int bytes) +{ + return abx80x_rtc_xfer(dev, offset, (u8 *)val, bytes, true); } static int abx80x_is_rc_mode(struct udevice *dev) @@ -334,9 +368,9 @@ static int abx80x_rtc_reset(struct udevice *dev) static const struct rtc_ops abx80x_rtc_ops = { .get = abx80x_rtc_read_time, .set = abx80x_rtc_set_time, - .reset = abx80x_rtc_reset, - .read8 = abx80x_rtc_read8, - .write8 = abx80x_rtc_write8 + .reset = abx80x_rtc_reset, + .read = abx80x_rtc_read, + .write = abx80x_rtc_write, }; static int abx80x_dt_trickle_cfg(struct udevice *dev)