Skip to content

Commit 00c06ed

Browse files
committed
Merge branch 'fman-next' of git://git.freescale.com/ppc/upstream/linux
Madalin Bucur says: ==================== fsl/fman: cleanup and small fixes This series contains fixes for the DPAA FMan driver. Adding myself as maintainer of the driver. ==================== Signed-off-by: David S. Miller <[email protected]>
2 parents 4c1fad6 + 2fbfadb commit 00c06ed

File tree

11 files changed

+139
-116
lines changed

11 files changed

+139
-116
lines changed

MAINTAINERS

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5005,6 +5005,13 @@ F: drivers/net/ethernet/freescale/fec_ptp.c
50055005
F: drivers/net/ethernet/freescale/fec.h
50065006
F: Documentation/devicetree/bindings/net/fsl-fec.txt
50075007

5008+
FREESCALE QORIQ DPAA FMAN DRIVER
5009+
M: Madalin Bucur <[email protected]>
5010+
5011+
S: Maintained
5012+
F: drivers/net/ethernet/freescale/fman
5013+
F: Documentation/devicetree/bindings/powerpc/fsl/fman.txt
5014+
50085015
FREESCALE QUICC ENGINE LIBRARY
50095016
50105017
S: Orphan
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
subdir-ccflags-y += -I$(srctree)/drivers/net/ethernet/freescale/fman
22

3-
obj-y += fsl_fman.o fsl_fman_mac.o fsl_mac.o
3+
obj-$(CONFIG_FSL_FMAN) += fsl_fman.o
4+
obj-$(CONFIG_FSL_FMAN) += fsl_fman_port.o
5+
obj-$(CONFIG_FSL_FMAN) += fsl_mac.o
46

5-
fsl_fman-objs := fman_muram.o fman.o fman_sp.o fman_port.o
6-
fsl_fman_mac-objs := fman_dtsec.o fman_memac.o fman_tgec.o
7-
fsl_mac-objs += mac.o
7+
fsl_fman-objs := fman_muram.o fman.o fman_sp.o
8+
fsl_fman_port-objs := fman_port.o
9+
fsl_mac-objs:= mac.o fman_dtsec.o fman_memac.o fman_tgec.o

drivers/net/ethernet/freescale/fman/fman.c

