|
@@ -618,7 +618,7 @@ struct fman {
|
|
|
unsigned long cam_offset;
|
|
|
size_t cam_size;
|
|
|
/* Fifo in MURAM */
|
|
|
- int fifo_offset;
|
|
|
+ unsigned long fifo_offset;
|
|
|
size_t fifo_size;
|
|
|
|
|
|
u32 liodn_base[64];
|
|
@@ -2036,7 +2036,7 @@ static int fman_init(struct fman *fman)
|
|
|
/* allocate MURAM for FIFO according to total size */
|
|
|
fman->fifo_offset = fman_muram_alloc(fman->muram,
|
|
|
fman->state->total_fifo_size);
|
|
|
- if (IS_ERR_VALUE(fman->cam_offset)) {
|
|
|
+ if (IS_ERR_VALUE(fman->fifo_offset)) {
|
|
|
free_init_resources(fman);
|
|
|
dev_err(fman->dev, "%s: MURAM alloc for BMI FIFO failed\n",
|
|
|
__func__);
|
|
@@ -2115,6 +2115,7 @@ void fman_register_intr(struct fman *fman, enum fman_event_modules module,
|
|
|
fman->intr_mng[event].isr_cb = isr_cb;
|
|
|
fman->intr_mng[event].src_handle = src_arg;
|
|
|
}
|
|
|
+EXPORT_SYMBOL(fman_register_intr);
|
|
|
|
|
|
/**
|
|
|
* fman_unregister_intr
|
|
@@ -2138,6 +2139,7 @@ void fman_unregister_intr(struct fman *fman, enum fman_event_modules module,
|
|
|
fman->intr_mng[event].isr_cb = NULL;
|
|
|
fman->intr_mng[event].src_handle = NULL;
|
|
|
}
|
|
|
+EXPORT_SYMBOL(fman_unregister_intr);
|
|
|
|
|
|
/**
|
|
|
* fman_set_port_params
|
|
@@ -2241,6 +2243,7 @@ return_err:
|
|
|
spin_unlock_irqrestore(&fman->spinlock, flags);
|
|
|
return err;
|
|
|
}
|
|
|
+EXPORT_SYMBOL(fman_set_port_params);
|
|
|
|
|
|
/**
|
|
|
* fman_reset_mac
|
|
@@ -2310,6 +2313,7 @@ int fman_reset_mac(struct fman *fman, u8 mac_id)
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
+EXPORT_SYMBOL(fman_reset_mac);
|
|
|
|
|
|
/**
|
|
|
* fman_set_mac_max_frame
|
|
@@ -2327,8 +2331,7 @@ int fman_set_mac_max_frame(struct fman *fman, u8 mac_id, u16 mfl)
|
|
|
* or equal to the port's max
|
|
|
*/
|
|
|
if ((!fman->state->port_mfl[mac_id]) ||
|
|
|
- (fman->state->port_mfl[mac_id] &&
|
|
|
- (mfl <= fman->state->port_mfl[mac_id]))) {
|
|
|
+ (mfl <= fman->state->port_mfl[mac_id])) {
|
|
|
fman->state->mac_mfl[mac_id] = mfl;
|
|
|
} else {
|
|
|
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)
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
+EXPORT_SYMBOL(fman_set_mac_max_frame);
|
|
|
|
|
|
/**
|
|
|
* fman_get_clock_freq
|
|
@@ -2363,6 +2367,7 @@ u32 fman_get_bmi_max_fifo_size(struct fman *fman)
|
|
|
{
|
|
|
return fman->state->bmi_max_fifo_size;
|
|
|
}
|
|
|
+EXPORT_SYMBOL(fman_get_bmi_max_fifo_size);
|
|
|
|
|
|
/**
|
|
|
* fman_get_revision
|
|
@@ -2384,6 +2389,7 @@ void fman_get_revision(struct fman *fman, struct fman_rev_info *rev_info)
|
|
|
FPM_REV1_MAJOR_SHIFT);
|
|
|
rev_info->minor = tmp & FPM_REV1_MINOR_MASK;
|
|
|
}
|
|
|
+EXPORT_SYMBOL(fman_get_revision);
|
|
|
|
|
|
/**
|
|
|
* fman_get_qman_channel_id
|
|
@@ -2419,6 +2425,7 @@ u32 fman_get_qman_channel_id(struct fman *fman, u32 port_id)
|
|
|
|
|
|
return fman->state->qman_channel_base + i;
|
|
|
}
|
|
|
+EXPORT_SYMBOL(fman_get_qman_channel_id);
|
|
|
|
|
|
/**
|
|
|
* fman_get_mem_region
|
|
@@ -2432,6 +2439,7 @@ struct resource *fman_get_mem_region(struct fman *fman)
|
|
|
{
|
|
|
return fman->state->res;
|
|
|
}
|
|
|
+EXPORT_SYMBOL(fman_get_mem_region);
|
|
|
|
|
|
/* Bootargs defines */
|
|
|
/* Extra headroom for RX buffers - Default, min and max */
|
|
@@ -2453,7 +2461,7 @@ struct resource *fman_get_mem_region(struct fman *fman)
|
|
|
* particular forwarding scenarios that add extra headers to the
|
|
|
* forwarded frame.
|
|
|
*/
|
|
|
-int fsl_fm_rx_extra_headroom = FSL_FM_RX_EXTRA_HEADROOM;
|
|
|
+static int fsl_fm_rx_extra_headroom = FSL_FM_RX_EXTRA_HEADROOM;
|
|
|
module_param(fsl_fm_rx_extra_headroom, int, 0);
|
|
|
MODULE_PARM_DESC(fsl_fm_rx_extra_headroom, "Extra headroom for Rx buffers");
|
|
|
|
|
@@ -2466,7 +2474,7 @@ MODULE_PARM_DESC(fsl_fm_rx_extra_headroom, "Extra headroom for Rx buffers");
|
|
|
* Could be overridden once, at boot-time, via the
|
|
|
* fm_set_max_frm() callback.
|
|
|
*/
|
|
|
-int fsl_fm_max_frm = FSL_FM_MAX_FRAME_SIZE;
|
|
|
+static int fsl_fm_max_frm = FSL_FM_MAX_FRAME_SIZE;
|
|
|
module_param(fsl_fm_max_frm, int, 0);
|
|
|
MODULE_PARM_DESC(fsl_fm_max_frm, "Maximum frame size, across all interfaces");
|
|
|
|
|
@@ -2538,6 +2546,7 @@ struct fman *fman_bind(struct device *fm_dev)
|
|
|
{
|
|
|
return (struct fman *)(dev_get_drvdata(get_device(fm_dev)));
|
|
|
}
|
|
|
+EXPORT_SYMBOL(fman_bind);
|
|
|
|
|
|
static irqreturn_t fman_err_irq(int irq, void *handle)
|
|
|
{
|
|
@@ -2727,8 +2736,8 @@ static struct fman *read_dts_node(struct platform_device *of_dev)
|
|
|
struct fman *fman;
|
|
|
struct device_node *fm_node, *muram_node;
|
|
|
struct resource *res;
|
|
|
- const u32 *u32_prop;
|
|
|
- int lenp, err, irq;
|
|
|
+ u32 val, range[2];
|
|
|
+ int err, irq;
|
|
|
struct clk *clk;
|
|
|
u32 clk_rate;
|
|
|
phys_addr_t phys_base_addr;
|
|
@@ -2740,16 +2749,13 @@ static struct fman *read_dts_node(struct platform_device *of_dev)
|
|
|
|
|
|
fm_node = of_node_get(of_dev->dev.of_node);
|
|
|
|
|
|
- u32_prop = (const u32 *)of_get_property(fm_node, "cell-index", &lenp);
|
|
|
- if (!u32_prop) {
|
|
|
- dev_err(&of_dev->dev, "%s: of_get_property(%s, cell-index) failed\n",
|
|
|
+ err = of_property_read_u32(fm_node, "cell-index", &val);
|
|
|
+ if (err) {
|
|
|
+ dev_err(&of_dev->dev, "%s: failed to read cell-index for %s\n",
|
|
|
__func__, fm_node->full_name);
|
|
|
goto fman_node_put;
|
|
|
}
|
|
|
- if (WARN_ON(lenp != sizeof(u32)))
|
|
|
- goto fman_node_put;
|
|
|
-
|
|
|
- fman->dts_params.id = (u8)fdt32_to_cpu(u32_prop[0]);
|
|
|
+ fman->dts_params.id = (u8)val;
|
|
|
|
|
|
/* Get the FM interrupt */
|
|
|
res = platform_get_resource(of_dev, IORESOURCE_IRQ, 0);
|
|
@@ -2796,18 +2802,15 @@ static struct fman *read_dts_node(struct platform_device *of_dev)
|
|
|
/* Rounding to MHz */
|
|
|
fman->dts_params.clk_freq = DIV_ROUND_UP(clk_rate, 1000000);
|
|
|
|
|
|
- u32_prop = (const u32 *)of_get_property(fm_node,
|
|
|
- "fsl,qman-channel-range",
|
|
|
- &lenp);
|
|
|
- if (!u32_prop) {
|
|
|
- dev_err(&of_dev->dev, "%s: of_get_property(%s, fsl,qman-channel-range) failed\n",
|
|
|
+ err = of_property_read_u32_array(fm_node, "fsl,qman-channel-range",
|
|
|
+ &range[0], 2);
|
|
|
+ if (err) {
|
|
|
+ dev_err(&of_dev->dev, "%s: failed to read fsl,qman-channel-range for %s\n",
|
|
|
__func__, fm_node->full_name);
|
|
|
goto fman_node_put;
|
|
|
}
|
|
|
- if (WARN_ON(lenp != sizeof(u32) * 2))
|
|
|
- goto fman_node_put;
|
|
|
- fman->dts_params.qman_channel_base = fdt32_to_cpu(u32_prop[0]);
|
|
|
- fman->dts_params.num_of_qman_channels = fdt32_to_cpu(u32_prop[1]);
|
|
|
+ fman->dts_params.qman_channel_base = range[0];
|
|
|
+ fman->dts_params.num_of_qman_channels = range[1];
|
|
|
|
|
|
/* Get the MURAM base address and size */
|
|
|
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)
|
|
|
|
|
|
fman->dts_params.base_addr =
|
|
|
devm_ioremap(&of_dev->dev, phys_base_addr, mem_size);
|
|
|
- if (fman->dts_params.base_addr == 0) {
|
|
|
+ if (!fman->dts_params.base_addr) {
|
|
|
dev_err(&of_dev->dev, "%s: devm_ioremap() failed\n", __func__);
|
|
|
goto fman_free;
|
|
|
}
|
|
@@ -2930,7 +2933,7 @@ static const struct of_device_id fman_match[] = {
|
|
|
{}
|
|
|
};
|
|
|
|
|
|
-MODULE_DEVICE_TABLE(of, fm_match);
|
|
|
+MODULE_DEVICE_TABLE(of, fman_match);
|
|
|
|
|
|
static struct platform_driver fman_driver = {
|
|
|
.driver = {
|
|
@@ -2940,4 +2943,25 @@ static struct platform_driver fman_driver = {
|
|
|
.probe = fman_probe,
|
|
|
};
|
|
|
|
|
|
-builtin_platform_driver(fman_driver);
|
|
|
+static int __init fman_load(void)
|
|
|
+{
|
|
|
+ int err;
|
|
|
+
|
|
|
+ pr_debug("FSL DPAA FMan driver\n");
|
|
|
+
|
|
|
+ err = platform_driver_register(&fman_driver);
|
|
|
+ if (err < 0)
|
|
|
+ pr_err("Error, platform_driver_register() = %d\n", err);
|
|
|
+
|
|
|
+ return err;
|
|
|
+}
|
|
|
+module_init(fman_load);
|
|
|
+
|
|
|
+static void __exit fman_unload(void)
|
|
|
+{
|
|
|
+ platform_driver_unregister(&fman_driver);
|
|
|
+}
|
|
|
+module_exit(fman_unload);
|
|
|
+
|
|
|
+MODULE_LICENSE("Dual BSD/GPL");
|
|
|
+MODULE_DESCRIPTION("Freescale DPAA Frame Manager driver");
|