All of lore.kernel.org
 help / color / mirror / Atom feed
* [lm-sensors] PATCH- i2c-iop3xx platform driver avoid addressing self
@ 2006-06-16 20:41 Peter Milne
  2006-06-18  9:23 ` [lm-sensors] PATCH- i2c-iop3xx platform driver avoid addressing Jean Delvare
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Peter Milne @ 2006-06-16 20:41 UTC (permalink / raw)
  To: lm-sensors

Avoid addressing self when sending a Master address. Follows instruction 
in Intel 80331/80321 manuals.
Ignoring this worked previously on 80321, but causes a hang on i2cdetect 
on 80331

Signed-off-by: Peter Milne <peter.milne at d-tacq.com>

-------------- next part --------------
A non-text attachment was scrubbed...
Name: i2c-iop3xx.patch
Type: text/x-patch
Size: 1181 bytes
Desc: not available
Url : http://lists.lm-sensors.org/pipermail/lm-sensors/attachments/20060616/453289ad/attachment.bin 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [lm-sensors] PATCH- i2c-iop3xx platform driver avoid addressing
  2006-06-16 20:41 [lm-sensors] PATCH- i2c-iop3xx platform driver avoid addressing self Peter Milne
@ 2006-06-18  9:23 ` Jean Delvare
  2006-06-18 15:54 ` Peter Milne
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Jean Delvare @ 2006-06-18  9:23 UTC (permalink / raw)
  To: lm-sensors

Hi Peter,

> Avoid addressing self when sending a Master address. Follows instruction 
> in Intel 80331/80321 manuals.
> Ignoring this worked previously on 80321, but causes a hang on i2cdetect 
> on 80331

Can't you simply disable the slave address? You don't seem to use it
anyway.

BTW, you must be using an old version of i2cdetect, as the slave address
appears to be forced to 0x02 in the i2c-iop3xx driver (not a smart
choice...) and i2cdetect does no more scan this address by default.

> diff -uprN -X dontdiff linux-2.6.16.20/drivers/i2c/busses/i2c-iop3xx.h linux-2.6.16.20-iq80331/drivers/i2c/busses/i2c-iop3xx.h
> --- linux-2.6.16.20/drivers/i2c/busses/i2c-iop3xx.h	2006-06-05 18:18:23.000000000 +0100
> +++ linux-2.6.16.20-iq80331/drivers/i2c/busses/i2c-iop3xx.h	2006-06-16 12:20:07.000000000 +0100
> @@ -85,6 +85,7 @@
>  #define I2C_ERR			321
>  #define I2C_ERR_BERR		(I2C_ERR+0)
>  #define I2C_ERR_ALD		(I2C_ERR+1)
> +#define I2C_ERR_WRITEMYSAR      (I2C_ERR+10)

Please use tabs, not spaces, for alignment.

-- 
Jean Delvare


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [lm-sensors] PATCH- i2c-iop3xx platform driver avoid addressing
  2006-06-16 20:41 [lm-sensors] PATCH- i2c-iop3xx platform driver avoid addressing self Peter Milne
  2006-06-18  9:23 ` [lm-sensors] PATCH- i2c-iop3xx platform driver avoid addressing Jean Delvare
@ 2006-06-18 15:54 ` Peter Milne
  2006-06-18 18:45 ` Jean Delvare
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Peter Milne @ 2006-06-18 15:54 UTC (permalink / raw)
  To: lm-sensors

Hi Jean

Thanks very much for reviewing this patch, you have given me some useful 
insights.
Please consider the revised patch which addresses the issues you raise.

Jean Delvare wrote:

>Hi Peter,
>  
>
>>Avoid addressing self when sending a Master address. Follows instruction 
>>in Intel 80331/80321 manuals.
>>Ignoring this worked previously on 80321, but causes a hang on i2cdetect 
>>on 80331
>>    
>>
>
>Can't you simply disable the slave address? You don't seem to use it
>anyway.
>  
>
Unfortunately there doesn't seem to be any way to disable the slave address.

