| /* |
| * include/asm-arc/arch-arc/arasan_emac_ahb.h |
| * |
| * Copyright (c) Quantenna Communications Incorporated 2007. |
| * 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 as published by |
| * the Free Software Foundation; either version 2 of the License, or |
| * (at your option) any later version. |
| * |
| * 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. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| * |
| * |
| * This file only defines those settings that are specific to U-Boot. |
| * All the common definitions are stored in ruby_arasan_emac_ahb. |
| * |
| */ |
| |
| #ifndef __ASM_ARCH_ARASAN_EMAC_AHB_H |
| #define __ASM_ARCH_ARASAN_EMAC_AHB_H 1 |
| |
| #define NUM_TX_BUFS 1 |
| #define TX_BUF_SIZE 2048 |
| #define NUM_RX_BUFS 2 |
| #define RX_BUF_SIZE 2048 |
| |
| #define TX_TIMEOUT_IN_TICKS (CONFIG_SYS_HZ) |
| |
| /* All the common defines for the Ethernet controller */ |
| #include <config.h> |
| #include "../../../quantenna/common/ruby_arasan_emac_ahb.h" |
| |
| #ifndef __ASSEMBLY__ |
| |
| /* Taken from Linux MII driver */ |
| #define LPA_100FULL 0x0100 /* Can do 100mbps full-duplex */ |
| #define LPA_100BASE4 0x0200 /* Can do 100mbps 4k packets */ |
| #define LPA_100HALF 0x0080 /* Can do 100mbps half-duplex */ |
| #define LPA_10FULL 0x0040 /* Can do 10mbps full-duplex */ |
| #define LPA_10HALF 0x0020 /* Can do 10mbps half-duplex */ |
| #define LPA_1000FULL 0x0800 /* Link partner 1000BASE-T full duplex */ |
| #define LPA_1000HALF 0x0400 /* Link partner 1000BASE-T half duplex */ |
| |
| #define ADVERTISE_10FULL 0x0040 /* Try for 10mbps full-duplex */ |
| #define ADVERTISE_100FULL 0x0100 /* Try for 100mbps full-duplex */ |
| #define ADVERTISE_100HALF 0x0080 /* Try for 100mbps half-duplex */ |
| #define ADVERTISE_1000HALF 0x0100 /* Advertise 1000BASE-T half duplex */ |
| #define ADVERTISE_CSMA 0x0001 /* Only selector supported */ |
| |
| #define ADVERTISE_FULL (ADVERTISE_100FULL | ADVERTISE_10FULL | ADVERTISE_CSMA) |
| |
| #define PHY_MAX_ADDR 32 |
| |
| #define ARASAN_MDIO_BASE RUBY_ENET0_BASE_ADDR |
| |
| enum DP83865PhyRegVals { |
| /* Basic mode control register */ |
| PhySoftReset = (1 << 15), |
| PhyLoopback = (1 << 14), |
| PhySetSpeed1G = ((1 << 6) | (0 << 13)), |
| PhySetSpeed100M = ((0 << 6) | (1 << 13)), |
| PhySetSpeed10M = ((0 << 6) | (0 << 13)), |
| PhyAutoNegEnable = (1 << 12), |
| PhyPowerDown = (1 << 11), |
| PhyIsolate = (1 << 10), |
| PhyRestartAutoNeg = (1 << 9), |
| PhyFullDuplex = (1 << 8), |
| PhyColTest = (1 << 7), |
| /* Basic mode status register */ |
| PhyAutoNegComplete = (1 << 5), |
| /* Link and AutoNegotiation register */ |
| PhySpeedMask = (3 << 3), |
| PhySpeed10M = (0 << 3), |
| PhySpeed100M = (1 << 3), |
| PhySpeed1G = (2 << 3), |
| PhyLinkIsUp = (1 << 2), |
| PhyLinkIsFullDuplex = (1 << 1), |
| PhyInMasterMode = (1 << 0), |
| }; |
| |
| enum DP83865RegOffset { |
| PhyBMCR = 0, |
| PhyBMSR = 1, |
| PhyPhysID1 = 2, |
| PhyPhysID2 = 3, |
| PhyAdvertise = 4, |
| PhyLpa = 5, |
| PhyStat1000 = 10, |
| }; |
| |
| struct emac_private; |
| |
| struct emac_private_mdio { |
| unsigned long base; |
| uint32_t (*read)(struct emac_private *priv, uint8_t reg); |
| int (*write)(struct emac_private *priv, uint8_t reg, uint16_t value); |
| }; |
| |
| |
| /* |
| * Shortened version of the equivalent Linux structure - U-Boot does not |
| * need most of the members that Linux does. |
| */ |
| struct emac_private { |
| int tx_ring_elements; /* = number of buffers = number of descriptors */ |
| int rx_ring_elements; /* = number of buffers = number of descriptors */ |
| |
| u32 rx_bufs; |
| u32 tx_bufs; |
| volatile struct emac_desc *rx_descs; |
| volatile struct emac_desc *tx_descs; |
| u32 rx_buf_size; |
| u32 tx_buf_size; |
| int rx_index; |
| int tx_index; |
| |
| // pointer to switch device |
| void *ar8236dev; |
| |
| // board specific cfg |
| int irq; |
| int phy_addr; |
| int phy_flags; |
| int emac; |
| unsigned long io_base; |
| struct emac_private_mdio *mdio; |
| struct eth_device * parent; |
| }; |
| |
| struct br_private { |
| struct emac_private * emacs[2]; |
| uint8_t nemacs; |
| uint8_t dev_state; |
| uint8_t send_mask; |
| uint32_t phy_addr_mask; |
| }; |
| |
| void mdio_postrd_raw(unsigned long base, int phy, int reg); |
| int mdio_postwr_raw(unsigned long base, int phy, int reg, u16 val); |
| u32 mdio_rdval_raw(unsigned long base, int wait); |
| |
| #define MDIO_READ_FAIL ((uint32_t) -1) |
| |
| static inline int mdio_read_failed(uint32_t val) |
| { |
| return val == MDIO_READ_FAIL; |
| } |
| |
| #endif /* __ASSEMBLY__ */ |
| |
| #endif |