All of lore.kernel.org
 help / color / mirror / Atom feed
From: <Conor.Dooley@microchip.com>
To: <p.zabel@pengutronix.de>, <mturquette@baylibre.com>,
	<sboyd@kernel.org>, <robh+dt@kernel.org>,
	<krzysztof.kozlowski+dt@linaro.org>, <davem@davemloft.net>,
	<edumazet@google.com>, <kuba@kernel.org>, <pabeni@redhat.com>,
	<palmer@dabbelt.com>, <Nicolas.Ferre@microchip.com>,
	<Claudiu.Beznea@microchip.com>, <Daire.McNamara@microchip.com>
Cc: <paul.walmsley@sifive.com>, <aou@eecs.berkeley.edu>,
	<linux-clk@vger.kernel.org>, <devicetree@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>, <netdev@vger.kernel.org>,
	<linux-riscv@lists.infradead.org>
Subject: Re: [PATCH v1 04/14] reset: add polarfire soc reset support
Date: Thu, 30 Jun 2022 16:20:19 +0000	[thread overview]
Message-ID: <eed577e2-b416-dfea-a830-2c037e34ac64@microchip.com> (raw)
In-Reply-To: <813a3b51f82a11a86bd3af2c3299c344e08e8963.camel@pengutronix.de>

On 30/06/2022 10:12, Philipp Zabel wrote:

(This came to me oddly quoted, so I have fixed it myself)

>> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>> 
>> Hi Conor,
>> 
>> On Do, 2022-06-30 at 09:05 +0100, Conor Dooley wrote:
>> Add support for the resets on Microchip's PolarFire SoC (MPFS).
>> Reset control is a single register, wedged in between registers for
>> clock control. To fit with existed DT etc, the reset controller is
>> 
> existing                     ^
>> 
>> created using the aux device framework & set up in the clock driver.
>> 
>> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
>> ---
>>  drivers/reset/Kconfig      |   9 +++
>>  drivers/reset/Makefile     |   2 +-
>>  drivers/reset/reset-mpfs.c | 145 +++++++++++++++++++++++++++++++++++++
>>  3 files changed, 155 insertions(+), 1 deletion(-)
>>  create mode 100644 drivers/reset/reset-mpfs.c
>> 
>> diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig
>> index 93c8d07ee328..edf48951f763 100644
>> --- a/drivers/reset/Kconfig
>> +++ b/drivers/reset/Kconfig
>> @@ -122,6 +122,15 @@ config RESET_MCHP_SPARX5
>>         help
>>           This driver supports switch core reset for the Microchip Sparx5 SoC.
>> 
>> 
>> +config RESET_POLARFIRE_SOC
>> +       bool "Microchip PolarFire SoC (MPFS) Reset Driver"
>> +       depends on AUXILIARY_BUS && MCHP_CLK_MPFS
>> +       default MCHP_CLK_MPFS
>> +       help
>> +         This driver supports peripheral reset for the Microchip PolarFire SoC
>> +
>> +         CONFIG_RESET_MPFS
>> 
>This doesn't look intentional.

Correct. I fixed it when rebasing on -next and forgot to re-fix it
when I had to reset back to -rc2...

>> 
>> +
>>  config RESET_MESON
>>         tristate "Meson Reset Driver"
>>         depends on ARCH_MESON || COMPILE_TEST
>> diff --git a/drivers/reset/Makefile b/drivers/reset/Makefile
>> index a80a9c4008a7..5fac3a753858 100644
>> --- a/drivers/reset/Makefile
>> +++ b/drivers/reset/Makefile
>> @@ -17,6 +17,7 @@ obj-$(CONFIG_RESET_K210) += reset-k210.o
>>  obj-$(CONFIG_RESET_LANTIQ) += reset-lantiq.o
>>  obj-$(CONFIG_RESET_LPC18XX) += reset-lpc18xx.o
>>  obj-$(CONFIG_RESET_MCHP_SPARX5) += reset-microchip-sparx5.o
>> +obj-$(CONFIG_RESET_POLARFIRE_SOC) += reset-mpfs.o
>>  obj-$(CONFIG_RESET_MESON) += reset-meson.o
>>  obj-$(CONFIG_RESET_MESON_AUDIO_ARB) += reset-meson-audio-arb.o
>>  obj-$(CONFIG_RESET_NPCM) += reset-npcm.o
>> @@ -38,4 +39,3 @@ obj-$(CONFIG_RESET_UNIPHIER) += reset-uniphier.o
>>  obj-$(CONFIG_RESET_UNIPHIER_GLUE) += reset-uniphier-glue.o
>>  obj-$(CONFIG_RESET_ZYNQ) += reset-zynq.o
>>  obj-$(CONFIG_ARCH_ZYNQMP) += reset-zynqmp.o
>> -
>> diff --git a/drivers/reset/reset-mpfs.c b/drivers/reset/reset-mpfs.c
>> new file mode 100644
>> index 000000000000..49c47a3e6c70
>> --- /dev/null
>> +++ b/drivers/reset/reset-mpfs.c
>> @@ -0,0 +1,145 @@
>> +// SPDX-License-Identifier: GPL-2.0-only
>> +/*
>> + * PolarFire SoC (MPFS) Peripheral Clock Reset Controller
>> + *
>> + * Author: Conor Dooley <conor.dooley@microchip.com>
>> + * Copyright (c) 2022 Microchip Technology Inc. and its subsidiaries.
>> + *
>> + */
>> +#include <linux/auxiliary_bus.h>
>> +#include <linux/delay.h>
>> +#include <linux/module.h>
>> +#include <linux/platform_device.h>
>> +#include <linux/reset-controller.h>
>> +#include <dt-bindings/clock/microchip,mpfs-clock.h>
>> +#include <soc/microchip/mpfs.h>
>> +
>> +/*
>> + * The ENVM reset is the lowest bit in the register & I am using the CLK_FOO
>> + * defines in the dt to make things easier to configure - so this is accounting
>> + * for the offset of 3 there.
>> + */
>> +#define MPFS_PERIPH_OFFSET     CLK_ENVM
>> +#define MPFS_NUM_RESETS                30u
>> +#define MPFS_SLEEP_MIN_US      100
>> +#define MPFS_SLEEP_MAX_US      200
>> +
>> +/*
>> + * Peripheral clock resets
>> + */
>> +
>> +static int mpfs_assert(struct reset_controller_dev *rcdev, unsigned long id)
>> +{
>> +       u32 reg;
>> +
>> +       reg = mpfs_reset_read(rcdev->dev);
>> +       reg |= (1u << id);
>> +       mpfs_reset_write(rcdev->dev, reg);
> 
> This is missing a spinlock to protect against concurrent read-modify-
> writes.
>> 
>> +
>> +       return 0;
>> +}
>> +
>> +static int mpfs_deassert(struct reset_controller_dev *rcdev, unsigned long id)
>> +{
>> +       u32 reg, val;
>> +
>> +       reg = mpfs_reset_read(rcdev->dev);
>> +       val = reg & ~(1u << id);
> 
> You could use BIT(id) instead of (1u << id).
> 
>> +       mpfs_reset_write(rcdev->dev, val);
>> +
>> +       return 0;
>> +}
>> +
>> +static int mpfs_status(struct reset_controller_dev *rcdev, unsigned long id)
>> +{
>> +       u32 reg = mpfs_reset_read(rcdev->dev);
>> +
>> +       return (reg & (1u << id));
> 
> Side note, this works because MPFS_NUM_RESETS makes sure the sign bit
> is never hit.

I can add a comment to that effect if you want?

>> 
>> +}
>> +
>> +static int mpfs_reset(struct reset_controller_dev *rcdev, unsigned long id)
>> +{
>> +       mpfs_assert(rcdev, id);
>> +
>> +       usleep_range(MPFS_SLEEP_MIN_US, MPFS_SLEEP_MAX_US);
>> +
>> +       mpfs_deassert(rcdev, id);
>> +
>> +       return 0;
>> +}
>> +
>> +static const struct reset_control_ops mpfs_reset_ops = {
>> +       .reset = mpfs_reset,
>> +       .assert = mpfs_assert,
>> +       .deassert = mpfs_deassert,
>> +       .status = mpfs_status,
>> +};
>> +
>> +static int mpfs_reset_xlate(struct reset_controller_dev *rcdev,
>> +                           const struct of_phandle_args *reset_spec)
>> +{
>> +       unsigned int index = reset_spec->args[0];
>> +
>> +       /*
>> +        * CLK_RESERVED does not map to a clock, but it does map to a reset,
>> +        * so it has to be accounted for here. It is the reset for the fabric,
>> +        * so if this reset gets called - do not reset it.
>> +        */
>> +       if (index == CLK_RESERVED) {
>> +               dev_err(rcdev->dev, "Resetting the fabric is not supported\n");
>> +               return -EINVAL;
>> +       }
>> +
>> +       if (index < MPFS_PERIPH_OFFSET || index >= (MPFS_PERIPH_OFFSET + rcdev->nr_resets)) {
>> +               dev_err(rcdev->dev, "Invalid reset index %u\n", reset_spec->args[0]);
> 
> s/reset_spec->args[0]/index/
> 
>> +               return -EINVAL;
>> +       }
>> +
>> +       return index - MPFS_PERIPH_OFFSET;
>> +}
>> +
>> +static int mpfs_reset_probe(struct auxiliary_device *adev,
>> +                           const struct auxiliary_device_id *id)
>> +{
>> +       struct device *dev = &adev->dev;
>> +       struct reset_controller_dev *rcdev;
>> +       int ret;
>> +
>> +       rcdev = devm_kzalloc(dev, sizeof(*rcdev), GFP_KERNEL);
>> +       if (!rcdev)
>> +               return -ENOMEM;
>> +
>> +       rcdev->dev = dev;
>> +       rcdev->dev->parent = adev->dev.parent;
>> 
>> s/adev->dev./dev->/
>> 
>> +       rcdev->ops = &mpfs_reset_ops;
>> +       rcdev->of_node = adev->dev.parent->of_node;
>> 
>> s/adev->dev./dev->/
>> 
>> +       rcdev->of_reset_n_cells = 1;
>> +       rcdev->of_xlate = mpfs_reset_xlate;
>> +       rcdev->nr_resets = MPFS_NUM_RESETS;
>> +
>> +       ret = devm_reset_controller_register(dev, rcdev);
>> +       if (!ret)
>> +               dev_info(dev, "Registered MPFS reset controller\n");
> 
> Is this really useful information for most users?

Probably not, but it is useful for my CI haha.
If you don't like it, I will remove it.

> 
>> +
>> +       return ret;
>> +}
>> +
>> +static const struct auxiliary_device_id mpfs_reset_ids[] = {
>> +       {
>> +               .name = "clk_mpfs.reset-mpfs",
>> +       },
>> +       { }
>> +};
>> +MODULE_DEVICE_TABLE(auxiliary, mpfs_reset_ids);
>> +
>> +static struct auxiliary_driver mpfs_reset_driver = {
>> +       .probe          = mpfs_reset_probe,
>> +       .id_table       = mpfs_reset_ids,
>> +};
>> +
>> +module_auxiliary_driver(mpfs_reset_driver);
>> +
>> +MODULE_DESCRIPTION("Microchip PolarFire SoC Reset Driver");
>> +MODULE_AUTHOR("Conor Dooley <conor.dooley@microchip.com>");
>> +MODULE_LICENSE("GPL");
>> +MODULE_IMPORT_NS(MCHP_CLK_MPFS);
>> 
> regards
> Philipp

WARNING: multiple messages have this Message-ID (diff)
From: <Conor.Dooley@microchip.com>
To: <p.zabel@pengutronix.de>, <mturquette@baylibre.com>,
	<sboyd@kernel.org>, <robh+dt@kernel.org>,
	<krzysztof.kozlowski+dt@linaro.org>, <davem@davemloft.net>,
	<edumazet@google.com>, <kuba@kernel.org>, <pabeni@redhat.com>,
	<palmer@dabbelt.com>, <Nicolas.Ferre@microchip.com>,
	<Claudiu.Beznea@microchip.com>, <Daire.McNamara@microchip.com>
Cc: <paul.walmsley@sifive.com>, <aou@eecs.berkeley.edu>,
	<linux-clk@vger.kernel.org>, <devicetree@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>, <netdev@vger.kernel.org>,
	<linux-riscv@lists.infradead.org>
Subject: Re: [PATCH v1 04/14] reset: add polarfire soc reset support
Date: Thu, 30 Jun 2022 16:20:19 +0000	[thread overview]
Message-ID: <eed577e2-b416-dfea-a830-2c037e34ac64@microchip.com> (raw)
In-Reply-To: <813a3b51f82a11a86bd3af2c3299c344e08e8963.camel@pengutronix.de>

On 30/06/2022 10:12, Philipp Zabel wrote:

