devel Digest, Vol 110, Issue 38

Chris Johns chrisj at rtems.org
Thu Jan 28 05:40:01 UTC 2021


On 28/1/21 4:25 am, Niteesh G. S. wrote:
>     Date: Fri, 22 Jan 2021 04:28:37 +1100
>     From: Chris Johns <chrisj at rtems.org <mailto:chrisj at rtems.org>>
>     To: devel at rtems.org <mailto:devel at rtems.org>
>     Subject: Re: [patch libBSD] dev/ofw: Use RTEMS OFW FDT implementation
>     Message-ID: <d2cca4d0-f1fc-b93f-c30e-0c95ce4b410b at rtems.org
>     <mailto:d2cca4d0-f1fc-b93f-c30e-0c95ce4b410b at rtems.org>>
>     Content-Type: text/plain; charset=utf-8
> 
>     On 20/1/21 7:31 pm, G S Niteesh Babu wrote:
>     > This commit modifies the OFW interface to the RTEMS FDT
>     > implementation instead of the default FreeBSD.
> 
>     Which branch?
> 
> Did you mean which commit? If not can you please rephrase your question?
> RTEMS OFW API implemented in this commit:
> https://git.rtems.org/rtems/commit/?id=9d2ed41fcb1dc635ce7d689c60cdf374f2394dbd
> <https://git.rtems.org/rtems/commit/?id=9d2ed41fcb1dc635ce7d689c60cdf374f2394dbd>

This is for the rtems.git repo and the patch being reviewed is for the
rtems-libbsd.git repo. We have 2 active branches in that repo. Which branch is
this patch for?

>     Is this patch dependent on the changes to rtems.git?
> 
>  
> Yes. This patch depends on the previously committed patch 
> https://lists.rtems.org/pipermail/devel/2020-December/063644.html
> <https://lists.rtems.org/pipermail/devel/2020-December/063644.html>

OK.

>     Are the kernel versions ofthe functions built for all bsps?
> 
>     Which BSPs have been built to test the changes?
> 
>  
> I tested the changes with Beagle BSP and xilinx_zynq_a9_qemu.

Great and thanks however libbsd builds for powerpc etc and this is not covered
by that testing. I have not looked into the rtems.git patch to know if it is
common to all bsps.

>     My concnern is these calls are currently available to all BSPs in libbsd and may
>     not be in rtems.git.
> 
>  
> If I understand the question correctly, my previous answer should have answered
> this.

Hmm, well I must have missed it or I did not understand because I have asked again.

> But once again, An RTEMS OFW API is already available in the master branch. This
> patch removes the functions which have been implemented in RTEMS. We provide
> FreeBSD compatibility using ofw_compat.h.
> https://git.rtems.org/rtems/tree/bsps/include/ofw/ofw_compat.h
> <https://git.rtems.org/rtems/tree/bsps/include/ofw/ofw_compat.h>

Yeap I understand this ...

> 
>     > ---
>     >  freebsd/sys/dev/ofw/openfirm.c                |  2 ++
>     >  freebsd/sys/dev/ofw/openfirm.h                |  9 ++++++++
> 
>     Why do we need to keep these files in libbsd?
> 
>  
> Some functions cannot be implemented in RTEMS since they depend
> on the FreeBSD driver infrastructure. So I have left them here. All functions
> which are independent of the FreeBSD stuff are moved into RTEMS from
> FreeBSD. 

For this change to proceed I need you to:

1. Post here the name of a BSP, if any exist, that does not build the rtems.git
version of the OFW functions. If all BSPs build these functions please say so.

2. A report from you that the BSP listed in 1, if there is one, builds _and_
libbsd for that BSP also builds with the patch we are reviewing.

