Commit 736d8971 authored by Federico Vaga's avatar Federico Vaga

kernel: do not use FMC io function directly

Signed-off-by: Federico Vaga's avatarFederico Vaga <federico.vaga@cern.ch>
parent aeb5f99c
...@@ -164,28 +164,30 @@ struct fmctdc_dev { ...@@ -164,28 +164,30 @@ struct fmctdc_dev {
uint64_t sequence; /**< Board time-stamp sequence number */ uint64_t sequence; /**< Board time-stamp sequence number */
}; };
static inline uint32_t ft_readl(struct fmctdc_dev *ft, unsigned long reg) static inline u32 ft_ioread(struct fmctdc_dev *ft, unsigned long addr)
{ {
return fmc_readl(ft->fmc, ft->ft_core_base + reg); return fmc_readl(ft->fmc, addr);
} }
static inline void ft_writel(struct fmctdc_dev *ft, uint32_t v, static inline void ft_iowrite(struct fmctdc_dev *ft,
unsigned long reg) u32 value, unsigned long addr)
{ {
fmc_writel(ft->fmc, v, ft->ft_core_base + reg); fmc_writel(ft->fmc, value, addr);
} }
static inline u32 ft_ioread(struct fmctdc_dev *ft, unsigned long addr) static inline uint32_t ft_readl(struct fmctdc_dev *ft, unsigned long reg)
{ {
return fmc_readl(ft->fmc, addr); return ft_ioread(ft, ft->ft_core_base + reg);
} }
static inline void ft_iowrite(struct fmctdc_dev *ft, static inline void ft_writel(struct fmctdc_dev *ft, uint32_t v,
u32 value, unsigned long addr) unsigned long reg)
{ {
fmc_writel(ft->fmc, value, addr); ft_iowrite(ft, v, ft->ft_core_base + reg);
} }
void ft_enable_acquisition(struct fmctdc_dev *ft, int enable); void ft_enable_acquisition(struct fmctdc_dev *ft, int enable);
int ft_acam_init(struct fmctdc_dev *ft); int ft_acam_init(struct fmctdc_dev *ft);
......
...@@ -58,15 +58,15 @@ static int ft_reset_core(struct fmctdc_dev *ft) ...@@ -58,15 +58,15 @@ static int ft_reset_core(struct fmctdc_dev *ft)
dev_dbg(&ft->fmc->dev, "Un-resetting FMCs...\n"); dev_dbg(&ft->fmc->dev, "Un-resetting FMCs...\n");
/* Reset - reset bits are shifted by 1 */ /* Reset - reset bits are shifted by 1 */
fmc_writel(ft->fmc, ~(1 << (ft->fmc->slot_id + shift)), addr); ft_iowrite(ft, ~(1 << (ft->fmc->slot_id + shift)), addr);
udelay(5000); udelay(5000);
val = fmc_readl(ft->fmc, addr); val = ft_ioread(ft, addr);
val |= (1 << (ft->fmc->slot_id + shift)); val |= (1 << (ft->fmc->slot_id + shift));
/* Un-Reset */ /* Un-Reset */
fmc_writel(ft->fmc, val, addr); ft_iowrite(ft, val, addr);
return 0; return 0;
} }
......
...@@ -229,13 +229,13 @@ static int ft_timestap_get(struct zio_cset *cset, struct ft_hw_timestamp *hwts, ...@@ -229,13 +229,13 @@ static int ft_timestap_get(struct zio_cset *cset, struct ft_hw_timestamp *hwts,
fifo_addr += last ? TDC_FIFO_LAST : TDC_FIFO_OUT; fifo_addr += last ? TDC_FIFO_LAST : TDC_FIFO_OUT;
for (i = 0; i < TDC_FIFO_OUT_N; ++i) { for (i = 0; i < TDC_FIFO_OUT_N; ++i) {
data[i] = fmc_readl(ft->fmc, fifo_addr + i * 4); data[i] = ft_ioread(ft, fifo_addr + i * 4);
dev_vdbg(&cset->head.dev, "FIFO read 0x%x from 0x%x\n", dev_vdbg(&cset->head.dev, "FIFO read 0x%x from 0x%x\n",
data[i], fifo_addr + i * 4); data[i], fifo_addr + i * 4);
} }
if (last) { if (last) {
valid = !!(fmc_readl(ft->fmc, fifo_addr + TDC_FIFO_LAST_CSR) & valid = !!(ft_ioread(ft, fifo_addr + TDC_FIFO_LAST_CSR) &
TDC_FIFO_LAST_CSR_VALID); TDC_FIFO_LAST_CSR_VALID);
} }
...@@ -280,7 +280,7 @@ static irqreturn_t ft_irq_handler(int irq, void *dev_id) ...@@ -280,7 +280,7 @@ static irqreturn_t ft_irq_handler(int irq, void *dev_id)
struct zio_cset *cset; struct zio_cset *cset;
int i; int i;
irq_stat = fmc_readl(ft->fmc, ft->ft_irq_base + TDC_REG_EIC_ISR); irq_stat = ft_ioread(ft, ft->ft_irq_base + TDC_REG_EIC_ISR);
if (!irq_stat) if (!irq_stat)
return IRQ_NONE; return IRQ_NONE;
...@@ -304,19 +304,19 @@ irq: ...@@ -304,19 +304,19 @@ irq:
ft_readout_fifo_one(cset); ft_readout_fifo_one(cset);
fifo_csr_addr = ft->ft_buffer_base + fifo_csr_addr = ft->ft_buffer_base +
TDC_FIFO_OFFSET * cset->index + TDC_FIFO_CSR; TDC_FIFO_OFFSET * cset->index + TDC_FIFO_CSR;
fifo_stat = fmc_readl(ft->fmc, fifo_csr_addr); fifo_stat = ft_ioread(ft, fifo_csr_addr);
if (!(fifo_stat & TDC_FIFO_CSR_EMPTY)) if (!(fifo_stat & TDC_FIFO_CSR_EMPTY))
continue; /* Still something to read */ continue; /* Still something to read */
/* Ack the interrupt, nothing to read anymore */ /* Ack the interrupt, nothing to read anymore */
fmc_writel(ft->fmc, 1 << i, ft_iowrite(ft, 1 << i,
ft->ft_irq_base + TDC_REG_EIC_ISR); ft->ft_irq_base + TDC_REG_EIC_ISR);
tmp_irq_stat &= (~(1 << i)); tmp_irq_stat &= (~(1 << i));
} }
} while (tmp_irq_stat); } while (tmp_irq_stat);
/* Meanwhile we got another interrupt? then repeat */ /* Meanwhile we got another interrupt? then repeat */
irq_stat = fmc_readl(ft->fmc, ft->ft_irq_base + TDC_REG_EIC_ISR); irq_stat = ft_ioread(ft, ft->ft_irq_base + TDC_REG_EIC_ISR);
if (irq_stat) if (irq_stat)
goto irq; goto irq;
...@@ -336,7 +336,7 @@ int ft_irq_init(struct fmctdc_dev *ft) ...@@ -336,7 +336,7 @@ int ft_irq_init(struct fmctdc_dev *ft)
ft_writel(ft, 40, TDC_REG_IRQ_TIMEOUT); ft_writel(ft, 40, TDC_REG_IRQ_TIMEOUT);
/* disable timestamp readout IRQ, user will enable it manually */ /* disable timestamp readout IRQ, user will enable it manually */
fmc_writel(ft->fmc, 0x1F, ft->ft_irq_base + TDC_REG_EIC_IDR); ft_iowrite(ft, 0x1F, ft->ft_irq_base + TDC_REG_EIC_IDR);
/* pass the core's base addr as the VIC IRQ vector. */ /* pass the core's base addr as the VIC IRQ vector. */
/* fixme: vector table points to the bridge instead of /* fixme: vector table points to the bridge instead of
...@@ -357,6 +357,6 @@ int ft_irq_init(struct fmctdc_dev *ft) ...@@ -357,6 +357,6 @@ int ft_irq_init(struct fmctdc_dev *ft)
void ft_irq_exit(struct fmctdc_dev *ft) void ft_irq_exit(struct fmctdc_dev *ft)
{ {
fmc_writel(ft->fmc, ~0, ft->ft_irq_base + TDC_REG_EIC_IDR); ft_iowrite(ft, ~0, ft->ft_irq_base + TDC_REG_EIC_IDR);
fmc_irq_free(ft->fmc); fmc_irq_free(ft->fmc);
} }
...@@ -287,18 +287,18 @@ static void ft_change_flags(struct zio_obj_head *head, unsigned long mask) ...@@ -287,18 +287,18 @@ static void ft_change_flags(struct zio_obj_head *head, unsigned long mask)
ien = ft_readl(ft, TDC_REG_INPUT_ENABLE); ien = ft_readl(ft, TDC_REG_INPUT_ENABLE);
if (chan->flags & ZIO_STATUS) { if (chan->flags & ZIO_STATUS) {
/* DISABLED */ /* DISABLED */
fmc_writel(ft->fmc, 1 << chan->cset->index, ft_iowrite(ft, 1 << chan->cset->index,
ft->ft_irq_base + TDC_REG_EIC_IDR); ft->ft_irq_base + TDC_REG_EIC_IDR);
st->cur_seq_id = 0; st->cur_seq_id = 0;
st->expected_edge = 1; st->expected_edge = 1;
zio_trigger_abort_disable(chan->cset, 0); zio_trigger_abort_disable(chan->cset, 0);
/* Reset last time-stamp (seq number and valid)*/ /* Reset last time-stamp (seq number and valid)*/
//ft_writel(ft, TDC_FIFO_LAST_CSR_VALID | TDC_FIFO_LAST_CSR_RST_SEQ, //ft_iowrite(ft, TDC_FIFO_LAST_CSR_VALID | TDC_FIFO_LAST_CSR_RST_SEQ,
// TDC_FIFO_LAST_CSR); // TDC_FIFO_LAST_CSR);
} else { } else {
/* ENABLED */ /* ENABLED */
fmc_writel(ft->fmc, 1 << chan->cset->index, ft_iowrite(ft, 1 << chan->cset->index,
ft->ft_irq_base + TDC_REG_EIC_IER); ft->ft_irq_base + TDC_REG_EIC_IER);
zio_arm_trigger(chan->cset->ti); zio_arm_trigger(chan->cset->ti);
} }
......
...@@ -56,12 +56,12 @@ ...@@ -56,12 +56,12 @@
static void ow_writel(struct fmctdc_dev *ft, uint32_t val, unsigned long reg) static void ow_writel(struct fmctdc_dev *ft, uint32_t val, unsigned long reg)
{ {
fmc_writel(ft->fmc, val, ft->ft_owregs_base + reg); ft_iowrite(ft, val, ft->ft_owregs_base + reg);
} }
static uint32_t ow_readl(struct fmctdc_dev *ft, unsigned long reg) static uint32_t ow_readl(struct fmctdc_dev *ft, unsigned long reg)
{ {
return fmc_readl(ft->fmc, ft->ft_owregs_base + reg); return ft_ioread(ft, ft->ft_owregs_base + reg);
} }
static int ow_reset(struct fmctdc_dev *ft, int port) static int ow_reset(struct fmctdc_dev *ft, int port)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment