Usage of MTD_UADDR_UNNECESSARY broken?

Alexander Hoffmann ahoffmann at sysgo.de
Fri Nov 12 10:15:38 EST 2004


Hi Thayne,

sorry for the delayed response.

Thayne Harbaugh wrote:

>On Mon, 2004-11-08 at 13:55 +0100, Alexander Hoffmann wrote:
>  
>
>>Ben Dooks wrote:
>>
>>    
>>
>>>On Mon, Nov 08, 2004 at 12:54:16PM +0100, Alexander Hoffmann wrote:
>>>      
>>>
>>>>Hi everyone,
>>>>
>>>>can anybody please explain me the exact difference between 
>>>>MTD_UADDR_DONT_CARE and MTD_UADDR_UNNECESSARY .
>>>>Because if I use MTD_UADDR_UNNECESSARY an not existing field in the 
>>>>unlock_addrs array is beeing referenced
>>>>(/drivers/mtd/chips/jedec_probe.c, function cfi_jedec_setup, line 1740):
>>>>
>>>>/* Mask out address bits which are smaller than the device type */
>>>>mask = ~(p_cfi->device_type-1);
>>>>p_cfi->addr_unlock1 = unlock_addrs[uaddr].addr1 & mask;
>>>>p_cfi->addr_unlock2 = unlock_addrs[uaddr].addr2 & mask;
>>>>        
>>>>
>>>hmm, thought this masking had been eliminated in later copies of
>>>the mtd code?
>>>      
>>>
>
>Yes, the masking has been eliminated, but someone left the comment in
>(doh!).
>
>  
>
>>Ok, you are right. But this doesn't change the fact that
>>
>>unlock_addrs[uaddr].addr1
>>
>>refers to an nonexisting field in the unlock_addrs array.
>>    
>>
>
>I don't see how the code you that you described is being reached.  It
>looks like the start of jedec_probe_chip() checks for UNNECESSARY and
>returns 0 (although I would expect 1) and so cfi_jedec_setup() should
>never be called with UNNECESSARY (even for subsequent chips).
>
I am working with the cdb89712 development board from cirrus. This board 
has an "Intel 28F320B3B" chip
(device_id  =  0x8897). Apparently, jedec_probe() finds 
MTD_UADDR_0x0555_0x02AA.
for this chip, while the jedec_table[] specifies it as 
MTD_UADDR_UNNECESSARY.
Since the probed unlock type is overidden by the static one, the code 
_does_ reach
jedec_setup().

What I haven't really understood is this: if the code refuses chips of  
type UNNECESSARY
(the return code 0 from jedec_probe() is an error), then why are so many 
chips declared
as UNECESSARY in jedec_table[]?







More information about the linux-mtd mailing list