RE: [PATCHv3 8/17] dmtimer: register mappings moved to hwmod database

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

 



 

> -----Original Message-----
> From: Cousson, Benoit 
> Sent: Tuesday, October 12, 2010 1:32 PM
> To: Basak, Partha
> Cc: DebBarma, Tarun Kanti; Kevin Hilman; G, Manjunath 
> Kondaiah; linux-omap@xxxxxxxxxxxxxxx; Shilimkar, Santosh; 
> Paul Walmsley; Tony Lindgren
> Subject: Re: [PATCHv3 8/17] dmtimer: register mappings moved 
> to hwmod database
> 
> On 10/12/2010 9:22 AM, Basak, Partha wrote:
> >
> >> From: DebBarma, Tarun Kanti
> >> Sent: Tuesday, October 12, 2010 11:19 AM
> >> To: Cousson, Benoit
> >>
> >> Benoit,
> >>> From: Cousson, Benoit
> >>> Sent: Tuesday, October 12, 2010 4:42 AM
> >>> To: DebBarma, Tarun Kanti
> >>>
> >>> Hi Tarun,
> >>>
> >>> On 10/9/2010 5:40 PM, DebBarma, Tarun Kanti wrote:
> >>>> Benoit,
> >>>>
> >>>>> From: Cousson, Benoit
> >>>>> Sent: Thursday, September 23, 2010 10:15 PM
> >>>>> To: Basak, Partha
> >>>>>
> >>>>> On 9/23/2010 11:34 AM, Basak, Partha wrote:
> >>>>>>
> >>>>>>> From: Kevin Hilman [mailto:khilman@xxxxxxxxxxxxxxxxxxx]
> >>>>>>> Sent: Thursday, September 23, 2010 3:10 AM
> >>>>>>>
> >>>>>>> "G, Manjunath Kondaiah"<manjugk@xxxxxx>    writes:
> >>>>>>>
> >>>>>>>> Hi Tarun,
> >>>>>>>>
> >>>>>>>>> From: linux-omap-owner@xxxxxxxxxxxxxxx
> >>>>>>>>> [mailto:linux-omap-owner@xxxxxxxxxxxxxxx] On Behalf Of
> >>>>>>>>> DebBarma, Tarun Kanti
> 
> <...>
> 
> >>>>>
> >>>>> Also, I'm not sure that you have to handle each register
> >> separately
> >>>>> considering that you have one offset to handle for the 
> functional
> >>>>> register.
> >>>>> The change in sysconfig and interrupt register are all
> >> standard mapping
> >>>>> that stick to TI highlander standard.
> >>>>> Meaning, as soon as an IP is a v2 (highlander version) all these
> >>>>> registers will be at the same place... at least in theory :-)
> >>>>>
> >>>>> Here are the deltas between the legacy and the new one:
> >>>>>
> >>>>> [OMAP_TIMER_ID_REG]             0x00,
> >>>>> [OMAP_TIMER_OCP_CFG_REG]        0x10, same
> >>>>> [OMAP_TIMER_SYS_STAT_REG]       0x14, (not used anymore)
> >>>>>
> >>>>> You should not care about these ones, because hwmod will
> >> handle them.
> >>>>>
> >>>>> [OMAP_TIMER_STAT_REG]           0x28, +10
> >>>>> [OMAP_TIMER_INT_EN_REG]         0x2c, +10
> >>>>> [OMAP_TIMER_INT_CLR_REG]        0x30, (new)
> >>>>>
> >>>>> These ones are standard registers
> >>>>>
> >>>>> [OMAP_TIMER_WAKEUP_EN_REG]      0x34, +14
> >>>>> [OMAP_TIMER_CTRL_REG]           0x38, +14
> >>>>> [OMAP_TIMER_COUNTER_REG]        0x3c, +14
> >>>>> [OMAP_TIMER_LOAD_REG]           0x40, +14
> >>>>> [OMAP_TIMER_TRIGGER_REG]        0x44, +14
> >>>>> [OMAP_TIMER_WRITE_PEND_REG]     0x48, +14
> >>>>> [OMAP_TIMER_MATCH_REG]          0x4c, +14
> >>>>> [OMAP_TIMER_CAPTURE_REG]        0x50, +14
> >>>>> [OMAP_TIMER_IF_CTRL_REG]        0x54, +14
> >>>>> [OMAP_TIMER_CAPTURE2_REG]       0x58, +14
> >>>>>
> >>>>> You can probably handle that with only 2 offsets instead
> >> of having one
> >>>>> address per registers.
> >>>>>
> >>>> To keep aligned with other driver implementations, I 
> would like to
> >>> follow this:
> >>>>
> >>>> 1) move the table in mach-omap1/2 since
> >>>> 2) remove entries which are handled by hwmod.
> >>>> However, I am not sure if there is any issue in keeping
> >> them in the
> >>> table.
> >>>
> >>> I don't think you need a table for that. All the functional
> >> registers
> >>> are using a constant offset. IRQ is then the only exception.
> >
> > Other than the offsets 0x14 for the Timer functional registers
> > and 0x10 for the IRQ registers, following differences exist
> > between the two versions:
> > 1. OMAP_TIMER_SYS_STAT_REG is used only for v1, missing for v2.
> 
> This is handled by hwmod anyway.
> 
> 
> > 2. OMAP_TIMER_INT_CLR_REG is new for v2, not used for v1.
> 
> Follow regular IRQ management for highlander IP. Should be 
> some generic 
> code in order to allow reuse.
> 
> > 3. Following registers are applicable only for v1.
> > [OMAP_TIMER_TICK_POS_REG]     		0x48
> > [OMAP_TIMER_TICK_NEG_REG]     		0x4c
> > [OMAP_TIMER_TICK_COUNT_REG]     		0x50
> > [OMAP_TIMER_TICK_INT_MASK_SET_REG]		0x54
> > [OMAP_TIMER_TICK_INT_MASK_COUNT_REG]	0x58
> 
> These are only there in the 1ms version of this IP.
> 
> > In the end, having separate tables is neater and consistent
> > with other drivers.
> 
> I don't see why? And what other driver are you referring too?

I2c driver uses reg_map tables. Initially McSPI and MMC were using
similar reg_map tables which were later removed based on review comments.

However, the delta were minimal in this case.
e.g. MCSPI_HL_REV, MCSPI_HL_HWINFO, MCSPI_HL_SYSCONFIG were the only 
difference for McSPI, all the other functional registers
were moved forward by 0x100.

Maybe, it is relevant for I2C as the amount of delta is more. 

I also observed your comments on MMC. Now that both McSPI & MMC are
not having table based approach, my argument of consistency across drivers
does not hold good. It depends upon the IPs really.
> 
> What the point of adding a table and an extra level of 
> indirection, when 
> a simple addition will do it?
> 
> > But instead of duplicating for each mach,
> > keeping them in plat should be OK.
> >
> > Additionally, the implementation should take care to prevent access
> > of non-existing registers for a particular version.
> 
> You just need the IP version to do that.
> 
> We have 3 timer variants to handle today:
> Legacy timer, legacy 1ms timer and highlander timer. You can 
> handle that 
> with 2 flags and 2 offsets.

If you look at the previous version of the DMTimer code, this is indeed
based on a bunch of #defines and offset updation. We then need to revert
back to this model with the following:

1. Maintain IP revs as dev_attrs.

2. For each IP rev, define two offsets, interrupt_reg_offset &
functional_reg_offset. 0x10 for v2 interrupt regs, 0x14 for the v2 functional regs.

3. In addiiton, take care to grant access of valid registers and prevent
access of non-existing registers for any particular IP revision.

Benoit, Tarun, do you agree?

> 
> Benoit
> 
> >
> >> Agreed!! But we have to have a check in the read/write
> >> routine to add this offset. This is an overhead I thought.
> >> Also, tomorrow when we have new silicon with further offset
> >> difference we would have to keep on adding additional checks.
> >> This would end up making the read/write routine (which is
> >> called frequently) bulky and inefficient.
> >> So, my thinking was to keep the read/write routine generic.
> >> Also, keeping separate table makes it extensible easily.
> >> At the end I am OK both ways so long as community feels ok
> >> with whichever approach.
> >> -tarun
> 
> --
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux