Re: [PATCH v3 2/8] drivers/soc: Add Aspeed XDMA Engine Driver

2019-06-28 Thread Eddie James



On 5/30/19 10:31 PM, Eduardo Valentin wrote:

On Wed, May 29, 2019 at 01:10:02PM -0500, Eddie James wrote:

The XDMA engine embedded in the AST2500 SOC performs PCI DMA operations
between the SOC (acting as a BMC) and a host processor in a server.

This commit adds a driver to control the XDMA engine and adds functions
to initialize the hardware and memory and start DMA operations.

Signed-off-by: Eddie James 
---
  MAINTAINERS  |  10 +
  drivers/soc/aspeed/Kconfig   |   8 +
  drivers/soc/aspeed/Makefile  |   1 +
  drivers/soc/aspeed/aspeed-xdma.c | 520 +++
  include/uapi/linux/aspeed-xdma.h |  26 ++
  5 files changed, 565 insertions(+)
  create mode 100644 drivers/soc/aspeed/aspeed-xdma.c
  create mode 100644 include/uapi/linux/aspeed-xdma.h

diff --git a/MAINTAINERS b/MAINTAINERS
index 7e09dda..84e2b62 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2584,6 +2584,16 @@ S:   Maintained
  F:drivers/media/platform/aspeed-video.c
  F:Documentation/devicetree/bindings/media/aspeed-video.txt
  
+ASPEED XDMA ENGINE DRIVER

+M: Eddie James 
+L: linux-asp...@lists.ozlabs.org (moderated for non-subscribers)
+L: linux-kernel@vger.kernel.org
+S: Maintained
+F: Documentation/devicetree/bindings/misc/aspeed,xdma.txt
+F: Documentation/ABI/testing/sysfs-devices-platform-aspeed-xdma
+F: drivers/soc/aspeed/aspeed-xdma.c
+F: include/uapi/linux/aspeed-xdma.h
+
  ASUS NOTEBOOKS AND EEEPC ACPI/WMI EXTRAS DRIVERS
  M:Corentin Chary 
  L:acpi4asus-u...@lists.sourceforge.net
diff --git a/drivers/soc/aspeed/Kconfig b/drivers/soc/aspeed/Kconfig
index 323e177..8b08310 100644
--- a/drivers/soc/aspeed/Kconfig
+++ b/drivers/soc/aspeed/Kconfig
@@ -29,4 +29,12 @@ config ASPEED_P2A_CTRL
  ioctl()s, the driver also provides an interface for userspace 
mappings to
  a pre-defined region.
  
+config ASPEED_XDMA

+   tristate "Aspeed XDMA Engine Driver"
+   depends on SOC_ASPEED && REGMAP && MFD_SYSCON && HAS_DMA
+   help
+ Enable support for the Aspeed XDMA Engine found on the Aspeed AST2500
+ SOC. The XDMA engine can perform automatic PCI DMA operations between
+ the AST2500 (acting as a BMC) and a host processor.
+
  endmenu
diff --git a/drivers/soc/aspeed/Makefile b/drivers/soc/aspeed/Makefile
index b64be47..977b046 100644
--- a/drivers/soc/aspeed/Makefile
+++ b/drivers/soc/aspeed/Makefile
@@ -2,3 +2,4 @@
  obj-$(CONFIG_ASPEED_LPC_CTRL) += aspeed-lpc-ctrl.o
  obj-$(CONFIG_ASPEED_LPC_SNOOP)+= aspeed-lpc-snoop.o
  obj-$(CONFIG_ASPEED_P2A_CTRL) += aspeed-p2a-ctrl.o
+obj-$(CONFIG_ASPEED_XDMA)  += aspeed-xdma.o
diff --git a/drivers/soc/aspeed/aspeed-xdma.c b/drivers/soc/aspeed/aspeed-xdma.c
new file mode 100644
index 000..3dc0ce4
--- /dev/null
+++ b/drivers/soc/aspeed/aspeed-xdma.c
@@ -0,0 +1,520 @@
+// SPDX-License-Identifier: GPL-2.0+
+// Copyright IBM Corp 2019
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#define DEVICE_NAME"aspeed-xdma"
+
+#define SCU_STRAP  0x070
+#define  SCU_STRAP_VGA_MEM GENMASK(3, 2)
+
+#define SCU_PCIE_CONF  0x180
+#define  SCU_PCIE_CONF_VGA_EN  BIT(0)
+#define  SCU_PCIE_CONF_VGA_EN_MMIO BIT(1)
+#define  SCU_PCIE_CONF_VGA_EN_LPC  BIT(2)
+#define  SCU_PCIE_CONF_VGA_EN_MSI  BIT(3)
+#define  SCU_PCIE_CONF_VGA_EN_MCTP BIT(4)
+#define  SCU_PCIE_CONF_VGA_EN_IRQ  BIT(5)
+#define  SCU_PCIE_CONF_VGA_EN_DMA  BIT(6)
+#define  SCU_PCIE_CONF_BMC_EN  BIT(8)
+#define  SCU_PCIE_CONF_BMC_EN_MMIO BIT(9)
+#define  SCU_PCIE_CONF_BMC_EN_MSI  BIT(11)
+#define  SCU_PCIE_CONF_BMC_EN_MCTP BIT(12)
+#define  SCU_PCIE_CONF_BMC_EN_IRQ  BIT(13)
+#define  SCU_PCIE_CONF_BMC_EN_DMA  BIT(14)
+#define  SCU_PCIE_CONF_RSVDGENMASK(19, 18)
+
+#define SDMC_CONF  0x004
+#define  SDMC_CONF_MEM GENMASK(1, 0)
+#define SDMC_REMAP 0x008
+#define  SDMC_REMAP_MAGIC  GENMASK(17, 16)
+
+#define XDMA_CMD_SIZE  4
+#define XDMA_CMDQ_SIZE PAGE_SIZE
+#define XDMA_BYTE_ALIGN16
+#define XDMA_MAX_LINE_SIZE BIT(10)
+#define XDMA_NUM_CMDS  \
+   (XDMA_CMDQ_SIZE / sizeof(struct aspeed_xdma_cmd))
+#define XDMA_NUM_DEBUGFS_REGS  6
+
+#define XDMA_CMD_BMC_CHECK BIT(0)
+#define XDMA_CMD_BMC_ADDR  GENMASK(29, 4)
+#define XDMA_CMD_BMC_DIR_USBIT(31)
+
+#define XDMA_CMD_COMM1_HI_HOST_PITCH   GENMASK(14, 3)
+#define XDMA_CMD_COMM1_HI_BMC_PITCHGENMASK(30, 19)
+
+#define XDMA_CMD_CONF_CHECKBIT(1)
+#define 

Re: [PATCH v3 2/8] drivers/soc: Add Aspeed XDMA Engine Driver

2019-05-30 Thread Eduardo Valentin
On Wed, May 29, 2019 at 01:10:02PM -0500, Eddie James wrote:
> The XDMA engine embedded in the AST2500 SOC performs PCI DMA operations
> between the SOC (acting as a BMC) and a host processor in a server.
> 
> This commit adds a driver to control the XDMA engine and adds functions
> to initialize the hardware and memory and start DMA operations.
> 
> Signed-off-by: Eddie James 
> ---
>  MAINTAINERS  |  10 +
>  drivers/soc/aspeed/Kconfig   |   8 +
>  drivers/soc/aspeed/Makefile  |   1 +
>  drivers/soc/aspeed/aspeed-xdma.c | 520 
> +++
>  include/uapi/linux/aspeed-xdma.h |  26 ++
>  5 files changed, 565 insertions(+)
>  create mode 100644 drivers/soc/aspeed/aspeed-xdma.c
>  create mode 100644 include/uapi/linux/aspeed-xdma.h
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 7e09dda..84e2b62 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -2584,6 +2584,16 @@ S: Maintained
>  F:   drivers/media/platform/aspeed-video.c
>  F:   Documentation/devicetree/bindings/media/aspeed-video.txt
>  
> +ASPEED XDMA ENGINE DRIVER
> +M:   Eddie James 
> +L:   linux-asp...@lists.ozlabs.org (moderated for non-subscribers)
> +L:   linux-kernel@vger.kernel.org
> +S:   Maintained
> +F:   Documentation/devicetree/bindings/misc/aspeed,xdma.txt
> +F:   Documentation/ABI/testing/sysfs-devices-platform-aspeed-xdma
> +F:   drivers/soc/aspeed/aspeed-xdma.c
> +F:   include/uapi/linux/aspeed-xdma.h
> +
>  ASUS NOTEBOOKS AND EEEPC ACPI/WMI EXTRAS DRIVERS
>  M:   Corentin Chary 
>  L:   acpi4asus-u...@lists.sourceforge.net
> diff --git a/drivers/soc/aspeed/Kconfig b/drivers/soc/aspeed/Kconfig
> index 323e177..8b08310 100644
> --- a/drivers/soc/aspeed/Kconfig
> +++ b/drivers/soc/aspeed/Kconfig
> @@ -29,4 +29,12 @@ config ASPEED_P2A_CTRL
> ioctl()s, the driver also provides an interface for userspace 
> mappings to
> a pre-defined region.
>  
> +config ASPEED_XDMA
> + tristate "Aspeed XDMA Engine Driver"
> + depends on SOC_ASPEED && REGMAP && MFD_SYSCON && HAS_DMA
> + help
> +   Enable support for the Aspeed XDMA Engine found on the Aspeed AST2500
> +   SOC. The XDMA engine can perform automatic PCI DMA operations between
> +   the AST2500 (acting as a BMC) and a host processor.
> +
>  endmenu
> diff --git a/drivers/soc/aspeed/Makefile b/drivers/soc/aspeed/Makefile
> index b64be47..977b046 100644
> --- a/drivers/soc/aspeed/Makefile
> +++ b/drivers/soc/aspeed/Makefile
> @@ -2,3 +2,4 @@
>  obj-$(CONFIG_ASPEED_LPC_CTRL)+= aspeed-lpc-ctrl.o
>  obj-$(CONFIG_ASPEED_LPC_SNOOP)   += aspeed-lpc-snoop.o
>  obj-$(CONFIG_ASPEED_P2A_CTRL)+= aspeed-p2a-ctrl.o
> +obj-$(CONFIG_ASPEED_XDMA)+= aspeed-xdma.o
> diff --git a/drivers/soc/aspeed/aspeed-xdma.c 
> b/drivers/soc/aspeed/aspeed-xdma.c
> new file mode 100644
> index 000..3dc0ce4
> --- /dev/null
> +++ b/drivers/soc/aspeed/aspeed-xdma.c
> @@ -0,0 +1,520 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +// Copyright IBM Corp 2019
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#define DEVICE_NAME  "aspeed-xdma"
> +
> +#define SCU_STRAP0x070
> +#define  SCU_STRAP_VGA_MEM   GENMASK(3, 2)
> +
> +#define SCU_PCIE_CONF0x180
> +#define  SCU_PCIE_CONF_VGA_ENBIT(0)
> +#define  SCU_PCIE_CONF_VGA_EN_MMIO   BIT(1)
> +#define  SCU_PCIE_CONF_VGA_EN_LPCBIT(2)
> +#define  SCU_PCIE_CONF_VGA_EN_MSIBIT(3)
> +#define  SCU_PCIE_CONF_VGA_EN_MCTP   BIT(4)
> +#define  SCU_PCIE_CONF_VGA_EN_IRQBIT(5)
> +#define  SCU_PCIE_CONF_VGA_EN_DMABIT(6)
> +#define  SCU_PCIE_CONF_BMC_ENBIT(8)
> +#define  SCU_PCIE_CONF_BMC_EN_MMIO   BIT(9)
> +#define  SCU_PCIE_CONF_BMC_EN_MSIBIT(11)
> +#define  SCU_PCIE_CONF_BMC_EN_MCTP   BIT(12)
> +#define  SCU_PCIE_CONF_BMC_EN_IRQBIT(13)
> +#define  SCU_PCIE_CONF_BMC_EN_DMABIT(14)
> +#define  SCU_PCIE_CONF_RSVD  GENMASK(19, 18)
> +
> +#define SDMC_CONF0x004
> +#define  SDMC_CONF_MEM   GENMASK(1, 0)
> +#define SDMC_REMAP   0x008
> +#define  SDMC_REMAP_MAGICGENMASK(17, 16)
> +
> +#define XDMA_CMD_SIZE4
> +#define XDMA_CMDQ_SIZE   PAGE_SIZE
> +#define XDMA_BYTE_ALIGN  16
> +#define XDMA_MAX_LINE_SIZE   BIT(10)
> +#define XDMA_NUM_CMDS\
> + (XDMA_CMDQ_SIZE / sizeof(struct aspeed_xdma_cmd))
> +#define XDMA_NUM_DEBUGFS_REGS6
> +
> +#define XDMA_CMD_BMC_CHECK   BIT(0)
> +#define XDMA_CMD_BMC_ADDRGENMASK(29, 4)
> +#define XDMA_CMD_BMC_DIR_US  

[PATCH v3 2/8] drivers/soc: Add Aspeed XDMA Engine Driver

2019-05-29 Thread Eddie James
The XDMA engine embedded in the AST2500 SOC performs PCI DMA operations
between the SOC (acting as a BMC) and a host processor in a server.

This commit adds a driver to control the XDMA engine and adds functions
to initialize the hardware and memory and start DMA operations.

Signed-off-by: Eddie James 
---
 MAINTAINERS  |  10 +
 drivers/soc/aspeed/Kconfig   |   8 +
 drivers/soc/aspeed/Makefile  |   1 +
 drivers/soc/aspeed/aspeed-xdma.c | 520 +++
 include/uapi/linux/aspeed-xdma.h |  26 ++
 5 files changed, 565 insertions(+)
 create mode 100644 drivers/soc/aspeed/aspeed-xdma.c
 create mode 100644 include/uapi/linux/aspeed-xdma.h

diff --git a/MAINTAINERS b/MAINTAINERS
index 7e09dda..84e2b62 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2584,6 +2584,16 @@ S:   Maintained
 F: drivers/media/platform/aspeed-video.c
 F: Documentation/devicetree/bindings/media/aspeed-video.txt
 
+ASPEED XDMA ENGINE DRIVER
+M: Eddie James 
+L: linux-asp...@lists.ozlabs.org (moderated for non-subscribers)
+L: linux-kernel@vger.kernel.org
+S: Maintained
+F: Documentation/devicetree/bindings/misc/aspeed,xdma.txt
+F: Documentation/ABI/testing/sysfs-devices-platform-aspeed-xdma
+F: drivers/soc/aspeed/aspeed-xdma.c
+F: include/uapi/linux/aspeed-xdma.h
+
 ASUS NOTEBOOKS AND EEEPC ACPI/WMI EXTRAS DRIVERS
 M: Corentin Chary 
 L: acpi4asus-u...@lists.sourceforge.net
diff --git a/drivers/soc/aspeed/Kconfig b/drivers/soc/aspeed/Kconfig
index 323e177..8b08310 100644
--- a/drivers/soc/aspeed/Kconfig
+++ b/drivers/soc/aspeed/Kconfig
@@ -29,4 +29,12 @@ config ASPEED_P2A_CTRL
  ioctl()s, the driver also provides an interface for userspace 
mappings to
  a pre-defined region.
 
+config ASPEED_XDMA
+   tristate "Aspeed XDMA Engine Driver"
+   depends on SOC_ASPEED && REGMAP && MFD_SYSCON && HAS_DMA
+   help
+ Enable support for the Aspeed XDMA Engine found on the Aspeed AST2500
+ SOC. The XDMA engine can perform automatic PCI DMA operations between
+ the AST2500 (acting as a BMC) and a host processor.
+
 endmenu
diff --git a/drivers/soc/aspeed/Makefile b/drivers/soc/aspeed/Makefile
index b64be47..977b046 100644
--- a/drivers/soc/aspeed/Makefile
+++ b/drivers/soc/aspeed/Makefile
@@ -2,3 +2,4 @@
 obj-$(CONFIG_ASPEED_LPC_CTRL)  += aspeed-lpc-ctrl.o
 obj-$(CONFIG_ASPEED_LPC_SNOOP) += aspeed-lpc-snoop.o
 obj-$(CONFIG_ASPEED_P2A_CTRL)  += aspeed-p2a-ctrl.o
+obj-$(CONFIG_ASPEED_XDMA)  += aspeed-xdma.o
diff --git a/drivers/soc/aspeed/aspeed-xdma.c b/drivers/soc/aspeed/aspeed-xdma.c
new file mode 100644
index 000..3dc0ce4
--- /dev/null
+++ b/drivers/soc/aspeed/aspeed-xdma.c
@@ -0,0 +1,520 @@
+// SPDX-License-Identifier: GPL-2.0+
+// Copyright IBM Corp 2019
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#define DEVICE_NAME"aspeed-xdma"
+
+#define SCU_STRAP  0x070
+#define  SCU_STRAP_VGA_MEM GENMASK(3, 2)
+
+#define SCU_PCIE_CONF  0x180
+#define  SCU_PCIE_CONF_VGA_EN  BIT(0)
+#define  SCU_PCIE_CONF_VGA_EN_MMIO BIT(1)
+#define  SCU_PCIE_CONF_VGA_EN_LPC  BIT(2)
+#define  SCU_PCIE_CONF_VGA_EN_MSI  BIT(3)
+#define  SCU_PCIE_CONF_VGA_EN_MCTP BIT(4)
+#define  SCU_PCIE_CONF_VGA_EN_IRQ  BIT(5)
+#define  SCU_PCIE_CONF_VGA_EN_DMA  BIT(6)
+#define  SCU_PCIE_CONF_BMC_EN  BIT(8)
+#define  SCU_PCIE_CONF_BMC_EN_MMIO BIT(9)
+#define  SCU_PCIE_CONF_BMC_EN_MSI  BIT(11)
+#define  SCU_PCIE_CONF_BMC_EN_MCTP BIT(12)
+#define  SCU_PCIE_CONF_BMC_EN_IRQ  BIT(13)
+#define  SCU_PCIE_CONF_BMC_EN_DMA  BIT(14)
+#define  SCU_PCIE_CONF_RSVDGENMASK(19, 18)
+
+#define SDMC_CONF  0x004
+#define  SDMC_CONF_MEM GENMASK(1, 0)
+#define SDMC_REMAP 0x008
+#define  SDMC_REMAP_MAGIC  GENMASK(17, 16)
+
+#define XDMA_CMD_SIZE  4
+#define XDMA_CMDQ_SIZE PAGE_SIZE
+#define XDMA_BYTE_ALIGN16
+#define XDMA_MAX_LINE_SIZE BIT(10)
+#define XDMA_NUM_CMDS  \
+   (XDMA_CMDQ_SIZE / sizeof(struct aspeed_xdma_cmd))
+#define XDMA_NUM_DEBUGFS_REGS  6
+
+#define XDMA_CMD_BMC_CHECK BIT(0)
+#define XDMA_CMD_BMC_ADDR  GENMASK(29, 4)
+#define XDMA_CMD_BMC_DIR_USBIT(31)
+
+#define XDMA_CMD_COMM1_HI_HOST_PITCH   GENMASK(14, 3)
+#define XDMA_CMD_COMM1_HI_BMC_PITCHGENMASK(30, 19)
+
+#define XDMA_CMD_CONF_CHECKBIT(1)
+#define XDMA_CMD_CONF_LINE_SIZEGENMASK(14, 4)
+#define XDMA_CMD_CONF_IRQ_BMC  BIT(15)
+#define XDMA_CMD_CONF_NUM_LINES