[linux-yocto] [PATCH 033/161] arm/include: A clean up of the femac code.
Cristian Bercaru
cristian.bercaru at windriver.com
Thu May 21 12:20:15 PDT 2015
From: John Jacques <john.jacques at lsi.com>
Adds config option conditions, extern definitions,
and some whitespace cleanup.
Signed-off-by: John Jacques <john.jacques at lsi.com>
---
arch/arm/include/asm/lsi/acp_ncr.h | 3 ++
drivers/net/ethernet/lsi/lsi_acp_mdio.c | 9 ++--
drivers/net/ethernet/lsi/lsi_acp_net.h | 76 +++++++++++++++++++++++++++++--
3 files changed, 79 insertions(+), 9 deletions(-)
diff --git a/arch/arm/include/asm/lsi/acp_ncr.h b/arch/arm/include/asm/lsi/acp_ncr.h
index a7399e7..1a08f07 100644
--- a/arch/arm/include/asm/lsi/acp_ncr.h
+++ b/arch/arm/include/asm/lsi/acp_ncr.h
@@ -39,4 +39,7 @@ int ncr_write(unsigned long, unsigned long, int, void *);
int is_asic(void);
+extern int acp_mdio_read(unsigned long, unsigned long, unsigned short *);
+extern int acp_mdio_write(unsigned long, unsigned long, unsigned short);
+
#endif /* __DRIVERS_LSI_ACP_NCR_H */
diff --git a/drivers/net/ethernet/lsi/lsi_acp_mdio.c b/drivers/net/ethernet/lsi/lsi_acp_mdio.c
index ddee507..ef78adcd 100644
--- a/drivers/net/ethernet/lsi/lsi_acp_mdio.c
+++ b/drivers/net/ethernet/lsi/lsi_acp_mdio.c
@@ -18,8 +18,6 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#if defined(CONFIG_ARCH_AXXIA) && defined(CONFIG_ARM)
-
#include <linux/module.h>
#include <linux/of.h>
#include <asm/irq.h>
@@ -162,8 +160,13 @@ EXPORT_SYMBOL(acp_mdio_write);
static int
acp_mdio_initialize(void)
{
+#ifdef CONFIG_ARM
WRITE(MDIO_CLK_OFFSET, 0x1c);
WRITE(MDIO_CLK_PERIOD, 0xf0);
+#else
+ WRITE(MDIO_CLK_OFFSET, 0x10);
+ WRITE(MDIO_CLK_PERIOD, 0x2c);
+#endif
return 0;
}
@@ -218,5 +221,3 @@ module_init(acp_wrappers_init);
MODULE_AUTHOR("LSI Corporation");
MODULE_DESCRIPTION("Timing Test");
MODULE_LICENSE("GPL");
-
-#endif
diff --git a/drivers/net/ethernet/lsi/lsi_acp_net.h b/drivers/net/ethernet/lsi/lsi_acp_net.h
index f7de38d..9289073 100644
--- a/drivers/net/ethernet/lsi/lsi_acp_net.h
+++ b/drivers/net/ethernet/lsi/lsi_acp_net.h
@@ -40,6 +40,29 @@ extern int ubootenv_get(const char *, char *);
struct appnic_dma_descriptor {
+#ifdef CONFIG_ARM
+ /* Word 0 */
+ /* 00=Fill|01=Block|10=Scatter */
+ unsigned long transfer_type:2;
+ unsigned long write:1;
+ unsigned long start_of_packet:1;
+ unsigned long end_of_packet:1;
+ unsigned long interrupt_on_completion:1;
+ unsigned long error:1;
+ /* big endian to little endian */
+ unsigned long byte_swapping_on:1;
+ unsigned long unused:24;
+
+ /* Word 1 */
+ unsigned long data_transfer_length:16;
+ unsigned long pdu_length:16;
+
+ /* Word 2 */
+ unsigned long target_memory_address;
+
+ /* Word 3 */
+ unsigned long host_data_memory_pointer;
+#else
/* Word 0 */
unsigned long unused:24;
/* big endian to little endian */
@@ -61,20 +84,27 @@ struct appnic_dma_descriptor {
/* Word 3 */
unsigned long host_data_memory_pointer;
+#endif
-} __packed;
+} __attribute__ ((packed));
union appnic_queue_pointer {
unsigned long raw;
struct {
+#ifdef CONFIG_ARM
+ unsigned long offset:20;
+ unsigned long generation_bit:1;
+ unsigned long unused:11;
+#else
unsigned long unused:11;
unsigned long generation_bit:1;
unsigned long offset:20;
- } __packed bits;
+#endif
+ } __attribute__ ((packed)) bits;
-} __packed;
+} __attribute__ ((packed));
/*
=============================================================================
@@ -91,10 +121,15 @@ struct appnic_device {
unsigned long rx_base;
unsigned long tx_base;
unsigned long dma_base;
- unsigned long interrupt;
+ unsigned long tx_interrupt;
+ unsigned long rx_interrupt;
+ unsigned long dma_interrupt;
unsigned long mdio_clock;
unsigned long phy_address;
unsigned long ad_value;
+ unsigned long phy_link_auto;
+ unsigned long phy_link_speed;
+ unsigned long phy_link_duplex;
unsigned char mac_addr[6];
/* NAPI */
@@ -436,6 +471,36 @@ struct appnic_device {
#define APPNIC_DMA_TX_TAIL_POINTER_LOCAL_COPY_GB 0x100000
#define APPNIC_DMA_TX_TAIL_POINTER_LOCAL_COPY_POINTER 0x0fffff
+#ifdef CONFIG_ARM
+
+#define read_mac(address) readl((address))
+#define write_mac(value, address) writel((value), (address))
+
+static inline void
+readdescriptor(unsigned long address, struct appnic_dma_descriptor *descriptor)
+{
+ memcpy(descriptor, (void *)address,
+ sizeof(struct appnic_dma_descriptor));
+ return;
+}
+
+static inline void
+writedescriptor(unsigned long address,
+ const struct appnic_dma_descriptor *descriptor)
+{
+ memcpy((void *)address, descriptor,
+ sizeof(struct appnic_dma_descriptor));
+ return;
+}
+
+static inline union appnic_queue_pointer
+swab_queue_pointer(const union appnic_queue_pointer *old_queue)
+{
+ return *old_queue;
+}
+
+#else
+
#define read_mac(address) in_le32((u32 *) (address))
#define write_mac(value, address) out_le32((u32 *) (address), (value))
@@ -454,7 +519,7 @@ readdescriptor(unsigned long address, struct appnic_dma_descriptor *descriptor)
static inline void
writedescriptor(unsigned long address,
- const struct appnic_dma_descriptor *descriptor)
+ const struct appnic_dma_descriptor *descriptor)
{
unsigned long *to = (unsigned long *) address;
unsigned long *from = (unsigned long *) descriptor;
@@ -473,6 +538,7 @@ swab_queue_pointer(const union appnic_queue_pointer *old_queue)
new_queue.raw = swab32(old_queue->raw);
return new_queue;
}
+#endif /* ifdef CONFIG_ARM */
#define SWAB_QUEUE_POINTER(pointer) \
swab_queue_pointer((const union appnic_queue_pointer *) (pointer))
--
1.7.9.5
More information about the linux-yocto
mailing list