1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright (C) 2018 Marek Behun <marek.behun@nic.cz>
10 #include <linux/string.h>
12 #ifdef CONFIG_WDT_ARMADA_37XX
16 DECLARE_GLOBAL_DATA_PTR
;
18 #ifdef CONFIG_WDT_ARMADA_37XX
19 static struct udevice
*watchdog_dev
;
21 void watchdog_reset(void)
23 static ulong next_reset
;
31 /* Do not reset the watchdog too often */
32 if (now
> next_reset
) {
33 wdt_reset(watchdog_dev
);
34 next_reset
= now
+ 100000;
41 /* address of boot parameters */
42 gd
->bd
->bi_boot_params
= CONFIG_SYS_SDRAM_BASE
+ 0x100;
44 #ifdef CONFIG_WDT_ARMADA_37XX
45 if (uclass_get_device(UCLASS_WDT
, 0, &watchdog_dev
)) {
46 printf("Cannot find Armada 3720 watchdog!\n");
48 printf("Enabling Armada 3720 watchdog (3 minutes timeout).\n");
49 wdt_start(watchdog_dev
, 180000, 0);
56 int last_stage_init(void)
58 struct spi_slave
*slave
;
63 char module_topology
[128];
65 ret
= spi_get_bus_and_cs(0, 1, 20000000, SPI_CPHA
, "spi_generic_drv",
66 "mox-modules@1", &dev
, &slave
);
70 ret
= spi_claim_bus(slave
);
77 ret
= spi_xfer(slave
, 80, dout
, din
, SPI_XFER_ONCE
);
81 if (din
[0] != 0x00 && din
[0] != 0xff)
84 printf("Module Topology:\n");
85 for (i
= 1; i
< 10 && din
[i
] != 0xff; ++i
) {
86 u8 mid
= din
[i
] & 0xf;
88 const char *mname
= "";
93 printf("% 4i: SFP Module\n", i
);
97 printf("% 4i: Mini-PCIe Module\n", i
);
101 printf("% 4i: Topaz Switch Module\n", i
);
104 printf("% 4i: unknown (ID %i)\n", i
, mid
);
107 mlen
= strlen(mname
);
108 if (len
+ mlen
< sizeof(module_topology
)) {
109 strcpy(module_topology
+ len
, mname
);
115 module_topology
[len
> 0 ? len
- 1 : 0] = '\0';
117 env_set("module_topology", module_topology
);
120 spi_release_bus(slave
);
122 spi_free_slave(slave
);
125 printf("Cannot read module topology!\n");