All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v1 1/3] x86: acpi: Introduce a stub to generate CSRT
@ 2019-07-14 16:20 Andy Shevchenko
  2019-07-14 16:20 ` [U-Boot] [PATCH v1 2/3] x86: acpi: Enable ACPI companion for Intel iDMA 32-bit Andy Shevchenko
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Andy Shevchenko @ 2019-07-14 16:20 UTC (permalink / raw)
  To: u-boot

Here is a stub function that generates an empty CSRT. If the target platform
provides acpi_fill_csrt() function, it will be used to populate the table.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 arch/x86/include/asm/acpi_table.h |  1 +
 arch/x86/lib/acpi_table.c         | 32 +++++++++++++++++++++++++++++++
 2 files changed, 33 insertions(+)

diff --git a/arch/x86/include/asm/acpi_table.h b/arch/x86/include/asm/acpi_table.h
index a70abd5d75..02aea127c1 100644
--- a/arch/x86/include/asm/acpi_table.h
+++ b/arch/x86/include/asm/acpi_table.h
@@ -401,6 +401,7 @@ u32 acpi_fill_madt(u32 current);
 int acpi_create_mcfg_mmconfig(struct acpi_mcfg_mmconfig *mmconfig, u32 base,
 			      u16 seg_nr, u8 start, u8 end);
 u32 acpi_fill_mcfg(u32 current);
+u32 acpi_fill_csrt(u32 current);
 void acpi_create_gnvs(struct acpi_global_nvs *gnvs);
 ulong write_acpi_tables(ulong start);
 
diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c
index e80e968b50..efc4edf801 100644
--- a/arch/x86/lib/acpi_table.c
+++ b/arch/x86/lib/acpi_table.c
@@ -337,6 +337,30 @@ static void acpi_create_mcfg(struct acpi_mcfg *mcfg)
 	header->checksum = table_compute_checksum((void *)mcfg, header->length);
 }
 
+__weak u32 acpi_fill_csrt(u32 current)
+{
+	return current;
+}
+
+static void acpi_create_csrt(struct acpi_csrt *csrt)
+{
+	struct acpi_table_header *header = &(csrt->header);
+	u32 current = (u32)csrt + sizeof(struct acpi_csrt);
+
+	memset((void *)csrt, 0, sizeof(struct acpi_csrt));
+
+	/* Fill out header fields */
+	acpi_fill_header(header, "CSRT");
+	header->length = sizeof(struct acpi_csrt);
+	header->revision = 0;
+
+	current = acpi_fill_csrt(current);
+
+	/* (Re)calculate length and checksum */
+	header->length = current - (u32)csrt;
+	header->checksum = table_compute_checksum((void *)csrt, header->length);
+}
+
 static void acpi_create_spcr(struct acpi_spcr *spcr)
 {
 	struct acpi_table_header *header = &(spcr->header);
@@ -440,6 +464,7 @@ ulong write_acpi_tables(ulong start)
 	struct acpi_fadt *fadt;
 	struct acpi_mcfg *mcfg;
 	struct acpi_madt *madt;
+	struct acpi_csrt *csrt;
 	struct acpi_spcr *spcr;
 	int i;
 
@@ -529,6 +554,13 @@ ulong write_acpi_tables(ulong start)
 	acpi_add_table(rsdp, mcfg);
 	current = ALIGN(current, 16);
 
+	debug("ACPI:    * CSRT\n");
+	csrt = (struct acpi_csrt *)current;
+	acpi_create_csrt(csrt);
+	current += csrt->header.length;
+	acpi_add_table(rsdp, csrt);
+	current = ALIGN(current, 16);
+
 	debug("ACPI:    * SPCR\n");
 	spcr = (struct acpi_spcr *)current;
 	acpi_create_spcr(spcr);
-- 
2.20.1

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

* [U-Boot] [PATCH v1 2/3] x86: acpi: Enable ACPI companion for Intel iDMA 32-bit
  2019-07-14 16:20 [U-Boot] [PATCH v1 1/3] x86: acpi: Introduce a stub to generate CSRT Andy Shevchenko
@ 2019-07-14 16:20 ` Andy Shevchenko
  2019-07-14 16:20 ` [U-Boot] [PATCH v1 3/3] x86: tangier: Populate CSRT for shared DMA controller Andy Shevchenko
  2019-07-14 16:34 ` [U-Boot] [PATCH v1 1/3] x86: acpi: Introduce a stub to generate CSRT Andy Shevchenko
  2 siblings, 0 replies; 4+ messages in thread
From: Andy Shevchenko @ 2019-07-14 16:20 UTC (permalink / raw)
  To: u-boot

ACPI has a capability to specify DMA parameters for DMA channel consumers.
To enable this for Intel Edison, describe GP DMA device in ACPI table
in order to get an ACPI handle to it in OS.

This works in conjunction with CSRT, which must be in align with DSDT.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 .../asm/arch-tangier/acpi/southcluster.asl    | 22 +++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/arch/x86/include/asm/arch-tangier/acpi/southcluster.asl b/arch/x86/include/asm/arch-tangier/acpi/southcluster.asl
index 241d4ac801..0ec195b51b 100644
--- a/arch/x86/include/asm/arch-tangier/acpi/southcluster.asl
+++ b/arch/x86/include/asm/arch-tangier/acpi/southcluster.asl
@@ -431,6 +431,28 @@ Device (PCI0)
             }
         }
     }
+
+    Device (GDMA)
+    {
+        Name (_ADR, 0x00150000)
+        Name (_HID, "808611A2")
+        Name (_UID, Zero)
+
+        Method (_STA, 0, NotSerialized)
+        {
+            Return (STA_VISIBLE)
+        }
+
+        Method (_CRS, 0, Serialized)
+        {
+            Name (RBUF, ResourceTemplate ()
+            {
+                    Memory32Fixed(ReadWrite, 0xFF192000, 0x00001000)
+                    Interrupt(ResourceConsumer, Level, ActiveHigh, Shared, ,, ) { 32 }
+            })
+            Return (RBUF)
+        }
+    }
 }
 
 Device (FLIS)
-- 
2.20.1

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

* [U-Boot] [PATCH v1 3/3] x86: tangier: Populate CSRT for shared DMA controller
  2019-07-14 16:20 [U-Boot] [PATCH v1 1/3] x86: acpi: Introduce a stub to generate CSRT Andy Shevchenko
  2019-07-14 16:20 ` [U-Boot] [PATCH v1 2/3] x86: acpi: Enable ACPI companion for Intel iDMA 32-bit Andy Shevchenko
@ 2019-07-14 16:20 ` Andy Shevchenko
  2019-07-14 16:34 ` [U-Boot] [PATCH v1 1/3] x86: acpi: Introduce a stub to generate CSRT Andy Shevchenko
  2 siblings, 0 replies; 4+ messages in thread
From: Andy Shevchenko @ 2019-07-14 16:20 UTC (permalink / raw)
  To: u-boot

Intel Tangier has a shared DMA controller that, according to Microsoft spec,
has to be presented in CSRT table.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 arch/x86/cpu/tangier/acpi.c | 38 +++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/arch/x86/cpu/tangier/acpi.c b/arch/x86/cpu/tangier/acpi.c
index 0e4f961c53..61b2642aa9 100644
--- a/arch/x86/cpu/tangier/acpi.c
+++ b/arch/x86/cpu/tangier/acpi.c
@@ -68,6 +68,44 @@ u32 acpi_fill_mcfg(u32 current)
 	return current;
 }
 
+static u32 acpi_fill_csrt_dma(struct acpi_csrt_group *grp)
+{
+	struct acpi_csrt_shared_info *si = (struct acpi_csrt_shared_info *)&grp[1];
+
+	/* Fill the Resource Group with Shared Information attached */
+	memset(grp, 0, sizeof(*grp));
+	grp->shared_info_length = sizeof(struct acpi_csrt_shared_info);
+	grp->length = sizeof(struct acpi_csrt_group) + grp->shared_info_length;
+	/* TODO: All values below should come from U-Boot DT somehow */
+	sprintf((char *)&grp->vendor_id, "%04X", 0x8086);
+	grp->device_id = 0x11a2;
+
+	/* Fill the Resource Group Shared Information */
+	memset(si, 0, sizeof(*si));
+	si->major_version = 1;
+	si->minor_version = 0;
+	/* TODO: All values below should come from U-Boot DT somehow */
+	si->mmio_base_low = 0xff192000;
+	si->mmio_base_high = 0;
+	si->gsi_interrupt = 32;
+	si->interrupt_polarity = 1;
+	si->interrupt_mode = 0;
+	si->num_channels = 8;
+	si->dma_address_width = 32;
+	si->base_request_line = 0;
+	si->num_handshake_signals = 16;
+	si->max_block_size = 0x20000;
+
+	return grp->length;
+}
+
+u32 acpi_fill_csrt(u32 current)
+{
+	current += acpi_fill_csrt_dma((struct acpi_csrt_group *)current);
+
+	return current;
+}
+
 void acpi_create_gnvs(struct acpi_global_nvs *gnvs)
 {
 	struct udevice *dev;
-- 
2.20.1

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

* [U-Boot] [PATCH v1 1/3] x86: acpi: Introduce a stub to generate CSRT
  2019-07-14 16:20 [U-Boot] [PATCH v1 1/3] x86: acpi: Introduce a stub to generate CSRT Andy Shevchenko
  2019-07-14 16:20 ` [U-Boot] [PATCH v1 2/3] x86: acpi: Enable ACPI companion for Intel iDMA 32-bit Andy Shevchenko
  2019-07-14 16:20 ` [U-Boot] [PATCH v1 3/3] x86: tangier: Populate CSRT for shared DMA controller Andy Shevchenko
@ 2019-07-14 16:34 ` Andy Shevchenko
  2 siblings, 0 replies; 4+ messages in thread
From: Andy Shevchenko @ 2019-07-14 16:34 UTC (permalink / raw)
  To: u-boot

On Sun, Jul 14, 2019 at 07:20:45PM +0300, Andy Shevchenko wrote:
> Here is a stub function that generates an empty CSRT. If the target platform
> provides acpi_fill_csrt() function, it will be used to populate the table.

Please, discard this version (just had sent v2) due to missed first patch.

JFYI: I have tested it on v5.2 kernel and it works fine, no need to
patch the kernel anyhow (okay, there is one bug in the kernel code, but
it can be fixed separately).

-- 
With Best Regards,
Andy Shevchenko

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

end of thread, other threads:[~2019-07-14 16:34 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-14 16:20 [U-Boot] [PATCH v1 1/3] x86: acpi: Introduce a stub to generate CSRT Andy Shevchenko
2019-07-14 16:20 ` [U-Boot] [PATCH v1 2/3] x86: acpi: Enable ACPI companion for Intel iDMA 32-bit Andy Shevchenko
2019-07-14 16:20 ` [U-Boot] [PATCH v1 3/3] x86: tangier: Populate CSRT for shared DMA controller Andy Shevchenko
2019-07-14 16:34 ` [U-Boot] [PATCH v1 1/3] x86: acpi: Introduce a stub to generate CSRT Andy Shevchenko

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.