/* Copyright (c) 2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and * only version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef __DWC_ETH_QOS__RGMII_IO_MACRO_REGACC__H__ #define __DWC_ETH_QOS__RGMII_IO_MACRO_REGACC__H__ /* Read Write register operations for EMAC_RGMII_IO_MACRO_CONFIG */ extern ULONG dwc_rgmii_io_csr_base_addr; #define RGMII_IO_BASE_ADDRESS dwc_rgmii_io_csr_base_addr #define RGMII_IO_MACRO_CONFIG_RGOFFADDR_OFFSET (0x00000000) #define RGMII_IO_MACRO_CONFIG_RGOFFADDR ((volatile ULONG *) (RGMII_IO_BASE_ADDRESS + RGMII_IO_MACRO_CONFIG_RGOFFADDR_OFFSET)) #define RGMII_IO_MACRO_CONFIG_RGWR(data) do {\ iowrite32(data, (void *)RGMII_IO_MACRO_CONFIG_RGOFFADDR);\ } while (0) #define RGMII_IO_MACRO_CONFIG_RGRD(data) do {\ (data) = ioread32((void *)RGMII_IO_MACRO_CONFIG_RGOFFADDR);\ } while (0) #define RGMII_FUNC_CLK_EN_MASK (ULONG)(0x1) #define RGMII_FUNC_CLK_EN_WR_MASK (ULONG)(0xbfffffff) #define RGMII_FUNC_CLK_EN_UDFWR(data) do {\ ULONG v;\ RGMII_IO_MACRO_CONFIG_RGRD(v);\ v = ((v & RGMII_FUNC_CLK_EN_WR_MASK) | ((data & RGMII_FUNC_CLK_EN_MASK) << 30));\ RGMII_IO_MACRO_CONFIG_RGWR(v);\ } while (0) #define RGMII_FUNC_CLK_EN_UDFRD(data) do {\ RGMII_IO_MACRO_CONFIG_RGRD(data);\ data = ((data >> 30) & RGMII_FUNC_CLK_EN_MASK);\ } while (0) #define RGMII_GPIO_CFG_RX_INT_MASK (ULONG)(0x3) #define RGMII_GPIO_CFG_RX_INT_WR_MASK (ULONG)(0xffe7ffff) #define RGMII_GPIO_CFG_RX_INT_UDFWR(data) do {\ ULONG v;\ RGMII_IO_MACRO_CONFIG_RGRD(v);\ v = ((v & RGMII_GPIO_CFG_RX_INT_WR_MASK) | ((data & RGMII_GPIO_CFG_RX_INT_MASK) << 19));\ RGMII_IO_MACRO_CONFIG_RGWR(v);\ } while (0) #define RGMII_GPIO_CFG_RX_INT_UDFRD(data) do {\ RGMII_IO_MACRO_CONFIG_RGRD(data);\ data = ((data >> 19) & RGMII_GPIO_CFG_RX_INT_MASK);\ } while (0) #define RGMII_GPIO_CFG_TX_INT_MASK (ULONG)(0x3) #define RGMII_GPIO_CFG_TX_INT_WR_MASK (ULONG)(0xfff9ffff) #define RGMII_GPIO_CFG_TX_INT_UDFWR(data) do {\ ULONG v;\ RGMII_IO_MACRO_CONFIG_RGRD(v);\ v = ((v & RGMII_GPIO_CFG_TX_INT_WR_MASK) | ((data & RGMII_GPIO_CFG_TX_INT_MASK) << 17));\ RGMII_IO_MACRO_CONFIG_RGWR(v);\ } while (0) #define RGMII_GPIO_CFG_TX_INT_UDFRD(data) do {\ RGMII_IO_MACRO_CONFIG_RGRD(data);\ data = ((data >> 17) & RGMII_GPIO_CFG_TX_INT_MASK);\ } while (0) #define RGMII_MAX_SPD_PRG_9_MASK (ULONG)(0x1ff) #define RGMII_MAX_SPD_PRG_9_WR_MASK (ULONG)(0xfffe00ff) #define RGMII_MAX_SPD_PRG_9_UDFWR(data) do {\ ULONG v;\ RGMII_IO_MACRO_CONFIG_RGRD(v);\ v = ((v & RGMII_MAX_SPD_PRG_9_WR_MASK) | ((data & RGMII_MAX_SPD_PRG_9_MASK) << 8));\ RGMII_IO_MACRO_CONFIG_RGWR(v);\ } while (0) #define RGMII_MAX_SPD_PRG_9_UDFRD(data) do {\ RGMII_IO_MACRO_CONFIG_RGRD(data);\ data = ((data >> 8) & RGMII_MAX_SPD_PRG_9_MASK);\ } while (0) #define RGMII_MAX_SPD_PRG_2_MASK (ULONG)(0x3) #define RGMII_MAX_SPD_PRG_2_WR_MASK (ULONG)(0xffffff3f) #define RGMII_MAX_SPD_PRG_2_UDFWR(data) do {\ ULONG v;\ RGMII_IO_MACRO_CONFIG_RGRD(v);\ v = ((v & RGMII_MAX_SPD_PRG_2_WR_MASK) | ((data & RGMII_MAX_SPD_PRG_2_MASK) << 6));\ RGMII_IO_MACRO_CONFIG_RGWR(v);\ } while (0) #define RGMII_MAX_SPD_PRG_2_UDFRD(data) do {\ RGMII_IO_MACRO_CONFIG_RGRD(data);\ data = ((data >> 6) & RGMII_MAX_SPD_PRG_2_MASK);\ } while (0) #define RGMII_INTF_SEL_MASK (ULONG)(0x3) #define RGMII_INTF_SEL_WR_MASK (ULONG)(0xffffffcf) #define RGMII_INTF_SEL_UDFWR(data) do {\ ULONG v;\ RGMII_IO_MACRO_CONFIG_RGRD(v);\ v = ((v & RGMII_INTF_SEL_WR_MASK) | ((data & RGMII_INTF_SEL_MASK) << 4));\ RGMII_IO_MACRO_CONFIG_RGWR(v);\ } while (0) #define RGMII_INTF_SEL_UDFRD(data) do {\ RGMII_IO_MACRO_CONFIG_RGRD(data);\ data = ((data >> 4) & RGMII_INTF_SEL_MASK);\ } while (0) #define RGMII_POS_NEG_DATA_SEL_MASK (ULONG)(0x1) #define RGMII_POS_NEG_DATA_SEL_WR_MASK (ULONG)(0xff7fffff) #define RGMII_POS_NEG_DATA_SEL_UDFWR(data) do {\ ULONG v;\ RGMII_IO_MACRO_CONFIG_RGRD(v);\ v = ((v & RGMII_POS_NEG_DATA_SEL_WR_MASK) | ((data & RGMII_POS_NEG_DATA_SEL_MASK) << 23));\ RGMII_IO_MACRO_CONFIG_RGWR(v);\ } while (0) #define RGMII_POS_NEG_DATA_SEL_UDFRD(data) do {\ RGMII_IO_MACRO_CONFIG_RGRD(data);\ data = ((data >> 23) & RGMII_POS_NEG_DATA_SEL_MASK);\ } while (0) #define RGMII_BYPASS_TX_ID_EN_MASK (ULONG)(0x1) #define RGMII_BYPASS_TX_ID_EN_WR_MASK (ULONG)(0xfffffff7) #define RGMII_BYPASS_TX_ID_EN_UDFWR(data) do {\ ULONG v;\ RGMII_IO_MACRO_CONFIG_RGRD(v);\ v = ((v & RGMII_BYPASS_TX_ID_EN_WR_MASK) | ((data & RGMII_BYPASS_TX_ID_EN_MASK) << 3));\ RGMII_IO_MACRO_CONFIG_RGWR(v);\ } while (0) #define RGMII_BYPASS_TX_ID_EN_UDFRD(data) do {\ RGMII_IO_MACRO_CONFIG_RGRD(data);\ data = ((data >> 3) & RGMII_BYPASS_TX_ID_EN_MASK);\ } while (0) #define RGMII_LOOPBACK_EN_MASK (ULONG)(0x1) #define RGMII_LOOPBACK_EN_WR_MASK (ULONG)(0xfffffffb) #define RGMII_LOOPBACK_EN_UDFWR(data) do {\ ULONG v;\ RGMII_IO_MACRO_CONFIG_RGRD(v);\ v = ((v & RGMII_LOOPBACK_EN_WR_MASK) | ((data & RGMII_LOOPBACK_EN_MASK) << 2));\ RGMII_IO_MACRO_CONFIG_RGWR(v);\ } while (0) #define RGMII_LOOPBACK_EN_UDFRD(data) do {\ RGMII_IO_MACRO_CONFIG_RGRD(data);\ data = ((data >> 2) & RGMII_LOOPBACK_EN_MASK);\ } while (0) #define RGMII_PROG_SWAP_MASK (ULONG)(0x1) #define RGMII_PROG_SWAP_WR_MASK (ULONG)(0xfffffffd) #define RGMII_PROG_SWAP_UDFWR(data) do {\ ULONG v;\ RGMII_IO_MACRO_CONFIG_RGRD(v);\ v = ((v & RGMII_PROG_SWAP_WR_MASK) | ((data & RGMII_PROG_SWAP_MASK) << 1));\ RGMII_IO_MACRO_CONFIG_RGWR(v);\ } while (0) #define RGMII_PROG_SWAP_UDFRD(data) do {\ RGMII_IO_MACRO_CONFIG_RGRD(data);\ data = ((data >> 1) & RGMII_PROG_SWAP_MASK);\ } while (0) #define RGMII_DDR_MODE_MASK (ULONG)(0x1) #define RGMII_DDR_MODE_WR_MASK (ULONG)(0xfffffffe) #define RGMII_DDR_MODE_UDFWR(data) do {\ ULONG v;\ RGMII_IO_MACRO_CONFIG_RGRD(v);\ v = ((v & RGMII_DDR_MODE_WR_MASK) | ((data & RGMII_DDR_MODE_MASK) << 0));\ RGMII_IO_MACRO_CONFIG_RGWR(v);\ } while (0) #define RGMII_DDR_MODE_UDFRD(data) do {\ RGMII_IO_MACRO_CONFIG_RGRD(data);\ data = ((data >> 0) & RGMII_DDR_MODE_MASK);\ } while (0) /* Read Write register operations for EMAC_SDCC_HC_REG_DLL_CONFIG */ #define SDCC_HC_REG_DLL_CONFIG_RGOFFADDR_OFFSET (0x00000004) #define SDCC_HC_REG_DLL_CONFIG_RGOFFADDR ((volatile ULONG *)(RGMII_IO_BASE_ADDRESS + SDCC_HC_REG_DLL_CONFIG_RGOFFADDR_OFFSET)) #define SDCC_HC_REG_DLL_CONFIG_RGWR(data) do {\ iowrite32(data, (void *)SDCC_HC_REG_DLL_CONFIG_RGOFFADDR);\ } while (0) #define SDCC_HC_REG_DLL_CONFIG_RGRD(data) do {\ (data) = ioread32((void *)SDCC_HC_REG_DLL_CONFIG_RGOFFADDR);\ } while (0) #define SDCC_HC_DLL_RST_MASK (ULONG)(0x1) #define SDCC_HC_DLL_RST_WR_MASK (ULONG)(0xbfffffff) #define SDCC_HC_DLL_RST_UDFWR(data) do {\ ULONG v;\ SDCC_HC_REG_DLL_CONFIG_RGRD(v);\ v = ((v & SDCC_HC_DLL_RST_WR_MASK) | ((data & SDCC_HC_DLL_RST_MASK) << 30));\ SDCC_HC_REG_DLL_CONFIG_RGWR(v);\ } while (0) #define SDCC_HC_DLL_RST_UDFRD(data) do {\ SDCC_HC_REG_DLL_CONFIG_RGRD(data);\ data = ((data >> 30) & SDCC_HC_DLL_RST_MASK);\ } while (0) #define SDCC_HC_PDN_MASK (ULONG)(0x1) #define SDCC_HC_PDN_WR_MASK (ULONG)(0xdfffffff) #define SDCC_HC_PDN_UDFWR(data) do {\ ULONG v;\ SDCC_HC_REG_DLL_CONFIG_RGRD(v);\ v = ((v & SDCC_HC_PDN_WR_MASK) | ((data & SDCC_HC_PDN_MASK) << 29));\ SDCC_HC_REG_DLL_CONFIG_RGWR(v);\ } while (0) #define SDCC_HC_PDN_UDFRD(data) do {\ SDCC_HC_REG_DLL_CONFIG_RGRD(data);\ data = ((data >> 29) & SDCC_HC_PDN_MASK);\ } while (0) #define SDCC_HC_MCLK_FREQ_MASK (ULONG)(0x7) #define SDCC_HC_MCLK_FREQ_WR_MASK (ULONG)(0xf8ffffff) #define SDCC_HC_MCLK_FREQ_UDFWR(data) do {\ ULONG v;\ SDCC_HC_REG_DLL_CONFIG_RGRD(v);\ v = ((v & SDCC_HC_MCLK_FREQ_WR_MASK) | ((data & SDCC_HC_MCLK_FREQ_MASK) << 24));\ SDCC_HC_REG_DLL_CONFIG_RGWR(v);\ } while (0) #define SDCC_HC_MCLK_FREQ_UDFRD(data) do {\ SDCC_HC_REG_DLL_CONFIG_RGRD(data);\ data = ((data >> 24) & SDCC_HC_MCLK_FREQ_MASK);\ } while (0) #define SDCC_HC_CDR_SELEXT_MASK (ULONG)(0xf) #define SDCC_HC_CDR_SELEXT_WR_MASK (ULONG)(0xff0fffff) #define SDCC_HC_CDR_SELEXT_UDFWR(data) do {\ ULONG v;\ SDCC_HC_REG_DLL_CONFIG_RGRD(v);\ v = ((v & SDCC_HC_CDR_SELEXT_WR_MASK) | ((data & SDCC_HC_CDR_SELEXT_MASK) << 20));\ SDCC_HC_REG_DLL_CONFIG_RGWR(v);\ } while (0) #define SDCC_HC_CDR_SELEXT_UDFRD(data) do {\ SDCC_HC_REG_DLL_CONFIG_RGRD(data);\ data = ((data >> 20) & SDCC_HC_CDR_SELEXT_MASK);\ } while (0) #define SDCC_HC_CDR_EXT_EN_MASK (ULONG)(0x1) #define SDCC_HC_CDR_EXT_EN_WR_MASK (ULONG)(0xfff7ffff) #define SDCC_HC_CDR_EXT_EN_UDFWR(data) do {\ ULONG v;\ SDCC_HC_REG_DLL_CONFIG_RGRD(v);\ v = ((v & SDCC_HC_CDR_EXT_EN_WR_MASK) | ((data & SDCC_HC_CDR_EXT_EN_MASK) << 19));\ SDCC_HC_REG_DLL_CONFIG_RGWR(v);\ } while (0) #define SDCC_HC_CDR_EXT_EN_UDFRD(data) do {\ SDCC_HC_REG_DLL_CONFIG_RGRD(data);\ data = ((data >> 19) & SDCC_HC_CDR_EXT_EN_MASK);\ } while (0) #define SDCC_HC_CK_OUT_EN_MASK (ULONG)(0x1) #define SDCC_HC_CK_OUT_EN_WR_MASK (ULONG)(0xfffbffff) #define SDCC_HC_CK_OUT_EN_UDFWR(data) do {\ ULONG v;\ SDCC_HC_REG_DLL_CONFIG_RGRD(v);\ v = ((v & SDCC_HC_CK_OUT_EN_WR_MASK) | ((data & SDCC_HC_CK_OUT_EN_MASK) << 18));\ SDCC_HC_REG_DLL_CONFIG_RGWR(v);\ } while (0) #define SDCC_HC_CK_OUT_EN_UDFRD(data) do {\ SDCC_HC_REG_DLL_CONFIG_RGRD(data);\ data = ((data >> 18) & SDCC_HC_CK_OUT_EN_MASK);\ } while (0) #define SDCC_HC_CDR_EN_MASK (ULONG)(0x1) #define SDCC_HC_CDR_EN_WR_MASK (ULONG)(0xfffdffff) #define SDCC_HC_CDR_EN_UDFWR(data) do {\ ULONG v;\ SDCC_HC_REG_DLL_CONFIG_RGRD(v);\ v = ((v & SDCC_HC_CDR_EN_WR_MASK) | ((data & SDCC_HC_CDR_EN_MASK) << 17));\ SDCC_HC_REG_DLL_CONFIG_RGWR(v);\ } while (0) #define SDCC_HC_CDR_EN_UDFRD(data) do {\ SDCC_HC_REG_DLL_CONFIG_RGRD(data);\ data = ((data >> 17) & SDCC_HC_CDR_EN_MASK);\ } while (0) #define SDCC_HC_MCLK_GATING_ENABLE_MASK (ULONG)(0x1) #define SDCC_HC_MCLK_GATING_ENABLE_WR_MASK (ULONG)(0xffffffdf) #define SDCC_HC_MCLK_GATING_ENABLE_UDFWR(data) do {\ ULONG v;\ SDCC_HC_REG_DLL_CONFIG_RGRD(v);\ v = ((v & SDCC_HC_MCLK_GATING_ENABLE_WR_MASK) | ((data & SDCC_HC_MCLK_GATING_ENABLE_MASK) << 5));\ SDCC_HC_REG_DLL_CONFIG_RGWR(v);\ } while (0) #define SDCC_HC_MCLK_GATING_ENABLE_UDFRD(data) do {\ SDCC_HC_REG_DLL_CONFIG_RGRD(data);\ data = ((data >> 5) & SDCC_HC_MCLK_GATING_ENABLE_MASK);\ } while (0) #define SDCC_HC_CDR_FINE_PHASE_MASK (ULONG)(0x1) #define SDCC_HC_CDR_FINE_PHASE_WR_MASK (ULONG)(0xfffffff3) #define SDCC_HC_CDR_FINE_PHASE_UDFWR(data) do {\ ULONG v;\ SDCC_HC_REG_DLL_CONFIG_RGRD(v);\ v = ((v & SDCC_HC_CDR_FINE_PHASE_WR_MASK) | ((data & SDCC_HC_CDR_FINE_PHASE_MASK) << 2));\ SDCC_HC_REG_DLL_CONFIG_RGWR(v);\ } while (0) #define SDCC_HC_CDR_FINE_PHASE_UDFRD(data) do {\ SDCC_HC_REG_DLL_CONFIG_RGRD(data);\ data = ((data >> 2) & SDCC_HC_CDR_FINE_PHASE_MASK);\ } while (0) #define SDCC_HC_DLL_EN_MASK (ULONG)(0x1) #define SDCC_HC_DLL_EN_WR_MASK (ULONG)(0xfffeffff) #define SDCC_HC_DLL_EN_UDFWR(data) do {\ ULONG v;\ SDCC_HC_REG_DLL_CONFIG_RGRD(v);\ v = ((v & SDCC_HC_DLL_EN_WR_MASK) | ((data & SDCC_HC_DLL_EN_MASK) << 16));\ SDCC_HC_REG_DLL_CONFIG_RGWR(v);\ } while (0) #define SDCC_HC_DLL_EN_UDFRD(data) do {\ SDCC_HC_REG_DLL_CONFIG_RGRD(data);\ data = ((data >> 16) & SDCC_HC_DLL_EN_MASK);\ } while (0) /* Read Write register operations for EMAC_SDCC_HC_REG_DDR_CONFIG */ #define SDCC_HC_REG_DDR_CONFIG_RGOFFADDR_OFFSET (0x0000000C) #define SDCC_HC_REG_DDR_CONFIG_RGOFFADDR ((volatile ULONG *)(RGMII_IO_BASE_ADDRESS + SDCC_HC_REG_DDR_CONFIG_RGOFFADDR_OFFSET)) #define SDCC_HC_REG_DDR_CONFIG_RGWR(data) do {\ iowrite32(data, (void *)SDCC_HC_REG_DDR_CONFIG_RGOFFADDR);\ } while (0) #define SDCC_HC_REG_DDR_CONFIG_RGRD(data) do {\ (data) = ioread32((void *)SDCC_HC_REG_DDR_CONFIG_RGOFFADDR);\ } while (0) #define SDCC_HC_PRG_RCLK_DLY_MASK (ULONG)(0x1ff) #define SDCC_HC_PRG_RCLK_DLY_WR_MASK (ULONG)(0xfffffe00) #define SDCC_HC_PRG_RCLK_DLY_UDFWR(data) do {\ ULONG v;\ SDCC_HC_REG_DDR_CONFIG_RGRD(v);\ v = ((v & SDCC_HC_PRG_RCLK_DLY_WR_MASK) | ((data & SDCC_HC_PRG_RCLK_DLY_MASK) << 0));\ SDCC_HC_REG_DDR_CONFIG_RGWR(v);\ } while (0) #define SDCC_HC_PRG_RCLK_DLY_UDFRD(data) do {\ SDCC_HC_REG_DDR_CONFIG_RGRD(data);\ data = ((data >> 0) & SDCC_HC_PRG_RCLK_DLY_MASK);\ } while (0) #define SDCC_HC_EXT_PRG_RCLK_DLY_MASK (ULONG)(0x3f) #define SDCC_HC_EXT_PRG_RCLK_DLY_WR_MASK (ULONG)(0xf81fffff) #define SDCC_HC_EXT_PRG_RCLK_DLY_UDFWR(data) do {\ ULONG v;\ SDCC_HC_REG_DDR_CONFIG_RGRD(v);\ v = ((v & SDCC_HC_EXT_PRG_RCLK_DLY_WR_MASK) | ((data & SDCC_HC_EXT_PRG_RCLK_DLY_MASK) << 21));\ SDCC_HC_REG_DDR_CONFIG_RGWR(v);\ } while (0) #define SDCC_HC_EXT_PRG_RCLK_DLY_UDFRD(data) do {\ SDCC_HC_REG_DDR_CONFIG_RGRD(data);\ data = ((data >> 0) & SDCC_HC_EXT_PRG_RCLK_DLY_MASK);\ } while (0) #define SDCC_HC_EXT_PRG_RCLK_DLY_CODE_MASK (ULONG)(0x7) #define SDCC_HC_EXT_PRG_RCLK_DLY_CODE_WR_MASK (ULONG)(0xc7ffffff) #define SDCC_HC_EXT_PRG_RCLK_DLY_CODE_UDFWR(data) do {\ ULONG v;\ SDCC_HC_REG_DDR_CONFIG_RGRD(v);\ v = ((v & SDCC_HC_EXT_PRG_RCLK_DLY_CODE_WR_MASK) | ((data & SDCC_HC_EXT_PRG_RCLK_DLY_CODE_MASK) << 27));\ SDCC_HC_REG_DDR_CONFIG_RGWR(v);\ } while (0) #define SDCC_HC_EXT_PRG_RCLK_DLY_CODE_UDFRD(data) do {\ SDCC_HC_REG_DDR_CONFIG_RGRD(data);\ data = ((data >> 0) & SDCC_HC_EXT_PRG_RCLK_DLY_CODE_MASK);\ } while (0) #define SDCC_HC_EXT_PRG_RCLK_DLY_EN_MASK (ULONG)(0x1) #define SDCC_HC_EXT_PRG_RCLK_DLY_EN_WR_MASK (ULONG)(0xbfffffff) #define SDCC_HC_EXT_PRG_RCLK_DLY_EN_UDFWR(data) do {\ ULONG v;\ SDCC_HC_REG_DDR_CONFIG_RGRD(v);\ v = ((v & SDCC_HC_EXT_PRG_RCLK_DLY_EN_WR_MASK) | ((data & SDCC_HC_EXT_PRG_RCLK_DLY_EN_MASK) << 30));\ SDCC_HC_REG_DDR_CONFIG_RGWR(v);\ } while (0) #define SDCC_HC_EXT_PRG_RCLK_DLY_EN_UDFRD(data) do {\ SDCC_HC_REG_DDR_CONFIG_RGRD(data);\ data = ((data >> 0) & SDCC_HC_EXT_PRG_RCLK_DLY_EN_MASK);\ } while (0) /* Read Write register operations for EMAC_SDCC_HC_REG_DLL_CONFIG_2 */ #define SDCC_HC_REG_DLL_CONFIG_2_RGOFFADDR_OFFSET (0x00000010) #define SDCC_HC_REG_DLL_CONFIG_2_RGOFFADDR ((volatile ULONG *)(RGMII_IO_BASE_ADDRESS + SDCC_HC_REG_DLL_CONFIG_2_RGOFFADDR_OFFSET)) #define SDCC_HC_REG_DLL_CONFIG_2_RGWR(data) do {\ iowrite32(data, (void *)SDCC_HC_REG_DLL_CONFIG_2_RGOFFADDR);\ } while (0) #define SDCC_HC_REG_DLL_CONFIG_2_RGRD(data) do {\ (data) = ioread32((void *)SDCC_HC_REG_DLL_CONFIG_2_RGOFFADDR);\ } while (0) #define SDCC_HC_CFG_2_MCLK_FREQ_CALC_MASK (ULONG)(0xff) #define SDCC_HC_CFG_2_MCLK_FREQ_CALC_WR_MASK (ULONG)(0xfffc03ff) #define SDCC_HC_CFG_2_MCLK_FREQ_CALC_UDFWR(data) do {\ ULONG v;\ SDCC_HC_REG_DLL_CONFIG_2_RGRD(v);\ v = ((v & SDCC_HC_CFG_2_MCLK_FREQ_CALC_WR_MASK) | ((data & SDCC_HC_CFG_2_MCLK_FREQ_CALC_MASK) << 10));\ SDCC_HC_REG_DLL_CONFIG_2_RGWR(v);\ } while (0) #define SDCC_HC_CFG_2_MCLK_FREQ_CALC_UDFRD(data) do {\ SDCC_HC_REG_DLL_CONFIG_2_RGRD(data);\ data = ((data >> 10) & SDCC_HC_CFG_2_MCLK_FREQ_CALC_MASK);\ } while (0) #define SDCC_HC_CFG_2_DLL_CLOCK_DISABLE_MASK (ULONG)(0x1) #define SDCC_HC_CFG_2_DLL_CLOCK_DISABLE_WR_MASK (ULONG)(0xffdfffff) #define SDCC_HC_CFG_2_DLL_CLOCK_DISABLE_UDFWR(data) do {\ ULONG v;\ SDCC_HC_REG_DLL_CONFIG_2_RGRD(v);\ v = ((v & SDCC_HC_CFG_2_DLL_CLOCK_DISABLE_WR_MASK) | ((data & SDCC_HC_CFG_2_DLL_CLOCK_DISABLE_MASK) << 21));\ SDCC_HC_REG_DLL_CONFIG_2_RGWR(v);\ } while (0) #define SDCC_HC_CFG_2_DLL_CLOCK_DISABLE_UDFRD(data) do {\ SDCC_HC_REG_DLL_CONFIG_2_RGRD(data);\ data = ((data >> 21) & SDCC_HC_CFG_2_DLL_CLOCK_DISABLE_MASK);\ } while (0) #define SDCC_HC_CFG_2_DDR_TRAFFIC_INIT_SEL_MASK (ULONG)(0x1) #define SDCC_HC_CFG_2_DDR_TRAFFIC_INIT_SEL_WR_MASK (ULONG)(0xfffffff3) #define SDCC_HC_CFG_2_DDR_TRAFFIC_INIT_SEL_UDFWR(data) do {\ ULONG v;\ SDCC_HC_REG_DLL_CONFIG_2_RGRD(v);\ v = ((v & SDCC_HC_CFG_2_DDR_TRAFFIC_INIT_SEL_WR_MASK) | ((data & SDCC_HC_CFG_2_DDR_TRAFFIC_INIT_SEL_MASK) << 2));\ SDCC_HC_REG_DLL_CONFIG_2_RGWR(v);\ } while (0) #define SDCC_HC_CFG_2_DDR_TRAFFIC_INIT_SEL_UDFRD(data) do {\ SDCC_HC_REG_DLL_CONFIG_2_RGRD(data);\ data = ((data >> 2) & SDCC_HC_CFG_2_DDR_TRAFFIC_INIT_SEL_MASK);\ } while (0) #define SDCC_HC_CFG_2_DDR_CAL_EN_MASK (ULONG)(0x1) #define SDCC_HC_CFG_2_DDR_CAL_EN_WR_MASK (ULONG)(0xfffffffe) #define SDCC_HC_CFG_2_DDR_CAL_EN_UDFWR(data) do {\ ULONG v;\ SDCC_HC_REG_DLL_CONFIG_2_RGRD(v);\ v = ((v & SDCC_HC_CFG_2_DDR_CAL_EN_WR_MASK) | ((data & SDCC_HC_CFG_2_DDR_CAL_EN_MASK) << 0));\ SDCC_HC_REG_DLL_CONFIG_2_RGWR(v);\ } while (0) #define SDCC_HC_CFG_2_DDR_CAL_EN_UDFRD(data) do {\ SDCC_HC_REG_DLL_CONFIG_2_RGRD(data);\ data = ((data >> 0) & SDCC_HC_CFG_2_DDR_CAL_EN_MASK);\ } while (0) #define SDCC_HC_CFG_2_DDR_TRAFFIC_INIT_SW_MASK (ULONG)(0x1) #define SDCC_HC_CFG_2_DDR_TRAFFIC_INIT_SW_WR_MASK (ULONG)(0xfffffffd) #define SDCC_HC_CFG_2_DDR_TRAFFIC_INIT_SW_UDFWR(data) do {\ ULONG v;\ SDCC_HC_REG_DLL_CONFIG_2_RGRD(v);\ v = ((v & SDCC_HC_CFG_2_DDR_TRAFFIC_INIT_SW_WR_MASK) | ((data & SDCC_HC_CFG_2_DDR_TRAFFIC_INIT_SW_MASK) << 1));\ SDCC_HC_REG_DLL_CONFIG_2_RGWR(v);\ } while (0) #define SDCC_HC_CFG_2_DDR_TRAFFIC_INIT_SW_UDFRD(data) do {\ SDCC_HC_REG_DLL_CONFIG_2_RGRD(data);\ data = ((data >> 0) & SDCC_HC_CFG_2_DDR_TRAFFIC_INIT_SW_MASK);\ } while (0) /* Read register operations for EMAC_SDC4_STATUS */ #define SDC4_STATUS_RGOFFADDR ((volatile ULONG *)(RGMII_IO_BASE_ADDRESS + 0x00000014)) #define SDC4_STATUS_RGRD(data) do {\ (data) = ioread32((void *)SDC4_STATUS_RGOFFADDR);\ } while (0) #define SDC4_STATUS_DLL_LOCK_STS_MASK (ULONG)(0x1) #define SDC4_STATUS_DLL_LOCK_STS_UDFRD(data) do {\ SDC4_STATUS_RGRD(data);\ data = ((data >> 7) & SDC4_STATUS_DLL_LOCK_STS_MASK);\ } while (0) /* Read register operations for EMAC_SDCC_USR_CTL */ #define SDCC_USR_CTL_RGOFFADDR_OFFSET (0x00000018) #define SDCC_USR_CTL_RGOFFADDR ((volatile ULONG *)(RGMII_IO_BASE_ADDRESS + SDCC_USR_CTL_RGOFFADDR_OFFSET)) #define SDCC_USR_CTL_BYPASS_MODE_MASK (ULONG)(0x1) #define SDCC_USR_CTL_BYPASS_MODE_WR_MASK (ULONG)(0xbfffffff) #define SDCC_USR_CTL_RGRD(data) do {\ (data) = ioread32((void *)SDCC_USR_CTL_RGOFFADDR);\ } while (0) #define SDCC_USR_CTL_RGWR(data) do {\ iowrite32(data, (void *)SDCC_USR_CTL_RGOFFADDR);\ } while (0) #define SDCC_USR_CTL_BYPASS_MODE_UDFRD(data) do {\ SDCC_USR_CTL_RGRD(data);\ data = ((data >> 30) & SDCC_USR_CTL_BYPASS_MODE_MASK);\ } while (0) #define SDCC_USR_CTL_BYPASS_MODE_UDFWR(data) do {\ ULONG v;\ SDCC_USR_CTL_RGRD(v);\ v = ((v & SDCC_USR_CTL_BYPASS_MODE_WR_MASK) | ((data & SDCC_USR_CTL_BYPASS_MODE_MASK) << 30));\ SDCC_USR_CTL_RGWR(v);\ } while (0) /* Read Write register operations for * EMAC_RGMII_IO_MACRO_CONFIG_2 */ #define RGMII_IO_MACRO_CONFIG_2_RGOFFADDR_OFFSET (0x0000001C) #define RGMII_IO_MACRO_CONFIG_2_RGOFFADDR ((volatile ULONG *)(RGMII_IO_BASE_ADDRESS + RGMII_IO_MACRO_CONFIG_2_RGOFFADDR_OFFSET)) #define RGMII_IO_MACRO_CONFIG_2_RGWR(data) do {\ iowrite32(data, (void *)RGMII_IO_MACRO_CONFIG_2_RGOFFADDR);\ } while (0) #define RGMII_IO_MACRO_CONFIG_2_RGRD(data) do {\ (data) = ioread32((void *)RGMII_IO_MACRO_CONFIG_2_RGOFFADDR);\ } while (0) #define RGMII_DATA_DIVIDE_CLK_SEL_MASK (ULONG)(0x1) #define RGMII_DATA_DIVIDE_CLK_SEL_WR_MASK (ULONG)(0xffffffbf) #define RGMII_CONFIG_2_DATA_DIVIDE_CLK_SEL_UDFWR(data) do {\ ULONG v;\ RGMII_IO_MACRO_CONFIG_2_RGRD(v);\ v = ((v & RGMII_DATA_DIVIDE_CLK_SEL_WR_MASK) | ((data & RGMII_DATA_DIVIDE_CLK_SEL_MASK) << 6));\ RGMII_IO_MACRO_CONFIG_2_RGWR(v);\ } while (0) #define RGMII_CONFIG_2_DATA_DIVIDE_CLK_SEL_UDFRD(data) do {\ RGMII_IO_MACRO_CONFIG_2_RGRD(data);\ data = ((data >> 6) & RGMII_DATA_DIVIDE_CLK_SEL_MASK);\ } while (0) #define RGMII_TX_CLK_PHASE_SHIFT_EN_MASK (ULONG)(0x1) #define RGMII_TX_CLK_PHASE_SHIFT_EN_WR_MASK (ULONG)(0xffffffdf) #define RGMII_CONFIG_2_TX_CLK_PHASE_SHIFT_EN_UDFWR(data) do {\ ULONG v;\ RGMII_IO_MACRO_CONFIG_2_RGRD(v);\ v = ((v & RGMII_TX_CLK_PHASE_SHIFT_EN_WR_MASK) | ((data & RGMII_TX_CLK_PHASE_SHIFT_EN_MASK) << 5));\ RGMII_IO_MACRO_CONFIG_2_RGWR(v);\ } while (0) #define RGMII_CONFIG_2_TX_CLK_PHASE_SHIFT_EN_UDFRD(data) do {\ RGMII_IO_MACRO_CONFIG_2_RGRD(data);\ data = ((data >> 5) & RGMII_TX_CLK_PHASE_SHIFT_EN_MASK);\ } while (0) #define RGMII_TX_TO_RX_LOOPBACK_EN_MASK (ULONG)(0x1) #define RGMII_TX_TO_RX_LOOPBACK_EN_WR_MASK (ULONG)(0xffffdfff) #define RGMII_CONFIG_2_TX_TO_RX_LOOPBACK_EN_UDFWR(data) do {\ ULONG v;\ RGMII_IO_MACRO_CONFIG_2_RGRD(v);\ v = ((v & RGMII_TX_TO_RX_LOOPBACK_EN_WR_MASK) | ((data & RGMII_TX_TO_RX_LOOPBACK_EN_MASK) << 13));\ RGMII_IO_MACRO_CONFIG_2_RGWR(v);\ } while (0) #define RGMII_CONFIG_2_TX_TO_RX_LOOPBACK_EN_UDFRD(data) do {\ RGMII_IO_MACRO_CONFIG_2_RGRD(data);\ data = ((data >> 13) & RGMII_TX_TO_RX_LOOPBACK_EN_MASK);\ } while (0) #define RGMII_RX_PROG_SWAP_MASK (ULONG)(0x1) #define RGMII_RX_PROG_SWAP_WR_MASK (ULONG)(0xffffff7f) #define RGMII_CONFIG_2_RX_PROG_SWAP_UDFWR(data) do {\ ULONG v;\ RGMII_IO_MACRO_CONFIG_2_RGRD(v);\ v = ((v & RGMII_RX_PROG_SWAP_WR_MASK) | ((data & RGMII_RX_PROG_SWAP_MASK) << 7));\ RGMII_IO_MACRO_CONFIG_2_RGWR(v);\ } while (0) #define RGMII_CONFIG_2_RX_PROG_SWAP_UDFRD(data) do {\ RGMII_IO_MACRO_CONFIG_2_RGRD(data);\ data = ((data >> 7) & RGMII_RX_PROG_SWAP_MASK);\ } while (0) #define RGMII_CLK_DIVIDE_SEL_MASK (ULONG)(0x1) #define RGMII_CLK_DIVIDE_SEL_WR_MASK (ULONG)(0xffffefff) #define RGMII_CONFIG_2_CLK_DIVIDE_SEL_UDFWR(data) do {\ ULONG v;\ RGMII_IO_MACRO_CONFIG_2_RGRD(v);\ v = ((v & RGMII_CLK_DIVIDE_SEL_WR_MASK) | ((data & RGMII_CLK_DIVIDE_SEL_MASK) << 12));\ RGMII_IO_MACRO_CONFIG_2_RGWR(v);\ } while (0) #define RGMII_CONFIG_2_CLK_DIVIDE_SEL_UDFRD(data) do {\ RGMII_IO_MACRO_CONFIG_2_RGRD(data);\ data = ((data >> 7) & RGMII_CLK_DIVIDE_SEL_MASK);\ } while (0) #define RGMII_RERVED_CONFIG_16_EN_MASK (ULONG)(0xffff) #define RGMII_RERVED_CONFIG_16_EN_WR_MASK (ULONG)(0x0000ffff) #define RGMII_CONFIG_2_RERVED_CONFIG_16_EN_UDFWR(data) do {\ ULONG v;\ RGMII_IO_MACRO_CONFIG_2_RGRD(v);\ v = ((v & RGMII_RERVED_CONFIG_16_EN_WR_MASK) | ((data & RGMII_RERVED_CONFIG_16_EN_MASK) << 16));\ RGMII_IO_MACRO_CONFIG_2_RGWR(v);\ } while (0) #define RGMII_CONFIG_2_RERVED_CONFIG_16_EN_UDFRD(data) do {\ RGMII_IO_MACRO_CONFIG_2_RGRD(data);\ data = ((data >> 16) & RGMII_RERVED_CONFIG_16_EN_MASK);\ } while (0) /* EMAC_RGMII_IO_MACRO_DEBUG_1 */ #define RGMII_IO_MACRO_DEBUG_1_RGOFFADDR ((volatile ULONG *)(RGMII_IO_BASE_ADDRESS + 0x00000020)) #define RGMII_IO_MACRO_DEBUG_1_RGRD(data) do {\ (data) = ioread32((void *)RGMII_IO_MACRO_DEBUG_1_RGOFFADDR);\ } while (0) /* EMAC_SYSTEM_LOW_POWER_DEBUG */ #define EMAC_SYSTEM_LOW_POWER_DEBUG_RGOFFADDR ((volatile ULONG *)(RGMII_IO_BASE_ADDRESS + 0x00000028)) #define EMAC_SYSTEM_LOW_POWER_DEBUG_RGRD(data) do {\ (data) = ioread32((void *)EMAC_SYSTEM_LOW_POWER_DEBUG_RGOFFADDR);\ } while (0) void dump_rgmii_io_macro_registers(void); #endif