>BTW, you must be using an old version of i2cdetect, as the slave address
>appears to be forced to 0x02 in the i2c-iop3xx driver (not a smart
>choice...) and i2cdetect does no more scan this address by default.
>  
>
OK, new patch leaves the slave address at default 0.
I note that i2cdetect now scans from 0x3, but I'd still prefer to 
prevent writes to the device's own address since this wedges the unit.


>>+#define I2C_ERR_WRITEMYSAR      (I2C_ERR+10)
>>    
>>
>
>Please use tabs, not spaces, for alignment.
>  
>
After forcing emacs to cooperate, tabs it is.

Thanks


Peter.

-- 
Peter Milne			Peter.Milne at d-tacq.com
D-TACQ Solutions Ltd		www.d-tacq.com

-------------- next part --------------
A non-text attachment was scrubbed...
Name: i2c-iop3xx.2.patch
Type: text/x-patch
Size: 2430 bytes
Desc: not available
Url : http://lists.lm-sensors.org/pipermail/lm-sensors/attachments/20060618/4d1092ad/attachment.bin 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [lm-sensors] PATCH- i2c-iop3xx platform driver avoid addressing
  2006-06-16 20:41 [lm-sensors] PATCH- i2c-iop3xx platform driver avoid addressing self Peter Milne
  2006-06-18  9:23 ` [lm-sensors] PATCH- i2c-iop3xx platform driver avoid addressing Jean Delvare
  2006-06-18 15:54 ` Peter Milne
@ 2006-06-18 18:45 ` Jean Delvare
  2006-06-18 21:28 ` Peter Milne
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Jean Delvare @ 2006-06-18 18:45 UTC (permalink / raw)
  To: lm-sensors

Hi Peter,

> Thanks very much for reviewing this patch, you have given me some useful 
> insights.
> Please consider the revised patch which addresses the issues you raise.

My pleasure, here we go:

> > BTW, you must be using an old version of i2cdetect, as the slave address
> > appears to be forced to 0x02 in the i2c-iop3xx driver (not a smart
> > choice...) and i2cdetect does no more scan this address by default.
>
> OK, new patch leaves the slave address at default 0.

Huh, this might be worst :/ 0 is the "general call address", think of
it as a broadcast address. 2 is reserved for "CBUS compatibility"
(whatever it is.)

I would suggest 8, which is the "SMBus host" address in the SMBus spec
- unless you have to deal with multi-master busses where this address
might be already taken by another master.

Note that I have no strong opinion on this either, as long as nothing
breaks and you are happy...

> I note that i2cdetect now scans from 0x3, but I'd still prefer to 
> prevent writes to the device's own address since this wedges the unit.

Sure, I have no problem with this.

