From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5891FE7F120 for ; Tue, 26 Sep 2023 20:05:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235817AbjIZUGC (ORCPT ); Tue, 26 Sep 2023 16:06:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60646 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235606AbjIZUGB (ORCPT ); Tue, 26 Sep 2023 16:06:01 -0400 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2070.outbound.protection.outlook.com [40.107.243.70]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CD8D5D6; Tue, 26 Sep 2023 13:05:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GCFLepEKzGuxn6PTYv4iKe1vgQzmPwQYrru1ad0fV8Vh+v6/oYQou3yfzadJ+NsLmg9xo6/T2bUot+OVKcuDlVbpLytouDFXdwr4/U85DfWqn94m5A83kdhGmPU5khfIyMyrc3OG1zrDUdVaOAS/04gMpxs95BLUyKiZpKR7RIhbOQ5yYHmsApy/j1WE01/fhogUa0nyACkH8TzLsiyOaczLKdUmt+q9KUWOZ5BuhBV8COHLzOazwbv5qH8V/ThH6BUn38GrBQklUxFNYL8a1tCi+8HT15fy4CNN+w+dqs+JMcHYa0j47JgGyELS9KHfLChTNcVgO5ns7qsAppqLlA== 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=uObNh1yKGnx9276qFxdZOOUZx9wJsTpJpILuuNVoRbQ=; b=M60Bhx2raTONCJL5tet4Y/ZPUPsSLFge6q9amWqs9uLF9JUu5KE+O9Vyn1/SaUpPr6kj49scoIaokvH/aCqTbBJlZiSabbwC5Y+/Bsoi7AOrJpmlAUaQS9272tH26Dj2SYsuXcFy8RWN6viMwiXpqOHdgrpvSmPbCwnwZcq5dsw4Wdr1tn5OWAUC5iS1r4T9GLXizr8+uAXMV62kgtjK3EDgtMLc9eVWMOF4MhAMutuYVm08XNuYR9SRSYaDqKbdTKlgvCutR4HEi5UY8ge/14lIXMYmxQA8ughfPY1XVxOGJShSzm6mbvWVOkL7zVKGnN6tcnLBZkcgy3WYtU54zg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=gmail.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uObNh1yKGnx9276qFxdZOOUZx9wJsTpJpILuuNVoRbQ=; b=p5XLkCQ0lRQ9qO1ZW/HDYa1VQAQSP3jNHs6dxiZSqJRqaMli9GxzxrIOvyEiiKTtLABUmE5ZmhdoE5S2l2qAq1j7Ti4Gj5ziTPfCcUV8yvdJD0l1c7vnkcbeGhfsq4/jHDIUv6fqoeL4OJTH8XojHgFTC/wOyS0DfWImtb4DWFs= Received: from BLAPR03CA0114.namprd03.prod.outlook.com (2603:10b6:208:32a::29) by BN9PR12MB5033.namprd12.prod.outlook.com (2603:10b6:408:132::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.23; Tue, 26 Sep 2023 20:05:52 +0000 Received: from BL6PEPF0001AB75.namprd02.prod.outlook.com (2603:10b6:208:32a:cafe::f3) by BLAPR03CA0114.outlook.office365.com (2603:10b6:208:32a::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.35 via Frontend Transport; Tue, 26 Sep 2023 20:05:51 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BL6PEPF0001AB75.mail.protection.outlook.com (10.167.242.168) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6838.14 via Frontend Transport; Tue, 26 Sep 2023 20:05:51 +0000 Received: from platform-dev1.pensando.io (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Tue, 26 Sep 2023 15:05:48 -0500 From: Brad Larson To: CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: Re: [PATCH v16 6/6] soc: amd: Add support for AMD Pensando SoC Controller Date: Tue, 26 Sep 2023 13:05:41 -0700 Message-ID: <20230926200541.35787-1-blarson@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB75:EE_|BN9PR12MB5033:EE_ X-MS-Office365-Filtering-Correlation-Id: b969c263-7d64-46f5-a98f-08dbbecbfc0e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vQfodNG/N7OkrYS3Cy5LSiTOK3owTPIjuJ9dtt8P7QK7MG04gMCksZUAX8Zo+C6gOqGsjFqAePndpIr7xQKcB+MO++y9n5GMcFG7I0elQlOSuHyjgPZHnVivYgZ4rxo+DR8iMSQKr7eJ8rKvoOsTReKeW3s6LEsl52xB1f1T0SIVnt9D7G6kAQbTwQJc2lMGo7pz9W1kn53kHoeVx32mHSLP3cGwCDm77d8w2j+TxKje4F9Eq1FQoNgiPqt0Lm3ka90lHpHha/iMI7B1whSjSIhrgtIoeEiiawP5Zl9CHTl51BahYDVTkKNdh9s1r6tbQIeVbd3UW0h3iug6Prw02woYpj4CrMn4hOMKC8OjeTZaI+v2ouY+vxJ5oamFL5RZt1r2/dmVljaYmdKoZSpl5O/g4lkigwO6jgQ6KqZbhGwEcuWbx81b7O1micH5uCka0TTegMgyBOoiprnaPBqbaOrJgUTMrcbgdbQXj+1HV3xlDyHJCPhUE9nroy4wKcVxb6gyaKkFlh13ZmM3FwWg2H9NwIZMfmGRr3BrzfUeNMxzKI9b+V7ayQEdTi00K0hx9moHKKNP5Kie6kopZlv5KJCFLNr5VI3hhQ1lHFZHP+18FwsEWvg42FjgvdY1yRjfzR+IAbBV0XZXwlN9rcFU81SRLhKo9AU9IndAkhP7Sl1jBEz6Qu8p3855n62sOmo/XyhbJGx4Az1Y448H91wadDoLDGYE6pxbqjwo3vRs2nQtzeGcJdcR8v3mIeEYHcnaEINXWJ1z2QnK/4QJhBribw== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230031)(4636009)(136003)(376002)(346002)(39860400002)(396003)(230922051799003)(82310400011)(451199024)(186009)(1800799009)(36840700001)(46966006)(40470700004)(478600001)(8936002)(70206006)(70586007)(336012)(6916009)(83380400001)(40460700003)(2616005)(1076003)(26005)(16526019)(4326008)(41300700001)(47076005)(426003)(36860700001)(54906003)(7416002)(316002)(7406005)(6666004)(2906002)(8676002)(53546011)(40480700001)(36756003)(81166007)(356005)(82740400003)(5660300002)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Sep 2023 20:05:51.8733 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b969c263-7d64-46f5-a98f-08dbbecbfc0e X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB75.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR12MB5033 Precedence: bulk List-ID: X-Mailing-List: linux-mmc@vger.kernel.org Hi Andy, On Thu, Sep 21, 2023 at 18:19:57 +0300 Andy Shevchenko wrote: > On Thu, Sep 14, 2023 at 12:52 AM Brad Larson wrote: >> >> The Pensando SoC controller is a SPI connected companion device >> that is present in all Pensando SoC board designs. The essential >> board management registers are accessed on chip select 0 with >> board mgmt IO support accessed using additional chip selects. ... >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include > > types.h ? I'll add types.h >> +#include ... >> + struct penctrl_device *penctrl; > >> + u8 tx_buf[PENCTRL_MAX_MSG_LEN]; >> + u8 rx_buf[PENCTRL_MAX_MSG_LEN]; > > These are not DMA-safe, is this a problem? It's not a problem, the peripheral is PIO FIFO driven only. >> + struct spi_transfer t[2] = {}; >> + struct penctrl_spi_xfer *msg; >> + struct spi_device *spi; >> + unsigned int num_msgs; >> + struct spi_message m; >> + u32 size; >> + int ret; ... >> + /* Verify and prepare SPI message */ >> + size = _IOC_SIZE(cmd); >> + num_msgs = size / sizeof(struct penctrl_spi_xfer); > > sizeof (*msg) ? Yes, more compact for here and below. > >> + if (num_msgs > 2 || size == 0 || size % sizeof(struct penctrl_spi_xfer)) { > > Dito. > >> + ret = -EINVAL; >> + goto out_unlock; >> + } ... >> + msg = memdup_user((struct penctrl_spi_xfer *)arg, size); >> + if (IS_ERR(msg)) { >> + ret = PTR_ERR(msg); >> + goto out_unlock; >> + } > > Wondering if you can start using cleanup.h. Perhaps if recommended, I don't see DEFINE_(FREE,UNLOCK,...) being used. ... >> + /* Perform the transfer */ >> + mutex_lock(&spi_lock); >> + ret = spi_sync(spi, &m); >> + mutex_unlock(&spi_lock); >> + if (ret || (num_msgs == 1)) >> + goto out_unlock; > > Second conditional will return 0. Is it by design? > Since it's not so obvious I would split these conditionals. I'll split this to be clear, yes return 0 for success. ... >> + spi->chip_select = current_cs; > > spi_set_chipselect() Yes, I'll change to inline function spi_set_chipselect(spi, 0, current_cs). The second arg must be legacy as its unused. ... >> +static int penctrl_regs_read(struct penctrl_device *penctrl, u32 reg, u32 *val) >> +{ >> + struct spi_device *spi = penctrl->spi; >> + struct spi_transfer t[2] = {}; >> + struct spi_message m; > >> + u8 txbuf[3]; >> + u8 rxbuf[1]; > > Not DMA-safe. Is it a problem? > Not a problem, the peripheral is PIO only using FIFOs. >> + int ret; > >> + txbuf[0] = PENCTRL_SPI_CMD_REGRD; >> + txbuf[1] = reg; >> + txbuf[2] = 0; > > Can be assigned in the definition block > > u8 txbuf[] = { ... }; > I'll change that here and below. >> + t[0].tx_buf = txbuf; >> + t[0].len = sizeof(txbuf); > >> + rxbuf[0] = 0; > > Ditto. > > u8 rxbuf[] = { 0 }; > >> + t[1].rx_buf = rxbuf; >> + t[1].len = sizeof(rxbuf); >> + >> + spi_message_init_with_transfers(&m, t, ARRAY_SIZE(t)); >> + ret = spi_sync(spi, &m); >> + if (ret) >> + return ret; >> + >> + *val = rxbuf[0]; >> + return 0; >> +} ... >> +static int penctrl_regs_write(struct penctrl_device *penctrl, u32 reg, u32 val) >> +{ >> + struct spi_device *spi = penctrl->spi; >> + struct spi_transfer t = {}; >> + struct spi_message m; >> + u8 txbuf[4]; >> + txbuf[0] = PENCTRL_SPI_CMD_REGWR; >> + txbuf[1] = reg; >> + txbuf[2] = val; >> + txbuf[3] = 0; > Can be assigned in the definition block. >> + t.tx_buf = txbuf; >> + t.len = sizeof(txbuf); >> + spi_message_init_with_transfers(&m, &t, 1); >> + return spi_sync(spi, &m); >> +} ... >> + struct penctrl_device *penctrl = >> + container_of(rcdev, struct penctrl_device, rcdev); > > One line? I'll check/change. > >... > >> + spi->chip_select = 0; > > spi_set_chipselect() Yes, spi_set_chipselect(spi, 0, 0); ... >> + struct penctrl_device *penctrl = >> + container_of(rcdev, struct penctrl_device, rcdev); > > One line? I'll check/change. ... >> + spi->chip_select = 0; > > spi_set_chipselect() Yes, spi_set_chipselect(spi, 0, 0); ... >> +static int penctrl_spi_probe(struct spi_device *spi) >> +{ >> + int i, ret; >> + >> + /* Allocate driver data */ >> + penctrl = kzalloc(sizeof(*penctrl), GFP_KERNEL); > > devm_kzalloc() ? Yes will change to devm_kzalloc(). >> + if (!penctrl) >> + return -ENOMEM; >> + >> + penctrl->spi = spi; >> + mutex_init(&spi_lock); >> + >> + for (i = 0; i < ARRAY_SIZE(penctrl_devices); i++) { >> + ret = misc_register(&penctrl_devices[i]); >> + if (ret) { >> + dev_err(&spi->dev, "Failed to register device %s\n", >> + penctrl_devices[i].name); >> + goto cleanup; >> + } >> + } >> + >> + /* Register reset controller */ >> + penctrl->rcdev.dev = &spi->dev; >> + penctrl->rcdev.ops = &penctrl_reset_ops; >> + penctrl->rcdev.owner = THIS_MODULE; >> + penctrl->rcdev.of_node = spi->dev.of_node; >> + penctrl->rcdev.nr_resets = 1; >> + device_set_node(penctrl->rcdev.dev, dev_fwnode(&spi->dev)); >> + >> + ret = reset_controller_register(&penctrl->rcdev); >> + if (ret) >> + return dev_err_probe(&spi->dev, ret, >> + "failed to register reset controller\n"); >> + return 0; > >> +cleanup: > > err_cleanup: ? Will use err_cleanup: >> + for (i = 0; i < ARRAY_SIZE(penctrl_devices); i++) { > > while (i--) { > Yes, can change to while(), order doesn't matter. >> + if (penctrl_devices[i].this_device) >> + misc_deregister(&penctrl_devices[i]); >> + } >> + return ret; >> +} Regards, Brad From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 704E8E7F120 for ; Tue, 26 Sep 2023 20:06:44 +0000 (UTC) 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=xDsXxwlYXbIWcqIo4nEhtzx6Xc+M/qniX66o1rcNm60=; b=YMG1WTWH6KBJgT mnalwZjBCyHeVHBlvNrgEHGzFnf8UjNutijww+C55cmUPfhhKuO81cO4EaNnLviNvdvet5Xd1Yhgu oqGvIeftjDI2mDBLFBLDRneYk/RCuq/aVEB3dBNUfXaNoKIJbydDnCyNSSBazDTOYJHeh65iylUjD 06BkMPXyJvmEEk2bxcCChaCwpIXpdpsxnSZgnTHT7BA217hySaS1dtolzDhfXrpHaZiDqtf7wM1Ss lJ482ZHUmVvBKlgDmElJI0KMl7uOg6cvl/zIwwOrEGXL3wV9iUnNSnvBlAESWL1daSUuJQhvWxPwT aVAC+QutmoJMTyOL29hA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qlEJy-00GyJu-1W; Tue, 26 Sep 2023 20:06:14 +0000 Received: from mail-dm6nam12on20624.outbound.protection.outlook.com ([2a01:111:f400:fe59::624] helo=NAM12-DM6-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qlEJu-00GyJY-3B for linux-arm-kernel@lists.infradead.org; Tue, 26 Sep 2023 20:06:12 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GCFLepEKzGuxn6PTYv4iKe1vgQzmPwQYrru1ad0fV8Vh+v6/oYQou3yfzadJ+NsLmg9xo6/T2bUot+OVKcuDlVbpLytouDFXdwr4/U85DfWqn94m5A83kdhGmPU5khfIyMyrc3OG1zrDUdVaOAS/04gMpxs95BLUyKiZpKR7RIhbOQ5yYHmsApy/j1WE01/fhogUa0nyACkH8TzLsiyOaczLKdUmt+q9KUWOZ5BuhBV8COHLzOazwbv5qH8V/ThH6BUn38GrBQklUxFNYL8a1tCi+8HT15fy4CNN+w+dqs+JMcHYa0j47JgGyELS9KHfLChTNcVgO5ns7qsAppqLlA== 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=uObNh1yKGnx9276qFxdZOOUZx9wJsTpJpILuuNVoRbQ=; b=M60Bhx2raTONCJL5tet4Y/ZPUPsSLFge6q9amWqs9uLF9JUu5KE+O9Vyn1/SaUpPr6kj49scoIaokvH/aCqTbBJlZiSabbwC5Y+/Bsoi7AOrJpmlAUaQS9272tH26Dj2SYsuXcFy8RWN6viMwiXpqOHdgrpvSmPbCwnwZcq5dsw4Wdr1tn5OWAUC5iS1r4T9GLXizr8+uAXMV62kgtjK3EDgtMLc9eVWMOF4MhAMutuYVm08XNuYR9SRSYaDqKbdTKlgvCutR4HEi5UY8ge/14lIXMYmxQA8ughfPY1XVxOGJShSzm6mbvWVOkL7zVKGnN6tcnLBZkcgy3WYtU54zg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=gmail.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uObNh1yKGnx9276qFxdZOOUZx9wJsTpJpILuuNVoRbQ=; b=p5XLkCQ0lRQ9qO1ZW/HDYa1VQAQSP3jNHs6dxiZSqJRqaMli9GxzxrIOvyEiiKTtLABUmE5ZmhdoE5S2l2qAq1j7Ti4Gj5ziTPfCcUV8yvdJD0l1c7vnkcbeGhfsq4/jHDIUv6fqoeL4OJTH8XojHgFTC/wOyS0DfWImtb4DWFs= Received: from BLAPR03CA0114.namprd03.prod.outlook.com (2603:10b6:208:32a::29) by BN9PR12MB5033.namprd12.prod.outlook.com (2603:10b6:408:132::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.23; Tue, 26 Sep 2023 20:05:52 +0000 Received: from BL6PEPF0001AB75.namprd02.prod.outlook.com (2603:10b6:208:32a:cafe::f3) by BLAPR03CA0114.outlook.office365.com (2603:10b6:208:32a::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6792.35 via Frontend Transport; Tue, 26 Sep 2023 20:05:51 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BL6PEPF0001AB75.mail.protection.outlook.com (10.167.242.168) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6838.14 via Frontend Transport; Tue, 26 Sep 2023 20:05:51 +0000 Received: from platform-dev1.pensando.io (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Tue, 26 Sep 2023 15:05:48 -0500 From: Brad Larson To: CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: Re: [PATCH v16 6/6] soc: amd: Add support for AMD Pensando SoC Controller Date: Tue, 26 Sep 2023 13:05:41 -0700 Message-ID: <20230926200541.35787-1-blarson@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: References: MIME-Version: 1.0 X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB03.amd.com (10.181.40.144) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB75:EE_|BN9PR12MB5033:EE_ X-MS-Office365-Filtering-Correlation-Id: b969c263-7d64-46f5-a98f-08dbbecbfc0e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vQfodNG/N7OkrYS3Cy5LSiTOK3owTPIjuJ9dtt8P7QK7MG04gMCksZUAX8Zo+C6gOqGsjFqAePndpIr7xQKcB+MO++y9n5GMcFG7I0elQlOSuHyjgPZHnVivYgZ4rxo+DR8iMSQKr7eJ8rKvoOsTReKeW3s6LEsl52xB1f1T0SIVnt9D7G6kAQbTwQJc2lMGo7pz9W1kn53kHoeVx32mHSLP3cGwCDm77d8w2j+TxKje4F9Eq1FQoNgiPqt0Lm3ka90lHpHha/iMI7B1whSjSIhrgtIoeEiiawP5Zl9CHTl51BahYDVTkKNdh9s1r6tbQIeVbd3UW0h3iug6Prw02woYpj4CrMn4hOMKC8OjeTZaI+v2ouY+vxJ5oamFL5RZt1r2/dmVljaYmdKoZSpl5O/g4lkigwO6jgQ6KqZbhGwEcuWbx81b7O1micH5uCka0TTegMgyBOoiprnaPBqbaOrJgUTMrcbgdbQXj+1HV3xlDyHJCPhUE9nroy4wKcVxb6gyaKkFlh13ZmM3FwWg2H9NwIZMfmGRr3BrzfUeNMxzKI9b+V7ayQEdTi00K0hx9moHKKNP5Kie6kopZlv5KJCFLNr5VI3hhQ1lHFZHP+18FwsEWvg42FjgvdY1yRjfzR+IAbBV0XZXwlN9rcFU81SRLhKo9AU9IndAkhP7Sl1jBEz6Qu8p3855n62sOmo/XyhbJGx4Az1Y448H91wadDoLDGYE6pxbqjwo3vRs2nQtzeGcJdcR8v3mIeEYHcnaEINXWJ1z2QnK/4QJhBribw== X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230031)(4636009)(136003)(376002)(346002)(39860400002)(396003)(230922051799003)(82310400011)(451199024)(186009)(1800799009)(36840700001)(46966006)(40470700004)(478600001)(8936002)(70206006)(70586007)(336012)(6916009)(83380400001)(40460700003)(2616005)(1076003)(26005)(16526019)(4326008)(41300700001)(47076005)(426003)(36860700001)(54906003)(7416002)(316002)(7406005)(6666004)(2906002)(8676002)(53546011)(40480700001)(36756003)(81166007)(356005)(82740400003)(5660300002)(36900700001);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Sep 2023 20:05:51.8733 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b969c263-7d64-46f5-a98f-08dbbecbfc0e X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB75.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR12MB5033 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230926_130611_029122_CE5F0B6E X-CRM114-Status: GOOD ( 26.16 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgQW5keSwKCk9uIFRodSwgU2VwIDIxLCAyMDIzIGF0IDE4OjE5OjU3ICswMzAwIEFuZHkgU2hl dmNoZW5rbyA8YW5keS5zaGV2Y2hlbmtvQGdtYWlsLmNvbT4gd3JvdGU6Cj4gT24gVGh1LCBTZXAg MTQsIDIwMjMgYXQgMTI6NTLigK9BTSBCcmFkIExhcnNvbiA8YmxhcnNvbkBhbWQuY29tPiB3cm90 ZToKPj4KPj4gVGhlIFBlbnNhbmRvIFNvQyBjb250cm9sbGVyIGlzIGEgU1BJIGNvbm5lY3RlZCBj b21wYW5pb24gZGV2aWNlCj4+IHRoYXQgaXMgcHJlc2VudCBpbiBhbGwgUGVuc2FuZG8gU29DIGJv YXJkIGRlc2lnbnMuICBUaGUgZXNzZW50aWFsCj4+IGJvYXJkIG1hbmFnZW1lbnQgcmVnaXN0ZXJz IGFyZSBhY2Nlc3NlZCBvbiBjaGlwIHNlbGVjdCAwIHdpdGgKPj4gYm9hcmQgbWdtdCBJTyBzdXBw b3J0IGFjY2Vzc2VkIHVzaW5nIGFkZGl0aW9uYWwgY2hpcCBzZWxlY3RzLgoKLi4uCgo+PiArI2lu Y2x1ZGUgPGxpbnV4L2NkZXYuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPj4gKyNp bmNsdWRlIDxsaW51eC9lcnIuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9mcy5oPgo+PiArI2luY2x1 ZGUgPGxpbnV4L2luaXQuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+Cj4+ICsj aW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9y ZXNldC1jb250cm9sbGVyLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgo+Cj4gdHlw ZXMuaCA/CgpJJ2xsIGFkZCB0eXBlcy5oCgo+PiArI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4K Ci4uLgoKPj4gKyAgICAgICBzdHJ1Y3QgcGVuY3RybF9kZXZpY2UgKnBlbmN0cmw7Cj4KPj4gKyAg ICAgICB1OCB0eF9idWZbUEVOQ1RSTF9NQVhfTVNHX0xFTl07Cj4+ICsgICAgICAgdTggcnhfYnVm W1BFTkNUUkxfTUFYX01TR19MRU5dOwo+Cj4gVGhlc2UgYXJlIG5vdCBETUEtc2FmZSwgaXMgdGhp cyBhIHByb2JsZW0/CgpJdCdzIG5vdCBhIHByb2JsZW0sIHRoZSBwZXJpcGhlcmFsIGlzIFBJTyBG SUZPIGRyaXZlbiBvbmx5LgoKPj4gKyAgICAgICBzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHRbMl0gPSB7 fTsKPj4gKyAgICAgICBzdHJ1Y3QgcGVuY3RybF9zcGlfeGZlciAqbXNnOwo+PiArICAgICAgIHN0 cnVjdCBzcGlfZGV2aWNlICpzcGk7Cj4+ICsgICAgICAgdW5zaWduZWQgaW50IG51bV9tc2dzOwo+ PiArICAgICAgIHN0cnVjdCBzcGlfbWVzc2FnZSBtOwo+PiArICAgICAgIHUzMiBzaXplOwo+PiAr ICAgICAgIGludCByZXQ7CgouLi4KCj4+ICsgICAgICAgLyogVmVyaWZ5IGFuZCBwcmVwYXJlIFNQ SSBtZXNzYWdlICovCj4+ICsgICAgICAgc2l6ZSA9IF9JT0NfU0laRShjbWQpOwo+PiArICAgICAg IG51bV9tc2dzID0gc2l6ZSAvIHNpemVvZihzdHJ1Y3QgcGVuY3RybF9zcGlfeGZlcik7Cj4KPiBz aXplb2YgKCptc2cpID8KClllcywgbW9yZSBjb21wYWN0IGZvciBoZXJlIGFuZCBiZWxvdy4KCj4K Pj4gKyAgICAgICBpZiAobnVtX21zZ3MgPiAyIHx8IHNpemUgPT0gMCB8fCBzaXplICUgc2l6ZW9m KHN0cnVjdCBwZW5jdHJsX3NwaV94ZmVyKSkgewo+Cj4gRGl0by4KPgo+PiArICAgICAgICAgICAg ICAgcmV0ID0gLUVJTlZBTDsKPj4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0X3VubG9jazsKPj4g KyAgICAgICB9CgouLi4KCj4+ICsgICAgICAgbXNnID0gbWVtZHVwX3VzZXIoKHN0cnVjdCBwZW5j dHJsX3NwaV94ZmVyICopYXJnLCBzaXplKTsKPj4gKyAgICAgICBpZiAoSVNfRVJSKG1zZykpIHsK Pj4gKyAgICAgICAgICAgICAgIHJldCA9IFBUUl9FUlIobXNnKTsKPj4gKyAgICAgICAgICAgICAg IGdvdG8gb3V0X3VubG9jazsKPj4gKyAgICAgICB9Cj4KPiBXb25kZXJpbmcgaWYgeW91IGNhbiBz dGFydCB1c2luZyBjbGVhbnVwLmguCgpQZXJoYXBzIGlmIHJlY29tbWVuZGVkLCBJIGRvbid0IHNl ZSBERUZJTkVfKEZSRUUsVU5MT0NLLC4uLikgYmVpbmcgdXNlZC4KCi4uLgoKPj4gKyAgICAgICAv KiBQZXJmb3JtIHRoZSB0cmFuc2ZlciAqLwo+PiArICAgICAgIG11dGV4X2xvY2soJnNwaV9sb2Nr KTsKPj4gKyAgICAgICByZXQgPSBzcGlfc3luYyhzcGksICZtKTsKPj4gKyAgICAgICBtdXRleF91 bmxvY2soJnNwaV9sb2NrKTsKCj4+ICsgICAgICAgaWYgKHJldCB8fCAobnVtX21zZ3MgPT0gMSkp Cj4+ICsgICAgICAgICAgICAgICBnb3RvIG91dF91bmxvY2s7Cj4KPiBTZWNvbmQgY29uZGl0aW9u YWwgd2lsbCByZXR1cm4gMC4gSXMgaXQgYnkgZGVzaWduPwo+IFNpbmNlIGl0J3Mgbm90IHNvIG9i dmlvdXMgSSB3b3VsZCBzcGxpdCB0aGVzZSBjb25kaXRpb25hbHMuCgpJJ2xsIHNwbGl0IHRoaXMg dG8gYmUgY2xlYXIsIHllcyByZXR1cm4gMCBmb3Igc3VjY2Vzcy4KCi4uLgoKPj4gKyAgICAgICBz cGktPmNoaXBfc2VsZWN0ID0gY3VycmVudF9jczsKPgo+IHNwaV9zZXRfY2hpcHNlbGVjdCgpCgpZ ZXMsIEknbGwgY2hhbmdlIHRvIGlubGluZSBmdW5jdGlvbiBzcGlfc2V0X2NoaXBzZWxlY3Qoc3Bp LCAwLCBjdXJyZW50X2NzKS4gIFRoZQpzZWNvbmQgYXJnIG11c3QgYmUgbGVnYWN5IGFzIGl0cyB1 bnVzZWQuCgouLi4KCj4+ICtzdGF0aWMgaW50IHBlbmN0cmxfcmVnc19yZWFkKHN0cnVjdCBwZW5j dHJsX2RldmljZSAqcGVuY3RybCwgdTMyIHJlZywgdTMyICp2YWwpCj4+ICt7Cj4+ICsgICAgICAg c3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHBlbmN0cmwtPnNwaTsKPj4gKyAgICAgICBzdHJ1Y3Qg c3BpX3RyYW5zZmVyIHRbMl0gPSB7fTsKPj4gKyAgICAgICBzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsK Pgo+PiArICAgICAgIHU4IHR4YnVmWzNdOwo+PiArICAgICAgIHU4IHJ4YnVmWzFdOwo+Cj4gTm90 IERNQS1zYWZlLiBJcyBpdCBhIHByb2JsZW0/Cj4KCk5vdCBhIHByb2JsZW0sIHRoZSBwZXJpcGhl cmFsIGlzIFBJTyBvbmx5IHVzaW5nIEZJRk9zLgoKPj4gKyAgICAgICBpbnQgcmV0Owo+Cj4+ICsg ICAgICAgdHhidWZbMF0gPSBQRU5DVFJMX1NQSV9DTURfUkVHUkQ7Cj4+ICsgICAgICAgdHhidWZb MV0gPSByZWc7Cj4+ICsgICAgICAgdHhidWZbMl0gPSAwOwo+Cj4gQ2FuIGJlIGFzc2lnbmVkIGlu IHRoZSBkZWZpbml0aW9uIGJsb2NrCj4KPiAgICAgICB1OCB0eGJ1ZltdID0geyAuLi4gfTsKPgoK SSdsbCBjaGFuZ2UgdGhhdCBoZXJlIGFuZCBiZWxvdy4KCj4+ICsgICAgICAgdFswXS50eF9idWYg PSB0eGJ1ZjsKPj4gKyAgICAgICB0WzBdLmxlbiA9IHNpemVvZih0eGJ1Zik7Cj4KPj4gKyAgICAg ICByeGJ1ZlswXSA9IDA7Cj4KPiBEaXR0by4KPgo+ICAgIHU4IHJ4YnVmW10gPSB7IDAgfTsKPgo+ PiArICAgICAgIHRbMV0ucnhfYnVmID0gcnhidWY7Cj4+ICsgICAgICAgdFsxXS5sZW4gPSBzaXpl b2YocnhidWYpOwo+PiArCj4+ICsgICAgICAgc3BpX21lc3NhZ2VfaW5pdF93aXRoX3RyYW5zZmVy cygmbSwgdCwgQVJSQVlfU0laRSh0KSk7Cj4+ICsgICAgICAgcmV0ID0gc3BpX3N5bmMoc3BpLCAm bSk7Cj4+ICsgICAgICAgaWYgKHJldCkKPj4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4+ ICsKPj4gKyAgICAgICAqdmFsID0gcnhidWZbMF07Cj4+ICsgICAgICAgcmV0dXJuIDA7Cj4+ICt9 CgouLi4KCj4+ICtzdGF0aWMgaW50IHBlbmN0cmxfcmVnc193cml0ZShzdHJ1Y3QgcGVuY3RybF9k ZXZpY2UgKnBlbmN0cmwsIHUzMiByZWcsIHUzMiB2YWwpCj4+ICt7Cj4+ICsgICAgICAgc3RydWN0 IHNwaV9kZXZpY2UgKnNwaSA9IHBlbmN0cmwtPnNwaTsKPj4gKyAgICAgICBzdHJ1Y3Qgc3BpX3Ry YW5zZmVyIHQgPSB7fTsKPj4gKyAgICAgICBzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKPj4gKyAgICAg ICB1OCB0eGJ1Zls0XTsKCj4+ICsgICAgICAgdHhidWZbMF0gPSBQRU5DVFJMX1NQSV9DTURfUkVH V1I7Cj4+ICsgICAgICAgdHhidWZbMV0gPSByZWc7Cj4+ICsgICAgICAgdHhidWZbMl0gPSB2YWw7 Cj4+ICsgICAgICAgdHhidWZbM10gPSAwOwoKPiBDYW4gYmUgYXNzaWduZWQgaW4gdGhlIGRlZmlu aXRpb24gYmxvY2suCgo+PiArICAgICAgIHQudHhfYnVmID0gdHhidWY7Cj4+ICsgICAgICAgdC5s ZW4gPSBzaXplb2YodHhidWYpOwo+PiArICAgICAgIHNwaV9tZXNzYWdlX2luaXRfd2l0aF90cmFu c2ZlcnMoJm0sICZ0LCAxKTsKPj4gKyAgICAgICByZXR1cm4gc3BpX3N5bmMoc3BpLCAmbSk7Cj4+ ICt9CgouLi4KCj4+ICsgICAgICAgc3RydWN0IHBlbmN0cmxfZGV2aWNlICpwZW5jdHJsID0KPj4g KyAgICAgICAgICAgICAgIGNvbnRhaW5lcl9vZihyY2Rldiwgc3RydWN0IHBlbmN0cmxfZGV2aWNl LCByY2Rldik7Cj4KPiBPbmUgbGluZT8KCkknbGwgY2hlY2svY2hhbmdlLgoKPgo+Li4uCj4KPj4g KyAgICAgICBzcGktPmNoaXBfc2VsZWN0ID0gMDsKPgo+IHNwaV9zZXRfY2hpcHNlbGVjdCgpCgpZ ZXMsIHNwaV9zZXRfY2hpcHNlbGVjdChzcGksIDAsIDApOwoKLi4uCgo+PiArICAgICAgIHN0cnVj dCBwZW5jdHJsX2RldmljZSAqcGVuY3RybCA9Cj4+ICsgICAgICAgICAgICAgICBjb250YWluZXJf b2YocmNkZXYsIHN0cnVjdCBwZW5jdHJsX2RldmljZSwgcmNkZXYpOwo+Cj4gT25lIGxpbmU/CgpJ J2xsIGNoZWNrL2NoYW5nZS4KCi4uLgoKPj4gKyAgICAgICBzcGktPmNoaXBfc2VsZWN0ID0gMDsK Pgo+IHNwaV9zZXRfY2hpcHNlbGVjdCgpCgpZZXMsIHNwaV9zZXRfY2hpcHNlbGVjdChzcGksIDAs IDApOwoKLi4uCgo+PiArc3RhdGljIGludCBwZW5jdHJsX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2Rl dmljZSAqc3BpKQo+PiArewo+PiArICAgICAgIGludCBpLCByZXQ7Cj4+ICsKPj4gKyAgICAgICAv KiBBbGxvY2F0ZSBkcml2ZXIgZGF0YSAqLwo+PiArICAgICAgIHBlbmN0cmwgPSBremFsbG9jKHNp emVvZigqcGVuY3RybCksIEdGUF9LRVJORUwpOwo+Cj4gZGV2bV9remFsbG9jKCkgPwoKWWVzIHdp bGwgY2hhbmdlIHRvIGRldm1fa3phbGxvYygpLgoKPj4gKyAgICAgICBpZiAoIXBlbmN0cmwpCj4+ ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArICAgICAgIHBlbmN0cmwt PnNwaSA9IHNwaTsKPj4gKyAgICAgICBtdXRleF9pbml0KCZzcGlfbG9jayk7Cj4+ICsKPj4gKyAg ICAgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZW5jdHJsX2RldmljZXMpOyBpKyspIHsK Pj4gKyAgICAgICAgICAgICAgIHJldCA9IG1pc2NfcmVnaXN0ZXIoJnBlbmN0cmxfZGV2aWNlc1tp XSk7Cj4+ICsgICAgICAgICAgICAgICBpZiAocmV0KSB7Cj4+ICsgICAgICAgICAgICAgICAgICAg ICAgIGRldl9lcnIoJnNwaS0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGRldmljZSAlc1xuIiwK Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5jdHJsX2RldmljZXNbaV0ubmFt ZSk7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKPj4gKyAgICAgICAg ICAgICAgIH0KPj4gKyAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAvKiBSZWdpc3RlciByZXNldCBj b250cm9sbGVyICovCj4+ICsgICAgICAgcGVuY3RybC0+cmNkZXYuZGV2ID0gJnNwaS0+ZGV2Owo+ PiArICAgICAgIHBlbmN0cmwtPnJjZGV2Lm9wcyA9ICZwZW5jdHJsX3Jlc2V0X29wczsKPj4gKyAg ICAgICBwZW5jdHJsLT5yY2Rldi5vd25lciA9IFRISVNfTU9EVUxFOwo+PiArICAgICAgIHBlbmN0 cmwtPnJjZGV2Lm9mX25vZGUgPSBzcGktPmRldi5vZl9ub2RlOwo+PiArICAgICAgIHBlbmN0cmwt PnJjZGV2Lm5yX3Jlc2V0cyA9IDE7Cj4+ICsgICAgICAgZGV2aWNlX3NldF9ub2RlKHBlbmN0cmwt PnJjZGV2LmRldiwgZGV2X2Z3bm9kZSgmc3BpLT5kZXYpKTsKPj4gKwo+PiArICAgICAgIHJldCA9 IHJlc2V0X2NvbnRyb2xsZXJfcmVnaXN0ZXIoJnBlbmN0cmwtPnJjZGV2KTsKPj4gKyAgICAgICBp ZiAocmV0KQo+PiArICAgICAgICAgICAgICAgcmV0dXJuIGRldl9lcnJfcHJvYmUoJnNwaS0+ZGV2 LCByZXQsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHRv IHJlZ2lzdGVyIHJlc2V0IGNvbnRyb2xsZXJcbiIpOwo+PiArICAgICAgIHJldHVybiAwOwo+Cj4+ ICtjbGVhbnVwOgo+Cj4gZXJyX2NsZWFudXA6ID8KCldpbGwgdXNlIGVycl9jbGVhbnVwOgoKPj4g KyAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZW5jdHJsX2RldmljZXMpOyBpKysp IHsKPgo+ICB3aGlsZSAoaS0tKSB7Cj4KClllcywgY2FuIGNoYW5nZSB0byB3aGlsZSgpLCBvcmRl ciBkb2Vzbid0IG1hdHRlci4KCj4+ICsgICAgICAgICAgICAgICBpZiAocGVuY3RybF9kZXZpY2Vz W2ldLnRoaXNfZGV2aWNlKQo+PiArICAgICAgICAgICAgICAgICAgICAgICBtaXNjX2RlcmVnaXN0 ZXIoJnBlbmN0cmxfZGV2aWNlc1tpXSk7Cj4+ICsgICAgICAgfQo+PiArICAgICAgIHJldHVybiBy ZXQ7Cj4+ICt9CgpSZWdhcmRzLApCcmFkCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0t a2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==