Skip to content

Commit 1f71d69

Browse files
committed
Add x_emac_map to xilinx_ultrascale port
This map makes sure the correct interrupt id is registered in the interrupt controller. E.g. 'XPAR_XEMACPS_0_BASEADDR' is Canonical for the first interface and can be mapped to any of the GEMs. 'XPAR_XEMACPS_0_INTR' on the other hand is fixed to GEM0. This is why this mapping is needed.
1 parent 0dbda17 commit 1f71d69

File tree

3 files changed

+86
-4
lines changed

3 files changed

+86
-4
lines changed

source/portable/NetworkInterface/xilinx_ultrascale/NetworkInterface.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
#include "x_topology.h"
5151
#include "x_emacpsif.h"
5252
#include "x_emacpsif_hw.h"
53+
#include "x_emac_map.h"
5354

5455
/* Provided memory configured as uncached. */
5556
#include "uncached_memory.h"
@@ -160,7 +161,7 @@ struct xtopology_t xXTopologies[ XPAR_XEMACPS_NUM_INSTANCES ] =
160161
.intc_baseaddr = 0x0,
161162
.intc_emac_intr = 0x0,
162163
.scugic_baseaddr = XPAR_SCUGIC_0_CPU_BASEADDR,
163-
.scugic_emac_intr = XPAR_XEMACPS_0_INTR,
164+
.scugic_emac_intr = ZYNQMP_EMACPS_0_IRQ_ID,
164165
},
165166
#if ( XPAR_XEMACPS_NUM_INSTANCES > 1 )
166167
[ 1 ] =
@@ -170,7 +171,7 @@ struct xtopology_t xXTopologies[ XPAR_XEMACPS_NUM_INSTANCES ] =
170171
.intc_baseaddr = 0x0,
171172
.intc_emac_intr = 0x0,
172173
.scugic_baseaddr = XPAR_SCUGIC_0_CPU_BASEADDR,
173-
.scugic_emac_intr = XPAR_XEMACPS_1_INTR,
174+
.scugic_emac_intr = ZYNQMP_EMACPS_1_IRQ_ID,
174175
},
175176
#elif ( XPAR_XEMACPS_NUM_INSTANCES > 2 )
176177
[ 2 ] =
@@ -180,7 +181,7 @@ struct xtopology_t xXTopologies[ XPAR_XEMACPS_NUM_INSTANCES ] =
180181
.intc_baseaddr = 0x0,
181182
.intc_emac_intr = 0x0,
182183
.scugic_baseaddr = XPAR_SCUGIC_0_CPU_BASEADDR,
183-
.scugic_emac_intr = XPAR_XEMACPS_2_INTR,
184+
.scugic_emac_intr = ZYNQMP_EMACPS_2_IRQ_ID,
184185
},
185186
#elif ( XPAR_XEMACPS_NUM_INSTANCES > 3 )
186187
[ 3 ] =
@@ -190,7 +191,7 @@ struct xtopology_t xXTopologies[ XPAR_XEMACPS_NUM_INSTANCES ] =
190191
.intc_baseaddr = 0x0,
191192
.intc_emac_intr = 0x0,
192193
.scugic_baseaddr = XPAR_SCUGIC_0_CPU_BASEADDR,
193-
.scugic_emac_intr = XPAR_XEMACPS_3_INTR,
194+
.scugic_emac_intr = ZYNQMP_EMACPS_3_IRQ_ID,
194195
},
195196
#endif /* if ( XPAR_XEMACPS_NUM_INSTANCES > 1 ) */
196197
};
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
/*
2+
* Copyright (c) 2007-2013 Xilinx, Inc. All rights reserved.
3+
*
4+
* Xilinx, Inc.
5+
* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A
6+
* COURTESY TO YOU. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS
7+
* ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION OR
8+
* STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION
9+
* IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE
10+
* FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.
11+
* XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO
12+
* THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO
13+
* ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE
14+
* FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY
15+
* AND FITNESS FOR A PARTICULAR PURPOSE.
16+
*
17+
*/
18+
19+
#ifndef __XEMACMAP_H_
20+
#define __XEMACMAP_H_
21+
22+
#include "xparameters_ps.h"
23+
#include "xparameters.h"
24+
25+
26+
#define ZYNQMP_EMACPS_0_BASEADDR 0xFF0B0000
27+
#define ZYNQMP_EMACPS_1_BASEADDR 0xFF0C0000
28+
#define ZYNQMP_EMACPS_2_BASEADDR 0xFF0D0000
29+
#define ZYNQMP_EMACPS_3_BASEADDR 0xFF0E0000
30+
31+
#if XPAR_XEMACPS_0_BASEADDR == ZYNQMP_EMACPS_0_BASEADDR
32+
#define ZYNQMP_EMACPS_0_IRQ_ID XPAR_XEMACPS_0_INTR
33+
#endif
34+
#if XPAR_XEMACPS_0_BASEADDR == ZYNQMP_EMACPS_1_BASEADDR
35+
#define ZYNQMP_EMACPS_0_IRQ_ID XPAR_XEMACPS_1_INTR
36+
#endif
37+
#if XPAR_XEMACPS_0_BASEADDR == ZYNQMP_EMACPS_2_BASEADDR
38+
#define ZYNQMP_EMACPS_0_IRQ_ID XPAR_XEMACPS_2_INTR
39+
#endif
40+
#if XPAR_XEMACPS_0_BASEADDR == ZYNQMP_EMACPS_3_BASEADDR
41+
#define ZYNQMP_EMACPS_0_IRQ_ID XPAR_XEMACPS_3_INTR
42+
#endif
43+
#if XPAR_XEMACPS_1_BASEADDR == ZYNQMP_EMACPS_0_BASEADDR
44+
#define ZYNQMP_EMACPS_1_IRQ_ID XPAR_XEMACPS_0_INTR
45+
#endif
46+
#if XPAR_XEMACPS_1_BASEADDR == ZYNQMP_EMACPS_1_BASEADDR
47+
#define ZYNQMP_EMACPS_1_IRQ_ID XPAR_XEMACPS_1_INTR
48+
#endif
49+
#if XPAR_XEMACPS_1_BASEADDR == ZYNQMP_EMACPS_2_BASEADDR
50+
#define ZYNQMP_EMACPS_1_IRQ_ID XPAR_XEMACPS_2_INTR
51+
#endif
52+
#if XPAR_XEMACPS_1_BASEADDR == ZYNQMP_EMACPS_3_BASEADDR
53+
#define ZYNQMP_EMACPS_1_IRQ_ID XPAR_XEMACPS_3_INTR
54+
#endif
55+
#if XPAR_XEMACPS_2_BASEADDR == ZYNQMP_EMACPS_0_BASEADDR
56+
#define ZYNQMP_EMACPS_2_IRQ_ID XPAR_XEMACPS_0_INTR
57+
#endif
58+
#if XPAR_XEMACPS_2_BASEADDR == ZYNQMP_EMACPS_1_BASEADDR
59+
#define ZYNQMP_EMACPS_2_IRQ_ID XPAR_XEMACPS_1_INTR
60+
#endif
61+
#if XPAR_XEMACPS_2_BASEADDR == ZYNQMP_EMACPS_2_BASEADDR
62+
#define ZYNQMP_EMACPS_2_IRQ_ID XPAR_XEMACPS_2_INTR
63+
#endif
64+
#if XPAR_XEMACPS_2_BASEADDR == ZYNQMP_EMACPS_3_BASEADDR
65+
#define ZYNQMP_EMACPS_2_IRQ_ID XPAR_XEMACPS_3_INTR
66+
#endif
67+
#if XPAR_XEMACPS_3_BASEADDR == ZYNQMP_EMACPS_0_BASEADDR
68+
#define ZYNQMP_EMACPS_3_IRQ_ID XPAR_XEMACPS_0_INTR
69+
#endif
70+
#if XPAR_XEMACPS_3_BASEADDR == ZYNQMP_EMACPS_1_BASEADDR
71+
#define ZYNQMP_EMACPS_3_IRQ_ID XPAR_XEMACPS_1_INTR
72+
#endif
73+
#if XPAR_XEMACPS_3_BASEADDR == ZYNQMP_EMACPS_2_BASEADDR
74+
#define ZYNQMP_EMACPS_3_IRQ_ID XPAR_XEMACPS_2_INTR
75+
#endif
76+
#if XPAR_XEMACPS_3_BASEADDR == ZYNQMP_EMACPS_3_BASEADDR
77+
#define ZYNQMP_EMACPS_3_IRQ_ID XPAR_XEMACPS_3_INTR
78+
#endif
79+
80+
#endif /* __XEMACMAP_H_ */

source/portable/NetworkInterface/xilinx_ultrascale/x_emacpsif_physpeed.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
#include <stdlib.h>
5555

5656
#include "x_emacpsif.h"
57+
#include "x_emac_map.h"
5758
#include "xparameters_ps.h"
5859
#include "xparameters.h"
5960

0 commit comments

Comments
 (0)