Merge git://git.denx.de/u-boot-marvell
- Add DM based generic watchdog start and reset implementation and remove all ad-hoc implementations (Stefan) - Move mv_sdhci to DM (Pierre) - Misc turris_omnia updates (Pierre) - Change openrd targets to correctly build again (size changes and fixes to the dts targets) and bring it back into Travis builds (Stefan) - Add Kirkwood db-88f6281-bp board (Chris)
This commit is contained in:
		
						commit
						07b68b7843
					
				|  | @ -235,9 +235,9 @@ matrix: | ||||||
|       env: |       env: | ||||||
|         - BUILDMAN="sandbox x86" |         - BUILDMAN="sandbox x86" | ||||||
|           TOOLCHAIN="i386" |           TOOLCHAIN="i386" | ||||||
|     - name: "buildman kirkwood (excluding openrd)" |     - name: "buildman kirkwood" | ||||||
|       env: |       env: | ||||||
|         - BUILDMAN="kirkwood -x openrd" |         - BUILDMAN="kirkwood" | ||||||
|     - name: "buildman mvebu" |     - name: "buildman mvebu" | ||||||
|       env: |       env: | ||||||
|         - BUILDMAN="mvebu" |         - BUILDMAN="mvebu" | ||||||
|  |  | ||||||
|  | @ -37,6 +37,8 @@ dtb-$(CONFIG_KIRKWOOD) += \ | ||||||
| 	kirkwood-atl-sbx81lifxcat.dtb \
 | 	kirkwood-atl-sbx81lifxcat.dtb \
 | ||||||
| 	kirkwood-blackarmor-nas220.dtb \
 | 	kirkwood-blackarmor-nas220.dtb \
 | ||||||
| 	kirkwood-d2net.dtb \
 | 	kirkwood-d2net.dtb \
 | ||||||
|  | 	kirkwood-db-88f6281.dtb \
 | ||||||
|  | 	kirkwood-db-88f6281-spi.dtb \
 | ||||||
| 	kirkwood-dns325.dtb \
 | 	kirkwood-dns325.dtb \
 | ||||||
| 	kirkwood-dockstar.dtb \
 | 	kirkwood-dockstar.dtb \
 | ||||||
| 	kirkwood-dreamplug.dtb \
 | 	kirkwood-dreamplug.dtb \
 | ||||||
|  | @ -54,6 +56,9 @@ dtb-$(CONFIG_KIRKWOOD) += \ | ||||||
| 	kirkwood-ns2lite.dtb \
 | 	kirkwood-ns2lite.dtb \
 | ||||||
| 	kirkwood-ns2max.dtb \
 | 	kirkwood-ns2max.dtb \
 | ||||||
| 	kirkwood-ns2mini.dtb \
 | 	kirkwood-ns2mini.dtb \
 | ||||||
|  | 	kirkwood-openrd-base.dtb \
 | ||||||
|  | 	kirkwood-openrd-client.dtb \
 | ||||||
|  | 	kirkwood-openrd-ultimate.dtb \
 | ||||||
| 	kirkwood-pogo_e02.dtb \
 | 	kirkwood-pogo_e02.dtb \
 | ||||||
