]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
board: Add Chameleonv3 board dir
authorPaweł Anikiel <pan@semihalf.com>
Fri, 17 Jun 2022 10:47:19 +0000 (12:47 +0200)
committerTien Fong Chee <tien.fong.chee@intel.com>
Fri, 1 Jul 2022 06:57:14 +0000 (14:57 +0800)
Add board directory for Google Chameleon V3 board

Signed-off-by: Paweł Anikiel <pan@semihalf.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
board/google/chameleonv3/Makefile [new file with mode: 0644]
board/google/chameleonv3/board.c [new file with mode: 0644]
board/google/chameleonv3/fpga.its [new file with mode: 0644]
board/google/chameleonv3/fpga_early_io.its [new file with mode: 0644]
board/google/chameleonv3/mercury_aa1.c [new file with mode: 0644]
board/google/chameleonv3/mercury_aa1.h [new file with mode: 0644]

diff --git a/board/google/chameleonv3/Makefile b/board/google/chameleonv3/Makefile
new file mode 100644 (file)
index 0000000..bb413fd
--- /dev/null
@@ -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 (file)
index 0000000..4d30496
--- /dev/null
@@ -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 (file)
index 0000000..85a8300
--- /dev/null
@@ -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 (file)
index 0000000..ebc7bcb
--- /dev/null
@@ -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 (file)
index 0000000..ed447ec
--- /dev/null
@@ -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 (file)
index 0000000..636b735
--- /dev/null
@@ -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);