(This came to me oddly quoted, so I have fixed it myself)

>> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>> 
>> Hi Conor,
>> 
>> On Do, 2022-06-30 at 09:05 +0100, Conor Dooley wrote:
>> Add support for the resets on Microchip's PolarFire SoC (MPFS).
>> Reset control is a single register, wedged in between registers for
>> clock control. To fit with existed DT etc, the reset controller is
>> 
> existing                     ^
>> 
>> created using the aux device framework & set up in the clock driver.
>> 
>> Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
>> ---
>>  drivers/reset/Kconfig      |   9 +++
>>  drivers/reset/Makefile     |   2 +-
>>  drivers/reset/reset-mpfs.c | 145 +++++++++++++++++++++++++++++++++++++
>>  3 files changed, 155 insertions(+), 1 deletion(-)
>>  create mode 100644 drivers/reset/reset-mpfs.c
>> 
>> diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig
>> index 93c8d07ee328..edf48951f763 100644
>> --- a/drivers/reset/Kconfig
>> +++ b/drivers/reset/Kconfig
>> @@ -122,6 +122,15 @@ config RESET_MCHP_SPARX5
>>         help
>>           This driver supports switch core reset for the Microchip Sparx5 SoC.
>> 
>> 
>> +config RESET_POLARFIRE_SOC
>> +       bool "Microchip PolarFire SoC (MPFS) Reset Driver"
>> +       depends on AUXILIARY_BUS && MCHP_CLK_MPFS
>> +       default MCHP_CLK_MPFS
>> +       help
>> +         This driver supports peripheral reset for the Microchip PolarFire SoC
>> +
>> +         CONFIG_RESET_MPFS
>> 
>This doesn't look intentional.

Correct. I fixed it when rebasing on -next and forgot to re-fix it
when I had to reset back to -rc2...

