diff mbox series

[04/11] board: Add Chameleonv3 board dir

Message ID 20220401124325.1810108-5-pan@semihalf.com
State Superseded
Delegated to: Simon Goldschmidt
Headers show
Series Add Chameleon V3 support | expand

Commit Message

Paweł Anikiel April 1, 2022, 12:43 p.m. UTC
Add board directory for Google Chameleon V3 board

Signed-off-by: Paweł Anikiel <pan@semihalf.com>
---
 board/google/chameleonv3/Makefile          |  5 +++
 board/google/chameleonv3/board.c           | 27 ++++++++++++++
 board/google/chameleonv3/fpga.its          | 28 ++++++++++++++
 board/google/chameleonv3/fpga_early_io.its | 35 ++++++++++++++++++
 board/google/chameleonv3/mercury_aa1.c     | 43 ++++++++++++++++++++++
 board/google/chameleonv3/mercury_aa1.h     | 12 ++++++
 6 files changed, 150 insertions(+)
 create mode 100644 board/google/chameleonv3/Makefile
 create mode 100644 board/google/chameleonv3/board.c
 create mode 100644 board/google/chameleonv3/fpga.its
 create mode 100644 board/google/chameleonv3/fpga_early_io.its
 create mode 100644 board/google/chameleonv3/mercury_aa1.c
 create mode 100644 board/google/chameleonv3/mercury_aa1.h

Comments

Simon Glass April 11, 2022, 6:35 p.m. UTC | #1
On Fri, 1 Apr 2022 at 06:44, Paweł Anikiel <pan@semihalf.com> wrote:
>
> Add board directory for Google Chameleon V3 board
>
> Signed-off-by: Paweł Anikiel <pan@semihalf.com>
> ---
>  board/google/chameleonv3/Makefile          |  5 +++
>  board/google/chameleonv3/board.c           | 27 ++++++++++++++
>  board/google/chameleonv3/fpga.its          | 28 ++++++++++++++
>  board/google/chameleonv3/fpga_early_io.its | 35 ++++++++++++++++++
>  board/google/chameleonv3/mercury_aa1.c     | 43 ++++++++++++++++++++++
>  board/google/chameleonv3/mercury_aa1.h     | 12 ++++++
>  6 files changed, 150 insertions(+)
>  create mode 100644 board/google/chameleonv3/Makefile
>  create mode 100644 board/google/chameleonv3/board.c
>  create mode 100644 board/google/chameleonv3/fpga.its
>  create mode 100644 board/google/chameleonv3/fpga_early_io.its
>  create mode 100644 board/google/chameleonv3/mercury_aa1.c
>  create mode 100644 board/google/chameleonv3/mercury_aa1.h

Reviewed-by: Simon Glass <sjg@chromium.org>


On Fri, 1 Apr 2022 at 06:44, Paweł Anikiel <pan@semihalf.com> wrote:
>
> Add board directory for Google Chameleon V3 board
>
> Signed-off-by: Paweł Anikiel <pan@semihalf.com>
> ---
>  board/google/chameleonv3/Makefile          |  5 +++
>  board/google/chameleonv3/board.c           | 27 ++++++++++++++
>  board/google/chameleonv3/fpga.its          | 28 ++++++++++++++
>  board/google/chameleonv3/fpga_early_io.its | 35 ++++++++++++++++++
>  board/google/chameleonv3/mercury_aa1.c     | 43 ++++++++++++++++++++++
>  board/google/chameleonv3/mercury_aa1.h     | 12 ++++++
>  6 files changed, 150 insertions(+)
>  create mode 100644 board/google/chameleonv3/Makefile
>  create mode 100644 board/google/chameleonv3/board.c
>  create mode 100644 board/google/chameleonv3/fpga.its
>  create mode 100644 board/google/chameleonv3/fpga_early_io.its
>  create mode 100644 board/google/chameleonv3/mercury_aa1.c
>  create mode 100644 board/google/chameleonv3/mercury_aa1.h
>
> diff --git a/board/google/chameleonv3/Makefile b/board/google/chameleonv3/Makefile
> new file mode 100644
> index 0000000000..bb413fde83
> --- /dev/null
> +++ b/board/google/chameleonv3/Makefile
> @@ -0,0 +1,5 @@
> +# SPDX-License-Identifier: GPL-2.0
> +#
> +# Copyright 2022 Google LLC
> +
> +obj-y  := board.o mercury_aa1.o
> diff --git a/board/google/chameleonv3/board.c b/board/google/chameleonv3/board.c
> new file mode 100644
> index 0000000000..4d3049689d
> --- /dev/null
> +++ b/board/google/chameleonv3/board.c
> @@ -0,0 +1,27 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Copyright 2022 Google LLC
> + */
> +#include <net.h>
> +#include <errno.h>
> +#include "mercury_aa1.h"
> +
> +int misc_init_r(void)
> +{
> +       u8 mac[ARP_HLEN];
> +       int res;
> +
> +       if (env_get("ethaddr"))
> +               return 0;
> +
> +       res = mercury_aa1_read_mac(mac);
> +       if (res) {
> +               printf("couldn't read mac address: %s\n", errno_str(res));
> +               return 0;
> +       }
> +
> +       if (is_valid_ethaddr(mac))
> +               eth_env_set_enetaddr("ethaddr", mac);
> +
> +       return 0;
> +}
> diff --git a/board/google/chameleonv3/fpga.its b/board/google/chameleonv3/fpga.its
> new file mode 100644
> index 0000000000..85a830002f
> --- /dev/null
> +++ b/board/google/chameleonv3/fpga.its
> @@ -0,0 +1,28 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Copyright 2022 Google LLC
> + */
> +/dts-v1/;
> +
> +/ {
> +       description = "FIT image with FPGA bistream";
> +       #address-cells = <1>;
> +
> +       images {
> +               fpga-periph-1 {
> +                       description = "FPGA full bitstream";
> +                       data = /incbin/("../../../fpga.rbf");
> +                       type = "fpga";
> +                       arch = "arm";
> +                       compression = "none";
> +               };
> +       };
> +
> +       configurations {
> +               default = "config-1";
> +               config-1 {
> +                       description = "Boot with FPGA config";
> +                       fpga = "fpga-periph-1";
> +               };
> +       };
> +};
> diff --git a/board/google/chameleonv3/fpga_early_io.its b/board/google/chameleonv3/fpga_early_io.its
> new file mode 100644
> index 0000000000..ebc7bcbaae
> --- /dev/null
> +++ b/board/google/chameleonv3/fpga_early_io.its
> @@ -0,0 +1,35 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Copyright 2022 Google LLC
> + */
> +/dts-v1/;
> +
> +/ {
> +       description = "FIT image with FPGA bistream";
> +       #address-cells = <1>;
> +
> +       images {
> +               fpga-periph-1 {
> +                       description = "FPGA peripheral bitstream";
> +                       data = /incbin/("../../../periph.rbf");
> +                       type = "fpga";
> +                       arch = "arm";
> +                       compression = "none";
> +               };
> +               fpga-core-1 {
> +                       description = "FPGA core bitstream";
> +                       data = /incbin/("../../../core.rbf");
> +                       type = "fpga";
> +                       arch = "arm";
> +                       compression = "none";
> +               };
> +       };
> +
> +       configurations {
> +               default = "config-1";
> +               config-1 {
> +                       description = "Boot with FPGA config";
> +                       fpga = "fpga-periph-1", "fpga-core-1";
> +               };
> +       };
> +};
> diff --git a/board/google/chameleonv3/mercury_aa1.c b/board/google/chameleonv3/mercury_aa1.c
> new file mode 100644
> index 0000000000..ed447ec37c
> --- /dev/null
> +++ b/board/google/chameleonv3/mercury_aa1.c
> @@ -0,0 +1,43 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Copyright 2022 Google LLC
> + */
> +#include <net.h>
> +#include <dm/device.h>
> +#include <dm/uclass.h>
> +#include <atsha204a-i2c.h>
> +#include "mercury_aa1.h"
> +
> +#define MERCURY_AA1_ATSHA204A_OTP_MAC0 4
> +#define MERCURY_AA1_ATSHA204A_OTP_MAC1 5
> +
> +int mercury_aa1_read_mac(u8 *mac)
> +{
> +       struct udevice *dev;
> +       u8 buf[8];
> +       int ret;
> +
> +       ret = uclass_get_device_by_name(UCLASS_MISC, "atsha204a@64", &dev);
> +       if (ret)
> +               return ret;
> +
> +       ret = atsha204a_wakeup(dev);
> +       if (ret)
> +               return ret;
> +
> +       ret = atsha204a_read(dev, ATSHA204A_ZONE_OTP, false,
> +                            MERCURY_AA1_ATSHA204A_OTP_MAC0, buf);
> +       if (ret)
> +               goto sleep;
> +
> +       ret = atsha204a_read(dev, ATSHA204A_ZONE_OTP, false,
> +                            MERCURY_AA1_ATSHA204A_OTP_MAC1, buf + 4);
> +       if (ret)
> +               goto sleep;
> +
> +       memcpy(mac, buf, ARP_HLEN);
> +
> +sleep:
> +       atsha204a_sleep(dev);
> +       return ret;
> +}
> diff --git a/board/google/chameleonv3/mercury_aa1.h b/board/google/chameleonv3/mercury_aa1.h
> new file mode 100644
> index 0000000000..636b735a3b
> --- /dev/null
> +++ b/board/google/chameleonv3/mercury_aa1.h
> @@ -0,0 +1,12 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +/*
> + * Copyright 2022 Google LLC
> + */
> +
> +/**
> + * mercury_aa1_read_mac() - Read mac address from on-board OTP memory
> + *
> + * @mac: Returned mac address
> + * Return: 0 if successful, -ve on error
> + */
> +int mercury_aa1_read_mac(u8 *mac);
> --
> 2.35.1.1094.g7c7d902a7c-goog
>
diff mbox series

