[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[RFC v1 0/5] Introduce SCI-mediator feature


  • To: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Oleksii Moisieiev <Oleksii_Moisieiev@xxxxxxxx>
  • Date: Tue, 14 Dec 2021 09:34:18 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=4EqTJdXZja5RAmYmgFwzvD4ulmqLhoeQ2wjok3WMLDY=; b=HPVaQJZJmIroGyvzP6dLeQpLx9JdS9MigBnABz9Z8HuxEDWLUAiARuHDvCIgC7uUag0XIE94S8wcJdiC8hfqWRXFD4ODg8rnMqUa3UO/GFCgYVvksrBB3DoWxyNcKBzVAX2PDZ8BKOOdTywF1+rhngSYXaDJSyvkDnKeItEgnNCSJpDOuA5xto8ZCIC0xidxYIMTbBRXNdm1371oJGhbrKlCo4pKyZpJH63ETU0b8+P5MwpOC0QvZOfhXN0+lEHaO40Lt4z6aw5jTJavwrvT6eGjsGlDTm0OjN95efH2vFaN95ONxGBqnTUhaFBxqHfhJx/xdzPSB+PTpQVt/yH8qA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Od2Nyu0aD89TjEpf0m02RBV/r5gVXiXD1wQ/PydO0MYlxrZ1PivvUk3jxlZi1GP/r+CfQ5glALF7/U3+kEf8YyJ9JsfCF5ZTAPD8WKoxgi6BlVbajAY30c8/BYwlEykhuczMT9UGiur5vV0rGCGEFpVSMvtOtSfSRLvhO7QJFuGucyCPsXrWFn2ULVE84SEJ0fYBB9d9rRED59xMkaGnWnNIKpoxUA37GnyffZUzESDOF3X6BVFbzYUnBx/zYOAj+pOicp9Q4Ob8rMd1eP4DFclUoSs54X6x01tfuHnY1CdnqLGlerBYdcCECxC6/M7DUu4Or/fq6cpoUDo4Rt6OAA==
  • Cc: Oleksii Moisieiev <Oleksii_Moisieiev@xxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, George Dunlap <george.dunlap@xxxxxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, Wei Liu <wl@xxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Juergen Gross <jgross@xxxxxxxx>
  • Delivery-date: Tue, 14 Dec 2021 09:34:41 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHX8M3EbPa1dWpku0ybFf1q9+BnxQ==
  • Thread-topic: [RFC v1 0/5] Introduce SCI-mediator feature

Introducing the feature, called SCI mediator.
It's purpose is to redirect SCMI requests from the domains to firmware
(SCP, ATF etc), which controls the power/clock/resets etc.
The idea is to make SCP firmware (or similar, such as AT-F) responsible for
control power/clock/resets and provide SCMI interface so controls can be shared
between the Domains.
Originally, we've met a problem, that the devices, shared between different
Domains, can't have an access to HW registers to work with clocks/resets/power
etc. You have to pass cpg to the Domain, so the devices can access HW directly.
The solution for this is to move HW controls over power/clock/resets to
SCP firmware and use Linux-kernel SCMI drivers to pass requests to SCP.
Xen is responsible for permissions setting, so Domain can access only to
power/clock/resets which are related to this Domain. Also XEN is the mediator
which redirects SCMI requests, adding agentID so firmware should know the
sender.
SMC is currently used as transport, but this should be configurable.

Here is the high level design:

SCI (System Control Interface) feature can be enabled in xen_config:
> CONFIG_SCI=y
Mediator can be configured:
> CONFIG_SCMI_SMC=y

Currently, only SCMI_SMC mediator is implemented, which using shared memory
region to communicate with firmware and SMC as transport.

Xen scmi should be configured in the device-tree.
Format is the following:
        cpu_scp_shm: scp-shmem@0x53FF0000 {
                compatible = "arm,scmi-shmem";
                reg = <0x0 0x53FF0000 0x0 0x1000>;
        };

        firmware {
                scmi {
                        compatible = "arm,scmi-smc";
                        arm,smc-id = <0x82000002>;
                        shmem = <&cpu_scp_shm>;
                        #address-cells = <1>;
                        #size-cells = <0>;

                        scmi_power: protocol@11 {
                                reg = <0x11>;
                                #power-domain-cells = <1>;
                        };

                        scmi_clock: protocol@14 {
                                reg = <0x14>;
                                #clock-cells = <1>;
                        };

                        scmi_reset: protocol@16 {
                                reg = <0x16>;
                                #reset-cells = <1>;
                        };
                };
        };

Where:
&cpu_scp_shm is the shared memory for scmi buffers;
0x53FF0000, size 0x1000 is the platform specific free address, which provide
space for the communication.
&scmi node, which should be copied to Dom0 device-tree.

Device configured to use scmi: 
&avb {
        scmi_devid = <0>;
        clocks = <&scmi_clock 0>;
        power-domains = <&scmi_power 0>;
        resets = <&scmi_reset 0>;
};

Where:
scmi_devid - id from the firmware, which is assigned for AVB.

During initialization, XEN scans probes the first SCI-mediator driver which has
matching node in the device-tree. If no device-tree was provided, then the
first registered mediator driver should be probed.

DomX should be configured:
Device-tree should include the same nodes, described above.
&cpu_scp_shm should be altered during domain creation. Xen allocates free page
from the memory region, provided in &cpu_scp_shm in XEN device-tree, so each
domain should have unique page. Nodes &cpu_scp_shm and /firmware/scmi should be
copied from partial device-tree to domain device-tree, so kernel can initialize
scmi driver.

SCI mediator can be enabled in dom.cfg the following way:
>sci = "scmi_smc"

which sets scmi_smc to be used for the domain.

Oleksii Moisieiev (5):
  xen/arm: add support for Renesas R-Car Gen3 platform
  xen/arm: add generic SCI mediator framework
  xen/arm: introduce SCMI-SMC mediator driver
  tools/arm: add "scmi_smc" option to xl.cfg
  xen/arm: add SCI mediator support for DomUs

 MAINTAINERS                       |   6 +
 docs/man/xl.cfg.5.pod.in          |  22 +
 tools/include/libxl.h             |   5 +
 tools/include/xenctrl.h           |   3 +
 tools/include/xenguest.h          |   2 +
 tools/libs/ctrl/xc_domain.c       |  23 +
 tools/libs/guest/xg_dom_arm.c     |   5 +-
 tools/libs/light/libxl_arm.c      | 122 ++++-
 tools/libs/light/libxl_create.c   |  54 +-
 tools/libs/light/libxl_dom.c      |   1 +
 tools/libs/light/libxl_internal.h |   4 +
 tools/libs/light/libxl_types.idl  |   6 +
 tools/xl/xl_parse.c               |   9 +
 xen/arch/arm/Kconfig              |  10 +
 xen/arch/arm/Makefile             |   1 +
 xen/arch/arm/domain.c             |  24 +
 xen/arch/arm/domain_build.c       |  11 +
 xen/arch/arm/domctl.c             |  15 +
 xen/arch/arm/platforms/Makefile   |   1 +
 xen/arch/arm/platforms/rcar3.c    |  47 ++
 xen/arch/arm/sci/Kconfig          |  10 +
 xen/arch/arm/sci/Makefile         |   2 +
 xen/arch/arm/sci/sci.c            | 128 +++++
 xen/arch/arm/sci/scmi_smc.c       | 795 ++++++++++++++++++++++++++++++
 xen/arch/arm/setup.c              |   1 +
 xen/arch/arm/xen.lds.S            |   7 +
 xen/include/asm-arm/domain.h      |   4 +
 xen/include/asm-arm/sci/sci.h     | 162 ++++++
 xen/include/public/arch-arm.h     |  11 +
 xen/include/public/domctl.h       |   9 +
 30 files changed, 1485 insertions(+), 15 deletions(-)
 create mode 100644 xen/arch/arm/platforms/rcar3.c
 create mode 100644 xen/arch/arm/sci/Kconfig
 create mode 100644 xen/arch/arm/sci/Makefile
 create mode 100644 xen/arch/arm/sci/sci.c
 create mode 100644 xen/arch/arm/sci/scmi_smc.c
 create mode 100644 xen/include/asm-arm/sci/sci.h

-- 
2.27.0



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.