From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=pass header.i=@linaro.org header.s=google header.b=xPm6L64P; spf=pass (domain: linaro.org, ip: 209.85.221.67, mailfrom: leif.lindholm@linaro.org) Received: from mail-wr1-f67.google.com (mail-wr1-f67.google.com [209.85.221.67]) by groups.io with SMTP; Thu, 29 Aug 2019 06:55:03 -0700 Received: by mail-wr1-f67.google.com with SMTP id z11so3542129wrt.4 for ; Thu, 29 Aug 2019 06:55:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=8zY7jCUGxJ8T+f3kYnqO0H7Gpt6VzGqm/AwBWTu4jLQ=; b=xPm6L64P/L/z2rEfCR8v/DLZZXw6AhCTiAfMbwlSMglqGuHtbCRenqWdffZUGBuqGy a5gI3JEv3/83PZONoAydV3jC1T99qceMclajenkSAUEYrIzUrC/2CUeTJJcn9/1dqk0f cw7wjsbxgxl9QJZ3d2UKGGWnJ59rDNPAGFrCCHXicjUL/iaidPZ8zmC/Nog7SULbjear 3wt5EC38+0QD6w5gadOcDqCNIq72h8Ie4rvqj6kO2ay/kB8UzwTVFTqU6+Czn4rz9mdP 7+IvKgnuNo3+b0LdE/LYf4/dGc1HLzFznpJqvMVs4Ei2+vyZ6hfo6rzMHauf4XAbAoJf O6yQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=8zY7jCUGxJ8T+f3kYnqO0H7Gpt6VzGqm/AwBWTu4jLQ=; b=KX9bltLVr4LbxlPgz4PDzFlny2a1VnO/bwSZxwvI9kEkijrKcnqTwuPFos7051cHGd 7cs12jIamnU/HXLOWbTPxtTLBVmY4jVi4qdAIouEsaOfURA3DCM17HAHvqY7QUgv14vM U9Vk7rFcbNL44j73iBb8QnRrwotCZX5efRLHLjI55eafNujG1eRhncNLWnmjm7RZNsaC QnWWxeTkJiob4ovcgVzm4ULJCjbAnaFkTJ2WLeK4lbCACbvzGgtVGWELS8jYhp07JVAj iPY4K4oHFdJJzRPKDVPr1pzCy1OxyvyCsolViUzFgb0NfOZOzlNofN73nDAZEKRJ87xG 7CIA== X-Gm-Message-State: APjAAAVC8wJE++k6XZCUegb1vFZjeorE+Crpc0i+ONjiWTxnBgS4xjM0 Q6kxNyOPfoFtOZM1dXS7iGS/Ag== X-Google-Smtp-Source: APXvYqxtA1BCZe6GH5TRy79lvPZntUMVphtV2epICByRdTHzTae299Ek44hciPlvH7nFWJ/M3BfC5Q== X-Received: by 2002:adf:9b9d:: with SMTP id d29mr11683344wrc.132.1567086902034; Thu, 29 Aug 2019 06:55:02 -0700 (PDT) Return-Path: Received: from bivouac.eciton.net (bivouac.eciton.net. [2a00:1098:0:86:1000:23:0:2]) by smtp.gmail.com with ESMTPSA id e13sm4032637wmh.44.2019.08.29.06.55.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 29 Aug 2019 06:55:01 -0700 (PDT) Date: Thu, 29 Aug 2019 14:54:59 +0100 From: "Leif Lindholm" To: Pete Batard Cc: devel@edk2.groups.io, ard.biesheuvel@linaro.org Subject: Re: [edk2-platforms: PATCH v2 1/1] Platform/Rpi3: Add compatible property to the "usb" Device Tree node Message-ID: <20190829135459.GS29255@bivouac.eciton.net> References: <20190823122050.5244-1-pete@akeo.ie> <20190823122050.5244-2-pete@akeo.ie> MIME-Version: 1.0 In-Reply-To: <20190823122050.5244-2-pete@akeo.ie> User-Agent: Mutt/1.10.1 (2018-07-13) Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Fri, Aug 23, 2019 at 01:20:50PM +0100, Pete Batard wrote: > Some Linux kernels (e.g. Debian) require "bcm,bcm2835-usb" to be present in Is the typo here or in the code? ('bcm,' vs. 'brcm,') If here, I can fix up on committing. / Leif > the list of compatible properties for the "usb" node, else they are unable > to handle some USB devices. > > This patch ensures that the compatible property is added if not present. > > Signed-off-by: Pete Batard > --- > Platform/RaspberryPi/RPi3/Drivers/FdtDxe/FdtDxe.c | 75 ++++++++++++++++++++ > 1 file changed, 75 insertions(+) > > diff --git a/Platform/RaspberryPi/RPi3/Drivers/FdtDxe/FdtDxe.c b/Platform/RaspberryPi/RPi3/Drivers/FdtDxe/FdtDxe.c > index 45ffe2e394a2..eb8048930c30 100644 > --- a/Platform/RaspberryPi/RPi3/Drivers/FdtDxe/FdtDxe.c > +++ b/Platform/RaspberryPi/RPi3/Drivers/FdtDxe/FdtDxe.c > @@ -135,6 +135,76 @@ UpdateMacAddress ( > return EFI_SUCCESS; > } > > +// > +// Add "bcm2835-usb" to the USB compatible property list, if not present. > +// Required because some Linux kernels can't handle USB devices otherwise. > +// > +STATIC > +EFI_STATUS > +AddUsbCompatibleProperty ( > + VOID > + ) > +{ > + CONST CHAR8 Prop[] = "brcm,bcm2708-usb"; > + CONST CHAR8 NewProp[] = "brcm,bcm2835-usb"; > + CONST CHAR8 *List; > + CHAR8 *NewList; > + INT32 ListSize; > + INTN Node; > + INTN Retval; > + > + // Locate the node that the 'usb' alias refers to > + Node = fdt_path_offset (mFdtImage, "usb"); > + if (Node < 0) { > + DEBUG ((DEBUG_ERROR, "%a: failed to locate 'usb' alias\n", __FUNCTION__)); > + return EFI_NOT_FOUND; > + } > + > + // Get the property list. This is a list of NUL terminated strings. > + List = fdt_getprop (mFdtImage, Node, "compatible", &ListSize); > + if (List == NULL) { > + DEBUG ((DEBUG_ERROR, "%a: failed to locate properties\n", __FUNCTION__)); > + return EFI_NOT_FOUND; > + } > + > + // Check if the compatible value we plan to add is already present > + if (fdt_stringlist_contains (List, ListSize, NewProp)) { > + DEBUG ((DEBUG_INFO, "%a: property '%a' is already set.\n", > + __FUNCTION__, NewProp)); > + return EFI_SUCCESS; > + } > + > + // Make sure the compatible device is what we expect > + if (!fdt_stringlist_contains (List, ListSize, Prop)) { > + DEBUG ((DEBUG_ERROR, "%a: property '%a' is missing!\n", > + __FUNCTION__, Prop)); > + return EFI_NOT_FOUND; > + } > + > + // Add the new NUL terminated entry to our list > + DEBUG ((DEBUG_INFO, "%a: adding '%a' to the properties\n", > + __FUNCTION__, NewProp)); > + > + NewList = AllocatePool (ListSize + sizeof (NewProp)); > + if (NewList == NULL) { > + DEBUG ((DEBUG_ERROR, "%a: failed to allocate memory\n", __FUNCTION__)); > + return EFI_OUT_OF_RESOURCES;; > + } > + CopyMem (NewList, List, ListSize); > + CopyMem (&NewList[ListSize], NewProp, sizeof (NewProp)); > + > + Retval = fdt_setprop (mFdtImage, Node, "compatible", NewList, > + ListSize + sizeof (NewProp)); > + FreePool (NewList); > + if (Retval != 0) { > + DEBUG ((DEBUG_ERROR, "%a: failed to update properties (%d)\n", > + __FUNCTION__, Retval)); > + return EFI_NOT_FOUND; > + } > + > + return EFI_SUCCESS; > +} > + > STATIC > EFI_STATUS > CleanMemoryNodes ( > @@ -486,6 +556,11 @@ FdtDxeInitialize ( > Print (L"Failed to update MAC address: %r\n", Status); > } > > + Status = AddUsbCompatibleProperty (); > + if (EFI_ERROR (Status)) { > + Print (L"Failed to update USB compatible properties: %r\n", Status); > + } > + > if (Internal) { > /* > * A GPU-provided DTB already has the full command line. > -- > 2.21.0.windows.1 >