Patch

diff --git a/board/google/chameleonv3/Makefile b/board/google/chameleonv3/Makefile
new file mode 100644
index 0000000000..bb413fde83
--- /dev/null
+++ b/board/google/chameleonv3/Makefile
@@ -0,0 +1,5 @@ 
+# SPDX-License-Identifier: GPL-2.0
+#
+# Copyright 2022 Google LLC
+
+obj-y	:= board.o mercury_aa1.o
diff --git a/board/google/chameleonv3/board.c b/board/google/chameleonv3/board.c
new file mode 100644
index 0000000000..4d3049689d
--- /dev/null
+++ b/board/google/chameleonv3/board.c
@@ -0,0 +1,27 @@ 
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2022 Google LLC
+ */
+#include <net.h>
+#include <errno.h>
+#include "mercury_aa1.h"
+
+int misc_init_r(void)
+{
+	u8 mac[ARP_HLEN];
+	int res;
+
+	if (env_get("ethaddr"))
+		return 0;
+
+	res = mercury_aa1_read_mac(mac);
+	if (res) {
+		printf("couldn't read mac address: %s\n", errno_str(res));
+		return 0;
+	}
+
+	if (is_valid_ethaddr(mac))
+		eth_env_set_enetaddr("ethaddr", mac);
+
+	return 0;
+}
diff --git a/board/google/chameleonv3/fpga.its b/board/google/chameleonv3/fpga.its
new file mode 100644
index 0000000000..85a830002f
--- /dev/null
+++ b/board/google/chameleonv3/fpga.its
@@ -0,0 +1,28 @@ 
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2022 Google LLC
+ */
+/dts-v1/;
+
+/ {
+	description = "FIT image with FPGA bistream";
+	#address-cells = <1>;
+
+	images {
+		fpga-periph-1 {
+			description = "FPGA full bitstream";
+			data = /incbin/("../../../fpga.rbf");
+			type = "fpga";
+			arch = "arm";
+			compression = "none";
+		};
+	};
+
+	configurations {
+		default = "config-1";
+		config-1 {
+			description = "Boot with FPGA config";
+			fpga = "fpga-periph-1";
+		};
+	};
+};
diff --git a/board/google/chameleonv3/fpga_early_io.its b/board/google/chameleonv3/fpga_early_io.its
new file mode 100644
index 0000000000..ebc7bcbaae
--- /dev/null
+++ b/board/google/chameleonv3/fpga_early_io.its
@@ -0,0 +1,35 @@ 
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2022 Google LLC
+ */
+/dts-v1/;
+
+/ {
+	description = "FIT image with FPGA bistream";
+	#address-cells = <1>;
+
+	images {
+		fpga-periph-1 {
+			description = "FPGA peripheral bitstream";
+			data = /incbin/("../../../periph.rbf");
+			type = "fpga";
+			arch = "arm";
+			compression = "none";
+		};
+		fpga-core-1 {
+			description = "FPGA core bitstream";
+			data = /incbin/("../../../core.rbf");
+			type = "fpga";
+			arch = "arm";
+			compression = "none";
+		};
+	};
+
+	configurations {
+		default = "config-1";
+		config-1 {
+			description = "Boot with FPGA config";
+			fpga = "fpga-periph-1", "fpga-core-1";
+		};
+	};
+};
diff --git a/board/google/chameleonv3/mercury_aa1.c b/board/google/chameleonv3/mercury_aa1.c
new file mode 100644
index 0000000000..ed447ec37c
--- /dev/null
+++ b/board/google/chameleonv3/mercury_aa1.c
@@ -0,0 +1,43 @@ 
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2022 Google LLC
+ */
+#include <net.h>
+#include <dm/device.h>
+#include <dm/uclass.h>
+#include <atsha204a-i2c.h>
+#include "mercury_aa1.h"
+
+#define MERCURY_AA1_ATSHA204A_OTP_MAC0 4
+#define MERCURY_AA1_ATSHA204A_OTP_MAC1 5
+
+int mercury_aa1_read_mac(u8 *mac)
+{
+	struct udevice *dev;
+	u8 buf[8];
+	int ret;
+
+	ret = uclass_get_device_by_name(UCLASS_MISC, "atsha204a@64", &dev);
+	if (ret)
+		return ret;
+
+	ret = atsha204a_wakeup(dev);
+	if (ret)
+		return ret;
+
+	ret = atsha204a_read(dev, ATSHA204A_ZONE_OTP, false,
+			     MERCURY_AA1_ATSHA204A_OTP_MAC0, buf);
+	if (ret)
+		goto sleep;
+
+	ret = atsha204a_read(dev, ATSHA204A_ZONE_OTP, false,
+			     MERCURY_AA1_ATSHA204A_OTP_MAC1, buf + 4);
+	if (ret)
+		goto sleep;
+
+	memcpy(mac, buf, ARP_HLEN);
+
+sleep:
+	atsha204a_sleep(dev);
+	return ret;
+}
diff --git a/board/google/chameleonv3/mercury_aa1.h b/board/google/chameleonv3/mercury_aa1.h
new file mode 100644
index 0000000000..636b735a3b
--- /dev/null
+++ b/board/google/chameleonv3/mercury_aa1.h
@@ -0,0 +1,12 @@ 
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2022 Google LLC
+ */
+
+/**
+ * mercury_aa1_read_mac() - Read mac address from on-board OTP memory
+ *
+ * @mac: Returned mac address
+ * Return: 0 if successful, -ve on error
+ */
+int mercury_aa1_read_mac(u8 *mac);