From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by mx.groups.io with SMTP id smtpd.web11.10207.1580550493001634490 for ; Sat, 01 Feb 2020 01:48:13 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@linaro.org header.s=google header.b=z6oWJItU; spf=pass (domain: linaro.org, ip: 209.85.221.66, mailfrom: ard.biesheuvel@linaro.org) Received: by mail-wr1-f66.google.com with SMTP id c9so11518857wrw.8 for ; Sat, 01 Feb 2020 01:48:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=7WepSMUFTIIFZ6e0/+U0F7LZQgRIJoX4T3BwO13R/Cc=; b=z6oWJItUVTwplRL0dEOH0BfDV7TDGjCJOcixZO2jZmafWJHBTPovXu+KrprWKEcAv/ 3qUSx6gIBq8+O7Cn1zmKPB9qoZ0RtjwqmtGO6FJOPipb7sAZKb2kIYVcV4XuY5LbhGoj J0MfrVBSia6lrnAbj538Ox+m4d32tyRah1dvEWAiyqbT9f2q9M8pvxrZwJ1Byc0CUpwU M4o+dQycmB99ivX0LehP9QoKco8r9mPJn+o+o5ZqVTGmHCCzUSjf1gFdIsAByULazFHN /FMO20Uq5T4Ev1tHZduYT6SrF9uvgiy5A5a8UF6ywlNP/MDoCq3ZbfyUKiFV04v+NPPz ZmXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=7WepSMUFTIIFZ6e0/+U0F7LZQgRIJoX4T3BwO13R/Cc=; b=e8LYQRLxyH+BPrzxPajLr2/3ThjtsUforj9XyVSOs6mFrqHiwjZ6TJo6cciKDOfqc7 DB42rTzJiN5f8SK1TgciBpHn/7ix+k2MPDTKzGL7RmuQKhDUtG+rf92NAi0z+EkokbNM ufdHJR0vDQObwAqZQD/TRgu91FUFJxL745hzr+8Qo5aIWWi8DQverwdyB+xbmrb1hue0 Zh3PkhKee690Gfyv5OlQm/TkyAUhbtxQsFfaNrAjt+T+DDe2T1NS6uzMI+JAdHsUYDvU Ban+FFgwwt3WxfRbC+cuNzO7zg7cqZ0YZF7e3fc9y4SYiNAOLCc7L7MTTLhsD618Gg+e ZGHQ== X-Gm-Message-State: APjAAAXYE9kTHTHjl510urdVT2dndZRXz9x1qmaavXek4ky1CwDiVZTS FFS/64b5xi45HhrZrZBuzQzGmuYevhakxxMpJ1Ci4Q== X-Google-Smtp-Source: APXvYqw+v1+yVyqsWuZ5R9452pV/Da9UOkeddUYxuOwpaa7MlBTnGzjbIXgBRSWchr6btMXG28NS6pHFVEvapEDwReA= X-Received: by 2002:a5d:42c6:: with SMTP id t6mr3855029wrr.151.1580550491416; Sat, 01 Feb 2020 01:48:11 -0800 (PST) MIME-Version: 1.0 References: <20200124115411.9364-1-pete@akeo.ie> <20200124115411.9364-3-pete@akeo.ie> <3ff9a4fc-ee2a-1dcb-e8d2-d95a0c191a59@akeo.ie> <4b2dd95e-5ced-243a-73b4-a51e1f3040c2@akeo.ie> In-Reply-To: From: "Ard Biesheuvel" Date: Sat, 1 Feb 2020 10:48:00 +0100 Message-ID: Subject: Re: [edk2-platforms][PATCH v2 2/3] Platform/RPi: Add PlatformPcdLib to set the Genet MAC address To: Pete Batard Cc: edk2-devel-groups-io , Leif Lindholm , =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= , Jeremy Linton Content-Type: text/plain; charset="UTF-8" On Sat, 1 Feb 2020 at 09:25, Ard Biesheuvel wrote: > > On Fri, 31 Jan 2020 at 19:45, Pete Batard wrote: > > > > On 2020.01.31 17:53, Ard Biesheuvel wrote: > > > On Fri, 31 Jan 2020 at 18:48, Pete Batard wrote: > > >> > > >> Hi Ard, > > >> > > >> On 2020.01.31 17:05, Ard Biesheuvel wrote: > > >>> On Fri, 24 Jan 2020 at 12:54, Pete Batard wrote: > > >>>> > > >>>> The Genet driver stub used by the Raspberry Pi 4 platform is > > >>>> designed to set the MAC address according to a PCD. > > >>>> > > >>>> To be able to set that PCD at runtime, by using the Raspberry > > >>>> Pi firmware interface, that has a dedicated call to retrieve > > >>>> the MAC address, and satisfy driver dependencies in a generic > > >>>> manner, we create a new PlatformPcdLib that can be referenced > > >>>> by the Genet driver, to set the MAC PCD before use there. > > >>>> > > >>>> While it is currently only tailored around MAC PCD population > > >>>> for Genet, we do expect this PCD library to be extended in the > > >>>> future, to provide additional PCD facilities for other drivers. > > >>>> > > >>>> Signed-off-by: Pete Batard > > >>>> --- > > >>>> Platform/RaspberryPi/Library/PlatformPcdLib/PlatformPcdLib.c | 51 ++++++++++++++++++++ > > >>>> Platform/RaspberryPi/Library/PlatformPcdLib/PlatformPcdLib.inf | 43 +++++++++++++++++ > > >>>> 2 files changed, 94 insertions(+) > > >>>> > > >>>> diff --git a/Platform/RaspberryPi/Library/PlatformPcdLib/PlatformPcdLib.c b/Platform/RaspberryPi/Library/PlatformPcdLib/PlatformPcdLib.c > > >>>> new file mode 100644 > > >>>> index 000000000000..792073a903e9 > > >>>> --- /dev/null > > >>>> +++ b/Platform/RaspberryPi/Library/PlatformPcdLib/PlatformPcdLib.c > > >>>> @@ -0,0 +1,51 @@ > > >>>> +/** @file > > >>>> + * > > >>>> + * Copyright (c) 2020, Pete Batard > > >>>> + * > > >>>> + * SPDX-License-Identifier: BSD-2-Clause-Patent > > >>>> + * > > >>>> + **/ > > >>>> + > > >>>> +#include > > >>>> +#include > > >>>> +#include > > >>>> +#include > > >>>> +#include > > >>>> +#include > > >>>> +#include > > >>>> + > > >>>> +EFI_STATUS > > >>>> +EFIAPI > > >>>> +PlatformPcdLibConstructor ( > > >>>> + IN EFI_HANDLE ImageHandle, > > >>>> + IN EFI_SYSTEM_TABLE *SystemTable > > >>>> + ) > > >>>> +{ > > >>>> + > > >>>> + // > > >>>> + // If Genet is in use and a MAC address PCD has not been set, do it here. > > >>>> + // > > >>>> +#if (FixedPcdGet64 (PcdBcmGenetRegistersAddress) != 0) > > >>> > > >>> I still don't see why we need this conditional. This is a fixed PCD, > > >>> so it must be set in the .DSC. If you are going to set it in the .DSC, > > >>> why include this driver in the first place? > > >> > > >> Let's consider this: > > >> > > >> 1. We expand on PlatformPcdLib to do more than set the MAC Address PCD > > >> for the Pi 4. For instance, we use it to set some other PCD, that is > > >> specific to the Pi 3, or for an upcoming Pi. In this usage, we would be > > >> using PlatformPcdLib with a .DSC where PcdBcmGenetRegistersAddress is > > >> not set and therefore defaults to 0. > > >> > > > > > > I don't think a single PlatformPcdLib is realistic, since you'd need > > > to link it into different drivers via NULL resolution, all of which > > > would inherited the conjunction of all the DEPEX clauses, potentially > > > causing circular dependencies. > > > > > > I'd much rather have either a named library class in BcmGenet.dec > > > scope that the platform can implement to provide the MAC, or one that > > > can be used via NULL resolution (in cases where it is imaginable that > > > the driver does not need the MAC to be provided at all) > > > > Yes, but the problem is, right now, I have no idea what the Genet driver > > is going to look like, so we need a solution that is unlikely to > > interfere with what's going to happen in terms of Genet driver > > expansion. And this is the least intrusive solution I identified (which > > means it will also be easiest to remove if we decide to supersede it). > > > > If the genet stub driver morphs into something more elaborate, it will > still require a platform specific way to discover the MAC the > platforms wants it to use. > > > I personally don't think a named library is the better solution because, > > ideally, we should have two independent drivers (not libraries), one for > > UMAC and one for Genet, considering that we really want is have the > > platform rely on a UMAC hardware service implementation since we are > > dealing with 2 separate hardware functions, that pertain to networking > > but that are not directly related. So if you want to go towards the > > "There has to be a better solution that this" route, I'm would actually > > push for a separate driver rather than a library. But then I expect that > > we're going to create all kinds of problems for Jeremy when he produces > > his Genet implementation, which is precisely why I steered away from > > doing that in the first place. There are also other alternatives, such > > as implementing Simple Network Driver protocol, since this appears to > > provide means to set the MAC, but this too is going to interfere with > > Jeremy's effort. > > > > So, and I hope this doesn't come as offensive because this is not my > > intention here, I'm afraid that, unless someone else takes that matter > > into their own hand, the current proposal is the best you're gonna get, > > unless you want to produce that named library class yourself (which, > > again, I still don't view as the better solution if that's what we are > > looking for). > > > > OK > > > What also bothers me is that you did state at the end of [1] that: > > > > > I don't mind this approach, but in general, I'd be happier with a > > > specific library class to discover the MAC address. > > > > which I took as a tacit approval that, even if you didn't exactly like > > it, you were still okay with applying this patchset as long as the other > > issues were addressed. So I hope you can appreciate that I can't go > > around with expecting approval on the general approach of a patchset, > > only to see it suddenly rejected by the same person one week later... > > > > That was before you refused to remove the #if PcdGet64() == 0 > Apologies if that came out grumpy. The reality is that it is highly unlikely that the genet driver will ever be usable in another platform without substantial rework, so the kind of future proofing that we're doing here is both too much and too little. If you are concerned about timelines, just keep it simple and inflexible, and we can refactor it later. By that time, I will also hopefully have more bandwidth to look at this stuff. Unrelated: you don't happen to be at FOSDEM do you?