Re: [PATCH v2 1/4] SFH: Add maintainer list and documentation for AMD SFH based on HID framework

From: Srinivas Pandruvada
Date: Mon Feb 03 2020 - 09:29:14 EST


On Wed, 2020-01-29 at 09:57 +0530, Sandeep Singh wrote:
> From: Sandeep Singh <sandeep.singh@xxxxxxx>
>
> Add Maintainer list for AMD SFH

SFH (SENSOR FUSION HUB)

This way it will be clear what is SFH.

> Solution and work flow
> document.
>
> Signed-off-by: Nehal Shah <Nehal-bakulchandra.Shah@xxxxxxx>
> Signed-off-by: Sandeep Singh <sandeep.singh@xxxxxxx>
> ---
> Documentation/hid/amd-sfh-hid.rst | 159
> ++++++++++++++++++++++++++++++++++++++
> MAINTAINERS | 8 ++
> 2 files changed, 167 insertions(+)
> create mode 100644 Documentation/hid/amd-sfh-hid.rst
>
> diff --git a/Documentation/hid/amd-sfh-hid.rst
> b/Documentation/hid/amd-sfh-hid.rst
> new file mode 100644
> index 0000000..1183350
> --- /dev/null
> +++ b/Documentation/hid/amd-sfh-hid.rst
> @@ -0,0 +1,159 @@
> +.. SPDX-License-Identifier: GPL-2.0
> +
> +AMD Sensor Fusion Hub:-
> +======================
> +AMD sensor fushion Hub is part of a SOC starting from ryzon based
> platforms.
> +The solution is working well on windows OS in several
> +OEM products. AMD SFH uses HID over PCIe bus. In terms of
> architecture
> +it is much more resmebles like ISH .However the major diffrence is
> all
> +The hid reports are generated as part of kernel driver.
> +
> +Block Diagram:-
> +=============
> + -------------------------------
> + | HID User Space Applications |
> + -------------------------------
> +---------------------------------------------
> + ---------------------------------
> + | HID Core |
> + ---------------------------------
> +
> + ---------------------------------
> + | AMD HID Transport Driver |
> + ---------------------------------
> +
> + --------------------------------
> + | AMD HID Client Driver |
> + | with HID Report Generator|
> + --------------------------------
> +
> + --------------------------------
> + | AMD MP2 PCIe Driver |
> + --------------------------------
> +---------------------------------------------
> + -------------------------------
> + | SFH MP2 Processor |
> + --------------------------------
> +
> +
> +AMD HID Transport Layer :-
> +***************************
> +AMD SFH transport is also implemented as a bus. Each client
> application
> +executing in the AMD MP2 is registered as a device on this bus.
> +The driver, which binds each device (AMD SFH HID driver) identifies
> +the device type and registers with the hid core. Transport drivers
> +attach a constant "struct hid_ll_driver" object with each device.
> +Once a device is registered with HID core, the callbacks provided
> via
> +this struct are used by HID core to communicate with the device.
> +AMD HID Transport driver implements the synchronous calls.
> +
> +AMD HID Client Driver:-
> +**********************
> +This driver is responsible to implement HID request and descriptors.
> +As firmware is OS agnostic, HID client driver fills the HID request
> +structure and descriptors. HID client driver is in complex in nature
> +as it is interface between MP2 PCIe driver and HID. HID client
> driver
> +initialized the MP2 PCIe driver and holds the instance of MP2
> driver.
> +It identified the number of sensors connected using MP2- PCIe driver
> and
> +based on that allocate the DRAM address for each and every sensor
> and
> +pass it to MP2-PCIe driver.
> +On enumeration of each sensor, client driver fills out the HID
> Descriptor
> +structure and HID input report structure. HID Feature report
> structure can
> +be optional. The report descriptor structure varies sensor to
> sensor.
> +Now on enumeration client driver does two major things
> +1. Register the HID sensor client to virtual bus (Platform driver)
> and bind it.
> +2. Probes the AMD HID transport driver. Which in turns register
> device to the core.
> +
> +AMD MP2 PCIe Driver:-
> +********************
> +MP2 PCIe driver is responsible for making all transaction with the
> firmware over
> +PCIe.The connection establishment between firmware and MP2 PCIe
> driver happens here.
> +
> +The communication between X86 and MP2 is spilt into three parts.
> +1. Command Transfer => C2P Mailbox Register are used
> +2. Data Transfer => DRAM
> +
> +Commands are sent to MP2 using C2P Mail Box registers. These
> C2P registers
> +are mapped in PCIe address space.Writing into C2P Message register
> generate
> +interrupt to MP2. The client driver allocates the physical memory
> and send
> +the same to MP2 for data transfer. MP2 firmware uses DRAM interface
> registers
> +to indirectly access DRAM memory. For Firmware always write minimum
> 32 bytes
> +into DRAM.So it is expected that driver shall allocate minimum 32
> bytes DRAM space.
> +
> +Enumeration and Probing flow:-
> +*****************************
> + HID AMD AMD AMD
> -PCIe MP2
> + Core Transport Client
> Driver Driver FW
> + | | | |
> |
> + | | on Boot Driver Loaded |
> |
> + | | | |
> |
> + | | |----MP2-PCIe Int--------->
> | |
> + | | | |
> |
> + | | |---Get Number of sensors->
> | |
> + | | | Read
> P2C |
> + | | | Register
> |
> + | | | |
> |
> + | | | Loop(for No of
> Sensors) | |
> + | | |--------------------
> --| | |
> + | | | Create HID
> Descriptor| | |
> + | | | Create Input report
> | | |
> + | | | Descriptor
> Map | | |
> + | | | the MP2 FW Index to
> | | |
> + | | | HID
> Index | | |
> + | | | Allocate the
> DRAM | Enable |
> + | | | address | Sensors
> |
> + | | |--------------------
> --| | |
> + | | HID
> transport| | Enable |
> + | |<--Probe------| |---Sensor
> CMD--> |
> + | | Create the | |
> |
> + | | HID
> device | | |
> + | | (MFD) | |
> |
> + | | by Populating| |
> |
> + | | the
> HID | | |
> + | | ll_driver | |
> |
> + | HID | | |
> |
> + | add | | |
> |
> + |Device | | |
> |
> + |<------------- | | |
> |
> +
> +
> +Data Flow from Application to the AMD SFH Driver:-
> +*************************************************
> +
> + | | | |
> |
> +Get | | | |
> |
> +Input | | | |
> |
> +Report | | |
> | |
> +---> | | |
> | |
> + |HID_req | | |
> |
> + |get_report | | |
> |
> + |-------------
> >| | | |
> + | |
> HID_get_input| | |
> + | | report | |
> |
> + | |------------->|----------------------
> --| | |
> + | | | Read the DRAM data
> for| | |
> + | | | requsted sensor
> and | | |
> + | | | create the HID
> input | | |
> + | | | report | |
> |
> + | | |----------------------
> --| | |
> + | |Data received
> | | |
> + | | in HID
> report| | |
> + To |<-------------|<-------------
> | | |
> +Applications | | |
> |
> +<-------
> | | | |
> |
> +
> +
> +Data Flow from AMD SFH Driver to Application:-
> +**********************************************
> + | | |
> | |
> + | | |----------------------
> --| | |
> + | | |Periodically
> Read | | |
> + | | |the data for
> all | | |
> + | | |enumerated
> sensors | | |
> + | | |from the dram and
> create| | |
> + | | | HID Input
> reports | | |
> + | | |----------------------
> --| | |
> + | |HID
> Input | | |
> + | |Input
> report | | |
> + <----submit to Application-----
> | | |
> + | | | |
> |
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 56765f5..7cfeb5a 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -884,6 +884,14 @@ S: Supported
> F: drivers/net/ethernet/amd/xgbe/
> F: arch/arm64/boot/dts/amd/amd-seattle-xgbe*.dtsi
>
> +AMD SENSOR FUSION HUB DRIVER
> +M: Nehal Shah <nehal-bakulchandra.shah@xxxxxxx>
> +M: Sandeep Singh <sandeep.singh@xxxxxxx>
> +L: linux-input@xxxxxxxxxxxxxxx
> +S: Maintained
> +F: Documentation/hid/amd-sfh*
> +F: drivers/hid/amd-sfh-hid/
> +
> ANALOG DEVICES INC AD5686 DRIVER
> M: Stefan Popa <stefan.popa@xxxxxxxxxx>
> L: linux-pm@xxxxxxxxxxxxxxx