On Mon, Jun 14, 2021 at 10:09:58PM +0530, Aneesh Kumar K.V wrote:
> Also make related code cleanup that will allow adding FORM2_AFFINITY in
> later patches. No functional change in this patch.
> 
> Signed-off-by: Aneesh Kumar K.V <aneesh.ku...@linux.ibm.com>

Reviewed-by: David Gibson <da...@gibson.dropbear.id.au>

> ---
>  arch/powerpc/include/asm/firmware.h       |  4 +--
>  arch/powerpc/include/asm/prom.h           |  2 +-
>  arch/powerpc/kernel/prom_init.c           |  2 +-
>  arch/powerpc/mm/numa.c                    | 35 ++++++++++++++---------
>  arch/powerpc/platforms/pseries/firmware.c |  2 +-
>  5 files changed, 26 insertions(+), 19 deletions(-)
> 
> diff --git a/arch/powerpc/include/asm/firmware.h 
> b/arch/powerpc/include/asm/firmware.h
> index 7604673787d6..60b631161360 100644
> --- a/arch/powerpc/include/asm/firmware.h
> +++ b/arch/powerpc/include/asm/firmware.h
> @@ -44,7 +44,7 @@
>  #define FW_FEATURE_OPAL              ASM_CONST(0x0000000010000000)
>  #define FW_FEATURE_SET_MODE  ASM_CONST(0x0000000040000000)
>  #define FW_FEATURE_BEST_ENERGY       ASM_CONST(0x0000000080000000)
> -#define FW_FEATURE_TYPE1_AFFINITY ASM_CONST(0x0000000100000000)
> +#define FW_FEATURE_FORM1_AFFINITY ASM_CONST(0x0000000100000000)
>  #define FW_FEATURE_PRRN              ASM_CONST(0x0000000200000000)
>  #define FW_FEATURE_DRMEM_V2  ASM_CONST(0x0000000400000000)
>  #define FW_FEATURE_DRC_INFO  ASM_CONST(0x0000000800000000)
> @@ -69,7 +69,7 @@ enum {
>               FW_FEATURE_SPLPAR | FW_FEATURE_LPAR |
>               FW_FEATURE_CMO | FW_FEATURE_VPHN | FW_FEATURE_XCMO |
>               FW_FEATURE_SET_MODE | FW_FEATURE_BEST_ENERGY |
> -             FW_FEATURE_TYPE1_AFFINITY | FW_FEATURE_PRRN |
> +             FW_FEATURE_FORM1_AFFINITY | FW_FEATURE_PRRN |
>               FW_FEATURE_HPT_RESIZE | FW_FEATURE_DRMEM_V2 |
>               FW_FEATURE_DRC_INFO | FW_FEATURE_BLOCK_REMOVE |
>               FW_FEATURE_PAPR_SCM | FW_FEATURE_ULTRAVISOR |
> diff --git a/arch/powerpc/include/asm/prom.h b/arch/powerpc/include/asm/prom.h
> index 324a13351749..df9fec9d232c 100644
> --- a/arch/powerpc/include/asm/prom.h
> +++ b/arch/powerpc/include/asm/prom.h
> @@ -147,7 +147,7 @@ extern int of_read_drc_info_cell(struct property **prop,
>  #define OV5_MSI                      0x0201  /* PCIe/MSI support */
>  #define OV5_CMO                      0x0480  /* Cooperative Memory 
> Overcommitment */
>  #define OV5_XCMO             0x0440  /* Page Coalescing */
> -#define OV5_TYPE1_AFFINITY   0x0580  /* Type 1 NUMA affinity */
> +#define OV5_FORM1_AFFINITY   0x0580  /* FORM1 NUMA affinity */
>  #define OV5_PRRN             0x0540  /* Platform Resource Reassignment */
>  #define OV5_HP_EVT           0x0604  /* Hot Plug Event support */
>  #define OV5_RESIZE_HPT               0x0601  /* Hash Page Table resizing */
> diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
> index 41ed7e33d897..64b9593038a7 100644
> --- a/arch/powerpc/kernel/prom_init.c
> +++ b/arch/powerpc/kernel/prom_init.c
> @@ -1070,7 +1070,7 @@ static const struct ibm_arch_vec 
> ibm_architecture_vec_template __initconst = {
>  #else
>               0,
>  #endif
> -             .associativity = OV5_FEAT(OV5_TYPE1_AFFINITY) | 
> OV5_FEAT(OV5_PRRN),
> +             .associativity = OV5_FEAT(OV5_FORM1_AFFINITY) | 
> OV5_FEAT(OV5_PRRN),
>               .bin_opts = OV5_FEAT(OV5_RESIZE_HPT) | OV5_FEAT(OV5_HP_EVT),
>               .micro_checkpoint = 0,
>               .reserved0 = 0,
> diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c
> index 5941da201fa3..192067991f8a 100644
> --- a/arch/powerpc/mm/numa.c
> +++ b/arch/powerpc/mm/numa.c
> @@ -53,7 +53,10 @@ EXPORT_SYMBOL(node_data);
>  
>  static int primary_domain_index;
>  static int n_mem_addr_cells, n_mem_size_cells;
> -static int form1_affinity;
> +
> +#define FORM0_AFFINITY 0
> +#define FORM1_AFFINITY 1
> +static int affinity_form;
>  
>  #define MAX_DISTANCE_REF_POINTS 4
>  static int max_domain_index;
> @@ -190,7 +193,7 @@ int __node_distance(int a, int b)
>       int i;
>       int distance = LOCAL_DISTANCE;
>  
> -     if (!form1_affinity)
> +     if (affinity_form == FORM0_AFFINITY)
>               return ((a == b) ? LOCAL_DISTANCE : REMOTE_DISTANCE);
>  
>       for (i = 0; i < max_domain_index; i++) {
> @@ -210,7 +213,7 @@ static void initialize_distance_lookup_table(int nid,
>  {
>       int i;
>  
> -     if (!form1_affinity)
> +     if (affinity_form != FORM1_AFFINITY)
>               return;
>  
>       for (i = 0; i < max_domain_index; i++) {
> @@ -289,6 +292,17 @@ static int __init find_primary_domain_index(void)
>       int index;
>       struct device_node *root;
>  
> +     /*
> +      * Check for which form of affinity.
> +      */
> +     if (firmware_has_feature(FW_FEATURE_OPAL)) {
> +             affinity_form = FORM1_AFFINITY;
> +     } else if (firmware_has_feature(FW_FEATURE_FORM1_AFFINITY)) {
> +             dbg("Using form 1 affinity\n");
> +             affinity_form = FORM1_AFFINITY;
> +     } else
> +             affinity_form = FORM0_AFFINITY;
> +
>       if (firmware_has_feature(FW_FEATURE_OPAL))
>               root = of_find_node_by_path("/ibm,opal");
>       else
> @@ -318,23 +332,16 @@ static int __init find_primary_domain_index(void)
>       }
>  
>       max_domain_index /= sizeof(int);
> -
> -     if (firmware_has_feature(FW_FEATURE_OPAL) ||
> -         firmware_has_feature(FW_FEATURE_TYPE1_AFFINITY)) {
> -             dbg("Using form 1 affinity\n");
> -             form1_affinity = 1;
> -     }
> -
> -     if (form1_affinity) {
> -             index = of_read_number(distance_ref_points, 1);
> -     } else {
> +     if (affinity_form == FORM0_AFFINITY) {
>               if (max_domain_index < 2) {
>                       printk(KERN_WARNING "NUMA: "
> -                             "short ibm,associativity-reference-points\n");
> +                            "short ibm,associativity-reference-points\n");
>                       goto err;
>               }
>  
>               index = of_read_number(&distance_ref_points[1], 1);
> +     } else {
> +             index = of_read_number(distance_ref_points, 1);
>       }
>  
>       /*
> diff --git a/arch/powerpc/platforms/pseries/firmware.c 
> b/arch/powerpc/platforms/pseries/firmware.c
> index 4c7b7f5a2ebc..5d4c2bc20bba 100644
> --- a/arch/powerpc/platforms/pseries/firmware.c
> +++ b/arch/powerpc/platforms/pseries/firmware.c
> @@ -119,7 +119,7 @@ struct vec5_fw_feature {
>  
>  static __initdata struct vec5_fw_feature
>  vec5_fw_features_table[] = {
> -     {FW_FEATURE_TYPE1_AFFINITY,     OV5_TYPE1_AFFINITY},
> +     {FW_FEATURE_FORM1_AFFINITY,     OV5_FORM1_AFFINITY},
>       {FW_FEATURE_PRRN,               OV5_PRRN},
>       {FW_FEATURE_DRMEM_V2,           OV5_DRMEM_V2},
>       {FW_FEATURE_DRC_INFO,           OV5_DRC_INFO},

-- 
David Gibson                    | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
                                | _way_ _around_!
http://www.ozlabs.org/~dgibson

Attachment: signature.asc
Description: PGP signature

Reply via email to