Hello Gedare, On Wed, Jan 20, 2021 at 4:32 AM Gedare Bloom <ged...@rtems.org> wrote:
> Does this have a ticket? > It doesn't have a specific ticket for itself, but the rationale behind this patch is to support ticket #3782 <https://devel.rtems.org/ticket/3782>. > I may have missed some email about this idea. It looks like a partial > compatibility for the freebsd busspace API? > This patch aims to reduce the number of modifications done to drivers imported from FreeBSD. An example of a driver imported from FreeBSD into RTEMS is the IMX iomux driver(imx_iomux.c). This patch implements functions and structures that are quite frequently used but also have a simple RTEMS implementation. The real use of this patch can be seen in the ported beagle pinmux driver https://github.com/gs-niteesh/rtems/commit/42590fb1c8c8e4228500f995ff6a7c0e0e607133 I have also written about the things this patch implements in my blog here. https://gs-niteesh.github.io/week/week2/#modifications-needed-before-implementing-the-freebsd-structures Thanks, Niteesh. > > On Tue, Jan 19, 2021 at 9:20 AM G S Niteesh Babu <niteesh...@gmail.com> > wrote: > >> The following structures and functions have been implemented to >> make porting of driver from FreeBSD easier. >> >> 1) struct resource_spec >> 2) struct device >> 3) struct resource >> 4) device_get_softc >> 5) bus_alloc_resources >> 6) bus_alloc_resource >> 7) bus_alloc_resource_any >> 8) bus_space_read_1 >> 9) bus_space_read_2 >> 10) bus_space_read_4 >> 11) bus_space_write_1 >> 12) bus_space_write_2 >> 13) bus_space_write_4 >> --- >> bsps/include/rtems/freebsd-compat/bus.h | 122 +++++++++++++++++++ >> bsps/include/rtems/freebsd-compat/device.h | 46 +++++++ >> bsps/include/rtems/freebsd-compat/resource.h | 46 +++++++ >> bsps/include/rtems/freebsd-compat/rman.h | 65 ++++++++++ >> bsps/shared/rtems/freebsd-compat/bus.c | 119 ++++++++++++++++++ >> spec/build/bsps/obj.yml | 1 + >> 6 files changed, 399 insertions(+) >> create mode 100644 bsps/include/rtems/freebsd-compat/bus.h >> create mode 100644 bsps/include/rtems/freebsd-compat/device.h >> create mode 100644 bsps/include/rtems/freebsd-compat/resource.h >> create mode 100644 bsps/include/rtems/freebsd-compat/rman.h >> create mode 100644 bsps/shared/rtems/freebsd-compat/bus.c >> >> diff --git a/bsps/include/rtems/freebsd-compat/bus.h >> b/bsps/include/rtems/freebsd-compat/bus.h >> new file mode 100644 >> index 0000000000..4bd3ab311a >> --- /dev/null >> +++ b/bsps/include/rtems/freebsd-compat/bus.h >> @@ -0,0 +1,122 @@ >> +/* SPDX-License-Identifier: BSD-2-Clause */ >> + >> +/** >> + * @file >> + * >> + * @ingroup FreeBSDCompat >> + * >> + * @brief >> + */ >> + >> +/* >> + * Copyright (C) <2020> Niteesh Babu <niteesh...@gmail.com> >> + * >> + * Redistribution and use in source and binary forms, with or without >> + * modification, are permitted provided that the following conditions >> + * are met: >> + * 1. Redistributions of source code must retain the above copyright >> + * notice, this list of conditions and the following disclaimer. >> + * 2. Redistributions in binary form must reproduce the above copyright >> + * notice, this list of conditions and the following disclaimer in the >> + * documentation and/or other materials provided with the >> distribution. >> + * >> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS >> "AS IS" >> + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >> THE >> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >> PURPOSE >> + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS >> BE >> + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >> + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >> + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR >> BUSINESS >> + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER >> IN >> + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR >> OTHERWISE) >> + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED >> OF THE >> + * POSSIBILITY OF SUCH DAMAGE. >> + */ >> + >> +#ifndef _FREEBSD_COMPAT_BUS_H >> +#define _FREEBSD_COMPAT_BUS_H >> + >> +#include <sys/types.h> >> +#include "device.h" >> +#include "rman.h" >> + >> +struct resource_spec { >> + int type; >> + int rid; >> + int flags; >> +}; >> +#define RESOURCE_SPEC_END {-1, 0, 0} >> + >> +/* >> + * Write a 1, 2, 4, or 8 byte quantity to bus space >> + * described by tag/handle/offset. >> + */ >> +static inline void >> +bus_space_write_1(bus_space_tag_t bst, bus_space_handle_t bsh, >> bus_size_t ofs, >> + uint8_t val) >> +{ >> + uint8_t volatile *bsp = (uint8_t volatile *)(bsh + ofs); >> + *bsp = val; >> +} >> + >> +static inline void >> +bus_space_write_2(bus_space_tag_t bst, bus_space_handle_t bsh, >> bus_size_t ofs, >> + uint16_t val) >> +{ >> + uint16_t volatile *bsp = (uint16_t volatile *)(bsh + ofs); >> + *bsp = val; >> +} >> + >> +static inline void >> +bus_space_write_4(bus_space_tag_t bst, bus_space_handle_t bsh, >> bus_size_t ofs, >> + uint32_t val) >> +{ >> + uint32_t volatile *bsp = (uint32_t volatile *)(bsh + ofs); >> + *bsp = val; >> +} >> + >> +/* >> + * Read a 1, 2, 4, or 8 byte quantity from bus space >> + * described by tag/handle/offset. >> + */ >> +static inline uint8_t >> +bus_space_read_1(bus_space_tag_t tag, bus_space_handle_t handle, >> + bus_size_t offset) >> +{ >> + >> + return (*(volatile uint8_t *)(handle + offset)); >> +} >> + >> +static inline uint16_t >> +bus_space_read_2(bus_space_tag_t tag, bus_space_handle_t handle, >> + bus_size_t offset) >> +{ >> + return (*(volatile uint16_t *)(handle + offset)); >> +} >> + >> +static inline uint32_t >> +bus_space_read_4(bus_space_tag_t tag, bus_space_handle_t handle, >> + bus_size_t offset) >> +{ >> + return (*(volatile uint32_t *)(handle + offset)); >> +} >> + >> +bus_space_handle_t rman_get_bushandle(struct resource *); >> +bus_space_tag_t rman_get_bustag(struct resource *); >> + >> +void *device_get_softc(device_t dev); >> + >> +int bus_alloc_resources(device_t dev, struct resource_spec *rs, >> + struct resource **res); >> + >> +struct resource *bus_alloc_resource(device_t dev, int type, int *rid, >> + rman_res_t start, rman_res_t end, >> + rman_res_t count, u_int flags); >> + >> +static __inline struct resource * >> +bus_alloc_resource_any(device_t dev, int type, int *rid, uint32_t flags) >> +{ >> + return (bus_alloc_resource(dev, type, rid, 0, ~0, 1, flags)); >> +} >> + >> +#endif /* _FREEBSD_COMPAT_BUS_H_ */ >> diff --git a/bsps/include/rtems/freebsd-compat/device.h >> b/bsps/include/rtems/freebsd-compat/device.h >> new file mode 100644 >> index 0000000000..c646bb5986 >> --- /dev/null >> +++ b/bsps/include/rtems/freebsd-compat/device.h >> @@ -0,0 +1,46 @@ >> +/* SPDX-License-Identifier: BSD-2-Clause */ >> + >> +/** >> + * @file >> + * >> + * @ingroup FreeBSDCompat >> + * >> + * @brief >> + */ >> + >> +/* >> + * Copyright (C) <2020> Niteesh Babu <niteesh...@gmail.com> >> + * >> + * Redistribution and use in source and binary forms, with or without >> + * modification, are permitted provided that the following conditions >> + * are met: >> + * 1. Redistributions of source code must retain the above copyright >> + * notice, this list of conditions and the following disclaimer. >> + * 2. Redistributions in binary form must reproduce the above copyright >> + * notice, this list of conditions and the following disclaimer in the >> + * documentation and/or other materials provided with the >> distribution. >> + * >> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS >> "AS IS" >> + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >> THE >> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >> PURPOSE >> + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS >> BE >> + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >> + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >> + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR >> BUSINESS >> + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER >> IN >> + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR >> OTHERWISE) >> + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED >> OF THE >> + * POSSIBILITY OF SUCH DAMAGE. >> + */ >> + >> +#ifndef _FREEBSD_COMPAT_DEVICE_H >> +#define _FREEBSD_COMPAT_DEVICE_H >> + >> +struct device { >> + void *softc; >> + unsigned int node; >> +}; >> + >> +typedef struct device *device_t; >> + >> +#endif /* _FREEBSD_COMPAT_DEVICE_H */ >> diff --git a/bsps/include/rtems/freebsd-compat/resource.h >> b/bsps/include/rtems/freebsd-compat/resource.h >> new file mode 100644 >> index 0000000000..f84fd60e21 >> --- /dev/null >> +++ b/bsps/include/rtems/freebsd-compat/resource.h >> @@ -0,0 +1,46 @@ >> +/* SPDX-License-Identifier: BSD-2-Clause */ >> + >> +/** >> + * @file >> + * >> + * @ingroup LIBFREEBSD >> + * >> + * @brief >> + */ >> + >> +/* >> + * Copyright (C) <2020> Niteesh Babu <niteesh...@gmail.com> >> + * >> + * Redistribution and use in source and binary forms, with or without >> + * modification, are permitted provided that the following conditions >> + * are met: >> + * 1. Redistributions of source code must retain the above copyright >> + * notice, this list of conditions and the following disclaimer. >> + * 2. Redistributions in binary form must reproduce the above copyright >> + * notice, this list of conditions and the following disclaimer in the >> + * documentation and/or other materials provided with the >> distribution. >> + * >> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS >> "AS IS" >> + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >> THE >> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >> PURPOSE >> + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS >> BE >> + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >> + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >> + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR >> BUSINESS >> + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER >> IN >> + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR >> OTHERWISE) >> + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED >> OF THE >> + * POSSIBILITY OF SUCH DAMAGE. >> + */ >> + >> + >> +#ifndef _FREEBSD_COMPAT_RESOURCE_H >> +#define _FREEBSD_COMPAT_RESOURCE_H >> + >> +#define SYS_RES_IRQ 1 >> +#define SYS_RES_DRQ 2 >> +#define SYS_RES_MEMORY 3 >> +#define SYS_RES_IOPORT 4 >> +#define SYS_RES_GPIO 5 >> + >> +#endif /* _FREEBSD_COMPAT_RESOURCE_H */ >> diff --git a/bsps/include/rtems/freebsd-compat/rman.h >> b/bsps/include/rtems/freebsd-compat/rman.h >> new file mode 100644 >> index 0000000000..cf359789e6 >> --- /dev/null >> +++ b/bsps/include/rtems/freebsd-compat/rman.h >> @@ -0,0 +1,65 @@ >> + >> +/* SPDX-License-Identifier: BSD-2-Clause */ >> + >> +/** >> + * @file >> + * >> + * @ingroup FreeBSDCompat >> + * >> + * @brief >> + */ >> + >> +/* >> + * Copyright (C) <2020> Niteesh Babu <niteesh...@gmail.com> >> + * >> + * Redistribution and use in source and binary forms, with or without >> + * modification, are permitted provided that the following conditions >> + * are met: >> + * 1. Redistributions of source code must retain the above copyright >> + * notice, this list of conditions and the following disclaimer. >> + * 2. Redistributions in binary form must reproduce the above copyright >> + * notice, this list of conditions and the following disclaimer in the >> + * documentation and/or other materials provided with the >> distribution. >> + * >> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS >> "AS IS" >> + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >> THE >> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >> PURPOSE >> + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS >> BE >> + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >> + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >> + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR >> BUSINESS >> + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER >> IN >> + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR >> OTHERWISE) >> + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED >> OF THE >> + * POSSIBILITY OF SUCH DAMAGE. >> + */ >> + >> +#ifndef _FREEBSD_COMPAT_RMAN_H >> +#define _FREEBSD_COMPAT_RMAN_H >> + >> +#include <stdint.h> >> + >> +typedef uint32_t bus_size_t; >> + >> +/* >> + * Access methods for bus resources and address space. >> + */ >> +typedef int bus_space_tag_t; >> +typedef uintptr_t bus_space_handle_t; >> + >> +#define RF_ALLOCATED 0x0001 /* resource has been reserved */ >> +#define RF_ACTIVE 0x0002 /* resource allocation has been >> activated */ >> +#define RF_SHAREABLE 0x0004 /* resource permits >> contemporaneous sharing */ >> +#define RF_SPARE1 0x0008 >> +#define RF_SPARE2 0x0010 >> +#define RF_FIRSTSHARE 0x0020 /* first in sharing list */ >> +#define RF_PREFETCHABLE 0x0040 /* resource is prefetchable */ >> +#define RF_OPTIONAL 0x0080 /* for bus_alloc_resources() */ >> +#define RF_UNMAPPED 0x0100 /* don't map resource when >> activating */ >> + >> +struct resource { >> + bus_space_tag_t r_bustag; >> + bus_space_handle_t r_bushandle;/* bus_space handle */ >> +}; >> + >> +#endif /* _FREEBSD_COMPAT_RMAN_H */ >> diff --git a/bsps/shared/rtems/freebsd-compat/bus.c >> b/bsps/shared/rtems/freebsd-compat/bus.c >> new file mode 100644 >> index 0000000000..7ce91b80e6 >> --- /dev/null >> +++ b/bsps/shared/rtems/freebsd-compat/bus.c >> @@ -0,0 +1,119 @@ >> +/* SPDX-License-Identifier: BSD-2-Clause */ >> + >> +/** >> + * @file >> + * >> + * @ingroup LIBFREEBSD >> + * >> + * @brief >> + */ >> + >> +/* >> + * Copyright (C) <2020> Niteesh Babu <niteesh...@gmail.com> >> + * >> + * Redistribution and use in source and binary forms, with or without >> + * modification, are permitted provided that the following conditions >> + * are met: >> + * 1. Redistributions of source code must retain the above copyright >> + * notice, this list of conditions and the following disclaimer. >> + * 2. Redistributions in binary form must reproduce the above copyright >> + * notice, this list of conditions and the following disclaimer in the >> + * documentation and/or other materials provided with the >> distribution. >> + * >> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS >> "AS IS" >> + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >> THE >> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >> PURPOSE >> + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS >> BE >> + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >> + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >> + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR >> BUSINESS >> + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER >> IN >> + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR >> OTHERWISE) >> + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED >> OF THE >> + * POSSIBILITY OF SUCH DAMAGE. >> + */ >> + >> +#include <rtems/bspIo.h> >> +#include <libfdt.h> >> +#include <stdlib.h> >> +#include <string.h> >> +#include <assert.h> >> +#include <errno.h> >> +#include <ofw/ofw.h> >> +#include <rtems/freebsd-compat/bus.h> >> +#include <rtems/freebsd-compat/resource.h> >> + >> +typedef unsigned int u_int; >> + >> +/** >> + * @brief Return the device's softc field >> + * >> + * The softc is allocated and zeroed when a driver is attached, based >> + * on the size field of the driver. >> + */ >> +void * >> +device_get_softc(device_t dev) >> +{ >> + >> + return (dev->softc); >> +} >> + >> +bus_space_handle_t >> +rman_get_bushandle(struct resource *r) >> +{ >> + >> + return (r->r_bushandle); >> +} >> + >> +bus_space_tag_t >> +rman_get_bustag(struct resource *r) >> +{ >> + >> + return (r->r_bustag); >> +} >> + >> +int >> +bus_alloc_resources(device_t dev, struct resource_spec *rs, >> + struct resource **res) >> +{ >> + int i; >> + >> + for (i = 0; rs[i].type != -1; i++) { >> + res[i] = bus_alloc_resource_any(dev, >> + rs[i].type, &rs[i].rid, rs[i].flags); >> + >> + if (res[i] == NULL) { >> + return (-1); >> + } >> + } >> + return (0); >> +} >> + >> +struct resource * >> +bus_alloc_resource(device_t dev, int type, int *rid, rman_res_t start, >> + rman_res_t end, rman_res_t count, u_int flags) >> +{ >> + int node; >> + int rv; >> + rtems_ofw_memory_area reg[*rid + 1]; >> + struct resource *res; >> + >> + node = dev->node; >> + >> + /* >> + * We only support querying register values from FDT. >> + */ >> + assert(type == SYS_RES_MEMORY); >> + >> + res = (struct resource *)malloc(sizeof(struct resource)); >> + >> + if (res != NULL) { >> + rv = rtems_ofw_get_reg(node, ®[0], sizeof(reg)); >> + if (rv == -1) { >> + return NULL; >> + } >> + res->r_bushandle = reg[*rid].start; >> + } >> + >> + return (res); >> +} >> diff --git a/spec/build/bsps/obj.yml b/spec/build/bsps/obj.yml >> index 0ea07fc83d..7cf12cd27a 100644 >> --- a/spec/build/bsps/obj.yml >> +++ b/spec/build/bsps/obj.yml >> @@ -109,4 +109,5 @@ source: >> - bsps/shared/start/bootcard.c >> - bsps/shared/rtems-version.c >> - bsps/shared/ofw/ofw.c >> +- bsps/shared/rtems/freebsd-compat/bus.c >> type: build >> -- >> 2.17.1 >> >> _______________________________________________ >> devel mailing list >> devel@rtems.org >> http://lists.rtems.org/mailman/listinfo/devel >> >
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel