From patchwork Sat Jul 10 05:58:23 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anup Patel X-Patchwork-Id: 1503430 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=2O72U5vq; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.a=rsa-sha256 header.s=dkim.wdc.com header.b=T6tdRPsC; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=sharedspace.onmicrosoft.com header.i=@sharedspace.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-sharedspace-onmicrosoft-com header.b=mFMyGjYM; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4GMK932FMdz9sSs for ; Sat, 10 Jul 2021 15:59:03 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=UkjqSclLu10QsqoTRhWAkrzGpY4E/ut5cdJ9QS0ULcw=; b=2O72U5vqUCTA91 5a/ndytaRVOijvkkDCO0IbaZmEG1nHzbfo6j//xSvWeCkkPQY91YDhlqgC4EYLMea2eSNsu8chdOV 79h/hdVfBoC41Vh7rmtZRXSIDiwlMn/0qKz8sPfoRVlb2hRemPUn8zTi3wDj4Ud6hrohADfrP2BAr RvWNTyv2btVhwKWBdxJroj69gmMizS6tICJCPBe5GuP+Cp1rG/tOgXHHP5DW+lAhJlCEVHAufGjjI GRSVB+yQ++kaghLok1FgFKpBxpSVyn5nQsLaP2OOazk4K/8twzIMpE52D0Z+HssnNFM/Xy+yqrGk6 Yp3hs7EU+tVncrTl3J2w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1m260v-00384G-1G; Sat, 10 Jul 2021 05:58:57 +0000 Received: from esa1.hgst.iphmx.com ([68.232.141.245]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1m260s-00383U-8f for opensbi@lists.infradead.org; Sat, 10 Jul 2021 05:58:55 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1625896734; x=1657432734; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=xM4j4ScIigFUAnKGx7ZYJjNXPbY/Enzs9aqF4Pm5bbw=; b=T6tdRPsCcLaEmbsKndcfOBNLsyUTY8PFxUyZJCwpRcDLXD5KMKKF22sc QC5uQRAjNcKC3ziMb7XDgzd538EUcLcH1nJkj8+VlfFsUuvqXyeaFyauH 9TVQdqx88QRrNf4/eROVtqJwa+GxJOUfF08gTmO8FOG4n6hqmMT3HlQny QLYTMGpDSc7RYrL7Sgm+vX7gLfFDxNEt8SUrWYMj3kOFpDhgkEui8yo8s wGIqIFz0ebGtT6Xxnxh70k8SzrOmippir/iQYqkHPBoroHGjO6GrtcOTE pE1WDm/RP+HoChoZQcZuGKhPQ3Bg52dBGUr3DAP0eAsoSeqt1bpzbNy0u Q==; IronPort-SDR: c1tKIoIWYnN8NBd5AIZxZcoX3zjIGYaa+oabN9LHAwVJbM+L9ZQdNNv8PL0PgpB0YaXI4gQHv7 t9GUPlgKj5Jr04ylEHaUzBD+rrxXY9W9Nabd9vsZOFXioIu4dMHizCspoacZFXFE1LRtKVTPLj j575sCboUVR/BGWi+Yhsqmrlsw3rQQex1hY5+WT255xeTBLCwwxzmj+j/2mWCfhYObrn55rYbr RmI6rpsTARJZgKjbSSAzbbILKFX2aA4X+ZofsLlFD+syVdtBYzE+gMF2CP5IEBVk8nVlLpFtx+ ofk= X-IronPort-AV: E=Sophos;i="5.84,229,1620662400"; d="scan'208";a="285758276" Received: from mail-bn7nam10lp2105.outbound.protection.outlook.com (HELO NAM10-BN7-obe.outbound.protection.outlook.com) ([104.47.70.105]) by ob1.hgst.iphmx.com with ESMTP; 10 Jul 2021 13:58:53 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KB6Rz2YIrpn2uPo2tmTOM0ee1RWOKfp5Yvth1kYlA772RfRB/UpZbTCgczbeaq5p8WigJ8+a2d81ZpqkTVkXbLwZf4oROUxMKmIJ2j0cn3O6QqRdIRoLbtwrI0mcoXJfuD1+YvQNTopKJ/5hXEqQAS8qP2I7BGL/Bsp1GSKjBtLCs9t0DghshOOwfF8sKN8+bkC2ubwmjD0hjiGIyXlCyNPwbnOJNKBg9gjXmCESBOF/qNL16NCpbUs46Z3Lazt9eIhBPbWUixmI+nlCyjGT0Y9Uc5mNHx0pg2ZvVcixjHbYQs93QsiUeOPt5Ev0+hDtTK1vtQ0MYjZl6vRtVXWdiA== 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-SenderADCheck; bh=B5jDmL0w35v3BWM9Qh/wijzTzc1QALzmcS/kzfOlaJg=; b=mS+gBrdxHj7UB3O2hWzyNI9Mx6fV1jsqtwmYKuCm9BOiOs1uAmysy0JOAEMCbdY+rdjm5pV59yddxJdQGkPcmyhcpC6O+EdpBtDziy589YDIgiyCQNO0+laCtheIDbzTXOtyn2rUqehfOP8ox+MRmNaqK/kJwwG/VJJTaskUgYjTTjdgsW0FyJp/mvFXaMMdzle8rdnAjfqQhdrxhLGdqy+xLcqT9iHmO2RHLW3+mrQhgIa6rFwGBadc37WPcO+PVhJ3wBeZugAr0bqex2rJmAsVzc/pTTs2X4opOTpef+zdze2D/d+dM9NREedMkQCgNWPkAvvVofM5gyPCAbffgw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=wdc.com; dmarc=pass action=none header.from=wdc.com; dkim=pass header.d=wdc.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sharedspace.onmicrosoft.com; s=selector2-sharedspace-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=B5jDmL0w35v3BWM9Qh/wijzTzc1QALzmcS/kzfOlaJg=; b=mFMyGjYMdXil7kqr9O4NnfRiihw+1SEte2ztkcHChHpxSxcx1NmyXQnSHvQajn8TEgDwCTsabgEi9g2QuCfzUkUE9rH8ORp/wfMQspMCZvP3X9PXhldcycUiBNDiNw5OUOhYm4tl1aNF/L8iaPjp5H8aLZ2ZE82cfuhRA7mPmUI= Authentication-Results: wdc.com; dkim=none (message not signed) header.d=none;wdc.com; dmarc=none action=none header.from=wdc.com; Received: from CO6PR04MB7812.namprd04.prod.outlook.com (2603:10b6:303:138::6) by CO1PR04MB8234.namprd04.prod.outlook.com (2603:10b6:303:161::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21; Sat, 10 Jul 2021 05:58:52 +0000 Received: from CO6PR04MB7812.namprd04.prod.outlook.com ([fe80::a153:b7f8:c87f:89f8]) by CO6PR04MB7812.namprd04.prod.outlook.com ([fe80::a153:b7f8:c87f:89f8%9]) with mapi id 15.20.4308.025; Sat, 10 Jul 2021 05:58:52 +0000 From: Anup Patel To: Atish Patra , Alistair Francis Cc: Green Wan , Anup Patel , opensbi@lists.infradead.org, Anup Patel Subject: [PATCH v3 1/5] lib: utils/fdt: Add fdt_parse_phandle_with_args() API Date: Sat, 10 Jul 2021 11:28:23 +0530 Message-Id: <20210710055827.1535906-2-anup.patel@wdc.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210710055827.1535906-1-anup.patel@wdc.com> References: <20210710055827.1535906-1-anup.patel@wdc.com> X-ClientProxiedBy: MA1PR01CA0107.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:1::23) To CO6PR04MB7812.namprd04.prod.outlook.com (2603:10b6:303:138::6) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from wdc.com (122.171.166.125) by MA1PR01CA0107.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:1::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21 via Frontend Transport; Sat, 10 Jul 2021 05:58:50 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: accac915-fef8-4ae4-c59c-08d94367cb6b X-MS-TrafficTypeDiagnostic: CO1PR04MB8234: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: WDCIPOUTBOUND: EOP-TRUE X-MS-Oob-TLC-OOBClassifiers: OLM:6108; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: b2Wu6F2+mFWe97TnyPMc0JBBfOrBBZE4v44Q5nAOKmNjJ12qBknh2caHhnMfz+9rkwOrgzVjUbZpwe2++lyLKuLKommNZFDmswvtOGFH/wRsBvlUz/O2bybpjhL149hoCAqzkCub5kBppzxCXwv4qZ9CVc25e0a5VdBvJnpGZiU7GJ1f7/es3ud2nQYOroRzqU9knJqSQqaeCuShwh6AWqAQAvzJGwI5Vzr+Y8HDu8RLo2O4v9QtELXY1IUlV1ep46ddPIsOOVtTrCifI+umiwBKPNjLvx1VzejG9aXdjgyy4KLKg7sZqJUZGURNWtu/G2tIClDeP4Tjqn/HwQ0yTFFC8v1Axxy+usVVT8Zgn9f9MFuEvFyO+NIZclydsJZkDxRkOeciaJmZ4A6cPRXUrOqSm9GQsbG9KahQl2g0skUFmlqLzdkf5PKXsLbRdlEA57wPi4gK8UEhZtV6PPO9eUBRgP5mJoCQyect/MG3/QPd1yBdESMrcJk8VgO1zzvX2IAd+1VbDNuZ01AEy025LtTAqXrtA2k1+rEbLHyCusVk5RMhZeb6mxzdo9WJFVn6uQp8vZS4MalG5MQl/WUX7EUlhBHHwYLDhExdbYnZShXTJVKtpyuT9QH0HWR3miX9B2qRKH8KxRpyaxX6dXrcbH83xnE2HI567Cidd51ToyEUzLj01O9uQGzitFB/miGJz1Gxclt2Ieb9ChnUIWTU+A== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CO6PR04MB7812.namprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(366004)(39860400002)(396003)(136003)(346002)(1076003)(44832011)(2616005)(8676002)(2906002)(7696005)(38100700002)(52116002)(8936002)(5660300002)(55016002)(110136005)(6636002)(86362001)(956004)(54906003)(316002)(38350700002)(6666004)(4326008)(478600001)(66556008)(66476007)(26005)(66946007)(186003)(36756003)(8886007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: spsQO1gsg3YdV9SEMnY1LrHwc7bSUVKrgR82Uv7fNZy4R8c/F9uwSnMGQRLWnPtPCLitPdHEuyL2atUWARIuuIgeSRQDjQZ4MBvaYYctFIlDpzgeeFTYITO96k59glIUHSmQi5dhS69S7c15b0m04j1PM+iTZW079GmER23YIT0M/o6/9AEsK+K9b4rNByW+au8BhOQ6LxoL5rMDMGoKv+7JWjraAP2ki9wTyy4XFIKkw4qhELItxpLZxTuInniWYWGVTwAwHgTlNVDWXJR/CaBbkcGfCfSE31ZjP5HZ+jpseonPU33Av0d/5+TBRSrlIbrxN8L0+UVRRWWKg0AedbNh8h7EJs2Oi5VuImK+SJgwUmpoaSSJ7HAzWgBuuSMWPB11nTskqGIFi1D+3RQLIO0vxyPIPUwYl0YhdqsRWNP9qKLBRWkXii30Z1izuZPjXm0JKcQVaz9FYpRiKThrgBeFt9XLiR3oN8+khxGPTRVthj6C6pSeA6SPNZOaq6D4e+ILDPpuzVjnNGVZJoNtCHDexsTKDilcMi/BNBMUMsifqfN6JOENUC+ol7SsWPF87tcnDVsqD4kqnRVpO47cQfJw88dD2j6+z4J6nFX9/vnDf63IXWwx+tp89YkpxjGTd/s4htjBdFS9Yec2DQX3noa9omNFafnqxVV/+icckwU4Am5nDWKeuWzl7OcxZTmM8/Qh9pjb10lzrhtwEtGBktIEpsQZVejIHu4bTAjG+cgPDhE6q6E6iFIRVrNrmTIm2XSqUr+ShTCpWEP336oZJW5pzK4pTGD4EtAq6FtTCoDtBynm+xbu4WiWcVHfJuBbf/S4OeJsXzzAJYK7ph/B2PoWytsiBmZMyT+U7vGcVrC6D2+NegU3CQswg+SnCZK5dHir38B/L356GgCFidOwx3SZkld6AAEVhLWHaasYhSdKZRcFzDmaZkV7XJsc9Zbqqolhh9hcNzSFXEKUN2jST5FWoXzuAbnsyyfthU5GAxD1l6dtxPGqtckeLX5XqWMf/pt9WlVDThCVDAHW42RVS1COgG08SX+IHO0rFV+ne49MuHTxEzvjhwp2gSenvZGJa15MjO3B4pjWYx6OVgdUx4wByVPwzBFaceMhY0hM1xe9SBqFWx48V4AH8lwP/GvZSJZFmj2237frvlSaROnF7EH2xgnU/jzSl9v5Kkyxiw896mQe3mFGCAyi3DJwdY6pzuAZBJHMvbZbVZCr5xdk33axN73JSekKIPxp1Du9FEM9LrEHD6EdjLCWGlmnqDC7NfTm/jaLn9bMVZzYunQc+iCAlGFrD9I33+guwr/2D5AqmXMOXQAas/FdWcCIlN6s X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-Network-Message-Id: accac915-fef8-4ae4-c59c-08d94367cb6b X-MS-Exchange-CrossTenant-AuthSource: CO6PR04MB7812.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jul 2021 05:58:52.5266 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: bwW8+Mo+VcXzQfXrR6lYbVLC3N5Ytvf34QPYAanTjdcZhE9BRCP1dtw+bykhsa0BfWKgF9Ks9mwG50d8zZtpbg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR04MB8234 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210709_225854_357648_75EBCCC8 X-CRM114-Status: GOOD ( 15.94 ) X-Spam-Score: -2.5 (--) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: The libfdt project does not have a generic API to parse phandle with args from a DT node so we add fdt_parse_phandle_with_args() for this purpose. This new API will be useful to FDT based drivers. Signed-off-by: Anup Patel Reviewed-by: Atish Patra --- include/sbi_utils/fdt/fdt_helper.h | 11 +++++++ lib/utils/fdt/fdt_helper.c | 47 ++++++++++++++++++++++ [...] Content analysis details: (-2.5 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [68.232.141.245 listed in list.dnswl.org] 0.0 SPF_NONE SPF: sender does not publish an SPF Record -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.0 MSGID_FROM_MTA_HEADER Message-Id was added by a relay X-BeenThere: opensbi@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "opensbi" Errors-To: opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org The libfdt project does not have a generic API to parse phandle with args from a DT node so we add fdt_parse_phandle_with_args() for this purpose. This new API will be useful to FDT based drivers. Signed-off-by: Anup Patel Reviewed-by: Atish Patra --- include/sbi_utils/fdt/fdt_helper.h | 11 +++++++ lib/utils/fdt/fdt_helper.c | 47 ++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/include/sbi_utils/fdt/fdt_helper.h b/include/sbi_utils/fdt/fdt_helper.h index 871f9b9..55b9382 100644 --- a/include/sbi_utils/fdt/fdt_helper.h +++ b/include/sbi_utils/fdt/fdt_helper.h @@ -17,6 +17,13 @@ struct fdt_match { void *data; }; +#define FDT_MAX_PHANDLE_ARGS 16 +struct fdt_phandle_args { + int node_offset; + int args_count; + u32 args[FDT_MAX_PHANDLE_ARGS]; +}; + struct platform_uart_data { unsigned long addr; unsigned long freq; @@ -32,6 +39,10 @@ int fdt_find_match(void *fdt, int startoff, const struct fdt_match *match_table, const struct fdt_match **out_match); +int fdt_parse_phandle_with_args(void *fdt, int nodeoff, + const char *prop, const char *cells_prop, + int index, struct fdt_phandle_args *out_args); + int fdt_get_node_addr_size(void *fdt, int node, unsigned long *addr, unsigned long *size); diff --git a/lib/utils/fdt/fdt_helper.c b/lib/utils/fdt/fdt_helper.c index de77196..a970c0f 100644 --- a/lib/utils/fdt/fdt_helper.c +++ b/lib/utils/fdt/fdt_helper.c @@ -72,6 +72,53 @@ int fdt_find_match(void *fdt, int startoff, return SBI_ENODEV; } +int fdt_parse_phandle_with_args(void *fdt, int nodeoff, + const char *prop, const char *cells_prop, + int index, struct fdt_phandle_args *out_args) +{ + u32 i, pcells; + int len, pnodeoff; + const fdt32_t *list, *list_end, *val; + + if (!fdt || (nodeoff < 0) || !prop || !cells_prop || !out_args) + return SBI_EINVAL; + + list = fdt_getprop(fdt, nodeoff, prop, &len); + if (!list) + return SBI_ENOENT; + list_end = list + (len / sizeof(*list)); + + while (list < list_end) { + pnodeoff = fdt_node_offset_by_phandle(fdt, + fdt32_to_cpu(*list)); + if (pnodeoff < 0) + return pnodeoff; + list++; + + val = fdt_getprop(fdt, pnodeoff, cells_prop, &len); + if (!val) + return SBI_ENOENT; + pcells = fdt32_to_cpu(*val); + if (FDT_MAX_PHANDLE_ARGS < pcells) + return SBI_EINVAL; + if (list + pcells > list_end) + return SBI_ENOENT; + + if (index > 0) { + list += pcells; + index--; + } else { + out_args->node_offset = pnodeoff; + out_args->args_count = pcells; + for (i = 0; i < pcells; i++) + out_args->args[i] = fdt32_to_cpu(list[i]); + return 0; + } + } + + return SBI_ENOENT; +} + static int fdt_translate_address(void *fdt, uint64_t reg, int parent, unsigned long *addr) { From patchwork Sat Jul 10 05:58:24 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anup Patel X-Patchwork-Id: 1503432 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=l1UGZgcr; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.a=rsa-sha256 header.s=dkim.wdc.com header.b=g8jQ4YqE; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=sharedspace.onmicrosoft.com header.i=@sharedspace.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-sharedspace-onmicrosoft-com header.b=SEEZ9tua; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4GMK934Mqsz9sWc for ; Sat, 10 Jul 2021 15:59:03 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=yfGJucLm1qDvzZ+5RGvjvNz8zio1aRHAUODmDR+nOug=; b=l1UGZgcrVJ0Lqr Pyr0Hm3YH27SaSqEG+2fVr1AH8pbikOLg0KQ2maHKN4CVGVnjMsMXsWnYtUwkHFutd4XR2xdO4YWf 1rsOiab818yX6Omie6MKxs0UaFsKE/7W41AS9RKPQKnS/LL9nq69yeBMZvIklyGu1BDXAJZPSWV0E CN9WSlvBesUq0eJB5hBhuI3nAglWJRybyYipYLMi4T5V7xJBI0089255tYqI6xx2CqCnGjUHI48DY B6hqf+m53NgU8YAarcI0UcCR9bMIdnrHBcAozxLr2yXA2vtd0i4PTl2X+x+6UnGuUUeZz89l+GvB8 w1UFQzlGE2EAN2Jgo5Zg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1m260x-003856-LC; Sat, 10 Jul 2021 05:58:59 +0000 Received: from esa1.hgst.iphmx.com ([68.232.141.245]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1m260u-00383x-Jn for opensbi@lists.infradead.org; Sat, 10 Jul 2021 05:58:58 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1625896736; x=1657432736; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=0s6ICxhL1Nl2/5Qi9xFknQFbThjowoKWoY7wS4WjyC4=; b=g8jQ4YqEsgcFAP5ro4VLpL5frkB/NuoKhyjVl0bcYOh7yxC6V87EDQrQ nP7gd3IfBGUPu2L+RxP/E1E7O/irFmmUwPFJ6jfz4xTrinJiXoGIc2jiu IcQYfWQKY8nA5DVwUHQOx1p2E8jj6XmPOVOliczMMTW6gohpyI6MGDgkB M/RqFh9lUbkT/FAAV6/eL8XTQChEzjj8c2uDfclkvlgHhhRAtywcR1V1q Pn+DqPNntSJZx5syywW8gAIqBnQyrnpnKm+FXUGIDdXZLOI4OAVaEC8iq kHeUqhAmym2PL1Z2Q4vMpMaUz2hCUciLYaYQi0mBMmmHJGXk61JSpI2oZ Q==; IronPort-SDR: IdG09nwCnqSm9LW4talxIiu3EgrAGReUNtuYU7EIPQvepDo3jSk1pnw4IGp7+ZfEUBOXuDTdVs /DWmUf35foApEKN3JM4MNvnPc56uHBIM3O4Nx7xNG7cgZ2OTvd1XNKuKQmun+BhqeiAUBdQPzu LiYL0F4BvcN6e0Qdcbg+prAuvwobe7JVgDBoSfAKLHvHdjfK9OwyEVOVeR36KKteh+esYoQT7q rtlMWtGDVECg6bz0hgjr/ca5MlFRxz6ohKTfIjmxkgAue5y0F6DXsLwqBMGZ6yuCFjP+759a0V TzA= X-IronPort-AV: E=Sophos;i="5.84,229,1620662400"; d="scan'208";a="285758280" Received: from mail-bn7nam10lp2107.outbound.protection.outlook.com (HELO NAM10-BN7-obe.outbound.protection.outlook.com) ([104.47.70.107]) by ob1.hgst.iphmx.com with ESMTP; 10 Jul 2021 13:58:55 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XuKGBcK8Uby/HYiqYEhSVrX60HX+K38aqi+Aj7n6bgQB3FsG2Ia3w5C4xcIhdtQK7UjihY+ZrtWakAil1MtbfkdvaqdwiLQ2ARTPmRxhoZe1walcbK05U4jSqmI00hT0drTx+9OPFt0lc0XBA5v2F4JuNjWHMu+44YPQMKGy84ncXe/BehARHXay2qhskUWrD89qgVGYOUV3lHiHruM3lWukbtCtm898R/2vgLlbE6852tureCJ5jEOsNOeQunXPYp6zMCIfEjT1VlLj12vo4EHe5+KJD8J+zFXirFDp1yuCuCZGym3zS/HuBCmosdJgCZp9ypIcZh6oBMMAg11DTQ== 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-SenderADCheck; bh=czQ+FvIpQbXhn4aOCxcqrnVjw+7IMyPbwLNta4nH2I0=; b=HUpsSMFPWrtqpJv1rsXh2lSS7VuKnFSjcEjHAJVk3pcdIVONomsyPjDNiExipDHy2/7NRWIml5kugOr9eObE05VWF/Xf+XggTZ1BSS14obvNgcU16Ez3S1SMHJz3xoFhz9/uRrGxMV4CCx4yJH5trkfHfjyafz5qjvMjGBCNzrfwzGHi2/rXc6h011nCuJcx1I4jCca+QMNGPmkKR0lkewkOQJFMlxu1cSSee6WqU8xubplihO1Hy9dRrwNDy8Fvpao5Yo2JMrwYvrlBTL2H3rYYMVcg6IUzPi8Ul/wDvNKieMjEgfcb1aypZLRcqT2DoVinCkehQxbR4Ifigf90EA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=wdc.com; dmarc=pass action=none header.from=wdc.com; dkim=pass header.d=wdc.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sharedspace.onmicrosoft.com; s=selector2-sharedspace-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=czQ+FvIpQbXhn4aOCxcqrnVjw+7IMyPbwLNta4nH2I0=; b=SEEZ9tuaZDHG4NojB+pDdTn6C+AontFUWnJRZVKTG1awkrxNZcfUyEpu8F6Mmc5iSCxe6COYslZz0iR3zBqS8Ls0QONjr/ELGqGJcD6QaC5mgPHKKj6otIxdB+ZHExk6F2Ig3Eezt7KCM2LVIIym1Bh9cz7o2NMIag4T/GRe1PA= Authentication-Results: wdc.com; dkim=none (message not signed) header.d=none;wdc.com; dmarc=none action=none header.from=wdc.com; Received: from CO6PR04MB7812.namprd04.prod.outlook.com (2603:10b6:303:138::6) by CO1PR04MB8234.namprd04.prod.outlook.com (2603:10b6:303:161::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21; Sat, 10 Jul 2021 05:58:54 +0000 Received: from CO6PR04MB7812.namprd04.prod.outlook.com ([fe80::a153:b7f8:c87f:89f8]) by CO6PR04MB7812.namprd04.prod.outlook.com ([fe80::a153:b7f8:c87f:89f8%9]) with mapi id 15.20.4308.025; Sat, 10 Jul 2021 05:58:54 +0000 From: Anup Patel To: Atish Patra , Alistair Francis Cc: Green Wan , Anup Patel , opensbi@lists.infradead.org, Anup Patel Subject: [PATCH v3 2/5] lib: utils/gpio: Add generic GPIO configuration library Date: Sat, 10 Jul 2021 11:28:24 +0530 Message-Id: <20210710055827.1535906-3-anup.patel@wdc.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210710055827.1535906-1-anup.patel@wdc.com> References: <20210710055827.1535906-1-anup.patel@wdc.com> X-ClientProxiedBy: MA1PR01CA0107.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:1::23) To CO6PR04MB7812.namprd04.prod.outlook.com (2603:10b6:303:138::6) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from wdc.com (122.171.166.125) by MA1PR01CA0107.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:1::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21 via Frontend Transport; Sat, 10 Jul 2021 05:58:52 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 02d0fd54-7430-4f34-7dbb-08d94367ccc9 X-MS-TrafficTypeDiagnostic: CO1PR04MB8234: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: WDCIPOUTBOUND: EOP-TRUE X-MS-Oob-TLC-OOBClassifiers: OLM:366; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: FnWUDxzhN2md8S3pP8y1a4fBOEWYoQMhKjt/QlulYHC4Gm9j1pfheKijVucq9b6CGXHrY1BNuqx+tUyUa7guiX2288R2zeczobMJ516q76yZoSoNzFOeWnzBI1E7H5EIL6WCWB11Vknhy5lZbWltE/ARyb3vOn/Xx9O0J8HKighKGLCxRl4f5McpCkq8p9v4eTwsfw+BZbWMwVg8ZmbFadUH8KPTIJMVadSKdXAi0m1plLV6xUO3cZmQeiyxersp/BLx7W4eamJxQMfIRizxl67cRo9Vo5BDY+eNVNFbFU71d1M2wR7hGpfI9b5GMddHV3aLjoyHLxTMSHknppqnrVFYsuGvyWAyVDpvoBAGqghFPdBZEjinQZ5brVUQdYB4T0TixPaUQHpId0Gf/k51rNAWQlNBmSV339k73fqMGlIbFAOqJGXkHWBhMQDCF3FrhNO5WX05r/at4oxxv02FZuS2E29R3/qiBHp9IQGhO6JEdskvAQaZwg0aXd6a916g8MeK1fvhaipowhX1BHld/mhCiC+epO1pUjcm8dqLg1JGIGBXzMnpjHl11J2N6PVO9wRG+8RXl+o9eKs3JWq3SJBpqsoFajWUrUbz9KGpx7rnuaDyxxAum47y4h9H8pjddDu3+zsPFzevYVDlHbw00GTUjIv4nFl32z6wUbLVD9yELARZzG+mZi5E/HzTsgxENHNOLgX632cBwp7KgeVG0voLRGs7VF1yd+gVKI/c72U= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CO6PR04MB7812.namprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(366004)(39860400002)(396003)(136003)(346002)(1076003)(44832011)(2616005)(8676002)(2906002)(83380400001)(7696005)(38100700002)(52116002)(8936002)(5660300002)(55016002)(110136005)(6636002)(86362001)(956004)(54906003)(316002)(38350700002)(6666004)(4326008)(478600001)(66556008)(66476007)(26005)(66946007)(186003)(36756003)(8886007)(41533002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: q5+3KG333NHBtY7v0bASRypUyucaRuvjC7zNrT45KaeffcIbJjGJsnApzL0xf0tk5v1LmHMpdlZx2muju6VVvRAuERGjyuWtRncxj0gly8V6Dve5rtaLwtm9CBDciW96w2TCdIQCC1n4tIgGCB3KG2nfKaZYDE1TQMNkFstYc7m5f/CvC4s6GCZ8vl3QLw0xcnZ9CIHkDEzSchFvwK+w1wDEgbxkkMZLJ6TN7atD5FKeQ8lTHQz9D3OzOAuP7MiHUstk8VRlDpGbuuu2ue1kdDOM92mBc8WRnpDLYj3BFjadvHdHF0hADiyMoLgn68QdG1/Vr5YPpgzQpi9oNhGomo4WFUhK/sp6HrAI6a0rXlupa/JKnhf1Jl6ku8Aw70NB0jBUampzBYj7/mzvlCN4m6RfAtrbRs7U03tGQkQqp8sHQUe/GEfchHvU0ozO2nk9VrKnp4U2r31Jy4j3tiQIhvxUmvA0FFkGI4yhQ+VNq5Ax2q6ih3lJ91KZAm+C85E2wajEA6XTh60KbqhZB9aWvEzaHdeUEquVAwkWC5W9XJ3+bv28UvGNYJ33kzCE5ZkxXrztDvMpyrcFJi4Ce1z+B1ma1memsbeHzaEw/+lDjyM7k0+wiWvPY/zauHmcnttdm2fA61Nof+nP1Wx36hTARH2zv7YZhPhSgOWYj5uFDBW5vspMV7GYbdDhZ4ud2E5Cc1G5zTXXbvrq2UHG+Rpo1YrAUkfUYx3kgl2auZsAfAW0txv4APe7uFlj27OLDl9gpChb+BWR1iPCisv/WqMUAMBPfichW4cD5c+TdSH/a0MX2jPsvGS/ZW6MFRmOwIiBNULme7t5HdivMa1P+TcQPl2bmyzJfhN2VeLYaRVHxrOY049dXLJfhi+HGObjmy1+aVCZal4i5Jucz27pSXlJ94Y4o+vHBxE3vjFI2cZECIG/+X1hVKuaJPL9OyNHtATQV/udYUwJ5oCk1fN/RhMqcdzd7S66r8APkGBnyyaK0r3wOePeLRbW0BjSufxKHbyquJdAJrFmI/JnAcMxj59YeBQ3u2hLctZrWBmNLk0oDYxF7K2/Be/mhTTo+PhDvlK76adbga8fgM54hPuWtGnWOQM4ANgZMxzBJTPTQVLP4A/Uci1USiO+6+1uVLStWbTqCsX+2hW1EB9+ki5+3vNoJLCIh6tS/Me5PyCAg67sb4ZYl/OWSY6j2cdu/QHH9c+QN2PZtOy4h8yZBZpktsXJsbCG7ipfthEwa6w0t5n5cj00B21E+oO6oOWcBjm4vWGjnyCXUI9xZZm7iJTLHqj4dfIUe4g1g06JKBywXNS9OHfI+9spls2xl4fyDYwSXyHm X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-Network-Message-Id: 02d0fd54-7430-4f34-7dbb-08d94367ccc9 X-MS-Exchange-CrossTenant-AuthSource: CO6PR04MB7812.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jul 2021 05:58:54.7857 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Qyja7j2MZgmVo6EnuBa2+dovIySDOkry3J3C1LCJjxiO0EmYnPeA49iI+KnFZNuy84odcF0skVm4zQBRefn6MQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR04MB8234 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210709_225856_694190_962AE52D X-CRM114-Status: GOOD ( 22.19 ) X-Spam-Score: -2.5 (--) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: We add generic GPIO configuration library which is independent of hardware description format (FDT or ACPI). The OpenSBI platform support or GPIO drivers can register GPIO chip instances which can be [...] Content analysis details: (-2.5 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [68.232.141.245 listed in list.dnswl.org] 0.0 SPF_NONE SPF: sender does not publish an SPF Record -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.0 MSGID_FROM_MTA_HEADER Message-Id was added by a relay X-BeenThere: opensbi@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "opensbi" Errors-To: opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org We add generic GPIO configuration library which is independent of hardware description format (FDT or ACPI). The OpenSBI platform support or GPIO drivers can register GPIO chip instances which can be discovered and used by different GPIO clients. Each GPIO chip instance has a unique ID which can be used by GPIO clients to lookup GPIO chip instance. Signed-off-by: Anup Patel Reviewed-by: Atish Patra --- include/sbi_utils/gpio/gpio.h | 99 +++++++++++++++++++++++++++++ lib/utils/gpio/gpio.c | 116 ++++++++++++++++++++++++++++++++++ lib/utils/gpio/objects.mk | 10 +++ 3 files changed, 225 insertions(+) create mode 100644 include/sbi_utils/gpio/gpio.h create mode 100644 lib/utils/gpio/gpio.c create mode 100644 lib/utils/gpio/objects.mk diff --git a/include/sbi_utils/gpio/gpio.h b/include/sbi_utils/gpio/gpio.h new file mode 100644 index 0000000..167d11a --- /dev/null +++ b/include/sbi_utils/gpio/gpio.h @@ -0,0 +1,99 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2021 Western Digital Corporation or its affiliates. + * + * Authors: + * Anup Patel + */ + +#ifndef __GPIO_H__ +#define __GPIO_H__ + +#include + +#define GPIO_LINE_DIRECTION_IN 1 +#define GPIO_LINE_DIRECTION_OUT 0 + +/** Representation of a GPIO pin */ +struct gpio_pin { + /** Pointer to the GPIO chip */ + struct gpio_chip *chip; + /** Identification of GPIO pin within GPIO chip */ + unsigned int offset; + /** + * Additional configuration flags of the GPIO pin desired + * by GPIO clients. + * + * NOTE: GPIO chip can have custom configuration flags. + */ + unsigned int flags; +#define GPIO_FLAG_ACTIVE_LOW 0x1 +#define GPIO_FLAG_SINGLE_ENDED 0x2 +#define GPIO_FLAG_OPEN_DRAIN 0x4 +#define GPIO_FLAG_TRANSITORY 0x8 +#define GPIO_FLAG_PULL_UP 0x10 +#define GPIO_FLAG_PULL_DOWN 0x20 +}; + +/** Representation of a GPIO chip */ +struct gpio_chip { + /** Pointer to GPIO driver owning this GPIO chip */ + void *driver; + /** Uniquie ID of the GPIO chip assigned by the driver */ + unsigned int id; + /** Number of GPIOs supported by the GPIO chip */ + unsigned int ngpio; + /** + * Get current direction of GPIO pin + * + * @return 0=output, 1=input, or negative error + */ + int (*get_direction)(struct gpio_pin *gp); + /** + * Set input direction of GPIO pin + * + * @return 0 on success and negative error code on failure + */ + int (*direction_input)(struct gpio_pin *gp); + /** + * Set output direction of GPIO pin with given output value + * + * @return 0 on success and negative error code on failure + */ + int (*direction_output)(struct gpio_pin *gp, int value); + /** + * Get current value of GPIO pin + * + * @return 0=low, 1=high, or negative error + */ + int (*get)(struct gpio_pin *gp); + /** Set output value for GPIO pin */ + void (*set)(struct gpio_pin *gp, int value); +}; + +/** Find a registered GPIO chip */ +struct gpio_chip *gpio_chip_find(unsigned int id); + +/** Register GPIO chip */ +int gpio_chip_add(struct gpio_chip *gc); + +/** Un-register GPIO chip */ +void gpio_chip_remove(struct gpio_chip *gc); + +/** Get current direction of GPIO pin */ +int gpio_get_direction(struct gpio_pin *gp); + +/** Set input direction of GPIO pin */ +int gpio_direction_input(struct gpio_pin *gp); + +/** Set output direction of GPIO pin */ +int gpio_direction_output(struct gpio_pin *gp, int value); + +/** Get current value of GPIO pin */ +int gpio_get(struct gpio_pin *gp); + +/** Set output value of GPIO pin */ +int gpio_set(struct gpio_pin *gp, int value); + +#endif diff --git a/lib/utils/gpio/gpio.c b/lib/utils/gpio/gpio.c new file mode 100644 index 0000000..fb30c0f --- /dev/null +++ b/lib/utils/gpio/gpio.c @@ -0,0 +1,116 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2021 Western Digital Corporation or its affiliates. + * + * Authors: + * Anup Patel + */ + +#include +#include + +#define GPIO_CHIP_MAX 16 + +static struct gpio_chip *gc_array[GPIO_CHIP_MAX]; + +struct gpio_chip *gpio_chip_find(unsigned int id) +{ + unsigned int i; + struct gpio_chip *ret = NULL; + + for (i = 0; i < GPIO_CHIP_MAX; i++) { + if (gc_array[i] && gc_array[i]->id == id) { + ret = gc_array[i]; + break; + } + } + + return ret; +} + +int gpio_chip_add(struct gpio_chip *gc) +{ + int i, ret = SBI_ENOSPC; + + if (!gc) + return SBI_EINVAL; + if (gpio_chip_find(gc->id)) + return SBI_EALREADY; + + for (i = 0; i < GPIO_CHIP_MAX; i++) { + if (!gc_array[i]) { + gc_array[i] = gc; + ret = 0; + break; + } + } + + return ret; +} + +void gpio_chip_remove(struct gpio_chip *gc) +{ + int i; + + if (!gc) + return; + + for (i = 0; i < GPIO_CHIP_MAX; i++) { + if (gc_array[i] == gc) { + gc_array[i] = NULL; + break; + } + } +} + +int gpio_get_direction(struct gpio_pin *gp) +{ + if (!gp || !gp->chip || (gp->chip->ngpio <= gp->offset)) + return SBI_EINVAL; + if (!gp->chip->get_direction) + return SBI_ENOSYS; + + return gp->chip->get_direction(gp); +} + +int gpio_direction_input(struct gpio_pin *gp) +{ + if (!gp || !gp->chip || (gp->chip->ngpio <= gp->offset)) + return SBI_EINVAL; + if (!gp->chip->direction_input) + return SBI_ENOSYS; + + return gp->chip->direction_input(gp); +} + +int gpio_direction_output(struct gpio_pin *gp, int value) +{ + if (!gp || !gp->chip || (gp->chip->ngpio <= gp->offset)) + return SBI_EINVAL; + if (!gp->chip->direction_output) + return SBI_ENOSYS; + + return gp->chip->direction_output(gp, value); +} + +int gpio_get(struct gpio_pin *gp) +{ + if (!gp || !gp->chip || (gp->chip->ngpio <= gp->offset)) + return SBI_EINVAL; + if (!gp->chip->get) + return SBI_ENOSYS; + + return gp->chip->get(gp); +} + +int gpio_set(struct gpio_pin *gp, int value) +{ + if (!gp || !gp->chip || (gp->chip->ngpio <= gp->offset)) + return SBI_EINVAL; + if (!gp->chip->set) + return SBI_ENOSYS; + + gp->chip->set(gp, value); + return 0; +} diff --git a/lib/utils/gpio/objects.mk b/lib/utils/gpio/objects.mk new file mode 100644 index 0000000..e99a895 --- /dev/null +++ b/lib/utils/gpio/objects.mk @@ -0,0 +1,10 @@ +# +# SPDX-License-Identifier: BSD-2-Clause +# +# Copyright (c) 2021 Western Digital Corporation or its affiliates. +# +# Authors: +# Anup Patel +# + +libsbiutils-objs-y += gpio/gpio.o From patchwork Sat Jul 10 05:58:25 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anup Patel X-Patchwork-Id: 1503433 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=jlpSckib; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.a=rsa-sha256 header.s=dkim.wdc.com header.b=XaHgA58C; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=sharedspace.onmicrosoft.com header.i=@sharedspace.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-sharedspace-onmicrosoft-com header.b=s8Cz5DlV; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4GMK954lkqz9sWk for ; Sat, 10 Jul 2021 15:59:05 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=EytGlkeEaoT6L7kJmOJv4A2vv/gFrmDiHXUSoRuT03o=; b=jlpSckibjTC6hi FJgI6jeQJFm8SI2pyOHVTs8wy2c2Q+tobdb1f5Ie1ipMqkuP+sYFqF7WMvKJupxK13RnEqiGjJ345 yPW3bRyijHVjJqOENEbZYQFlB/Vo85q9STNM6eUVLfeQLgwrHBK69y/Y+dDAOCHF9owmX8bZvp0Mw VpjUDUzoncI6w0Qk3Sv6PHZJMZmFlNnPrpfSNf4TDDIpyQHcRcpVeeINdN1QscBfhy6ZpxTgPiktb vpoJFBRKkZLbMG53mr14BIzROmWJ6PQOxjxBigMSkmC1L3Qth8j3uQpgOOyT30/fGZed4tKYZP9y1 CyBulb12cZlO+oQd8VBw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1m260z-00385l-9n; Sat, 10 Jul 2021 05:59:01 +0000 Received: from esa1.hgst.iphmx.com ([68.232.141.245]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1m260w-00383x-LK for opensbi@lists.infradead.org; Sat, 10 Jul 2021 05:59:00 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1625896738; x=1657432738; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=y/fEZWxDUSW9UnLAtRK5zBaYubC5EWY/DsmwiB4Poi8=; b=XaHgA58CXbMP1b0TkUvUqLfYdZ7G9bSitRT165ufmQwvBf25JpYVeZqX wI6Nl9ZysvB8qwozgkIuSeo2WFnfeGlvFZPwtI4oY7rc8Y3+w13ADeqfA WjyyVm7GIfCq03gaTzDMoWokLZrTtOeOQBMgO4ltpvys43qnIPs/dKuLJ 2QMlVGHV2KeY98OLMMUdp9iPMQuMTYlsL407gz+vMIt772OSY69zAxLWf g3TWumGthni7ZIyVHKDzYCPWmPymRIoqmdLfGfBmkWXe+SM5dsgvoyf4A apxPwEXhPSkTsNFhSYxoBqbZp2xDWRItwwEsGJeoCNmxtSbZfD3zcZYb2 A==; IronPort-SDR: Zke5LlHtRCrpcDFPOL01RCAOpiCTAVokWbr06aV/4bjjI1TOQmny2+kd9psPbHYHXODgsVfrSL uk1vHRiHDUvqlllPL+R0HFmIS6l0XtN+GOIAraPGHzLJrFVCXRT6ReezrsZl5vO7uPs/ER+zwN bz2ytoUCqnakS+XcoizTuj0Il14v69orDvlygAhBkhfVlDSkEGC+SLctVlk8olMtcShe6hUw88 f2KSEG43Hfy3qwMMbcLhfdfZSG/dtqyItoWGP69qyTy7bNyPBl2tfZ/fwMBmYNoLL12/43gu21 mfs= X-IronPort-AV: E=Sophos;i="5.84,229,1620662400"; d="scan'208";a="285758284" Received: from mail-bn7nam10lp2100.outbound.protection.outlook.com (HELO NAM10-BN7-obe.outbound.protection.outlook.com) ([104.47.70.100]) by ob1.hgst.iphmx.com with ESMTP; 10 Jul 2021 13:58:57 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AgIK537PqwwueOJCsNxi46z5w8nFMR0csQqpDjpZOm7VUwAziSbXkusMnSGBJc72QvGbUI68w3mVUJ3xtZRI5pZGSBUWbJnzkkHUTDQ/JXv5vbktOb226c4zcv5kpkmAhLnpDn6jw2QUptXXyXjWrssDdeCQ+yC5mGq0NKm/3IjSPHRHwM7wJJVobRweFzo7WoyAs2l/frwIgYwa8imiIunPat/DoNQnOE/AoOi02yUCeuKVfIAtzFKSFtY7qQC0rjDI1aCgAZkfjDawXdbO4oLAVTaSTPO4eKueVMW8Zp/11lCJOWZZa3+T7IVRF6+2hVqnVul9ne9oFhit2GanoA== 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-SenderADCheck; bh=+olpP9YCsabZ6fzg6brHexI4C6d4Zm5K0qPCcFR8AVc=; b=H84zn8WmODPJvbZO/68WJ5Kz1icf7BEVDgrAUl0oGbcuXSRDfHdoRbrJNx4S32zBbJnSc+vEEOHSWtu545Zy5lNfJEKe6qseeVMhEdg8zIwSQRHTp3A1kFFp8/ajCUVjM1SZOeo5NNElEhC6IhFp1UkqzMMSR2DrkwZekNnB3NBPYZduvtrAWd9buUmivov/psdLM7pMcHpmqii++3RDskifpI87q/6QxpVpY5q/dCYY1l+Q3vGVbBr52Gm7ZQqI2T1XBda8qsDakB9vMCj1AHQo7OAM0/A7eynBdAvgdvVpln4jvciEvvnkLStVZkVsjOPLw/7fwi8KJgZgjYb5GA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=wdc.com; dmarc=pass action=none header.from=wdc.com; dkim=pass header.d=wdc.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sharedspace.onmicrosoft.com; s=selector2-sharedspace-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+olpP9YCsabZ6fzg6brHexI4C6d4Zm5K0qPCcFR8AVc=; b=s8Cz5DlVgDsEEO3GIXWwro9u3MCGSDq2tYUJ76UOrqY5lZVCohWCwfm9fQwI0pqc6iHqtOauoolVbp0SYvz3J7sTgPR2peCsuTp2zWpAHxqOlKKL7PtMYoGPHdguZAlwrYQWKSEXL6hA+ds/fIhvTvFoXs12ZfFkFJ1vq/ykTjE= Authentication-Results: wdc.com; dkim=none (message not signed) header.d=none;wdc.com; dmarc=none action=none header.from=wdc.com; Received: from CO6PR04MB7812.namprd04.prod.outlook.com (2603:10b6:303:138::6) by CO1PR04MB8234.namprd04.prod.outlook.com (2603:10b6:303:161::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21; Sat, 10 Jul 2021 05:58:56 +0000 Received: from CO6PR04MB7812.namprd04.prod.outlook.com ([fe80::a153:b7f8:c87f:89f8]) by CO6PR04MB7812.namprd04.prod.outlook.com ([fe80::a153:b7f8:c87f:89f8%9]) with mapi id 15.20.4308.025; Sat, 10 Jul 2021 05:58:56 +0000 From: Anup Patel To: Atish Patra , Alistair Francis Cc: Green Wan , Anup Patel , opensbi@lists.infradead.org, Anup Patel Subject: [PATCH v3 3/5] lib: utils/gpio: Add simple FDT based GPIO framework Date: Sat, 10 Jul 2021 11:28:25 +0530 Message-Id: <20210710055827.1535906-4-anup.patel@wdc.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210710055827.1535906-1-anup.patel@wdc.com> References: <20210710055827.1535906-1-anup.patel@wdc.com> X-ClientProxiedBy: MA1PR01CA0107.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:1::23) To CO6PR04MB7812.namprd04.prod.outlook.com (2603:10b6:303:138::6) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from wdc.com (122.171.166.125) by MA1PR01CA0107.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:1::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21 via Frontend Transport; Sat, 10 Jul 2021 05:58:55 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f7408dd2-e468-4bd3-82c4-08d94367ce0f X-MS-TrafficTypeDiagnostic: CO1PR04MB8234: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: WDCIPOUTBOUND: EOP-TRUE X-MS-Oob-TLC-OOBClassifiers: OLM:4303; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: u37XF6xR0IsKvTrmsSBbuZjkSmaMY7Nwpre2ZC9qY+o+GYaEviZh/gXEa+/HKhOIhJQUGOd+C3D5iJlXdBuTYpJOgnkVOEYTUHEPHBmwG+HGTqqlIP2uq3Iq3/5Tna2xK/a2SZEhgx0fN/nQod+RdCvaMv4EY17U3mOmTHjivqK4RLwoXZg/vR5JK0SY0cTCljItOkjec9Oqppswrufi1CCM9q9VxoE1yb0GAXF1Ed6caZbIt9UbnJTzhGTejRbg/MG5cQb04sZdL+u0/WKetfdmMYNAQtTwVJ6KZ1LncOP5XN+KE9wjYgupSNuV/b4oHWNz16rnGGMC+oi+wSz8O8lJp4cmr4VGmcJzGuG3q7aI+Djeb9g6A+1u/Ho1jQlYuvC6vfamJTlW/AvCK6S+6P+mHEL85ERzt0FyCynyU0+yh55/SiwYt4KgxZUzFcKLCJC7bhs8HSslMmsmWhKEJ5WSYRQkPU0sPOIWLn9hkuEebKgiXN7AaH5BZVA8dvw8DIEyx8/fUVVGp4htMwjdIXqj9hj7S8E1OXCdQZLNTIhsSkBJV1TTr3dJLGnQwra8JatY6qMAek3AD6scJ+DWo0Znzbj2oH1uihtJK7tp9pUgB6EBL/72RmUB9yjkwKvq8snvXhauLH9cHJng7VJ2JE0TyO89jIkP4P8XQq6fBrOKo3Oj8cOVmKR5KmO4ESGe+CzntS3KlsdIid7uVvKCcw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CO6PR04MB7812.namprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(366004)(39860400002)(396003)(136003)(346002)(1076003)(44832011)(2616005)(8676002)(2906002)(7696005)(38100700002)(52116002)(8936002)(5660300002)(55016002)(110136005)(6636002)(86362001)(956004)(54906003)(316002)(38350700002)(6666004)(4326008)(478600001)(66556008)(66476007)(26005)(66946007)(186003)(36756003)(8886007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: xdYbmaOd7dcqmTvI9y5iRhEYmf8y3kZQzQMfJdduXjkUW8XjbGGGexW57U+38rPTQgozvnZ4iSjjcc6xd8yE+yBNqQ4G0aOHM0nwBvSiqmRdujUzxJ9dNE1x4CSLEfwpXYDkk/XYUnfHgaArShLqds6oRizV1qTON67gTLeH770J4LvzujgU3f2WxLZde3KEAx0xGlp3XS/BOgzEITrCB9T5jP0AAMKwQHBYJ4AUy/m+R1louyCqWuCN2bPpXYGF6iS50SmXoBuqSUEbf7JFVJOAC1TShvombB/jM1pd2st8qvR6XmwtmarA7X1F1HL/UMDSSiB4wiA0WnWm0Zmg31QJ394m3p4Y8PC5Ld7d3XQISG/ddbO7a6OvIyJmi8P/M3HBN5kDpdZuhp/EFJWQzpuwSpMXFoUp6dp2Zp86UlJg6FUys5i4isXe3Mnyu5PNFgC1WhM14f8KER1O1A2acExVndS/uPPkta+FY8/N/Q0RJ8uI4kSl2BxmH0sUEd5xRAZ0kVIraJwq/5wCakqdjgt8mjARS9+f5GdBLH775TNzY0aj7kcSUr7bNFGL4Awa146aUPKgYREW4XCzIwkJBiE9JDZ7xE6NI2xXG2abB6TiSrIU/hPv36X1AHm92VusDR8LTXW1Bo9/+UkdkZWD9eN0+0e4N8TFgcnu+/f1EMRplB6NemRwVjVWjIbgUWnG1trzmmECH1JAl7lO+0XSdIgHWspHT0XDfQ/eXwjDtd2gDCfWieRhctBRh9k12IDKGEzYSLGmQWrQ2AwDSrFxYaBHtOHCz/RKNrY0veYhf7DqsSrA4EiWyNQfjrN+ujgELd78pEPS0VjaF2SGPZJKYb5o38cdLKH2JqLuA7YWDMbwrUo5Tudzz+o7PI3cY5w9xAUfhaNcREcYn8blvh+RZbpi7nBB+lbVYfba2aM5OAW+sXVKzQjuT3rDyLYsCdp6jUP4nF/Bs19Hif1/WSBUrH4dKKegRVKxUNwyWE+HisL138jZrJbVnuiQPTI1AE+ft/jc3pfelDPUFChOeVP3pO/BIxz7/bwMPS1uKH/nrFqeYpQsp5sdz8Qcu/aFBzEjQFM7v9anYSw0S3GhaM8l5HNj2y9yGRcGh8d+pJpY8GRB74dU/QTx7YOgJm/dGyhwJVrINSYENfdb8drAlqm3Gz+CC/u+hROy4jhxYXlmlaBtgFMobV8tdJVvfnOAL5DXwICsBcjlvrq7nN2CPQ0aBa76wqOpHr0w0dj3dpS84fJhCvjT9m37WCIyhDMmQb03bxrr3NeT/e0ruReAoCCl3Uc7cehrDUyjPgr1QN824/Ry1xe62BeAYjrOMgJkjIZP X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-Network-Message-Id: f7408dd2-e468-4bd3-82c4-08d94367ce0f X-MS-Exchange-CrossTenant-AuthSource: CO6PR04MB7812.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jul 2021 05:58:56.9173 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: F1Lp4Dg9oqXOSqtmRSCL7SYXIiG5CKHu4crDFxtQSS5M+hAdYUjz6mYDyxipuJB2xkPY+oK42r0xNPh/b4Dczw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR04MB8234 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210709_225858_746859_6504B581 X-CRM114-Status: GOOD ( 20.96 ) X-Spam-Score: -2.5 (--) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: We add a simple FDT based GPIO framework which is built on top of generic GPIO library. The phandle of FDT GPIO chip DT node is treated as unique GPIO chip ID required by the generic GPIO library. The [...] Content analysis details: (-2.5 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [68.232.141.245 listed in list.dnswl.org] 0.0 SPF_NONE SPF: sender does not publish an SPF Record -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.0 MSGID_FROM_MTA_HEADER Message-Id was added by a relay X-BeenThere: opensbi@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "opensbi" Errors-To: opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org We add a simple FDT based GPIO framework which is built on top of generic GPIO library. The phandle of FDT GPIO chip DT node is treated as unique GPIO chip ID required by the generic GPIO library. The FDT based GPIO chip drivers will be probed on-demand from fdt_gpio_pin_get() called by the GPIO client drivers. Signed-off-by: Anup Patel Reviewed-by: Atish Patra --- include/sbi_utils/gpio/fdt_gpio.h | 34 ++++++++ lib/utils/gpio/fdt_gpio.c | 132 ++++++++++++++++++++++++++++++ lib/utils/gpio/objects.mk | 1 + 3 files changed, 167 insertions(+) create mode 100644 include/sbi_utils/gpio/fdt_gpio.h create mode 100644 lib/utils/gpio/fdt_gpio.c diff --git a/include/sbi_utils/gpio/fdt_gpio.h b/include/sbi_utils/gpio/fdt_gpio.h new file mode 100644 index 0000000..19e1b58 --- /dev/null +++ b/include/sbi_utils/gpio/fdt_gpio.h @@ -0,0 +1,34 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2021 Western Digital Corporation or its affiliates. + * + * Authors: + * Anup Patel + */ + +#ifndef __FDT_GPIO_H__ +#define __FDT_GPIO_H__ + +#include + +/** FDT based GPIO driver */ +struct fdt_gpio { + const struct fdt_match *match_table; + int (*xlate)(struct gpio_chip *chip, + const struct fdt_phandle_args *pargs, + struct gpio_pin *out_pin); + int (*init)(void *fdt, int nodeoff, u32 phandle, + const struct fdt_match *match); +}; + +/** Get a GPIO pin using "gpios" DT property of client DT node */ +int fdt_gpio_pin_get(void *fdt, int nodeoff, int index, + struct gpio_pin *out_pin); + +/** Simple xlate function to convert two GPIO FDT cells into GPIO pin */ +int fdt_gpio_simple_xlate(struct gpio_chip *chip, + const struct fdt_phandle_args *pargs, + struct gpio_pin *out_pin); + +#endif diff --git a/lib/utils/gpio/fdt_gpio.c b/lib/utils/gpio/fdt_gpio.c new file mode 100644 index 0000000..bff391f --- /dev/null +++ b/lib/utils/gpio/fdt_gpio.c @@ -0,0 +1,132 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2021 Western Digital Corporation or its affiliates. + * + * Authors: + * Anup Patel + */ + +#include +#include +#include +#include + +static struct fdt_gpio *gpio_drivers[] = { +}; + +static struct fdt_gpio *fdt_gpio_driver(struct gpio_chip *chip) +{ + int pos; + + if (!chip) + return NULL; + + for (pos = 0; pos < array_size(gpio_drivers); pos++) { + if (chip->driver == gpio_drivers[pos]) + return gpio_drivers[pos]; + } + + return NULL; +} + +static int fdt_gpio_init(void *fdt, u32 phandle) +{ + int pos, nodeoff, rc; + struct fdt_gpio *drv; + const struct fdt_match *match; + + /* Find node offset */ + nodeoff = fdt_node_offset_by_phandle(fdt, phandle); + if (nodeoff < 0) + return nodeoff; + + /* Check "gpio-controller" property */ + if (!fdt_getprop(fdt, nodeoff, "gpio-controller", &rc)) + return SBI_EINVAL; + + /* Try all GPIO drivers one-by-one */ + for (pos = 0; pos < array_size(gpio_drivers); pos++) { + drv = gpio_drivers[pos]; + + match = fdt_match_node(fdt, nodeoff, drv->match_table); + if (match && drv->init) { + rc = drv->init(fdt, nodeoff, phandle, match); + if (rc == SBI_ENODEV) + continue; + if (rc) + return rc; + return 0; + } + } + + return SBI_ENOSYS; +} + +static int fdt_gpio_chip_find(void *fdt, u32 phandle, + struct gpio_chip **out_chip) +{ + int rc; + struct gpio_chip *chip = gpio_chip_find(phandle); + + if (!chip) { + /* GPIO chip not found so initialize matching driver */ + rc = fdt_gpio_init(fdt, phandle); + if (rc) + return rc; + + /* Try to find GPIO chip again */ + chip = gpio_chip_find(phandle); + if (!chip) + return SBI_ENOSYS; + } + + if (out_chip) + *out_chip = chip; + + return 0; +} + +int fdt_gpio_pin_get(void *fdt, int nodeoff, int index, + struct gpio_pin *out_pin) +{ + int rc; + u32 phandle; + struct fdt_gpio *drv; + struct gpio_chip *chip = NULL; + struct fdt_phandle_args pargs; + + if (!fdt || (nodeoff < 0) || (index < 0) || !out_pin) + return SBI_EINVAL; + + pargs.node_offset = pargs.args_count = 0; + rc = fdt_parse_phandle_with_args(fdt, nodeoff, + "gpios", "#gpio-cells", + index, &pargs); + if (rc) + return rc; + + phandle = fdt_get_phandle(fdt, pargs.node_offset); + rc = fdt_gpio_chip_find(fdt, phandle, &chip); + if (rc) + return rc; + + drv = fdt_gpio_driver(chip); + if (!drv || !drv->xlate) + return SBI_ENOSYS; + + return drv->xlate(chip, &pargs, out_pin); +} + +int fdt_gpio_simple_xlate(struct gpio_chip *chip, + const struct fdt_phandle_args *pargs, + struct gpio_pin *out_pin) +{ + if ((pargs->args_count < 2) || (chip->ngpio <= pargs->args[0])) + return SBI_EINVAL; + + out_pin->chip = chip; + out_pin->offset = pargs->args[0]; + out_pin->flags = pargs->args[1]; + return 0; +} diff --git a/lib/utils/gpio/objects.mk b/lib/utils/gpio/objects.mk index e99a895..dade45e 100644 --- a/lib/utils/gpio/objects.mk +++ b/lib/utils/gpio/objects.mk @@ -7,4 +7,5 @@ # Anup Patel # +libsbiutils-objs-y += gpio/fdt_gpio.o libsbiutils-objs-y += gpio/gpio.o From patchwork Sat Jul 10 05:58:26 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anup Patel X-Patchwork-Id: 1503434 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=UnChrizg; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.a=rsa-sha256 header.s=dkim.wdc.com header.b=jx8ogj6v; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=sharedspace.onmicrosoft.com header.i=@sharedspace.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-sharedspace-onmicrosoft-com header.b=l0UlouAI; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4GMK980nWqz9sRR for ; Sat, 10 Jul 2021 15:59:08 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Y0+Hxy1VhVPt51Wgw7KN4FD6Wv/ohnpcp0YokkLkR/E=; b=UnChrizg3jgHDk hsY3leC7+sQ8iz3/a5YCDuuu1ygtymm1uQ3NK0sKpLlzcVWJByW1Q4VGNqhYsbfXETSivSBUky8kI KLc7fnDuNxwW/ntNb8BJRKiDNZo5A8CrGLSeQ7rT7yYXKyTgSWMbEGTEPNIDgAdjO7OL+oOCOIuCT /FxpqHL5Zj3Z8mUZ0vmlGsIxJf5sk0l5tt12Btzkvpi95fDW7GI1Po9p40FG6FIJbfsw9fONGTaTI ZsU7w3lt+bHBsODhqZyTNoQwclAoiPn8KgXBpwyfCyvUlcYMB9KR+2ewPBKS+NOKl961VGCsl8QR0 U1J/NSx86HbPOqClJzrQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1m2611-00387K-Qy; Sat, 10 Jul 2021 05:59:03 +0000 Received: from esa3.hgst.iphmx.com ([216.71.153.141]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1m260z-00385f-1W for opensbi@lists.infradead.org; Sat, 10 Jul 2021 05:59:02 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1625896740; x=1657432740; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=UTirYr80wuYWi30p+8Y7lEdhv6WdfZNppz8VVgglC9U=; b=jx8ogj6vGJBhEimOBJYR4zcWhTCsVnoDiW4tPp5pcsmPOldhw9BuaZkb iyiN7mMrF2DbIC9SC2edklcoMwNl9v0IdnES/qDD1kSIjXAKe/DYUbbGP 9FA/N2Owch6z17RyGGzZIAUx26nuxt94bBzWqm0SbqpwXm1czhfCueeEl oZV6NlzXLL/1/4/S6qLc6qhyMttwfcNTmqBxsRe6fK9v5pxAuipAb3VD4 8wa9F6tmA6udc/YrvWcw+7UQGUDEZNeNk/tvB4cj0lCEQwG/a+sMRE48p tJ7/u6Xt7QA1wCZKrDchqZmMEhmfLXbV8/xsF3ohNoy+4bdLkyhr038Pz g==; IronPort-SDR: lt/B8W1xVb9v8z4fLr8ZTbgkuwOTIZxC+I8E5EaHUyunUtfDUkygHUskUISnpjbyhFphD9WVmI ouyr+jTNpVt+ZUZOAV/9f62QvXmruswjFL/Skrj01sPjsl7qK/aW5mmVD9fXjiYpTY6hBUiOTc xBhjY3kz2huD4KyzHdXESVYuJYphnVqYICVao/XMuxukjPP1hTUxrPSzUmezBaeSySfzyYBMdC CJuhUWjQaqMWavx8EfWKbZ5h7mmn8KquFVqXGOhcm49sicb1X70am7l7kYf5wetXN4n9VGfP8g 6JA= X-IronPort-AV: E=Sophos;i="5.84,229,1620662400"; d="scan'208";a="179035235" Received: from mail-bn7nam10lp2105.outbound.protection.outlook.com (HELO NAM10-BN7-obe.outbound.protection.outlook.com) ([104.47.70.105]) by ob1.hgst.iphmx.com with ESMTP; 10 Jul 2021 13:58:59 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fJ6cl/b6Swna7l/+16dU3gA5FyXf2KfXc6s9BW6xZSPTitghLu4jzbSKiBt9KGH41ypZVyfdGrgVFeNZ0Zi4ntyRXh+td9NN+BaxWE6XtfGAprTQqxtLkZDIfuQaG5j96sCFdgTxYBPfRuWvib7111yU+aneVt+RMCH/oLCHSRALa2jZGFl0hE+g4Lz1kVvtSSAWnlNCFZWEqahVvelIJ2WbXMDhg98H7hK8gQI5Xv2EYqNTi3EIAVHi1h3N4I/5aaNxjBcb/lzbU0us6a0g/FQZrsnpEtUmns+9YIE2i3pEdpj9svUjO5qSY+DSai2lT2sBOwF4A/cDk0G4R6k/TQ== 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-SenderADCheck; bh=tfXVm7HdPiO6S+RqXwAjY9oUpa3vAT/cywZ3iKWV6FE=; b=T7gOF10aKn5JqndMCzyG911sc8+t75viQ5N5Jxp9SZcCsVauzkHPS0BvZUT42qjpiyrCvtROfGuYt3MEY+HUgzSG1f4KF47kU3y21zCLtdDOijytojUI8wlvCVBJkd5jvoPMdaPR6vJcYmldaJdE4ej87i8MMER17umBq/ZSSB0P+iBORp3GUnOm3KQvkxVB3FEuK/G/fne/KAEUkjt6no2Nzk9hc7w3Piyu19iOESm4D9cu+tLqtaqwiJT/r9iMWWXH10o1GC/NIlYBN7QZpsNRAgFQE9NfykaIEq9AVr5PwVwmSrKmpnj5FaaIjewlD5xeNPwngsIJ3paXIVgraA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=wdc.com; dmarc=pass action=none header.from=wdc.com; dkim=pass header.d=wdc.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sharedspace.onmicrosoft.com; s=selector2-sharedspace-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tfXVm7HdPiO6S+RqXwAjY9oUpa3vAT/cywZ3iKWV6FE=; b=l0UlouAI6iTikO0zx1QK8KjMC28qsMPBRJR5BwHGLHrr24XaLW3mI217XwaBaQjRpyt03sUNtQRDuA5aFwNe4puGweoVMBIr13kwOtySn4iGHDwgVi6LoGW+TB0UAfXpf77EuumDsqJQcD7q2rUmSMGaTegPNK+i5NO0cwBOkL8= Authentication-Results: wdc.com; dkim=none (message not signed) header.d=none;wdc.com; dmarc=none action=none header.from=wdc.com; Received: from CO6PR04MB7812.namprd04.prod.outlook.com (2603:10b6:303:138::6) by CO1PR04MB8234.namprd04.prod.outlook.com (2603:10b6:303:161::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21; Sat, 10 Jul 2021 05:58:59 +0000 Received: from CO6PR04MB7812.namprd04.prod.outlook.com ([fe80::a153:b7f8:c87f:89f8]) by CO6PR04MB7812.namprd04.prod.outlook.com ([fe80::a153:b7f8:c87f:89f8%9]) with mapi id 15.20.4308.025; Sat, 10 Jul 2021 05:58:59 +0000 From: Anup Patel To: Atish Patra , Alistair Francis Cc: Green Wan , Anup Patel , opensbi@lists.infradead.org, Anup Patel Subject: [PATCH v3 4/5] lib: utils/gpio: Add minimal SiFive GPIO driver Date: Sat, 10 Jul 2021 11:28:26 +0530 Message-Id: <20210710055827.1535906-5-anup.patel@wdc.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210710055827.1535906-1-anup.patel@wdc.com> References: <20210710055827.1535906-1-anup.patel@wdc.com> X-ClientProxiedBy: MA1PR01CA0107.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:1::23) To CO6PR04MB7812.namprd04.prod.outlook.com (2603:10b6:303:138::6) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from wdc.com (122.171.166.125) by MA1PR01CA0107.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:1::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21 via Frontend Transport; Sat, 10 Jul 2021 05:58:57 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9e89f020-df93-4b10-b51a-08d94367cf53 X-MS-TrafficTypeDiagnostic: CO1PR04MB8234: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: WDCIPOUTBOUND: EOP-TRUE X-MS-Oob-TLC-OOBClassifiers: OLM:565; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: mZovjDikqCXmyXdbvbajqLtF7uCmuiXdi4KZnqt5NH5I2HVFzJUMfNXE/QPvpkdVZq8EB72SJwqGpPOgPl0g4DOPdwWu3JtvyEXlvFjDfzUCYyGYLcI7NZEr3klqA/jSMbUuoaqTvLD11YmDsSBFS6lnly8rCsw9Sj2QF+K+VjGGVvtMtR4KyA157eOli/bzA/xJecUgLhXA6mCy/MrnrBu7ZPMs/2agfvidpxMENSbssnljvbmy3grDaRIMn5iTlTIo+tI+bZZ/cPSr8w+N+jq7CuXuFvED6hOdYZh4LshFETXGaNaHx5wFbzmqsjobXIeGA3ROh/HcuLdM//WX+WkxpnQFT2P5H4ZefOnPY7sltEC0+KxsRhmhKbkB3ZjVNo8AvVx/7gfDPKKcVkECiKY8zImnE/VSrU6ffr+7C9nJi/2IOU+yzJOubb/uSQdctf+HiCxh/yaslKHzEhEfy4pXF7dQevtLUZGrL8OtEnrAXZOCoo/oTtAG5tmkDJM7v/9Xrncc5+g47t1QrQsi3xp8iTpKIim/gqYEAxyx0EBn7o6sK8ypdL1xdc7PjxkZhpgaG+GujdfVXz7bRYYYsTNgPeB/1jFuKR7lPP/5ub7d7ZuOdmyOqt6+HI098XYifXD5mKkU7dacemNXKqWkC32EuYTBzga2tDX+oV+PECx4M4X/9OofKa5zxnFDAqce8i+oBIbFt0RqC5jvr7Zzeg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CO6PR04MB7812.namprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(6029001)(4636009)(376002)(366004)(39860400002)(396003)(136003)(346002)(1076003)(44832011)(2616005)(8676002)(2906002)(7696005)(38100700002)(52116002)(8936002)(5660300002)(55016002)(110136005)(6636002)(86362001)(956004)(54906003)(316002)(38350700002)(6666004)(4326008)(478600001)(66556008)(66476007)(26005)(66946007)(186003)(36756003)(8886007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: OEPYd3uu5j6/qKWDOGVUxDUNfn1cRI798d7JLZfmz4oLuVIvjwg32RuadA7v3er5kJxcXv6++WA9RrVhzlKRa9SDUpgYwkxQutbe0Qm9DknfQMVlhKGW/58/tk4eYWzId0WeHuHTliyzURO2DXjzP3Z2QEnxsUDSz9N68wEuq3/MbLOM+a1F2ldnXxnC82DrqwrXJ/JGHFPa4FdoLbQSIzPbXMzW8/zJYI7fKS0FSwKroYmxfGjl5eU9TmHT3Cowa8jjyMM4RmcsQrpRt5du2XC1IVPFgWRuyBOW/EHU3WWZD1PIwZeqZWOm0rFBXH6rY5lf6zniYJCMMIYLBwYlRBwSkVK37u/h7Agu5J2K7NfLmrRqgla8O9cUKsMAuRaqkDSIl+bVnpk6F8Ao8GEceiwR39p2gh6zuM217Hl8BWcuJpex5GVyl9YW6SW1TwCV/FxIvWuMBdBnZxR2LbjAheCwXZ1WyS0eBEVYqWyEIhP5hIblnP/HE14VlkccT16d31xYMIlFsLJmtXm7b5yedgBZeb4rTmn9em7WkivOgFv67DvpTkFojC48TMXAWutDSnakiCylKe1EDivFNaVCL+WA29zzyMtEhS3/sF9/AocoWxinr9WzvRqwcUHuG5etzcELnLrTo9Y/kCgLW+udT1tseM1NKx//KKcYAwM9GsO/UNsu4SldltlrxO3E9hN6BbyzbNwGi24tY4L5PTtDiDSTr8oq+SoPkWhveh868TWo6YKzuBwjgK+u/rb/91BqUCGXzlC/OQ653V0bVbKSPmAWASqWzuohM+SmV8xlpYA47NtrRjcOl5GFt1w10W22mBr6N93CKsIZZcldgwoZ2gcOe+d1UzdQ5DhyII/p7aWgThHvfGG+SZ0/uCXySxqLKhbDjmXlSHBBBBcVA0EDqEkKuYt93vi6TZHAJBf53LbYo1EVTRLCyYgPa9v0sI+0436YZ9MrA5BZPKcmqGJFKBQHvnTsciO/1sMYf5i8jV2b5NVDCzH3CvLSYdujO/utaYLHwvkUoGbzA7af9RoU4VQKGq/T3lYJOTr1Nh1bm7FD8FXpMQoAtWtQYrcGVXVEE9UTzF90SrZsNQdLmVcuC2e77+8MUiJ9qbcjScw0HvO9SzHOjZM59LKaroCNgflsTglG14t8K+CmUstod6SrM6saFHSYar6kKvwJqKX7LNxf2etqmgQ9DCJQqH4j2VahoSPP9+mlRMJeC+dqkvJkEOb7oiO1b00Ft7UnzQ1XmjOX6W6Lo6yaaQhFzo1WyAqj7ayB3zb/Jzo0cxYlDpHaVSssh90wYJuaItADWNOl41N7swPLZO8ASIu2MP276I85 X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9e89f020-df93-4b10-b51a-08d94367cf53 X-MS-Exchange-CrossTenant-AuthSource: CO6PR04MB7812.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jul 2021 05:58:59.0659 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: tmYaAUubeLfavb1cVR2TsTko/RqGQkbVzMOTMkItNXbxAe7Vt1V2Mv97R+3fjtsgoELNo63sk9DgCQJVZLUivA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR04MB8234 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210709_225901_185473_80E8C8B7 X-CRM114-Status: GOOD ( 17.50 ) X-Spam-Score: -2.5 (--) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: From: Green Wan We add a minimal SiFive GPIO driver so that we can do GPIO based system power-off and reset. Signed-off-by: Green Wan Signed-off-by: Anup Patel --- lib/utils/gpio/fdt_gpio.c | 3 ++ lib/utils/gpio/fdt_gpio_sifive.c | 90 ++++++++++++++++++++++++++++++ [...] Content analysis details: (-2.5 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [216.71.153.141 listed in list.dnswl.org] 0.0 SPF_NONE SPF: sender does not publish an SPF Record -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.0 MSGID_FROM_MTA_HEADER Message-Id was added by a relay X-BeenThere: opensbi@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "opensbi" Errors-To: opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Green Wan We add a minimal SiFive GPIO driver so that we can do GPIO based system power-off and reset. Signed-off-by: Green Wan Signed-off-by: Anup Patel Reviewed-by: Atish Patra --- lib/utils/gpio/fdt_gpio.c | 3 ++ lib/utils/gpio/fdt_gpio_sifive.c | 90 ++++++++++++++++++++++++++++++++ lib/utils/gpio/objects.mk | 1 + 3 files changed, 94 insertions(+) create mode 100644 lib/utils/gpio/fdt_gpio_sifive.c diff --git a/lib/utils/gpio/fdt_gpio.c b/lib/utils/gpio/fdt_gpio.c index bff391f..297b248 100644 --- a/lib/utils/gpio/fdt_gpio.c +++ b/lib/utils/gpio/fdt_gpio.c @@ -12,7 +12,10 @@ #include #include +extern struct fdt_gpio fdt_gpio_sifive; + static struct fdt_gpio *gpio_drivers[] = { + &fdt_gpio_sifive }; static struct fdt_gpio *fdt_gpio_driver(struct gpio_chip *chip) diff --git a/lib/utils/gpio/fdt_gpio_sifive.c b/lib/utils/gpio/fdt_gpio_sifive.c new file mode 100644 index 0000000..5941c94 --- /dev/null +++ b/lib/utils/gpio/fdt_gpio_sifive.c @@ -0,0 +1,90 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2021 SiFive + * + * Authors: + * Green Wan + */ + +#include +#include +#include +#include + +#define SIFIVE_GPIO_CHIP_MAX 2 + +#define SIFIVE_GPIO_PINS_MIN 1 +#define SIFIVE_GPIO_PINS_MAX 32 +#define SIFIVE_GPIO_PINS_DEF 16 + +#define SIFIVE_GPIO_OUTEN 0x8 +#define SIFIVE_GPIO_OUTVAL 0xc +#define SIFIVE_GPIO_BIT(b) (1U << (b)) + +struct sifive_gpio_chip { + unsigned long addr; + struct gpio_chip chip; +}; + +static unsigned int sifive_gpio_chip_count; +static struct sifive_gpio_chip sifive_gpio_chip_array[SIFIVE_GPIO_CHIP_MAX]; + +static int sifive_gpio_direction_output(struct gpio_pin *gp, int value) +{ + unsigned int v; + struct sifive_gpio_chip *chip = + container_of(gp->chip, struct sifive_gpio_chip, chip); + + v = readl((volatile void *)(chip->addr + SIFIVE_GPIO_OUTEN)); + v |= SIFIVE_GPIO_BIT(gp->offset); + writel(v, (volatile void *)(chip->addr + SIFIVE_GPIO_OUTEN)); + + v = readl((volatile void *)(chip->addr + SIFIVE_GPIO_OUTVAL)); + if (!value) + v &= ~SIFIVE_GPIO_BIT(gp->offset); + else + v |= SIFIVE_GPIO_BIT(gp->offset); + writel(v, (volatile void *)(chip->addr + SIFIVE_GPIO_OUTVAL)); + + return 0; +} + +extern struct fdt_gpio fdt_gpio_sifive; + +static int sifive_gpio_init(void *fdt, int nodeoff, u32 phandle, + const struct fdt_match *match) +{ + int rc; + struct sifive_gpio_chip *chip; + + if (SIFIVE_GPIO_CHIP_MAX <= sifive_gpio_chip_count) + return SBI_ENOSPC; + chip = &sifive_gpio_chip_array[sifive_gpio_chip_count]; + + rc = fdt_get_node_addr_size(fdt, nodeoff, &chip->addr, NULL); + if (rc) + return rc; + + chip->chip.driver = &fdt_gpio_sifive; + chip->chip.id = phandle; + chip->chip.ngpio = SIFIVE_GPIO_PINS_DEF; + chip->chip.direction_output = sifive_gpio_direction_output; + rc = gpio_chip_add(&chip->chip); + if (rc) + return rc; + + sifive_gpio_chip_count++; + return 0; +} + +static const struct fdt_match sifive_gpio_match[] = { + { .compatible = "sifive,gpio0" }, + { }, +}; + +struct fdt_gpio fdt_gpio_sifive = { + .match_table = sifive_gpio_match, + .xlate = fdt_gpio_simple_xlate, + .init = sifive_gpio_init, +}; diff --git a/lib/utils/gpio/objects.mk b/lib/utils/gpio/objects.mk index dade45e..8eb7736 100644 --- a/lib/utils/gpio/objects.mk +++ b/lib/utils/gpio/objects.mk @@ -8,4 +8,5 @@ # libsbiutils-objs-y += gpio/fdt_gpio.o +libsbiutils-objs-y += gpio/fdt_gpio_sifive.o libsbiutils-objs-y += gpio/gpio.o From patchwork Sat Jul 10 05:58:27 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anup Patel X-Patchwork-Id: 1503435 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=Hm3mQwkU; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.a=rsa-sha256 header.s=dkim.wdc.com header.b=X6Z3fSbX; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=sharedspace.onmicrosoft.com header.i=@sharedspace.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-sharedspace-onmicrosoft-com header.b=rS/peUQn; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4GMK9B41h7z9sRR for ; Sat, 10 Jul 2021 15:59:10 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=HCEnxTF4tU4kybYxanO4SNorAAOud+POtiTgVNrWmrI=; b=Hm3mQwkUauSuwN thyq6UdPYLol+OPo2RD/d9tF+n04sig9jN5P7UgJili2ZfqAJD9OVomKFPSeUBrWXoC9OupRXJxli 4ezYjOB8UxTEaQn5w5JbnhnsGXL6uzQTC1DasTBS51SL2fBk6b2/JlRQWrJcH92aMqBqWkn50NOOx g551GMqfL2UWmBCp3bgDajmsFPLJGhJoCqXdhVoEQBlwP3hIyO5VnwHDbWiyVCRdWhU67350uS7GX 0s6n6v0pbbPzU03ofVxZXD1Dke4/Kf1ogoufcYQlQIwRom6lmIOnoKLgIDigwakT+pnQxPbDunwGQ HvPmeFwHM3YIe8ZFEGAQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1m2614-00388y-Fo; Sat, 10 Jul 2021 05:59:06 +0000 Received: from esa3.hgst.iphmx.com ([216.71.153.141]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1m2611-00385f-AK for opensbi@lists.infradead.org; Sat, 10 Jul 2021 05:59:04 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1625896742; x=1657432742; h=from:to:cc:subject:date:message-id:in-reply-to: references:content-transfer-encoding:mime-version; bh=yF+BxocJB25Oov0rShuQxub6z3HiyNs+68BVU08PFC0=; b=X6Z3fSbXqzROq/giJtXmSQ7Hi6t7Vgm+t9kuTKTquLcBOHhy4YkGsdPg orMb6rHLjxHy5vsjbXWxffnDt/S4xqtW2GRa4MtOH6X0AsDDp3M9/Cjyv dkeH3agn677CwBB80XDE24eGFKhU4F0tlU4ewKG2vLCRksGOw7/WXaVRr o1+HMS9eVfbfPTUjMiLzPawgyWefdd2IHOQgqi+NWQN1Hvjdnmv1vFY5h aqcdYwMwuUsUJOzG0uuJmDmgBw5V76vxG3unKZSEMabhUmcCppHPSJcqs 4nzSC1+1YoV09Ao2tNcYJiHJgWJ1RT5HODBcMQvJrRXkuxZtNHYjEXB3R Q==; IronPort-SDR: w/F1lgiwSjqP2ivN9OQDIyExtft0Hy/qnrfZ0T8q65bG60bWmOouNZ0GGUoJJjXNMtmg6fSTtp yObEYCwlPpOnLwLfrrI2QzE6/sxWQmpdoBfrhiz1yPpeA8pX36CduRsn6pPiQl51uzFcjq/aac 2GSIIkKAYsrhSTIaTAK7HtVr9RFk8OT5HA7ec1O2LeVmM6cP6HM6XR7dcdkgV73VrXmqPBWC3z 0z68OysQ0Ondgnl3omwY+vTXQjuB3id0tFDb9arK8sA7jCPqX/Vp+GuEz6tvON4T1DZ6KMC92P FIM= X-IronPort-AV: E=Sophos;i="5.84,229,1620662400"; d="scan'208";a="179035242" Received: from mail-bn7nam10lp2107.outbound.protection.outlook.com (HELO NAM10-BN7-obe.outbound.protection.outlook.com) ([104.47.70.107]) by ob1.hgst.iphmx.com with ESMTP; 10 Jul 2021 13:59:02 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oIbHyU7OzpDSGPymuV/IKLAkpnAw78C9vrMsf32XFYGgz4SL1CKMR6Q3xiDuxUaUsCjyPZxtsEefBEd7OOq8k51XdZTuXbFdbTV5dosfqWw06wBRl7WxR9FKuexOVuT/bp7xAy/WwWTD450uwPE5fwu6PXfgq9aWLsA/kWmpyUt8raVr6793MidRlsbIT0Oy8oY6twRTnRIomiOBVhSvhYiPPdFT1T9b5/lksAbReytE4ilIx2vgQycN1jOka9rIwr/YrLMW4imSklkzGDXX1+PjUQfJ2QGH8KKtyPFR/RGcc38jNrRibsWeV/h8Jvz+ITh/k+llxxElCf1jnRNF3A== 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-SenderADCheck; bh=Q0Es6u/cs3qDj2WPAlKpPs2Q+WE0wNUfJwBzbGFqVhI=; b=g7L89pffWCiP1DACOTIuKpL8W84OCu6CQCQwXnsCB75Wdpjn7K/H4ZoUdNoe+6f0izvgMvGtykvO7cHCAESmAmk3iYVnwTwCQXLq3cSjqFGCLxoQeKCLelr8NDIZDBHayM3qcl4D49DxtgGoyC9dxn9/J4E3EVkuXiI1zKJG+Ia3wUk/2ir4tA94/SVCwFbVYFUdoT7wI5lLtU0EeHmcRzBnI4297TRHKtq3VBj/+TBPzZkmn/j3rtrQKGtu4beEVq1cCHBBP8DwGSmY9AKaDC0rBA6kgkxMgcBQmoFc0wuqEHLcTNhlqZmPKxBAFTQxqpwM3Lwk/fKNCyQVGhjnzQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=wdc.com; dmarc=pass action=none header.from=wdc.com; dkim=pass header.d=wdc.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sharedspace.onmicrosoft.com; s=selector2-sharedspace-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Q0Es6u/cs3qDj2WPAlKpPs2Q+WE0wNUfJwBzbGFqVhI=; b=rS/peUQnkpZtIserUtz39f3cRHwtkkRtcaB4v1z+1+GRfabr7GUUSs3RFdHjcLEk7+K+FERyGsG08tDu8E1BqJBgwy7HhlRYYoNtrxRLA2Jmaij1G9yNkw+vKAR6T3jZYqcvfzd+zyvTPXvBsamypsaq23xFDR/BqP4e86VSbQg= Authentication-Results: wdc.com; dkim=none (message not signed) header.d=none;wdc.com; dmarc=none action=none header.from=wdc.com; Received: from CO6PR04MB7812.namprd04.prod.outlook.com (2603:10b6:303:138::6) by CO1PR04MB8234.namprd04.prod.outlook.com (2603:10b6:303:161::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21; Sat, 10 Jul 2021 05:59:01 +0000 Received: from CO6PR04MB7812.namprd04.prod.outlook.com ([fe80::a153:b7f8:c87f:89f8]) by CO6PR04MB7812.namprd04.prod.outlook.com ([fe80::a153:b7f8:c87f:89f8%9]) with mapi id 15.20.4308.025; Sat, 10 Jul 2021 05:59:01 +0000 From: Anup Patel To: Atish Patra , Alistair Francis Cc: Green Wan , Anup Patel , opensbi@lists.infradead.org, Anup Patel Subject: [PATCH v3 5/5] lib: utils/reset: Add generic GPIO reset driver Date: Sat, 10 Jul 2021 11:28:27 +0530 Message-Id: <20210710055827.1535906-6-anup.patel@wdc.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210710055827.1535906-1-anup.patel@wdc.com> References: <20210710055827.1535906-1-anup.patel@wdc.com> X-ClientProxiedBy: MA1PR01CA0107.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:1::23) To CO6PR04MB7812.namprd04.prod.outlook.com (2603:10b6:303:138::6) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from wdc.com (122.171.166.125) by MA1PR01CA0107.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:1::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21 via Frontend Transport; Sat, 10 Jul 2021 05:58:59 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8f7eac91-75a6-48f2-ce43-08d94367d0ab X-MS-TrafficTypeDiagnostic: CO1PR04MB8234: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: WDCIPOUTBOUND: EOP-TRUE X-MS-Oob-TLC-OOBClassifiers: OLM:4303; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +Gqc1Xbq7J3MZWQMW8Pc2o0aFcQDwS7gKZeLMgYFApow4e/PAwLp6lLSaDd4OL81d47Rz7KS1XJA4GvFI6cBZp1KWueQuj7gZ0HsCAJ8aVAiA4QtJJErTqpCPMEAKWnq95VtZHfbmyR6i9Znkwia4IIAcxdqK9T28yVcB6rePUqm5ZhpZobN2QDqi0WRalIMvWaTcgQc3qFBQ0p8W1Cc4e3uIQ0yvePxuSJnY2BDS8pkfNNCtzN4zXCyDqwIFu2WEL1pGxv0vPU+1Bo+xY7yrtRhssBCT7B95mOvrhw+txAUdZLqdDB8dHUAs8OtjifOBbUhTvOtSY2509MaW4p2M7FDg0VExvo5QftZc/pm9ELIbTmaEMS380EmZleRsZSuDwyur09o1LMisY600pKGF66L51nw0hYDC6B6JTrIj5ggBgRmWbyrvruoe97W9Ogg9eN6Aksh3/4D84AIx8NEJCZIA0Bs1P5CH8mPFKsdFmbUGAWt5J0PXmb5N1KjpaWW6kezn3/keOArgh11p6HFt/mn5dY9PBpkTcgPhmb8lc493Q75Owx+1p+5R7UQBwBRdhpMnHAA6M+2e6jUjMukbbQ8/FcygPCu+1rfCVFOnDDkl48l5MojZqaglsFYRNzeB4wg0PViAVCw20OE+d0N+aa5v4+vrZRibecrxhNBoDG+kSVhl7dQXAMP2adTv3DMJ0GXF1kpzUMb1xragIi7Ze8tdnpAIt+W1DLqAkls7tA= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CO6PR04MB7812.namprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(376002)(366004)(39860400002)(396003)(136003)(346002)(1076003)(44832011)(2616005)(8676002)(2906002)(7696005)(38100700002)(52116002)(8936002)(5660300002)(55016002)(110136005)(6636002)(86362001)(956004)(54906003)(316002)(38350700002)(6666004)(4326008)(478600001)(66556008)(66476007)(26005)(66946007)(186003)(36756003)(8886007)(41533002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Jd06RbeAnUv4/pm6af0KJcuJJ6pQQDgAyulQuMSoDxxletBGPD54K5M9aV6TGNmN2+XiMHr3zNxjNMUOdhFPxBdTA4aPd6kbB1I8yw1cHSB7noyXGv0YCqwkPVJXbAqpOrWq/9cQ+sil4LAGqbjkMjEWtOqfeDcd914JWClxRv+1fGkNivXWrTVIq5TqX3NHNsGmE9pXjjx4rLYb1ADk4lr2/PR/CDd1tM8DThnOjZHwThABfmAXZvoWm6yO2klZrqNqwSWvBaGGk/WEN6VEitRFFnAtzwYWJ6q7UiTYzsVZZ/S+0YJWDIN/swIyuTDsgkXZOsjkLQNxHfl88trTHZUYqGIVGqbrEn/cSN0oVFKd6Sk80HqYd5bHFtwdde6FpZ8tQj8IjWwEqRx758fNBtS1Hi9wDftEK2TgInabpbY4nqWpb9sLadRmWIzRaDqnsdRA4R7ZY4rOSweLzB7V/zRDbbLWkV21aRsrAYYssFOamxmGe791iiKRd2gHcXJhSvBeQn9YcbUJXj/qkNVjjuWk3nlQjrkqndfTlSdQpouf3MSf4urIX1OZcC9K9FCZuQgKXjYspmrURYsnHinNF5JFgyO/nIVbsBeHHqpxrQRtnXfwFGw2//D1fweiE5SAdQhDpb6+CD+3rU7644xSFNqGlBka5X2Yh06DoWxvOtnRgm5UmltnmjToYhZjkTDQEOFyUIvS8SPH0XhdwDLqgrbDqrgogQeGMmEbe2Tp3MiM9gJizr5F1H90p4KrXYdPLetE3ZXDYU/RUEr7C6g8P0XMfYM821oloC6KyiyPsP9MzkATEULoVXOtuW5bo/V1N228RxxeyOKzNmt4TzhIgcRlSF4eXz2/05NdWSVv8yKiQJt9WhnIQDuV33bcPd4l0B+o2zdghgcfhC0v5o/D4KWuuLzA2HzWKmM+Xul1lXxrfrAcXvxCFE+N/mxpAbeVC8MIcoe5tTcvkfNPg4tlNaxtVMSqqDtXiSx8tuYERmKqCst6uWbcZAtgw+nS+uixcmKllA2MnvyN30oDXrmpajV8vOZCIXBc9oJ8OqPnYErrFxqLqVNBc7P6Ob2oqLiue9KD9VI4oDXG1T3nY2n9W4HnqqlCXcbvaK7hsCzXwDD2rwHq+3/78cNNAPfeCJeBtw2RkoROwTNuRwOMIW/GuLrkycIub8A1+X2E5CzgqHC8kPE6VSWCV9pFRsbxHkY34o9yC+0Ct0hubrXswXPXgx/EhK5iHKSuHZi+kp9c6RJvbzu4DQvH6jSSZAmvyG233lyruihs6WamLAb2+fBeXYu0Tdr+vMClV5j+u535yq9VpUIkHrVAiaubqi4mIbIZ X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8f7eac91-75a6-48f2-ce43-08d94367d0ab X-MS-Exchange-CrossTenant-AuthSource: CO6PR04MB7812.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jul 2021 05:59:01.5091 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 11LzGhXUz0f00g38cG5W+LvlmYsjAgO5Lk//StQdCA4ThE/h/T5pE2r/UX+HgTHzdHdeJHadQ1QEvTovcTIIDg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR04MB8234 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210709_225903_401795_11689B4D X-CRM114-Status: GOOD ( 21.76 ) X-Spam-Score: -2.5 (--) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: From: Green Wan We add generic GPIO reset driver inspired from gpio-restart and gpio-poweroff drivers of Linux kernel. Signed-off-by: Green Wan Signed-off-by: Anup Patel --- lib/utils/reset/fdt_reset.c | 2 + lib/utils/reset/fdt_reset_gpio.c | 141 ++++++++++++++++++++++++++++ [...] Content analysis details: (-2.5 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [216.71.153.141 listed in list.dnswl.org] 0.0 SPF_NONE SPF: sender does not publish an SPF Record -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain 0.0 MSGID_FROM_MTA_HEADER Message-Id was added by a relay X-BeenThere: opensbi@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "opensbi" Errors-To: opensbi-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Green Wan We add generic GPIO reset driver inspired from gpio-restart and gpio-poweroff drivers of Linux kernel. Signed-off-by: Green Wan Signed-off-by: Anup Patel Reviewed-by: Atish Patra --- lib/utils/reset/fdt_reset.c | 2 + lib/utils/reset/fdt_reset_gpio.c | 141 +++++++++++++++++++++++++++++++ lib/utils/reset/objects.mk | 1 + 3 files changed, 144 insertions(+) create mode 100644 lib/utils/reset/fdt_reset_gpio.c diff --git a/lib/utils/reset/fdt_reset.c b/lib/utils/reset/fdt_reset.c index 48a49fb..aa5f59f 100644 --- a/lib/utils/reset/fdt_reset.c +++ b/lib/utils/reset/fdt_reset.c @@ -12,11 +12,13 @@ #include #include +extern struct fdt_reset fdt_reset_gpio; extern struct fdt_reset fdt_reset_sifive_test; extern struct fdt_reset fdt_reset_htif; extern struct fdt_reset fdt_reset_thead; static struct fdt_reset *reset_drivers[] = { + &fdt_reset_gpio, &fdt_reset_sifive_test, &fdt_reset_htif, &fdt_reset_thead, diff --git a/lib/utils/reset/fdt_reset_gpio.c b/lib/utils/reset/fdt_reset_gpio.c new file mode 100644 index 0000000..083076f --- /dev/null +++ b/lib/utils/reset/fdt_reset_gpio.c @@ -0,0 +1,141 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2021 SiFive + * Copyright (c) 2021 Western Digital Corporation or its affiliates. + * + * Authors: + * Green Wan + * Anup Patel + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +struct gpio_reset { + struct gpio_pin pin; + u32 active_delay; + u32 inactive_delay; +}; + +static struct gpio_reset poweroff = { + .active_delay = 100, + .inactive_delay = 100 +}; + +static struct gpio_reset restart = { + .active_delay = 100, + .inactive_delay = 100 +}; + +/* Custom mdelay function until we have a generic mdelay() API */ +static void gpio_mdelay(unsigned long msecs) +{ + volatile int i; + while (msecs--) + for (i = 0; i < 10000; i++) ; +} + +static int gpio_system_reset_check(u32 type, u32 reason) +{ + switch (type) { + case SBI_SRST_RESET_TYPE_SHUTDOWN: + case SBI_SRST_RESET_TYPE_COLD_REBOOT: + case SBI_SRST_RESET_TYPE_WARM_REBOOT: + return 1; + } + + return 0; +} + +static void gpio_system_reset(u32 type, u32 reason) +{ + struct gpio_reset *reset = NULL; + + switch (type) { + case SBI_SRST_RESET_TYPE_SHUTDOWN: + reset = &poweroff; + break; + case SBI_SRST_RESET_TYPE_COLD_REBOOT: + case SBI_SRST_RESET_TYPE_WARM_REBOOT: + reset = &restart; + break; + } + + if (reset) { + if (!reset->pin.chip) { + sbi_printf("%s: gpio pin not available\n", __func__); + goto skip_reset; + } + + /* drive it active, also inactive->active edge */ + gpio_direction_output(&reset->pin, 1); + gpio_mdelay(reset->active_delay); + + /* drive inactive, also active->inactive edge */ + gpio_set(&reset->pin, 0); + gpio_mdelay(reset->inactive_delay); + + /* drive it active, also inactive->active edge */ + gpio_set(&reset->pin, 1); + +skip_reset: + /* hang !!! */ + sbi_hart_hang(); + } +} + +static struct sbi_system_reset_device gpio_reset = { + .name = "gpio-reset", + .system_reset_check = gpio_system_reset_check, + .system_reset = gpio_system_reset +}; + +static int gpio_reset_init(void *fdt, int nodeoff, + const struct fdt_match *match) +{ + int rc, len; + const fdt32_t *val; + bool is_restart = (ulong)match->data; + const char *dir_prop = (is_restart) ? "open-source" : "input"; + struct gpio_reset *reset = (is_restart) ? &restart : &poweroff; + + rc = fdt_gpio_pin_get(fdt, nodeoff, 0, &reset->pin); + if (rc) + return rc; + + if (fdt_getprop(fdt, nodeoff, dir_prop, &len)) { + rc = gpio_direction_input(&reset->pin); + if (rc) + return rc; + } + + val = fdt_getprop(fdt, nodeoff, "active-delay-ms", &len); + if (len > 0) + reset->active_delay = fdt32_to_cpu(*val); + + val = fdt_getprop(fdt, nodeoff, "inactive-delay-ms", &len); + if (len > 0) + reset->inactive_delay = fdt32_to_cpu(*val); + + sbi_system_reset_set_device(&gpio_reset); + + return 0; +} + +static const struct fdt_match gpio_reset_match[] = { + { .compatible = "gpio-poweroff", .data = (void *)FALSE }, + { .compatible = "gpio-restart", .data = (void *)TRUE }, + { }, +}; + +struct fdt_reset fdt_reset_gpio = { + .match_table = gpio_reset_match, + .init = gpio_reset_init, +}; diff --git a/lib/utils/reset/objects.mk b/lib/utils/reset/objects.mk index 672aad9..4215396 100644 --- a/lib/utils/reset/objects.mk +++ b/lib/utils/reset/objects.mk @@ -8,6 +8,7 @@ # libsbiutils-objs-y += reset/fdt_reset.o +libsbiutils-objs-y += reset/fdt_reset_gpio.o libsbiutils-objs-y += reset/fdt_reset_htif.o libsbiutils-objs-y += reset/fdt_reset_thead.o libsbiutils-objs-y += reset/fdt_reset_thead_asm.o