devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/2] Add Rockchip RK3588 GIC ITS support
@ 2023-04-18 14:21 Sebastian Reichel
  2023-04-18 14:21 ` [PATCH v4 1/2] irqchip/gic-v3: Add Rockchip 3588001 erratum workaround Sebastian Reichel
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Sebastian Reichel @ 2023-04-18 14:21 UTC (permalink / raw)
  To: Marc Zyngier, Heiko Stuebner
  Cc: Rob Herring, Krzysztof Kozlowski, Thomas Gleixner, Peng Fan,
	Robin Murphy, Peter Geis, XiaoDong Huang, Kever Yang,
	linux-rockchip, devicetree, linux-kernel, Sebastian Reichel,
	kernel

Hi,

This adds GIC ITS support to Rockchip RK3588, which is affected
by an integration issue effectively breaking shareability support.
PCIe2 support will follow in its own series.

Changelog:
 * Changes since PATCHv3
  - https://lore.kernel.org/lkml/20230417214035.101190-1-sebastian.reichel@collabora.com/
  - Add RB from AngeloGioacchino Del Regno
  - Update patch description
  - Update Kconfig description
  - rename flags from BROKEN_SHAREABILITY to FORCE_NON_SHAREABLE
 * Changes since PATCHv2
  - https://lore.kernel.org/lkml/20230417150038.51698-1-sebastian.reichel@collabora.com/
  - apply changes requested by Marc Zyngier
 * PATCHv1
  - https://lore.kernel.org/lkml/20230227151847.207922-1-lucas.tanure@collabora.com/
  - uses of_dma_is_coherent() instead of providing errata info from kernel
 * RFCv1
  - https://lore.kernel.org/lkml/20230310080518.78054-1-lucas.tanure@collabora.com/
  - uses 0x0201743b IIDR for quirk detection and misses errata #

Greetings,

-- Sebastian


Sebastian Reichel (2):
  irqchip/gic-v3: Add Rockchip 3588001 erratum workaround
  arm64: dts: rockchip: rk3588: add GIC ITS support

 Documentation/arm64/silicon-errata.rst    |  3 ++
 arch/arm64/Kconfig                        | 10 +++++++
 arch/arm64/boot/dts/rockchip/rk3588s.dtsi | 17 +++++++++++
 drivers/irqchip/irq-gic-v3-its.c          | 35 +++++++++++++++++++++++
 4 files changed, 65 insertions(+)

-- 
2.39.2


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v4 1/2] irqchip/gic-v3: Add Rockchip 3588001 erratum workaround
  2023-04-18 14:21 [PATCH v4 0/2] Add Rockchip RK3588 GIC ITS support Sebastian Reichel
@ 2023-04-18 14:21 ` Sebastian Reichel
  2023-04-18 14:21 ` [PATCH v4 2/2] arm64: dts: rockchip: rk3588: add GIC ITS support Sebastian Reichel
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Sebastian Reichel @ 2023-04-18 14:21 UTC (permalink / raw)
  To: Marc Zyngier, Heiko Stuebner
  Cc: Rob Herring, Krzysztof Kozlowski, Thomas Gleixner, Peng Fan,
	Robin Murphy, Peter Geis, XiaoDong Huang, Kever Yang,
	linux-rockchip, devicetree, linux-kernel, Sebastian Reichel,
	kernel

Rockchip RK3588/RK3588s GIC600 integration does not support the
sharability feature. Rockchip assigned Erratum ID #3588001 for this
issue.

Note, that the 0x0201743b ID is not Rockchip specific and thus
there is an extra of_machine_is_compatible() check.

The flags are named FORCE_NON_SHAREABLE to be vendor agnostic,
since apparently similar integration design errors exist in other
platforms and they can reuse the same flag.

Co-developed-by: XiaoDong Huang <derrick.huang@rock-chips.com>
Signed-off-by: XiaoDong Huang <derrick.huang@rock-chips.com>
Co-developed-by: Kever Yang <kever.yang@rock-chips.com>
Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
Co-developed-by: Lucas Tanure <lucas.tanure@collabora.com>
Signed-off-by: Lucas Tanure <lucas.tanure@collabora.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
---
 Documentation/arm64/silicon-errata.rst |  3 +++
 arch/arm64/Kconfig                     | 10 ++++++++
 drivers/irqchip/irq-gic-v3-its.c       | 35 ++++++++++++++++++++++++++
 3 files changed, 48 insertions(+)

diff --git a/Documentation/arm64/silicon-errata.rst b/Documentation/arm64/silicon-errata.rst
index ec5f889d7681..46d06ed3e4f4 100644
--- a/Documentation/arm64/silicon-errata.rst
+++ b/Documentation/arm64/silicon-errata.rst
@@ -205,6 +205,9 @@ stable kernels.
 +----------------+-----------------+-----------------+-----------------------------+
 | Qualcomm Tech. | Kryo4xx Gold    | N/A             | ARM64_ERRATUM_1286807       |
 +----------------+-----------------+-----------------+-----------------------------+
++----------------+-----------------+-----------------+-----------------------------+
+| Rockchip       | RK3588          | #3588001        | ROCKCHIP_ERRATUM_3588001    |
++----------------+-----------------+-----------------+-----------------------------+
 
 +----------------+-----------------+-----------------+-----------------------------+
 | Fujitsu        | A64FX           | E#010001        | FUJITSU_ERRATUM_010001      |
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index 1023e896d46b..02789215d251 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -1150,6 +1150,16 @@ config NVIDIA_CARMEL_CNP_ERRATUM
 
 	  If unsure, say Y.
 
+config ROCKCHIP_ERRATUM_3588001
+	bool "Rockchip 3588001: GIC600 can not support shareability attributes"
+	default y
+	help
+	  The Rockchip RK3588 GIC600 SoC integration does not support ACE/ACE-lite.
+	  This means, that its sharability feature may not be used, even though it
+	  is supported by the IP itself.
+
+	  If unsure, say Y.
+
 config SOCIONEXT_SYNQUACER_PREITS
 	bool "Socionext Synquacer: Workaround for GICv3 pre-ITS"
 	default y
diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index 586271b8aa39..fa4641a5dfd8 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -42,9 +42,11 @@
 #define ITS_FLAGS_CMDQ_NEEDS_FLUSHING		(1ULL << 0)
 #define ITS_FLAGS_WORKAROUND_CAVIUM_22375	(1ULL << 1)
 #define ITS_FLAGS_WORKAROUND_CAVIUM_23144	(1ULL << 2)
+#define ITS_FLAGS_FORCE_NON_SHAREABLE		(1ULL << 3)
 
 #define RDIST_FLAGS_PROPBASE_NEEDS_FLUSHING	(1 << 0)
 #define RDIST_FLAGS_RD_TABLES_PREALLOCATED	(1 << 1)
+#define RDIST_FLAGS_FORCE_NON_SHAREABLE		(1 << 2)
 
 #define RD_LOCAL_LPI_ENABLED                    BIT(0)
 #define RD_LOCAL_PENDTABLE_PREALLOCATED         BIT(1)
@@ -2359,6 +2361,9 @@ static int its_setup_baser(struct its_node *its, struct its_baser *baser,
 	its_write_baser(its, baser, val);
 	tmp = baser->val;
 
+	if (its->flags & ITS_FLAGS_FORCE_NON_SHAREABLE)
+		tmp &= ~GITS_BASER_SHAREABILITY_MASK;
+
 	if ((val ^ tmp) & GITS_BASER_SHAREABILITY_MASK) {
 		/*
 		 * Shareability didn't stick. Just use
@@ -3096,6 +3101,9 @@ static void its_cpu_init_lpis(void)
 	gicr_write_propbaser(val, rbase + GICR_PROPBASER);
 	tmp = gicr_read_propbaser(rbase + GICR_PROPBASER);
 
+	if (gic_rdists->flags & RDIST_FLAGS_FORCE_NON_SHAREABLE)
+		tmp &= ~GICR_PROPBASER_SHAREABILITY_MASK;
+
 	if ((tmp ^ val) & GICR_PROPBASER_SHAREABILITY_MASK) {
 		if (!(tmp & GICR_PROPBASER_SHAREABILITY_MASK)) {
 			/*
@@ -3120,6 +3128,9 @@ static void its_cpu_init_lpis(void)
 	gicr_write_pendbaser(val, rbase + GICR_PENDBASER);
 	tmp = gicr_read_pendbaser(rbase + GICR_PENDBASER);
 
+	if (gic_rdists->flags & RDIST_FLAGS_FORCE_NON_SHAREABLE)
+		tmp &= ~GICR_PENDBASER_SHAREABILITY_MASK;
+
 	if (!(tmp & GICR_PENDBASER_SHAREABILITY_MASK)) {
 		/*
 		 * The HW reports non-shareable, we must remove the
@@ -4710,6 +4721,19 @@ static bool __maybe_unused its_enable_quirk_hip07_161600802(void *data)
 	return true;
 }
 
+static bool __maybe_unused its_enable_rk3588001(void *data)
+{
+	struct its_node *its = data;
+
+	if (!of_machine_is_compatible("rockchip,rk3588"))
+		return false;
+
+	its->flags |= ITS_FLAGS_FORCE_NON_SHAREABLE;
+	gic_rdists->flags |= RDIST_FLAGS_FORCE_NON_SHAREABLE;
+
+	return true;
+}
+
 static const struct gic_quirk its_quirks[] = {
 #ifdef CONFIG_CAVIUM_ERRATUM_22375
 	{
@@ -4755,6 +4779,14 @@ static const struct gic_quirk its_quirks[] = {
 		.mask	= 0xffffffff,
 		.init	= its_enable_quirk_hip07_161600802,
 	},
+#endif
+#ifdef CONFIG_ROCKCHIP_ERRATUM_3588001
+	{
+		.desc   = "ITS: Rockchip erratum RK3588001",
+		.iidr   = 0x0201743b,
+		.mask   = 0xffffffff,
+		.init   = its_enable_rk3588001,
+	},
 #endif
 	{
 	}
@@ -5096,6 +5128,9 @@ static int __init its_probe_one(struct resource *res,
 	gits_write_cbaser(baser, its->base + GITS_CBASER);
 	tmp = gits_read_cbaser(its->base + GITS_CBASER);
 
+	if (its->flags & ITS_FLAGS_FORCE_NON_SHAREABLE)
+		tmp &= ~GITS_CBASER_SHAREABILITY_MASK;
+
 	if ((tmp ^ baser) & GITS_CBASER_SHAREABILITY_MASK) {
 		if (!(tmp & GITS_CBASER_SHAREABILITY_MASK)) {
 			/*
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v4 2/2] arm64: dts: rockchip: rk3588: add GIC ITS support
  2023-04-18 14:21 [PATCH v4 0/2] Add Rockchip RK3588 GIC ITS support Sebastian Reichel
  2023-04-18 14:21 ` [PATCH v4 1/2] irqchip/gic-v3: Add Rockchip 3588001 erratum workaround Sebastian Reichel
@ 2023-04-18 14:21 ` Sebastian Reichel
  2023-04-18 16:35 ` [PATCH v4 0/2] Add Rockchip RK3588 " Marc Zyngier
  2023-04-19 15:56 ` (subset) " Heiko Stuebner
  3 siblings, 0 replies; 5+ messages in thread
From: Sebastian Reichel @ 2023-04-18 14:21 UTC (permalink / raw)
  To: Marc Zyngier, Heiko Stuebner
  Cc: Rob Herring, Krzysztof Kozlowski, Thomas Gleixner, Peng Fan,
	Robin Murphy, Peter Geis, XiaoDong Huang, Kever Yang,
	linux-rockchip, devicetree, linux-kernel, Sebastian Reichel,
	kernel

Add the two Interrupt Translation Service (ITS) IPs that are part of the
GIC-600. They are mainly required for PCIe Message Signalled Interrupts
(MSI).

Co-developed-by: Kever Yang <kever.yang@rock-chips.com>
Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
---
 arch/arm64/boot/dts/rockchip/rk3588s.dtsi | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/arch/arm64/boot/dts/rockchip/rk3588s.dtsi b/arch/arm64/boot/dts/rockchip/rk3588s.dtsi
index 2124c654f665..62204b96b0b4 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588s.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588s.dtsi
@@ -1741,7 +1741,24 @@ gic: interrupt-controller@fe600000 {
 		mbi-alias = <0x0 0xfe610000>;
 		mbi-ranges = <424 56>;
 		msi-controller;
+		ranges;
+		#address-cells = <2>;
 		#interrupt-cells = <4>;
+		#size-cells = <2>;
+
+		its0: msi-controller@fe640000 {
+			compatible = "arm,gic-v3-its";
+			msi-controller;
+			#msi-cells = <1>;
+			reg = <0x0 0xfe640000 0x0 0x20000>;
+		};
+
+		its1: msi-controller@fe660000 {
+			compatible = "arm,gic-v3-its";
+			msi-controller;
+			#msi-cells = <1>;
+			reg = <0x0 0xfe660000 0x0 0x20000>;
+		};
 
 		ppi-partitions {
 			ppi_partition0: interrupt-partition-0 {
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v4 0/2] Add Rockchip RK3588 GIC ITS support
  2023-04-18 14:21 [PATCH v4 0/2] Add Rockchip RK3588 GIC ITS support Sebastian Reichel
  2023-04-18 14:21 ` [PATCH v4 1/2] irqchip/gic-v3: Add Rockchip 3588001 erratum workaround Sebastian Reichel
  2023-04-18 14:21 ` [PATCH v4 2/2] arm64: dts: rockchip: rk3588: add GIC ITS support Sebastian Reichel
@ 2023-04-18 16:35 ` Marc Zyngier
  2023-04-19 15:56 ` (subset) " Heiko Stuebner
  3 siblings, 0 replies; 5+ messages in thread
From: Marc Zyngier @ 2023-04-18 16:35 UTC (permalink / raw)
  To: Sebastian Reichel
  Cc: Heiko Stuebner, Rob Herring, Krzysztof Kozlowski, Thomas Gleixner,
	Peng Fan, Robin Murphy, Peter Geis, XiaoDong Huang, Kever Yang,
	linux-rockchip, devicetree, linux-kernel, kernel

On Tue, 18 Apr 2023 15:21:07 +0100,
Sebastian Reichel <sebastian.reichel@collabora.com> wrote:
> 
> Hi,
> 
> This adds GIC ITS support to Rockchip RK3588, which is affected
> by an integration issue effectively breaking shareability support.
> PCIe2 support will follow in its own series.

I've applied the first patch to irqchip-next. Please route the second
one via the SoC tree.

Thanks,

	M.

-- 
Without deviation from the norm, progress is not possible.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: (subset) [PATCH v4 0/2] Add Rockchip RK3588 GIC ITS support
  2023-04-18 14:21 [PATCH v4 0/2] Add Rockchip RK3588 GIC ITS support Sebastian Reichel
                   ` (2 preceding siblings ...)
  2023-04-18 16:35 ` [PATCH v4 0/2] Add Rockchip RK3588 " Marc Zyngier
@ 2023-04-19 15:56 ` Heiko Stuebner
  3 siblings, 0 replies; 5+ messages in thread
From: Heiko Stuebner @ 2023-04-19 15:56 UTC (permalink / raw)
  To: Marc Zyngier, Sebastian Reichel
  Cc: Heiko Stuebner, XiaoDong Huang, Kever Yang, Krzysztof Kozlowski,
	Peng Fan, kernel, Rob Herring, Robin Murphy, linux-kernel,
	linux-rockchip, devicetree, Peter Geis, Thomas Gleixner

On Tue, 18 Apr 2023 16:21:07 +0200, Sebastian Reichel wrote:
> This adds GIC ITS support to Rockchip RK3588, which is affected
> by an integration issue effectively breaking shareability support.
> PCIe2 support will follow in its own series.
> 
> Changelog:
>  * Changes since PATCHv3
>   - https://lore.kernel.org/lkml/20230417214035.101190-1-sebastian.reichel@collabora.com/
>   - Add RB from AngeloGioacchino Del Regno
>   - Update patch description
>   - Update Kconfig description
>   - rename flags from BROKEN_SHAREABILITY to FORCE_NON_SHAREABLE
>  * Changes since PATCHv2
>   - https://lore.kernel.org/lkml/20230417150038.51698-1-sebastian.reichel@collabora.com/
>   - apply changes requested by Marc Zyngier
>  * PATCHv1
>   - https://lore.kernel.org/lkml/20230227151847.207922-1-lucas.tanure@collabora.com/
>   - uses of_dma_is_coherent() instead of providing errata info from kernel
>  * RFCv1
>   - https://lore.kernel.org/lkml/20230310080518.78054-1-lucas.tanure@collabora.com/
>   - uses 0x0201743b IIDR for quirk detection and misses errata #
> 
> [...]

Applied, thanks!

[2/2] arm64: dts: rockchip: rk3588: add GIC ITS support
      commit: 9325c119312ce7e228216c1070fbaaeb96f7afcf

Best regards,
-- 
Heiko Stuebner <heiko@sntech.de>

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-04-19 15:56 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-18 14:21 [PATCH v4 0/2] Add Rockchip RK3588 GIC ITS support Sebastian Reichel
2023-04-18 14:21 ` [PATCH v4 1/2] irqchip/gic-v3: Add Rockchip 3588001 erratum workaround Sebastian Reichel
2023-04-18 14:21 ` [PATCH v4 2/2] arm64: dts: rockchip: rk3588: add GIC ITS support Sebastian Reichel
2023-04-18 16:35 ` [PATCH v4 0/2] Add Rockchip RK3588 " Marc Zyngier
2023-04-19 15:56 ` (subset) " Heiko Stuebner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).