public inbox for linux-spi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] spi/bcm63xx: add device tree support
@ 2015-09-10 15:29 Jonas Gorski
       [not found] ` <1441898975-22540-1-git-send-email-jogo-p3rKhJxN3npAfugRpC6u6w@public.gmane.org>
  0 siblings, 1 reply; 6+ messages in thread
From: Jonas Gorski @ 2015-09-10 15:29 UTC (permalink / raw)
  To: linux-spi-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA
  Cc: Mark Brown, Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell,
	Kumar Gala, Florian Fainelli

Add support for probing spi-bcm63xx through device tree.

Depends on "spi/bcm63xx: cleanup and decouple from arch code".

Jonas Gorski (2):
  spi/bcm63xx: document device tree bindings
  spi/bcm63xx: add support for probing through devicetree

 .../devicetree/bindings/spi/spi-bcm63xx.txt        | 33 +++++++++++++
 drivers/spi/spi-bcm63xx.c                          | 56 ++++++++++++++++------
 2 files changed, 75 insertions(+), 14 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/spi/spi-bcm63xx.txt

-- 
2.1.4
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/2] spi/bcm63xx: document device tree bindings
       [not found] ` <1441898975-22540-1-git-send-email-jogo-p3rKhJxN3npAfugRpC6u6w@public.gmane.org>
@ 2015-09-10 15:29   ` Jonas Gorski
       [not found]     ` <1441898975-22540-2-git-send-email-jogo-p3rKhJxN3npAfugRpC6u6w@public.gmane.org>
  2015-09-10 15:29   ` [PATCH 2/2] spi/bcm63xx: add support for probing through devicetree Jonas Gorski
  1 sibling, 1 reply; 6+ messages in thread
From: Jonas Gorski @ 2015-09-10 15:29 UTC (permalink / raw)
  To: linux-spi-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA
  Cc: Mark Brown, Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell,
	Kumar Gala, Florian Fainelli

Add documentation for the bindings of the low speed SPI controller found
on most bcm63xx SoCs.

Signed-off-by: Jonas Gorski <jogo-p3rKhJxN3npAfugRpC6u6w@public.gmane.org>
---
 .../devicetree/bindings/spi/spi-bcm63xx.txt        | 33 ++++++++++++++++++++++
 1 file changed, 33 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/spi/spi-bcm63xx.txt

diff --git a/Documentation/devicetree/bindings/spi/spi-bcm63xx.txt b/Documentation/devicetree/bindings/spi/spi-bcm63xx.txt
new file mode 100644
index 0000000..1a60bb9
--- /dev/null
+++ b/Documentation/devicetree/bindings/spi/spi-bcm63xx.txt
@@ -0,0 +1,33 @@
+Binding for Broadcom BCM6348/BCM6358 SPI controller
+
+Required properties:
+- compatible: must contain one of "brcm,bcm6348-spi", "brcm,bcm6458-spi".
+- reg: Base address and size of the controllers memory area.
+- interrupts: Interrupt for the SPI block.
+- clocks: phandle of the SPI clock.
+- clock-names: has to be "spi".
+- #address-cells: <1>, as required by generic SPI binding.
+- #size-cells: <0>, also as required by generic SPI binding.
+
+Optional properties:
+- num-cs: some controllers have less than 8 cs signals. Defaults to 8
+  if absent.
+
+Child nodes as per the generic SPI binding.
+
+Example:
+
+	spi@10000800 {
+		compatible = "brcm,bcm6368-spi", "brcm,bcm6358-spi";
+		reg = <0x10000800 0x70c>;
+
+		interrupts = <1>;
+
+		clocks = <&clkctl 9>;
+		clock-names = "spi";
+
+		num-cs = <5>;
+
+		#address-cells = <1>;
+		#size-cells = <0>;
+	};
-- 
2.1.4
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/2] spi/bcm63xx: add support for probing through devicetree
       [not found] ` <1441898975-22540-1-git-send-email-jogo-p3rKhJxN3npAfugRpC6u6w@public.gmane.org>
  2015-09-10 15:29   ` [PATCH 1/2] spi/bcm63xx: document device tree bindings Jonas Gorski
@ 2015-09-10 15:29   ` Jonas Gorski
       [not found]     ` <1441898975-22540-3-git-send-email-jogo-p3rKhJxN3npAfugRpC6u6w@public.gmane.org>
  1 sibling, 1 reply; 6+ messages in thread
From: Jonas Gorski @ 2015-09-10 15:29 UTC (permalink / raw)
  To: linux-spi-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA
  Cc: Mark Brown, Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell,
	Kumar Gala, Florian Fainelli

Add required binding support to probe through device tree.

Use the compatible instead of the resource size for identifiying the
block type, and allow reducing the number of cs lines through OF.

Signed-off-by: Jonas Gorski <jogo-p3rKhJxN3npAfugRpC6u6w@public.gmane.org>
---
 drivers/spi/spi-bcm63xx.c | 56 +++++++++++++++++++++++++++++++++++------------
 1 file changed, 42 insertions(+), 14 deletions(-)

diff --git a/drivers/spi/spi-bcm63xx.c b/drivers/spi/spi-bcm63xx.c
index 42f33bc..ec094b1 100644
--- a/drivers/spi/spi-bcm63xx.c
+++ b/drivers/spi/spi-bcm63xx.c
@@ -26,6 +26,7 @@
 #include <linux/completion.h>
 #include <linux/err.h>
 #include <linux/pm_runtime.h>
+#include <linux/of.h>
 
 /* BCM 6338/6348 SPI core */
 #define SPI_6348_RSET_SIZE		64
@@ -465,6 +466,12 @@ static const unsigned long bcm6358_spi_reg_offsets[] = {
 	[SPI_MSG_DATA_SIZE]	= SPI_6358_MSG_DATA_SIZE,
 };
 
+static const struct of_device_id bcm63xx_spi_of_match[] = {
+	{ .compatible = "brcm,bcm6348-spi", .data = &bcm6348_spi_reg_offsets },
+	{ .compatible = "brcm,bcm6358-spi", .data = &bcm6358_spi_reg_offsets },
+	{ },
+};
+
 static int bcm63xx_spi_probe(struct platform_device *pdev)
 {
 	struct resource *r;
@@ -474,6 +481,7 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)
 	struct clk *clk;
 	struct bcm63xx_spi *bs;
 	int ret;
+	u32 num_cs = BCM63XX_SPI_MAX_CS;
 
 	irq = platform_get_irq(pdev, 0);
 	if (irq < 0) {
@@ -516,27 +524,46 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)
 		goto out_err;
 	}
 
-	master->bus_num = BCM63XX_SPI_BUS_NUM;
-	master->num_chipselect = BCM63XX_SPI_MAX_CS;
 	master->transfer_one_message = bcm63xx_spi_transfer_one;
 	master->mode_bits = MODEBITS;
 	master->bits_per_word_mask = SPI_BPW_MASK(8);
 	master->auto_runtime_pm = true;
 
-	switch (resource_size(r)) {
-	case SPI_6348_RSET_SIZE:
-		bs->reg_offsets = bcm6348_spi_reg_offsets;
-		break;
-	case SPI_6358_RSET_SIZE:
-		bs->reg_offsets = bcm6358_spi_reg_offsets;
-		break;
-	default:
-		ret = -EINVAL;
-		dev_err(dev, "unsupported register size: %i\n",
-			resource_size(r));
-		goto out_err;
+	if (dev->of_node) {
+		const struct of_device_id *match;
+
+		match = of_match_node(bcm63xx_spi_of_match, dev->of_node);
+		if (!match) {
+			ret = -EINVAL;
+			goto out_err;
+		}
+		bs->reg_offsets = match->data;
+		master->dev.of_node = dev->of_node;
+		of_property_read_u32(dev->of_node, "num-cs", &num_cs);
+		if (num_cs > BCM63XX_SPI_MAX_CS) {
+			dev_warn(dev, "unsupported number of cs (%i), reducing to 8\n",
+				 num_cs);
+			num_cs = BCM63XX_SPI_MAX_CS;
+		}
+	} else {
+		master->bus_num = BCM63XX_SPI_BUS_NUM;
+
+		switch (resource_size(r)) {
+		case SPI_6348_RSET_SIZE:
+			bs->reg_offsets = bcm6348_spi_reg_offsets;
+			break;
+		case SPI_6358_RSET_SIZE:
+			bs->reg_offsets = bcm6358_spi_reg_offsets;
+			break;
+		default:
+			ret = -EINVAL;
+			dev_err(dev, "unsupported register size: %i\n",
+				resource_size(r));
+			goto out_err;
+		}
 	}
 
+	master->num_chipselect = num_cs;
 	bs->msg_type_shift = bs->reg_offsets[SPI_MSG_TYPE_SHIFT];
 	bs->msg_ctl_width = bs->reg_offsets[SPI_MSG_CTL_WIDTH];
 	bs->fifo_size = bs->reg_offsets[SPI_MSG_DATA_SIZE];
@@ -621,6 +648,7 @@ static struct platform_driver bcm63xx_spi_driver = {
 	.driver = {
 		.name	= "bcm63xx-spi",
 		.pm	= &bcm63xx_spi_pm_ops,
+		.of_match_table = bcm63xx_spi_of_match,
 	},
 	.probe		= bcm63xx_spi_probe,
 	.remove		= bcm63xx_spi_remove,
-- 
2.1.4
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] spi/bcm63xx: document device tree bindings
       [not found]     ` <1441898975-22540-2-git-send-email-jogo-p3rKhJxN3npAfugRpC6u6w@public.gmane.org>
@ 2015-09-10 19:17       ` Florian Fainelli
       [not found]         ` <55F1D754.9000101-p3rKhJxN3npAfugRpC6u6w@public.gmane.org>
  0 siblings, 1 reply; 6+ messages in thread
From: Florian Fainelli @ 2015-09-10 19:17 UTC (permalink / raw)
  To: Jonas Gorski, linux-spi-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA
  Cc: Mark Brown, Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell,
	Kumar Gala

On 10/09/15 08:29, Jonas Gorski wrote:
> Add documentation for the bindings of the low speed SPI controller found
> on most bcm63xx SoCs.
> 
> Signed-off-by: Jonas Gorski <jogo-p3rKhJxN3npAfugRpC6u6w@public.gmane.org>
> ---
>  .../devicetree/bindings/spi/spi-bcm63xx.txt        | 33 ++++++++++++++++++++++
>  1 file changed, 33 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/spi/spi-bcm63xx.txt
> 
> diff --git a/Documentation/devicetree/bindings/spi/spi-bcm63xx.txt b/Documentation/devicetree/bindings/spi/spi-bcm63xx.txt
> new file mode 100644
> index 0000000..1a60bb9
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/spi/spi-bcm63xx.txt
> @@ -0,0 +1,33 @@
> +Binding for Broadcom BCM6348/BCM6358 SPI controller
> +
> +Required properties:
> +- compatible: must contain one of "brcm,bcm6348-spi", "brcm,bcm6458-spi".

Typo, the second compatible should "brcm,bcm6358-spi", other than that:

Reviewed-by: Florian Fainelli <f.fainelli-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

> +- reg: Base address and size of the controllers memory area.
> +- interrupts: Interrupt for the SPI block.
> +- clocks: phandle of the SPI clock.
> +- clock-names: has to be "spi".
> +- #address-cells: <1>, as required by generic SPI binding.
> +- #size-cells: <0>, also as required by generic SPI binding.
> +
> +Optional properties:
> +- num-cs: some controllers have less than 8 cs signals. Defaults to 8
> +  if absent.
> +
> +Child nodes as per the generic SPI binding.
> +
> +Example:
> +
> +	spi@10000800 {
> +		compatible = "brcm,bcm6368-spi", "brcm,bcm6358-spi";
> +		reg = <0x10000800 0x70c>;
> +
> +		interrupts = <1>;
> +
> +		clocks = <&clkctl 9>;
> +		clock-names = "spi";
> +
> +		num-cs = <5>;
> +
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +	};
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 2/2] spi/bcm63xx: add support for probing through devicetree
       [not found]     ` <1441898975-22540-3-git-send-email-jogo-p3rKhJxN3npAfugRpC6u6w@public.gmane.org>
@ 2015-09-10 19:19       ` Florian Fainelli
  0 siblings, 0 replies; 6+ messages in thread
From: Florian Fainelli @ 2015-09-10 19:19 UTC (permalink / raw)
  To: Jonas Gorski, linux-spi-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA
  Cc: Mark Brown, Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell,
	Kumar Gala

