
Tolunay Orkun wrote:
This is probably not acceptable for cfi_flash.c. cfi_flash.c is used by multiple CPU architectures so PowerPC assembly cannot be used. You have to find a solution based on "C" only.
I think the best is to keep cfi_flash.c as is, and to copy it into /board/flash.c and made the changes for custom needs in that file, for the sake of keeping simplicity of generic drivers. But some descriptive warnings and comments may be added at the beggining of cfi_flash for possible non standart designs.
Tolunay Orkun wrote:
How did you use "double" and it did not work? Please give example of the work you tried...
First I had simply tried to cast data to double just before had been writing to the bus.
in cfi_flash.c on line850 (in flash_write_cmd()) - *addr.llp = cword.ll; + *addr.llp = (double) cword.ll;
But it caused a very strange think. While compiling it passed all the make steps (compiled, linked ...) but at the lines to generate srec and bin formatted files
(ppc_82xx-objcopy --gap-fill=0xff -O srec u-boot u-boot.srec, ppc_82xx-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin)
the host machine(the redhat WS 3.0 machine where I made the compilation) is locked. than I exclude these lines from the makefile planning to do the work from command prompth.
When I run the first line, It worked for a few minutes and produced an srec file of about 2 gigabytes length. (It might be bigger but stopped with an out of space error.) (ppc_82xx-objcopy --gap-fill=0xff -O srec u-boot u-boot.srec)
Then running the second line was completely locked the machine. I had had to hard reset it.
I couldn't find a resonable explanation for that circumstance.
Secondly I made some trials; Here is the code;
double doubleVar is defined.
doubleVar = 8245; printf("yio: size of double: %d, doubleVar1=%d:\n", sizeof(double), doubleVar); doubleVar = 1.25; printf("yio: doubleVar2=%f, %d:\n", sizeof(double), doubleVar, doubleVar); memcpy(&doubleVar, &cword.ll, 8); printf("yio: doubleVar3=%f, %d, 0x%08x:\n", sizeof(double), doubleVar, doubleVar, doubleVar);
printf("yio: Before bus write: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n", *addr.dp, cword.d, *addr.llp, cword.ll); *addr.dp = cword.d; printf("yio: After Bus write: 0x%08x, 0x%08x, 0x%08x, 0x%08x\n", *addr.dp, cword.d, *addr.llp, cword.ll);
and here is the console output.
fwrite addr ff040000 cmd 50 0050005000500050 64 bit x 16 bit yio: size of double: 8, doubleVar1=1086331520: yio: doubleVar2=%f, 8: yio: doubleVar3=%f, 8, 0x00500050: yio: Before bus write: 0x0000000a, 0x008000a2, 0x008000a2, 0x00500050 yio: After Bus write: 0x0000000a, 0xffff5678, 0xffff5678, 0x00500050
But I think, as Wolfgang mentioned, the problem is that; I ignored or frankly speaking didn't recognized -msoft-float option given to gcc. since -msoft-float is used, floating point instructions are not compiled as expected by gcc. (an example "%f" in printf is printed onto console as exactly "%f" :-) )
Tolunay Orkun wrote:
You can copy your intended data to the double variable via memcpy() or use a union of "long long" and "double", assign to "long long" member and use "double" one for storing.
Using double in a union is also a kind of casting. So it produced similar results. memcpy copies the data to where the double pointer points. But writing to the bus with double pointer will not change the result, because with -msoft-float option gcc will never use floating point asm instructions which are needed for single 64 bit bus transactions.
Tolunay Orkun wrote:
Please get this crap out of mails sent to public mailing lists. By sending to public lists you cannot make any claim confidentiality... If you have anything truely confidential do not expect others to protect it. Just do not send it to the public lists...
I'm really sorry but have nothing to do with these nonsense words at the end of my e-mails. They are automatically added by our mail monitor program. I have told to our network managers to define some rules not to add these words while sending to the public lists. But they told me that it's a company decision and they can't define such special exceptional rules in the system. And I have also no chance to use any other mail account, because all are prohibited and blocked. :-(
So, unfortunately I have to continue in that way :-( and want you to excuse me. List admins are always free to clip that part, before publishing the mail.
Regards. Yusuf.
###################################################################### Dikkat:
Bu elektronik posta mesaji kisisel ve ozeldir. Eger size gonderilmediyse lutfen gondericiyi bilgilendirip mesaji siliniz. Firmamiza gelen ve giden mesajlar virus taramasindan gecirilmekte, guvenlik nedeni ile kontrol edilerek saklanmaktadir. Mesajdaki gorusler ve bakis acisi gondericiye ait olup Aselsan A.S. resmi gorusu olmak zorunda degildir.
###################################################################### Attention:
This e-mail message is privileged and confidential. If you are not the intended recipient please delete the message and notify the sender. E-mails to and from the company are monitored for operational reasons and in accordance with lawful business practices. Any views or opinions presented are solely those of the author and do not necessarily represent the views of the company.
######################################################################