On Fri, 1 Apr 2022 at 06:44, Paweł Anikiel <p...@semihalf.com> wrote: > > Add board directory for Google Chameleon V3 board > > Signed-off-by: Paweł Anikiel <p...@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 <s...@chromium.org> On Fri, 1 Apr 2022 at 06:44, Paweł Anikiel <p...@semihalf.com> wrote: > > Add board directory for Google Chameleon V3 board > > Signed-off-by: Paweł Anikiel <p...@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 >