Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1368209 > unrolled thread
| Started by | Shannon Zhao <zhaoshenglong@huawei.com> |
|---|---|
| First post | 2016-03-31 13:40 +0200 |
| Last post | 2016-03-31 13:40 +0200 |
| Articles | 4 — 1 participant |
Back to article view | Back to linux.kernel
[PATCH v9 00/17] Add ACPI support for Xen Dom0 on ARM64 Shannon Zhao <zhaoshenglong@huawei.com> - 2016-03-31 13:40 +0200
[PATCH v9 05/17] xen: memory : Add new XENMAPSPACE type XENMAPSPACE_dev_mmio Shannon Zhao <zhaoshenglong@huawei.com> - 2016-03-31 13:40 +0200
[PATCH v9 12/17] ARM64: ACPI: Check if it runs on Xen to enable or disable ACPI Shannon Zhao <zhaoshenglong@huawei.com> - 2016-03-31 13:40 +0200
[PATCH v9 10/17] arm/xen: Get event-channel irq through HVM_PARAM when booting with ACPI Shannon Zhao <zhaoshenglong@huawei.com> - 2016-03-31 13:40 +0200
| From | Shannon Zhao <zhaoshenglong@huawei.com> |
|---|---|
| Date | 2016-03-31 13:40 +0200 |
| Subject | [PATCH v9 00/17] Add ACPI support for Xen Dom0 on ARM64 |
| Message-ID | <riIXv-4as-3@gated-at.bofh.it> |
From: Shannon Zhao <shannon.zhao@linaro.org>
This patch set adds ACPI support for Xen Dom0 on ARM64. The relevant Xen
ACPI on ARM64 design document could be found from [1].
This patch set adds a new FDT node "uefi" under /hypervisor to pass UEFI
information. Introduce a bus notifier of AMBA and Platform bus to map
the new added device's MMIO space. Make Xen domain use
xlated_setup_gnttab_pages to setup grant table and a new hypercall to
get event-channel irq.
Regarding the initialization flow of Linux kernel, it needs to move
xen_early_init() before efi_init(). Then xen_early_init() will check
whether it runs on Xen through the /hypervisor node and efi_init() will
call a new function fdt_find_xen_uefi_params(), to parse those
xen,uefi-* parameters just like the existing efi_get_fdt_params().
And in arm64_enable_runtime_services() it will check whether it runs on
Xen and call another new function xen_efi_runtime_setup() to setup
runtime service instead of efi_native_runtime_setup(). The
xen_efi_runtime_setup() will assign the runtime function pointers with
the functions of driver/xen/efi.c.
And since we pass a /hypervisor node and a /chosen node to Dom0, it
needs to check whether the DTS only contains a /hypervisor node and a
/chosen node in acpi_boot_table_init().
Patches are tested on FVP base model.
Thanks,
Shannon
[1] http://lists.xen.org/archives/html/xen-devel/2015-11/msg00488.html
Changes since v8:
* rebased on v4.6-rc1
* print UART device address (PATCH 1)
* use xen_for_each_gfn (PATCH 3)
* reduce indentation by inverting the condition (PATCH 10)
* move xen_early_init() before efi_init() as well for ARM (PATCH 11)
* sync the document with Xen (PATCH 13)
Changes since v7:
* add __init prefix for acpi_get_spcr_uart_addr (PATCH 1)
Changes since v6:
* rebase on linux master
* refactor codes as acpi_get_spcr_uart_addr (PATCH 1)
* sync with Xen (patch 9)
Changes since v5:
* rebase on linux master
* use acpi_dev_resource_memory to parse the device memory info(patch 1)
* sync with Xen (patch 9)
Changes since v4:
* rebase on linux master
* move the check acpi_device_should_be_hidden into
acpi_bus_type_and_status (patch 1)
* use existing function fdt_subnode_offset (patch 16)
Changes since v3:
* rebase on linux master
* print a warning when there is no SPCR table
* rephase the commit message of PATCH 3
* rephase the words of PATCH 13
* use strcmp and factor the function in PATCH 16
* Add several ACKs and RBs, thanks a lot
Changes since v2:
* Use 0 to check if it should ignore the UART
* Fix the use of page_to_xen_pfn
* Factor ACPI and DT parts in xen_guest_init
* Check "uefi" node by full path
* Fix the statement of Documentation/devicetree/bindings/arm/xen.txt
Changes since v1:
* Rebase on linux mainline and wallclock patch from Stefano
* Refactor AMBA and platform device MMIO map to one file
* Use EFI_PARAVIRT to check if it supports XEN EFI
* Refactor Xen EFI codes
* Address other comments
Shannon Zhao (17):
Xen: ACPI: Hide UART used by Xen
xen/grant-table: Move xlated_setup_gnttab_pages to common place
Xen: xlate: Use page_to_xen_pfn instead of page_to_pfn
arm/xen: Use xen_xlate_map_ballooned_pages to setup grant table
xen: memory : Add new XENMAPSPACE type XENMAPSPACE_dev_mmio
Xen: ARM: Add support for mapping platform device mmio
Xen: ARM: Add support for mapping AMBA device mmio
Xen: public/hvm: sync changes of HVM_PARAM_CALLBACK_VIA ABI from Xen
xen/hvm/params: Add a new delivery type for event-channel in
HVM_PARAM_CALLBACK_IRQ
arm/xen: Get event-channel irq through HVM_PARAM when booting with
ACPI
ARM: XEN: Move xen_early_init() before efi_init()
ARM64: ACPI: Check if it runs on Xen to enable or disable ACPI
ARM: Xen: Document UEFI support on Xen ARM virtual platforms
XEN: EFI: Move x86 specific codes to architecture directory
ARM64: XEN: Add a function to initialize Xen specific UEFI runtime
services
FDT: Add a helper to get the subnode by given name
Xen: EFI: Parse DT parameters for Xen specific UEFI
Shannon Zhao (17):
Xen: ACPI: Hide UART used by Xen
xen/grant-table: Move xlated_setup_gnttab_pages to common place
Xen: xlate: Use page_to_xen_pfn instead of page_to_pfn
arm/xen: Use xen_xlate_map_ballooned_pages to setup grant table
xen: memory : Add new XENMAPSPACE type XENMAPSPACE_dev_mmio
Xen: ARM: Add support for mapping platform device mmio
Xen: ARM: Add support for mapping AMBA device mmio
Xen: public/hvm: sync changes of HVM_PARAM_CALLBACK_VIA ABI from Xen
xen/hvm/params: Add a new delivery type for event-channel in
HVM_PARAM_CALLBACK_IRQ
arm/xen: Get event-channel irq through HVM_PARAM when booting with
ACPI
ARM: XEN: Move xen_early_init() before efi_init()
ARM64: ACPI: Check if it runs on Xen to enable or disable ACPI
ARM: Xen: Document UEFI support on Xen ARM virtual platforms
XEN: EFI: Move x86 specific codes to architecture directory
ARM64: XEN: Add a function to initialize Xen specific UEFI runtime
services
FDT: Add a helper to get the subnode by given name
Xen: EFI: Parse DT parameters for Xen specific UEFI
Documentation/devicetree/bindings/arm/xen.txt | 35 +++++
arch/arm/include/asm/xen/xen-ops.h | 6 +
arch/arm/kernel/setup.c | 2 +-
arch/arm/xen/Makefile | 1 +
arch/arm/xen/efi.c | 40 ++++++
arch/arm/xen/enlighten.c | 109 +++++++++++----
arch/arm64/include/asm/xen/xen-ops.h | 6 +
arch/arm64/kernel/acpi.c | 12 +-
arch/arm64/kernel/setup.c | 2 +-
arch/arm64/xen/Makefile | 1 +
arch/x86/xen/efi.c | 112 ++++++++++++++++
arch/x86/xen/grant-table.c | 57 +-------
drivers/acpi/scan.c | 69 ++++++++++
drivers/firmware/efi/arm-runtime.c | 17 ++-
drivers/firmware/efi/efi.c | 45 ++++++-
drivers/of/fdt.c | 13 ++
drivers/xen/Kconfig | 2 +-
drivers/xen/Makefile | 1 +
drivers/xen/arm-device.c | 184 ++++++++++++++++++++++++++
drivers/xen/efi.c | 174 +++++-------------------
drivers/xen/xlate_mmu.c | 77 +++++++++++
include/linux/of_fdt.h | 2 +
include/xen/interface/hvm/params.h | 40 +++++-
include/xen/interface/memory.h | 1 +
include/xen/xen-ops.h | 32 +++--
25 files changed, 792 insertions(+), 248 deletions(-)
create mode 100644 arch/arm/include/asm/xen/xen-ops.h
create mode 100644 arch/arm/xen/efi.c
create mode 100644 arch/arm64/include/asm/xen/xen-ops.h
create mode 100644 drivers/xen/arm-device.c
--
2.0.4
[toc] | [next] | [standalone]
| From | Shannon Zhao <zhaoshenglong@huawei.com> |
|---|---|
| Date | 2016-03-31 13:40 +0200 |
| Subject | [PATCH v9 05/17] xen: memory : Add new XENMAPSPACE type XENMAPSPACE_dev_mmio |
| Message-ID | <riJ7c-4fc-13@gated-at.bofh.it> |
| In reply to | #1368209 |
From: Shannon Zhao <shannon.zhao@linaro.org> Add a new type of Xen map space for Dom0 to map device's MMIO region. Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org> --- include/xen/interface/memory.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/xen/interface/memory.h b/include/xen/interface/memory.h index 2ecfe4f..9aa8988 100644 --- a/include/xen/interface/memory.h +++ b/include/xen/interface/memory.h @@ -160,6 +160,7 @@ DEFINE_GUEST_HANDLE_STRUCT(xen_machphys_mapping_t); #define XENMAPSPACE_gmfn_foreign 4 /* GMFN from another dom, * XENMEM_add_to_physmap_range only. */ +#define XENMAPSPACE_dev_mmio 5 /* device mmio region */ /* * Sets the GPFN at which a particular page appears in the specified guest's -- 2.0.4
[toc] | [prev] | [next] | [standalone]
| From | Shannon Zhao <zhaoshenglong@huawei.com> |
|---|---|
| Date | 2016-03-31 13:40 +0200 |
| Subject | [PATCH v9 12/17] ARM64: ACPI: Check if it runs on Xen to enable or disable ACPI |
| Message-ID | <riJ7c-4fc-17@gated-at.bofh.it> |
| In reply to | #1368209 |
From: Shannon Zhao <shannon.zhao@linaro.org>
When it's a Xen domain0 booting with ACPI, it will supply a /chosen and
a /hypervisor node in DT. So check if it needs to enable ACPI.
Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
Reviewed-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Hanjun Guo <hanjun.guo@linaro.org>
---
arch/arm64/kernel/acpi.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/arch/arm64/kernel/acpi.c b/arch/arm64/kernel/acpi.c
index d1ce8e2..4e92be0 100644
--- a/arch/arm64/kernel/acpi.c
+++ b/arch/arm64/kernel/acpi.c
@@ -67,10 +67,13 @@ static int __init dt_scan_depth1_nodes(unsigned long node,
{
/*
* Return 1 as soon as we encounter a node at depth 1 that is
- * not the /chosen node.
+ * not the /chosen node, or /hypervisor node when running on Xen.
*/
- if (depth == 1 && (strcmp(uname, "chosen") != 0))
- return 1;
+ if (depth == 1 && (strcmp(uname, "chosen") != 0)) {
+ if (!xen_initial_domain() || (strcmp(uname, "hypervisor") != 0))
+ return 1;
+ }
+
return 0;
}
@@ -184,7 +187,8 @@ void __init acpi_boot_table_init(void)
/*
* Enable ACPI instead of device tree unless
* - ACPI has been disabled explicitly (acpi=off), or
- * - the device tree is not empty (it has more than just a /chosen node)
+ * - the device tree is not empty (it has more than just a /chosen node,
+ * and a /hypervisor node when running on Xen)
* and ACPI has not been force enabled (acpi=force)
*/
if (param_acpi_off ||
--
2.0.4
[toc] | [prev] | [next] | [standalone]
| From | Shannon Zhao <zhaoshenglong@huawei.com> |
|---|---|
| Date | 2016-03-31 13:40 +0200 |
| Subject | [PATCH v9 10/17] arm/xen: Get event-channel irq through HVM_PARAM when booting with ACPI |
| Message-ID | <riJ7c-4fc-19@gated-at.bofh.it> |
| In reply to | #1368209 |
From: Shannon Zhao <shannon.zhao@linaro.org>
The kernel will get the event-channel IRQ through
HVM_PARAM_CALLBACK_IRQ.
Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
Reviewed-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
arch/arm/xen/enlighten.c | 36 +++++++++++++++++++++++++++++++++++-
1 file changed, 35 insertions(+), 1 deletion(-)
diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c
index d94f726..06bd61a 100644
--- a/arch/arm/xen/enlighten.c
+++ b/arch/arm/xen/enlighten.c
@@ -30,6 +30,7 @@
#include <linux/time64.h>
#include <linux/timekeeping.h>
#include <linux/timekeeper_internal.h>
+#include <linux/acpi.h>
#include <linux/mm.h>
@@ -278,6 +279,35 @@ void __init xen_early_init(void)
add_preferred_console("hvc", 0, NULL);
}
+static void __init xen_acpi_guest_init(void)
+{
+#ifdef CONFIG_ACPI
+ struct xen_hvm_param a;
+ int interrupt, trigger, polarity;
+
+ a.domid = DOMID_SELF;
+ a.index = HVM_PARAM_CALLBACK_IRQ;
+
+ if (HYPERVISOR_hvm_op(HVMOP_get_param, &a)
+ || (a.value >> 56) != HVM_PARAM_CALLBACK_TYPE_PPI) {
+ xen_events_irq = 0;
+ return;
+ }
+
+ interrupt = a.value & 0xff;
+ trigger = ((a.value >> 8) & 0x1) ? ACPI_EDGE_SENSITIVE
+ : ACPI_LEVEL_SENSITIVE;
+ polarity = ((a.value >> 8) & 0x2) ? ACPI_ACTIVE_LOW
+ : ACPI_ACTIVE_HIGH;
+ xen_events_irq = acpi_register_gsi(NULL, interrupt, trigger, polarity);
+#endif
+}
+
+static void __init xen_dt_guest_init(void)
+{
+ xen_events_irq = irq_of_parse_and_map(xen_node, 0);
+}
+
static int __init xen_guest_init(void)
{
struct xen_add_to_physmap xatp;
@@ -286,7 +316,11 @@ static int __init xen_guest_init(void)
if (!xen_domain())
return 0;
- xen_events_irq = irq_of_parse_and_map(xen_node, 0);
+ if (!acpi_disabled)
+ xen_acpi_guest_init();
+ else
+ xen_dt_guest_init();
+
if (!xen_events_irq) {
pr_err("Xen event channel interrupt not found\n");
return -ENODEV;
--
2.0.4
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web