> @@ -243,12 +240,19 @@ iop3xx_i2c_wait_idle(struct i2c_algo_iop
>  
>  static int 
>  iop3xx_i2c_send_target_addr(struct i2c_algo_iop3xx_data *iop3xx_adap, 
> -				struct i2c_msg* msg)
> +			    struct i2c_msg* msg)
>  {

Please don't mix cleanups with real changes!

>  	unsigned long cr = __raw_readl(iop3xx_adap->ioaddr + CR_OFFSET);
>  	int status;
>  	int rc;
>  
> +	/* avoid writing to my slave address (hangs on 80331),
> +	 * forbidden in Intel developer manual
> +	 */
> +	if (msg->addr = MYSAR) {
> +		return -I2C_ERR_WRITEMYSAR;
> +	}
> +	

How will the address be reported by i2cdetect? As if there was no chip
there, I guess (XX)? I'm a bit worried about this, as someone might
then want to use the address for something else without realizing that
the address is already in use. Would it be possible to make it so that
the address would be reported as busy (UU)? I'm not too sure myself if
the i2c-core currently allows this, but I'd like you to investigate in
that direction as it might avoid trouble in the future. I guess the
only way right now would be to instanciante a fake client at that
address.

Thanks,
-- 
Jean Delvare


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [lm-sensors] PATCH- i2c-iop3xx platform driver avoid addressing
  2006-06-16 20:41 [lm-sensors] PATCH- i2c-iop3xx platform driver avoid addressing self Peter Milne
                   ` (2 preceding siblings ...)
  2006-06-18 18:45 ` Jean Delvare
@ 2006-06-18 21:28 ` Peter Milne
  2006-06-19 10:11 ` Jean Delvare
  2006-06-19 12:17 ` Peter Milne
  5 siblings, 0 replies; 7+ messages in thread
From: Peter Milne @ 2006-06-18 21:28 UTC (permalink / raw)
  To: lm-sensors

Hi Jean

Jean Delvare wrote:
<snip>

>>OK, new patch leaves the slave address at default 0.
>>    
>>
>
>Huh, this might be worst :/ 0 is the "general call address", think of
>it as a broadcast address. 2 is reserved for "CBUS compatibility"
>(whatever it is.)
>  
>
Sorry, I should have explained before, there is a bit set in the control 
register: IOP3XX_ICR_GCD - this according to the manual "disables i2c 
unit response to general call messages as a slave".

So it really shouldn't respond to an external master making a General 
Call, the issue I'm trying to avoid is the problem of addressing itself.

>I would suggest 8, which is the "SMBus host" address in the SMBus spec
>- unless you have to deal with multi-master busses where this address
>might be already taken by another master.
>
>Note that I have no strong opinion on this either, as long as nothing
>breaks and you are happy...
>  
>
Prefer to stick with zero, thanks, it works. I don't think anyone uses 
this device as a slave, but if they did, it would be easy to configure a 
valid address.

>  
>
>>I note that i2cdetect now scans from 0x3, but I'd still prefer to 
>>prevent writes to the device's own address since this wedges the unit.
>>    
>>
>
>Sure, I have no problem with this.
>
>  
>
>>@@ -243,12 +240,19 @@ iop3xx_i2c_wait_idle(struct i2c_algo_iop
>> 
>> static int 
>> iop3xx_i2c_send_target_addr(struct i2c_algo_iop3xx_data *iop3xx_adap, 
>>-				struct i2c_msg* msg)
>>+			    struct i2c_msg* msg)
>> {
>>    
>>
>
>Please don't mix cleanups with real changes!
>  
>
fixed in patch -

>  
>
>> 	unsigned long cr = __raw_readl(iop3xx_adap->ioaddr + CR_OFFSET);
>> 	int status;
>> 	int rc;
>> 
>>+	/* avoid writing to my slave address (hangs on 80331),
>>+	 * forbidden in Intel developer manual
>>+	 */
>>+	if (msg->addr = MYSAR) {
>>+		return -I2C_ERR_WRITEMYSAR;
>>+	}
>>+	
>>    
>>
>
>How will the address be reported by i2cdetect? As if there was no chip
>there, I guess (XX)? 
>
At zero, comes out as "XX" on the "old" i2cdetect, skipped in the new one.

>I'm a bit worried about this, as someone might
>then want to use the address for something else without realizing that
>the address is already in use. Would it be possible to make it so that
>the address would be reported as busy (UU)? I'm not too sure myself if
>the i2c-core currently allows this, but I'd like you to investigate in
>that direction as it might avoid trouble in the future. I guess the
>only way right now would be to instanciante a fake client at that
>address.
>  
>
The routine now returns -EBUSY, but i2cdetect still reports "XX". When I 
address it with another low level utility, it reports:
"Device or resource busy" - which is fair enough, the device is busy 
being a master so it cannot simultaneously be a slave ...

Maybe Intel knew what they were doing when they set 0 as the default 
slave address.
Because nobody is going to choose that as a real slave address, are they 
:-).

So, are we there with this patch now?

Thanks


Peter.

-- 
Peter Milne			Peter.Milne at d-tacq.com
D-TACQ Solutions Ltd		www.d-tacq.com

-------------- next part --------------
A non-text attachment was scrubbed...
Name: i2c-iop3xx.3.patch
Type: text/x-patch
Size: 2071 bytes
Desc: not available
Url : http://lists.lm-sensors.org/pipermail/lm-sensors/attachments/20060618/078c5765/attachment.bin 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [lm-sensors] PATCH- i2c-iop3xx platform driver avoid addressing
  2006-06-16 20:41 [lm-sensors] PATCH- i2c-iop3xx platform driver avoid addressing self Peter Milne
                   ` (3 preceding siblings ...)
  2006-06-18 21:28 ` Peter Milne
@ 2006-06-19 10:11 ` Jean Delvare
  2006-06-19 12:17 ` Peter Milne
  5 siblings, 0 replies; 7+ messages in thread
From: Jean Delvare @ 2006-06-19 10:11 UTC (permalink / raw)
  To: lm-sensors

Hi Peter,

> > How will the address be reported by i2cdetect? As if there was no chip
> > there, I guess (XX)? 
>
> At zero, comes out as "XX" on the "old" i2cdetect, skipped in the new one.

Just FYI, you can restore the old behavior of scanning all addresses
with the -a flag.

> > I'm a bit worried about this, as someone might
> > then want to use the address for something else without realizing that
> > the address is already in use. Would it be possible to make it so that
> > the address would be reported as busy (UU)? I'm not too sure myself if
> > the i2c-core currently allows this, but I'd like you to investigate in
> > that direction as it might avoid trouble in the future. I guess the
> > only way right now would be to instanciante a fake client at that
> > address.
>
> The routine now returns -EBUSY, but i2cdetect still reports "XX". When I 
> address it with another low level utility, it reports:
> "Device or resource busy" - which is fair enough, the device is busy 
> being a master so it cannot simultaneously be a slave ...

Indeed, the business of an I2C address for the i2c core is solely based
on the fact that a client claimed that address. The exact error value
returned by the transfer function is merely ignored as far as I can see.

> Maybe Intel knew what they were doing when they set 0 as the default 
> slave address.
> Because nobody is going to choose that as a real slave address, are they 
> :-).

Seems so.

> So, are we there with this patch now?

I'm happy with it, except for the lack of heading comment and
signed-off-by line. But I assumed that the ones from the original patch
still applied to this new one, and carried them over :)

-- 
Jean Delvare


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [lm-sensors] PATCH- i2c-iop3xx platform driver avoid addressing
  2006-06-16 20:41 [lm-sensors] PATCH- i2c-iop3xx platform driver avoid addressing self Peter Milne
                   ` (4 preceding siblings ...)
  2006-06-19 10:11 ` Jean Delvare
@ 2006-06-19 12:17 ` Peter Milne
  5 siblings, 0 replies; 7+ messages in thread
From: Peter Milne @ 2006-06-19 12:17 UTC (permalink / raw)
  To: lm-sensors

Hi Jean

Thanks very much for helping with the patch, I really appreciate your 
review, in particular for bringing up issues that weren't immediately 
obvious.

Cheers

Peter.


-- 
Peter Milne			Peter.Milne at d-tacq.com
D-TACQ Solutions Ltd		www.d-tacq.com



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2006-06-19 12:17 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-06-16 20:41 [lm-sensors] PATCH- i2c-iop3xx platform driver avoid addressing self Peter Milne
2006-06-18  9:23 ` [lm-sensors] PATCH- i2c-iop3xx platform driver avoid addressing Jean Delvare
2006-06-18 15:54 ` Peter Milne
2006-06-18 18:45 ` Jean Delvare
2006-06-18 21:28 ` Peter Milne
2006-06-19 10:11 ` Jean Delvare
2006-06-19 12:17 ` Peter Milne

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.