On 10/09/15 08:29, Jonas Gorski wrote:
> Add required binding support to probe through device tree.
> 
> Use the compatible instead of the resource size for identifiying the
> block type, and allow reducing the number of cs lines through OF.

This looks good to me, since this builds on top of your other 6 patches,
the end-result might be different, especially if we end-up using
platform_device_id as suggested. Other than that:

Reviewed-by: Florian Fainelli <f.fainelli-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

Thanks for doing this!

> 
> Signed-off-by: Jonas Gorski <jogo-p3rKhJxN3npAfugRpC6u6w@public.gmane.org>
> ---
>  drivers/spi/spi-bcm63xx.c | 56 +++++++++++++++++++++++++++++++++++------------
>  1 file changed, 42 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/spi/spi-bcm63xx.c b/drivers/spi/spi-bcm63xx.c
> index 42f33bc..ec094b1 100644
> --- a/drivers/spi/spi-bcm63xx.c
> +++ b/drivers/spi/spi-bcm63xx.c
> @@ -26,6 +26,7 @@
>  #include <linux/completion.h>
>  #include <linux/err.h>
>  #include <linux/pm_runtime.h>
> +#include <linux/of.h>
>  
>  /* BCM 6338/6348 SPI core */
>  #define SPI_6348_RSET_SIZE		64
> @@ -465,6 +466,12 @@ static const unsigned long bcm6358_spi_reg_offsets[] = {
>  	[SPI_MSG_DATA_SIZE]	= SPI_6358_MSG_DATA_SIZE,
>  };
>  
> +static const struct of_device_id bcm63xx_spi_of_match[] = {
> +	{ .compatible = "brcm,bcm6348-spi", .data = &bcm6348_spi_reg_offsets },
> +	{ .compatible = "brcm,bcm6358-spi", .data = &bcm6358_spi_reg_offsets },
> +	{ },
> +};
> +
>  static int bcm63xx_spi_probe(struct platform_device *pdev)
>  {
>  	struct resource *r;
> @@ -474,6 +481,7 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)
>  	struct clk *clk;
>  	struct bcm63xx_spi *bs;
>  	int ret;
> +	u32 num_cs = BCM63XX_SPI_MAX_CS;
>  
>  	irq = platform_get_irq(pdev, 0);
>  	if (irq < 0) {
> @@ -516,27 +524,46 @@ static int bcm63xx_spi_probe(struct platform_device *pdev)
>  		goto out_err;
>  	}
>  
> -	master->bus_num = BCM63XX_SPI_BUS_NUM;
> -	master->num_chipselect = BCM63XX_SPI_MAX_CS;
>  	master->transfer_one_message = bcm63xx_spi_transfer_one;
>  	master->mode_bits = MODEBITS;
>  	master->bits_per_word_mask = SPI_BPW_MASK(8);
>  	master->auto_runtime_pm = true;
>  
> -	switch (resource_size(r)) {
> -	case SPI_6348_RSET_SIZE:
> -		bs->reg_offsets = bcm6348_spi_reg_offsets;
> -		break;
> -	case SPI_6358_RSET_SIZE:
> -		bs->reg_offsets = bcm6358_spi_reg_offsets;
> -		break;
> -	default:
> -		ret = -EINVAL;
> -		dev_err(dev, "unsupported register size: %i\n",
> -			resource_size(r));
> -		goto out_err;
> +	if (dev->of_node) {
> +		const struct of_device_id *match;
> +
> +		match = of_match_node(bcm63xx_spi_of_match, dev->of_node);
> +		if (!match) {
> +			ret = -EINVAL;
> +			goto out_err;
> +		}
> +		bs->reg_offsets = match->data;
> +		master->dev.of_node = dev->of_node;
> +		of_property_read_u32(dev->of_node, "num-cs", &num_cs);
> +		if (num_cs > BCM63XX_SPI_MAX_CS) {
> +			dev_warn(dev, "unsupported number of cs (%i), reducing to 8\n",
> +				 num_cs);
> +			num_cs = BCM63XX_SPI_MAX_CS;
> +		}
> +	} else {
> +		master->bus_num = BCM63XX_SPI_BUS_NUM;
> +
> +		switch (resource_size(r)) {
> +		case SPI_6348_RSET_SIZE:
> +			bs->reg_offsets = bcm6348_spi_reg_offsets;
> +			break;
> +		case SPI_6358_RSET_SIZE:
> +			bs->reg_offsets = bcm6358_spi_reg_offsets;
> +			break;
> +		default:
> +			ret = -EINVAL;
> +			dev_err(dev, "unsupported register size: %i\n",
> +				resource_size(r));
> +			goto out_err;
> +		}
>  	}
>  
> +	master->num_chipselect = num_cs;
>  	bs->msg_type_shift = bs->reg_offsets[SPI_MSG_TYPE_SHIFT];
>  	bs->msg_ctl_width = bs->reg_offsets[SPI_MSG_CTL_WIDTH];
>  	bs->fifo_size = bs->reg_offsets[SPI_MSG_DATA_SIZE];
> @@ -621,6 +648,7 @@ static struct platform_driver bcm63xx_spi_driver = {
>  	.driver = {
>  		.name	= "bcm63xx-spi",
>  		.pm	= &bcm63xx_spi_pm_ops,
> +		.of_match_table = bcm63xx_spi_of_match,
>  	},
>  	.probe		= bcm63xx_spi_probe,
>  	.remove		= bcm63xx_spi_remove,
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] spi/bcm63xx: document device tree bindings
       [not found]         ` <55F1D754.9000101-p3rKhJxN3npAfugRpC6u6w@public.gmane.org>
@ 2015-09-11 10:28           ` Jonas Gorski
  0 siblings, 0 replies; 6+ messages in thread
From: Jonas Gorski @ 2015-09-11 10:28 UTC (permalink / raw)
  To: Florian Fainelli
  Cc: linux-spi-u79uwXL29TY76Z2rM5mHXA,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Mark Brown,
	Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala

On Thu, Sep 10, 2015 at 9:17 PM, Florian Fainelli <florian-p3rKhJxN3npAfugRpC6u6w@public.gmane.org> wrote:
> On 10/09/15 08:29, Jonas Gorski wrote:
>> Add documentation for the bindings of the low speed SPI controller found
>> on most bcm63xx SoCs.
>>
>> Signed-off-by: Jonas Gorski <jogo-p3rKhJxN3npAfugRpC6u6w@public.gmane.org>
>> ---
>>  .../devicetree/bindings/spi/spi-bcm63xx.txt        | 33 ++++++++++++++++++++++
>>  1 file changed, 33 insertions(+)
>>  create mode 100644 Documentation/devicetree/bindings/spi/spi-bcm63xx.txt
>>
>> diff --git a/Documentation/devicetree/bindings/spi/spi-bcm63xx.txt b/Documentation/devicetree/bindings/spi/spi-bcm63xx.txt
>> new file mode 100644
>> index 0000000..1a60bb9
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/spi/spi-bcm63xx.txt
>> @@ -0,0 +1,33 @@
>> +Binding for Broadcom BCM6348/BCM6358 SPI controller
>> +
>> +Required properties:
>> +- compatible: must contain one of "brcm,bcm6348-spi", "brcm,bcm6458-spi".
>
> Typo, the second compatible should "brcm,bcm6358-spi", other than that:

Oops, will fix that in v2.

>
> Reviewed-by: Florian Fainelli <f.fainelli-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>


Jonas
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-09-11 10:28 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-09-10 15:29 [PATCH 0/2] spi/bcm63xx: add device tree support Jonas Gorski
     [not found] ` <1441898975-22540-1-git-send-email-jogo-p3rKhJxN3npAfugRpC6u6w@public.gmane.org>
2015-09-10 15:29   ` [PATCH 1/2] spi/bcm63xx: document device tree bindings Jonas Gorski
     [not found]     ` <1441898975-22540-2-git-send-email-jogo-p3rKhJxN3npAfugRpC6u6w@public.gmane.org>
2015-09-10 19:17       ` Florian Fainelli
     [not found]         ` <55F1D754.9000101-p3rKhJxN3npAfugRpC6u6w@public.gmane.org>
2015-09-11 10:28           ` Jonas Gorski
2015-09-10 15:29   ` [PATCH 2/2] spi/bcm63xx: add support for probing through devicetree Jonas Gorski
     [not found]     ` <1441898975-22540-3-git-send-email-jogo-p3rKhJxN3npAfugRpC6u6w@public.gmane.org>
2015-09-10 19:19       ` Florian Fainelli

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox