> Date: Tue, 4 Oct 2016 10:59:26 +0200
> From: Patrick Wildt <[email protected]>
>
> Hi,
>
> continuing where we left off before the hackathon I would like to add
> a diff to the 64-bit bus_addr_t discussion. This diff does not
> increase the size of bus_addr_t. Instead it changes the argument
> of the function pointer stored in the bus tag from bus_addr_t to
> uint64_t. This is an arm only change and will not affect any other
> architecture.
>
> This is needed to pass virtual addresses retrieved from the device tree
> between the different simple-busses in the tree topology. In the end
> every single hardware that we want to speak to is in the 32-bit range,
> not outside. This means the final bus_space_map(9) will work on a
> 32-bit value.
>
> Opinions? ok?
I think this is an acceptable hack.
ok kettenis@
> diff --git sys/arch/arm/armv7/armv7_space.c sys/arch/arm/armv7/armv7_space.c
> index 4f6c1e0..fbd558a 100644
> --- sys/arch/arm/armv7/armv7_space.c
> +++ sys/arch/arm/armv7/armv7_space.c
> @@ -165,7 +165,7 @@ struct bus_space armv7_bs_tag = {
> };
>
> int
> -armv7_bs_map(void *t, bus_addr_t bpa, bus_size_t size,
> +armv7_bs_map(void *t, uint64_t bpa, bus_size_t size,
> int flags, bus_space_handle_t *bshp)
> {
> u_long startpa, endpa, pa;
> diff --git sys/arch/arm/include/bus.h sys/arch/arm/include/bus.h
> index f00c897..c108359 100644
> --- sys/arch/arm/include/bus.h
> +++ sys/arch/arm/include/bus.h
> @@ -93,7 +93,7 @@ struct bus_space {
> void *bs_cookie;
>
> /* mapping/unmapping */
> - int (*bs_map) (void *, bus_addr_t, bus_size_t,
> + int (*bs_map) (void *, uint64_t, bus_size_t,
> int, bus_space_handle_t *);
> void (*bs_unmap) (void *, bus_space_handle_t,
> bus_size_t);
> @@ -373,7 +373,7 @@ struct bus_space {
> */
>
> #define bs_map_proto(f)
> \
> -int __bs_c(f,_bs_map) (void *t, bus_addr_t addr, \
> +int __bs_c(f,_bs_map) (void *t, uint64_t addr, \
> bus_size_t size, int flags, bus_space_handle_t *bshp);
>
> #define bs_unmap_proto(f) \
> diff --git sys/arch/arm/simplebus/simplebus.c
> sys/arch/arm/simplebus/simplebus.c
> index d2f5bfe..325e149 100644
> --- sys/arch/arm/simplebus/simplebus.c
> +++ sys/arch/arm/simplebus/simplebus.c
> @@ -30,7 +30,7 @@ int simplebus_match(struct device *, void *, void *);
> void simplebus_attach(struct device *, struct device *, void *);
>
> void simplebus_attach_node(struct device *, int);
> -int simplebus_bs_map(void *, bus_addr_t, bus_size_t, int, bus_space_handle_t
> *);
> +int simplebus_bs_map(void *, uint64_t, bus_size_t, int, bus_space_handle_t
> *);
>
> struct simplebus_softc {
> struct device sc_dev;
> @@ -205,7 +205,7 @@ simplebus_attach_node(struct device *self, int node)
> * Translate memory address if needed.
> */
> int
> -simplebus_bs_map(void *t, bus_addr_t bpa, bus_size_t size,
> +simplebus_bs_map(void *t, uint64_t bpa, bus_size_t size,
> int flag, bus_space_handle_t *bshp)
> {
> struct simplebus_softc *sc = (struct simplebus_softc *)t;
> diff --git sys/arch/armv7/armv7/armv7_machdep.c
> sys/arch/armv7/armv7/armv7_machdep.c
> index e869c2c..839e45b 100644
> --- sys/arch/armv7/armv7/armv7_machdep.c
> +++ sys/arch/armv7/armv7/armv7_machdep.c
> @@ -199,7 +199,7 @@ int safepri = 0;
> /* Prototypes */
>
> char bootargs[MAX_BOOT_STRING];
> -int bootstrap_bs_map(void *, bus_addr_t, bus_size_t, int,
> +int bootstrap_bs_map(void *, uint64_t, bus_size_t, int,
> bus_space_handle_t *);
> void process_kernel_args(char *);
> void consinit(void);
> @@ -318,7 +318,7 @@ read_ttb(void)
> static vaddr_t section_free = 0xfd000000; /* XXX - huh */
>
> int
> -bootstrap_bs_map(void *t, bus_addr_t bpa, bus_size_t size,
> +bootstrap_bs_map(void *t, uint64_t bpa, bus_size_t size,
> int flags, bus_space_handle_t *bshp)
> {
> u_long startpa, pa, endpa;
> @@ -393,7 +393,7 @@ initarm(void *arg0, void *arg1, void *arg2, paddr_t
> loadaddr)
>
> /* early bus_space_map support */
> struct bus_space tmp_bs_tag;
> - int (*map_func_save)(void *, bus_addr_t, bus_size_t, int,
> + int (*map_func_save)(void *, uint64_t, bus_size_t, int,
> bus_space_handle_t *);
>
> if (arg0)
>
>