>> 
>> +
>>  config RESET_MESON
>>         tristate "Meson Reset Driver"
>>         depends on ARCH_MESON || COMPILE_TEST
>> diff --git a/drivers/reset/Makefile b/drivers/reset/Makefile
>> index a80a9c4008a7..5fac3a753858 100644
>> --- a/drivers/reset/Makefile
>> +++ b/drivers/reset/Makefile
>> @@ -17,6 +17,7 @@ obj-$(CONFIG_RESET_K210) += reset-k210.o
>>  obj-$(CONFIG_RESET_LANTIQ) += reset-lantiq.o
>>  obj-$(CONFIG_RESET_LPC18XX) += reset-lpc18xx.o
>>  obj-$(CONFIG_RESET_MCHP_SPARX5) += reset-microchip-sparx5.o
>> +obj-$(CONFIG_RESET_POLARFIRE_SOC) += reset-mpfs.o
>>  obj-$(CONFIG_RESET_MESON) += reset-meson.o
>>  obj-$(CONFIG_RESET_MESON_AUDIO_ARB) += reset-meson-audio-arb.o
>>  obj-$(CONFIG_RESET_NPCM) += reset-npcm.o
>> @@ -38,4 +39,3 @@ obj-$(CONFIG_RESET_UNIPHIER) += reset-uniphier.o
>>  obj-$(CONFIG_RESET_UNIPHIER_GLUE) += reset-uniphier-glue.o
>>  obj-$(CONFIG_RESET_ZYNQ) += reset-zynq.o
>>  obj-$(CONFIG_ARCH_ZYNQMP) += reset-zynqmp.o
>> -
>> diff --git a/drivers/reset/reset-mpfs.c b/drivers/reset/reset-mpfs.c
>> new file mode 100644
>> index 000000000000..49c47a3e6c70
>> --- /dev/null
>> +++ b/drivers/reset/reset-mpfs.c
>> @@ -0,0 +1,145 @@
>> +// SPDX-License-Identifier: GPL-2.0-only
>> +/*
>> + * PolarFire SoC (MPFS) Peripheral Clock Reset Controller
>> + *
>> + * Author: Conor Dooley <conor.dooley@microchip.com>
>> + * Copyright (c) 2022 Microchip Technology Inc. and its subsidiaries.
>> + *
>> + */
>> +#include <linux/auxiliary_bus.h>
>> +#include <linux/delay.h>
>> +#include <linux/module.h>
>> +#include <linux/platform_device.h>
>> +#include <linux/reset-controller.h>
>> +#include <dt-bindings/clock/microchip,mpfs-clock.h>
>> +#include <soc/microchip/mpfs.h>
>> +
>> +/*
>> + * The ENVM reset is the lowest bit in the register & I am using the CLK_FOO
>> + * defines in the dt to make things easier to configure - so this is accounting
>> + * for the offset of 3 there.
>> + */
>> +#define MPFS_PERIPH_OFFSET     CLK_ENVM
>> +#define MPFS_NUM_RESETS                30u
>> +#define MPFS_SLEEP_MIN_US      100
>> +#define MPFS_SLEEP_MAX_US      200
>> +
>> +/*
>> + * Peripheral clock resets
>> + */
>> +
>> +static int mpfs_assert(struct reset_controller_dev *rcdev, unsigned long id)
>> +{
>> +       u32 reg;
>> +
>> +       reg = mpfs_reset_read(rcdev->dev);
>> +       reg |= (1u << id);
>> +       mpfs_reset_write(rcdev->dev, reg);
> 
> This is missing a spinlock to protect against concurrent read-modify-
> writes.
>> 
>> +
>> +       return 0;
>> +}
>> +
>> +static int mpfs_deassert(struct reset_controller_dev *rcdev, unsigned long id)
>> +{
>> +       u32 reg, val;
>> +
>> +       reg = mpfs_reset_read(rcdev->dev);
>> +       val = reg & ~(1u << id);
> 
> You could use BIT(id) instead of (1u << id).
> 
>> +       mpfs_reset_write(rcdev->dev, val);
>> +
>> +       return 0;
>> +}
>> +
>> +static int mpfs_status(struct reset_controller_dev *rcdev, unsigned long id)
>> +{
>> +       u32 reg = mpfs_reset_read(rcdev->dev);
>> +
>> +       return (reg & (1u << id));
> 
> Side note, this works because MPFS_NUM_RESETS makes sure the sign bit
> is never hit.

I can add a comment to that effect if you want?

>> 
>> +}
>> +
>> +static int mpfs_reset(struct reset_controller_dev *rcdev, unsigned long id)
>> +{
>> +       mpfs_assert(rcdev, id);
>> +
>> +       usleep_range(MPFS_SLEEP_MIN_US, MPFS_SLEEP_MAX_US);
>> +
>> +       mpfs_deassert(rcdev, id);
>> +
>> +       return 0;
>> +}
>> +
>> +static const struct reset_control_ops mpfs_reset_ops = {
>> +       .reset = mpfs_reset,
>> +       .assert = mpfs_assert,
>> +       .deassert = mpfs_deassert,
>> +       .status = mpfs_status,
>> +};
>> +
>> +static int mpfs_reset_xlate(struct reset_controller_dev *rcdev,
>> +                           const struct of_phandle_args *reset_spec)
>> +{
>> +       unsigned int index = reset_spec->args[0];
>> +
>> +       /*
>> +        * CLK_RESERVED does not map to a clock, but it does map to a reset,
>> +        * so it has to be accounted for here. It is the reset for the fabric,
>> +        * so if this reset gets called - do not reset it.
>> +        */
>> +       if (index == CLK_RESERVED) {
>> +               dev_err(rcdev->dev, "Resetting the fabric is not supported\n");
>> +               return -EINVAL;
>> +       }
>> +
>> +       if (index < MPFS_PERIPH_OFFSET || index >= (MPFS_PERIPH_OFFSET + rcdev->nr_resets)) {
>> +               dev_err(rcdev->dev, "Invalid reset index %u\n", reset_spec->args[0]);
> 
> s/reset_spec->args[0]/index/
> 
>> +               return -EINVAL;
>> +       }
>> +
>> +       return index - MPFS_PERIPH_OFFSET;
>> +}
>> +
>> +static int mpfs_reset_probe(struct auxiliary_device *adev,
>> +                           const struct auxiliary_device_id *id)
>> +{
>> +       struct device *dev = &adev->dev;
>> +       struct reset_controller_dev *rcdev;
>> +       int ret;
>> +
>> +       rcdev = devm_kzalloc(dev, sizeof(*rcdev), GFP_KERNEL);
>> +       if (!rcdev)
>> +               return -ENOMEM;
>> +
>> +       rcdev->dev = dev;
>> +       rcdev->dev->parent = adev->dev.parent;
>> 
>> s/adev->dev./dev->/
>> 
>> +       rcdev->ops = &mpfs_reset_ops;
>> +       rcdev->of_node = adev->dev.parent->of_node;
>> 
>> s/adev->dev./dev->/
>> 
>> +       rcdev->of_reset_n_cells = 1;
>> +       rcdev->of_xlate = mpfs_reset_xlate;
>> +       rcdev->nr_resets = MPFS_NUM_RESETS;
>> +
>> +       ret = devm_reset_controller_register(dev, rcdev);
>> +       if (!ret)
>> +               dev_info(dev, "Registered MPFS reset controller\n");
> 
> Is this really useful information for most users?

Probably not, but it is useful for my CI haha.
If you don't like it, I will remove it.

> 
>> +
>> +       return ret;
>> +}
>> +
>> +static const struct auxiliary_device_id mpfs_reset_ids[] = {
>> +       {
>> +               .name = "clk_mpfs.reset-mpfs",
>> +       },
>> +       { }
>> +};
>> +MODULE_DEVICE_TABLE(auxiliary, mpfs_reset_ids);
>> +
>> +static struct auxiliary_driver mpfs_reset_driver = {
>> +       .probe          = mpfs_reset_probe,
>> +       .id_table       = mpfs_reset_ids,
>> +};
>> +
>> +module_auxiliary_driver(mpfs_reset_driver);
>> +
>> +MODULE_DESCRIPTION("Microchip PolarFire SoC Reset Driver");
>> +MODULE_AUTHOR("Conor Dooley <conor.dooley@microchip.com>");
>> +MODULE_LICENSE("GPL");
>> +MODULE_IMPORT_NS(MCHP_CLK_MPFS);
>> 
> regards
> Philipp
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

  reply	other threads:[~2022-06-30 16:20 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-30  8:05 [PATCH v1 00/14] PolarFire SoC reset controller & clock cleanups Conor Dooley
2022-06-30  8:05 ` Conor Dooley
2022-06-30  8:05 ` [PATCH v1 01/14] dt-bindings: clk: microchip: mpfs: add reset controller support Conor Dooley
2022-06-30  8:05   ` Conor Dooley
2022-07-01 19:51   ` Rob Herring
2022-07-01 19:51     ` Rob Herring
2022-06-30  8:05 ` [PATCH v1 02/14] dt-bindings: net: cdns,macb: document polarfire soc's macb Conor Dooley
2022-06-30  8:05   ` Conor Dooley
2022-06-30  8:05 ` [PATCH v1 03/14] clk: microchip: mpfs: add reset controller Conor Dooley
2022-06-30  8:05   ` Conor Dooley
2022-06-30  8:05 ` [PATCH v1 04/14] reset: add polarfire soc reset support Conor Dooley
2022-06-30  8:05   ` Conor Dooley
2022-06-30  9:12   ` Philipp Zabel
2022-06-30  9:12     ` Philipp Zabel
2022-06-30 16:20     ` Conor.Dooley [this message]
2022-06-30 16:20       ` Conor.Dooley
2022-07-01 16:20       ` Conor.Dooley
2022-07-01 16:20         ` Conor.Dooley
2022-06-30  8:05 ` [PATCH v1 05/14] MAINTAINERS: add polarfire soc reset controller Conor Dooley
2022-06-30  8:05   ` Conor Dooley
2022-06-30  8:05 ` [PATCH v1 06/14] net: macb: add polarfire soc reset support Conor Dooley
2022-06-30  8:05   ` Conor Dooley
2022-06-30 16:02   ` Jakub Kicinski
2022-06-30 16:02     ` Jakub Kicinski
2022-06-30 16:14     ` Conor.Dooley
2022-06-30 16:14       ` Conor.Dooley
2022-06-30  8:05 ` [PATCH v1 07/14] riscv: dts: microchip: add mpfs specific macb " Conor Dooley
2022-06-30  8:05   ` Conor Dooley
2022-06-30  8:05 ` [PATCH v1 08/14] clk: microchip: mpfs: add module_authors entries Conor Dooley
2022-06-30  8:05   ` Conor Dooley
2022-06-30  8:05 ` [PATCH v1 09/14] clk: microchip: mpfs: add MSS pll's set & round rate Conor Dooley
2022-06-30  8:05   ` Conor Dooley
2022-06-30  8:05 ` [PATCH v1 10/14] clk: microchip: mpfs: move id & offset out of clock structs Conor Dooley
2022-06-30  8:05   ` Conor Dooley
2022-06-30  8:05 ` [PATCH v1 11/14] clk: microchip: mpfs: simplify control reg access Conor Dooley
2022-06-30  8:05   ` Conor Dooley
2022-06-30  8:05 ` [PATCH v1 12/14] clk: microchip: mpfs: delete 2 line mpfs_clk_register_foo() Conor Dooley
2022-06-30  8:05   ` Conor Dooley
2022-06-30  8:05 ` [PATCH v1 13/14] clk: microchip: mpfs: convert cfg_clk to clk_divider Conor Dooley
2022-06-30  8:05   ` Conor Dooley
2022-07-02 14:50   ` Conor.Dooley
2022-07-02 14:50     ` Conor.Dooley
2022-06-30  8:05 ` [PATCH v1 14/14] clk: microchip: mpfs: convert periph_clk to clk_gate Conor Dooley
2022-06-30  8:05   ` Conor Dooley

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=eed577e2-b416-dfea-a830-2c037e34ac64@microchip.com \
    --to=conor.dooley@microchip.com \
    --cc=Claudiu.Beznea@microchip.com \
    --cc=Daire.McNamara@microchip.com \
    --cc=Nicolas.Ferre@microchip.com \
    --cc=aou@eecs.berkeley.edu \
    --cc=davem@davemloft.net \
    --cc=devicetree@vger.kernel.org \
    --cc=edumazet@google.com \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=kuba@kernel.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=mturquette@baylibre.com \
    --cc=netdev@vger.kernel.org \
    --cc=p.zabel@pengutronix.de \
    --cc=pabeni@redhat.com \
    --cc=palmer@dabbelt.com \
    --cc=paul.walmsley@sifive.com \
    --cc=robh+dt@kernel.org \
    --cc=sboyd@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.