Message ID | 20200619211140.5081-1-walter.lozano@collabora.com |
---|---|
Headers | show |
Series | drivers: footprint reduction proposal | expand |
On Fri, Jun 19, 2020 at 06:11:36PM -0300, Walter Lozano wrote: > Based on several reports and discussions it is clear that U-Boot's > footprint is always a concern, and any kind of reduction is an > improvement. > > This series is a proposal to help reducing the footprint by parsing > information provided in DT and drivers in different ways and adding > additional intelligence to dtoc. The current version implements the basic > functionality in dtoc but this is no fully integrated, however it will allow > us to discuss this approach. > > Firstly, based on the compatible strings found in drivers, include only DT nodes > which are supported by any driver present in U-Boot. > > Secondly, generate struct udevice_id entries only for nodes present in DT, > which will allow to avoid including additional data. > > These are the first steps for further improvements as proposed in the specific > patches in this series. > > This work is based on the work of Simon Glass present in [1] which adds > support to dtoc for parsing compatible strings. > > [1] https://gitlab.denx.de/u-boot/custodians/u-boot-dm/-/tree/dtoc-working I applied this series on top of the above tree, but there's no rule for <generated/compatible.h> so is something missing? Thanks!
Hi Tom, On 19/6/20 18:48, Tom Rini wrote: > On Fri, Jun 19, 2020 at 06:11:36PM -0300, Walter Lozano wrote: > >> Based on several reports and discussions it is clear that U-Boot's >> footprint is always a concern, and any kind of reduction is an >> improvement. >> >> This series is a proposal to help reducing the footprint by parsing >> information provided in DT and drivers in different ways and adding >> additional intelligence to dtoc. The current version implements the basic >> functionality in dtoc but this is no fully integrated, however it will allow >> us to discuss this approach. >> >> Firstly, based on the compatible strings found in drivers, include only DT nodes >> which are supported by any driver present in U-Boot. >> >> Secondly, generate struct udevice_id entries only for nodes present in DT, >> which will allow to avoid including additional data. >> >> These are the first steps for further improvements as proposed in the specific >> patches in this series. >> >> This work is based on the work of Simon Glass present in [1] which adds >> support to dtoc for parsing compatible strings. >> >> [1] https://gitlab.denx.de/u-boot/custodians/u-boot-dm/-/tree/dtoc-working > I applied this series on top of the above tree, but there's no rule for > <generated/compatible.h> so is something missing? Thanks! > Thanks for taking the time to check this RFC. As you pointed, the Makefile needs to be tweaked in order to be able to run a build, that is what I meant by "not fully integrated", also some additional stuff are missing. However, I thought that sending this RFC explaining the idea will be nice in order to confirm if the approaches proposed make sense for the community and at least the one to handle compatible strings is different from the linker list suggestion. Regards, Walter
On Mon, Jun 22, 2020 at 11:12:40AM -0300, Walter Lozano wrote: > Hi Tom, > > On 19/6/20 18:48, Tom Rini wrote: > > On Fri, Jun 19, 2020 at 06:11:36PM -0300, Walter Lozano wrote: > > > > > Based on several reports and discussions it is clear that U-Boot's > > > footprint is always a concern, and any kind of reduction is an > > > improvement. > > > > > > This series is a proposal to help reducing the footprint by parsing > > > information provided in DT and drivers in different ways and adding > > > additional intelligence to dtoc. The current version implements the basic > > > functionality in dtoc but this is no fully integrated, however it will allow > > > us to discuss this approach. > > > > > > Firstly, based on the compatible strings found in drivers, include only DT nodes > > > which are supported by any driver present in U-Boot. > > > > > > Secondly, generate struct udevice_id entries only for nodes present in DT, > > > which will allow to avoid including additional data. > > > > > > These are the first steps for further improvements as proposed in the specific > > > patches in this series. > > > > > > This work is based on the work of Simon Glass present in [1] which adds > > > support to dtoc for parsing compatible strings. > > > > > > [1] https://gitlab.denx.de/u-boot/custodians/u-boot-dm/-/tree/dtoc-working > > I applied this series on top of the above tree, but there's no rule for > > <generated/compatible.h> so is something missing? Thanks! > > > Thanks for taking the time to check this RFC. > > As you pointed, the Makefile needs to be tweaked in order to be able to run > a build, that is what I meant by "not fully integrated", also some > additional stuff are missing. However, I thought that sending this RFC > explaining the idea will be nice in order to confirm if the approaches > proposed make sense for the community and at least the one to handle > compatible strings is different from the linker list suggestion. I think I like the idea, but I need to give a build a spin and poke things harder. What do I need to do to manually have this build+link? Thanks!
Hi Tom, On 22/6/20 11:20, Tom Rini wrote: > On Mon, Jun 22, 2020 at 11:12:40AM -0300, Walter Lozano wrote: >> Hi Tom, >> >> On 19/6/20 18:48, Tom Rini wrote: >>> On Fri, Jun 19, 2020 at 06:11:36PM -0300, Walter Lozano wrote: >>> >>>> Based on several reports and discussions it is clear that U-Boot's >>>> footprint is always a concern, and any kind of reduction is an >>>> improvement. >>>> >>>> This series is a proposal to help reducing the footprint by parsing >>>> information provided in DT and drivers in different ways and adding >>>> additional intelligence to dtoc. The current version implements the basic >>>> functionality in dtoc but this is no fully integrated, however it will allow >>>> us to discuss this approach. >>>> >>>> Firstly, based on the compatible strings found in drivers, include only DT nodes >>>> which are supported by any driver present in U-Boot. >>>> >>>> Secondly, generate struct udevice_id entries only for nodes present in DT, >>>> which will allow to avoid including additional data. >>>> >>>> These are the first steps for further improvements as proposed in the specific >>>> patches in this series. >>>> >>>> This work is based on the work of Simon Glass present in [1] which adds >>>> support to dtoc for parsing compatible strings. >>>> >>>> [1] https://gitlab.denx.de/u-boot/custodians/u-boot-dm/-/tree/dtoc-working >>> I applied this series on top of the above tree, but there's no rule for >>> <generated/compatible.h> so is something missing? Thanks! >>> >> Thanks for taking the time to check this RFC. >> >> As you pointed, the Makefile needs to be tweaked in order to be able to run >> a build, that is what I meant by "not fully integrated", also some >> additional stuff are missing. However, I thought that sending this RFC >> explaining the idea will be nice in order to confirm if the approaches >> proposed make sense for the community and at least the one to handle >> compatible strings is different from the linker list suggestion. > I think I like the idea, but I need to give a build a spin and poke > things harder. What do I need to do to manually have this build+link? > Thanks! > Well, I don't think this version will give you something to fully test, as there are several pieces missing, but the fact you think you like the idea is good starting point. Just to do some testing you can try Shrink a dtb with ./tools/dtoc/dtoc shrink -d u-boot.dtb this will shrink u-boot.dtb and create u-boot-shrink.dtb by only include nodes with compatible strings present in drivers Generate include/generated/compatible.h ./tools/dtoc/dtoc compatible -d u-boot.dtb -o include/generated/compatible.h this will generate compatible.h but the code does not yet support struct udevice_id with data in struct udevice_id and does not filter anything. I will continue working on these features but any early feedback is welcome. Regards,
Hi Tom, On 22/6/20 12:25, Walter Lozano wrote: > Hi Tom, > > On 22/6/20 11:20, Tom Rini wrote: >> On Mon, Jun 22, 2020 at 11:12:40AM -0300, Walter Lozano wrote: >>> Hi Tom, >>> >>> On 19/6/20 18:48, Tom Rini wrote: >>>> On Fri, Jun 19, 2020 at 06:11:36PM -0300, Walter Lozano wrote: >>>> >>>>> Based on several reports and discussions it is clear that U-Boot's >>>>> footprint is always a concern, and any kind of reduction is an >>>>> improvement. >>>>> >>>>> This series is a proposal to? help reducing the footprint by parsing >>>>> information provided in DT and drivers in different ways and adding >>>>> additional intelligence to dtoc. The current version implements >>>>> the basic >>>>> functionality in dtoc but this is no fully integrated, however it >>>>> will allow >>>>> us to discuss this approach. >>>>> >>>>> Firstly, based on the compatible strings found in drivers, include >>>>> only DT nodes >>>>> which are supported by any driver present in U-Boot. >>>>> >>>>> Secondly, generate struct udevice_id entries only for nodes >>>>> present in DT, >>>>> which will allow to avoid including additional data. >>>>> >>>>> These are the first steps for further improvements as proposed in >>>>> the specific >>>>> patches in this series. >>>>> >>>>> This work is based on the work of Simon Glass present in [1] which >>>>> adds >>>>> support to dtoc for parsing compatible strings. >>>>> >>>>> [1] >>>>> https://gitlab.denx.de/u-boot/custodians/u-boot-dm/-/tree/dtoc-working >>>>> >>>> I applied this series on top of the above tree, but there's no rule >>>> for >>>> <generated/compatible.h> so is something missing? Thanks! >>>> >>> Thanks for taking the time to check this RFC. >>> >>> As you pointed, the Makefile needs to be tweaked in order to be able >>> to run >>> a build, that is what I meant by "not fully integrated", also some >>> additional stuff are missing. However, I thought that sending this RFC >>> explaining the idea will be nice in order to confirm if the approaches >>> proposed make sense for the community and at least the one to handle >>> compatible strings is different from the linker list suggestion. >> I think I like the idea, but I need to give a build a spin and poke >> things harder.? What do I need to do to manually have this build+link? >> Thanks! >> > Well, I don't think this version will give you something to fully > test, as there are several pieces missing, but the fact you think you > like the idea is good starting point. > > Just to do some testing you can try > > > Shrink a dtb with > > ./tools/dtoc/dtoc shrink -d u-boot.dtb > > this will shrink u-boot.dtb and create u-boot-shrink.dtb by only > include nodes with compatible strings present in drivers > > > Generate include/generated/compatible.h > > ./tools/dtoc/dtoc compatible -d u-boot.dtb -o > include/generated/compatible.h > > this will generate compatible.h but the code does not yet support > struct udevice_id with data in struct udevice_id and does not filter > anything. > > > I will continue working on these features but any early feedback is > welcome. > To be able to test this a bit more I reworked and back ported the patches and add a bit more of work on top, such as - Add Makefile rules (need to be improved) - Add support for checking enabled drivers for dtb shrink (need to be improved as parsing probably does not take into account no common situations) - Add support for defining constants based on compatible strings enabled This work can be found in https://gitlab.collabora.com/wlozano/u-boot/-/tree/wip The drawback is that this implementation doesn't take advantage of the new abstractions found in the Simon's work, but I think it could still be useful to test the idea, and discuss if it makes sense. I have done some testing in my iMX6 Hummingboard but I have found some issues not related to this work in MMC, which I need to debug. Regards, Walter