[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