Hi Manjukumar,

On 28/12/18 20:47, Manjukumar Harthikote Matha wrote:
> Hi Luca,
> 
>> -----Original Message-----
>> From: Luca Ceresoli [mailto:l...@lucaceresoli.net]
>> Sent: Thursday, December 20, 2018 2:44 AM
>> To: Manjukumar Harthikote Matha <manju...@xilinx.com>; Alejandro Enedino
>> Hernandez Samaniego <aleja...@xilinx.com>; meta-xilinx@yoctoproject.org
>> Cc: Mike Looijmans <mike.looijm...@topic.nl>
>> Subject: Re: [meta-xilinx] [PATCH 3/9] meta-xilinx-standalone: Create layer, 
>> distro
>> and machine to build standalone components
>>
>> Hi Manjukumar, Alejandro,
>>
>> On 19/12/18 04:28, Manjukumar Harthikote Matha wrote:
>>> Hi Luca,
>>>
>>>> -----Original Message-----
>>>> From: Luca Ceresoli [mailto:l...@lucaceresoli.net]
>>>> Sent: Tuesday, December 18, 2018 7:26 AM
>>>> To: Alejandro Enedino Hernandez Samaniego <aleja...@xilinx.com>; meta-
>>>> xil...@yoctoproject.org
>>>> Cc: Mike Looijmans <mike.looijm...@topic.nl>; Manjukumar Harthikote Matha
>>>> <manju...@xilinx.com>
>>>> Subject: Re: [meta-xilinx] [PATCH 3/9] meta-xilinx-standalone: Create 
>>>> layer,
>> distro
>>>> and machine to build standalone components
>>>>
>>>> Hi Alejandro, Manju,
>>>>
>>>> On 11/12/18 23:16, Alejandro Enedino Hernandez Samaniego wrote:
>>>>> Hey Luca,
>>>>>
>>>>>
>>>>> On 12/11/2018 07:41 AM, Luca Ceresoli wrote:
>>>>>> Hi Alejandro,
>>>>>>
>>>>>> On 06/12/18 22:56, Alejandro Enedino Hernandez Samaniego wrote:
>>>>>>> This layer is meant to augment Yocto/OE functionality to provide a
>>>>>>> toolchain to build standalone components for Xilinx architectures.
>>>>>>>
>>>>>>> Signed-off-by: Alejandro Enedino Hernandez Samaniego
>>>>>>> <aleja...@xilinx.com>
>>>>>>> Signed-off-by: Manjukumar Matha
>>>>>>> <manjukumar.harthikote-ma...@xilinx.com>
>>>>>>> ---
>>>>>>>   meta-xilinx-standalone/README.md                   | 56
>>>>>>> ++++++++++++++++++++++
>>>>>>>   .../conf/distro/xilinx-standalone.conf             | 12 +++++
>>>>>>>   meta-xilinx-standalone/conf/layer.conf             | 14 ++++++
>>>>>>>   .../conf/machine/zynqmp-pmu.conf                   | 11 +++++
>>>>>>>   4 files changed, 93 insertions(+)
>>>>>>>   create mode 100644 meta-xilinx-standalone/README.md
>>>>>>>   create mode 100644
>>>>>>> meta-xilinx-standalone/conf/distro/xilinx-standalone.conf
>>>>>>>   create mode 100644 meta-xilinx-standalone/conf/layer.conf
>>>>>>>   create mode 100644
>>>>>>> meta-xilinx-standalone/conf/machine/zynqmp-pmu.conf
>>>>>>>
>>>>>>> diff --git a/meta-xilinx-standalone/README.md
>>>>>>> b/meta-xilinx-standalone/README.md
>>>>>>> new file mode 100644
>>>>>>> index 0000000..da7f4e1
>>>>>>> --- /dev/null
>>>>>>> +++ b/meta-xilinx-standalone/README.md
>>>>>>> @@ -0,0 +1,56 @@
>>>>>>> +meta-xilinx-standalone
>>>>>>> +=====================
>>>>>> Nitpick: there should be an extra '='.
>>>>>>
>>>>>> [...]
>>>>>>> +Dependencies
>>>>>>> +============
>>>>>>> +
>>>>>>> +This layer depends on:
>>>>>>> +
>>>>>>> +     URI: git://git.yoctoproject.org/poky
>>>>>>> +
>>>>>>> +     URI: git://git.yoctoproject.org/meta-xilinx
>>>>>> That's the repo, not the layer. Maybe clarify as:
>>>>>>
>>>>>>    URI: git://git.yoctoproject.org/meta-xilinx -> meta-xilinx-bsp
>>>>>> layer
>>>>> True
>>>>>
>>>>>>
>>>>>>> +Usage
>>>>>>> +=====
>>>>>>> +
>>>>>>> +1.- Clone this layer along with the specified layers
>>>>>>> +
>>>>>>> +2.- $ source oe-init-build-env
>>>>>>> +
>>>>>>> +3.- Add this layer to BBLAYERS on conf/bblayers.conf
>>>>>>> +
>>>>>>> +4.- Add the following to your conf/local.conf to build for the
>>>>>>> microblaze architecture:
>>>>>>> +
>>>>>>> +DISTRO="xilinx-standalone"
>>>>>>> +
>>>>>>> +MACHINE="zynqmp-pmu"
>>>>>> To the best of my knowledge, to use U-Boot SPL people link the
>>>>>> pm_cfg_obj.c file in the pmufw binary and then patch the pmufw code
>>>>>> to load that config object instead of getting it via smc calls [0].
>>>>>> This makes pmufw binary machine-specfic.
>>>>>>
>>>>>> How do you think the same goal should be obtained with the new
>>>>>> "zynqmp-pmu" machine?
>>>>> Unless I'm not understanding this correctly, using MACHINEOVERRIDES
>>>>> should do it
>>>>
>>>> I don't think this can be done with MACHINEOVERRIDES. Let me explain better
>> what
>>>> I mean.
>>>>
>>>> In my current rocko setup, there are multiple machines defined in my 
>>>> layer. Let's
>> call
>>>> then "foo" and "bar":
>>>>
>>>>   $ ls meta-mylayer/conf/machine/
>>>>   foo-zynqmp.conf
>>>>   bar-zynqmp.conf
>>>>   $
>>>>
>>>> Then there is a recipe (say my-hdl.bb) that copies pm_cfg_obj.c in the 
>>>> sysroot.
>> The
>>>> copied file is different file for each MACHINE. This recipe has 
>>>> PACKAGE_ARCH =
>>>> "${MACHINE_ARCH}", so different cfg objects go in different directories.
>>>>
>>>> Finally I have a pmu-firmware_%.bbappend that is similar to Mike's [0], 
>>>> with the
>>>> difference that it takes the pm_cfg_obj.c file from staging where 
>>>> my-hdl.bb has
>>>> copied it:
>>>>
>>>>   do_configure[depends] = "my-hdl:do_populate_sysroot"
>>>>   do_configure_append() {
>>>>         sed
>>>> 's!"pm_defs.h"!"../../../sw_services/xilpm/src/common/pm_defs.h"!' \
>>>>
>>>>
>>>>         ${STAGING_DIR_TARGET}/usr/share/my-hdl/pm_cfg_obj.c \
>>>>    > pm_cfg_obj.c
>>>>
>>>>   }
>>>>
>>>>
>>>>
>>>> This way a different pmufw is build for each MACHINE, each with a 
>>>> hard-coded
>>>> pm_cfg_obj.c specific for that machine (note that pmu-firmware is also
>>>> PACKAGE_ARCH = "${MACHINE_ARCH}").
>>>>
>>>>
>>>> With the new multiconfig setup, the pmu-firmware is always built for the
>> "zynqmp-
>>>> pmu" MACHINE. And since the applied MACHINEOVERRIDES depend on the
>>>> MACHINE, in the xilinx-standalone layer you can not differentiate foo and 
>>>> bar
>> based
>>>> on the MACHINE. For the same reason PACKAGE_ARCH = "${MACHINE_ARCH}"
>> does
>>>> not help.
>>>>
>>>> I did some experiments adding to pmu-firmware_2018.3.bbappend the line:
>>>>
>>>>   do_configure[mcdepends] = \
>>>>     "multiconfig:pmu:foo:my-hdl:do_populate_sysroot"
>>>>
>>>> And now pmu:pmu-firmware depends on my-hdl, but I'm still unable to get
>> different
>>>> pmu-firmwares built for e.g. foo and bar.
>>>>
>>>
>>> If your my-hdl recipe is machine specific meaning, my-hdl generates config 
>>> based
>> on machine (like zcu102, zcu106, foo etc) it should work.  I am not sure why 
>> that
>> wouldn’t work.
>>
>> The my-hdl works correctly.
>>
>>> I am assuming that: my-hdl is machine specific config generator recipe and 
>>> belongs
>> under meta-xilinx-bsp not meta-xilinx-standalone layer. The above multiconfig
>> dependency you have will enable pmu to depend on my-hdl and will also need 
>> some
>> TMP wiring to fetch the config (since it will be under zcu102/106/foo tmp 
>> dir which is
>> different from pmu tmp directory)
>>
>> Right: my-hdl is actually in my own top-level layer, but it is in the
>> "meta-xilinx-bsp domain", i.e. it has MACHINE like zcu102, zcu106 and
>> similar. It is not related to meta-xilinx-standalone or the zynqmp-pmu
>> MACHINE.
>>
>>> If you need the my-hdl recipe under meta-xilinx-standalone then you will 
>>> need to
>> write a python snippet in my-hdl to figure out whether it is for zcu102 or 
>> zcu106 or
>> foo machine and build the appropriate configs. You will not need any 
>> multiconfig for
>> this approach, however you will need some image dependency on my-hdl for
>> zynqmp-pmu.conf
>>
>> Seems like my latest explanation using MACHINE and MACHINEOVERRIDES was
>> not good. Let me rephrase speaking about directories.
>>
>> In my rock setup I had, under the build directory:
>>
>> tmp/work/
>>  |-- zcu106_zynqmp-poky-linux/my-hdl/${PV}/sysroot-destdir/
>>  |   `-- usr/share/my-hdl/pm_cfg_obj.c (A)
>>  |-- zcu106_zynqmp-poky-linux/my-u-boot/${PV}/recipe-sysroot/
>>  |   `-- usr/share/my-hdl/pm_cfg_obj.c (A)
>>  |-- zcu106_zynqmp-poky-elf/zynqmp-pmu-pmu-firmware/${PV}/
>>  |   `-- deploy-zynqmp-pmu-pmu-firmware/
>>  |       `-- pmu-firmware--${PV}-zcu106-zynqmp-<TIME>.bin (A)
>>  |-- zcu102_zynqmp-poky-linux/my-hdl/${PV}/sysroot-destdir/
>>  |   `-- usr/share/my-hdl/pm_cfg_obj.c (B)
>>  |-- zcu102_zynqmp-poky-linux/my-u-boot/${PV}/recipe-sysroot/
>>  |   `-- usr/share/my-hdl/pm_cfg_obj.c (B)
>>  `-- zcu102_zynqmp-poky-elf/zynqmp-pmu-pmu-firmware/${PV}/
>>      `-- deploy-zynqmp-pmu-pmu-firmware/
>>          `-- pmu-firmware--${PV}-zcu102-zynqmp-<TIME>.bin (B)
>>
>> Files marked with (A) are specific for zcu106, (B) for zcu102. For the
>> two boards there are different pm_cfg_obj.c and differenf pmufw binaries
>> in different directories.
>>
> 
> Even in this setup, how are you passing the pmu_cfg_obj to pmu-firmware 
> build? 
> I am assuming you are patching it using 
> https://github.com/topic-embedded-products/meta-topic/blob/master/recipes-bsp/pmu-firmware/pmu-firmware_2017.%25.bbappend#L14

Yes, I'm using Mike's trick.

>> With the xilinx-bsp + xilinx-standalone thud setup I would have:
>>
>> tmp/work/
>>  |-- zcu106_zynqmp-poky-linux/my-hdl/${PV}/sysroot-destdir/
>>  |   `-- usr/share/my-hdl/pm_cfg_obj.c (A)
>>  |-- zcu106_zynqmp-poky-linux/my-u-boot/${PV}/recipe-sysroot/
>>  |   `-- usr/share/my-hdl/pm_cfg_obj.c (A)
>>  |-- zcu102_zynqmp-poky-linux/my-hdl/${PV}/sysroot-destdir/
>>  |   `-- usr/share/my-hdl/pm_cfg_obj.c (B)
>>  |-- zcu102_zynqmp-poky-linux/my-u-boot/${PV}/recipe-sysroot/
>>  |   `-- usr/share/my-hdl/pm_cfg_obj.c (B)
>>  `-- microblazeel-v9.2-bs-cmp-xilinx-elf/pmu-firmware/
>>      `-- ${PV}/deploy-pmu-firmware/
>>          `-- pmu-firmware--${PV}-zynqmp-pmu-<TIME>.bin (?)
>>
>> (A) and (B) mark the different boards as before, and there are still two
>> different pm_cfg_obj.c files in two directories. But there is only one
>> pmufw binary. Which pm_cfg_obj.c does it have linked? Presumably it
>> depends on whether which board has been built first... or last...? But
>> definitely there cannot be two different pmufw binaries in only one
>> directory.
>>
> 
> If the patching is done similar way then pmu-firmware create in one build 
> will correspond to that particular machine build.
> Agreed that you cannot deploy different pmu-firmware because config objects 
> are different per board. 
> One work-around is to have pmutmp different per board during multiconfig 
> build or have different pmu machines (not the generic zynqmp).

Yes, I think this could work.

> Or We could also extend the do_deploy function in pmu-firmware to include the 
> machine name(zcu102,zcu106) in the deployed image

How would you do that? When building pmu-firmware, the MACHINE is always
"zynqmp-pmu". Adding some extra variable in local/multiconfig/pmu.conf?

However that's not much relevant to me anymore as in the end I ditched
the whole multiconfig setup and I'm now using the second way from [0]
("Build each distro independently"). Besides the issues mentioned in
this thread multiconfig is overly slow, has additional complexity and
breaks some existing tools ('bitbake-layers show-recipes -i').

[0]
https://lists.yoctoproject.org/pipermail/meta-xilinx/2018-November/004087.html

Thanks,
-- 
Luca
-- 
_______________________________________________
meta-xilinx mailing list
meta-xilinx@yoctoproject.org
https://lists.yoctoproject.org/listinfo/meta-xilinx

Reply via email to