From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from ns.sysgo.de ([213.68.67.98] helo=mailgate.sysgo.de) by canuck.infradead.org with esmtp (Exim 4.42 #1 (Red Hat Linux)) id 1CSd9Q-0001wj-G6 for linux-mtd@lists.infradead.org; Fri, 12 Nov 2004 10:15:50 -0500 Message-ID: <4194D39A.9000700@sysgo.de> Date: Fri, 12 Nov 2004 16:15:38 +0100 From: Alexander Hoffmann MIME-Version: 1.0 To: linux-mtd@lists.infradead.org References: <418F5E68.3010200@sysgo.de> <20041108120624.GE13105@home.fluff.org> <418F6CA7.6000808@sysgo.de> <1099943453.10812.16.camel@tubarao> In-Reply-To: <1099943453.10812.16.camel@tubarao> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: eauth@softsys.co.at, tharbaugh@lnxi.com Subject: Re: Usage of MTD_UADDR_UNNECESSARY broken? List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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[]?