Skip to content

Commit

Permalink
powerpc/5200: add LocalPlus bus FIFO device driver
Browse files Browse the repository at this point in the history
This is a driver for the FIFO device on the LocalPlus bus on an mpc5200 system.
The driver supports programmed I/O through the FIFO as well as setting up DMA
via the BestComm engine through the FIFO.

Signed-off-by: John Bonesio <bones@secretlab.ca>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
  • Loading branch information
John Bonesio authored and Grant Likely committed Nov 4, 2009
1 parent 4f59ecf commit 3c9059d
Show file tree
Hide file tree
Showing 4 changed files with 605 additions and 0 deletions.
39 changes: 39 additions & 0 deletions arch/powerpc/include/asm/mpc52xx.h
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,45 @@ extern int mpc52xx_gpt_start_timer(struct mpc52xx_gpt_priv *gpt, int period,
int continuous);
extern void 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;

/* 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);

/* mpc52xx_pic.c */
extern void mpc52xx_init_irq(void);
extern unsigned int mpc52xx_get_irq(void);
Expand Down
5 changes: 5 additions & 0 deletions arch/powerpc/platforms/52xx/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -62,3 +62,8 @@ config PPC_MPC5200_GPIO
select GENERIC_GPIO
help
Enable gpiolib support for mpc5200 based boards

config PPC_MPC5200_LPBFIFO
tristate "MPC5200 LocalPlus bus FIFO driver"
depends on PPC_MPC52xx
select PPC_BESTCOMM_GEN_BD
1 change: 1 addition & 0 deletions arch/powerpc/platforms/52xx/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,4 @@ ifeq ($(CONFIG_PPC_LITE5200),y)
endif

obj-$(CONFIG_PPC_MPC5200_GPIO) += mpc52xx_gpio.o
obj-$(CONFIG_PPC_MPC5200_LPBFIFO) += mpc52xx_lpbfifo.o
Loading

0 comments on commit 3c9059d

Please sign in to comment.