From mboxrd@z Thu Jan 1 00:00:00 1970 From: Greg KH Date: Fri, 23 Mar 2018 14:22:20 +0100 Subject: [PATCH arm/aspeed/ast2500 v3] eSPI: add ASPEED AST2500 eSPI driver to boot a host with PCH runs on eSPI In-Reply-To: <1519394897-6095-1-git-send-email-haiyue.wang@linux.intel.com> References: <1519394897-6095-1-git-send-email-haiyue.wang@linux.intel.com> Message-ID: <20180323132220.GA14571@kroah.com> List-Id: To: linux-aspeed@lists.ozlabs.org MIME-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: quoted-printable On Fri, Feb 23, 2018 at 10:08:17PM +0800, Haiyue Wang wrote: > When PCH works under eSPI mode, the PMC (Power Management Controller) in > PCH is waiting for SUS_ACK from BMC after it alerts SUS_WARN. It is in > dead loop if no SUS_ACK assert. This is the basic requirement for the BMC > works as eSPI slave. >=20 > Also for the host power on / off actions, from BMC side, the following VW > (Virtual Wire) messages are done in firmware: > 1. SLAVE_BOOT_LOAD_DONE / SLAVE_BOOT_LOAD_STATUS > 2. SUS_ACK > 3. OOB_RESET_ACK > 4. HOST_RESET_ACK >=20 > Signed-off-by: Haiyue Wang > --- > v2 -> v3: > - Remove the unused header file reference. > - Change some code lines sequence. >=20 > v1 -> v2: > - Fix the checkpatch.pl warning in file espi-slave.rst > Missing or malformed SPDX-License-Identifier tag in line 1 > #71: FILE: Documentation/misc-devices/espi-slave.rst:1: > - Make the Kconfig desciption to be more accurate. > --- > .../devicetree/bindings/misc/aspeed,espi-slave.txt | 20 ++ > Documentation/misc-devices/espi-slave.rst | 119 ++++++++++ > drivers/misc/Kconfig | 8 + > drivers/misc/Makefile | 1 + > drivers/misc/aspeed-espi-slave.c | 261 +++++++++++++++= ++++++ > 5 files changed, 409 insertions(+) > create mode 100644 Documentation/devicetree/bindings/misc/aspeed,espi-sl= ave.txt > create mode 100644 Documentation/misc-devices/espi-slave.rst > create mode 100644 drivers/misc/aspeed-espi-slave.c >=20 > diff --git a/Documentation/devicetree/bindings/misc/aspeed,espi-slave.txt= b/Documentation/devicetree/bindings/misc/aspeed,espi-slave.txt > new file mode 100644 > index 0000000..4f5d47e > --- /dev/null > +++ b/Documentation/devicetree/bindings/misc/aspeed,espi-slave.txt > @@ -0,0 +1,20 @@ > +ASPEED eSPI Slave Controller > + > +Required properties: > + - compatible: must be one of: > + - "aspeed,ast2500-espi-slave" > + > + - reg: physical base address of the controller and length of memory map= ped > + region > + > + - interrupts: interrupt generated by the controller > + > +Example: > + > + espi: espi at 1e6ee000 { > + compatible =3D "aspeed,ast2500-espi-slave"; > + reg =3D <0x1e6ee000 0x100>; > + interrupts =3D <23>; > + status =3D "disabled"; > +}; > + You need to split this up into a separate patch and get the device tree maintainers to ack it, right? > diff --git a/Documentation/misc-devices/espi-slave.rst b/Documentation/mi= sc-devices/espi-slave.rst > new file mode 100644 > index 0000000..185acd7 > --- /dev/null > +++ b/Documentation/misc-devices/espi-slave.rst > @@ -0,0 +1,119 @@ > +.. SPDX-License-Identifier: GPL-2.0 > + > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > +eSPI Slave > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > + > +:Author: Haiyue Wang > + > +The PCH (**eSPI master**) provides the eSPI to support connection of a > +BMC (**eSPI slave**) to the platform. > + > +The LPC and eSPI interfaces are mutually exclusive. Both use the same > +pins, but on power-up, a HW strap determines if the eSPI or the LPC bus > +is operational. Once selected, it=E2=80=99s not possible to change to th= e other > +interface. > + > +``eSPI Channels and Supported Transactions`` > + +------+---------------------+----------------------+------------------= --+ > + | CH # | Channel | Posted Cycles | Non-Posted Cycles= | > + +=3D=3D=3D=3D=3D=3D+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D+ > + | 0 | Peripheral | Memory Write, | Memory Read, = | > + | | | Completions | I/O Read/Write = | > + +------+---------------------+----------------------+------------------= --+ > + | 1 | Virtual Wire | Virtual Wire GET/PUT | N/A = | > + +------+---------------------+----------------------+------------------= --+ > + | 2 | Out-of-Band Message | SMBus Packet GET/PUT | N/A = | > + +------+---------------------+----------------------+------------------= --+ > + | 3 | Flash Access | N/A | Flash Read, Write= , | > + | | | | Erase = | > + +------+---------------------+----------------------+------------------= --+ > + | N/A | General | Register Accesses | N/A = | > + +------+---------------------+----------------------+------------------= --+ > + > +Virtual Wire Channel (Channel 1) Overview > +----------------------------------------- > + > +The Virtual Wire channel uses a standard message format to communicate > +several types of signals between the components on the platform:: > + > + - Sideband and GPIO Pins: System events and other dedicated signals > + between the PCH and eSPI slave. These signals are tunneled between the > + two components over eSPI. > + > + - Serial IRQ Interrupts: Interrupts are tunneled from the eSPI slave to > + the PCH. Both edge and triggered interrupts are supported. > + > +When PCH runs on eSPI mode, from BMC side, the following VW messages are > +done in firmware:: > + > + 1. SLAVE_BOOT_LOAD_DONE / SLAVE_BOOT_LOAD_STATUS > + 2. SUS_ACK > + 3. OOB_RESET_ACK > + 4. HOST_RESET_ACK > + > +``eSPI Virtual Wires (VW)`` > + +----------------------+---------+-------------------------------------= --+ > + |Virtual Wire |PCH Pin |Comments = | > + | |Direction| = | > + +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D+=3D= =3D=3D=3D=3D=3D=3D=3D=3D+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D+ > + |SUS_WARN# |Output |PCH pin is a GPIO when eSPI is enable= d.| > + | | |eSPI controller receives as VW messag= e.| > + +----------------------+---------+-------------------------------------= --+ > + |SUS_ACK# |Input |PCH pin is a GPIO when eSPI is enable= d.| > + | | |eSPI controller receives as VW messag= e.| > + +----------------------+---------+-------------------------------------= --+ > + |SLAVE_BOOT_LOAD_DONE |Input |Sent when the BMC has completed its = | > + | | |boot process as an indication to = | > + | | |eSPI-MC to continue with the G3 to S0= | > + | | |exit. = | > + | | |The eSPI Master waits for the asserti= on| > + | | |of this virtual wire before proceedin= g | > + | | |with the SLP_S5# deassertion. = | > + | | |The intent is that it is never change= d | > + | | |except on a G3 exit - it is reset on = a | > + | | |G3 entry. = | > + +----------------------+---------+-------------------------------------= --+ > + |SLAVE_BOOT_LOAD_STATUS|Input |Sent upon completion of the Slave Boo= t | > + | | |Load from the attached flash. A stat = of| > + | | |1 indicates that the boot code load w= as| > + | | |successful and that the integrity of = | > + | | |the image is intact. = | > + +----------------------+---------+-------------------------------------= --+ > + |HOST_RESET_WARN |Output |Sent from the MC just before the Host= | > + | | |is about to enter reset. Upon receivi= ng| > + | | |, the BMC must flush and quiesce its = | > + | | |upstream Peripheral Channel request = | > + | | |queues and assert HOST_RESET_ACK VWir= e.| > + | | |The MC subsequently completes any = | > + | | |outstanding posted transactions or = | > + | | |completions and then disables the = | > + | | |Peripheral Channel via a write to = | > + | | |the Slave's Configuration Register. = | > + +----------------------+---------+-------------------------------------= --+ > + |HOST_RESET_ACK |Input |ACK for the HOST_RESET_WARN message = | > + +----------------------+---------+-------------------------------------= --+ > + |OOB_RESET_WARN |Output |Sent from the MC just before the OOB = | > + | | |processor is about to enter reset. Up= on| > + | | |receiving, the BMC must flush and = | > + | | |quiesce its OOB Channel upstream = | > + | | |request queues and assert OOB_RESET_A= CK| > + | | |VWire. The-MC subsequently completes = | > + | | |any outstanding posted transactions o= r | > + | | |completions and then disables the OOB= | > + | | |Channel via a write to the Slave's = | > + | | |Configuration Register. = | > + +----------------------+---------+-------------------------------------= --+ > + |OOB_RESET_ACK |Input |ACK for OOB_RESET_WARN message = | > + +----------------------+---------+-------------------------------------= --+ > + > +`Intel C620 Series Chipset Platform Controller Hub > +`_ > + > + -- 17. Enhanced Serial Peripheral Interface What is this line for? "17."? > + > + > +`Enhanced Serial Peripheral Interface (eSPI) > +- Interface Base Specification (for Client and Server Platforms) > +`_ > + > diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig > index 03605f8..cf3e7a1 100644 > --- a/drivers/misc/Kconfig > +++ b/drivers/misc/Kconfig > @@ -472,6 +472,14 @@ config VEXPRESS_SYSCFG > bus. System Configuration interface is one of the possible means > of generating transactions on this bus. > =20 > +config ASPEED_ESPI_SLAVE > + depends on ARCH_ASPEED || COMPILE_TEST > + depends on REGMAP_MMIO > + tristate "Aspeed ast2500 eSPI slave device driver" > + ---help--- > + Control Aspeed ast2500 eSPI slave controller to handle event > + which needs the firmware's processing. No module name and all that here? thanks, greg k-h