[Skiboot] [PATCH] dt: add ibm, tlbiel-congruence-classes-(hash|radix) for tlbiel IS!=0

Benjamin Herrenschmidt benh at kernel.crashing.org
Sat Apr 22 17:56:01 AEST 2017


On Sat, 2017-04-22 at 10:58 +1000, Nicholas Piggin wrote:
> > From Power ISA 3.0B, Chapter 5. Storage Control 1033, "The IS!=0 tlbiel
> 
> variants operate on a specified congruence class, requiring a software
> loop where tlbie operates on the entire TLB."

Overall ok, I would just have called it "tlb-sets-{hash|radix}" to
save characters ;-) Also because historically in the DT for cache and
TLB geometries we use the terminology "sets".

Cheers,
Ben.

> This adds a dt entry for the number of congruence classes that must be
> specified in order to operate on the entire TLB, when using the tlbiel
> instruction with IS != 0.
> 
> This property does not reflect the TLB geometry, only the tlbiel
> instruction behaviour.
> 
> > Signed-off-by: Nicholas Piggin <npiggin at gmail.com>
> ---
>  doc/device-tree.rst |  3 +++
>  hdata/cpu-common.c  | 15 +++++++++++++++
>  2 files changed, 18 insertions(+)
> 
> diff --git a/doc/device-tree.rst b/doc/device-tree.rst
> index fe527c65..838847ee 100644
> --- a/doc/device-tree.rst
> +++ b/doc/device-tree.rst
> @@ -181,6 +181,9 @@ Root node of device tree
> >  			/* SLB size, use as-is */
> >  			ibm,slb-size = <0x20>;
>  
> > +			/* TLB congruence classes for tlbiel IS != 0 */
> > +			ibm,tlbiel-congruence-classes-hash = <0x200>;
> +
> >  			/* VSX support, use as-is */
> >  			ibm,vmx = <0x2>;
>  
> diff --git a/hdata/cpu-common.c b/hdata/cpu-common.c
> index 9a05227f..8b540c01 100644
> --- a/hdata/cpu-common.c
> +++ b/hdata/cpu-common.c
> @@ -64,6 +64,8 @@ struct dt_node * add_core_common(struct dt_node *cpus,
> >  	       0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, /* 48 .. 55 */
> >  	       0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, /* 56 .. 63 */
> >  	};
> > +	int tlb_congruence_hash = 0;
> > +	int tlb_congruence_radix = 0;
>  
> >  	const uint8_t *pa_features;
> >  	size_t pa_features_size;
> @@ -84,11 +86,13 @@ struct dt_node * add_core_common(struct dt_node *cpus,
> >  		name = "PowerPC,POWER7";
> >  		pa_features = pa_features_p7;
> >  		pa_features_size = sizeof(pa_features_p7);
> > +		tlb_congruence_hash = 128;
> >  		break;
> >  	case PVR_TYPE_P7P:
> >  		name = "PowerPC,POWER7+";
> >  		pa_features = pa_features_p7p;
> >  		pa_features_size = sizeof(pa_features_p7p);
> > +		tlb_congruence_hash = 128;
> >  		break;
> >  	case PVR_TYPE_P8E:
> >  	case PVR_TYPE_P8:
> @@ -96,6 +100,7 @@ struct dt_node * add_core_common(struct dt_node *cpus,
> >  		name = "PowerPC,POWER8";
> >  		pa_features = pa_features_p8;
> >  		pa_features_size = sizeof(pa_features_p8);
> > +		tlb_congruence_hash = 512;
> >  		break;
> >  	case PVR_TYPE_P9:
> >  		name = "PowerPC,POWER9";
> @@ -106,6 +111,8 @@ struct dt_node * add_core_common(struct dt_node *cpus,
> >  			pa_features = pa_features_p9_dd2;
> >  			pa_features_size = sizeof(pa_features_p9_dd2);
> >  		}
> > +		tlb_congruence_hash = 256;
> > +		tlb_congruence_radix = 128;
> >  		break;
> >  	default:
> >  		name = "PowerPC,Unknown";
> @@ -147,6 +154,14 @@ struct dt_node * add_core_common(struct dt_node *cpus,
> >  				pa_features, pa_features_size);
> >  	}
> >  	dt_add_property_cells(cpu, "ibm,slb-size", 0x20);
> > +	if (tlb_congruence_hash) {
> > +		dt_add_property_cells(cpu, "ibm,tlbiel-congruence-classes-hash",
> > +						tlb_congruence_hash);
> > +	}
> > +	if (tlb_congruence_radix) {
> > +		dt_add_property_cells(cpu, "ibm,tlbiel-congruence-classes-radix",
> > +						tlb_congruence_radix);
> > +	}
>  
> >  	dt_add_property_cells(cpu, "ibm,vmx", 0x2);
> >  	dt_add_property_cells(cpu, "ibm,dfp", 0x2);


More information about the Skiboot mailing list