RE: [PATCH v6 1/9] soc: Add TmFifo driver for Mellanox BlueField Soc

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thanks Matthias for the comments and sorry for the holiday delay.
The recommended changes have been posted in patch v7 1/9.

Thanks,
Liming

> -----Original Message-----
> From: Matthias Brugger <matthias.bgg@xxxxxxxxx>
> Sent: Wednesday, December 12, 2018 6:08 PM
> To: Liming Sun <lsun@xxxxxxxxxxxx>; y@xxxxxxxxxxxxxxxxxxxxxxx; Olof Johansson <olof@xxxxxxxxx>; Arnd Bergmann <arnd@xxxxxxxx>;
> David Woods <dwoods@xxxxxxxxxxxx>; Robin Murphy <robin.murphy@xxxxxxx>; arm-soc <arm@xxxxxxxxxx>
> Cc: devicetree@xxxxxxxxxxxxxxx; linux-arm-kernel@xxxxxxxxxxxxxxxxxxx; mbrugger@xxxxxxxx >> Matthias Brugger <mbrugger@xxxxxxxx>
> Subject: Re: [PATCH v6 1/9] soc: Add TmFifo driver for Mellanox BlueField Soc
> 
> 
> 
> On 01/11/2018 17:23, Liming Sun wrote:> This commit adds the TmFifo driver for
> Mellanox BlueField Soc.
> > TmFifo is a shared FIFO which enables external host machine to
> > exchange data with the SoC via USB or PCIe. The driver is based on
> > virtio framework and has console and network access enabled.
> >
> > Reviewed-by: David Woods <dwoods@xxxxxxxxxxxx>
> > Signed-off-by: Liming Sun <lsun@xxxxxxxxxxxx>
> > ---
> >  drivers/soc/Kconfig                |    1 +
> >  drivers/soc/Makefile               |    1 +
> >  drivers/soc/mellanox/Kconfig       |   18 +
> >  drivers/soc/mellanox/Makefile      |    5 +
> >  drivers/soc/mellanox/tmfifo.c      | 1236 ++++++++++++++++++++++++++++++++++++
> >  drivers/soc/mellanox/tmfifo_regs.h |   76 +++
> >  6 files changed, 1337 insertions(+)
> >  create mode 100644 drivers/soc/mellanox/Kconfig
> >  create mode 100644 drivers/soc/mellanox/Makefile
> >  create mode 100644 drivers/soc/mellanox/tmfifo.c
> >  create mode 100644 drivers/soc/mellanox/tmfifo_regs.h
> >
> 
> [...]
> 
> > +
> > +/* Interrupt handler. */
> > +static irqreturn_t tmfifo_irq_handler(int irq, void *dev_id)
> > +{
> > +	int i = (uintptr_t)dev_id % sizeof(void *);
> > +	struct tmfifo *fifo = dev_id - i;
> > +
> > +	if (i < TM_IRQ_CNT && !test_and_set_bit(i, &fifo->pend_events))
> > +		schedule_work(&fifo->work);
> > +
> > +	return IRQ_HANDLED;
> > +}
> > +
> [...]
> > +
> > +/* Probe the TMFIFO. */
> > +static int tmfifo_probe(struct platform_device *pdev)
> > +{
> > +	u64 ctl;
> > +	struct tmfifo *fifo;
> > +	struct resource *rx_res, *tx_res;
> > +	struct virtio_net_config net_config;
> > +	int i, ret;
> > +
> > +	/* Get the resource of the Rx & Tx FIFO. */
> > +	rx_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> > +	tx_res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
> > +	if (!rx_res || !tx_res) {
> > +		ret = -EINVAL;
> > +		goto err;
> > +	}
> > +
> > +	if (request_mem_region(rx_res->start,
> > +			       resource_size(rx_res), "bf-tmfifo") == NULL) {
> > +		ret = -EBUSY;
> > +		goto early_err;
> > +	}
> > +
> > +	if (request_mem_region(tx_res->start,
> > +			       resource_size(tx_res), "bf-tmfifo") == NULL) {
> > +		release_mem_region(rx_res->start, resource_size(rx_res));
> > +		ret = -EBUSY;
> > +		goto early_err;
> > +	}
> > +
> > +	ret = -ENOMEM;
> > +	fifo = kzalloc(sizeof(struct tmfifo), GFP_KERNEL);
> > +	if (!fifo)
> > +		goto err;
> > +
> > +	fifo->pdev = pdev;
> > +	platform_set_drvdata(pdev, fifo);
> > +
> > +	spin_lock_init(&fifo->spin_lock);
> > +	INIT_WORK(&fifo->work, tmfifo_work_handler);
> > +
> > +	timer_setup(&fifo->timer, tmfifo_timer, 0);
> > +	fifo->timer.function = tmfifo_timer;
> > +
> > +	for (i = 0; i < TM_IRQ_CNT; i++) {
> > +		fifo->irq[i] = platform_get_irq(pdev, i);
> > +		ret = request_irq(fifo->irq[i], tmfifo_irq_handler, 0,
> > +				  "tmfifo", (u8 *)fifo + i);
> 
> I think it would be better if you create a struct that passes a pointer to fifo
> and the ID instead of "hiding" the ID inside the address.
> 
> Regards,
> Matthias




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux