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 phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 38A7EC04A95 for ; Tue, 25 Oct 2022 16:40:01 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 9E117803F0; Tue, 25 Oct 2022 18:39:59 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=sancloud.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=sancloud.onmicrosoft.com header.i=@sancloud.onmicrosoft.com header.b="f+qhwGSu"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 4049B8020A; Tue, 25 Oct 2022 18:39:57 +0200 (CEST) Received: from GBR01-LO2-obe.outbound.protection.outlook.com (mail-lo2gbr01on2090.outbound.protection.outlook.com [40.107.10.90]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 76B878043F for ; Tue, 25 Oct 2022 18:39:51 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=sancloud.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=paul.barker@sancloud.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=T8faClLcsOVnq+47JoCqYIlZbZ/vylZKwcxnorAFyC+YqqqHbcoFFtJcTRtIAwo5W/uuGe4akmqUUPE5+IKzwQys4V+JIz419krmPJnw30VS6T+Lf4VS6mky1CRFRfCdUyIq0E7haTUBh6NseW6uGrwrpQdEWRPq1SmsoYFzy8u/YsYCFn5IqF5KImTatRc1sDZHFdRrZr4nZwYCMxFxlucpAWKpy5GsymUNIH2LHJofcJS3isl6kLy9wPxpjQt7OWrreviqjBN0bdt3EzoPFLNO2ap6dNYLeavFj/hxwhGTDUSsAO1WoS8oplTlfvHN8Ep6cLHVu3K1V01omuVeyA== 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=3ORS83KvPLLZ9zgozB87ofcV3mHZBQuXCWMm1E8fb6k=; b=Ru25Z4/+h6Xuod8AX+nKkW78YRBn1eh6UPvqXNOW3pRKA3Pn45FaIQDHSqok3boSZJDWpIocbV5nN9N1GfZmwzV8O59dzdVhpIpwu9eCp6oaOZenNUu7T2UAwLEQ7hfr1/8s5YtAV15TiVxSjERfvN54J7sdohYoODd3wxDGLGQkFInQH/FA45w8RHtxmPO6tT25xJpYZ5V5s1t72ha1CRijmDJ6BrJrtWHzLIrYQnMnLczr9w1erqiEX32MHo58Y+Wm7yDV4yBaS5SLqvVDtb0B/28maABF7IMLIHllCdWfmTXH3RKFZ+K5ouh9pTxDkL/SYi00u2ThJQr8iwtxuQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=sancloud.com; dmarc=pass action=none header.from=sancloud.com; dkim=pass header.d=sancloud.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sancloud.onmicrosoft.com; s=selector2-sancloud-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3ORS83KvPLLZ9zgozB87ofcV3mHZBQuXCWMm1E8fb6k=; b=f+qhwGSuMqLLP1k4LxZDn6pH7QgJqFkrHsMM95ItD5QVGEMVGdDBoEfeVtSasIcns5nYQHHCyGF6pbiGITUT0BUGxFTgvhaUZ8ddQ/gC+M6imifac1WJiT2Wo0eVBeZ+7uEr+C8qq009r54xHsIoptmNQuiMdQ1wr8OaK2JSrs4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=sancloud.com; Received: from CWXP123MB2248.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:7e::18) by LO0P123MB7232.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:336::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.23; Tue, 25 Oct 2022 16:39:50 +0000 Received: from CWXP123MB2248.GBRP123.PROD.OUTLOOK.COM ([fe80::749c:2fc:9577:b905]) by CWXP123MB2248.GBRP123.PROD.OUTLOOK.COM ([fe80::749c:2fc:9577:b905%3]) with mapi id 15.20.5746.023; Tue, 25 Oct 2022 16:39:50 +0000 Message-ID: <6becf071-b6da-8487-f2ec-329ceb19568a@sancloud.com> Date: Tue, 25 Oct 2022 17:39:48 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.4.0 To: Ilias Apalodimas Cc: u-boot@lists.denx.de, Heinrich Schuchardt , Tom Rini References: <20221005121839.3938771-1-paul.barker@sancloud.com> <20221005121839.3938771-4-paul.barker@sancloud.com> From: Paul Barker Subject: Re: [PATCH v4 3/6] efi_loader: Add SPI I/O protocol support In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------z1z8N64XGhE6uGekWqoyEVVF" X-ClientProxiedBy: LO4P265CA0074.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2bd::13) To CWXP123MB2248.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:7e::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CWXP123MB2248:EE_|LO0P123MB7232:EE_ X-MS-Office365-Filtering-Correlation-Id: 6b37790d-3c64-49ed-0e40-08dab6a788e2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: EcDU2iuHZ8ikFQ094dWJ3VeK/C547oUabUJq8daOm/7+z3eQM0BU6i7jyC4e2u13V/55emgHapQ7LYtFWTFJeeWouAPIOW58zSfopIJLE9t7jEX5DjOma5I4Z5EJxiF6r2RD1qyVVNs6FiBhAFuMRmpar7srFBzZQoXUINoOdtLjs6auK6r0ghSgB+1v4VKI9z9qCdgG7aZCdIgsuEk3d5ZrGGmc9UHUF5cp77LkcmtJyXjwjntuEfN8zjoseIEM+QXxWl1WtD+7xgrPrTc61na76PMhzjA+74IYDP7v1Fg+3dkdRKVKVf96eq9d6Zrr8mJIIF2KDYNI3BPgaonHkYWk/zpspyZDEJ3XbbEixk9EX7bVwRUzdj/FyoWnnREQ+qc7FzLCkwpi9PaIHWWCY7Lgju03ofCQ6eW2OqyWw/NMlTiXZqkYzZxz8tF5WP3jX3z3wpcmSnfUuA8zD3QeYWA4utf26pYR1/Ljd6EK4PS4/J79qPJkyunUebSjoUBESDIxDbe+v7nEyeJa+94sfubsMeEAxZ3zS0rG2cYwiQ0xR51Cn4xPHVN5l4aJp+ZCrGRH7XNQXlFKZGhCz00PtBPld/eLJqcfqywpW7fRIBt0JRIb+0hye0lxZ2lLIa98K25XO5g4AH+uiXBn+oZcc3Nc6rhX96Zm3jONH1hDZgHz10qCcXhD4ZR4uV9XbmEqHYdyQdVjs63Pcu8c4lx0Sx4yT/+do0GsThgOaPoinNIFqfXU399+0uh+XZeOumGuUmAjBkNhbkLsSiRAKsRjAu5s6OYDXRQHbH/KU7cCqzYDCy5UCNrj6rtZe2816sp4/MTmWyIi+bX6UyN9bI4H+3II15hCnWxgBtDkAwBm80I= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CWXP123MB2248.GBRP123.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(13230022)(136003)(376002)(346002)(366004)(396003)(39830400003)(451199015)(8936002)(235185007)(26005)(6512007)(41300700001)(6916009)(8676002)(66556008)(6506007)(52116002)(54906003)(5660300002)(53546011)(36756003)(4326008)(33964004)(66476007)(66946007)(316002)(38100700002)(38350700002)(2906002)(186003)(44832011)(2616005)(83380400001)(21480400003)(31696002)(86362001)(31686004)(6486002)(966005)(478600001)(43740500002)(45980500001); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TldqZkU4S09hcVFmb2dwRmlNYWFUZWF6Y1hRbWtmanI4T2x0RGxUdXRkQ3Yx?= =?utf-8?B?TVdveEd4UUZ3OXI1KzFHQWdWWVhmS0lIWFBLYTlEbnZrK0VabTlWaFpHa0hz?= =?utf-8?B?NlFIeXBzbGIvWitWQjB4bVRBRjVIV1Z4M3hSc3c1M055TEdKSlluOXRRdjA2?= =?utf-8?B?QXZjQlNrYTloUFgwMTVET3hIUnVpUHh0WGxZZldJcW8zRnJOeDNiMTFONGd4?= =?utf-8?B?VkhGR3JkTXlrUmZWTUNBZTdKdHBwdno2UzBId3c3aDFsVlFkOXR4V3BWZUVH?= =?utf-8?B?ak4zQXBGL0tPWE4zSzV3Y3pLTWZTTm1WK3ROUUN3Zy9uMzJKZXd2WXFRTzJp?= =?utf-8?B?QTZPQmRhYVdZNWhtc3BVcVVkSnBnekwwSWluNDZFM1FBd29hWXVoK0RUdDN5?= =?utf-8?B?emNUZ1Zkam94eWNCOGJialkrbnRyb2dRK3RmY2pwb0VPU0diakV6S3FZZHA2?= =?utf-8?B?QzBEWnFKb3JOaTIyR0VvcThick5iZHJNVEVjNEtIaWgvdk1QQkxtMjNReWho?= =?utf-8?B?NE1LRnhtczBES3FQbmxRRHJHTENtT3Y2OTR2WHpQTXdNa1NWdi9WQm9aN2Zj?= =?utf-8?B?NjZKRmpvKzhqbXArMHM4NHFob1dIS1RybmVFOWtWZlZhRitQYjRBVGNGckFx?= =?utf-8?B?d010UjJJd2pkbnhnaEl2UnhzbGtOdmNFS3VnRGx3Z05aSnByWkdZOXNpQkdS?= =?utf-8?B?UURvUFJNdDR3eHlZVTlxUk44TlVrbVBaV2pCSVZZWW41N0c4Z1lRdzhGaE9r?= =?utf-8?B?eUJPSTBIQjVMQmttdERWcVhJalNLYmNzZ1VZb2k2N1FHZ2JMMGxSRlRoZWNu?= =?utf-8?B?QmJCSG9VSHVvTktyZE9rdDlRSVE4RDFaWHViNFh4Y2hneHhhTlFPNzZwVVht?= =?utf-8?B?Y214Y0dtR0JOdm1iMlhuMjFBRmh6YTF2T2VDdWFxcjF2NU5vN0NlWlEySThs?= =?utf-8?B?Nlp1bmhsL2JGSTZIT1JUNC9DU1JDNW54VVFUVHRHQjRQaW1wZjM0VGN5SW56?= =?utf-8?B?Y3gwVStBaWxGOEtRSEl3WkcvUStNSm9hTDd3WlBpZ1JGNkU4d2lablRzc3Ft?= =?utf-8?B?ZFRxN0ptTE5DTDdlOUZBY0RzV3MrdGVIR0VrMFdyNWtRaFFqbTZtVXdGTTNP?= =?utf-8?B?T2szRUxiaWNkWDZLQXpveWhmTXNSZ3E4Y3JLQ2dYcFNMdFB2dDlJOXVQdmNK?= =?utf-8?B?N24xV0tVb05nWXZnTExDTHpUcTE5WGFFc2hmYUFORENpK0t4MkoxckRCNGRR?= =?utf-8?B?aEhDMjlPY2JlM0J2Y0NUNGxqckV3MGdnYmhjQklkZk0zSEN5WlBUNkwvTm1P?= =?utf-8?B?MFNxQU9jNWZqbS9hTFA5Y3RLN3A3TG04QkV3QlhlVng1WkoxN3Q2TUp2TEZm?= =?utf-8?B?Q1REYjRqbWZ6UzNZNUZkVnhqK1gyQ0p1NCszYkF2ZEVzQkJOSkZ6VWF0d0lX?= =?utf-8?B?MDlwK1NIdGxscUtDMyt0VjV6UUJ4S2JTaFNpcWFveW5MSk9iVDlDQ1RKbVpW?= =?utf-8?B?WHNmRUx2NnJueEdLVExtaitzenNyVHFQemN4UnFxbDdXVzNEUWdBdWdBbHVY?= =?utf-8?B?K3YxUnJBRFJkWGFQL3Bia2ZDbmJlbUptUTlqZ0ZDYk16MTd3M3F2U1FsbTlr?= =?utf-8?B?K1FkUWN4R0J6cG1scDQ0WFlPcndoNDdOM3RoaGNHaXdpV2xMWlFyeHZOem1Q?= =?utf-8?B?ODFKK21iS0dFVndJMmhCeHk1YWZmaXp5ZjVPM1htVFhTRW40YWl4OVRjYkhJ?= =?utf-8?B?cFhnVmZlZGdBSUxDYzM5Y3BNYlN4bVBlVnBld0h4V0NSWmY3bGY1MUFwUS9U?= =?utf-8?B?SWFObWtFdmdTZldGdzNrVHdiZUpZM1NWQ1JrUmlwZDMvSEViL1dtandkTTh6?= =?utf-8?B?dG5tRUhsdzFuN0RaTzRDMTJSNml0czM3RmNSbGFha0lmeDJQVkF3VVdnVENN?= =?utf-8?B?bmFzTm9LNngvVW5GaWVQNkIzZEEzUDNXZ0E2bVR6VFJkYWpGcW5HRU5WQ0hY?= =?utf-8?B?UnJsZGNOU3ZwRXRzVFNORlB6RXY2WTBkMVNXTHJadzZRM1ViWUdVT043TmM3?= =?utf-8?B?NnRqTGRmeDRUMUg5YWpKeU9vSXdYa0JsTURwMDJlRlh0cE11b2RnRFJmcGZB?= =?utf-8?B?bUlpekJTVEhSMWZrSU9zZlBnYUJIc0h3d2V0WjNUYjUxcDE4ejNOZTBaUjhr?= =?utf-8?B?VkE9PQ==?= X-OriginatorOrg: sancloud.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6b37790d-3c64-49ed-0e40-08dab6a788e2 X-MS-Exchange-CrossTenant-AuthSource: CWXP123MB2248.GBRP123.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2022 16:39:50.0218 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 840be37c-244a-450e-9bcc-2064862de1f4 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: HBAiLZzW8ZV9i+kHtaaSqrffzgAUSGZLQX+3DfhKscxsFKeuZaMfydBbdrmIqlJBpSN8VPFA8ZTlGqb8cVaaY4L9c+mWJ8UvI9zrBrK1uiY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO0P123MB7232 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean --------------z1z8N64XGhE6uGekWqoyEVVF Content-Type: multipart/mixed; boundary="------------jPnMT0H5DUwjz0GV0WJ02N06"; protected-headers="v1" From: Paul Barker To: Ilias Apalodimas Cc: u-boot@lists.denx.de, Heinrich Schuchardt , Tom Rini Message-ID: <6becf071-b6da-8487-f2ec-329ceb19568a@sancloud.com> Subject: Re: [PATCH v4 3/6] efi_loader: Add SPI I/O protocol support References: <20221005121839.3938771-1-paul.barker@sancloud.com> <20221005121839.3938771-4-paul.barker@sancloud.com> In-Reply-To: --------------jPnMT0H5DUwjz0GV0WJ02N06 Content-Type: multipart/mixed; boundary="------------qNi0V4UCxgpEdklqHU7QmhYe" --------------qNi0V4UCxgpEdklqHU7QmhYe Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Ilias, On 24/10/2022 12:54, Ilias Apalodimas wrote: > Hi Paul,=20 >=20 > I think the series overall is in a good state, but we are trying to fi= gure > out if we can avoid defining SPI uuid's in the DT. OTOH U-Boot uses th= e DT > for it's config so that might be okay... What may make sense is to prefix the DT property names with `u-boot,`. i.e. they'd become: * u-boot,uefi-spi-vendor * u-boot,uefi-spi-part-number * u-boot,uefi-spi-io-guid For the sandbox tests it makes sense to keep the configuration in arch/sandbox/dts/test.dts. However for a real device such as the SanCloud BBE it makes sense to keep the dts file in line with the Linux kernel dts file and add the configuration to a new file arch/arm/dts/am335x-sancloud-bbe-lite-u-boot.dtsi which will be picked up by the build system. That keeps the configuration separate from the upstream dts file and matches what we do for properties like `u-boot,dm-spl`. Does that sound like a good way forward? >=20 > [...] >=20 >> +{ >> + struct efi_spi_peripheral *peripheral =3D bus->peripheral_list; >> + >> + while (peripheral) { >> + struct efi_spi_peripheral *next =3D >> + peripheral->next_spi_peripheral; >> + destroy_efi_spi_peripheral(peripheral); >> + peripheral =3D next; >> + } >> + free(bus->friendly_name); >> + free(bus); >> +} >> + >> +static efi_status_t efi_spi_new_handle(const efi_guid_t *guid, void *= proto) >> +{ >> + efi_status_t status; >> + efi_handle_t handle; >> + >> + status =3D efi_create_handle(&handle); >> + if (status !=3D EFI_SUCCESS) { >> + printf("Failed to create EFI handle\n"); >> + goto fail_1; >> + } >> + >> + status =3D efi_add_protocol(handle, guid, proto); >=20 > Apologies for this it's my fault, but can you replace efi_add_protocol= -> > efi_install_multiple_protocol_interfaces? > commit 05c4c9e21ae6 ("efi_loader: define internal implementations of in= stall/uninstallmultiple") > has some details on why. A bit annoying but the change is straightforw= ard I'll change this for v5. >=20 >> + if (status !=3D EFI_SUCCESS) { >> + printf("Failed to add protocol\n"); >> + goto fail_2; >> + } >> + >> + return EFI_SUCCESS; >> + >> +fail_2: >> + efi_delete_handle(handle); >=20 > Same here, just uninstall the protocol As above. >=20 >> +fail_1: >> + return status; >> +} >> + >> +static void >> +efi_spi_init_part(struct efi_spi_part *part, >> + struct spi_slave *target, >> + efi_string_t vendor_utf16, >> + efi_string_t part_number_utf16 >> +) >> +{ >> + part->vendor =3D vendor_utf16; >> + part->part_number =3D part_number_utf16; >> + part->min_clock_hz =3D 0; >> + part->max_clock_hz =3D target->max_hz; >> + part->chip_select_polarity =3D >> + (target->mode & SPI_CS_HIGH) ? true : false; >> +} >> + > =20 >=20 > Thanks! > /Ilias Thanks, --=20 Paul Barker Principal Software Engineer SanCloud Ltd e: paul.barker@sancloud.com w: https://sancloud.com/ --------------qNi0V4UCxgpEdklqHU7QmhYe Content-Type: application/pgp-keys; name="OpenPGP_0xA67255DFCCE62ECD.asc" Content-Disposition: attachment; filename="OpenPGP_0xA67255DFCCE62ECD.asc" Content-Description: OpenPGP public key Content-Transfer-Encoding: quoted-printable -----BEGIN PGP PUBLIC KEY BLOCK----- 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 =3DsH2a -----END PGP PUBLIC KEY BLOCK----- --------------qNi0V4UCxgpEdklqHU7QmhYe-- --------------jPnMT0H5DUwjz0GV0WJ02N06-- --------------z1z8N64XGhE6uGekWqoyEVVF Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature" -----BEGIN PGP SIGNATURE----- wnsEABYIACMWIQS7m7rT1+CktY3YG1PYN3IfEvob6gUCY1gRVAUDAAAAAAAKCRDYN3IfEvob6hi6 AQCzzOKETYAuSlyaTEsxK4K9FpjUB1PnxtFVu/PF0EzK0QD/fenPkkER8wDMRxznkfMOB1m74PLP SnE6LicwkjHsSwc= =58fN -----END PGP SIGNATURE----- --------------z1z8N64XGhE6uGekWqoyEVVF--