From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [61.152.162.159] (helo=ms.usish.com) by canuck.infradead.org with esmtps (Exim 4.54 #1 (Red Hat Linux)) id 1FKPxG-0008Cp-Ht for linux-mtd@lists.infradead.org; Fri, 17 Mar 2006 20:10:16 -0500 Received: from inbound.usish.com (inbound.usish.com [192.168.40.102]) by ms.usish.com (8.12.11/8.12.11) with ESMTP id k2I18xZ1027296 for ; Sat, 18 Mar 2006 09:08:59 +0800 Received: from inbound.usish.com (localhost.localdomain [127.0.0.1]) by inbound.usish.com (8.12.11/8.12.11) with ESMTP id k2I15n67021686 for ; Sat, 18 Mar 2006 09:05:49 +0800 Received: from IT0010600 ([218.79.184.197]) (authenticated bits=0) by inbound.usish.com (8.12.11/8.12.11) with ESMTP id k2I15ndK021680 (version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO) for ; Sat, 18 Mar 2006 09:05:49 +0800 From: "Jason Chen" To: Message-ID: <001e01c64a28$a55fe3f0$6601a8c0@IT0010600> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_001F_01C64A6B.B38323F0" Subject: CFI 1.4 intel cmdset in linux-2.4.21 List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Date: Sat, 18 Mar 2006 01:10:20 -0000 This is a multi-part message in MIME format. ------=_NextPart_000_001F_01C64A6B.B38323F0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi, all, I am trying to use cfi 1.4 in linux-2.4.21(use Intel P30 strata flash), as I find in datasheet, Intel extended query structure is almost the same in CFI 1.3 & 1.4. So I just modified some code about CFI MinorVersion's judgement in cfi_cmdset_0001.c and cfi_cmdset_0001.h: I got CFI_QUERY_SIZE as 36, and I can read the MajorVersion, MinorVersion etc in the query, but the number of device hard-partition always read as zero. What happened? What should I do to solve this issue? in cfi_cmdset_0001.h: .. #define CFI_READ_QUERY(map, base, adr, extp, size) \ do { \ struct cfi_private *__cfi = map->fldrv_priv; \ int __ofs_factor = __cfi->interleave * __cfi->device_type; \ int __i; \ for (__i=0; __i<(size); __i++) \ ((unsigned char*)(extp))[__i] = \ cfi_read_query(map, (base+(((adr)+__i)*__ofs_factor))); \ }while(0); #define CFI_QUERY_SIZE(map, base, adr) ({ \ struct cfi_private *__cfi = map->fldrv_priv; \ int __ofs_factor = __cfi->interleave * __cfi->device_type; \ struct cfi_pri_intelext __ext; \ struct cfi_intelext_regioninfo __rinfo; \ int __ofs = 0, __num_r, __ri; \ CFI_READ_QUERY(map, base, adr, (&__ext), sizeof(__ext)); \ __ofs += sizeof(__ext); \ if (__ext.MajorVersion == '1' && ((__ext.MinorVersion == '3') || (__ext.MinorVersion == '4'))) { \ __ofs += (__ext.NumProtectionFields - 1) * (sizeof(__u32) + 6); \ __ofs += 6; \ __num_r = cfi_read_query(map, (base + ((adr+__ofs)*__ofs_factor))); \ __ofs ++; \ for (__ri=0; __ri < __num_r; __ri++) { \ CFI_READ_QUERY(map, base, adr+__ofs, (&__rinfo), sizeof(__rinfo)); \ __ofs += sizeof(__rinfo); \ __ofs += (__rinfo.NumBlockTypes - 1) * sizeof(struct cfi_intelext_blockinfo); \ } \ } \ __ofs; \ }) .. ------=_NextPart_000_001F_01C64A6B.B38323F0 Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

Hi, all,

I am trying to use cfi 1.4 = in linux-2.4.21(use Intel P30 strata = flash), as I find in datasheet, Intel extended query structure is almost the same in = CFI 1.3 & 1.4.

So I just modified some code about CFI MinorVersion’s judgement in cfi_cmdset_0001.c and cfi_cmdset_0001.h:

 

I got CFI_QUERY_SIZE as 36, and I can read the = MajorVersion, MinorVersion etc in the query, but the number = of device hard-partition always read as zero.

 

What happened? What should I do to solve this = issue?

 

in cfi_cmdset_0001.h:

….

#define CFI_READ_QUERY(map, base, adr, extp, size) = \

do {  \

     = ;    struct cfi_private *__cfi =3D map->fldrv_priv; = \

     = ;    int __ofs_factor =3D __cfi->interleave * __cfi->device_type; = \

     = ;    int __i; \

     = ;    for (__i=3D0; __i<(size); __i++)  \

     = ;            =   ((unsigned char*)(extp))[__i] =3D  \

     = ;            =            = cfi_read_query(map, (base+(((adr)+__i)*__ofs_factor))); \

}while(0);

 

#define CFI_QUERY_SIZE(map, base, adr) ({ \

     = ;    struct cfi_private *__cfi =3D map->fldrv_priv; = \

     = ;    int __ofs_factor =3D __cfi->interleave * __cfi->device_type; = \

     = ;    struct cfi_pri_intelext __ext; \

     = ;    struct cfi_intelext_regioninfo __rinfo; \

     = ;    int __ofs =3D 0, __num_r, __ri; \

     = ;    CFI_READ_QUERY(map, base, adr, (&__ext), sizeof(__ext)); \

     = ;    __ofs +=3D sizeof(__ext); \

     = ;    if (__ext.MajorVersion =3D=3D '1' && ((__ext.MinorVersion =3D=3D = '3') || (__ext.MinorVersion =3D=3D '4'))) = { \

     = ;            =   __ofs +=3D (__ext.NumProtectionFields - 1) * (sizeof(__u32) + 6); = \

     = ;            =   __ofs +=3D 6; \

     = ;            =   __num_r =3D cfi_read_query(map, (base + ((adr+__ofs)*__ofs_factor))); = \

     = ;            =   __ofs ++; \

     = ;            =   for (__ri=3D0; __ri < __num_r; __ri++) { \

     = ;            =            = CFI_READ_QUERY(map, base, adr+__ofs, (&__rinfo), sizeof(__rinfo)); = \

     = ;            =            __ofs +=3D sizeof(__rinfo); \

     = ;            =            __ofs +=3D (__rinfo.NumBlockTypes - 1) * sizeof(struct = cfi_intelext_blockinfo); \

     = ;            =   } \

     = ;    } \

     = ;    __ofs; \

})

….

 

 

 

------=_NextPart_000_001F_01C64A6B.B38323F0--