Lines changed: 51 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -618,7 +618,7 @@ struct fman {
618618
unsigned long cam_offset;
619619
size_t cam_size;
620620
/* Fifo in MURAM */
621-
int fifo_offset;
621+
unsigned long fifo_offset;
622622
size_t fifo_size;
623623

624624
u32 liodn_base[64];
@@ -2036,7 +2036,7 @@ static int fman_init(struct fman *fman)
20362036
/* allocate MURAM for FIFO according to total size */
20372037
fman->fifo_offset = fman_muram_alloc(fman->muram,
20382038
fman->state->total_fifo_size);
2039-
if (IS_ERR_VALUE(fman->cam_offset)) {
2039+
if (IS_ERR_VALUE(fman->fifo_offset)) {
20402040
free_init_resources(fman);
20412041
dev_err(fman->dev, "%s: MURAM alloc for BMI FIFO failed\n",
20422042
__func__);
@@ -2115,6 +2115,7 @@ void fman_register_intr(struct fman *fman, enum fman_event_modules module,
21152115
fman->intr_mng[event].isr_cb = isr_cb;
21162116
fman->intr_mng[event].src_handle = src_arg;
21172117
}
2118+
EXPORT_SYMBOL(fman_register_intr);
21182119

21192120
/**
21202121
* fman_unregister_intr
@@ -2138,6 +2139,7 @@ void fman_unregister_intr(struct fman *fman, enum fman_event_modules module,
21382139
fman->intr_mng[event].isr_cb = NULL;
21392140
fman->intr_mng[event].src_handle = NULL;
21402141
}
2142+
EXPORT_SYMBOL(fman_unregister_intr);
21412143

21422144
/**
21432145
* fman_set_port_params
@@ -2241,6 +2243,7 @@ int fman_set_port_params(struct fman *fman,
22412243
spin_unlock_irqrestore(&fman->spinlock, flags);
22422244
return err;
22432245
}
2246+
EXPORT_SYMBOL(fman_set_port_params);
22442247

22452248
/**
22462249
* fman_reset_mac
@@ -2310,6 +2313,7 @@ int fman_reset_mac(struct fman *fman, u8 mac_id)
23102313

23112314
return 0;
23122315
}
2316+
EXPORT_SYMBOL(fman_reset_mac);
23132317

23142318
/**
23152319
* fman_set_mac_max_frame
@@ -2327,8 +2331,7 @@ int fman_set_mac_max_frame(struct fman *fman, u8 mac_id, u16 mfl)
23272331
* or equal to the port's max
23282332
*/
23292333
if ((!fman->state->port_mfl[mac_id]) ||
2330-
(fman->state->port_mfl[mac_id] &&
2331-
(mfl <= fman->state->port_mfl[mac_id]))) {
2334+
(mfl <= fman->state->port_mfl[mac_id])) {
23322335
fman->state->mac_mfl[mac_id] = mfl;
23332336
} else {
23342337
dev_warn(fman->dev, "%s: MAC max_frame_length is larger than Port max_frame_length\n",
@@ -2337,6 +2340,7 @@ int fman_set_mac_max_frame(struct fman *fman, u8 mac_id, u16 mfl)
23372340
}
23382341
return 0;
23392342
}
2343+
EXPORT_SYMBOL(fman_set_mac_max_frame);
23402344

23412345
/**
23422346
* fman_get_clock_freq
@@ -2363,6 +2367,7 @@ u32 fman_get_bmi_max_fifo_size(struct fman *fman)
23632367
{
23642368
return fman->state->bmi_max_fifo_size;
23652369
}
2370+
EXPORT_SYMBOL(fman_get_bmi_max_fifo_size);
23662371

23672372
/**
23682373
* fman_get_revision
@@ -2384,6 +2389,7 @@ void fman_get_revision(struct fman *fman, struct fman_rev_info *rev_info)
23842389
FPM_REV1_MAJOR_SHIFT);
23852390
rev_info->minor = tmp & FPM_REV1_MINOR_MASK;
23862391
}
2392+
EXPORT_SYMBOL(fman_get_revision);
23872393

23882394
/**
23892395
* fman_get_qman_channel_id
@@ -2419,6 +2425,7 @@ u32 fman_get_qman_channel_id(struct fman *fman, u32 port_id)
24192425

24202426
return fman->state->qman_channel_base + i;
24212427
}
2428+
EXPORT_SYMBOL(fman_get_qman_channel_id);
24222429

24232430
/**
24242431
* fman_get_mem_region
@@ -2432,6 +2439,7 @@ struct resource *fman_get_mem_region(struct fman *fman)
24322439
{
24332440
return fman->state->res;
24342441
}
2442+
EXPORT_SYMBOL(fman_get_mem_region);
24352443

24362444
/* Bootargs defines */
24372445
/* Extra headroom for RX buffers - Default, min and max */
@@ -2453,7 +2461,7 @@ struct resource *fman_get_mem_region(struct fman *fman)
24532461
* particular forwarding scenarios that add extra headers to the
24542462
* forwarded frame.
24552463
*/
2456-
int fsl_fm_rx_extra_headroom = FSL_FM_RX_EXTRA_HEADROOM;
2464+
static int fsl_fm_rx_extra_headroom = FSL_FM_RX_EXTRA_HEADROOM;
24572465
module_param(fsl_fm_rx_extra_headroom, int, 0);
24582466
MODULE_PARM_DESC(fsl_fm_rx_extra_headroom, "Extra headroom for Rx buffers");
24592467

@@ -2466,7 +2474,7 @@ MODULE_PARM_DESC(fsl_fm_rx_extra_headroom, "Extra headroom for Rx buffers");
24662474
* Could be overridden once, at boot-time, via the
24672475
* fm_set_max_frm() callback.
24682476
*/
2469-
int fsl_fm_max_frm = FSL_FM_MAX_FRAME_SIZE;
2477+
static int fsl_fm_max_frm = FSL_FM_MAX_FRAME_SIZE;
24702478
module_param(fsl_fm_max_frm, int, 0);
24712479
MODULE_PARM_DESC(fsl_fm_max_frm, "Maximum frame size, across all interfaces");
24722480

@@ -2538,6 +2546,7 @@ struct fman *fman_bind(struct device *fm_dev)
25382546
{
25392547
return (struct fman *)(dev_get_drvdata(get_device(fm_dev)));
25402548
}
2549+
EXPORT_SYMBOL(fman_bind);
25412550

25422551
static irqreturn_t fman_err_irq(int irq, void *handle)
25432552
{
@@ -2727,8 +2736,8 @@ static struct fman *read_dts_node(struct platform_device *of_dev)
27272736
struct fman *fman;
27282737
struct device_node *fm_node, *muram_node;
27292738
struct resource *res;
2730-
const u32 *u32_prop;
2731-
int lenp, err, irq;
2739+
u32 val, range[2];
2740+
int err, irq;
27322741
struct clk *clk;
27332742
u32 clk_rate;
27342743
phys_addr_t phys_base_addr;
@@ -2740,16 +2749,13 @@ static struct fman *read_dts_node(struct platform_device *of_dev)
27402749

27412750
fm_node = of_node_get(of_dev->dev.of_node);
27422751

2743-
u32_prop = (const u32 *)of_get_property(fm_node, "cell-index", &lenp);
2744-
if (!u32_prop) {
2745-
dev_err(&of_dev->dev, "%s: of_get_property(%s, cell-index) failed\n",
2752+
err = of_property_read_u32(fm_node, "cell-index", &val);
2753+
if (err) {
2754+
dev_err(&of_dev->dev, "%s: failed to read cell-index for %s\n",
27462755
__func__, fm_node->full_name);
27472756
goto fman_node_put;
27482757
}
2749-
if (WARN_ON(lenp != sizeof(u32)))
2750-
goto fman_node_put;
2751-
2752-
fman->dts_params.id = (u8)fdt32_to_cpu(u32_prop[0]);
2758+
fman->dts_params.id = (u8)val;
27532759

27542760
/* Get the FM interrupt */
27552761
res = platform_get_resource(of_dev, IORESOURCE_IRQ, 0);
@@ -2796,18 +2802,15 @@ static struct fman *read_dts_node(struct platform_device *of_dev)
27962802
/* Rounding to MHz */
27972803
fman->dts_params.clk_freq = DIV_ROUND_UP(clk_rate, 1000000);
27982804

2799-
u32_prop = (const u32 *)of_get_property(fm_node,
2800-
"fsl,qman-channel-range",
2801-
&lenp);
2802-
if (!u32_prop) {
2803-
dev_err(&of_dev->dev, "%s: of_get_property(%s, fsl,qman-channel-range) failed\n",
2805+
err = of_property_read_u32_array(fm_node, "fsl,qman-channel-range",
2806+
&range[0], 2);
2807+
if (err) {
2808+
dev_err(&of_dev->dev, "%s: failed to read fsl,qman-channel-range for %s\n",
28042809
__func__, fm_node->full_name);
28052810
goto fman_node_put;
28062811
}
2807-
if (WARN_ON(lenp != sizeof(u32) * 2))
2808-
goto fman_node_put;
2809-
fman->dts_params.qman_channel_base = fdt32_to_cpu(u32_prop[0]);
2810-
fman->dts_params.num_of_qman_channels = fdt32_to_cpu(u32_prop[1]);
2812+
fman->dts_params.qman_channel_base = range[0];
2813+
fman->dts_params.num_of_qman_channels = range[1];
28112814

28122815
/* Get the MURAM base address and size */
28132816
muram_node = of_find_matching_node(fm_node, fman_muram_match);
@@ -2858,7 +2861,7 @@ static struct fman *read_dts_node(struct platform_device *of_dev)
28582861

28592862
fman->dts_params.base_addr =
28602863
devm_ioremap(&of_dev->dev, phys_base_addr, mem_size);
2861-
if (fman->dts_params.base_addr == 0) {
2864+
if (!fman->dts_params.base_addr) {
28622865
dev_err(&of_dev->dev, "%s: devm_ioremap() failed\n", __func__);
28632866
goto fman_free;
28642867
}
@@ -2930,7 +2933,7 @@ static const struct of_device_id fman_match[] = {
29302933
{}
29312934
};
29322935

2933-
MODULE_DEVICE_TABLE(of, fm_match);
2936+
MODULE_DEVICE_TABLE(of, fman_match);
29342937

29352938
static struct platform_driver fman_driver = {
29362939
.driver = {
@@ -2940,4 +2943,25 @@ static struct platform_driver fman_driver = {
29402943
.probe = fman_probe,
29412944
};
29422945

2943-
builtin_platform_driver(fman_driver);
2946+
static int __init fman_load(void)
2947+
{
2948+
int err;
2949+
2950+
pr_debug("FSL DPAA FMan driver\n");
2951+
2952+
err = platform_driver_register(&fman_driver);
2953+
if (err < 0)
2954+
pr_err("Error, platform_driver_register() = %d\n", err);
2955+
2956+
return err;
2957+
}
2958+
module_init(fman_load);
2959+
2960+
static void __exit fman_unload(void)
2961+
{
2962+
platform_driver_unregister(&fman_driver);
2963+
}
2964+
module_exit(fman_unload);
2965+
2966+
MODULE_LICENSE("Dual BSD/GPL");
2967+
MODULE_DESCRIPTION("Freescale DPAA Frame Manager driver");

drivers/net/ethernet/freescale/fman/fman_mac.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,10 +191,6 @@ struct fman_mac_params {
191191
u16 max_speed;
192192
/* A handle to the FM object this port related to */
193193
void *fm;
194-
/* MDIO exceptions interrupt source - not valid for all
195-
* MACs; MUST be set to 0 for MACs that don't have
196-
* mdio-irq, or for polling
197-
*/
198194
void *dev_id; /* device cookie used by the exception cbs */
199195
fman_mac_exception_cb *event_cb; /* MDIO Events Callback Routine */
200196
fman_mac_exception_cb *exception_cb;/* Exception Callback Routine */

drivers/net/ethernet/freescale/fman/fman_memac.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,9 @@ static void setup_sgmii_internal_phy(struct fman_mac *memac,
507507
{
508508
u16 tmp_reg16;
509509

510+
if (WARN_ON(!memac->pcsphy))
511+
return;
512+
510513
/* SGMII mode */
511514
tmp_reg16 = IF_MODE_SGMII_EN;
512515
if (!fixed_link)
@@ -1151,7 +1154,8 @@ struct fman_mac *memac_config(struct fman_mac_params *params)
11511154
/* Save FMan revision */
11521155
fman_get_revision(memac->fm, &memac->fm_rev_info);
11531156

1154-
if (memac->phy_if == PHY_INTERFACE_MODE_SGMII) {
1157+
if (memac->phy_if == PHY_INTERFACE_MODE_SGMII ||
1158+
memac->phy_if == PHY_INTERFACE_MODE_QSGMII) {
11551159
if (!params->internal_phy_node) {
11561160
pr_err("PCS PHY node is not available\n");
11571161
memac_free(memac);

drivers/net/ethernet/freescale/fman/fman_muram.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,8 @@ unsigned long fman_muram_alloc(struct muram_info *muram, size_t size)
150150
*
151151
* Free an allocated memory from FM-MURAM partition.
152152
*/
153-
void fman_muram_free_mem(struct muram_info *muram, unsigned long offset, size_t size)
153+
void fman_muram_free_mem(struct muram_info *muram, unsigned long offset,
154+
size_t size)
154155
{
155156
unsigned long addr = fman_muram_offset_to_vbase(muram, offset);
156157

drivers/net/ethernet/freescale/fman/fman_muram.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ unsigned long fman_muram_offset_to_vbase(struct muram_info *muram,
4646

4747
unsigned long fman_muram_alloc(struct muram_info *muram, size_t size);
4848

49-
void fman_muram_free_mem(struct muram_info *muram, unsigned long offset, size_t size);
49+
void fman_muram_free_mem(struct muram_info *muram, unsigned long offset,
50+
size_t size);
5051

5152
#endif /* __FM_MURAM_EXT */

0 commit comments

Comments
 (0)