| 	kirkwood-sheevaplug.dtb | 	kirkwood-sheevaplug.dtb | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,48 @@ | ||||||
|  | // SPDX-License-Identifier: GPL-2.0 | ||||||
|  | /* | ||||||
|  |  * Marvell DB-88F6281-BP Development Board Setup | ||||||
|  |  * | ||||||
|  |  * Saeed Bishara <saeed@marvell.com> | ||||||
|  |  * Thomas Petazzoni <thomas.petazzoni@free-electrons.com> | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /dts-v1/; | ||||||
|  | 
 | ||||||
|  | #include "kirkwood-db-88f6281.dts" | ||||||
|  | 
 | ||||||
|  | / { | ||||||
|  | 	aliases { | ||||||
|  | 		spi0 = &spi0; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | &spi0 { | ||||||
|  | 	status = "okay"; | ||||||
|  | 
 | ||||||
|  | 	flash@0 { | ||||||
|  | 		#address-cells = <1>; | ||||||
|  | 		#size-cells = <1>; | ||||||
|  | 		compatible = "st,m25p128", "jedec,spi-nor", "spi-flash"; | ||||||
|  | 		reg = <0>; | ||||||
|  | 		spi-max-frequency = <50000000>; | ||||||
|  | 		mode = <0>; | ||||||
|  | 
 | ||||||
|  | 		partition@u-boot { | ||||||
|  | 			reg = <0x00000000 0x00c00000>; | ||||||
|  | 			label = "u-boot"; | ||||||
|  | 		}; | ||||||
|  | 		partition@u-boot-env { | ||||||
|  | 			reg = <0x00c00000 0x00040000>; | ||||||
|  | 			label = "u-boot-env"; | ||||||
|  | 		}; | ||||||
|  | 		partition@unused { | ||||||
|  | 			reg = <0x00100000 0x00f00000>; | ||||||
|  | 			label = "unused"; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | &nand { | ||||||
|  | 	status = "disabled"; | ||||||
|  | }; | ||||||
|  | @ -0,0 +1,26 @@ | ||||||
|  | // SPDX-License-Identifier: GPL-2.0 | ||||||
|  | /* | ||||||
|  |  * Marvell DB-88F6281-BP Development Board Setup | ||||||
|  |  * | ||||||
|  |  * Saeed Bishara <saeed@marvell.com> | ||||||
|  |  * Thomas Petazzoni <thomas.petazzoni@free-electrons.com> | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | /dts-v1/; | ||||||
|  | 
 | ||||||
|  | #include "kirkwood-db.dtsi" | ||||||
|  | #include "kirkwood-6281.dtsi" | ||||||
|  | 
 | ||||||
|  | / { | ||||||
|  | 	model = "Marvell DB-88F6281-BP Development Board"; | ||||||
|  | 	compatible = "marvell,db-88f6281-bp", "marvell,kirkwood-88f6281", "marvell,kirkwood"; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | &pciec { | ||||||
|  |         status = "okay"; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | &pcie0 { | ||||||
|  | 	status = "okay"; | ||||||
|  | }; | ||||||
|  | @ -0,0 +1,94 @@ | ||||||
|  | // SPDX-License-Identifier: GPL-2.0 | ||||||
|  | /* | ||||||
|  |  * Marvell DB-{88F6281,88F6282}-BP Development Board Setup | ||||||
|  |  * | ||||||
|  |  * Saeed Bishara <saeed@marvell.com> | ||||||
|  |  * Thomas Petazzoni <thomas.petazzoni@free-electrons.com> | ||||||
|  |  * | ||||||
|  |  * This file contains the definitions that are common between the 6281 | ||||||
|  |  * and 6282 variants of the Marvell Kirkwood Development Board. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #include "kirkwood.dtsi" | ||||||
|  | 
 | ||||||
|  | / { | ||||||
|  | 	memory { | ||||||
|  | 		device_type = "memory"; | ||||||
|  | 		reg = <0x00000000 0x20000000>; /* 512 MB */ | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
|  | 	chosen { | ||||||
|  | 		bootargs = "console=ttyS0,115200n8 earlyprintk"; | ||||||
|  | 		stdout-path = &uart0; | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
|  | 	aliases { | ||||||
|  | 		ethernet0 = ð0; | ||||||
|  | 		spi0 = &spi0; | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
|  | 	ocp@f1000000 { | ||||||
|  | 		pin-controller@10000 { | ||||||
|  | 			pmx_sdio_gpios: pmx-sdio-gpios { | ||||||
|  | 				marvell,pins = "mpp37", "mpp38"; | ||||||
|  | 				marvell,function = "gpio"; | ||||||
|  | 			}; | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 		serial@12000 { | ||||||
|  | 			status = "okay"; | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 		sata@80000 { | ||||||
|  | 			nr-ports = <2>; | ||||||
|  | 			status = "okay"; | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 		ehci@50000 { | ||||||
|  | 			status = "okay"; | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 		mvsdio@90000 { | ||||||
|  | 			pinctrl-0 = <&pmx_sdio_gpios>; | ||||||
|  | 			pinctrl-names = "default"; | ||||||
|  | 			wp-gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>; | ||||||
|  | 			cd-gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>; | ||||||
|  | 			status = "okay"; | ||||||
|  | 		}; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | &nand { | ||||||
|  | 	chip-delay = <25>; | ||||||
|  | 	status = "okay"; | ||||||
|  | 
 | ||||||
|  | 	partition@0 { | ||||||
|  | 		label = "uboot"; | ||||||
|  | 		reg = <0x0 0x100000>; | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
|  | 	partition@100000 { | ||||||
|  | 		label = "uImage"; | ||||||
|  | 		reg = <0x100000 0x400000>; | ||||||
|  | 	}; | ||||||
|  | 
 | ||||||
|  | 	partition@500000 { | ||||||
|  | 		label = "root"; | ||||||
|  | 		reg = <0x500000 0x1fb00000>; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | &mdio { | ||||||
|  | 	status = "okay"; | ||||||
|  | 
 | ||||||
|  | 	ethphy0: ethernet-phy@8 { | ||||||
|  | 		reg = <8>; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | ð0 { | ||||||
|  | 	status = "okay"; | ||||||
|  | 	ethernet0-port@0 { | ||||||
|  | 		phy-handle = <ðphy0>; | ||||||
|  | 	}; | ||||||
|  | }; | ||||||
|  | @ -14,8 +14,6 @@ | ||||||
| 
 | 
 | ||||||
| #define EN_UPLL_TIMEOUT		500 | #define EN_UPLL_TIMEOUT		500 | ||||||
| 
 | 
 | ||||||
| static struct udevice *watchdog_dev __attribute__((section(".data"))) = NULL; |  | ||||||
| 
 |  | ||||||
| void at91_periph_clk_enable(int id) | void at91_periph_clk_enable(int id) | ||||||
| { | { | ||||||
| 	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; | 	struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC; | ||||||
|  | @ -123,46 +121,3 @@ void at91_pllicpr_init(u32 icpr) | ||||||
| 
 | 
 | ||||||
| 	writel(icpr, &pmc->pllicpr); | 	writel(icpr, &pmc->pllicpr); | ||||||
| } | } | ||||||
| 
 |  | ||||||
| /* Called by macro WATCHDOG_RESET */ |  | ||||||
| void watchdog_reset(void) |  | ||||||
| { |  | ||||||
| 	static ulong next_reset; |  | ||||||
| 	ulong now; |  | ||||||
| 
 |  | ||||||
| 	if (!watchdog_dev) |  | ||||||
| 		return; |  | ||||||
| 
 |  | ||||||
| 	now = get_timer(0); |  | ||||||
| 
 |  | ||||||
| 	/* Do not reset the watchdog too often */ |  | ||||||
| 	if (now > next_reset) { |  | ||||||
| 		next_reset = now + 1000;	/* reset every 1000ms */ |  | ||||||
| 		wdt_reset(watchdog_dev); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| int arch_early_init_r(void) |  | ||||||
| { |  | ||||||
| 	struct at91_wdt_priv *priv; |  | ||||||
| 
 |  | ||||||
| 	/* Init watchdog */ |  | ||||||
| 	if (uclass_get_device_by_seq(UCLASS_WDT, 0, &watchdog_dev)) { |  | ||||||
| 		debug("Watchdog: Not found by seq!\n"); |  | ||||||
| 		if (uclass_get_device(UCLASS_WDT, 0, &watchdog_dev)) { |  | ||||||
| 			puts("Watchdog: Not found!\n"); |  | ||||||
| 			return 0; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	priv = dev_get_priv(watchdog_dev); |  | ||||||
| 	if (!priv) { |  | ||||||
| 		printf("Watchdog: priv not available!\n"); |  | ||||||
| 		return 0; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	wdt_start(watchdog_dev, priv->timeout * 1000, 0); |  | ||||||
| 	printf("Watchdog: Started\n"); |  | ||||||
| 
 |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  | @ -28,7 +28,6 @@ typedef struct at91_wdt { | ||||||
| struct at91_wdt_priv { | struct at91_wdt_priv { | ||||||
| 	void __iomem *regs; | 	void __iomem *regs; | ||||||
| 	u32 regval; | 	u32 regval; | ||||||
| 	u32 timeout; |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
|  | @ -51,6 +50,5 @@ struct at91_wdt_priv { | ||||||
| 
 | 
 | ||||||
| /* Hardware timeout in seconds */ | /* Hardware timeout in seconds */ | ||||||
| #define WDT_MAX_TIMEOUT		16 | #define WDT_MAX_TIMEOUT		16 | ||||||
| #define WDT_DEFAULT_TIMEOUT	2 |  | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -65,6 +65,9 @@ config TARGET_SBx81LIFKW | ||||||
| config TARGET_SBx81LIFXCAT | config TARGET_SBx81LIFXCAT | ||||||
| 	bool "Allied Telesis SBx81GP24/SBx81GT24" | 	bool "Allied Telesis SBx81GP24/SBx81GT24" | ||||||
| 
 | 
 | ||||||
|  | config TARGET_DB_88F6281_BP | ||||||
|  | 	bool "Marvell DB-88F6281-BP" | ||||||
|  | 
 | ||||||
| endchoice | endchoice | ||||||
| 
 | 
 | ||||||
| config SYS_SOC | config SYS_SOC | ||||||
|  | @ -89,5 +92,6 @@ source "board/Seagate/nas220/Kconfig" | ||||||
| source "board/zyxel/nsa310s/Kconfig" | source "board/zyxel/nsa310s/Kconfig" | ||||||
| source "board/alliedtelesis/SBx81LIFKW/Kconfig" | source "board/alliedtelesis/SBx81LIFKW/Kconfig" | ||||||
| source "board/alliedtelesis/SBx81LIFXCAT/Kconfig" | source "board/alliedtelesis/SBx81LIFXCAT/Kconfig" | ||||||
|  | source "board/Marvell/db-88f6281-bp/Kconfig" | ||||||
| 
 | 
 | ||||||
| endif | endif | ||||||
|  |  | ||||||
|  | @ -520,7 +520,7 @@ int arch_misc_init(void) | ||||||
| } | } | ||||||
| #endif /* CONFIG_ARCH_MISC_INIT */ | #endif /* CONFIG_ARCH_MISC_INIT */ | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_MMC_SDHCI_MV | #if defined(CONFIG_MMC_SDHCI_MV) && !defined(CONFIG_DM_MMC) | ||||||
| int board_mmc_init(bd_t *bis) | int board_mmc_init(bd_t *bis) | ||||||
| { | { | ||||||
| 	mv_sdh_init(MVEBU_SDIO_BASE, 0, 0, | 	mv_sdh_init(MVEBU_SDIO_BASE, 0, 0, | ||||||
|  |  | ||||||
|  | @ -144,7 +144,9 @@ u32 mvebu_get_nand_clock(void); | ||||||
| 
 | 
 | ||||||
| void return_to_bootrom(void); | void return_to_bootrom(void); | ||||||
| 
 | 
 | ||||||
|  | #ifndef CONFIG_DM_MMC | ||||||
| int mv_sdh_init(unsigned long regbase, u32 max_clk, u32 min_clk, u32 quirks); | int mv_sdh_init(unsigned long regbase, u32 max_clk, u32 min_clk, u32 quirks); | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| void get_sar_freq(struct sar_freq_modes *sar_freq); | void get_sar_freq(struct sar_freq_modes *sar_freq); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -69,28 +69,6 @@ int print_cpuinfo(void) | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_WATCHDOG |  | ||||||
| static struct udevice *watchdog_dev __attribute__((section(".data"))) = NULL; |  | ||||||
| 
 |  | ||||||
| /* Called by macro WATCHDOG_RESET */ |  | ||||||
| void watchdog_reset(void) |  | ||||||
| { |  | ||||||
| 	static ulong next_reset; |  | ||||||
| 	ulong now; |  | ||||||
| 
 |  | ||||||
| 	if (!watchdog_dev) |  | ||||||
| 		return; |  | ||||||
| 
 |  | ||||||
| 	now = get_timer(0); |  | ||||||
| 
 |  | ||||||
| 	/* Do not reset the watchdog too often */ |  | ||||||
| 	if (now > next_reset) { |  | ||||||
| 		next_reset = now + 1000;	/* reset every 1000ms */ |  | ||||||
| 		wdt_reset(watchdog_dev); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| int arch_misc_init(void) | int arch_misc_init(void) | ||||||
| { | { | ||||||
| 	/*
 | 	/*
 | ||||||
|  | @ -103,19 +81,5 @@ int arch_misc_init(void) | ||||||
| 	flush_dcache_range(gd->bd->bi_memstart, | 	flush_dcache_range(gd->bd->bi_memstart, | ||||||
| 			   gd->bd->bi_memstart + gd->ram_size - 1); | 			   gd->bd->bi_memstart + gd->ram_size - 1); | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_WATCHDOG |  | ||||||
| 	/* Init watchdog */ |  | ||||||
| 	if (uclass_get_device_by_seq(UCLASS_WDT, 0, &watchdog_dev)) { |  | ||||||
| 		debug("Watchdog: Not found by seq!\n"); |  | ||||||
| 		if (uclass_get_device(UCLASS_WDT, 0, &watchdog_dev)) { |  | ||||||
| 			puts("Watchdog: Not found!\n"); |  | ||||||
| 			return 0; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	wdt_start(watchdog_dev, 60000, 0);	/* 60 seconds */ |  | ||||||
| 	printf("Watchdog: Started\n"); |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -35,7 +35,7 @@ config MPC8xx | ||||||
| 	bool "MPC8xx" | 	bool "MPC8xx" | ||||||
| 	select BOARD_EARLY_INIT_F | 	select BOARD_EARLY_INIT_F | ||||||
| 	imply CMD_REGINFO | 	imply CMD_REGINFO | ||||||
| 	imply MPC8xx_WATCHDOG | 	imply WDT_MPC8xx | ||||||
| 
 | 
 | ||||||
| endchoice | endchoice | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -25,9 +25,9 @@ config MPC885 | ||||||
| 
 | 
 | ||||||
| endchoice | endchoice | ||||||
| 
 | 
 | ||||||
| config MPC8xx_WATCHDOG | #config MPC8xx_WATCHDOG | ||||||
| 	bool "Watchdog" | #	bool "Watchdog" | ||||||
| 	select HW_WATCHDOG | #	select HW_WATCHDOG | ||||||
| 
 | 
 | ||||||
| config 8xx_GCLK_FREQ | config 8xx_GCLK_FREQ | ||||||
| 	int "CPU GCLK Frequency" | 	int "CPU GCLK Frequency" | ||||||
|  |  | ||||||
|  | @ -119,41 +119,11 @@ int board_fix_fdt(void *blob) | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_WDT_ARMADA_37XX |  | ||||||
| static struct udevice *watchdog_dev __attribute__((section(".data"))) = NULL; |  | ||||||
| 
 |  | ||||||
| void watchdog_reset(void) |  | ||||||
| { |  | ||||||
| 	static ulong next_reset; |  | ||||||
| 	ulong now; |  | ||||||
| 
 |  | ||||||
| 	if (!watchdog_dev) |  | ||||||
| 		return; |  | ||||||
| 
 |  | ||||||
| 	now = timer_get_us(); |  | ||||||
| 
 |  | ||||||
| 	/* Do not reset the watchdog too often */ |  | ||||||
| 	if (now > next_reset) { |  | ||||||
| 		wdt_reset(watchdog_dev); |  | ||||||
| 		next_reset = now + 100000; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| int board_init(void) | int board_init(void) | ||||||
| { | { | ||||||
| 	/* address of boot parameters */ | 	/* address of boot parameters */ | ||||||
| 	gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100; | 	gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100; | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_WDT_ARMADA_37XX |  | ||||||
| 	if (uclass_get_device(UCLASS_WDT, 0, &watchdog_dev)) { |  | ||||||
| 		printf("Cannot find Armada 3720 watchdog!\n"); |  | ||||||
| 	} else { |  | ||||||
| 		printf("Enabling Armada 3720 watchdog (3 minutes timeout).\n"); |  | ||||||
| 		wdt_start(watchdog_dev, 180000, 0); |  | ||||||
| 	} |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -32,13 +32,13 @@ | ||||||
| 
 | 
 | ||||||
| DECLARE_GLOBAL_DATA_PTR; | DECLARE_GLOBAL_DATA_PTR; | ||||||
| 
 | 
 | ||||||
| #define OMNIA_I2C_EEPROM_DM_NAME	"i2c@0" | #define OMNIA_I2C_EEPROM_DM_NAME	"i2c@11000->i2cmux@70->i2c@0" | ||||||
| #define OMNIA_I2C_EEPROM		0x54 | #define OMNIA_I2C_EEPROM		0x54 | ||||||
| #define OMNIA_I2C_EEPROM_CONFIG_ADDR	0x0 | #define OMNIA_I2C_EEPROM_CONFIG_ADDR	0x0 | ||||||
| #define OMNIA_I2C_EEPROM_ADDRLEN	2 | #define OMNIA_I2C_EEPROM_ADDRLEN	2 | ||||||
| #define OMNIA_I2C_EEPROM_MAGIC		0x0341a034 | #define OMNIA_I2C_EEPROM_MAGIC		0x0341a034 | ||||||
| 
 | 
 | ||||||
| #define OMNIA_I2C_MCU_DM_NAME		"i2c@0" | #define OMNIA_I2C_MCU_DM_NAME		"i2c@11000->i2cmux@70->i2c@0" | ||||||
| #define OMNIA_I2C_MCU_ADDR_STATUS	0x1 | #define OMNIA_I2C_MCU_ADDR_STATUS	0x1 | ||||||
| #define OMNIA_I2C_MCU_SATA		0x20 | #define OMNIA_I2C_MCU_SATA		0x20 | ||||||
| #define OMNIA_I2C_MCU_CARDDET		0x10 | #define OMNIA_I2C_MCU_CARDDET		0x10 | ||||||
|  | @ -364,25 +364,12 @@ static bool disable_mcu_watchdog(void) | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_WDT_ORION) |  | ||||||
| static struct udevice *watchdog_dev __attribute__((section(".data"))) = NULL; |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| int board_init(void) | int board_init(void) | ||||||
| { | { | ||||||
| 	/* adress of boot parameters */ | 	/* adress of boot parameters */ | ||||||
| 	gd->bd->bi_boot_params = mvebu_sdram_bar(0) + 0x100; | 	gd->bd->bi_boot_params = mvebu_sdram_bar(0) + 0x100; | ||||||
| 
 | 
 | ||||||
| #ifndef CONFIG_SPL_BUILD | #ifndef CONFIG_SPL_BUILD | ||||||
| # ifdef CONFIG_WDT_ORION |  | ||||||
| 	if (uclass_get_device(UCLASS_WDT, 0, &watchdog_dev)) { |  | ||||||
| 		puts("Cannot find Armada 385 watchdog!\n"); |  | ||||||
| 	} else { |  | ||||||
| 		puts("Enabling Armada 385 watchdog.\n"); |  | ||||||
| 		wdt_start(watchdog_dev, 120000, 0); |  | ||||||
| 	} |  | ||||||
| # endif |  | ||||||
| 
 |  | ||||||
| 	if (disable_mcu_watchdog()) | 	if (disable_mcu_watchdog()) | ||||||
| 		puts("Disabled MCU startup watchdog.\n"); | 		puts("Disabled MCU startup watchdog.\n"); | ||||||
| 
 | 
 | ||||||
|  | @ -392,28 +379,6 @@ int board_init(void) | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_WATCHDOG |  | ||||||
| /* Called by macro WATCHDOG_RESET */ |  | ||||||
| void watchdog_reset(void) |  | ||||||
| { |  | ||||||
| # if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_WDT_ORION) |  | ||||||
| 	static ulong next_reset = 0; |  | ||||||
| 	ulong now; |  | ||||||
| 
 |  | ||||||
| 	if (!watchdog_dev) |  | ||||||
| 		return; |  | ||||||
| 
 |  | ||||||
| 	now = timer_get_us(); |  | ||||||
| 
 |  | ||||||
| 	/* Do not reset the watchdog too often */ |  | ||||||
| 	if (now > next_reset) { |  | ||||||
| 		wdt_reset(watchdog_dev); |  | ||||||
| 		next_reset = now + 1000; |  | ||||||
| 	} |  | ||||||
| # endif |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| int board_late_init(void) | int board_late_init(void) | ||||||
| { | { | ||||||
| #ifndef CONFIG_SPL_BUILD | #ifndef CONFIG_SPL_BUILD | ||||||
|  |  | ||||||
|  | @ -0,0 +1 @@ | ||||||
|  | kwbimage.cfg | ||||||
|  | @ -0,0 +1,12 @@ | ||||||
|  | if TARGET_DB_88F6281_BP | ||||||
|  | 
 | ||||||
|  | config SYS_BOARD | ||||||
|  | 	default "db-88f6281-bp" | ||||||
|  | 
 | ||||||
|  | config SYS_VENDOR | ||||||
|  | 	default "Marvell" | ||||||
|  | 
 | ||||||
|  | config SYS_CONFIG_NAME | ||||||
|  | 	default "db-88f6281-bp" | ||||||
|  | 
 | ||||||
|  | endif | ||||||
|  | @ -0,0 +1,10 @@ | ||||||
|  | DB_88F6820_AMC BOARD | ||||||
|  | M:	Chris Packham <judge.packham@gmail.com> | ||||||
|  | S:	Maintained | ||||||
|  | F:	arch/arm/dts/kirkwood-db-88f6281.dts | ||||||
|  | F:	arch/arm/dts/kirkwood-db-88f6281-spi.dts | ||||||
|  | F:	arch/arm/dts/kirkwood-db.dtsi | ||||||
|  | F:	board/Marvell/db-88f6281-bp/ | ||||||
|  | F:	include/configs/db-88f6281-bp.h | ||||||
|  | F:	configs/db-88f6281-bp-nand_defconfig | ||||||
|  | F:	configs/db-88f6281-bp-spi_defconfig | ||||||
|  | @ -0,0 +1,12 @@ | ||||||
|  | # SPDX-License-Identifier: GPL-2.0+
 | ||||||
|  | 
 | ||||||
|  | obj-y	:= db-88f6281-bp.o | ||||||
|  | extra-y := kwbimage.cfg | ||||||
|  | 
 | ||||||
|  | quiet_cmd_sed = SED     $@ | ||||||
|  |       cmd_sed = sed $(SEDFLAGS_$(@F)) $< >$(dir $<)$(@F) | ||||||
|  | 
 | ||||||
|  | SEDFLAGS_kwbimage.cfg = -e "s/^\#@BOOT_FROM.*/BOOT_FROM	$(if $(CONFIG_CMD_NAND),nand,spi)/" | ||||||
|  | $(src)/kwbimage.cfg: $(src)/kwbimage.cfg.in include/autoconf.mk \ | ||||||
|  | 		include/config/auto.conf | ||||||
|  | 	$(call if_changed,sed) | ||||||
|  | @ -0,0 +1,103 @@ | ||||||
|  | // SPDX-License-Identifier: GPL-2.0+
 | ||||||
|  | 
 | ||||||
|  | #include <common.h> | ||||||
|  | #include <linux/io.h> | ||||||
|  | #include <miiphy.h> | ||||||
|  | #include <netdev.h> | ||||||
|  | #include <asm/arch/cpu.h> | ||||||
|  | #include <asm/arch/soc.h> | ||||||
|  | #include <asm/arch/mpp.h> | ||||||
|  | #include <asm/arch/gpio.h> | ||||||
|  | 
 | ||||||
|  | #define DB_88F6281_OE_LOW	~(BIT(7)) | ||||||
|  | #define DB_88F6281_OE_HIGH	~(BIT(15) | BIT(14) | BIT(13) | BIT(4)) | ||||||
|  | #define DB_88F6281_OE_VAL_LOW	BIT(7) | ||||||
|  | #define DB_88F6281_OE_VAL_HIGH	0 | ||||||
|  | 
 | ||||||
|  | DECLARE_GLOBAL_DATA_PTR; | ||||||
|  | 
 | ||||||
|  | int board_early_init_f(void) | ||||||
|  | { | ||||||
|  | 	mvebu_config_gpio(DB_88F6281_OE_VAL_LOW, | ||||||
|  | 			  DB_88F6281_OE_VAL_HIGH, | ||||||
|  | 			  DB_88F6281_OE_LOW, DB_88F6281_OE_HIGH); | ||||||
|  | 
 | ||||||
|  | 	/* Multi-Purpose Pins Functionality configuration */ | ||||||
|  | 	static const u32 kwmpp_config[] = { | ||||||
|  | #ifdef CONFIG_CMD_NAND | ||||||
|  | 		MPP0_NF_IO2, | ||||||
|  | 		MPP1_NF_IO3, | ||||||
|  | 		MPP2_NF_IO4, | ||||||
|  | 		MPP3_NF_IO5, | ||||||
|  | #else | ||||||
|  | 		MPP0_SPI_SCn, | ||||||
|  | 		MPP1_SPI_MOSI, | ||||||
|  | 		MPP2_SPI_SCK, | ||||||
|  | 		MPP3_SPI_MISO, | ||||||
|  | #endif | ||||||
|  | 		MPP4_NF_IO6, | ||||||
|  | 		MPP5_NF_IO7, | ||||||
|  | 		MPP6_SYSRST_OUTn, | ||||||
|  | 		MPP7_GPO, | ||||||
|  | 		MPP8_TW_SDA, | ||||||
|  | 		MPP9_TW_SCK, | ||||||
|  | 		MPP10_UART0_TXD, | ||||||
|  | 		MPP11_UART0_RXD, | ||||||
|  | 		MPP12_SD_CLK, | ||||||
|  | 		MPP13_SD_CMD, | ||||||
|  | 		MPP14_SD_D0, | ||||||
|  | 		MPP15_SD_D1, | ||||||
|  | 		MPP16_SD_D2, | ||||||
|  | 		MPP17_SD_D3, | ||||||
|  | 		MPP18_NF_IO0, | ||||||
|  | 		MPP19_NF_IO1, | ||||||
|  | 		MPP20_SATA1_ACTn, | ||||||
|  | 		MPP21_SATA0_ACTn, | ||||||
|  | 		MPP22_GPIO, | ||||||
|  | 		MPP23_GPIO, | ||||||
|  | 		MPP24_GPIO, | ||||||
|  | 		MPP25_GPIO, | ||||||
|  | 		MPP26_GPIO, | ||||||
|  | 		MPP27_GPIO, | ||||||
|  | 		MPP28_GPIO, | ||||||
|  | 		MPP29_GPIO, | ||||||
|  | 		MPP30_GPIO, | ||||||
|  | 		MPP31_GPIO, | ||||||
|  | 		MPP32_GPIO, | ||||||
|  | 		MPP33_GPIO, | ||||||
|  | 		MPP34_GPIO, | ||||||
|  | 		MPP35_GPIO, | ||||||
|  | 		MPP36_GPIO, | ||||||
|  | 		MPP37_GPIO, | ||||||
|  | 		MPP38_GPIO, | ||||||
|  | 		MPP39_GPIO, | ||||||
|  | 		MPP40_GPIO, | ||||||
|  | 		MPP41_GPIO, | ||||||
|  | 		MPP42_GPIO, | ||||||
|  | 		MPP43_GPIO, | ||||||
|  | 		MPP44_GPIO, | ||||||
|  | 		MPP45_GPIO, | ||||||
|  | 		MPP46_GPIO, | ||||||
|  | 		MPP47_GPIO, | ||||||
|  | 		MPP48_GPIO, | ||||||
|  | 		MPP49_GPIO, | ||||||
|  | 		0 | ||||||
|  | 	}; | ||||||
|  | 	kirkwood_mpp_conf(kwmpp_config, NULL); | ||||||
|  | 
 | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int board_init(void) | ||||||
|  | { | ||||||
|  | 	gd->bd->bi_boot_params = mvebu_sdram_bar(0) + 0x100; | ||||||
|  | 
 | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #ifdef CONFIG_RESET_PHY_R | ||||||
|  | /* automatically defined by kirkwood config.h */ | ||||||
|  | void reset_phy(void) | ||||||
|  | { | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | @ -0,0 +1,36 @@ | ||||||
|  | # SPDX-License-Identifier: GPL-2.0+ | ||||||
|  | 
 | ||||||
|  | # Boot Media configurations | ||||||
|  | #@BOOT_FROM | ||||||
|  | 
 | ||||||
|  | DATA 0xd00100e0 0x1b1b1b9b | ||||||
|  | DATA 0xd0020134 0xbbbbbbbb | ||||||
|  | DATA 0xd0020138 0x00bbbbbb | ||||||
|  | DATA 0xd0020154 0x00000200 | ||||||
|  | DATA 0xd002014c 0x00001c00 | ||||||
|  | DATA 0xd0020148 0x00000001 | ||||||
|  | 
 | ||||||
|  | DATA 0xd0001400 0x43000c30 | ||||||
|  | DATA 0xd0001404 0x39543000 | ||||||
|  | DATA 0xd0001408 0x22125451 | ||||||
|  | DATA 0xd000140c 0x00000833 | ||||||
|  | DATA 0xd0001410 0x000000cc | ||||||
|  | DATA 0xd0001414 0x00000000 | ||||||
|  | DATA 0xd0001418 0x00000000 | ||||||
|  | DATA 0xd000141c 0x00000c52 | ||||||
|  | DATA 0xd0001420 0x00000044 | ||||||
|  | DATA 0xd0001424 0x0000f1ff | ||||||
|  | DATA 0xd0001428 0x00085520 | ||||||
|  | DATA 0xd000147c 0x00008552 | ||||||
|  | DATA 0xd0001504 0x0ffffff1 | ||||||
|  | DATA 0xd0001508 0x10000000 | ||||||
|  | DATA 0xd000150c 0x0ffffff5 | ||||||
|  | DATA 0xd0001514 0x00000000 | ||||||
|  | DATA 0xd000151c 0x00000000 | ||||||
|  | DATA 0xd0001494 0x84210000 | ||||||
|  | DATA 0xd0001498 0x00000000 | ||||||
|  | DATA 0xd000149c 0x0000f40f | ||||||
|  | DATA 0xd0001480 0x00000001 | ||||||
|  | 
 | ||||||
|  | # End of Header extension | ||||||
|  | DATA 0x0 0x0 | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| OPENRD / OPENRD_CLIENT BOARD | OPENRD / OPENRD_CLIENT BOARD | ||||||
| #M:	Albert ARIBAUD <albert-u-boot@aribaud.net> | M:	Stefan Roese <sr@denx.de> | ||||||
| S:	Orphaned (Since 2018-09) | S:	Maintained | ||||||
| F:	board/Marvell/openrd/ | F:	board/Marvell/openrd/ | ||||||
| F:	include/configs/openrd.h | F:	include/configs/openrd.h | ||||||
| F:	configs/openrd_base_defconfig | F:	configs/openrd_base_defconfig | ||||||
|  |  | ||||||
|  | @ -25,10 +25,6 @@ DECLARE_GLOBAL_DATA_PTR; | ||||||
| #define CONFIG_NVS_LOCATION		0xf4800000 | #define CONFIG_NVS_LOCATION		0xf4800000 | ||||||
| #define CONFIG_NVS_SIZE			(512 << 10) | #define CONFIG_NVS_SIZE			(512 << 10) | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_WATCHDOG |  | ||||||
| static struct udevice *watchdog_dev; |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| static struct serdes_map board_serdes_map[] = { | static struct serdes_map board_serdes_map[] = { | ||||||
| 	{PEX0, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0}, | 	{PEX0, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0}, | ||||||
| 	{DEFAULT_SERDES, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 0, 0}, | 	{DEFAULT_SERDES, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 0, 0}, | ||||||
|  | @ -80,10 +76,6 @@ struct mv_ddr_topology_map *mv_ddr_topology_map_get(void) | ||||||
| 
 | 
 | ||||||
| int board_early_init_f(void) | int board_early_init_f(void) | ||||||
| { | { | ||||||
| #ifdef CONFIG_WATCHDOG |  | ||||||
| 	watchdog_dev = NULL; |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 	/* Configure MPP */ | 	/* Configure MPP */ | ||||||
| 	writel(0x00001111, MVEBU_MPP_BASE + 0x00); | 	writel(0x00001111, MVEBU_MPP_BASE + 0x00); | ||||||
| 	writel(0x00000000, MVEBU_MPP_BASE + 0x04); | 	writel(0x00000000, MVEBU_MPP_BASE + 0x04); | ||||||
|  | @ -99,13 +91,6 @@ int board_early_init_f(void) | ||||||
| 
 | 
 | ||||||
| void spl_board_init(void) | void spl_board_init(void) | ||||||
| { | { | ||||||
| #ifdef CONFIG_WATCHDOG |  | ||||||
| 	int ret; |  | ||||||
| 
 |  | ||||||
| 	ret = uclass_get_device(UCLASS_WDT, 0, &watchdog_dev); |  | ||||||
| 	if (!ret) |  | ||||||
| 		wdt_start(watchdog_dev, 120000, 0); |  | ||||||
| #endif |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| int board_init(void) | int board_init(void) | ||||||
|  | @ -128,29 +113,10 @@ int board_init(void) | ||||||
| void arch_preboot_os(void) | void arch_preboot_os(void) | ||||||
| { | { | ||||||
| #ifdef CONFIG_WATCHDOG | #ifdef CONFIG_WATCHDOG | ||||||
| 	wdt_stop(watchdog_dev); | 	wdt_stop(gd->watchdog_dev); | ||||||
| #endif | #endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_WATCHDOG |  | ||||||
| void watchdog_reset(void) |  | ||||||
| { |  | ||||||
| 	static ulong next_reset = 0; |  | ||||||
| 	ulong now; |  | ||||||
| 
 |  | ||||||
| 	if (!watchdog_dev) |  | ||||||
| 		return; |  | ||||||
| 
 |  | ||||||
| 	now = timer_get_us(); |  | ||||||
| 
 |  | ||||||
| 	/* Do not reset the watchdog too often */ |  | ||||||
| 	if (now > next_reset) { |  | ||||||
| 		wdt_reset(watchdog_dev); |  | ||||||
| 		next_reset = now + 1000; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| static int led_7seg_init(unsigned int segments) | static int led_7seg_init(unsigned int segments) | ||||||
| { | { | ||||||
| 	int node; | 	int node; | ||||||
|  |  | ||||||
|  | @ -8,6 +8,16 @@ the LS-XHL PCB has two SDRAM chips. Both have a Kirkwood CPU (Marvell | ||||||
| bootloader and its environment. The linux kernel and the initial ramdisk | bootloader and its environment. The linux kernel and the initial ramdisk | ||||||
| are loaded from the hard disk. | are loaded from the hard disk. | ||||||
| 
 | 
 | ||||||
|  | Important! Changes since v2019.07 | ||||||
|  | --------------------------------- | ||||||
|  | In u-boot v2019.07 the driver for the SATA port was changed to a new | ||||||
|  | one. This means that the old "ide" command and block interface is not | ||||||
|  | supported anymore. More important, the boot commands have changed. You have | ||||||
|  | to overwrite the boot commands in your envionment with the new ones: | ||||||
|  | 
 | ||||||
|  |   env default -f bootcmd_legacy | ||||||
|  |   env default -f bootcmd_hdd | ||||||
|  |   saveenv | ||||||
| 
 | 
 | ||||||
| Rescue Mode | Rescue Mode | ||||||
| ----------- | ----------- | ||||||
|  |  | ||||||
|  | @ -24,10 +24,6 @@ | ||||||
| 
 | 
 | ||||||
| DECLARE_GLOBAL_DATA_PTR; | DECLARE_GLOBAL_DATA_PTR; | ||||||
| 
 | 
 | ||||||
| #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_WDT) |  | ||||||
| static struct udevice *watchdog_dev __attribute__((section(".data"))) = NULL; |  | ||||||
| #endif /* !CONFIG_SPL_BUILD && CONFIG_WDT */ |  | ||||||
| 
 |  | ||||||
| ulong ram_base; | ulong ram_base; | ||||||
| 
 | 
 | ||||||
| int dram_init_banksize(void) | int dram_init_banksize(void) | ||||||
|  | @ -43,44 +39,8 @@ int dram_init(void) | ||||||
| 	return 0; | 	return 0; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_WDT |  | ||||||
| /* Called by macro WATCHDOG_RESET */ |  | ||||||
| void watchdog_reset(void) |  | ||||||
| { |  | ||||||
| #if !defined(CONFIG_SPL_BUILD) |  | ||||||
| 	ulong now; |  | ||||||
| 	static ulong next_reset; |  | ||||||
| 
 |  | ||||||
| 	if (!watchdog_dev) |  | ||||||
| 		return; |  | ||||||
| 
 |  | ||||||
| 	now = timer_get_us(); |  | ||||||
| 
 |  | ||||||
| 	/* Do not reset the watchdog too often */ |  | ||||||
| 	if (now > next_reset) { |  | ||||||
| 		wdt_reset(watchdog_dev); |  | ||||||
| 		next_reset = now + 1000; |  | ||||||
| 	} |  | ||||||
| #endif /* !CONFIG_SPL_BUILD */ |  | ||||||
| } |  | ||||||
| #endif /* CONFIG_WDT */ |  | ||||||
| 
 |  | ||||||
| int board_late_init(void) | int board_late_init(void) | ||||||
| { | { | ||||||
| #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_WDT) |  | ||||||
| 	watchdog_dev = NULL; |  | ||||||
| 
 |  | ||||||
| 	if (uclass_get_device_by_seq(UCLASS_WDT, 0, &watchdog_dev)) { |  | ||||||
| 		debug("Watchdog: Not found by seq!\n"); |  | ||||||
| 		if (uclass_get_device(UCLASS_WDT, 0, &watchdog_dev)) { |  | ||||||
| 			puts("Watchdog: Not found!\n"); |  | ||||||
| 			return 0; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	wdt_start(watchdog_dev, 0, 0); |  | ||||||
| 	puts("Watchdog: Started\n"); |  | ||||||
| #endif /* !CONFIG_SPL_BUILD && CONFIG_WDT */ |  | ||||||
| #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_SYSRESET_MICROBLAZE) | #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_SYSRESET_MICROBLAZE) | ||||||
| 	int ret; | 	int ret; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -18,10 +18,6 @@ | ||||||
| 
 | 
 | ||||||
| DECLARE_GLOBAL_DATA_PTR; | DECLARE_GLOBAL_DATA_PTR; | ||||||
| 
 | 
 | ||||||
| #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_WDT) |  | ||||||
| static struct udevice *watchdog_dev __attribute__((section(".data"))) = NULL; |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_BOARD_EARLY_INIT_F) | #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_BOARD_EARLY_INIT_F) | ||||||
| int board_early_init_f(void) | int board_early_init_f(void) | ||||||
| { | { | ||||||
|  | @ -31,19 +27,6 @@ int board_early_init_f(void) | ||||||
| 
 | 
 | ||||||
| int board_init(void) | int board_init(void) | ||||||
| { | { | ||||||
| #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_WDT) |  | ||||||
| 	if (uclass_get_device_by_seq(UCLASS_WDT, 0, &watchdog_dev)) { |  | ||||||
| 		debug("Watchdog: Not found by seq!\n"); |  | ||||||
| 		if (uclass_get_device(UCLASS_WDT, 0, &watchdog_dev)) { |  | ||||||
| 			puts("Watchdog: Not found!\n"); |  | ||||||
| 			return 0; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	wdt_start(watchdog_dev, 0, 0); |  | ||||||
| 	puts("Watchdog: Started\n"); |  | ||||||
| # endif |  | ||||||
| 
 |  | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -127,25 +110,3 @@ int dram_init(void) | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
| 
 |  | ||||||
| #if defined(CONFIG_WATCHDOG) |  | ||||||
| /* Called by macro WATCHDOG_RESET */ |  | ||||||
| void watchdog_reset(void) |  | ||||||
| { |  | ||||||
| # if !defined(CONFIG_SPL_BUILD) |  | ||||||
| 	static ulong next_reset; |  | ||||||
| 	ulong now; |  | ||||||
| 
 |  | ||||||
| 	if (!watchdog_dev) |  | ||||||
| 		return; |  | ||||||
| 
 |  | ||||||
| 	now = timer_get_us(); |  | ||||||
| 
 |  | ||||||
| 	/* Do not reset the watchdog too often */ |  | ||||||
| 	if (now > next_reset) { |  | ||||||
| 		wdt_reset(watchdog_dev); |  | ||||||
| 		next_reset = now + 1000; |  | ||||||
| 	} |  | ||||||
| # endif |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
|  | @ -24,10 +24,6 @@ | ||||||
| 
 | 
 | ||||||
| DECLARE_GLOBAL_DATA_PTR; | DECLARE_GLOBAL_DATA_PTR; | ||||||
| 
 | 
 | ||||||
| #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_WDT) |  | ||||||
| static struct udevice *watchdog_dev __attribute__((section(".data"))) = NULL; |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #if defined(CONFIG_FPGA) && defined(CONFIG_FPGA_ZYNQMPPL) && \ | #if defined(CONFIG_FPGA) && defined(CONFIG_FPGA_ZYNQMPPL) && \ | ||||||
|     !defined(CONFIG_SPL_BUILD) |     !defined(CONFIG_SPL_BUILD) | ||||||
| static xilinx_desc zynqmppl = XILINX_ZYNQMP_DESC; | static xilinx_desc zynqmppl = XILINX_ZYNQMP_DESC; | ||||||
|  | @ -344,44 +340,9 @@ int board_init(void) | ||||||
| 	} | 	} | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_WDT) |  | ||||||
| 	if (uclass_get_device_by_seq(UCLASS_WDT, 0, &watchdog_dev)) { |  | ||||||
| 		debug("Watchdog: Not found by seq!\n"); |  | ||||||
| 		if (uclass_get_device(UCLASS_WDT, 0, &watchdog_dev)) { |  | ||||||
| 			puts("Watchdog: Not found!\n"); |  | ||||||
| 			return 0; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	wdt_start(watchdog_dev, 0, 0); |  | ||||||
| 	puts("Watchdog: Started\n"); |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_WATCHDOG |  | ||||||
| /* Called by macro WATCHDOG_RESET */ |  | ||||||
| void watchdog_reset(void) |  | ||||||
| { |  | ||||||
| # if !defined(CONFIG_SPL_BUILD) |  | ||||||
| 	static ulong next_reset; |  | ||||||
| 	ulong now; |  | ||||||
| 
 |  | ||||||
| 	if (!watchdog_dev) |  | ||||||
| 		return; |  | ||||||
| 
 |  | ||||||
| 	now = timer_get_us(); |  | ||||||
| 
 |  | ||||||
| 	/* Do not reset the watchdog too often */ |  | ||||||
| 	if (now > next_reset) { |  | ||||||
| 		wdt_reset(watchdog_dev); |  | ||||||
| 		next_reset = now + 1000; |  | ||||||
| 	} |  | ||||||
| # endif |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| int board_early_init_r(void) | int board_early_init_r(void) | ||||||
| { | { | ||||||
| 	u32 val; | 	u32 val; | ||||||
|  |  | ||||||
|  | @ -48,6 +48,7 @@ | ||||||
| #include <linux/compiler.h> | #include <linux/compiler.h> | ||||||
| #include <linux/err.h> | #include <linux/err.h> | ||||||
| #include <efi_loader.h> | #include <efi_loader.h> | ||||||
|  | #include <wdt.h> | ||||||
| 
 | 
 | ||||||
| DECLARE_GLOBAL_DATA_PTR; | DECLARE_GLOBAL_DATA_PTR; | ||||||
| 
 | 
 | ||||||
|  | @ -677,6 +678,9 @@ static init_fnc_t init_sequence_r[] = { | ||||||
| #ifdef CONFIG_DM | #ifdef CONFIG_DM | ||||||
| 	initr_dm, | 	initr_dm, | ||||||
| #endif | #endif | ||||||
|  | #if defined(CONFIG_WDT) | ||||||
|  | 	initr_watchdog, | ||||||
|  | #endif | ||||||
| #if defined(CONFIG_ARM) || defined(CONFIG_NDS32) || defined(CONFIG_RISCV) || \ | #if defined(CONFIG_ARM) || defined(CONFIG_NDS32) || defined(CONFIG_RISCV) || \ | ||||||
| 	defined(CONFIG_SANDBOX) | 	defined(CONFIG_SANDBOX) | ||||||
| 	board_init,	/* Setup chipselects */ | 	board_init,	/* Setup chipselects */ | ||||||
|  |  | ||||||
|  | @ -22,6 +22,7 @@ | ||||||
| #include <linux/compiler.h> | #include <linux/compiler.h> | ||||||
| #include <fdt_support.h> | #include <fdt_support.h> | ||||||
| #include <bootcount.h> | #include <bootcount.h> | ||||||
|  | #include <wdt.h> | ||||||
| 
 | 
 | ||||||
| DECLARE_GLOBAL_DATA_PTR; | DECLARE_GLOBAL_DATA_PTR; | ||||||
| 
 | 
 | ||||||
|  | @ -600,6 +601,10 @@ void board_init_r(gd_t *dummy1, ulong dummy2) | ||||||
| 	spl_board_init(); | 	spl_board_init(); | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | #if defined(CONFIG_SPL_WATCHDOG_SUPPORT) && defined(CONFIG_WDT) | ||||||
|  | 	initr_watchdog(); | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| 	if (IS_ENABLED(CONFIG_SPL_OS_BOOT) || CONFIG_IS_ENABLED(HANDOFF)) | 	if (IS_ENABLED(CONFIG_SPL_OS_BOOT) || CONFIG_IS_ENABLED(HANDOFF)) | ||||||
| 		dram_init_banksize(); | 		dram_init_banksize(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,54 @@ | ||||||
|  | CONFIG_ARM=y | ||||||
|  | CONFIG_SYS_THUMB_BUILD=y | ||||||
|  | CONFIG_KIRKWOOD=y | ||||||
|  | CONFIG_SYS_TEXT_BASE=0x600000 | ||||||
|  | CONFIG_TARGET_DB_88F6281_BP=y | ||||||
|  | CONFIG_IDENT_STRING="\nMarvell DB-88F6281-BP" | ||||||
|  | CONFIG_NR_DRAM_BANKS=2 | ||||||
|  | # CONFIG_SYS_MALLOC_F is not set | ||||||
|  | CONFIG_BOOTDELAY=3 | ||||||
|  | # CONFIG_DISPLAY_BOARDINFO is not set | ||||||
|  | CONFIG_HUSH_PARSER=y | ||||||
|  | CONFIG_CMD_BOOTZ=y | ||||||
|  | CONFIG_CMD_DM=y | ||||||
|  | # CONFIG_CMD_FLASH is not set | ||||||
|  | CONFIG_CMD_IDE=y | ||||||
|  | CONFIG_CMD_MMC=y | ||||||
|  | CONFIG_CMD_NAND=y | ||||||
|  | CONFIG_CMD_SF=y | ||||||
|  | CONFIG_CMD_USB=y | ||||||
|  | # CONFIG_CMD_SETEXPR is not set | ||||||
|  | CONFIG_CMD_DHCP=y | ||||||
|  | CONFIG_CMD_MII=y | ||||||
|  | CONFIG_CMD_PING=y | ||||||
|  | CONFIG_CMD_EXT2=y | ||||||
|  | CONFIG_CMD_EXT4=y | ||||||
|  | CONFIG_CMD_FAT=y | ||||||
|  | CONFIG_CMD_JFFS2=y | ||||||
|  | CONFIG_CMD_MTDPARTS=y | ||||||
|  | CONFIG_MTDIDS_DEFAULT="nand0=orion_nand" | ||||||
|  | CONFIG_MTDPARTS_DEFAULT="mtdparts=orion_nand:512K(uboot),512K(env),4M(kernel),-(rootfs)" | ||||||
|  | CONFIG_ISO_PARTITION=y | ||||||
|  | CONFIG_OF_CONTROL=y | ||||||
|  | CONFIG_DEFAULT_DEVICE_TREE="kirkwood-db-88f6281" | ||||||
|  | CONFIG_ENV_IS_IN_SPI_FLASH=y | ||||||
|  | CONFIG_NET_RANDOM_ETHADDR=y | ||||||
|  | CONFIG_DM=y | ||||||
|  | CONFIG_MVSATA_IDE=y | ||||||
|  | CONFIG_SPI_FLASH=y | ||||||
|  | CONFIG_SPI_FLASH_STMICRO=y | ||||||
|  | CONFIG_PHY_MARVELL=y | ||||||
|  | CONFIG_DM_ETH=y | ||||||
|  | CONFIG_MVGBE=y | ||||||
|  | CONFIG_MII=y | ||||||
|  | CONFIG_DM_RTC=y | ||||||
|  | CONFIG_RTC_MV=y | ||||||
|  | CONFIG_SYS_NS16550=y | ||||||
|  | CONFIG_SPI=y | ||||||
|  | CONFIG_KIRKWOOD_SPI=y | ||||||
|  | CONFIG_USB=y | ||||||
|  | CONFIG_DM_USB=y | ||||||
|  | CONFIG_USB_EHCI_HCD=y | ||||||
|  | CONFIG_USB_STORAGE=y | ||||||
|  | CONFIG_LZMA=y | ||||||
|  | CONFIG_LZO=y | ||||||
|  | @ -0,0 +1,56 @@ | ||||||
|  | CONFIG_ARM=y | ||||||
|  | CONFIG_SYS_THUMB_BUILD=y | ||||||
|  | CONFIG_KIRKWOOD=y | ||||||
|  | CONFIG_SYS_TEXT_BASE=0x600000 | ||||||
|  | CONFIG_TARGET_DB_88F6281_BP=y | ||||||
|  | CONFIG_IDENT_STRING="\nMarvell DB-88F6281-BP" | ||||||
|  | CONFIG_NR_DRAM_BANKS=2 | ||||||
|  | # CONFIG_SYS_MALLOC_F is not set | ||||||
|  | CONFIG_FIT=y | ||||||
|  | CONFIG_BOOTDELAY=3 | ||||||
|  | # CONFIG_DISPLAY_BOARDINFO is not set | ||||||
|  | CONFIG_HUSH_PARSER=y | ||||||
|  | CONFIG_CMD_BOOTZ=y | ||||||
|  | CONFIG_CMD_DM=y | ||||||
|  | # CONFIG_CMD_FLASH is not set | ||||||
|  | CONFIG_CMD_IDE=y | ||||||
|  | CONFIG_CMD_MMC=y | ||||||
|  | CONFIG_CMD_SF=y | ||||||
|  | CONFIG_CMD_USB=y | ||||||
|  | # CONFIG_CMD_SETEXPR is not set | ||||||
|  | CONFIG_CMD_DHCP=y | ||||||
|  | CONFIG_CMD_MII=y | ||||||
|  | CONFIG_CMD_PING=y | ||||||
|  | CONFIG_CMD_EXT2=y | ||||||
|  | CONFIG_CMD_EXT4=y | ||||||
|  | CONFIG_CMD_FAT=y | ||||||
|  | CONFIG_CMD_JFFS2=y | ||||||
|  | CONFIG_CMD_MTDPARTS=y | ||||||
|  | CONFIG_MTDIDS_DEFAULT="nand0=orion_nand" | ||||||
|  | CONFIG_MTDPARTS_DEFAULT="mtdparts=orion_nand:512K(uboot),512K(env),4M(kernel),-(rootfs)" | ||||||
|  | CONFIG_ISO_PARTITION=y | ||||||
|  | CONFIG_OF_CONTROL=y | ||||||
|  | CONFIG_DEFAULT_DEVICE_TREE="kirkwood-db-88f6281-spi" | ||||||
|  | CONFIG_ENV_IS_IN_SPI_FLASH=y | ||||||
|  | CONFIG_NET_RANDOM_ETHADDR=y | ||||||
|  | CONFIG_DM=y | ||||||
|  | CONFIG_MVSATA_IDE=y | ||||||
|  | CONFIG_DM_SPI_FLASH=y | ||||||
|  | CONFIG_SPI_FLASH=y | ||||||
|  | CONFIG_SPI_FLASH_STMICRO=y | ||||||
|  | CONFIG_PHY_MARVELL=y | ||||||
|  | CONFIG_DM_ETH=y | ||||||
|  | CONFIG_MVGBE=y | ||||||
|  | CONFIG_MII=y | ||||||
|  | CONFIG_DM_RTC=y | ||||||
|  | CONFIG_RTC_MV=y | ||||||
|  | CONFIG_SYS_NS16550=y | ||||||
|  | CONFIG_SPI=y | ||||||
|  | CONFIG_DM_SPI=y | ||||||
|  | CONFIG_KIRKWOOD_SPI=y | ||||||
|  | CONFIG_USB=y | ||||||
|  | CONFIG_DM_USB=y | ||||||
|  | CONFIG_USB_EHCI_HCD=y | ||||||
|  | CONFIG_USB_STORAGE=y | ||||||
|  | CONFIG_LZMA=y | ||||||
|  | CONFIG_LZO=y | ||||||
|  | @ -23,7 +23,6 @@ CONFIG_USE_BOOTARGS=y | ||||||
| CONFIG_BOOTARGS="console=ttyS0,115200 earlyprintk mtdparts=atmel_nand:256k(bootstrap)ro,768k(uboot)ro,256k(env_redundant),256k(env),512k(dtb),6M(kernel)ro,-(rootfs) rootfstype=ubifs ubi.mtd=6 root=ubi0:rootfs rw" | CONFIG_BOOTARGS="console=ttyS0,115200 earlyprintk mtdparts=atmel_nand:256k(bootstrap)ro,768k(uboot)ro,256k(env_redundant),256k(env),512k(dtb),6M(kernel)ro,-(rootfs) rootfstype=ubifs ubi.mtd=6 root=ubi0:rootfs rw" | ||||||
| CONFIG_SYS_CONSOLE_IS_IN_ENV=y | CONFIG_SYS_CONSOLE_IS_IN_ENV=y | ||||||
| CONFIG_SYS_CONSOLE_INFO_QUIET=y | CONFIG_SYS_CONSOLE_INFO_QUIET=y | ||||||
| CONFIG_ARCH_EARLY_INIT_R=y |  | ||||||
| CONFIG_SPL_SYS_MALLOC_SIMPLE=y | CONFIG_SPL_SYS_MALLOC_SIMPLE=y | ||||||
| CONFIG_SPL_SEPARATE_BSS=y | CONFIG_SPL_SEPARATE_BSS=y | ||||||
| # CONFIG_TPL_BANNER_PRINT is not set | # CONFIG_TPL_BANNER_PRINT is not set | ||||||
|  | @ -76,7 +75,6 @@ CONFIG_TIMER=y | ||||||
| CONFIG_SPL_TIMER=y | CONFIG_SPL_TIMER=y | ||||||
| CONFIG_ATMEL_PIT_TIMER=y | CONFIG_ATMEL_PIT_TIMER=y | ||||||
| # CONFIG_SYS_WHITE_ON_BLACK is not set | # CONFIG_SYS_WHITE_ON_BLACK is not set | ||||||
| CONFIG_WATCHDOG=y |  | ||||||
| CONFIG_WDT=y | CONFIG_WDT=y | ||||||
| CONFIG_WDT_AT91=y | CONFIG_WDT_AT91=y | ||||||
| # CONFIG_UBIFS_SILENCE_MSG is not set | # CONFIG_UBIFS_SILENCE_MSG is not set | ||||||
|  |  | ||||||
|  | @ -1,4 +1,5 @@ | ||||||
| CONFIG_ARM=y | CONFIG_ARM=y | ||||||
|  | CONFIG_SPL_SYS_THUMB_BUILD=y | ||||||
| CONFIG_ARCH_MVEBU=y | CONFIG_ARCH_MVEBU=y | ||||||
| CONFIG_SYS_TEXT_BASE=0x00800000 | CONFIG_SYS_TEXT_BASE=0x00800000 | ||||||
| CONFIG_SPL_LIBCOMMON_SUPPORT=y | CONFIG_SPL_LIBCOMMON_SUPPORT=y | ||||||
|  | @ -7,13 +8,13 @@ CONFIG_SYS_MALLOC_F_LEN=0x2000 | ||||||
| CONFIG_TARGET_TURRIS_OMNIA=y | CONFIG_TARGET_TURRIS_OMNIA=y | ||||||
| CONFIG_SPL_SERIAL_SUPPORT=y | CONFIG_SPL_SERIAL_SUPPORT=y | ||||||
| CONFIG_SPL=y | CONFIG_SPL=y | ||||||
|  | CONFIG_NR_DRAM_BANKS=2 | ||||||
| CONFIG_DEBUG_UART_BASE=0xd0012000 | CONFIG_DEBUG_UART_BASE=0xd0012000 | ||||||
| CONFIG_DEBUG_UART_CLOCK=250000000 | CONFIG_DEBUG_UART_CLOCK=250000000 | ||||||
| CONFIG_SPL_SPI_FLASH_SUPPORT=y | CONFIG_SPL_SPI_FLASH_SUPPORT=y | ||||||
| CONFIG_SPL_SPI_SUPPORT=y | CONFIG_SPL_SPI_SUPPORT=y | ||||||
| CONFIG_DEBUG_UART=y | CONFIG_DEBUG_UART=y | ||||||
| CONFIG_DISTRO_DEFAULTS=y | CONFIG_DISTRO_DEFAULTS=y | ||||||
| CONFIG_NR_DRAM_BANKS=2 |  | ||||||
| CONFIG_BOOTDELAY=3 | CONFIG_BOOTDELAY=3 | ||||||
| CONFIG_SYS_CONSOLE_INFO_QUIET=y | CONFIG_SYS_CONSOLE_INFO_QUIET=y | ||||||
| CONFIG_MISC_INIT_R=y | CONFIG_MISC_INIT_R=y | ||||||
|  | @ -40,6 +41,7 @@ CONFIG_ENV_SPI_MAX_HZ=50000000 | ||||||
| CONFIG_SPL_OF_TRANSLATE=y | CONFIG_SPL_OF_TRANSLATE=y | ||||||
| CONFIG_SCSI_AHCI=y | CONFIG_SCSI_AHCI=y | ||||||
| CONFIG_ATSHA204A=y | CONFIG_ATSHA204A=y | ||||||
|  | CONFIG_DM_MMC=y | ||||||
| CONFIG_MMC_SDHCI=y | CONFIG_MMC_SDHCI=y | ||||||
| CONFIG_MMC_SDHCI_MV=y | CONFIG_MMC_SDHCI_MV=y | ||||||
| CONFIG_SPI_FLASH=y | CONFIG_SPI_FLASH=y | ||||||
|  |  | ||||||
|  | @ -4,10 +4,13 @@ | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #include <common.h> | #include <common.h> | ||||||
|  | #include <dm.h> | ||||||
| #include <malloc.h> | #include <malloc.h> | ||||||
| #include <sdhci.h> | #include <sdhci.h> | ||||||
| #include <linux/mbus.h> | #include <linux/mbus.h> | ||||||
| 
 | 
 | ||||||
|  | #define MVSDH_NAME "mv_sdh" | ||||||
|  | 
 | ||||||
| #define SDHCI_WINDOW_CTRL(win)		(0x4080 + ((win) << 4)) | #define SDHCI_WINDOW_CTRL(win)		(0x4080 + ((win) << 4)) | ||||||
| #define SDHCI_WINDOW_BASE(win)		(0x4084 + ((win) << 4)) | #define SDHCI_WINDOW_BASE(win)		(0x4084 + ((win) << 4)) | ||||||
| 
 | 
 | ||||||
|  | @ -36,6 +39,8 @@ static void sdhci_mvebu_mbus_config(void __iomem *base) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #ifndef CONFIG_DM_MMC | ||||||
|  | 
 | ||||||
| #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS | #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS | ||||||
| static struct sdhci_ops mv_ops; | static struct sdhci_ops mv_ops; | ||||||
| 
 | 
 | ||||||
|  | @ -63,7 +68,6 @@ static inline void mv_sdhci_writeb(struct sdhci_host *host, u8 val, int reg) | ||||||
| #endif /* CONFIG_SHEEVA_88SV331xV5 */ | #endif /* CONFIG_SHEEVA_88SV331xV5 */ | ||||||
| #endif /* CONFIG_MMC_SDHCI_IO_ACCESSORS */ | #endif /* CONFIG_MMC_SDHCI_IO_ACCESSORS */ | ||||||
| 
 | 
 | ||||||
| static char *MVSDH_NAME = "mv_sdh"; |  | ||||||
| int mv_sdh_init(unsigned long regbase, u32 max_clk, u32 min_clk, u32 quirks) | int mv_sdh_init(unsigned long regbase, u32 max_clk, u32 min_clk, u32 quirks) | ||||||
| { | { | ||||||
| 	struct sdhci_host *host = NULL; | 	struct sdhci_host *host = NULL; | ||||||
|  | @ -90,3 +94,64 @@ int mv_sdh_init(unsigned long regbase, u32 max_clk, u32 min_clk, u32 quirks) | ||||||
| 
 | 
 | ||||||
| 	return add_sdhci(host, 0, min_clk); | 	return add_sdhci(host, 0, min_clk); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | #else | ||||||
|  | 
 | ||||||
|  | DECLARE_GLOBAL_DATA_PTR; | ||||||
|  | 
 | ||||||
|  | struct mv_sdhci_plat { | ||||||
|  | 	struct mmc_config cfg; | ||||||
|  | 	struct mmc mmc; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static int mv_sdhci_probe(struct udevice *dev) | ||||||
|  | { | ||||||
|  | 	struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev); | ||||||
|  | 	struct mv_sdhci_plat *plat = dev_get_platdata(dev); | ||||||
|  | 	struct sdhci_host *host = dev_get_priv(dev); | ||||||
|  | 	int ret; | ||||||
|  | 
 | ||||||
|  | 	host->name = MVSDH_NAME; | ||||||
|  | 	host->ioaddr = (void *)devfdt_get_addr(dev); | ||||||
|  | 	host->quirks = SDHCI_QUIRK_32BIT_DMA_ADDR | SDHCI_QUIRK_WAIT_SEND_CMD; | ||||||
|  | 
 | ||||||
|  | 	ret = sdhci_setup_cfg(&plat->cfg, host, 0, 0); | ||||||
|  | 	if (ret) | ||||||
|  | 		return ret; | ||||||
|  | 
 | ||||||
|  | 	if (CONFIG_IS_ENABLED(ARCH_MVEBU)) { | ||||||
|  | 		/* Configure SDHCI MBUS mbus bridge windows */ | ||||||
|  | 		sdhci_mvebu_mbus_config(host->ioaddr); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	host->mmc = &plat->mmc; | ||||||
|  | 	host->mmc->dev = dev; | ||||||
|  | 	host->mmc->priv = host; | ||||||
|  | 	upriv->mmc = host->mmc; | ||||||
|  | 
 | ||||||
|  | 	return sdhci_probe(dev); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static int mv_sdhci_bind(struct udevice *dev) | ||||||
|  | { | ||||||
|  | 	struct mv_sdhci_plat *plat = dev_get_platdata(dev); | ||||||
|  | 
 | ||||||
|  | 	return sdhci_bind(dev, &plat->mmc, &plat->cfg); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static const struct udevice_id mv_sdhci_ids[] = { | ||||||
|  | 	{ .compatible = "marvell,armada-380-sdhci" }, | ||||||
|  | 	{ } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | U_BOOT_DRIVER(mv_sdhci_drv) = { | ||||||
|  | 	.name		= MVSDH_NAME, | ||||||
|  | 	.id		= UCLASS_MMC, | ||||||
|  | 	.of_match	= mv_sdhci_ids, | ||||||
|  | 	.bind		= mv_sdhci_bind, | ||||||
|  | 	.probe		= mv_sdhci_probe, | ||||||
|  | 	.ops		= &sdhci_ops, | ||||||
|  | 	.priv_auto_alloc_size = sizeof(struct sdhci_host), | ||||||
|  | 	.platdata_auto_alloc_size = sizeof(struct mv_sdhci_plat), | ||||||
|  | }; | ||||||
|  | #endif /* CONFIG_DM_MMC */ | ||||||
|  |  | ||||||
|  | @ -51,6 +51,7 @@ config ULP_WATCHDOG | ||||||
| config WDT | config WDT | ||||||
| 	bool "Enable driver model for watchdog timer drivers" | 	bool "Enable driver model for watchdog timer drivers" | ||||||
| 	depends on DM | 	depends on DM | ||||||
|  | 	imply WATCHDOG | ||||||
| 	help | 	help | ||||||
| 	  Enable driver model for watchdog timer. At the moment the API | 	  Enable driver model for watchdog timer. At the moment the API | ||||||
| 	  is very simple and only supports four operations: | 	  is very simple and only supports four operations: | ||||||
|  | @ -150,7 +151,6 @@ config WDT_MT7621 | ||||||
| config WDT_MPC8xx | config WDT_MPC8xx | ||||||
| 	bool "MPC8xx watchdog timer support" | 	bool "MPC8xx watchdog timer support" | ||||||
| 	depends on WDT && MPC8xx | 	depends on WDT && MPC8xx | ||||||
| 	select CONFIG_MPC8xx_WATCHDOG |  | ||||||
| 	help | 	help | ||||||
| 	   Select this to enable mpc8xx watchdog timer | 	   Select this to enable mpc8xx watchdog timer | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -24,6 +24,6 @@ obj-$(CONFIG_WDT_BCM6345) += bcm6345_wdt.o | ||||||
| obj-$(CONFIG_BCM2835_WDT)       += bcm2835_wdt.o | obj-$(CONFIG_BCM2835_WDT)       += bcm2835_wdt.o | ||||||
| obj-$(CONFIG_WDT_ORION) += orion_wdt.o | obj-$(CONFIG_WDT_ORION) += orion_wdt.o | ||||||
| obj-$(CONFIG_WDT_CDNS) += cdns_wdt.o | obj-$(CONFIG_WDT_CDNS) += cdns_wdt.o | ||||||
| obj-$(CONFIG_MPC8xx_WATCHDOG) += mpc8xx_wdt.o | obj-$(CONFIG_WDT_MPC8xx) += mpc8xx_wdt.o | ||||||
| obj-$(CONFIG_WDT_MT7621) += mt7621_wdt.o | obj-$(CONFIG_WDT_MT7621) += mt7621_wdt.o | ||||||
| obj-$(CONFIG_WDT_MTK) += mtk_wdt.o | obj-$(CONFIG_WDT_MTK) += mtk_wdt.o | ||||||
|  |  | ||||||
|  | @ -107,14 +107,6 @@ static int at91_wdt_probe(struct udevice *dev) | ||||||
| 	if (!priv->regs) | 	if (!priv->regs) | ||||||
| 		return -EINVAL; | 		return -EINVAL; | ||||||
| 
 | 
 | ||||||
| #if CONFIG_IS_ENABLED(OF_CONTROL) |  | ||||||
| 	priv->timeout = dev_read_u32_default(dev, "timeout-sec", |  | ||||||
| 					     WDT_DEFAULT_TIMEOUT); |  | ||||||
| 	debug("%s: timeout %d", __func__, priv->timeout); |  | ||||||
| #else |  | ||||||
| 	priv->timeout = WDT_DEFAULT_TIMEOUT; |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 	debug("%s: Probing wdt%u\n", __func__, dev->seq); | 	debug("%s: Probing wdt%u\n", __func__, dev->seq); | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
|  |  | ||||||
|  | @ -10,6 +10,7 @@ | ||||||
| #include <dm.h> | #include <dm.h> | ||||||
| #include <wdt.h> | #include <wdt.h> | ||||||
| #include <clk.h> | #include <clk.h> | ||||||
|  | #include <div64.h> | ||||||
| #include <linux/io.h> | #include <linux/io.h> | ||||||
| 
 | 
 | ||||||
| DECLARE_GLOBAL_DATA_PTR; | DECLARE_GLOBAL_DATA_PTR; | ||||||
|  | @ -23,7 +24,6 @@ struct cdns_regs { | ||||||
| 
 | 
 | ||||||
| struct cdns_wdt_priv { | struct cdns_wdt_priv { | ||||||
| 	bool rst; | 	bool rst; | ||||||
| 	u32 timeout; |  | ||||||
| 	struct cdns_regs *regs; | 	struct cdns_regs *regs; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | @ -142,10 +142,10 @@ static int cdns_wdt_start(struct udevice *dev, u64 timeout, ulong flags) | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if ((timeout < CDNS_WDT_MIN_TIMEOUT) || | 	/* Calculate timeout in seconds and restrict to min and max value */ | ||||||
| 	    (timeout > CDNS_WDT_MAX_TIMEOUT)) { | 	do_div(timeout, 1000); | ||||||
| 		timeout = priv->timeout; | 	timeout = max_t(u64, timeout, CDNS_WDT_MIN_TIMEOUT); | ||||||
| 	} | 	timeout = min_t(u64, timeout, CDNS_WDT_MAX_TIMEOUT); | ||||||
| 
 | 
 | ||||||
| 	debug("%s: CLK_FREQ %ld, timeout %lld\n", __func__, clk_f, timeout); | 	debug("%s: CLK_FREQ %ld, timeout %lld\n", __func__, clk_f, timeout); | ||||||
| 
 | 
 | ||||||
|  | @ -235,12 +235,9 @@ static int cdns_wdt_ofdata_to_platdata(struct udevice *dev) | ||||||
| 	if (IS_ERR(priv->regs)) | 	if (IS_ERR(priv->regs)) | ||||||
| 		return PTR_ERR(priv->regs); | 		return PTR_ERR(priv->regs); | ||||||
| 
 | 
 | ||||||
| 	priv->timeout = dev_read_u32_default(dev, "timeout-sec", |  | ||||||
| 					     CDNS_WDT_DEFAULT_TIMEOUT); |  | ||||||
| 
 |  | ||||||
| 	priv->rst = dev_read_bool(dev, "reset-on-timeout"); | 	priv->rst = dev_read_bool(dev, "reset-on-timeout"); | ||||||
| 
 | 
 | ||||||
| 	debug("%s: timeout %d, reset %d\n", __func__, priv->timeout, priv->rst); | 	debug("%s: reset %d\n", __func__, priv->rst); | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -10,7 +10,7 @@ | ||||||
| #include <asm/cpm_8xx.h> | #include <asm/cpm_8xx.h> | ||||||
| #include <asm/io.h> | #include <asm/io.h> | ||||||
| 
 | 
 | ||||||
| void hw_watchdog_reset(void) | static void hw_watchdog_reset(void) | ||||||
| { | { | ||||||
| 	immap_t __iomem *immap = (immap_t __iomem *)CONFIG_SYS_IMMR; | 	immap_t __iomem *immap = (immap_t __iomem *)CONFIG_SYS_IMMR; | ||||||
| 
 | 
 | ||||||
|  | @ -18,7 +18,6 @@ void hw_watchdog_reset(void) | ||||||
| 	out_be16(&immap->im_siu_conf.sc_swsr, 0xaa39);	/* write magic2 */ | 	out_be16(&immap->im_siu_conf.sc_swsr, 0xaa39);	/* write magic2 */ | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_WDT_MPC8xx |  | ||||||
| static int mpc8xx_wdt_start(struct udevice *dev, u64 timeout, ulong flags) | static int mpc8xx_wdt_start(struct udevice *dev, u64 timeout, ulong flags) | ||||||
| { | { | ||||||
| 	immap_t __iomem *immap = (immap_t __iomem *)CONFIG_SYS_IMMR; | 	immap_t __iomem *immap = (immap_t __iomem *)CONFIG_SYS_IMMR; | ||||||
|  | @ -66,4 +65,3 @@ U_BOOT_DRIVER(wdt_mpc8xx) = { | ||||||
| 	.of_match = mpc8xx_wdt_ids, | 	.of_match = mpc8xx_wdt_ids, | ||||||
| 	.ops = &mpc8xx_wdt_ops, | 	.ops = &mpc8xx_wdt_ops, | ||||||
| }; | }; | ||||||
| #endif /* CONFIG_WDT_MPC8xx */ |  | ||||||
|  |  | ||||||
|  | @ -10,6 +10,8 @@ | ||||||
| #include <dm/device-internal.h> | #include <dm/device-internal.h> | ||||||
| #include <dm/lists.h> | #include <dm/lists.h> | ||||||
| 
 | 
 | ||||||
|  | DECLARE_GLOBAL_DATA_PTR; | ||||||
|  | 
 | ||||||
| int wdt_start(struct udevice *dev, u64 timeout_ms, ulong flags) | int wdt_start(struct udevice *dev, u64 timeout_ms, ulong flags) | ||||||
| { | { | ||||||
| 	const struct wdt_ops *ops = device_get_ops(dev); | 	const struct wdt_ops *ops = device_get_ops(dev); | ||||||
|  | @ -63,6 +65,30 @@ int wdt_expire_now(struct udevice *dev, ulong flags) | ||||||
| 	return ret; | 	return ret; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #if defined(CONFIG_WATCHDOG) | ||||||
|  | /*
 | ||||||
|  |  * Called by macro WATCHDOG_RESET. This function be called *very* early, | ||||||
|  |  * so we need to make sure, that the watchdog driver is ready before using | ||||||
|  |  * it in this function. | ||||||
|  |  */ | ||||||
|  | void watchdog_reset(void) | ||||||
|  | { | ||||||
|  | 	static ulong next_reset; | ||||||
|  | 	ulong now; | ||||||
|  | 
 | ||||||
|  | 	/* Exit if GD is not ready or watchdog is not initialized yet */ | ||||||
|  | 	if (!gd || !(gd->flags & GD_FLG_WDT_READY)) | ||||||
|  | 		return; | ||||||
|  | 
 | ||||||
|  | 	/* Do not reset the watchdog too often */ | ||||||
|  | 	now = get_timer(0); | ||||||
|  | 	if (now > next_reset) { | ||||||
|  | 		next_reset = now + 1000;	/* reset every 1000ms */ | ||||||
|  | 		wdt_reset(gd->watchdog_dev); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| static int wdt_post_bind(struct udevice *dev) | static int wdt_post_bind(struct udevice *dev) | ||||||
| { | { | ||||||
| #if defined(CONFIG_NEEDS_MANUAL_RELOC) | #if defined(CONFIG_NEEDS_MANUAL_RELOC) | ||||||
|  |  | ||||||
|  | @ -137,6 +137,9 @@ typedef struct global_data { | ||||||
| #if defined(CONFIG_TRANSLATION_OFFSET) | #if defined(CONFIG_TRANSLATION_OFFSET) | ||||||
| 	fdt_addr_t translation_offset;	/* optional translation offset */ | 	fdt_addr_t translation_offset;	/* optional translation offset */ | ||||||
| #endif | #endif | ||||||
|  | #if defined(CONFIG_WDT) | ||||||
|  | 	struct udevice *watchdog_dev; | ||||||
|  | #endif | ||||||
| } gd_t; | } gd_t; | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | @ -165,5 +168,6 @@ typedef struct global_data { | ||||||
| #define GD_FLG_ENV_DEFAULT	0x02000 /* Default variable flag	   */ | #define GD_FLG_ENV_DEFAULT	0x02000 /* Default variable flag	   */ | ||||||
| #define GD_FLG_SPL_EARLY_INIT	0x04000 /* Early SPL init is done	   */ | #define GD_FLG_SPL_EARLY_INIT	0x04000 /* Early SPL init is done	   */ | ||||||
| #define GD_FLG_LOG_READY	0x08000 /* Log system is ready for use	   */ | #define GD_FLG_LOG_READY	0x08000 /* Log system is ready for use	   */ | ||||||
|  | #define GD_FLG_WDT_READY	0x10000 /* Watchdog is ready for use	   */ | ||||||
| 
 | 
 | ||||||
| #endif /* __ASM_GENERIC_GBL_DATA_H */ | #endif /* __ASM_GENERIC_GBL_DATA_H */ | ||||||
|  |  | ||||||
|  | @ -0,0 +1,99 @@ | ||||||
|  | /* SPDX-License-Identifier: GPL-2.0+ */ | ||||||
|  | 
 | ||||||
|  | #ifndef _CONFIG_DB_88F6281_BP_H | ||||||
|  | #define _CONFIG_DB_88F6281_BP_H | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * High Level Configuration Options (easy to change) | ||||||
|  |  */ | ||||||
|  | #define CONFIG_FEROCEON_88FR131	1	/* CPU Core subversion */ | ||||||
|  | #define CONFIG_KW88F6281	1	/* SOC Name */ | ||||||
|  | #define CONFIG_SKIP_LOWLEVEL_INIT	/* disable board lowlevel_init */ | ||||||
|  | #define CONFIG_SYS_TCLK		166666667 | ||||||
|  | #define CONFIG_SYS_KWD_CONFIG	$(CONFIG_BOARDDIR)/kwbimage.cfg | ||||||
|  | #define CONFIG_BUILD_TARGET	"u-boot.kwb" | ||||||
|  | 
 | ||||||
|  | /* additions for new ARM relocation support */ | ||||||
|  | #define CONFIG_SYS_SDRAM_BASE	0x00000000 | ||||||
|  | 
 | ||||||
|  | #define CONFIG_KIRKWOOD_EGIGA_INIT	/* Enable GbePort0/1 for kernel */ | ||||||
|  | #define CONFIG_KIRKWOOD_PCIE_INIT	/* Enable PCIE Port0 */ | ||||||
|  | #define CONFIG_KIRKWOOD_RGMII_PAD_1V8	/* Set RGMII Pad voltage to 1.8V */ | ||||||
|  | #define CONFIG_KIRKWOOD_GPIO	1 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * NS16550 Configuration | ||||||
|  |  */ | ||||||
|  | #define CONFIG_SYS_NS16550_SERIAL | ||||||
|  | #define CONFIG_SYS_NS16550_REG_SIZE	(-4) | ||||||
|  | #define CONFIG_SYS_NS16550_CLK		CONFIG_SYS_TCLK | ||||||
|  | #define CONFIG_SYS_NS16550_COM1		KW_UART0_BASE | ||||||
|  | 
 | ||||||
|  | #define CONFIG_SYS_MAX_NAND_DEVICE     1 | ||||||
|  | /*
 | ||||||
|  |  * Serial Port configuration | ||||||
|  |  * The following definitions let you select what serial you want to use | ||||||
|  |  * for your console driver. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #define CONFIG_CONS_INDEX	1	/* Console on UART0 */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  *  Environment variables configurations | ||||||
|  |  */ | ||||||
|  | #define CONFIG_ENV_SPI_BUS		0 | ||||||
|  | #define CONFIG_ENV_SPI_CS		0 | ||||||
|  | #define CONFIG_ENV_SPI_MAX_HZ		20000000	/* 20Mhz */ | ||||||
|  | #define CONFIG_ENV_SPI_MODE		CONFIG_SF_DEFAULT_MODE | ||||||
|  | #define CONFIG_ENV_SECT_SIZE		0x40000		/* 256K */ | ||||||
|  | #define CONFIG_ENV_SIZE			0x01000 | ||||||
|  | #define CONFIG_ENV_OFFSET		0xC0000 | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * U-Boot bootcode configuration | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #define CONFIG_SYS_MONITOR_LEN		(256 << 10)	/* Reserve 256 kB for monitor */ | ||||||
|  | #define CONFIG_SYS_MALLOC_LEN		  (4 << 20)	/* Reserve 4.0 MB for malloc */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * For booting Linux, the board info and command line data | ||||||
|  |  * have to be in the first 8 MB of memory, since this is | ||||||
|  |  * the maximum mapped by the Linux kernel during initialization. | ||||||
|  |  */ | ||||||
|  | #define CONFIG_SYS_BOOTMAPSZ		(8 << 20)	/* Initial Mem map for Linux*/ | ||||||
|  | 
 | ||||||
|  | /* size in bytes reserved for initial data */ | ||||||
|  | 
 | ||||||
|  | #include <asm/arch/config.h> | ||||||
|  | /* There is no PHY directly connected so don't ask it for link status */ | ||||||
|  | #undef CONFIG_SYS_FAULT_ECHO_LINK_DOWN | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * Other required minimal configurations | ||||||
|  |  */ | ||||||
|  | #define CONFIG_ARCH_CPU_INIT	/* call arch_cpu_init() */ | ||||||
|  | #define CONFIG_SYS_MEMTEST_START 0x00400000	/* 4M */ | ||||||
|  | #define CONFIG_SYS_MEMTEST_END	0x007fffff	/* (_8M - 1) */ | ||||||
|  | #define CONFIG_SYS_RESET_ADDRESS 0xffff0000	/* Rst Vector Adr */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * SDIO/MMC Card Configuration | ||||||
|  |  */ | ||||||
|  | #ifdef CONFIG_CMD_MMC | ||||||
|  | #define CONFIG_MVEBU_MMC | ||||||
|  | #define CONFIG_SYS_MMC_BASE KW_SDIO_BASE | ||||||
|  | #endif /* CONFIG_CMD_MMC */ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * SATA Driver configuration | ||||||
|  |  */ | ||||||
|  | #ifdef CONFIG_MVSATA_IDE | ||||||
|  | #define CONFIG_SYS_ATA_IDE0_OFFSET	MV_SATA_PORT0_OFFSET | ||||||
|  | #endif /*CONFIG_MVSATA_IDE*/ | ||||||
|  | 
 | ||||||
|  | #define CONFIG_SYS_LOAD_ADDR  0x1000000      /* default location for tftp and bootm */ | ||||||
|  | 
 | ||||||
|  | #define CONFIG_SYS_DCACHE_OFF | ||||||
|  | 
 | ||||||
|  | #endif /* _CONFIG_DB_88F6281_BP_H */ | ||||||
|  | @ -41,8 +41,7 @@ | ||||||
|  * it has to be rounded to sector size |  * it has to be rounded to sector size | ||||||
|  */ |  */ | ||||||
| #define CONFIG_ENV_SIZE			0x20000	/* 128k */ | #define CONFIG_ENV_SIZE			0x20000	/* 128k */ | ||||||
| #define CONFIG_ENV_ADDR			0x60000 | #define CONFIG_ENV_OFFSET		0x80000	/* env starts here */ | ||||||
| #define CONFIG_ENV_OFFSET		0x60000	/* env starts here */ |  | ||||||
| /*
 | /*
 | ||||||
|  * Environment is right behind U-Boot in flash. Make sure U-Boot |  * Environment is right behind U-Boot in flash. Make sure U-Boot | ||||||
|  * doesn't grow into the environment area. |  * doesn't grow into the environment area. | ||||||
|  |  | ||||||
|  | @ -29,11 +29,6 @@ | ||||||
| #define CONFIG_SPL_I2C_MUX | #define CONFIG_SPL_I2C_MUX | ||||||
| #define CONFIG_SYS_I2C_MVTWSI | #define CONFIG_SYS_I2C_MVTWSI | ||||||
| 
 | 
 | ||||||
| /* Watchdog support */ |  | ||||||
| #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_WDT_ORION) |  | ||||||
| # define CONFIG_WATCHDOG |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| /*
 | /*
 | ||||||
|  * SDIO/MMC Card Configuration |  * SDIO/MMC Card Configuration | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | @ -6,6 +6,9 @@ | ||||||
| #ifndef _WDT_H_ | #ifndef _WDT_H_ | ||||||
| #define _WDT_H_ | #define _WDT_H_ | ||||||
| 
 | 
 | ||||||
|  | #include <dm.h> | ||||||
|  | #include <dm/read.h> | ||||||
|  | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Implement a simple watchdog uclass. Watchdog is basically a timer that |  * Implement a simple watchdog uclass. Watchdog is basically a timer that | ||||||
|  * is used to detect or recover from malfunction. During normal operation |  * is used to detect or recover from malfunction. During normal operation | ||||||
|  | @ -103,4 +106,42 @@ struct wdt_ops { | ||||||
| 	int (*expire_now)(struct udevice *dev, ulong flags); | 	int (*expire_now)(struct udevice *dev, ulong flags); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | #if defined(CONFIG_WDT) | ||||||
|  | #ifndef CONFIG_WATCHDOG_TIMEOUT_MSECS | ||||||
|  | #define CONFIG_WATCHDOG_TIMEOUT_MSECS	(60 * 1000) | ||||||
|  | #endif | ||||||
|  | #define WATCHDOG_TIMEOUT_SECS	(CONFIG_WATCHDOG_TIMEOUT_MSECS / 1000) | ||||||
|  | 
 | ||||||
|  | static inline int initr_watchdog(void) | ||||||
|  | { | ||||||
|  | 	u32 timeout = WATCHDOG_TIMEOUT_SECS; | ||||||
|  | 
 | ||||||
|  | 	/*
 | ||||||
|  | 	 * Init watchdog: This will call the probe function of the | ||||||
|  | 	 * watchdog driver, enabling the use of the device | ||||||
|  | 	 */ | ||||||
|  | 	if (uclass_get_device_by_seq(UCLASS_WDT, 0, | ||||||
|  | 				     (struct udevice **)&gd->watchdog_dev)) { | ||||||
|  | 		debug("WDT:   Not found by seq!\n"); | ||||||
|  | 		if (uclass_get_device(UCLASS_WDT, 0, | ||||||
|  | 				      (struct udevice **)&gd->watchdog_dev)) { | ||||||
|  | 			printf("WDT:   Not found!\n"); | ||||||
|  | 			return 0; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if (CONFIG_IS_ENABLED(OF_CONTROL)) { | ||||||
|  | 		timeout = dev_read_u32_default(gd->watchdog_dev, "timeout-sec", | ||||||
|  | 					       WATCHDOG_TIMEOUT_SECS); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	wdt_start(gd->watchdog_dev, timeout * 1000, 0); | ||||||
|  | 	gd->flags |= GD_FLG_WDT_READY; | ||||||
|  | 	printf("WDT:   Started with%s servicing (%ds timeout)\n", | ||||||
|  | 	       IS_ENABLED(CONFIG_WATCHDOG) ? "" : "out", timeout); | ||||||
|  | 
 | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| #endif  /* _WDT_H_ */ | #endif  /* _WDT_H_ */ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue