[Skiboot] [PATCH 1/2] hw/phys_map: Use raw chip IDs
Michael Neuling
mikey at neuling.org
Tue May 16 21:01:53 AEST 2017
On Tue, 2017-05-16 at 19:03 +1000, Oliver O'Halloran wrote:
> We need to be able to query the BAR mapping from the HDAT parser which
> is run prior the the proc_chip structures being initialised. Define
> a wrapper for the existing usages and provide a low-level function
> that allows the map the be queried with the global hardware chip ID
> itself.
We could just move the main api over to use gcid.... a few of the callers need
to do it anyway, like the fsp code does this...
phys_map_get(get_chip(chip_id), LPC_BUS, 0, &lpcm_base, NULL);
Mikey
>
> Cc: Michael Neuling <mikey at neuling.org>
> Signed-off-by: Oliver O'Halloran <oohall at gmail.com>
> ---
> hw/phys-map.c | 9 +++++----
> include/phys-map.h | 11 ++++++++++-
> 2 files changed, 15 insertions(+), 5 deletions(-)
>
> diff --git a/hw/phys-map.c b/hw/phys-map.c
> index 768f464f4682..65c440178283 100644
> --- a/hw/phys-map.c
> +++ b/hw/phys-map.c
> @@ -134,10 +134,11 @@ static inline bool phys_map_entry_null(const struct
> phys_map_entry *e)
> return false;
> }
>
> +
> /* This crashes skiboot on error as any bad calls here are almost
> * certainly a developer error
> */
> -void phys_map_get(struct proc_chip *chip, enum phys_map_type type,
> +void __phys_map_get(uint64_t gcid, enum phys_map_type type,
> int index, uint64_t *addr, uint64_t *size) {
> const struct phys_map_entry *e;
> uint64_t a;
> @@ -162,16 +163,16 @@ void phys_map_get(struct proc_chip *chip, enum
> phys_map_type type,
> break;
> }
> a = e->addr;
> - a += (uint64_t)chip->id << phys_map->chip_select_shift;
> + a += gcid << phys_map->chip_select_shift;
>
> if (addr)
> *addr = a;
> if (size)
> *size = e->size;
>
> - prlog(PR_TRACE, "Assigning BAR [%x] type:%02i index:%x "
> + prlog(PR_TRACE, "Assigning BAR [%"PRIx64"] type:%02i index:%x "
> "0x%016"PRIx64" for 0x%016"PRIx64"\n",
> - chip->id, type, index, a, e->size);
> + gcid, type, index, a, e->size);
>
> return;
>
> diff --git a/include/phys-map.h b/include/phys-map.h
> index a0124322a608..5738a5456900 100644
> --- a/include/phys-map.h
> +++ b/include/phys-map.h
> @@ -53,9 +53,18 @@ enum phys_map_type {
> RESV
> };
>
> -extern void phys_map_get(struct proc_chip *chip, enum phys_map_type type,
> +/*
> + * Use this to query the phys map before we've done per-cpu init.
> + */
> +extern void __phys_map_get(uint64_t gcid, enum phys_map_type type,
> int index, uint64_t *addr, uint64_t *size);
>
> +static inline void phys_map_get(struct proc_chip *chip, enum phys_map_type
> type,
> + int index, uint64_t *addr, uint64_t *size)
> +{
> + __phys_map_get(chip->id, type, index, addr, size);
> +}
> +
> extern void phys_map_init(void);
>
> #endif /* __PHYS_MAP_H */
More information about the Skiboot
mailing list