[PATCH 02/11] powerpc: Add Microwatt device tree

Paul Mackerras paulus at ozlabs.org
Fri Jun 18 12:58:14 AEST 2021


On Thu, Jun 17, 2021 at 02:41:28PM +1000, Michael Ellerman wrote:
> Paul Mackerras <paulus at ozlabs.org> writes:
> >
> 
> Little bit of change log never hurts :)
> 
> > Signed-off-by: Paul Mackerras <paulus at ozlabs.org>
> > ---
> >  arch/powerpc/boot/dts/microwatt.dts | 105 ++++++++++++++++++++++++++++
> >  1 file changed, 105 insertions(+)
> >  create mode 100644 arch/powerpc/boot/dts/microwatt.dts
> >
> > diff --git a/arch/powerpc/boot/dts/microwatt.dts b/arch/powerpc/boot/dts/microwatt.dts
> > new file mode 100644
> > index 000000000000..9b2e64da9432
> > --- /dev/null
> > +++ b/arch/powerpc/boot/dts/microwatt.dts
> > @@ -0,0 +1,105 @@
> > +/dts-v1/;
> > +
> > +/ {
> > +	#size-cells = <0x02>;
> > +	#address-cells = <0x02>;
> > +	model-name = "microwatt";
> > +	compatible = "microwatt-soc";
> > +
> > +	reserved-memory {
> > +		#size-cells = <0x02>;
> > +		#address-cells = <0x02>;
> > +		ranges;
> > +	};
> > +
> > +	memory at 0 {
> > +		device_type = "memory";
> > +		reg = <0x00000000 0x00000000 0x00000000 0x10000000>;
> > +	};
> > +
> > +	cpus {
> > +		#size-cells = <0x00>;
> > +		#address-cells = <0x01>;
> > +
> > +		ibm,powerpc-cpu-features {
> > +			display-name = "Microwatt";
> > +			isa = <3000>;
> > +			device_type = "cpu-features";
> > +			compatible = "ibm,powerpc-cpu-features";
> > +
> > +			mmu-radix {
> > +				isa = <3000>;
> > +				usable-privilege = <2>;
> 
> skiboot says 6?

That's for a machine with hypervisor mode - if I make it 6 here, then
the kernel prints a message about "HV feature passed to guest" and
then another about "missing dependency" and ends up not enabling the
feature.

Note that microwatt usually has MSR[HV] = 0 (you can set it to 1 but
it doesn't do anything).  Arguably it should force it to 1 always, but
if I do that, then the kernel starts trying to execute hrfid
instructions, which microwatt doesn't have (for example in
masked_Hinterrupt).

> > +				os-support = <0x00>;
> > +			};
> > +
> > +			little-endian {
> > +				isa = <0>;
> 
> I guess you just copied that from skiboot.
> 
> The binding says it's required, but AFAICS the kernel doesn't use it.
>
> And isa = 0 mean ISA_BASE, according to the skiboot source.

I changed it to 2050 since true little-endian mode was introduced for
POWER6.

> > +		PowerPC,Microwatt at 0 {
> > +			i-cache-sets = <2>;
> > +			ibm,dec-bits = <64>;
> > +			reservation-granule-size = <64>;
> 
> Never seen that one before.

It's in PAPR+ (D.6.1.4, CPU Node Properties).

> > +			clock-frequency = <100000000>;
> > +			timebase-frequency = <100000000>;
> 
> Those seem quite high?

No, 100MHz is correct.

> > +			i-tlb-sets = <1>;
> > +			ibm,ppc-interrupt-server#s = <0>;
> > +			i-cache-block-size = <64>;
> > +			d-cache-block-size = <64>;
> 
> The kernel reads those, but also hard codes 128 in places.

Interesting, because it all seems to work.  I assume the critical
thing is doing the right dcbz's.

> See L1_CACHE_BYTES.
> 
> > +			ibm,pa-features = [40 00 c2 27 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 80 00 80 00 00 00 80 00 80 00 00 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00];
> 
> Do you need that?
> 
> You shouldn't, if we've done things right with the cpu-features support.

Turns out I don't need it.

> > +			d-cache-sets = <2>;
> > +			ibm,pir = <0x3c>;
> 
> Needed?

Nope.

> > +			i-tlb-size = <64>;
> > +			cpu-version = <0x990000>;
> > +			status = "okay";
> > +			i-cache-size = <0x1000>;
> > +			ibm,processor-radix-AP-encodings = <0x0c 0xa0000010 0x20000015 0x4000001e>;
> > +			tlb-size = <0>;
> > +			tlb-sets = <0>;
> 
> Does the kernel use those? I can't find it.
> 
> > +			device_type = "cpu";
> > +			d-tlb-size = <128>;
> > +			d-tlb-sets = <2>;
> > +			reg = <0>;
> > +			general-purpose;
> > +			64-bit;
> > +			d-cache-size = <0x1000>;
> > +			ibm,chip-id = <0x00>;
> > +		};
> > +	};
> > +
> > +	chosen {
> > +		bootargs = "";
> > +		ibm,architecture-vec-5 = [19 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 40];
> 
> Do you need that?
> 
> I assume you run with MSR[HV] = 1 (you don't say anywhere), in which
> case we never look at that property.

I do need that given we're running with MSR[HV] = 0; without that the
kernel assumes HPT mode.

Paul.


More information about the Linuxppc-dev mailing list