Messages in this thread | | | From | "" <> | Subject | RE: [PATCH 2/5] Clocksource: Flextimer: Use internal clocksource read API. | Date | Thu, 4 Sep 2014 08:43:28 +0000 |
| |
> > > > Since the FTM will be in BE mode on LS1 platform, but will be in LE mode > > On LS2 platform. > > > > And ftm_clocksource_read_up() will adapt to this different. > > You are missing the point. Why do you want a conditional in a hot > path? You know at init time whether the thing is BE or LE, so you can > have separate functions for BE/LE or whatever and register that with > clocksource_mmio_init(). i.e. > > if (be) > clocksource_mmio_init(....., cs_read_be); > else if (le) > clocksource_mmio_init(....., cs_read_le); > else if (magic) > clocksource_mmio_init(....., cs_read_magic); >
There already has the following access interfaces:
static inline u32 ftm_readl(void __iomem *addr) { if (priv->big_endian) return ioread32be(addr); else return ioread32(addr); }
static inline void ftm_writel(u32 val, void __iomem *addr) { if (priv->big_endian) iowrite32be(val, addr); else iowrite32(val, addr); }
So I added the following code:
static cycle_t ftm_clocksource_read_up(struct clocksource *c) { return ftm_readl(priv->clksrc_base + FTM_CNT) & 0xffff; }
clocksource_mmio_init(.....,ftm_clocksource_read_up);
Is this okay ?
Thanks,
BRs Xiubo
| |