* [PATCH] powerpc/mpc52xx_lpbfifo: Drop unused functions @ 2022-12-28 14:51 Uwe Kleine-König 2022-12-29 17:28 ` Uwe Kleine-König 2023-04-12 15:05 ` Uwe Kleine-König 0 siblings, 2 replies; 8+ messages in thread From: Uwe Kleine-König @ 2022-12-28 14:51 UTC (permalink / raw) To: Michael Ellerman, Anatolij Gustschin Cc: Andy Shevchenko, linuxppc-dev, Nicholas Piggin, linux-kernel The four exported functions mpc52xx_lpbfifo_submit(), mpc52xx_lpbfifo_abort(), mpc52xx_lpbfifo_poll(), and mpc52xx_lpbfifo_start_xfer() are not used. So they can be dropped and the definitions needed to call them can be moved into the driver file. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> --- arch/powerpc/include/asm/mpc52xx.h | 41 ------ arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c | 134 +++++------------- 2 files changed, 33 insertions(+), 142 deletions(-) diff --git a/arch/powerpc/include/asm/mpc52xx.h b/arch/powerpc/include/asm/mpc52xx.h index 5ea16a71c2f0..01ae6c351e50 100644 --- a/arch/powerpc/include/asm/mpc52xx.h +++ b/arch/powerpc/include/asm/mpc52xx.h @@ -285,47 +285,6 @@ extern int mpc52xx_gpt_start_timer(struct mpc52xx_gpt_priv *gpt, u64 period, extern u64 mpc52xx_gpt_timer_period(struct mpc52xx_gpt_priv *gpt); extern int mpc52xx_gpt_stop_timer(struct mpc52xx_gpt_priv *gpt); -/* mpc52xx_lpbfifo.c */ -#define MPC52XX_LPBFIFO_FLAG_READ (0) -#define MPC52XX_LPBFIFO_FLAG_WRITE (1<<0) -#define MPC52XX_LPBFIFO_FLAG_NO_INCREMENT (1<<1) -#define MPC52XX_LPBFIFO_FLAG_NO_DMA (1<<2) -#define MPC52XX_LPBFIFO_FLAG_POLL_DMA (1<<3) - -struct mpc52xx_lpbfifo_request { - struct list_head list; - - /* localplus bus address */ - unsigned int cs; - size_t offset; - - /* Memory address */ - void *data; - phys_addr_t data_phys; - - /* Details of transfer */ - size_t size; - size_t pos; /* current position of transfer */ - int flags; - int defer_xfer_start; - - /* What to do when finished */ - void (*callback)(struct mpc52xx_lpbfifo_request *); - - void *priv; /* Driver private data */ - - /* statistics */ - int irq_count; - int irq_ticks; - u8 last_byte; - int buffer_not_done_cnt; -}; - -extern int mpc52xx_lpbfifo_submit(struct mpc52xx_lpbfifo_request *req); -extern void mpc52xx_lpbfifo_abort(struct mpc52xx_lpbfifo_request *req); -extern void mpc52xx_lpbfifo_poll(void); -extern int mpc52xx_lpbfifo_start_xfer(struct mpc52xx_lpbfifo_request *req); - /* mpc52xx_pic.c */ extern void mpc52xx_init_irq(void); extern unsigned int mpc52xx_get_irq(void); diff --git a/arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c b/arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c index 6d1dd6e87478..32fd1345ffeb 100644 --- a/arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c +++ b/arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c @@ -38,6 +38,39 @@ MODULE_LICENSE("GPL"); #define LPBFIFO_REG_FIFO_CONTROL (0x48) #define LPBFIFO_REG_FIFO_ALARM (0x4C) +#define MPC52XX_LPBFIFO_FLAG_WRITE (1<<0) +#define MPC52XX_LPBFIFO_FLAG_NO_DMA (1<<2) +#define MPC52XX_LPBFIFO_FLAG_POLL_DMA (1<<3) + +struct mpc52xx_lpbfifo_request { + struct list_head list; + + /* localplus bus address */ + unsigned int cs; + size_t offset; + + /* Memory address */ + void *data; + phys_addr_t data_phys; + + /* Details of transfer */ + size_t size; + size_t pos; /* current position of transfer */ + int flags; + int defer_xfer_start; + + /* What to do when finished */ + void (*callback)(struct mpc52xx_lpbfifo_request *); + + void *priv; /* Driver private data */ + + /* statistics */ + int irq_count; + int irq_ticks; + u8 last_byte; + int buffer_not_done_cnt; +}; + struct mpc52xx_lpbfifo { struct device *dev; phys_addr_t regs_phys; @@ -381,107 +414,6 @@ static irqreturn_t mpc52xx_lpbfifo_bcom_irq(int irq, void *dev_id) return IRQ_HANDLED; } -/** - * mpc52xx_lpbfifo_poll - Poll for DMA completion - */ -void mpc52xx_lpbfifo_poll(void) -{ - struct mpc52xx_lpbfifo_request *req = lpbfifo.req; - int dma = !(req->flags & MPC52XX_LPBFIFO_FLAG_NO_DMA); - int write = req->flags & MPC52XX_LPBFIFO_FLAG_WRITE; - - /* - * For more information, see comments on the "Fat Lady" - */ - if (dma && write) - mpc52xx_lpbfifo_irq(0, NULL); - else - mpc52xx_lpbfifo_bcom_irq(0, NULL); -} -EXPORT_SYMBOL(mpc52xx_lpbfifo_poll); - -/** - * mpc52xx_lpbfifo_submit - Submit an LPB FIFO transfer request. - * @req: Pointer to request structure - * - * Return: %0 on success, -errno code on error - */ -int mpc52xx_lpbfifo_submit(struct mpc52xx_lpbfifo_request *req) -{ - unsigned long flags; - - if (!lpbfifo.regs) - return -ENODEV; - - spin_lock_irqsave(&lpbfifo.lock, flags); - - /* If the req pointer is already set, then a transfer is in progress */ - if (lpbfifo.req) { - spin_unlock_irqrestore(&lpbfifo.lock, flags); - return -EBUSY; - } - - /* Setup the transfer */ - lpbfifo.req = req; - req->irq_count = 0; - req->irq_ticks = 0; - req->buffer_not_done_cnt = 0; - req->pos = 0; - - mpc52xx_lpbfifo_kick(req); - spin_unlock_irqrestore(&lpbfifo.lock, flags); - return 0; -} -EXPORT_SYMBOL(mpc52xx_lpbfifo_submit); - -int mpc52xx_lpbfifo_start_xfer(struct mpc52xx_lpbfifo_request *req) -{ - unsigned long flags; - - if (!lpbfifo.regs) - return -ENODEV; - - spin_lock_irqsave(&lpbfifo.lock, flags); - - /* - * If the req pointer is already set and a transfer was - * started on submit, then this transfer is in progress - */ - if (lpbfifo.req && !lpbfifo.req->defer_xfer_start) { - spin_unlock_irqrestore(&lpbfifo.lock, flags); - return -EBUSY; - } - - /* - * If the req was previously submitted but not - * started, start it now - */ - if (lpbfifo.req && lpbfifo.req == req && - lpbfifo.req->defer_xfer_start) { - out_8(lpbfifo.regs + LPBFIFO_REG_PACKET_SIZE, 0x01); - } - - spin_unlock_irqrestore(&lpbfifo.lock, flags); - return 0; -} -EXPORT_SYMBOL(mpc52xx_lpbfifo_start_xfer); - -void mpc52xx_lpbfifo_abort(struct mpc52xx_lpbfifo_request *req) -{ - unsigned long flags; - - spin_lock_irqsave(&lpbfifo.lock, flags); - if (lpbfifo.req == req) { - /* Put it into reset and clear the state */ - bcom_gen_bd_rx_reset(lpbfifo.bcom_rx_task); - bcom_gen_bd_tx_reset(lpbfifo.bcom_tx_task); - out_be32(lpbfifo.regs + LPBFIFO_REG_ENABLE, 0x01010000); - lpbfifo.req = NULL; - } - spin_unlock_irqrestore(&lpbfifo.lock, flags); -} -EXPORT_SYMBOL(mpc52xx_lpbfifo_abort); - static int mpc52xx_lpbfifo_probe(struct platform_device *op) { struct resource res; -- 2.38.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] powerpc/mpc52xx_lpbfifo: Drop unused functions 2022-12-28 14:51 [PATCH] powerpc/mpc52xx_lpbfifo: Drop unused functions Uwe Kleine-König @ 2022-12-29 17:28 ` Uwe Kleine-König 2023-04-12 15:05 ` Uwe Kleine-König 1 sibling, 0 replies; 8+ messages in thread From: Uwe Kleine-König @ 2022-12-29 17:28 UTC (permalink / raw) To: Michael Ellerman, Anatolij Gustschin Cc: linux-kernel, Nicholas Piggin, kernel, Andy Shevchenko, linuxppc-dev [-- Attachment #1: Type: text/plain, Size: 785 bytes --] On Wed, Dec 28, 2022 at 03:51:29PM +0100, Uwe Kleine-König wrote: > The four exported functions mpc52xx_lpbfifo_submit(), > mpc52xx_lpbfifo_abort(), mpc52xx_lpbfifo_poll(), and > mpc52xx_lpbfifo_start_xfer() are not used. So they can be dropped and the > definitions needed to call them can be moved into the driver file. > > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> > --- I forgot to note here that maybe without these four exported functions the driver is useless and can be removed completely. I didn't look in detail, but maybe one of the recipents might know. Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | https://www.pengutronix.de/ | [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] powerpc/mpc52xx_lpbfifo: Drop unused functions 2022-12-28 14:51 [PATCH] powerpc/mpc52xx_lpbfifo: Drop unused functions Uwe Kleine-König 2022-12-29 17:28 ` Uwe Kleine-König @ 2023-04-12 15:05 ` Uwe Kleine-König 2023-04-13 0:11 ` Michael Ellerman 1 sibling, 1 reply; 8+ messages in thread From: Uwe Kleine-König @ 2023-04-12 15:05 UTC (permalink / raw) To: Michael Ellerman, Anatolij Gustschin Cc: Andy Shevchenko, linuxppc-dev, Nicholas Piggin, linux-kernel [-- Attachment #1: Type: text/plain, Size: 7036 bytes --] On Wed, Dec 28, 2022 at 03:51:29PM +0100, Uwe Kleine-König wrote: > The four exported functions mpc52xx_lpbfifo_submit(), > mpc52xx_lpbfifo_abort(), mpc52xx_lpbfifo_poll(), and > mpc52xx_lpbfifo_start_xfer() are not used. So they can be dropped and the > definitions needed to call them can be moved into the driver file. > > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> I never got feedback about this driver and it has not appeared in next up to now. Did it fell through the cracks? Best regards Uwe > --- > arch/powerpc/include/asm/mpc52xx.h | 41 ------ > arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c | 134 +++++------------- > 2 files changed, 33 insertions(+), 142 deletions(-) > > diff --git a/arch/powerpc/include/asm/mpc52xx.h b/arch/powerpc/include/asm/mpc52xx.h > index 5ea16a71c2f0..01ae6c351e50 100644 > --- a/arch/powerpc/include/asm/mpc52xx.h > +++ b/arch/powerpc/include/asm/mpc52xx.h > @@ -285,47 +285,6 @@ extern int mpc52xx_gpt_start_timer(struct mpc52xx_gpt_priv *gpt, u64 period, > extern u64 mpc52xx_gpt_timer_period(struct mpc52xx_gpt_priv *gpt); > extern int mpc52xx_gpt_stop_timer(struct mpc52xx_gpt_priv *gpt); > > -/* mpc52xx_lpbfifo.c */ > -#define MPC52XX_LPBFIFO_FLAG_READ (0) > -#define MPC52XX_LPBFIFO_FLAG_WRITE (1<<0) > -#define MPC52XX_LPBFIFO_FLAG_NO_INCREMENT (1<<1) > -#define MPC52XX_LPBFIFO_FLAG_NO_DMA (1<<2) > -#define MPC52XX_LPBFIFO_FLAG_POLL_DMA (1<<3) > - > -struct mpc52xx_lpbfifo_request { > - struct list_head list; > - > - /* localplus bus address */ > - unsigned int cs; > - size_t offset; > - > - /* Memory address */ > - void *data; > - phys_addr_t data_phys; > - > - /* Details of transfer */ > - size_t size; > - size_t pos; /* current position of transfer */ > - int flags; > - int defer_xfer_start; > - > - /* What to do when finished */ > - void (*callback)(struct mpc52xx_lpbfifo_request *); > - > - void *priv; /* Driver private data */ > - > - /* statistics */ > - int irq_count; > - int irq_ticks; > - u8 last_byte; > - int buffer_not_done_cnt; > -}; > - > -extern int mpc52xx_lpbfifo_submit(struct mpc52xx_lpbfifo_request *req); > -extern void mpc52xx_lpbfifo_abort(struct mpc52xx_lpbfifo_request *req); > -extern void mpc52xx_lpbfifo_poll(void); > -extern int mpc52xx_lpbfifo_start_xfer(struct mpc52xx_lpbfifo_request *req); > - > /* mpc52xx_pic.c */ > extern void mpc52xx_init_irq(void); > extern unsigned int mpc52xx_get_irq(void); > diff --git a/arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c b/arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c > index 6d1dd6e87478..32fd1345ffeb 100644 > --- a/arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c > +++ b/arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c > @@ -38,6 +38,39 @@ MODULE_LICENSE("GPL"); > #define LPBFIFO_REG_FIFO_CONTROL (0x48) > #define LPBFIFO_REG_FIFO_ALARM (0x4C) > > +#define MPC52XX_LPBFIFO_FLAG_WRITE (1<<0) > +#define MPC52XX_LPBFIFO_FLAG_NO_DMA (1<<2) > +#define MPC52XX_LPBFIFO_FLAG_POLL_DMA (1<<3) > + > +struct mpc52xx_lpbfifo_request { > + struct list_head list; > + > + /* localplus bus address */ > + unsigned int cs; > + size_t offset; > + > + /* Memory address */ > + void *data; > + phys_addr_t data_phys; > + > + /* Details of transfer */ > + size_t size; > + size_t pos; /* current position of transfer */ > + int flags; > + int defer_xfer_start; > + > + /* What to do when finished */ > + void (*callback)(struct mpc52xx_lpbfifo_request *); > + > + void *priv; /* Driver private data */ > + > + /* statistics */ > + int irq_count; > + int irq_ticks; > + u8 last_byte; > + int buffer_not_done_cnt; > +}; > + > struct mpc52xx_lpbfifo { > struct device *dev; > phys_addr_t regs_phys; > @@ -381,107 +414,6 @@ static irqreturn_t mpc52xx_lpbfifo_bcom_irq(int irq, void *dev_id) > return IRQ_HANDLED; > } > > -/** > - * mpc52xx_lpbfifo_poll - Poll for DMA completion > - */ > -void mpc52xx_lpbfifo_poll(void) > -{ > - struct mpc52xx_lpbfifo_request *req = lpbfifo.req; > - int dma = !(req->flags & MPC52XX_LPBFIFO_FLAG_NO_DMA); > - int write = req->flags & MPC52XX_LPBFIFO_FLAG_WRITE; > - > - /* > - * For more information, see comments on the "Fat Lady" > - */ > - if (dma && write) > - mpc52xx_lpbfifo_irq(0, NULL); > - else > - mpc52xx_lpbfifo_bcom_irq(0, NULL); > -} > -EXPORT_SYMBOL(mpc52xx_lpbfifo_poll); > - > -/** > - * mpc52xx_lpbfifo_submit - Submit an LPB FIFO transfer request. > - * @req: Pointer to request structure > - * > - * Return: %0 on success, -errno code on error > - */ > -int mpc52xx_lpbfifo_submit(struct mpc52xx_lpbfifo_request *req) > -{ > - unsigned long flags; > - > - if (!lpbfifo.regs) > - return -ENODEV; > - > - spin_lock_irqsave(&lpbfifo.lock, flags); > - > - /* If the req pointer is already set, then a transfer is in progress */ > - if (lpbfifo.req) { > - spin_unlock_irqrestore(&lpbfifo.lock, flags); > - return -EBUSY; > - } > - > - /* Setup the transfer */ > - lpbfifo.req = req; > - req->irq_count = 0; > - req->irq_ticks = 0; > - req->buffer_not_done_cnt = 0; > - req->pos = 0; > - > - mpc52xx_lpbfifo_kick(req); > - spin_unlock_irqrestore(&lpbfifo.lock, flags); > - return 0; > -} > -EXPORT_SYMBOL(mpc52xx_lpbfifo_submit); > - > -int mpc52xx_lpbfifo_start_xfer(struct mpc52xx_lpbfifo_request *req) > -{ > - unsigned long flags; > - > - if (!lpbfifo.regs) > - return -ENODEV; > - > - spin_lock_irqsave(&lpbfifo.lock, flags); > - > - /* > - * If the req pointer is already set and a transfer was > - * started on submit, then this transfer is in progress > - */ > - if (lpbfifo.req && !lpbfifo.req->defer_xfer_start) { > - spin_unlock_irqrestore(&lpbfifo.lock, flags); > - return -EBUSY; > - } > - > - /* > - * If the req was previously submitted but not > - * started, start it now > - */ > - if (lpbfifo.req && lpbfifo.req == req && > - lpbfifo.req->defer_xfer_start) { > - out_8(lpbfifo.regs + LPBFIFO_REG_PACKET_SIZE, 0x01); > - } > - > - spin_unlock_irqrestore(&lpbfifo.lock, flags); > - return 0; > -} > -EXPORT_SYMBOL(mpc52xx_lpbfifo_start_xfer); > - > -void mpc52xx_lpbfifo_abort(struct mpc52xx_lpbfifo_request *req) > -{ > - unsigned long flags; > - > - spin_lock_irqsave(&lpbfifo.lock, flags); > - if (lpbfifo.req == req) { > - /* Put it into reset and clear the state */ > - bcom_gen_bd_rx_reset(lpbfifo.bcom_rx_task); > - bcom_gen_bd_tx_reset(lpbfifo.bcom_tx_task); > - out_be32(lpbfifo.regs + LPBFIFO_REG_ENABLE, 0x01010000); > - lpbfifo.req = NULL; > - } > - spin_unlock_irqrestore(&lpbfifo.lock, flags); > -} > -EXPORT_SYMBOL(mpc52xx_lpbfifo_abort); > - > static int mpc52xx_lpbfifo_probe(struct platform_device *op) > { > struct resource res; > -- > 2.38.1 > -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | https://www.pengutronix.de/ | [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] powerpc/mpc52xx_lpbfifo: Drop unused functions 2023-04-12 15:05 ` Uwe Kleine-König @ 2023-04-13 0:11 ` Michael Ellerman 2023-04-13 6:16 ` [PATCH] powerpc: Drop MPC5200 LocalPlus bus FIFO driver Uwe Kleine-König 0 siblings, 1 reply; 8+ messages in thread From: Michael Ellerman @ 2023-04-13 0:11 UTC (permalink / raw) To: Uwe Kleine-König, Anatolij Gustschin Cc: Andy Shevchenko, linuxppc-dev, Nicholas Piggin, linux-kernel Uwe Kleine-König <u.kleine-koenig@pengutronix.de> writes: > On Wed, Dec 28, 2022 at 03:51:29PM +0100, Uwe Kleine-König wrote: >> The four exported functions mpc52xx_lpbfifo_submit(), >> mpc52xx_lpbfifo_abort(), mpc52xx_lpbfifo_poll(), and >> mpc52xx_lpbfifo_start_xfer() are not used. So they can be dropped and the >> definitions needed to call them can be moved into the driver file. >> >> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> > > I never got feedback about this driver and it has not appeared in next > up to now. Did it fell through the cracks? Yeah. I was hoping someone would explain what's going on with the driver. Presumably there are some out-of-tree drivers that use the routines provided by this driver? I think rather than merging this patch, which keeps the code but makes it completely useless, do you mind sending a patch to remove the whole driver? Maybe that will get someone's attention. cheers ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH] powerpc: Drop MPC5200 LocalPlus bus FIFO driver 2023-04-13 0:11 ` Michael Ellerman @ 2023-04-13 6:16 ` Uwe Kleine-König 2023-05-09 8:21 ` Uwe Kleine-König 2023-07-03 5:26 ` Michael Ellerman 0 siblings, 2 replies; 8+ messages in thread From: Uwe Kleine-König @ 2023-04-13 6:16 UTC (permalink / raw) To: Michael Ellerman Cc: Anatolij Gustschin, linux-kernel, Nicholas Piggin, Andy Shevchenko, linuxppc-dev [-- Attachment #1: Type: text/plain, Size: 22690 bytes --] While mpc5200b.dtsi contains a device that this driver can bind to, the only purpose of a bound device is to be used by the four exported functions mpc52xx_lpbfifo_submit(), mpc52xx_lpbfifo_abort(), mpc52xx_lpbfifo_poll() and mpc52xx_lpbfifo_start_xfer(). However there are no callers to this function and so the driver is effectively superfluous and can be deleted. Also drop some defines and a struct from <asm/mpc52xx.h> that are unused now together with the declarations of the four mentioned functions. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> --- Hello Michael, On Thu, Apr 13, 2023 at 10:11:25AM +1000, Michael Ellerman wrote: > Uwe Kleine-König <u.kleine-koenig@pengutronix.de> writes: > > On Wed, Dec 28, 2022 at 03:51:29PM +0100, Uwe Kleine-König wrote: > >> The four exported functions mpc52xx_lpbfifo_submit(), > >> mpc52xx_lpbfifo_abort(), mpc52xx_lpbfifo_poll(), and > >> mpc52xx_lpbfifo_start_xfer() are not used. So they can be dropped and the > >> definitions needed to call them can be moved into the driver file. > >> > >> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> > > > > I never got feedback about this driver and it has not appeared in next > > up to now. Did it fell through the cracks? > > Yeah. I was hoping someone would explain what's going on with the > driver. > > Presumably there are some out-of-tree drivers that use the routines > provided by this driver? I googled for the function names but the only related hits were references to this thread :-) > I think rather than merging this patch, which keeps the code but makes > it completely useless, do you mind sending a patch to remove the whole > driver? Maybe that will get someone's attention. fair enough, here it is. Best regards Uwe arch/powerpc/include/asm/mpc52xx.h | 41 -- arch/powerpc/platforms/52xx/Kconfig | 5 - arch/powerpc/platforms/52xx/Makefile | 2 - arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c | 594 ------------------ 4 files changed, 642 deletions(-) delete mode 100644 arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c diff --git a/arch/powerpc/include/asm/mpc52xx.h b/arch/powerpc/include/asm/mpc52xx.h index 5ea16a71c2f0..01ae6c351e50 100644 --- a/arch/powerpc/include/asm/mpc52xx.h +++ b/arch/powerpc/include/asm/mpc52xx.h @@ -285,47 +285,6 @@ extern int mpc52xx_gpt_start_timer(struct mpc52xx_gpt_priv *gpt, u64 period, extern u64 mpc52xx_gpt_timer_period(struct mpc52xx_gpt_priv *gpt); extern int mpc52xx_gpt_stop_timer(struct mpc52xx_gpt_priv *gpt); -/* mpc52xx_lpbfifo.c */ -#define MPC52XX_LPBFIFO_FLAG_READ (0) -#define MPC52XX_LPBFIFO_FLAG_WRITE (1<<0) -#define MPC52XX_LPBFIFO_FLAG_NO_INCREMENT (1<<1) -#define MPC52XX_LPBFIFO_FLAG_NO_DMA (1<<2) -#define MPC52XX_LPBFIFO_FLAG_POLL_DMA (1<<3) - -struct mpc52xx_lpbfifo_request { - struct list_head list; - - /* localplus bus address */ - unsigned int cs; - size_t offset; - - /* Memory address */ - void *data; - phys_addr_t data_phys; - - /* Details of transfer */ - size_t size; - size_t pos; /* current position of transfer */ - int flags; - int defer_xfer_start; - - /* What to do when finished */ - void (*callback)(struct mpc52xx_lpbfifo_request *); - - void *priv; /* Driver private data */ - - /* statistics */ - int irq_count; - int irq_ticks; - u8 last_byte; - int buffer_not_done_cnt; -}; - -extern int mpc52xx_lpbfifo_submit(struct mpc52xx_lpbfifo_request *req); -extern void mpc52xx_lpbfifo_abort(struct mpc52xx_lpbfifo_request *req); -extern void mpc52xx_lpbfifo_poll(void); -extern int mpc52xx_lpbfifo_start_xfer(struct mpc52xx_lpbfifo_request *req); - /* mpc52xx_pic.c */ extern void mpc52xx_init_irq(void); extern unsigned int mpc52xx_get_irq(void); diff --git a/arch/powerpc/platforms/52xx/Kconfig b/arch/powerpc/platforms/52xx/Kconfig index b72ed2950ca8..384e4bef2c28 100644 --- a/arch/powerpc/platforms/52xx/Kconfig +++ b/arch/powerpc/platforms/52xx/Kconfig @@ -54,8 +54,3 @@ config PPC_MPC5200_BUGFIX for MPC5200B based boards. It is safe to say 'Y' here - -config PPC_MPC5200_LPBFIFO - tristate "MPC5200 LocalPlus bus FIFO driver" - depends on PPC_MPC52xx && PPC_BESTCOMM - select PPC_BESTCOMM_GEN_BD diff --git a/arch/powerpc/platforms/52xx/Makefile b/arch/powerpc/platforms/52xx/Makefile index f40d48eab779..1b1f72d83342 100644 --- a/arch/powerpc/platforms/52xx/Makefile +++ b/arch/powerpc/platforms/52xx/Makefile @@ -14,5 +14,3 @@ obj-$(CONFIG_PM) += mpc52xx_sleep.o mpc52xx_pm.o ifdef CONFIG_PPC_LITE5200 obj-$(CONFIG_PM) += lite5200_sleep.o lite5200_pm.o endif - -obj-$(CONFIG_PPC_MPC5200_LPBFIFO) += mpc52xx_lpbfifo.o diff --git a/arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c b/arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c deleted file mode 100644 index 6d1dd6e87478..000000000000 --- a/arch/powerpc/platforms/52xx/mpc52xx_lpbfifo.c +++ /dev/null @@ -1,594 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * LocalPlus Bus FIFO driver for the Freescale MPC52xx. - * - * Copyright (C) 2009 Secret Lab Technologies Ltd. - * - * Todo: - * - Add support for multiple requests to be queued. - */ - -#include <linux/interrupt.h> -#include <linux/kernel.h> -#include <linux/of.h> -#include <linux/of_address.h> -#include <linux/of_irq.h> -#include <linux/of_platform.h> -#include <linux/spinlock.h> -#include <linux/module.h> -#include <asm/io.h> -#include <asm/mpc52xx.h> -#include <asm/time.h> - -#include <linux/fsl/bestcomm/bestcomm.h> -#include <linux/fsl/bestcomm/bestcomm_priv.h> -#include <linux/fsl/bestcomm/gen_bd.h> - -MODULE_AUTHOR("Grant Likely <grant.likely@secretlab.ca>"); -MODULE_DESCRIPTION("MPC5200 LocalPlus FIFO device driver"); -MODULE_LICENSE("GPL"); - -#define LPBFIFO_REG_PACKET_SIZE (0x00) -#define LPBFIFO_REG_START_ADDRESS (0x04) -#define LPBFIFO_REG_CONTROL (0x08) -#define LPBFIFO_REG_ENABLE (0x0C) -#define LPBFIFO_REG_BYTES_DONE_STATUS (0x14) -#define LPBFIFO_REG_FIFO_DATA (0x40) -#define LPBFIFO_REG_FIFO_STATUS (0x44) -#define LPBFIFO_REG_FIFO_CONTROL (0x48) -#define LPBFIFO_REG_FIFO_ALARM (0x4C) - -struct mpc52xx_lpbfifo { - struct device *dev; - phys_addr_t regs_phys; - void __iomem *regs; - int irq; - spinlock_t lock; - - struct bcom_task *bcom_tx_task; - struct bcom_task *bcom_rx_task; - struct bcom_task *bcom_cur_task; - - /* Current state data */ - struct mpc52xx_lpbfifo_request *req; - int dma_irqs_enabled; -}; - -/* The MPC5200 has only one fifo, so only need one instance structure */ -static struct mpc52xx_lpbfifo lpbfifo; - -/** - * mpc52xx_lpbfifo_kick - Trigger the next block of data to be transferred - * - * @req: Pointer to request structure - */ -static void mpc52xx_lpbfifo_kick(struct mpc52xx_lpbfifo_request *req) -{ - size_t transfer_size = req->size - req->pos; - struct bcom_bd *bd; - void __iomem *reg; - u32 *data; - int i; - int bit_fields; - int dma = !(req->flags & MPC52XX_LPBFIFO_FLAG_NO_DMA); - int write = req->flags & MPC52XX_LPBFIFO_FLAG_WRITE; - int poll_dma = req->flags & MPC52XX_LPBFIFO_FLAG_POLL_DMA; - - /* Set and clear the reset bits; is good practice in User Manual */ - out_be32(lpbfifo.regs + LPBFIFO_REG_ENABLE, 0x01010000); - - /* set master enable bit */ - out_be32(lpbfifo.regs + LPBFIFO_REG_ENABLE, 0x00000001); - if (!dma) { - /* While the FIFO can be setup for transfer sizes as large as - * 16M-1, the FIFO itself is only 512 bytes deep and it does - * not generate interrupts for FIFO full events (only transfer - * complete will raise an IRQ). Therefore when not using - * Bestcomm to drive the FIFO it needs to either be polled, or - * transfers need to constrained to the size of the fifo. - * - * This driver restricts the size of the transfer - */ - if (transfer_size > 512) - transfer_size = 512; - - /* Load the FIFO with data */ - if (write) { - reg = lpbfifo.regs + LPBFIFO_REG_FIFO_DATA; - data = req->data + req->pos; - for (i = 0; i < transfer_size; i += 4) - out_be32(reg, *data++); - } - - /* Unmask both error and completion irqs */ - out_be32(lpbfifo.regs + LPBFIFO_REG_ENABLE, 0x00000301); - } else { - /* Choose the correct direction - * - * Configure the watermarks so DMA will always complete correctly. - * It may be worth experimenting with the ALARM value to see if - * there is a performance impact. However, if it is wrong there - * is a risk of DMA not transferring the last chunk of data - */ - if (write) { - out_be32(lpbfifo.regs + LPBFIFO_REG_FIFO_ALARM, 0x1e4); - out_8(lpbfifo.regs + LPBFIFO_REG_FIFO_CONTROL, 7); - lpbfifo.bcom_cur_task = lpbfifo.bcom_tx_task; - } else { - out_be32(lpbfifo.regs + LPBFIFO_REG_FIFO_ALARM, 0x1ff); - out_8(lpbfifo.regs + LPBFIFO_REG_FIFO_CONTROL, 0); - lpbfifo.bcom_cur_task = lpbfifo.bcom_rx_task; - - if (poll_dma) { - if (lpbfifo.dma_irqs_enabled) { - disable_irq(bcom_get_task_irq(lpbfifo.bcom_rx_task)); - lpbfifo.dma_irqs_enabled = 0; - } - } else { - if (!lpbfifo.dma_irqs_enabled) { - enable_irq(bcom_get_task_irq(lpbfifo.bcom_rx_task)); - lpbfifo.dma_irqs_enabled = 1; - } - } - } - - bd = bcom_prepare_next_buffer(lpbfifo.bcom_cur_task); - bd->status = transfer_size; - if (!write) { - /* - * In the DMA read case, the DMA doesn't complete, - * possibly due to incorrect watermarks in the ALARM - * and CONTROL regs. For now instead of trying to - * determine the right watermarks that will make this - * work, just increase the number of bytes the FIFO is - * expecting. - * - * When submitting another operation, the FIFO will get - * reset, so the condition of the FIFO waiting for a - * non-existent 4 bytes will get cleared. - */ - transfer_size += 4; /* BLECH! */ - } - bd->data[0] = req->data_phys + req->pos; - bcom_submit_next_buffer(lpbfifo.bcom_cur_task, NULL); - - /* error irq & master enabled bit */ - bit_fields = 0x00000201; - - /* Unmask irqs */ - if (write && (!poll_dma)) - bit_fields |= 0x00000100; /* completion irq too */ - out_be32(lpbfifo.regs + LPBFIFO_REG_ENABLE, bit_fields); - } - - /* Set transfer size, width, chip select and READ mode */ - out_be32(lpbfifo.regs + LPBFIFO_REG_START_ADDRESS, - req->offset + req->pos); - out_be32(lpbfifo.regs + LPBFIFO_REG_PACKET_SIZE, transfer_size); - - bit_fields = req->cs << 24 | 0x000008; - if (!write) - bit_fields |= 0x010000; /* read mode */ - out_be32(lpbfifo.regs + LPBFIFO_REG_CONTROL, bit_fields); - - /* Kick it off */ - if (!lpbfifo.req->defer_xfer_start) - out_8(lpbfifo.regs + LPBFIFO_REG_PACKET_SIZE, 0x01); - if (dma) - bcom_enable(lpbfifo.bcom_cur_task); -} - -/** - * mpc52xx_lpbfifo_irq - IRQ handler for LPB FIFO - * @irq: IRQ number to be handled - * @dev_id: device ID cookie - * - * On transmit, the dma completion irq triggers before the fifo completion - * triggers. Handle the dma completion here instead of the LPB FIFO Bestcomm - * task completion irq because everything is not really done until the LPB FIFO - * completion irq triggers. - * - * In other words: - * For DMA, on receive, the "Fat Lady" is the bestcom completion irq. on - * transmit, the fifo completion irq is the "Fat Lady". The opera (or in this - * case the DMA/FIFO operation) is not finished until the "Fat Lady" sings. - * - * Reasons for entering this routine: - * 1) PIO mode rx and tx completion irq - * 2) DMA interrupt mode tx completion irq - * 3) DMA polled mode tx - * - * Exit conditions: - * 1) Transfer aborted - * 2) FIFO complete without DMA; more data to do - * 3) FIFO complete without DMA; all data transferred - * 4) FIFO complete using DMA - * - * Condition 1 can occur regardless of whether or not DMA is used. - * It requires executing the callback to report the error and exiting - * immediately. - * - * Condition 2 requires programming the FIFO with the next block of data - * - * Condition 3 requires executing the callback to report completion - * - * Condition 4 means the same as 3, except that we also retrieve the bcom - * buffer so DMA doesn't get clogged up. - * - * To make things trickier, the spinlock must be dropped before - * executing the callback, otherwise we could end up with a deadlock - * or nested spinlock condition. The out path is non-trivial, so - * extra fiddling is done to make sure all paths lead to the same - * outbound code. - * - * Return: irqreturn code (%IRQ_HANDLED) - */ -static irqreturn_t mpc52xx_lpbfifo_irq(int irq, void *dev_id) -{ - struct mpc52xx_lpbfifo_request *req; - u32 status = in_8(lpbfifo.regs + LPBFIFO_REG_BYTES_DONE_STATUS); - void __iomem *reg; - u32 *data; - int count, i; - int do_callback = 0; - u32 ts; - unsigned long flags; - int dma, write, poll_dma; - - spin_lock_irqsave(&lpbfifo.lock, flags); - ts = mftb(); - - req = lpbfifo.req; - if (!req) { - spin_unlock_irqrestore(&lpbfifo.lock, flags); - pr_err("bogus LPBFIFO IRQ\n"); - return IRQ_HANDLED; - } - - dma = !(req->flags & MPC52XX_LPBFIFO_FLAG_NO_DMA); - write = req->flags & MPC52XX_LPBFIFO_FLAG_WRITE; - poll_dma = req->flags & MPC52XX_LPBFIFO_FLAG_POLL_DMA; - - if (dma && !write) { - spin_unlock_irqrestore(&lpbfifo.lock, flags); - pr_err("bogus LPBFIFO IRQ (dma and not writing)\n"); - return IRQ_HANDLED; - } - - if ((status & 0x01) == 0) { - goto out; - } - - /* check abort bit */ - if (status & 0x10) { - out_be32(lpbfifo.regs + LPBFIFO_REG_ENABLE, 0x01010000); - do_callback = 1; - goto out; - } - - /* Read result from hardware */ - count = in_be32(lpbfifo.regs + LPBFIFO_REG_BYTES_DONE_STATUS); - count &= 0x00ffffff; - - if (!dma && !write) { - /* copy the data out of the FIFO */ - reg = lpbfifo.regs + LPBFIFO_REG_FIFO_DATA; - data = req->data + req->pos; - for (i = 0; i < count; i += 4) - *data++ = in_be32(reg); - } - - /* Update transfer position and count */ - req->pos += count; - - /* Decide what to do next */ - if (req->size - req->pos) - mpc52xx_lpbfifo_kick(req); /* more work to do */ - else - do_callback = 1; - - out: - /* Clear the IRQ */ - out_8(lpbfifo.regs + LPBFIFO_REG_BYTES_DONE_STATUS, 0x01); - - if (dma && (status & 0x11)) { - /* - * Count the DMA as complete only when the FIFO completion - * status or abort bits are set. - * - * (status & 0x01) should always be the case except sometimes - * when using polled DMA. - * - * (status & 0x10) {transfer aborted}: This case needs more - * testing. - */ - bcom_retrieve_buffer(lpbfifo.bcom_cur_task, &status, NULL); - } - req->last_byte = ((u8 *)req->data)[req->size - 1]; - - /* When the do_callback flag is set; it means the transfer is finished - * so set the FIFO as idle */ - if (do_callback) - lpbfifo.req = NULL; - - if (irq != 0) /* don't increment on polled case */ - req->irq_count++; - - req->irq_ticks += mftb() - ts; - spin_unlock_irqrestore(&lpbfifo.lock, flags); - - /* Spinlock is released; it is now safe to call the callback */ - if (do_callback && req->callback) - req->callback(req); - - return IRQ_HANDLED; -} - -/** - * mpc52xx_lpbfifo_bcom_irq - IRQ handler for LPB FIFO Bestcomm task - * @irq: IRQ number to be handled - * @dev_id: device ID cookie - * - * Only used when receiving data. - * - * Return: irqreturn code (%IRQ_HANDLED) - */ -static irqreturn_t mpc52xx_lpbfifo_bcom_irq(int irq, void *dev_id) -{ - struct mpc52xx_lpbfifo_request *req; - unsigned long flags; - u32 status; - u32 ts; - - spin_lock_irqsave(&lpbfifo.lock, flags); - ts = mftb(); - - req = lpbfifo.req; - if (!req || (req->flags & MPC52XX_LPBFIFO_FLAG_NO_DMA)) { - spin_unlock_irqrestore(&lpbfifo.lock, flags); - return IRQ_HANDLED; - } - - if (irq != 0) /* don't increment on polled case */ - req->irq_count++; - - if (!bcom_buffer_done(lpbfifo.bcom_cur_task)) { - spin_unlock_irqrestore(&lpbfifo.lock, flags); - - req->buffer_not_done_cnt++; - if ((req->buffer_not_done_cnt % 1000) == 0) - pr_err("transfer stalled\n"); - - return IRQ_HANDLED; - } - - bcom_retrieve_buffer(lpbfifo.bcom_cur_task, &status, NULL); - - req->last_byte = ((u8 *)req->data)[req->size - 1]; - - req->pos = status & 0x00ffffff; - - /* Mark the FIFO as idle */ - lpbfifo.req = NULL; - - /* Release the lock before calling out to the callback. */ - req->irq_ticks += mftb() - ts; - spin_unlock_irqrestore(&lpbfifo.lock, flags); - - if (req->callback) - req->callback(req); - - return IRQ_HANDLED; -} - -/** - * mpc52xx_lpbfifo_poll - Poll for DMA completion - */ -void mpc52xx_lpbfifo_poll(void) -{ - struct mpc52xx_lpbfifo_request *req = lpbfifo.req; - int dma = !(req->flags & MPC52XX_LPBFIFO_FLAG_NO_DMA); - int write = req->flags & MPC52XX_LPBFIFO_FLAG_WRITE; - - /* - * For more information, see comments on the "Fat Lady" - */ - if (dma && write) - mpc52xx_lpbfifo_irq(0, NULL); - else - mpc52xx_lpbfifo_bcom_irq(0, NULL); -} -EXPORT_SYMBOL(mpc52xx_lpbfifo_poll); - -/** - * mpc52xx_lpbfifo_submit - Submit an LPB FIFO transfer request. - * @req: Pointer to request structure - * - * Return: %0 on success, -errno code on error - */ -int mpc52xx_lpbfifo_submit(struct mpc52xx_lpbfifo_request *req) -{ - unsigned long flags; - - if (!lpbfifo.regs) - return -ENODEV; - - spin_lock_irqsave(&lpbfifo.lock, flags); - - /* If the req pointer is already set, then a transfer is in progress */ - if (lpbfifo.req) { - spin_unlock_irqrestore(&lpbfifo.lock, flags); - return -EBUSY; - } - - /* Setup the transfer */ - lpbfifo.req = req; - req->irq_count = 0; - req->irq_ticks = 0; - req->buffer_not_done_cnt = 0; - req->pos = 0; - - mpc52xx_lpbfifo_kick(req); - spin_unlock_irqrestore(&lpbfifo.lock, flags); - return 0; -} -EXPORT_SYMBOL(mpc52xx_lpbfifo_submit); - -int mpc52xx_lpbfifo_start_xfer(struct mpc52xx_lpbfifo_request *req) -{ - unsigned long flags; - - if (!lpbfifo.regs) - return -ENODEV; - - spin_lock_irqsave(&lpbfifo.lock, flags); - - /* - * If the req pointer is already set and a transfer was - * started on submit, then this transfer is in progress - */ - if (lpbfifo.req && !lpbfifo.req->defer_xfer_start) { - spin_unlock_irqrestore(&lpbfifo.lock, flags); - return -EBUSY; - } - - /* - * If the req was previously submitted but not - * started, start it now - */ - if (lpbfifo.req && lpbfifo.req == req && - lpbfifo.req->defer_xfer_start) { - out_8(lpbfifo.regs + LPBFIFO_REG_PACKET_SIZE, 0x01); - } - - spin_unlock_irqrestore(&lpbfifo.lock, flags); - return 0; -} -EXPORT_SYMBOL(mpc52xx_lpbfifo_start_xfer); - -void mpc52xx_lpbfifo_abort(struct mpc52xx_lpbfifo_request *req) -{ - unsigned long flags; - - spin_lock_irqsave(&lpbfifo.lock, flags); - if (lpbfifo.req == req) { - /* Put it into reset and clear the state */ - bcom_gen_bd_rx_reset(lpbfifo.bcom_rx_task); - bcom_gen_bd_tx_reset(lpbfifo.bcom_tx_task); - out_be32(lpbfifo.regs + LPBFIFO_REG_ENABLE, 0x01010000); - lpbfifo.req = NULL; - } - spin_unlock_irqrestore(&lpbfifo.lock, flags); -} -EXPORT_SYMBOL(mpc52xx_lpbfifo_abort); - -static int mpc52xx_lpbfifo_probe(struct platform_device *op) -{ - struct resource res; - int rc = -ENOMEM; - - if (lpbfifo.dev != NULL) - return -ENOSPC; - - lpbfifo.irq = irq_of_parse_and_map(op->dev.of_node, 0); - if (!lpbfifo.irq) - return -ENODEV; - - if (of_address_to_resource(op->dev.of_node, 0, &res)) - return -ENODEV; - lpbfifo.regs_phys = res.start; - lpbfifo.regs = of_iomap(op->dev.of_node, 0); - if (!lpbfifo.regs) - return -ENOMEM; - - spin_lock_init(&lpbfifo.lock); - - /* Put FIFO into reset */ - out_be32(lpbfifo.regs + LPBFIFO_REG_ENABLE, 0x01010000); - - /* Register the interrupt handler */ - rc = request_irq(lpbfifo.irq, mpc52xx_lpbfifo_irq, 0, - "mpc52xx-lpbfifo", &lpbfifo); - if (rc) - goto err_irq; - - /* Request the Bestcomm receive (fifo --> memory) task and IRQ */ - lpbfifo.bcom_rx_task = - bcom_gen_bd_rx_init(2, res.start + LPBFIFO_REG_FIFO_DATA, - BCOM_INITIATOR_SCLPC, BCOM_IPR_SCLPC, - 16*1024*1024); - if (!lpbfifo.bcom_rx_task) - goto err_bcom_rx; - - rc = request_irq(bcom_get_task_irq(lpbfifo.bcom_rx_task), - mpc52xx_lpbfifo_bcom_irq, 0, - "mpc52xx-lpbfifo-rx", &lpbfifo); - if (rc) - goto err_bcom_rx_irq; - - lpbfifo.dma_irqs_enabled = 1; - - /* Request the Bestcomm transmit (memory --> fifo) task and IRQ */ - lpbfifo.bcom_tx_task = - bcom_gen_bd_tx_init(2, res.start + LPBFIFO_REG_FIFO_DATA, - BCOM_INITIATOR_SCLPC, BCOM_IPR_SCLPC); - if (!lpbfifo.bcom_tx_task) - goto err_bcom_tx; - - lpbfifo.dev = &op->dev; - return 0; - - err_bcom_tx: - free_irq(bcom_get_task_irq(lpbfifo.bcom_rx_task), &lpbfifo); - err_bcom_rx_irq: - bcom_gen_bd_rx_release(lpbfifo.bcom_rx_task); - err_bcom_rx: - free_irq(lpbfifo.irq, &lpbfifo); - err_irq: - iounmap(lpbfifo.regs); - lpbfifo.regs = NULL; - - dev_err(&op->dev, "mpc52xx_lpbfifo_probe() failed\n"); - return -ENODEV; -} - - -static int mpc52xx_lpbfifo_remove(struct platform_device *op) -{ - if (lpbfifo.dev != &op->dev) - return 0; - - /* Put FIFO in reset */ - out_be32(lpbfifo.regs + LPBFIFO_REG_ENABLE, 0x01010000); - - /* Release the bestcomm transmit task */ - free_irq(bcom_get_task_irq(lpbfifo.bcom_tx_task), &lpbfifo); - bcom_gen_bd_tx_release(lpbfifo.bcom_tx_task); - - /* Release the bestcomm receive task */ - free_irq(bcom_get_task_irq(lpbfifo.bcom_rx_task), &lpbfifo); - bcom_gen_bd_rx_release(lpbfifo.bcom_rx_task); - - free_irq(lpbfifo.irq, &lpbfifo); - iounmap(lpbfifo.regs); - lpbfifo.regs = NULL; - lpbfifo.dev = NULL; - - return 0; -} - -static const struct of_device_id mpc52xx_lpbfifo_match[] = { - { .compatible = "fsl,mpc5200-lpbfifo", }, - {}, -}; -MODULE_DEVICE_TABLE(of, mpc52xx_lpbfifo_match); - -static struct platform_driver mpc52xx_lpbfifo_driver = { - .driver = { - .name = "mpc52xx-lpbfifo", - .of_match_table = mpc52xx_lpbfifo_match, - }, - .probe = mpc52xx_lpbfifo_probe, - .remove = mpc52xx_lpbfifo_remove, -}; -module_platform_driver(mpc52xx_lpbfifo_driver); base-commit: fe15c26ee26efa11741a7b632e9f23b01aca4cc6 -- 2.39.2 -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | https://www.pengutronix.de/ | [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] powerpc: Drop MPC5200 LocalPlus bus FIFO driver 2023-04-13 6:16 ` [PATCH] powerpc: Drop MPC5200 LocalPlus bus FIFO driver Uwe Kleine-König @ 2023-05-09 8:21 ` Uwe Kleine-König 2023-05-12 2:42 ` Michael Ellerman 2023-07-03 5:26 ` Michael Ellerman 1 sibling, 1 reply; 8+ messages in thread From: Uwe Kleine-König @ 2023-05-09 8:21 UTC (permalink / raw) To: Michael Ellerman Cc: Anatolij Gustschin, linux-kernel, Nicholas Piggin, Andy Shevchenko, linuxppc-dev [-- Attachment #1: Type: text/plain, Size: 2304 bytes --] Hello, On Thu, Apr 13, 2023 at 08:16:42AM +0200, Uwe Kleine-König wrote: > While mpc5200b.dtsi contains a device that this driver can bind to, the > only purpose of a bound device is to be used by the four exported functions > mpc52xx_lpbfifo_submit(), mpc52xx_lpbfifo_abort(), mpc52xx_lpbfifo_poll() > and mpc52xx_lpbfifo_start_xfer(). However there are no callers to this > function and so the driver is effectively superfluous and can be deleted. > Also drop some defines and a struct from <asm/mpc52xx.h> that are unused > now together with the declarations of the four mentioned functions. > > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> > --- > Hello Michael, > > On Thu, Apr 13, 2023 at 10:11:25AM +1000, Michael Ellerman wrote: > > Uwe Kleine-König <u.kleine-koenig@pengutronix.de> writes: > > > On Wed, Dec 28, 2022 at 03:51:29PM +0100, Uwe Kleine-König wrote: > > >> The four exported functions mpc52xx_lpbfifo_submit(), > > >> mpc52xx_lpbfifo_abort(), mpc52xx_lpbfifo_poll(), and > > >> mpc52xx_lpbfifo_start_xfer() are not used. So they can be dropped and the > > >> definitions needed to call them can be moved into the driver file. > > >> > > >> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> > > > > > > I never got feedback about this driver and it has not appeared in next > > > up to now. Did it fell through the cracks? > > > > Yeah. I was hoping someone would explain what's going on with the > > driver. > > > > Presumably there are some out-of-tree drivers that use the routines > > provided by this driver? > > I googled for the function names but the only related hits were > references to this thread :-) > > > I think rather than merging this patch, which keeps the code but makes > > it completely useless, do you mind sending a patch to remove the whole > > driver? Maybe that will get someone's attention. > > fair enough, here it is. What is your thought about this patch? If you (also) think getting it into next soon after a merge window closed, around now would be a good opportunity to do so .. Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | https://www.pengutronix.de/ | [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 488 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] powerpc: Drop MPC5200 LocalPlus bus FIFO driver 2023-05-09 8:21 ` Uwe Kleine-König @ 2023-05-12 2:42 ` Michael Ellerman 0 siblings, 0 replies; 8+ messages in thread From: Michael Ellerman @ 2023-05-12 2:42 UTC (permalink / raw) To: Uwe Kleine-König Cc: Anatolij Gustschin, linux-kernel, Nicholas Piggin, Andy Shevchenko, linuxppc-dev Uwe Kleine-König <u.kleine-koenig@pengutronix.de> writes: > On Thu, Apr 13, 2023 at 08:16:42AM +0200, Uwe Kleine-König wrote: >> While mpc5200b.dtsi contains a device that this driver can bind to, the >> only purpose of a bound device is to be used by the four exported functions >> mpc52xx_lpbfifo_submit(), mpc52xx_lpbfifo_abort(), mpc52xx_lpbfifo_poll() >> and mpc52xx_lpbfifo_start_xfer(). However there are no callers to this >> function and so the driver is effectively superfluous and can be deleted. >> Also drop some defines and a struct from <asm/mpc52xx.h> that are unused >> now together with the declarations of the four mentioned functions. >> >> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> >> --- >> On Thu, Apr 13, 2023 at 10:11:25AM +1000, Michael Ellerman wrote: >> > Uwe Kleine-König <u.kleine-koenig@pengutronix.de> writes: >> > > On Wed, Dec 28, 2022 at 03:51:29PM +0100, Uwe Kleine-König wrote: >> > >> The four exported functions mpc52xx_lpbfifo_submit(), >> > >> mpc52xx_lpbfifo_abort(), mpc52xx_lpbfifo_poll(), and >> > >> mpc52xx_lpbfifo_start_xfer() are not used. So they can be dropped and the >> > >> definitions needed to call them can be moved into the driver file. >> > >> >> > >> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> >> > > >> > > I never got feedback about this driver and it has not appeared in next >> > > up to now. Did it fell through the cracks? >> > >> > Yeah. I was hoping someone would explain what's going on with the >> > driver. >> > >> > Presumably there are some out-of-tree drivers that use the routines >> > provided by this driver? >> >> I googled for the function names but the only related hits were >> references to this thread :-) >> >> > I think rather than merging this patch, which keeps the code but makes >> > it completely useless, do you mind sending a patch to remove the whole >> > driver? Maybe that will get someone's attention. >> >> fair enough, here it is. > > What is your thought about this patch? If you (also) think getting it > into next soon after a merge window closed, around now would be a good > opportunity to do so .. I was hoping someone would explain why we have a driver that does nothing useful :) But I guess it's too old for anyone to remember/care. So yeah I'll take this, we can always put it back if someone needs it. I base my next on rc2, so I'll pick this up next week. cheers ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] powerpc: Drop MPC5200 LocalPlus bus FIFO driver 2023-04-13 6:16 ` [PATCH] powerpc: Drop MPC5200 LocalPlus bus FIFO driver Uwe Kleine-König 2023-05-09 8:21 ` Uwe Kleine-König @ 2023-07-03 5:26 ` Michael Ellerman 1 sibling, 0 replies; 8+ messages in thread From: Michael Ellerman @ 2023-07-03 5:26 UTC (permalink / raw) To: Uwe Kleine-König Cc: Anatolij Gustschin, linux-kernel, Nicholas Piggin, Andy Shevchenko, linuxppc-dev On Thu, 13 Apr 2023 08:16:42 +0200, Uwe Kleine-König wrote: > While mpc5200b.dtsi contains a device that this driver can bind to, the > only purpose of a bound device is to be used by the four exported functions > mpc52xx_lpbfifo_submit(), mpc52xx_lpbfifo_abort(), mpc52xx_lpbfifo_poll() > and mpc52xx_lpbfifo_start_xfer(). However there are no callers to this > function and so the driver is effectively superfluous and can be deleted. > Also drop some defines and a struct from <asm/mpc52xx.h> that are unused > now together with the declarations of the four mentioned functions. > > [...] Applied to powerpc/next. [1/1] powerpc: Drop MPC5200 LocalPlus bus FIFO driver https://git.kernel.org/powerpc/c/7d3ee229ea51a17afc1e53272e2a8f377cc82ba2 cheers ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-07-03 6:04 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-12-28 14:51 [PATCH] powerpc/mpc52xx_lpbfifo: Drop unused functions Uwe Kleine-König 2022-12-29 17:28 ` Uwe Kleine-König 2023-04-12 15:05 ` Uwe Kleine-König 2023-04-13 0:11 ` Michael Ellerman 2023-04-13 6:16 ` [PATCH] powerpc: Drop MPC5200 LocalPlus bus FIFO driver Uwe Kleine-König 2023-05-09 8:21 ` Uwe Kleine-König 2023-05-12 2:42 ` Michael Ellerman 2023-07-03 5:26 ` Michael Ellerman
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).