Skip to content
Snippets Groups Projects
Commit e9d6a200 authored by Marek Vasut's avatar Marek Vasut
Browse files

arm: socfpga: reset: Add EMAC reset functions


Add functions to reset the EMAC ethernet blocks. We cannot handle
two EMAC ethernet blocks yet, therefore the ifdefs. Once there is
hardware using both EMAC blocks, this ifdef will have to go.

Signed-off-by: default avatarMarek Vasut <marex@denx.de>
Cc: Chin Liang See <clsee@altera.com>
Cc: Dinh Nguyen <dinguyen@altera.com>
Cc: Albert Aribaud <albert.u.boot@aribaud.net>
Cc: Tom Rini <trini@ti.com>
Cc: Wolfgang Denk <wd@denx.de>
Cc: Pavel Machek <pavel@denx.de>
Acked-by: default avatarPavel Machek <pavel@denx.de>
parent 2110eeaf
No related branches found
No related tags found
No related merge requests found
......@@ -49,3 +49,20 @@ void reset_deassert_peripherals_handoff(void)
{
writel(0, &reset_manager_base->per_mod_reset);
}
/* Change the reset state for EMAC 0 and EMAC 1 */
void socfpga_emac_reset(int enable)
{
const void *reset = &reset_manager_base->per_mod_reset;
if (enable) {
setbits_le32(reset, 1 << RSTMGR_PERMODRST_EMAC0_LSB);
setbits_le32(reset, 1 << RSTMGR_PERMODRST_EMAC1_LSB);
} else {
#if (CONFIG_EMAC_BASE == SOCFPGA_EMAC0_ADDRESS)
clrbits_le32(reset, 1 << RSTMGR_PERMODRST_EMAC0_LSB);
#elif (CONFIG_EMAC_BASE == SOCFPGA_EMAC1_ADDRESS)
clrbits_le32(reset, 1 << RSTMGR_PERMODRST_EMAC1_LSB);
#endif
}
}
......@@ -10,6 +10,7 @@
void reset_cpu(ulong addr);
void reset_deassert_peripherals_handoff(void);
void socfpga_emac_reset(int enable);
void socfpga_watchdog_reset(void);
struct socfpga_reset_manager {
......@@ -29,6 +30,8 @@ struct socfpga_reset_manager {
#define RSTMGR_CTRL_SWWARMRSTREQ_LSB 1
#endif
#define RSTMGR_PERMODRST_EMAC0_LSB 0
#define RSTMGR_PERMODRST_EMAC1_LSB 1
#define RSTMGR_PERMODRST_L4WD0_LSB 6
#endif /* _RESET_MANAGER_H_ */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment