lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <514485D2.6000806@nvidia.com>
Date:	Sat, 16 Mar 2013 20:16:42 +0530
From:	Laxman Dewangan <ldewangan@...dia.com>
To:	Mark Brown <broonie@...nsource.wolfsonmicro.com>
CC:	"gregkh@...uxfoundation.org" <gregkh@...uxfoundation.org>,
	"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
	Stephen Warren <swarren@...dia.com>
Subject: Re: [PATCH V2 RESEND 1/2] regmap: irq: Add support for interrupt
 type

On Wednesday 13 March 2013 01:25 AM, Mark Brown wrote:
> * PGP Signed by an unknown key
>
> On Thu, Mar 07, 2013 at 10:03:17PM +0530, Laxman Dewangan wrote:
>
>>   /**
>> + * The Regmap IRQ type Index
>> + * REGMAP_IRQ_TYPE_NONE is used for setting inital value for clearing type.
>> + */
>> +enum {
>> +	REGMAP_IRQ_TYPE_NONE,
>> +	REGMAP_IRQ_TYPE_RISING,
>> +	REGMAP_IRQ_TYPE_FALLING,
>> +	REGMAP_IRQ_TYPE_BOTH,
>> +	REGMAP_IRQ_TYPE_LEVEL_HIGH,
>> +	REGMAP_IRQ_TYPE_LEVEL_LOW,
>> +
>> +	/* Last entry to get maximum index */
>> +	REGMAP_IRQ_TYPE_NR,
> Why can't we just use the normal IRQ_TYPE macros?

IRQ_TYPE is bit wise allocated and I wanted to have on serieal index to 
assign value on array indexed with type.

>
>> + * @type_reg_sub_offset: Suboffset for type register if type mask are
>> + *              accomodated in the multiple register.
>> + * @type_supported_flags: Supported interrupt type as per interrupt.h.
>> + *             All supported flags are ORed.
>> + * type_mask: Type mask for getting related register bits.
>> + * @type_value: The type value in array form to set value for a given flag.
> This is making my head hurt, it's a bit confusing - I'm having to think
> too hard to understand what all these different fields do and how they
> interact.  Especially type_reg_sub_offset which feels like it must be
> part of a wider feature to support a greater range of register layouts.
>
> Can you clarify a bit please?
>

Sorry for complicating the things.
When I added this feature I was working on two PMICs, Max77660/MAX77663 
and the Palmas. I also consider how it is possible to handle in the 
tps65910 but seems not possible.
All this driver uses the regmap-irq. (MAX77660 is not in mainline and 
working on upstreaming this)
On Max77660/Max77663, the interrupt support is having 2 level, one top 
level for main interrupt like GPIO, RTC interrupt and second level in the
sub module like for RTC submodule: alram or timer in RTC interrupt 
mask/status, for GPIO submodule: gpio control and gpio interrupt status.
GPIO sub module of MAX77660/MAX77663 is as follows:
- Top level interrupt for gpio module.
- GPIO  module have GPIOx_CNTRL where bit6:5 shows the rising/falling 
edge interrupt and GPIO_INT_STATUS shows the interrupt status.
GPIO0_CNTL(0x20): bit 6:5: rising/falling edge of gpio0
GPIO1_CNTL(0x21): bit 65:5 rising/falling edge of gpio1
::::::::::::::::::::::::::::
GPIO7_CNTRL(0x27): bit 65:5 rising/falling edge of gpio7

GPIO_INT_STATUS: bit 0 for gpio0, bit 1 for gpio1, bit 2 for gpio2 etc.

There is no separate mask register here.


For palmas: All interrupts are on same level, there is no two level of 
interrupts.
There is 4 interrupt mask/status interrupt.

INT4_MASK/STATUS: bit 0 for gpio0, bit 1 for gpio1, bit 2 for gpio2 etc.
INT4_EDGE1_REG: bit 1:0 for gpio0 rising/falling, bit 3:2 for gpio1 
rising falling...
INT4_EDGE2_REG: bit 1:0 for gpio4 rising/falling, bit 3:2 for gpio5 
rising falling...

It has mask, interrupt status, edge1, edg2 as part of set of register. 
For other interrups also there is same sets but edge1 and edge2 are  
reserved.


To support rising/falling through regmap, I consider above two type of 
register set. Here as we can have more than 2 register for edge 
configuration,
I make register_sub_offset with type_register to address edge1 and edge2 
register.

Now, Palmas series have multiple PMICs and currently I am wokring on 
tps65913 and tps80036.
It is easy to support interrupt through regmap-irq for tps65913 but not 
possible to tps80036.
In tps65913, there is 4 int status/mask sets properly address spaced.
INT1_STATUS 0x0, INT2_STATUS 0x5, INT3_STATUS 0xA, INT4_STATUS 0xF
But tps80036 added few more interrupts and so INT5_STATUS which is not 
at 0x14 but it is at different 0x15 and INT6_STATUS 0x1A.
So using regmap-irq for tps80036 is not possible.


So given above limitation on palma, I think I should not complicate type 
support, only add register_type and drop the register_type_offset, 
typically to support the MAX77660.

let me know your opinion.



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