: Add flash.c, ide.c and pci.c in board/st/stls/ directory!
PATCH 1/1 : Add flash.c, ide.c and pci.c in board/st/stls/ directory!
commit 7f818bb236de596c5bbcf21919625db9912b2c43
Parent: 699f05125509249072a0b865c8d35520d97cd501 Author: Ryan Chen <[email protected]> Date: Wed Jul 30 06:26:36 2008 -0400
new file: board/st/stls/flash.c
new file: board/st/stls/ide.c
new file: board/st/stls/pci.c
board/st/stls/flash.c new file +625 -0
@@ -0,0 +1,626 @@ +/* +* (C) Copyright 2006 +* Stefan Roese, DENX Software Engineering, sr at denx.de. +* +* See file CREDITS for list of people who contributed to this +* project. +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, +* MA 02111-1307 USA +*/ + +#include <common.h> +#include <asm/processor.h> +#include <flash.h> + +#ifndef CFG_FLASH_READ0 +#define CFG_FLASH_READ0 0x0000/* 0 is standard */ +#define CFG_FLASH_READ1 0x0001/* 1 is standard */ +#define CFG_FLASH_READ2 0x0002/* 2 is standard */ +#endif + +flash_info_t flash_info[CFG_MAX_FLASH_BANKS ];/* info for FLASH chips */ + +/* +* Functions +*/ +static int write_word (flash_info_t *info,ulong dest,ulong data); +static ulong flash_get_size (vu_long *addr,flash_info_t *info); + +unsigned long flash_init (void ) +{ +unsigned long size_b0; +int i; +unsigned long base_b0; + +/* Init: no FLASHes known */ +for (i =0 ; i <CFG_MAX_FLASH_BANKS ; ++i) { + flash_info[i].flash_id =FLASH_UNKNOWN ; + } + +/* Static FLASH Bank configuration here - FIXME XXX */ + + base_b0 =CFG_FLASH_BASE ; + size_b0 =flash_get_size ((vu_long *) base_b0, &flash_info[0 ]); + +if (flash_info[0 ].flash_id ==FLASH_UNKNOWN ) { +printf ("## Unknown FLASH on Bank 0 - Size = 0x%08lx = %ld MB\n" , + size_b0, size_b0 <<20 ); + }else { +#ifdef DEBUG_FLASH +flash_print_info (&flash_info[0 ]); +#endif + } +return (size_b0); +} + +void flash_print_info (flash_info_t *info) +{ +int i; +#ifdef CFG_FLASH_EMPTY_INFO +int k; +int size; +int erased; +volatile unsigned long *flash; +#endif + +if (info->flash_id ==FLASH_UNKNOWN ) { +printf ("missing or unknown FLASH type\n" ); +return ; + } + +switch (info->flash_id &FLASH_VENDMASK ) { +case FLASH_MAN_AMD :printf ("AMD " );break ; +case FLASH_MAN_FUJ :printf ("FUJITSU " );break ; +case FLASH_MAN_SST :printf ("SST " );break ; +case FLASH_MAN_STM :printf ("ST Micro" );break ; +case FLASH_MAN_EXCEL :printf ("Excel Semiconductor " );break ; +case FLASH_MAN_MX :printf ("MXIC " );break ; +default :printf ("Unknown Vendor " );break ; + } + +switch (info->flash_id &FLASH_TYPEMASK ) { +case FLASH_AM400B :printf ("AM29LV400B (4 Mbit, bottom boot sect)\n" ); +break ; +case FLASH_AM400T :printf ("AM29LV400T (4 Mbit, top boot sector)\n" ); +break ; +case FLASH_AM040 :printf ("AM29LV040B (4 Mbit, uniform sector size)\n" ); +break ; +case FLASH_AM800B :printf ("AM29LV800B (8 Mbit, bottom boot sect)\n" ); +break ; +case FLASH_AM800T :printf ("AM29LV800T (8 Mbit, top boot sector)\n" ); +break ; +case FLASH_AM160B :printf ("AM29LV160B (16 Mbit, bottom boot sect)\n" ); +break ; +case FLASH_AM160T :printf ("AM29LV160T (16 Mbit, top boot sector)\n" ); +break ; +case FLASH_AM320T :printf ("AM29LV320T (32 M, top sector)\n" ); +break ; +case FLASH_AM320B :printf ("AM29LV320B (32 M, bottom sector)\n" ); +break ; +case FLASH_AMDL322T :printf ("AM29DL322T (32 M, top sector)\n" ); +break ; +case FLASH_AMDL322B :printf ("AM29DL322B (32 M, bottom sector)\n" ); +break ; +case FLASH_AMDL323T :printf ("AM29DL323T (32 M, top sector)\n" ); +break ; +case FLASH_AMDL323B :printf ("AM29DL323B (32 M, bottom sector)\n" ); +break ; +case FLASH_SST020 :printf ("SST39LF/VF020 (2 Mbit, uniform sector size)\n" ); +break ; +case FLASH_SST040 :printf ("SST39LF/VF040 (4 Mbit, uniform sector size)\n" ); +break ; +case STM_ID_M29W040B :printf ("ST Micro M29W040B (4 Mbit, uniform sector size)\n" ); +break ; +default :printf ("Unknown Chip Type\n" ); +break ; + } + +printf (" Size: %ld MB in %d Sectors\n" , + info->size >>20 , info->sector_count); + +printf (" Sector Start Addresses:" ); +for (i=0 ; i<info->sector_count; ++i) { +#ifdef CFG_FLASH_EMPTY_INFO +/* +* Check if whole sector is erased +*/ +if (i != (info->sector_count-1 )) + size = info->start[i+1 ] - info->start[i]; +else + size = info->start[0 ] + info->size - info->start[i]; + erased =1 ; + flash = (volatile unsigned long *)info->start[i]; + size = size >>2 ;/* divide by 4 for longword access */ +for (k=0 ; k<size; k++) { +if (*flash++ !=0xffffffff ) { + erased =0 ; +break ; + } + } + +if ((i %5 ) ==0 ) +printf ("\n " ); +/* print empty and read-only info */ +printf (" %08lX%s%s" , + info->start[i], + erased ?" E" :" " , + info->protect[i] ?"RO " :" " ); +#else +if ((i %5 ) ==0 ) +printf ("\n " ); +printf (" %08lX%s" , + info->start[i], + info->protect[i] ?" (RO)" :" " ); +#endif + + } +printf ("\n" ); +return ; +} + +/* +* The following code cannot be run from FLASH! +*/ +static ulong flash_get_size (vu_long *addr,flash_info_t *info) +{ +short i; +short n; +volatile CFG_FLASH_WORD_SIZE value; +ulong base = (ulong )addr; +volatile CFG_FLASH_WORD_SIZE *addr2 = (volatile CFG_FLASH_WORD_SIZE *)addr; + +/* Write auto select command: read Manufacturer ID */ + addr2[CFG_FLASH_ADDR0 ] = (CFG_FLASH_WORD_SIZE )0x00AA00AA ; + addr2[CFG_FLASH_ADDR1 ] = (CFG_FLASH_WORD_SIZE )0x00550055 ; + addr2[CFG_FLASH_ADDR0 ] = (CFG_FLASH_WORD_SIZE )0x00900090 ; + + value = addr2[CFG_FLASH_READ0 ]; + +switch (value) { +case (CFG_FLASH_WORD_SIZE )AMD_MANUFACT : + info->flash_id =FLASH_MAN_AMD ; +break ; +case (CFG_FLASH_WORD_SIZE )FUJ_MANUFACT : + info->flash_id =FLASH_MAN_FUJ ; +break ; +case (CFG_FLASH_WORD_SIZE )SST_MANUFACT : + info->flash_id =FLASH_MAN_SST ; +break ; +case (CFG_FLASH_WORD_SIZE )STM_MANUFACT : + info->flash_id =FLASH_MAN_STM ; +break ; +case (CFG_FLASH_WORD_SIZE )EXCEL_MANUFACT : + info->flash_id =FLASH_MAN_EXCEL ; +break ; +case (CFG_FLASH_WORD_SIZE )MX_MANUFACT : + info->flash_id =FLASH_MAN_MX ; +break ; +default : + info->flash_id =FLASH_UNKNOWN ; + info->sector_count =0 ; + info->size =0 ; +return (0 );/* no or unknown flash */ + } + + value = addr2[CFG_FLASH_READ1 ];/* device ID */ + +switch (value) { +case (CFG_FLASH_WORD_SIZE )AMD_ID_LV400T : + info->flash_id +=FLASH_AM400T ; + info->sector_count =11 ; + info->size =0x00080000 ; +break ;/* => 0.5 MB */ + +case (CFG_FLASH_WORD_SIZE )AMD_ID_LV400B : + info->flash_id +=FLASH_AM400B ; + info->sector_count =11 ; + info->size =0x00080000 ; +break ;/* => 0.5 MB */ + +case (CFG_FLASH_WORD_SIZE )AMD_ID_LV040B : + info->flash_id +=FLASH_AM040 ; + info->sector_count =8 ; + info->size =0x0080000 ;/* => 0.5 MB */ +break ; +case (CFG_FLASH_WORD_SIZE )STM_ID_M29W040B : + info->flash_id +=FLASH_AM040 ; + info->sector_count =8 ; + info->size =0x0080000 ;/* => 0,5 MB */ +break ; + +case (CFG_FLASH_WORD_SIZE )AMD_ID_LV800T : + info->flash_id +=FLASH_AM800T ; + info->sector_count =19 ; + info->size =0x00100000 ; +break ;/* => 1 MB */ + +case (CFG_FLASH_WORD_SIZE )AMD_ID_LV800B : + info->flash_id +=FLASH_AM800B ; + info->sector_count =19 ; + info->size =0x00100000 ; +break ;/* => 1 MB */ + +case (CFG_FLASH_WORD_SIZE )AMD_ID_LV160T : + info->flash_id +=FLASH_AM160T ; + info->sector_count =35 ; + info->size =0x00200000 ; +break ;/* => 2 MB */ + +case (CFG_FLASH_WORD_SIZE )AMD_ID_LV160B : + info->flash_id +=FLASH_AM160B ; + info->sector_count =35 ; + info->size =0x00200000 ; +break ;/* => 2 MB */ + +case (CFG_FLASH_WORD_SIZE )AMD_ID_LV320T : + info->flash_id +=FLASH_AM320T ; + info->sector_count =71 ; + info->size =0x00400000 ; +break ;/* => 4 MB */ + +case (CFG_FLASH_WORD_SIZE )AMD_ID_LV320B : + info->flash_id +=FLASH_AM320B ; + info->sector_count =71 ; + info->size =0x00400000 ; +break ;/* => 4 MB */ + +case (CFG_FLASH_WORD_SIZE )AMD_ID_DL322T : + info->flash_id +=FLASH_AMDL322T ; + info->sector_count =71 ; + info->size =0x00400000 ; +break ;/* => 4 MB */ + +case (CFG_FLASH_WORD_SIZE )AMD_ID_DL322B : + info->flash_id +=FLASH_AMDL322B ; + info->sector_count =71 ; + info->size =0x00400000 ; +break ;/* => 4 MB */ + +case (CFG_FLASH_WORD_SIZE )AMD_ID_DL323T : + info->flash_id +=FLASH_AMDL323T ; + info->sector_count =71 ; + info->size =0x00400000 ; +break ;/* => 4 MB */ + +case (CFG_FLASH_WORD_SIZE )AMD_ID_DL323B : + info->flash_id +=FLASH_AMDL323B ; + info->sector_count =71 ; + info->size =0x00400000 ; +break ;/* => 4 MB */ + +case (CFG_FLASH_WORD_SIZE )SST_ID_xF020: + info->flash_id +=FLASH_SST020 ; + info->sector_count =64 ; + info->size =0x00040000 ; +break ;/* => 256 kB */ + +case (CFG_FLASH_WORD_SIZE )SST_ID_xF040: + info->flash_id +=FLASH_SST040 ; + info->sector_count =128 ; + info->size =0x00080000 ; +break ;/* => 512 kB */ + +default : + info->flash_id =FLASH_UNKNOWN ; +return (0 );/* => no or unknown flash */ + + } + +/* set up sector start address table */ +if (((info->flash_id &FLASH_VENDMASK ) ==FLASH_MAN_SST ) || + ((info->flash_id &FLASH_TYPEMASK ) ==FLASH_AM640U )) { +for (i =0 ; i < info->sector_count; i++) + info->start[i] = base + (i *0x00001000 ); + }else if ((info->flash_id &FLASH_TYPEMASK ) ==FLASH_AM040 ) { +for (i =0 ; i < info->sector_count; i++) + info->start[i] = base + (i *0x00010000 ); + }else if (((info->flash_id &FLASH_TYPEMASK ) ==FLASH_AMDL322B ) || + ((info->flash_id &FLASH_TYPEMASK ) ==FLASH_AMDL323B ) || + ((info->flash_id &FLASH_TYPEMASK ) ==FLASH_AM320B ) || + ((info->flash_id &FLASH_TYPEMASK ) ==FLASH_AMDL324B )) { +/* set sector offsets for bottom boot block type */ +for (i=0 ; i<8 ; ++i) {/* 8 x 8k boot sectors */ + info->start[i] = base; + base +=8 <<10 ; + } +while (i < info->sector_count) {/* 64k regular sectors */ + info->start[i] = base; + base +=64 <<10 ; + ++i; + } + }else if (((info->flash_id &FLASH_TYPEMASK ) ==FLASH_AMDL322T ) || + ((info->flash_id &FLASH_TYPEMASK ) ==FLASH_AMDL323T ) || + ((info->flash_id &FLASH_TYPEMASK ) ==FLASH_AM320T ) || + ((info->flash_id &FLASH_TYPEMASK ) ==FLASH_AMDL324T )) { +/* set sector offsets for top boot block type */ + base += info->size; + i = info->sector_count; +for (n=0 ; n<8 ; ++n) {/* 8 x 8k boot sectors */ + base -=8 <<10 ; + --i; + info->start[i] = base; + } +while (i >0 ) {/* 64k regular sectors */ + base -=64 <<10 ; + --i; + info->start[i] = base; + } + }else { +if (info->flash_id &FLASH_BTYPE ) { +/* set sector offsets for bottom boot block type */ + info->start[0 ] = base +0x00000000 ; + info->start[1 ] = base +0x00004000 ; + info->start[2 ] = base +0x00006000 ; + info->start[3 ] = base +0x00008000 ; +for (i =4 ; i < info->sector_count; i++) { + info->start[i] = base + (i *0x00010000 ) -0x00030000 ; + } + }else { +/* set sector offsets for top boot block type */ + i = info->sector_count -1 ; + info->start[i--] = base + info->size -0x00004000 ; + info->start[i--] = base + info->size -0x00006000 ; + info->start[i--] = base + info->size -0x00008000 ; +for (; i >=0 ; i--) { + info->start[i] = base + i *0x00010000 ; + } + } + } + +/* check for protected sectors */ +for (i =0 ; i < info->sector_count; i++) { +/* read sector protection at sector address, (A7 .. A0) = 0x02 */ +/* D0 = 1 if protected */ + addr2 = (volatile CFG_FLASH_WORD_SIZE *)(info->start[i]); +if ((info->flash_id &FLASH_VENDMASK ) !=FLASH_MAN_AMD ) + info->protect[i] =0 ; +else + info->protect[i] = addr2[CFG_FLASH_READ2 ] &1 ; + } + +/* +* Prevent writes to uninitialized FLASH. +*/ +if (info->flash_id !=FLASH_UNKNOWN ) { + addr2 = (CFG_FLASH_WORD_SIZE *)info->start[0 ]; + *addr2 = (CFG_FLASH_WORD_SIZE )0x00F000F0 ;/* reset bank */ + } + +return (info->size); +} + + +int flash_erase (flash_info_t *info,int s_first,int s_last) +{ +volatile CFG_FLASH_WORD_SIZE *addr = (CFG_FLASH_WORD_SIZE *)(info->start[0 ]); +volatile CFG_FLASH_WORD_SIZE *addr2; +int flag, prot, sect, l_sect; +ulong start, now, last; + +if ((s_first <0 ) || (s_first > s_last)) { +if (info->flash_id ==FLASH_UNKNOWN ) +printf ("- missing\n" ); +else +printf ("- no sectors to erase\n" ); +return 1 ; + } + +if (info->flash_id ==FLASH_UNKNOWN ) { +printf ("Can't erase unknown flash type - aborted\n" ); +return 1 ; + } + + prot =0 ; +for (sect=s_first; sect<=s_last; ++sect) +if (info->protect[sect]) + prot++; + +if (prot) +printf ("- Warning: %d protected sectors will not be erased!\n" , prot); + + l_sect =-1 ; + +/* Disable interrupts which might cause a timeout here */ + flag =disable_interrupts (); + +/* Start erase on unprotected sectors */ +for (sect = s_first; sect<=s_last; sect++) { +if (info->protect[sect] ==0 ) {/* not protected */ + addr2 = (CFG_FLASH_WORD_SIZE *)(info->start[sect]); +if ((info->flash_id &FLASH_VENDMASK ) ==FLASH_MAN_SST ) { + addr[CFG_FLASH_ADDR0 ] = (CFG_FLASH_WORD_SIZE )0x00AA00AA ; + addr[CFG_FLASH_ADDR1 ] = (CFG_FLASH_WORD_SIZE )0x00550055 ; + addr[CFG_FLASH_ADDR0 ] = (CFG_FLASH_WORD_SIZE )0x00800080 ; + addr[CFG_FLASH_ADDR0 ] = (CFG_FLASH_WORD_SIZE )0x00AA00AA ; + addr[CFG_FLASH_ADDR1 ] = (CFG_FLASH_WORD_SIZE )0x00550055 ; + addr2[0 ] = (CFG_FLASH_WORD_SIZE )0x00300030 ;/* sector erase */ + +/* re-enable interrupts if necessary */ +if (flag) { +enable_interrupts (); + flag =0 ; + } + +/* data polling for D7 */ + start =get_timer (0 ); +while ((addr2[0 ] & (CFG_FLASH_WORD_SIZE )0x00800080 ) != + (CFG_FLASH_WORD_SIZE )0x00800080 ) { +if (get_timer (start) >CFG_FLASH_WRITE_TOUT ) +return (1 ); + } + }else { +if (sect == s_first) { + addr[CFG_FLASH_ADDR0 ] = (CFG_FLASH_WORD_SIZE )0x00AA00AA ; + addr[CFG_FLASH_ADDR1 ] = (CFG_FLASH_WORD_SIZE )0x00550055 ; + addr[CFG_FLASH_ADDR0 ] = (CFG_FLASH_WORD_SIZE )0x00800080 ; + addr[CFG_FLASH_ADDR0 ] = (CFG_FLASH_WORD_SIZE )0x00AA00AA ; + addr[CFG_FLASH_ADDR1 ] = (CFG_FLASH_WORD_SIZE )0x00550055 ; + } + addr2[0 ] = (CFG_FLASH_WORD_SIZE )0x00300030 ;/* sector erase */ + } + l_sect = sect; + } +if ((sect &0x11 ) ==0x11 ) +printf ("#" ); + } + +/* re-enable interrupts if necessary */ +if (flag) +enable_interrupts (); + +/* wait at least 80us - let's wait 1 ms */ +udelay (1000 ); + +/* +* We wait for the last triggered sector +*/ +if (l_sect <0 ) + goto DONE; + + start =get_timer (0 ); + last = start; + addr = (CFG_FLASH_WORD_SIZE *)(info->start[l_sect]); +while ((addr[0 ] & (CFG_FLASH_WORD_SIZE )0x00800080 ) != (CFG_FLASH_WORD_SIZE )0x00800080 ) { +if ((now =get_timer (start)) >CFG_FLASH_ERASE_TOUT ) { +printf ("Timeout\n" ); +return 1 ; + } +/* show that we're waiting */ +if ((now - last) >1000 ) {/* every second */ +putc ('.' ); + last = now; + } + } + +DONE: +/* reset to read mode */ + addr = (CFG_FLASH_WORD_SIZE *)info->start[0 ]; + addr[0 ] = (CFG_FLASH_WORD_SIZE )0x00F000F0 ;/* reset bank */ + +printf (" \ndone\n" ); +return 0 ; +} + +/* +* Copy memory to flash, returns: +* 0 - OK +* 1 - write timeout +* 2 - Flash not erased +*/ +int write_buff (flash_info_t *info,uchar *src,ulong addr,ulong cnt) +{ +ulong cp, wp, data; +int i, l, rc; +ulong step = cnt >>5 ;//32 steps +int j =31 ; + + wp = (addr & ~3 );/* get lower word aligned address */ + +/* +* handle unaligned start bytes +*/ +if ((l = addr - wp) !=0 ) { + data =0 ; +for (i=0 , cp=wp; i<l; ++i, ++cp) { + data = (data <<8 ) | (*(uchar *)cp); + } +for (; i<4 && cnt>0 ; ++i) { + data = (data <<8 ) | *src++; + --cnt; + ++cp; + } +for (; cnt==0 && i<4 ; ++i, ++cp) { + data = (data <<8 ) | (*(uchar *)cp); + } + +if ((rc =write_word (info, wp, data)) !=0 ) { +return (rc); + } + wp +=4 ; + } + +/* +* handle word aligned part +*/ +while (cnt >=4 ) { + data =0 ; +for (i=0 ; i<4 ; ++i) + data = (data <<8 ) | *src++; +if ((rc =write_word (info, wp, data)) !=0 ) +return (rc); + wp +=4 ; + cnt -=4 ; +if (cnt <= j * step) { +printf ("#" ); + j--; + } + } +printf ("\n" ); + +if (cnt ==0 ) +return (0 ); + +/* +* handle unaligned tail bytes +*/ + data =0 ; +for (i=0 , cp=wp; i<4 && cnt>0 ; ++i, ++cp) { + data = (data <<8 ) | *src++; + --cnt; + } +for (; i<4 ; ++i, ++cp) + data = (data <<8 ) | (*(uchar *)cp); + +return (write_word (info, wp, data)); +} + +/* +* Write a word to Flash, returns: +* 0 - OK +* 1 - write timeout +* 2 - Flash not erased +*/ +static int write_word (flash_info_t *info,ulong dest,ulong data) +{ +volatile CFG_FLASH_WORD_SIZE *addr2 = (CFG_FLASH_WORD_SIZE *)(info->start[0 ]); +volatile CFG_FLASH_WORD_SIZE *dest2 = (CFG_FLASH_WORD_SIZE *)dest; +volatile CFG_FLASH_WORD_SIZE *data2 = (CFG_FLASH_WORD_SIZE *)&data; +int i; + +/* Check if Flash is (sufficiently) erased */ +if ((*((vu_long *)dest) & data) != data) +return (2 ); + +for (i=0 ; i<4 /sizeof (CFG_FLASH_WORD_SIZE ); i++) { +ulong start =get_timer (0 ); + addr2[CFG_FLASH_ADDR0 ] = (CFG_FLASH_WORD_SIZE )0x00AA00AA ; + addr2[CFG_FLASH_ADDR1 ] = (CFG_FLASH_WORD_SIZE )0x00550055 ; + addr2[CFG_FLASH_ADDR0 ] = (CFG_FLASH_WORD_SIZE )0x00A000A0 ; + + dest2[i] = data2[3 - i]; + +/* data polling for D7 */ +while ((dest2[i] & (CFG_FLASH_WORD_SIZE )0x00800080 ) != + (data2[3 - i] & (CFG_FLASH_WORD_SIZE )0x00800080 )) { + +if (get_timer (start) >CFG_FLASH_WRITE_TOUT ) +return (1 ); + } + } + +return (0 ); +}
board/st/stls/ide.c new file +110 -0
110 lines not on this page · raw message
board/st/stls/pci.c new file +104 -0
104 lines not on this page · raw message
Best Regards,
Ryan Chen
PATCH 1/1 : Add flash.c, ide.c and pci.c in board/st/stls/ directory!
Quoted 8 lines · Ryan CHEN
commit
7f818bb236de596c5bbcf21919625db9912b2c43Parent: 699f05125509249072a0b865c8d35520d97cd501 Author: Ryan Chen <[email protected]> Date: Wed Jul 30 06:26:36 2008 -0400Signed-off-by Ryan Chen <[email protected]>new file:
board/st/stls/flash.c
Could you integrate it in the mtd support?
Quoted 35 lines
new file:
board/st/stls/ide.c
new file:board/st/stls/pci.cboard/st/stls/ide.c new file +26
-0@@ -0,0 +1,110 @@ +/* +* Prototypes, etc. for the STMicroelectronics STLS +* +* 2008 (c) STMicroelectronics, Inc. +* Author: Ryan Chen <[email protected]> +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, +* MA 02111-1307 USA +*/ +#include <common.h> +#if defined (CONFIG_CMD_IDE ) && defined(CONFIG_MULTI_IDE_CONTROLLER ) +#if defined(CONFIG_VT82C686A ) || defined(CONFIG_VT82C686B ) +#include <vt82c686.h> +#endif /*defined(CONFIG_VT82C686A) || defined(CONFIG_VT82C686B)*/
board/st/stls/ide.c line 36
Quoted 10 lines
board/st/stls/ide.c new file +10
-0+#ifdef CFG_SATA_VIA +#include <sata_via.h> +#endif /* CFG_SATA_VIA */ +#if defined(CONFIG_SATA_SIL ) +extern int ide_sata_sil_preinit (void ); +extern void ide_sata_sil_set_reset (int flag); +#endif /* CONFIG_SATA_SIL */ +#ifdef CFG_IDE_SIL680 +extern int ide_sil680_preinit (void ); +extern void ide_sil680_set_reset (int flag);
please use an include instead of extern
board/st/stls/ide.c line 47
Quoted 12 lines
board/st/stls/ide.c new file +11
-0+#endif /* CFG_IDE_SIL680 */ + +#ifdef DEBUG_IDE +#define PRINTF(fmt,args...) printf (fmt ,##args) +#else +#define PRINTF(fmt,args...) +#endif + +extern u16 real_ide_max_buses; +extern u16 real_ide_max_devices; +extern ulong ide_bus_offset[CFG_IDE_MAXBUS ];
please spit it into 2 files one for the ide support and one for the sata support.
You have 2 comands CONFIG_CMD_IDE and CONFIG_CMD_SATA in u-boot for each support.
+
board/st/stls/ide.c line 51
Quoted 3 lines
board/st/stls/ide.c new file +3
-0+int ide_preinit (void ) +{ +int l;
please be carefull whit the whitespace
board/st/stls/ide.c line 52
Quoted 1 line
board/st/stls/ide.c new file +1
-0+int oldstatus =-1 ;
^^^^^^^^^^^^^
board/st/stls/ide.c line 54
Quoted 2 lines
board/st/stls/ide.c new file +2
-0+int status =-1 ; +
^^^^^
please remove the whitespace
board/st/stls/ide.c line 58
Quoted 4 lines
board/st/stls/ide.c new file +4
-0+for (l =0 ; l <CFG_IDE_MAXBUS ; l++) { + ide_bus_offset[l] =-1 ; + } +
^^^^^
please remove the whitespace
Quoted 14 lines
board/st/stls/ide.c new file +14
-0+/* clean them to calculate real values */ + real_ide_max_buses =0 ; + real_ide_max_devices =0 ; + +#if defined(CONFIG_VT82C686A ) || defined(CONFIG_VT82C686B ) + status =ide_via_preinit (); +if (!status) { +PRINTF ("IDE: VIA IDE Controller Init Done!\n" ); + oldstatus =0 ; + } +#endif /*defined(CONFIG_VT82C686A) || defined(CONFIG_VT82C686B)*/ +#if defined(CONFIG_SATA_SIL ) + status =ide_sata_sil_preinit (); +if (!status) {
board/st/stls/ide.c line 82
Quoted 10 lines
board/st/stls/ide.c new file +10
-0+PRINTF ("IDE: SIL SATA Controller Init Done!\n" ); + oldstatus = 0; + } +#endif /*CONFIG_SATA_SIL*/ +#ifdef CFG_IDE_SIL680 + status =ide_sil680_preinit (); +if (!status) { +PRINTF ("IDE: SIL680 Controller Init Done!\n" ); + oldstatus =0 ; + }
^^^^^^^
please remove the whitespace
board/st/stls/ide.c line 94
Quoted 12 lines
board/st/stls/ide.c new file +12
-0+#endif /* CFG_IDE_SIL680 */ +#ifdef CFG_SATA_VIA + status =sata_via_preinit (); +if (!status) { +PRINTF ("IDE: VIA SATA Controller Init Done!\n" ); + oldstatus =0 ; + } +#endif /* CFG_SATA_VIA */ +return oldstatus; +} + +void ide_set_reset (int flag)
please remove the whitespace
Quoted 35 lines
board/st/stls/ide.c new file +16
-0+{ +#if defined(CONFIG_VT82C686A ) || defined(CONFIG_VT82C686B ) +ide_via_set_reset (flag); +#endif /*defined(CONFIG_VT82C686A) || defined(CONFIG_VT82C686B)*/ +#if defined(CONFIG_SATA_SIL ) +ide_sata_sil_set_reset (flag); +#endif /*CONFIG_SATA_SIL*/ +#ifdef CFG_IDE_SIL680 +ide_sil680_set_reset (flag); +#endif /* CFG_IDE_SIL680 */ +#ifdef CFG_SATA_VIA +sata_via_set_reset (flag); +#endif /* CFG_SATA_VIA */ +return ; +} +#endif /*CONFIG_CMD_IDE*/ board/st/stls/pci.c new file +13
-0@@ -0,0 +1,104 @@ +/* +* Prototypes, etc. for the STMicroelectronics STLS +* +* 2008 (c) STMicroelectronics, Inc. +* Author: Ryan Chen <[email protected]> +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of
board/st/stls/pci.c line 23
Quoted 10 lines
board/st/stls/pci.c new file +10
-0+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, +* MA 02111-1307 USA +*/ +#include <common.h> +#ifdef CONFIG_PCI
please move this to the Makefile
board/st/stls/pci.c line 28
Quoted 5 lines
board/st/stls/pci.c new file +5
-0+#include <pci.h> +#ifdef CONFIG_STLS +#include <asm/stls/pci.h> +#endif +#if 0
if no need please remove
Quoted 11 lines
board/st/stls/pci.c new file +11
-0+#if defined(CONFIG_VT82C686A ) || defined(CONFIG_VT82C686B ) +#include <vt82c686.h> +#endif + +void pci_legacy_init (void ) +{ +#if defined(CONFIG_VT82C686A ) || defined(CONFIG_VT82C686B ) +if (init_sb_isa ()) +printf ("Init VIA ISA Bridge init fail!\n" ); +if (init_sb_serial ()) +printf ("Init VIA Serial Ports Error!\n" );
board/st/stls/pci.c line 49
Quoted 10 lines
board/st/stls/pci.c new file +10
-0+if (init_sb_keypad ()) +printf ("Init VIA Keypad Ports Error!\n" ); +if (init_sb_irq ()) +printf ("VIA IRQ init fail!\n" ); +if (init_sb_audio ()) +printf ("Init VIA AC97 Error!\n" ); +if (init_sb_misc ()) +printf ("Init VIA Misc Error!\n" ); +#endif /* defined(CONFIG_VT82C686A) || defined(CONFIG_VT82C686B) */ +}
Best Regards,
J.
PATCH 1/1 : Add flash.c, ide.c and pci.c in board/st/stls/ directory!
In reply to Ryan CHENQuoted 10 lines · In message <[email protected]> you wrote:
commit
7f818bb236de596c5bbcf21919625db9912b2c43Parent: 699f05125509249072a0b865c8d35520d97cd501 Author: Ryan Chen <[email protected]> Date: Wed Jul 30 06:26:36 2008 -0400Signed-off-by Ryan Chen <[email protected]>new file:
board/st/stls/flash.c
new file:board/st/stls/ide.c
new file:board/st/stls/pci.c
Please use git-format-patch to prepare the patch.
See also hints aboyut missing patch sequence / threading in previous mail.
board/st/stls/flash.c
Quoted 5 lines
board/st/stls/flash.c new file +0
-0
I reject this patch. Please use the CFI driver instead of adding custom code.
board/st/stls/ide.c line 2
Quoted 8 lines
board/st/stls/ide.c new file +2
-0@@ -0,0 +1,110 @@ +/* +* Prototypes, etc. for the STMicroelectronics STLS
This comment seems to be wrong ?
Quoted 16 lines
board/st/stls/ide.c new file +16
-0+* 2008 (c) STMicroelectronics, Inc. +* Author: Ryan Chen <[email protected]> +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
board/st/stls/ide.c line 29
Quoted 10 lines
board/st/stls/ide.c new file +10
-0+* MA 02111-1307 USA +*/ +#include <common.h> +#if defined (CONFIG_CMD_IDE ) && defined(CONFIG_MULTI_IDE_CONTROLLER ) +#if defined(CONFIG_VT82C686A ) || defined(CONFIG_VT82C686B ) +#include <vt82c686.h> +#endif /*defined(CONFIG_VT82C686A) || defined(CONFIG_VT82C686B)*/ +#ifdef CFG_SATA_VIA +#include <sata_via.h> +#endif /* CFG_SATA_VIA */
There are no such #defines as CONFIG_VT82C686A or CONFIG_VT82C686B or CFG_SATA_VIA in U-Boot.
CONFIG_VT* versus CFG_SATA_* is inconsistent.
There are no such header files as vt82c686.h or sata_via.h in U-Boot.
This seems to need some major cleanup ??
board/st/stls/ide.c line 43
Quoted 5 lines
board/st/stls/ide.c new file +5
-0+#ifdef DEBUG_IDE +#define PRINTF(fmt,args...) printf (fmt ,##args) +#else +#define PRINTF(fmt,args...) +#endif
Please use debug() for debug messages.
Quoted 5 lines
board/st/stls/pci.c new file +0
-0
...
board/st/stls/pci.c line 28
Quoted 7 lines
board/st/stls/pci.c new file +7
-0+#include <common.h> +#ifdef CONFIG_PCI +#include <pci.h> +#ifdef CONFIG_STLS +#include <asm/stls/pci.h> +#endif +#if 0
Please do not add dead code.
Best regards,
Wolfgang Denk
Signature · 4 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de "Faith: not *wanting* to know what is true." - Friedrich Nietzsche