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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3EB19C433EF for ; Fri, 22 Oct 2021 17:54:48 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 76D896101C for ; Fri, 22 Oct 2021 17:54:47 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 76D896101C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=lists.denx.de Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 23AF2833AE; Fri, 22 Oct 2021 19:54:45 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="HttQ613H"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 229CE834C1; Fri, 22 Oct 2021 19:54:43 +0200 (CEST) Received: from mail-lj1-x22f.google.com (mail-lj1-x22f.google.com [IPv6:2a00:1450:4864:20::22f]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 6AE1A83178 for ; Fri, 22 Oct 2021 19:54:38 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=heiko.thiery@gmail.com Received: by mail-lj1-x22f.google.com with SMTP id u5so908617ljo.8 for ; Fri, 22 Oct 2021 10:54:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=iHT4SEFqjl6ywiu9WPhTpXfdAEjeY4lZYfC5tXbmjgk=; b=HttQ613HmVkysX4OhW7T6X9HdsOHuBkVHBeW2dAMQpnjlBeqYqb4xeFsx0eA8Xp8Zk 8PcqqoKGqK4f5uU8tJeFlXdzh4N5mH3dd9Ctim0I51PrF3YzeVY7+dbxBigN4JfR6Xxy pJUz38WTDsKsZc0XnXa7pXIMOM1eJCsduuAu0BHymEsESM7WnrBz/ga/BRcdnVFjY63a fsvhg4aHd45Wmw65n+cYtNL86OBWOOSHbsRuE09x1g/h7asZmRhP1jyXEpASi+G6muIW z6zUmfepSUFXZ3rAg6NBncK+RDu1XGBgjNyepG0t97eSfHfe0W+IGugIrDNa9znoUpvA 1Xfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=iHT4SEFqjl6ywiu9WPhTpXfdAEjeY4lZYfC5tXbmjgk=; b=B3UMsYesVmQ66CD85qARa4RPFn67P2lWPeI5F1ywT+uOHCEm5ITkX5AZMW27KSfYO7 joTTlKAYdbrS9ZxO/eSmM0WXfdQJmh8lpzc6w4Q+6f4NHPHsYUb5D9+nTVJSdyGjmKqf rwOlXxKhOvhb5gi8y92P9jo7oPNgW0dI1PdVN5Tvh5ffBGD8XzecfbohTz9oTTnyPifD wtI9mO+CS42jMiTPCX4Tl9lEQW+s6C8YEQdn0a2oRPBPnkrxWG/RJ7waBAyPBaL6MSoD 7Yhzdaf4GN7qHjJ0JtBs/0mstKXjHOt1Euvbli8LLULGzQeeI9KJCxjzeGsxkQsbUqNv tbXA== X-Gm-Message-State: AOAM530011lz0XRCgAZFU7/5+EHIEdomzvoRtA/d7peopBEJ/nA8iild kGO7NynGmwvEDXIxckjbwAW/t+iLQW2ZAPHU6Ww= X-Google-Smtp-Source: ABdhPJx3GN+bTFIaNw5hbzfkgQfisMLZcAP56pNz7CL4y/JxGrln2EdfRCVRRR0fRpfWa0FGtsqC928nJyYZYnONY/4= X-Received: by 2002:a2e:9248:: with SMTP id v8mr1383205ljg.185.1634925277597; Fri, 22 Oct 2021 10:54:37 -0700 (PDT) MIME-Version: 1.0 References: <20211014180824.10681-1-heiko.thiery@gmail.com> <20211014180824.10681-2-heiko.thiery@gmail.com> In-Reply-To: From: Heiko Thiery Date: Fri, 22 Oct 2021 19:54:26 +0200 Message-ID: Subject: Re: [PATCH v6 2/2] board: kontron: pitx-imx8m: Add Kontron pitx-imx8m board support To: Simon Glass Cc: Stefano Babic , U-Boot Mailing List , Fabio Estevam , "NXP i . MX U-Boot Team" , Peng Fan , Ye Li , Patrick Wildt , Michael Walle , =?UTF-8?Q?Thomas_Sch=C3=A4fer?= Content-Type: text/plain; charset="UTF-8" X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 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.2 at phobos.denx.de X-Virus-Status: Clean Hi Simon, Am Fr., 22. Okt. 2021 um 18:07 Uhr schrieb Simon Glass : > > Hi Heiko, > > On Fri, 22 Oct 2021 at 07:24, Heiko Thiery wrote: > > > > Hi, > > > > Am Fr., 22. Okt. 2021 um 14:37 Uhr schrieb Stefano Babic : > > > > > > Hi Heiko, > > > > > > On 22.10.21 10:19, Heiko Thiery wrote: > > > > Hi Stefano, Hi Simon, > > > > > > > > Am Do., 21. Okt. 2021 um 15:57 Uhr schrieb Heiko Thiery > > > > : > > > >> > > > >> Hi Stefano, Hi Simon, > > > >> > > > >> > > > >> Am Do., 21. Okt. 2021 um 15:29 Uhr schrieb Stefano Babic : > > > >>> > > > >>> On 21.10.21 15:17, Heiko Thiery wrote: > > > >>>> Hi Stefano, > > > >>>> > > > >>>> > > > >>>> Am Do., 21. Okt. 2021 um 13:31 Uhr schrieb Stefano Babic : > > > >>>>> > > > >>>>> Hi Heiko, > > > >>>>> > > > >>>>> On 14.10.21 20:08, Heiko Thiery wrote: > > > >>>>>> The Kontron pitx-imx8m is an NXP i.MX8MQ based board in the pITX > > > >>>>>> form factor. > > > >>>>>> > > > >>>>> > > > >>>>> There is still something using binman that does not work with CI. > > > >>>>> Without CI, we load all firmware including signed_hdmi_imx8m.bin. > > > >>>>> > > > >>>>> But on CI, file is not loaded, but instead of warnings, build for this > > > >>>>> board fails with : > > > >>>>> > > > >>>>> +Image 'main-section' is missing external blobs and is non-functional: > > > >>>>> blob-ext@1 blob-ext@2 blob-ext@3 blob-ext@4 > > > >>>>> +binman: Error 1 running 'mkimage -d ./mkimage.spl.mkimage -n > > > >>>>> spl/u-boot-spl.cfgout -T imx8mimage -e 0x7e1000 > > > >>>>> ./mkimage-out.spl.mkimage': signed_hdmi_imx8m.bin: Can't open: No such > > > >>>>> file or directory > > > >>>>> + > > > >>>>> > > > >>>>> Could you take a look ? > > > >>>> > > > >>>> Sure. Could you point me to the right CI configuration? > > > >>>> > > > >>> > > > >>> Configuration is in .gitlab-ci.yml. For thsi board, buildman is called > > > >>> as part of aarch64 target, that is > > > >>> > > > >>> buildman -o /tmp -P -E -W arm -x aarch64 > > > >>> > > > >>>> I need to understand how the required imx-firmware files are copied to > > > >>>> the u-boot dir. This seems to work already for e. g. the imx8mm > > > >>>> boards. These require the lpdd* train fw files. > > > >> > > > >> Here we seem to hit an issue with the CI. blobs (lpddr*) are required > > > >> for the imx8mm boards. Binman reports the missing files only as a > > > >> warning and buildman does not care about that: > > > >> ---- > > > >> +WARNING 'mkimage.flash.mkimage' not found, resulting binary is not-functional > > > >> ---- > > > >> > > > >> With the imx8mq boards switching to binman we also need an additional > > > >> fw part (signed_hdmi_imx8m.bin). But other than the lpddr firmware as > > > >> blob the signed_hmdi'_imx8m.bin is passed to mkimage and mkimage exits > > > >> with an error. Thats leads to the error: > > > >> ---- > > > >> binman: Error 1 running 'mkimage -d ./mkimage.spl.mkimage -n > > > >> spl/u-boot-spl.cfgout -T imx8mimage -e 0x7e1000 > > > >> ./mkimage-out.spl.mkimage': signed_hdmi_imx8m.bin: Can't open: No such > > > >> file or directory > > > >> ---- > > > >> > > > >> Currently I do not have an idea how to handle that. Anyone else? > > If I understand correctly: > > 1.You don't have these blobs in the tree so don't want to fail a build > in CI, which is why binman's blob-ext is used Correct, for the imx8mq e.g. the signed_hdmi_imx8m.bin is required that comes from NXP and has to be copied to the u-boot build dir. > 2. You sometimes need to ensure that they do exist For the build the "signed_hdmi_imx8m.bin" is required to successfully build. > Should we add a cmdline flag to binman to require all external blobs? I do not understand that. What should happen if this flag is present? > Could we drop the blobs and add code to generate them, or put the date > in a C struct? No, this is not possible because they are delivered by NXP from the firmware-imx package and has to be copied from there. > > > > > > > > I thought about it a little and did a quick hack. What do you think > > > > about dummy files being generated for buildman? > > > > > > I had quite the same idea... > > > > > > > I had buildman > > > > generate the blobs needed by binman. So at least the build runs > > > > through successfully. > > > > > > But it should be checked if files are present - I guess there are people > > > relying on buildman to produce the functional bootloader, and a dummy > > > file cannot overwrite the right one if present. > > > > Sure. As said ,this was only a quick hack to see if it could work. > > Another thing is if there should be a config for each board that says > > what files have to be created. > > > > > > I don't know yet how to integrate this sensibly > > > > into buildman or if this is useful for the maintainers at all. But > > > > this would get rid of the warnings and errors that come from binman. > > > > > > > > > > > > diff --git a/tools/buildman/board.py b/tools/buildman/board.py > > > > index 447aaabea8..cf270c8b72 100644 > > > > --- a/tools/buildman/board.py > > > > +++ b/tools/buildman/board.py > > > > @@ -96,6 +96,28 @@ class Board: > > > > self.vendor, self.soc, self.options] > > > > self.build_it = False > > > > > > > > + def create_dummy_files(self, work_dir): > > > > + import configparser > > > > + import os > > > > + > > > > + settings = configparser.SafeConfigParser() > > > > + config_fname = '%s/.buildman/' % os.getenv('HOME') > > > > + if os.path.exists(config_fname): > > > > + settings.read(config_fname) > > > > + > > > > + if self.target == "kontron_pitx_imx8m": > > > > + > > > > + dummy_files = ['bl31.bin', > > > > + 'signed_hdmi_imx8m.bin', > > > > + 'lpddr4_pmu_train_1d_imem.bin', > > > > + 'lpddr4_pmu_train_1d_dmem.bin', > > > > + 'lpddr4_pmu_train_2d_imem.bin', > > > > + 'lpddr4_pmu_train_2d_dmem.bin' > > > > + ] > > > > + for dummy_file in dummy_files: > > > > + dummy = os.path.join(work_dir, 'build', dummy_file) > > > > + with open(dummy, "wb") as out: > > > > + out.truncate(1024) > > > > > > > > class Boards: > > > > """Manage a list of boards.""" > > > > diff --git a/tools/buildman/builderthread.py b/tools/buildman/builderthread.py > > > > index 48128cf673..dee7d9b0fe 100644 > > > > --- a/tools/buildman/builderthread.py > > > > +++ b/tools/buildman/builderthread.py > > > > @@ -475,6 +475,7 @@ class BuilderThread(threading.Thread): > > > > """ > > > > brd = job.board > > > > work_dir = self.builder.GetThreadDir(self.thread_num) > > > > + brd.create_dummy_files(work_dir) > > > > self.toolchain = None > > > > if job.commits: > > > > # Run 'make board_defconfig' on the first commit > > > > > > > > > > -- > > Heiko > > Regards, > Simon -- Heiko