From: Syed Saba Kareem <[email protected]>
Add ACP register header file for RPL platform.
Signed-off-by: Syed Saba Kareem <[email protected]>
Reviewed-by: Vijendar Mukunda <[email protected]>
---
.../soc/amd/rpl/rpl_acp6x_chip_offset_byte.h | 30 +++++++++++++++++++
1 file changed, 30 insertions(+)
create mode 100644 sound/soc/amd/rpl/rpl_acp6x_chip_offset_byte.h
diff --git a/sound/soc/amd/rpl/rpl_acp6x_chip_offset_byte.h b/sound/soc/amd/rpl/rpl_acp6x_chip_offset_byte.h
new file mode 100644
index 000000000000..456498f5396d
--- /dev/null
+++ b/sound/soc/amd/rpl/rpl_acp6x_chip_offset_byte.h
@@ -0,0 +1,30 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * AMD ACP 6.2 Register Documentation
+ *
+ * Copyright 2022 Advanced Micro Devices, Inc.
+ */
+
+#ifndef _rpl_acp6x_OFFSET_HEADER
+#define _rpl_acp6x_OFFSET_HEADER
+
+/* Registers from ACP_CLKRST block */
+#define ACP_SOFT_RESET 0x1241000
+#define ACP_CONTROL 0x1241004
+#define ACP_STATUS 0x1241008
+#define ACP_DYNAMIC_CG_MASTER_CONTROL 0x1241010
+#define ACP_PGFSM_CONTROL 0x124101C
+#define ACP_PGFSM_STATUS 0x1241020
+#define ACP_CLKMUX_SEL 0x1241024
+
+/* Registers from ACP_AON block */
+#define ACP_PME_EN 0x1241400
+#define ACP_DEVICE_STATE 0x1241404
+#define AZ_DEVICE_STATE 0x1241408
+#define ACP_PIN_CONFIG 0x1241440
+#define ACP_PAD_PULLUP_CTRL 0x1241444
+#define ACP_PAD_PULLDOWN_CTRL 0x1241448
+#define ACP_PAD_DRIVE_STRENGTH_CTRL 0x124144C
+#define ACP_PAD_SCHMEN_CTRL 0x1241450
+
+#endif
--
2.25.1
From: Syed Saba Kareem <[email protected]>
Add RPL Platform ACP init/de-init functions.
Signed-off-by: Syed Saba Kareem <[email protected]>
Reviewed-by: Vijendar Mukunda <[email protected]>
---
sound/soc/amd/rpl/rpl-pci-acp6x.c | 92 +++++++++++++++++++++++++++++++
1 file changed, 92 insertions(+)
diff --git a/sound/soc/amd/rpl/rpl-pci-acp6x.c b/sound/soc/amd/rpl/rpl-pci-acp6x.c
index 7a82a978cf24..71ae90a00f36 100644
--- a/sound/soc/amd/rpl/rpl-pci-acp6x.c
+++ b/sound/soc/amd/rpl/rpl-pci-acp6x.c
@@ -17,6 +17,88 @@ struct rpl_dev_data {
void __iomem *acp6x_base;
};
+static int rpl_power_on(void __iomem *acp_base)
+{
+ u32 val;
+ int timeout;
+
+ val = rpl_acp_readl(acp_base + ACP_PGFSM_STATUS);
+
+ if (!val)
+ return val;
+
+ if ((val & ACP_PGFSM_STATUS_MASK) != ACP_POWER_ON_IN_PROGRESS)
+ rpl_acp_writel(ACP_PGFSM_CNTL_POWER_ON_MASK, acp_base + ACP_PGFSM_CONTROL);
+ timeout = 0;
+ while (++timeout < 500) {
+ val = rpl_acp_readl(acp_base + ACP_PGFSM_STATUS);
+ if (!val)
+ return 0;
+ udelay(1);
+ }
+ return -ETIMEDOUT;
+}
+
+static int rpl_reset(void __iomem *acp_base)
+{
+ u32 val;
+ int timeout;
+
+ rpl_acp_writel(1, acp_base + ACP_SOFT_RESET);
+ timeout = 0;
+ while (++timeout < 500) {
+ val = rpl_acp_readl(acp_base + ACP_SOFT_RESET);
+ if (val & ACP_SOFT_RESET_SOFTRESET_AUDDONE_MASK)
+ break;
+ cpu_relax();
+ }
+ rpl_acp_writel(0, acp_base + ACP_SOFT_RESET);
+ timeout = 0;
+ while (++timeout < 500) {
+ val = rpl_acp_readl(acp_base + ACP_SOFT_RESET);
+ if (!val)
+ return 0;
+ cpu_relax();
+ }
+ return -ETIMEDOUT;
+}
+
+static int rpl_init(void __iomem *acp_base)
+{
+ int ret;
+
+ /* power on */
+ ret = rpl_power_on(acp_base);
+ if (ret) {
+ pr_err("ACP power on failed\n");
+ return ret;
+ }
+ rpl_acp_writel(0x01, acp_base + ACP_CONTROL);
+ /* Reset */
+ ret = rpl_reset(acp_base);
+ if (ret) {
+ pr_err("ACP reset failed\n");
+ return ret;
+ }
+ rpl_acp_writel(0x03, acp_base + ACP_CLKMUX_SEL);
+ return 0;
+}
+
+static int rpl_deinit(void __iomem *acp_base)
+{
+ int ret;
+
+ /* Reset */
+ ret = rpl_reset(acp_base);
+ if (ret) {
+ pr_err("ACP reset failed\n");
+ return ret;
+ }
+ rpl_acp_writel(0x00, acp_base + ACP_CLKMUX_SEL);
+ rpl_acp_writel(0x00, acp_base + ACP_CONTROL);
+ return 0;
+}
+
static int snd_rpl_probe(struct pci_dev *pci,
const struct pci_device_id *pci_id)
{
@@ -59,6 +141,9 @@ static int snd_rpl_probe(struct pci_dev *pci,
}
pci_set_master(pci);
pci_set_drvdata(pci, adata);
+ ret = rpl_init(adata->acp6x_base);
+ if (ret)
+ goto release_regions;
return 0;
release_regions:
pci_release_regions(pci);
@@ -70,6 +155,13 @@ static int snd_rpl_probe(struct pci_dev *pci,
static void snd_rpl_remove(struct pci_dev *pci)
{
+ struct rpl_dev_data *adata;
+ int ret;
+
+ adata = pci_get_drvdata(pci);
+ ret = rpl_deinit(adata->acp6x_base);
+ if (ret)
+ dev_err(&pci->dev, "ACP de-init failed\n");
pci_release_regions(pci);
pci_disable_device(pci);
}
--
2.25.1
From: Syed Saba Kareem <[email protected]>
ACP is a PCI audio device.
This patch adds PCI driver to bind to this device and get
PCI resources.
Signed-off-by: Syed Saba Kareem <[email protected]>
Reviewed-by: Vijendar Mukunda <[email protected]>
---
sound/soc/amd/rpl/rpl-pci-acp6x.c | 95 +++++++++++++++++++++++++++++++
sound/soc/amd/rpl/rpl_acp6x.h | 21 +++++++
2 files changed, 116 insertions(+)
create mode 100644 sound/soc/amd/rpl/rpl-pci-acp6x.c
create mode 100644 sound/soc/amd/rpl/rpl_acp6x.h
diff --git a/sound/soc/amd/rpl/rpl-pci-acp6x.c b/sound/soc/amd/rpl/rpl-pci-acp6x.c
new file mode 100644
index 000000000000..7a82a978cf24
--- /dev/null
+++ b/sound/soc/amd/rpl/rpl-pci-acp6x.c
@@ -0,0 +1,95 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * AMD RPL ACP PCI Driver
+ *
+ * Copyright 2022 Advanced Micro Devices, Inc.
+ */
+
+#include <linux/pci.h>
+#include <linux/module.h>
+#include <linux/io.h>
+#include <linux/delay.h>
+#include <linux/platform_device.h>
+
+#include "rpl_acp6x.h"
+
+struct rpl_dev_data {
+ void __iomem *acp6x_base;
+};
+
+static int snd_rpl_probe(struct pci_dev *pci,
+ const struct pci_device_id *pci_id)
+{
+ struct rpl_dev_data *adata;
+ u32 addr;
+ int ret;
+
+ /* RPL device check */
+ switch (pci->revision) {
+ case 0x62:
+ break;
+ default:
+ dev_dbg(&pci->dev, "acp6x pci device not found\n");
+ return -ENODEV;
+ }
+ if (pci_enable_device(pci)) {
+ dev_err(&pci->dev, "pci_enable_device failed\n");
+ return -ENODEV;
+ }
+
+ ret = pci_request_regions(pci, "AMD ACP6x audio");
+ if (ret < 0) {
+ dev_err(&pci->dev, "pci_request_regions failed\n");
+ goto disable_pci;
+ }
+
+ adata = devm_kzalloc(&pci->dev, sizeof(struct rpl_dev_data),
+ GFP_KERNEL);
+ if (!adata) {
+ ret = -ENOMEM;
+ goto release_regions;
+ }
+
+ addr = pci_resource_start(pci, 0);
+ adata->acp6x_base = devm_ioremap(&pci->dev, addr,
+ pci_resource_len(pci, 0));
+ if (!adata->acp6x_base) {
+ ret = -ENOMEM;
+ goto release_regions;
+ }
+ pci_set_master(pci);
+ pci_set_drvdata(pci, adata);
+ return 0;
+release_regions:
+ pci_release_regions(pci);
+disable_pci:
+ pci_disable_device(pci);
+
+ return ret;
+}
+
+static void snd_rpl_remove(struct pci_dev *pci)
+{
+ pci_release_regions(pci);
+ pci_disable_device(pci);
+}
+
+static const struct pci_device_id snd_rpl_ids[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_AMD, ACP_DEVICE_ID),
+ .class = PCI_CLASS_MULTIMEDIA_OTHER << 8,
+ .class_mask = 0xffffff },
+ { 0, },
+};
+MODULE_DEVICE_TABLE(pci, snd_rpl_ids);
+
+static struct pci_driver rpl_acp6x_driver = {
+ .name = KBUILD_MODNAME,
+ .id_table = snd_rpl_ids,
+ .probe = snd_rpl_probe,
+ .remove = snd_rpl_remove,
+};
+
+module_pci_driver(rpl_acp6x_driver);
+
+MODULE_DESCRIPTION("AMD ACP RPL PCI driver");
+MODULE_LICENSE("GPL v2");
diff --git a/sound/soc/amd/rpl/rpl_acp6x.h b/sound/soc/amd/rpl/rpl_acp6x.h
new file mode 100644
index 000000000000..5de19d5c892e
--- /dev/null
+++ b/sound/soc/amd/rpl/rpl_acp6x.h
@@ -0,0 +1,21 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * AMD ACP Driver
+ *
+ * Copyright (C) 2021 Advanced Micro Devices, Inc. All rights reserved.
+ */
+
+#include "rpl_acp6x_chip_offset_byte.h"
+
+#define ACP_DEVICE_ID 0x15E2
+#define ACP6x_PHY_BASE_ADDRESS 0x1240000
+
+static inline u32 rpl_acp_readl(void __iomem *base_addr)
+{
+ return readl(base_addr - ACP6x_PHY_BASE_ADDRESS);
+}
+
+static inline void rpl_acp_writel(u32 val, void __iomem *base_addr)
+{
+ writel(val, base_addr - ACP6x_PHY_BASE_ADDRESS);
+}
--
2.25.1
From: Syed Saba Kareem <[email protected]>
Add RPL Platform ACP PCI driver pm ops.
Signed-off-by: Syed Saba Kareem <[email protected]>
Reviewed-by: Vijendar Mukunda <[email protected]>
---
sound/soc/amd/rpl/rpl-pci-acp6x.c | 40 +++++++++++++++++++++++++++++++
sound/soc/amd/rpl/rpl_acp6x.h | 15 ++++++++++++
2 files changed, 55 insertions(+)
diff --git a/sound/soc/amd/rpl/rpl-pci-acp6x.c b/sound/soc/amd/rpl/rpl-pci-acp6x.c
index 71ae90a00f36..a8e548ed991b 100644
--- a/sound/soc/amd/rpl/rpl-pci-acp6x.c
+++ b/sound/soc/amd/rpl/rpl-pci-acp6x.c
@@ -10,6 +10,7 @@
#include <linux/io.h>
#include <linux/delay.h>
#include <linux/platform_device.h>
+#include <linux/pm_runtime.h>
#include "rpl_acp6x.h"
@@ -144,6 +145,11 @@ static int snd_rpl_probe(struct pci_dev *pci,
ret = rpl_init(adata->acp6x_base);
if (ret)
goto release_regions;
+ pm_runtime_set_autosuspend_delay(&pci->dev, ACP_SUSPEND_DELAY_MS);
+ pm_runtime_use_autosuspend(&pci->dev);
+ pm_runtime_put_noidle(&pci->dev);
+ pm_runtime_allow(&pci->dev);
+
return 0;
release_regions:
pci_release_regions(pci);
@@ -153,6 +159,35 @@ static int snd_rpl_probe(struct pci_dev *pci,
return ret;
}
+static int __maybe_unused snd_rpl_suspend(struct device *dev)
+{
+ struct rpl_dev_data *adata;
+ int ret;
+
+ adata = dev_get_drvdata(dev);
+ ret = rpl_deinit(adata->acp6x_base);
+ if (ret)
+ dev_err(dev, "ACP de-init failed\n");
+ return ret;
+}
+
+static int __maybe_unused snd_rpl_resume(struct device *dev)
+{
+ struct rpl_dev_data *adata;
+ int ret;
+
+ adata = dev_get_drvdata(dev);
+ ret = rpl_init(adata->acp6x_base);
+ if (ret)
+ dev_err(dev, "ACP init failed\n");
+ return ret;
+}
+
+static const struct dev_pm_ops rpl_pm = {
+ SET_RUNTIME_PM_OPS(snd_rpl_suspend, snd_rpl_resume, NULL)
+ SET_SYSTEM_SLEEP_PM_OPS(snd_rpl_suspend, snd_rpl_resume)
+};
+
static void snd_rpl_remove(struct pci_dev *pci)
{
struct rpl_dev_data *adata;
@@ -162,6 +197,8 @@ static void snd_rpl_remove(struct pci_dev *pci)
ret = rpl_deinit(adata->acp6x_base);
if (ret)
dev_err(&pci->dev, "ACP de-init failed\n");
+ pm_runtime_forbid(&pci->dev);
+ pm_runtime_get_noresume(&pci->dev);
pci_release_regions(pci);
pci_disable_device(pci);
}
@@ -179,6 +216,9 @@ static struct pci_driver rpl_acp6x_driver = {
.id_table = snd_rpl_ids,
.probe = snd_rpl_probe,
.remove = snd_rpl_remove,
+ .driver = {
+ .pm = &rpl_pm,
+ }
};
module_pci_driver(rpl_acp6x_driver);
diff --git a/sound/soc/amd/rpl/rpl_acp6x.h b/sound/soc/amd/rpl/rpl_acp6x.h
index 5de19d5c892e..f5816a33632e 100644
--- a/sound/soc/amd/rpl/rpl_acp6x.h
+++ b/sound/soc/amd/rpl/rpl_acp6x.h
@@ -10,6 +10,21 @@
#define ACP_DEVICE_ID 0x15E2
#define ACP6x_PHY_BASE_ADDRESS 0x1240000
+#define ACP_SOFT_RESET_SOFTRESET_AUDDONE_MASK 0x00010001
+#define ACP_PGFSM_CNTL_POWER_ON_MASK 1
+#define ACP_PGFSM_CNTL_POWER_OFF_MASK 0
+#define ACP_PGFSM_STATUS_MASK 3
+#define ACP_POWERED_ON 0
+#define ACP_POWER_ON_IN_PROGRESS 1
+#define ACP_POWERED_OFF 2
+#define ACP_POWER_OFF_IN_PROGRESS 3
+
+#define DELAY_US 5
+#define ACP_COUNTER 20000
+
+/* time in ms for runtime suspend delay */
+#define ACP_SUSPEND_DELAY_MS 2000
+
static inline u32 rpl_acp_readl(void __iomem *base_addr)
{
return readl(base_addr - ACP6x_PHY_BASE_ADDRESS);
--
2.25.1
From: Syed Saba Kareem <[email protected]>
RPL Platform drivers can be built by selecting necessary
kernel config option.
The patch enables build support of the same.
Signed-off-by: Syed Saba Kareem <[email protected]>
Reviewed-by: Vijendar Mukunda <[email protected]>
---
sound/soc/amd/Kconfig | 10 ++++++++++
sound/soc/amd/Makefile | 1 +
sound/soc/amd/rpl/Makefile | 5 +++++
3 files changed, 16 insertions(+)
create mode 100644 sound/soc/amd/rpl/Makefile
diff --git a/sound/soc/amd/Kconfig b/sound/soc/amd/Kconfig
index 9c2fef2ce89f..08f5289dac54 100644
--- a/sound/soc/amd/Kconfig
+++ b/sound/soc/amd/Kconfig
@@ -117,3 +117,13 @@ config SND_AMD_ACP_CONFIG
driver modules to use
source "sound/soc/amd/acp/Kconfig"
+
+config SND_SOC_AMD_RPL_ACP6x
+ tristate "AMD Audio Coprocessor-v6.2 RPL support"
+ depends on X86 && PCI
+ help
+ This option enables Audio Coprocessor i.e ACP v6.2 support on
+ AMD RPL platform. By enabling this flag build will be
+ triggered for ACP PCI driver.
+ Say m if you have such a device.
+ If unsure select "N".
diff --git a/sound/soc/amd/Makefile b/sound/soc/amd/Makefile
index 8823f6f28611..0592e7c5c407 100644
--- a/sound/soc/amd/Makefile
+++ b/sound/soc/amd/Makefile
@@ -17,3 +17,4 @@ obj-$(CONFIG_SND_SOC_AMD_ACP5x) += vangogh/
obj-$(CONFIG_SND_SOC_AMD_ACP6x) += yc/
obj-$(CONFIG_SND_SOC_AMD_ACP_COMMON) += acp/
obj-$(CONFIG_SND_AMD_ACP_CONFIG) += snd-acp-config.o
+obj-$(CONFIG_SND_SOC_AMD_RPL_ACP6x) += rpl/
diff --git a/sound/soc/amd/rpl/Makefile b/sound/soc/amd/rpl/Makefile
new file mode 100644
index 000000000000..11a33a05e94b
--- /dev/null
+++ b/sound/soc/amd/rpl/Makefile
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0+
+# RPL platform Support
+snd-rpl-pci-acp6x-objs := rpl-pci-acp6x.o
+
+obj-$(CONFIG_SND_SOC_AMD_RPL_ACP6x) += snd-rpl-pci-acp6x.o
--
2.25.1
Hi--
On 7/20/22 23:10, syed sabakareem wrote:
> diff --git a/sound/soc/amd/Kconfig b/sound/soc/amd/Kconfig
> index 9c2fef2ce89f..08f5289dac54 100644
> --- a/sound/soc/amd/Kconfig
> +++ b/sound/soc/amd/Kconfig
> @@ -117,3 +117,13 @@ config SND_AMD_ACP_CONFIG
> driver modules to use
>
> source "sound/soc/amd/acp/Kconfig"
> +
> +config SND_SOC_AMD_RPL_ACP6x
> + tristate "AMD Audio Coprocessor-v6.2 RPL support"
> + depends on X86 && PCI
> + help
> + This option enables Audio Coprocessor i.e ACP v6.2 support on
If that "i.e" is supposed to mean "that is", then it should be "i.e.".
Or does it mean something else here?
> + AMD RPL platform. By enabling this flag build will be
> + triggered for ACP PCI driver.
> + Say m if you have such a device.
> + If unsure select "N".
--
~Randy
On Thu, Jul 21, 2022 at 11:40:02AM +0530, syed sabakareem wrote:
> From: Syed Saba Kareem <[email protected]>
>
> RPL Platform drivers can be built by selecting necessary
> kernel config option.
> The patch enables build support of the same.
This breaks an x86 allmodconfig build:
/build/stage/linux/sound/soc/amd/acp/acp-platform.c: In function ‘i2s_irq_handle
r’:
/build/stage/linux/sound/soc/amd/acp/acp-platform.c:108:31: error: ‘struct acp_d
ev_data’ has no member named ‘stream’
108 | stream = adata->stream[i];
| ^~
On Thu, Jul 21, 2022 at 08:36:53PM +0100, Mark Brown wrote:
> On Thu, Jul 21, 2022 at 11:40:02AM +0530, syed sabakareem wrote:
> > From: Syed Saba Kareem <[email protected]>
> >
> > RPL Platform drivers can be built by selecting necessary
> > kernel config option.
> > The patch enables build support of the same.
>
> This breaks an x86 allmodconfig build:
>
> /build/stage/linux/sound/soc/amd/acp/acp-platform.c: In function ‘i2s_irq_handle
> r’:
> /build/stage/linux/sound/soc/amd/acp/acp-platform.c:108:31: error: ‘struct acp_d
> ev_data’ has no member named ‘stream’
> 108 | stream = adata->stream[i];
> | ^~
Sorry, this was actually a different commit earlier in the branch
triggering this.
[AMD Official Use Only - General]
-----Original Message-----
From: Randy Dunlap <[email protected]>
Sent: Thursday, July 21, 2022 7:32 PM
To: Saba Kareem, Syed <[email protected]>; [email protected]; [email protected]
Cc: Deucher, Alexander <[email protected]>; Hiregoudar, Basavaraj <[email protected]>; Dommati, Sunil-kumar <[email protected]>; Mukunda, Vijendar <[email protected]>; Liam Girdwood <[email protected]>; Jaroslav Kysela <[email protected]>; Takashi Iwai <[email protected]>; Ajit Kumar Pandey <[email protected]>; Pierre-Louis Bossart <[email protected]>; Daniel Baluta <[email protected]>; Lucas Tanure <[email protected]>; Julian Braha <[email protected]>; Bard Liao <[email protected]>; open list <[email protected]>
Subject: Re: [PATCH 5/5] ASoC: amd: enable RPL Platform acp drivers build
[CAUTION: External Email]
Hi--
On 7/20/22 23:10, syed sabakareem wrote:
> diff --git a/sound/soc/amd/Kconfig b/sound/soc/amd/Kconfig index
> 9c2fef2ce89f..08f5289dac54 100644
> --- a/sound/soc/amd/Kconfig
> +++ b/sound/soc/amd/Kconfig
> @@ -117,3 +117,13 @@ config SND_AMD_ACP_CONFIG
> driver modules to use
>
> source "sound/soc/amd/acp/Kconfig"
> +
> +config SND_SOC_AMD_RPL_ACP6x
> + tristate "AMD Audio Coprocessor-v6.2 RPL support"
> + depends on X86 && PCI
> + help
> + This option enables Audio Coprocessor i.e ACP v6.2 support
> +on
If that "i.e" is supposed to mean "that is", then it should be "i.e.".
Or does it mean something else here?
It is a typo mistake. Will correct it.
> + AMD RPL platform. By enabling this flag build will be
> + triggered for ACP PCI driver.
> + Say m if you have such a device.
> + If unsure select "N".
--
~Randy
On Thu, 21 Jul 2022 11:39:58 +0530, syed sabakareem wrote:
> From: Syed Saba Kareem <[email protected]>
>
> Add ACP register header file for RPL platform.
>
>
Applied to
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
Thanks!
[1/5] ASoC: amd: add RPL Platform acp header file
commit: d6a2cc9a80c2fdc10f7fde3f5f57c72e99f3bd5e
[2/5] ASoC: amd: add ACP PCI driver for RPL platform
commit: 003b9a96f27635e534452b174733c5f1ceec0b56
[3/5] ASoC: amd: add RPL Platform init/de-init functions
commit: 10599205417ee3b1d29093c85bc210c9040a6bd4
[4/5] ASoC: amd: add RPL Platform pci driver pm-ops
commit: bc1100f29d1d0bfcd36ba3690a945235ffe149c8
[5/5] ASoC: amd: enable RPL Platform acp drivers build
commit: 4fb35936a374758d5065b0a015c565436685c378
All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying
to this mail.
Thanks,
Mark