On Fri, 31 Jan 2020 at 19:45, Pete Batard <p...@akeo.ie> wrote: > > On 2020.01.31 17:53, Ard Biesheuvel wrote: > > On Fri, 31 Jan 2020 at 18:48, Pete Batard <p...@akeo.ie> wrote: > >> > >> Hi Ard, > >> > >> On 2020.01.31 17:05, Ard Biesheuvel wrote: > >>> On Fri, 24 Jan 2020 at 12:54, Pete Batard <p...@akeo.ie> 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 <p...@akeo.ie> > >>>> --- > >>>> 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 <p...@akeo.ie> > >>>> + * > >>>> + * SPDX-License-Identifier: BSD-2-Clause-Patent > >>>> + * > >>>> + **/ > >>>> + > >>>> +#include <Library/DebugLib.h> > >>>> +#include <Library/PcdLib.h> > >>>> +#include <Library/PrintLib.h> > >>>> +#include <Library/UefiBootServicesTableLib.h> > >>>> +#include <Library/UefiLib.h> > >>>> +#include <Library/UefiRuntimeServicesTableLib.h> > >>>> +#include <Protocol/RpiFirmware.h> > >>>> + > >>>> +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 > But more pragmatically, we need a way to get networking in Linux, which > means UMAC setup in UEFI, now. Not in two weeks. Not in one month. And > short of someone coming up with an alternative tomorrow, I'm still > seeing PCDLib lib as the one means to achieve that, that is going to > create the least trouble for all the parties involved. > > Regards, > > /Pete > > [1] https://edk2.groups.io/g/devel/message/53447 > > >> 2. Since the whole PcdBcmGenetMacAddress setup section would not apply > >> then, we prefer ensuring that it cannot interfere or create issues, by > >> dropping it altogether at build time. Granted, the > >> if (PcdGet64 (PcdBcmGenetMacAddress) == 0) > >> condition could also be seen as enough of a guard, but I don't see much > >> of a reason not to go further, so that further alteration of the code > >> does not risk impacting the Pi 3 or other Pi platforms with future > >> developments. > >> > >> Does that make sense to you? Or do you see this as too far fetched a > >> scenario? > >> > > > > No, I don't think this is something we should care about. > > > >> I'm basically trying to make this whole library easier to maintain in > >> the long run, by adding some pre-emptive provisions to drop code that > >> may not apply (even if, in the current scenario, this library is only > >> used for the Pi 4 platform, where PcdBcmGenetRegistersAddress is always > >> set). > >> > > > > I don't see a single library that sets all kinds of unrelated PCDs as > > something highly useful tbh. > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#53627): https://edk2.groups.io/g/devel/message/53627 Mute This Topic: https://groups.io/mt/70068668/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-