[Skiboot] [PATCH 3/8] psi: On p9, create an interrupt-map for routing PSI interrupts
Joel Stanley
joel at jms.id.au
Sun Jul 3 20:17:07 AEST 2016
On Sun, Jul 3, 2016 at 10:20 AM, Benjamin Herrenschmidt
<benh at kernel.crashing.org> wrote:
> This will provide the global IRQ numbers for all 16 PSI inputs (though
> we don't really care about 0 here). We can then express them in the
> device-tree as relative to the PSI bridge. Among others, that allows
> us to express the external interrupt and the LPC interrupt using a
> fixed numbering scheme.
>
> The example device-tree is updated to route them all to the LPC0
> input which corresponds to what the LPC code does at the moment.
>
> Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
> ---
> doc/device-tree/examples/power9-phb4.dts | 28 +++++++++++++++++++++++++++-
> hw/psi.c | 14 ++++++++++++++
> 2 files changed, 41 insertions(+), 1 deletion(-)
>
> diff --git a/doc/device-tree/examples/power9-phb4.dts b/doc/device-tree/examples/power9-phb4.dts
> index ba5009f..906ea31 100644
> --- a/doc/device-tree/examples/power9-phb4.dts
> +++ b/doc/device-tree/examples/power9-phb4.dts
> @@ -154,9 +154,18 @@
> compatible = "ibm,power9-xive-x";
> };
>
> - psihb at 5012900 {
> + PSI_X0 : psihb at 5012900 {
> reg = <0x5012900 0x100>;
> compatible = "ibm,power9-psihb-x", "ibm,psihb-x";
> +
> + /* This acts as an interrupt remapper for the 16
> + * interrupts coming into the PSI HB.
> + * OPAL will generate the corresponding interrupt-map
> + * property with the final XIVE numbers
> + */
> + #interrupt-cells = <1>;
> + #address-cells = <0>;
> + #interrupt-map-mask = < 0xff >;
> };
> };
>
> @@ -186,6 +195,23 @@
> ranges = < 3 0 0xf0000000 0x10000000 /* FW space */
> 0 0 0xe0000000 0x10000000 /* MEM space */
> 1 0 0xd0010000 0x00010000 /* IO space */ >;
> +
> + /* We currently only support level interrupts on the LPC,
> + * we use 1 cell.
> + */
> + #interrupt-cells = <1>;
> +
> + /* Route the LPC interrupts to one of the 4 supported
> + * PSI interrupt inputs [7...10].
> + */
> + interrupt-map = < 0 0 4 &PSI_X0 7
> + 0 0 10 &PSI_X0 7>;
> + interrupt-map-mask = < 0 0 0xff >;
> +
> + /*
> + * Devices on the LPC bus go here
> + */
> +
> serial at i3f8 {
> compatible = "ns16550";
> reg = < 1 0x3f8 0x10 >;
> diff --git a/hw/psi.c b/hw/psi.c
> index 16f88c2..6d9c2ad 100644
> --- a/hw/psi.c
> +++ b/hw/psi.c
> @@ -860,6 +860,19 @@ static void psi_activate_phb(struct psi *psi)
> #endif
> }
>
> +static void psi_create_p9_int_map(struct psi *psi, struct dt_node *np)
> +{
> + uint32_t map[P9_PSI_NUM_IRQS][3];
> + int i;
> +
> + for (i = 0; i < P9_PSI_NUM_IRQS; i++) {
> + map[i][0] = i;
> + map[i][1] = psi->interrupt + i;
> + map[i][0] = 1;
This doesn't look correct.
> + }
> + dt_add_property(np, "interrupt-map", map, sizeof(map));
> +}
> +
> static void psi_create_mm_dtnode(struct psi *psi)
> {
> struct dt_node *np;
> @@ -883,6 +896,7 @@ static void psi_create_mm_dtnode(struct psi *psi)
> case proc_gen_p9:
> dt_add_property_strings(np, "compatible", "ibm,psi",
> "ibm,power9-psi");
> + psi_create_p9_int_map(psi, np);
> break;
> default:
> dt_add_property_strings(np, "compatible", "ibm,psi");
> --
> 2.7.4
>
> _______________________________________________
> Skiboot mailing list
> Skiboot at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/skiboot
More information about the Skiboot
mailing list