> 
>     >  .../machine/rtems-bsd-kernel-namespace.h      | 22 -------------------
>     >  3 files changed, 11 insertions(+), 22 deletions(-)
>     >
>     > diff --git a/freebsd/sys/dev/ofw/openfirm.c b/freebsd/sys/dev/ofw/openfirm.c
>     > index 9cc7dbdc..30513ab2 100644
>     > --- a/freebsd/sys/dev/ofw/openfirm.c
>     > +++ b/freebsd/sys/dev/ofw/openfirm.c
>     > @@ -333,6 +333,7 @@ OF_interpret(const char *cmd, int nreturns, ...)
>     >   * Device tree functions
>     >   */
>>     > +#ifndef __rtems__
>     >  /* Return the next sibling of this node or 0. */
>     >  phandle_t
>     >  OF_peer(phandle_t node)
>     > @@ -672,6 +673,7 @@ OF_xref_from_node(phandle_t node)
>     >               return (node);
>     >       return (xref);
>     >  }
>     > +#endif /* __rtems__ */
>>     >  device_t
>     >  OF_device_from_xref(phandle_t xref)
>     > diff --git a/freebsd/sys/dev/ofw/openfirm.h b/freebsd/sys/dev/ofw/openfirm.h
>     > index f043197a..5df07258 100644
>     > --- a/freebsd/sys/dev/ofw/openfirm.h
>     > +++ b/freebsd/sys/dev/ofw/openfirm.h
>     > @@ -64,7 +64,11 @@
>>     >  #include <sys/types.h>
>     >  #include <machine/_bus.h>
>     > +#ifdef __rtems__
>     > +#include <ofw/ofw_compat.h>
>     > +#endif /* __rtems__ */
>>     > +#ifndef __rtems__
>     >  /*
>     >   * Prototypes for Open Firmware Interface Routines
>     >   */
>     > @@ -72,6 +76,7 @@
>     >  typedef uint32_t     ihandle_t;
>     >  typedef uint32_t     phandle_t;
>     >  typedef uint32_t     pcell_t;
>     > +#endif /* __rtems__ */
>>     >  #ifdef _KERNEL
>     >  #include <sys/malloc.h>
>     > @@ -102,6 +107,7 @@ int               OF_test(const char *name);
>     >  void         OF_printf(const char *fmt, ...);
>>     >  /* Device tree functions */
>     > +#ifndef __rtems__
>     >  phandle_t    OF_peer(phandle_t node);
>     >  phandle_t    OF_child(phandle_t node);
>     >  phandle_t    OF_parent(phandle_t node);
>     > @@ -140,6 +146,7 @@ ssize_t           OF_package_to_path(phandle_t node,
>     char *buf, size_t len);
>     >   */
>     >  phandle_t    OF_node_from_xref(phandle_t xref);
>     >  phandle_t    OF_xref_from_node(phandle_t node);
>     > +#endif /* __rtems__ */
>>     >  /*
>     >   * When properties contain references to other nodes using xref handles it is
>     > @@ -159,8 +166,10 @@ ssize_t          OF_read(ihandle_t instance, void
>     *buf, size_t len);
>     >  ssize_t              OF_write(ihandle_t instance, const void *buf, size_t
>     len);
>     >  int          OF_seek(ihandle_t instance, uint64_t where);
>>     > +#ifndef __rtems__
>     >  phandle_t    OF_instance_to_package(ihandle_t instance);
>     >  ssize_t              OF_instance_to_path(ihandle_t instance, char *buf,
>     size_t len);
>     > +#endif /* __rtems__ */
>     >  int          OF_call_method(const char *method, ihandle_t instance,
>     >                   int nargs, int nreturns, ...);
>>     > diff --git a/rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h
>     b/rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h
>     > index 75b744a4..53944393 100644
>     > --- a/rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h
>     > +++ b/rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h
>     > @@ -3044,42 +3044,20 @@
>     >  #define      null_filtops _bsd_null_filtops
>     >  #define      nullop _bsd_nullop
>     >  #define      OF_call_method _bsd_OF_call_method
>     > -#define      OF_canon _bsd_OF_canon
>     > -#define      OF_child _bsd_OF_child
>     >  #define      OF_claim _bsd_OF_claim
>     >  #define      OF_close _bsd_OF_close
>     >  #define      OF_device_from_xref _bsd_OF_device_from_xref
>     >  #define      OF_device_register_xref _bsd_OF_device_register_xref
>     >  #define      OF_enter _bsd_OF_enter
>     >  #define      OF_exit _bsd_OF_exit
>     > -#define      OF_finddevice _bsd_OF_finddevice
>     > -#define      OF_getencprop _bsd_OF_getencprop
>     > -#define      OF_getencprop_alloc _bsd_OF_getencprop_alloc
>     > -#define      OF_getencprop_alloc_multi _bsd_OF_getencprop_alloc_multi
>     > -#define      OF_getprop _bsd_OF_getprop
>     > -#define      OF_getprop_alloc _bsd_OF_getprop_alloc
>     > -#define      OF_getprop_alloc_multi _bsd_OF_getprop_alloc_multi
>     > -#define      OF_getproplen _bsd_OF_getproplen
>     > -#define      OF_hasprop _bsd_OF_hasprop
>     >  #define      OF_init _bsd_OF_init
>     >  #define      OF_install _bsd_OF_install
>     > -#define      OF_instance_to_package _bsd_OF_instance_to_package
>     > -#define      OF_instance_to_path _bsd_OF_instance_to_path
>     >  #define      OF_interpret _bsd_OF_interpret
>     > -#define      OF_nextprop _bsd_OF_nextprop
>     > -#define      OF_node_from_xref _bsd_OF_node_from_xref
>     >  #define      OF_open _bsd_OF_open
>     > -#define      OF_package_to_path _bsd_OF_package_to_path
>     > -#define      OF_parent _bsd_OF_parent
>     > -#define      OF_peer _bsd_OF_peer
>     >  #define      OF_printf _bsd_OF_printf
>     > -#define      OF_prop_free _bsd_OF_prop_free
>     >  #define      OF_read _bsd_OF_read
>     >  #define      OF_release _bsd_OF_release
>     > -#define      OF_searchencprop _bsd_OF_searchencprop
>     > -#define      OF_searchprop _bsd_OF_searchprop
>     >  #define      OF_seek _bsd_OF_seek
>     > -#define      OF_setprop _bsd_OF_setprop
>     >  #define      OF_test _bsd_OF_test
>     >  #define      ofw_bus_assigned_addresses_to_rl
>     _bsd_ofw_bus_assigned_addresses_to_rl
>     >  #define      ofwbus_driver _bsd_ofwbus_driver
> 
>     How did you create this changes?
> 
> In RTEMS, there is ofw_compat.h
> https://git.rtems.org/rtems/tree/bsps/include/ofw/ofw_compat.h
> <https://git.rtems.org/rtems/tree/bsps/include/ofw/ofw_compat.h>
> to provide compatibility between FreeBSD OFW API and RTEMS OFW API. 

Huh? The segment of the patch I commented under is for
rtems-bsd-kernel-namespace.h. I am specifically asking how that fragment of the
posted patch was created.

Chris


More information about the devel mailing list