Looks good.

Will hold off on an official review until I can test the series.

Regards,
Daniel

Gavin Shan <gws...@linux.vnet.ibm.com> writes:

> As we track M32 segment consumption, this introduces an array to
> the PHB to track the mapping between M64 segment and PE number.
> The information is going to be used to find M64 segment from the
> PE number during PCI unplugging time in subsequent patches.
>
> Signed-off-by: Gavin Shan <gws...@linux.vnet.ibm.com>
> ---
>  arch/powerpc/platforms/powernv/pci-ioda.c | 10 ++++++++--
>  arch/powerpc/platforms/powernv/pci.h      |  3 ++-
>  2 files changed, 10 insertions(+), 3 deletions(-)
>
> diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c 
> b/arch/powerpc/platforms/powernv/pci-ioda.c
> index 4ab93f8..76ce694 100644
> --- a/arch/powerpc/platforms/powernv/pci-ioda.c
> +++ b/arch/powerpc/platforms/powernv/pci-ioda.c
> @@ -315,6 +315,7 @@ static int pnv_ioda2_pick_m64_pe(struct pci_bus *bus, 
> bool all)
>               phb->ioda.total_pe_num) {
>               pe = &phb->ioda.pe_array[i];
>  
> +             phb->ioda.m64_segmap[pe->pe_number] = pe->pe_number;
>               if (!master_pe) {
>                       pe->flags |= PNV_IODA_PE_MASTER;
>                       INIT_LIST_HEAD(&pe->slaves);
> @@ -3018,7 +3019,7 @@ static void __init pnv_pci_init_ioda_phb(struct 
> device_node *np,
>  {
>       struct pci_controller *hose;
>       struct pnv_phb *phb;
> -     unsigned long size, m32map_off, pemap_off, iomap_off = 0;
> +     unsigned long size, m64map_off, m32map_off, pemap_off, iomap_off = 0;
>       const __be64 *prop64;
>       const __be32 *prop32;
>       int i, len;
> @@ -3103,6 +3104,8 @@ static void __init pnv_pci_init_ioda_phb(struct 
> device_node *np,
>  
>       /* Allocate aux data & arrays. We don't have IO ports on PHB3 */
>       size = _ALIGN_UP(phb->ioda.total_pe_num / 8, sizeof(unsigned long));
> +     m64map_off = size;
> +     size += phb->ioda.total_pe_num * sizeof(phb->ioda.m64_segmap[0]);
>       m32map_off = size;
>       size += phb->ioda.total_pe_num * sizeof(phb->ioda.m32_segmap[0]);
>       if (phb->type == PNV_PHB_IODA1) {
> @@ -3113,9 +3116,12 @@ static void __init pnv_pci_init_ioda_phb(struct 
> device_node *np,
>       size += phb->ioda.total_pe_num * sizeof(struct pnv_ioda_pe);
>       aux = memblock_virt_alloc(size, 0);
>       phb->ioda.pe_alloc = aux;
> +     phb->ioda.m64_segmap = aux + m64map_off;
>       phb->ioda.m32_segmap = aux + m32map_off;
> -     for (i = 0; i < phb->ioda.total_pe_num; i++)
> +     for (i = 0; i < phb->ioda.total_pe_num; i++) {
> +             phb->ioda.m64_segmap[i] = IODA_INVALID_PE;
>               phb->ioda.m32_segmap[i] = IODA_INVALID_PE;
> +     }
>       if (phb->type == PNV_PHB_IODA1) {
>               phb->ioda.io_segmap = aux + iomap_off;
>               for (i = 0; i < phb->ioda.total_pe_num; i++)
> diff --git a/arch/powerpc/platforms/powernv/pci.h 
> b/arch/powerpc/platforms/powernv/pci.h
> index 2e01edd..671fd13 100644
> --- a/arch/powerpc/platforms/powernv/pci.h
> +++ b/arch/powerpc/platforms/powernv/pci.h
> @@ -147,7 +147,8 @@ struct pnv_phb {
>                       unsigned long           *pe_alloc;
>                       struct pnv_ioda_pe      *pe_array;
>  
> -                     /* M32 & IO segment maps */
> +                     /* M64/M32/IO segment maps */
> +                     int                     *m64_segmap;
>                       int                     *m32_segmap;
>                       int                     *io_segmap;
>  
> -- 
> 2.1.0
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-pci" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

Attachment: signature.asc
Description: PGP signature

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to