IXP: add dynamic microcode addr
allow to load the microde from flash or ram by download it through the serial or other. Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> Acked-by: Stefan Roese <sr@denx.de>
This commit is contained in:
parent
63ebcc4615
commit
a1cf027a08
3
README
3
README
|
@ -2699,6 +2699,9 @@ Some configuration options can be set using Environment Variables:
|
|||
Useful on scripts which control the retry operation
|
||||
themselves.
|
||||
|
||||
npe_ucode - see CONFIG_IXP4XX_NPE_EXT_UCOD
|
||||
if set load address for the npe microcode
|
||||
|
||||
tftpsrcport - If this is set, the value is used for TFTP's
|
||||
UDP source port.
|
||||
|
||||
|
|
|
@ -140,6 +140,14 @@ static UINT32 *IxNpeMicroCodeImageLibrary = (UINT32 *)CONFIG_IXP4XX_NPE_EXT_UCOD
|
|||
static UINT32 *IxNpeMicroCodeImageLibrary = (UINT32 *)IxNpeMicrocode_array;
|
||||
#endif
|
||||
|
||||
static UINT32* getIxNpeMicroCodeImageLibrary(void)
|
||||
{
|
||||
char *s;
|
||||
if ((s = getenv("npe_ucode")) != NULL)
|
||||
return (UINT32*) simple_strtoul(s, NULL, 16);
|
||||
else
|
||||
return IxNpeMicroCodeImageLibrary;
|
||||
}
|
||||
|
||||
/*
|
||||
* static function prototypes.
|
||||
|
@ -218,9 +226,9 @@ ixNpeDlImageMgrImageListExtract (
|
|||
IX_NPEDL_TRACE0 (IX_NPEDL_FN_ENTRY_EXIT,
|
||||
"Entering ixNpeDlImageMgrImageListExtract\n");
|
||||
|
||||
header = (IxNpeDlImageMgrImageLibraryHeader *) IxNpeMicroCodeImageLibrary;
|
||||
header = (IxNpeDlImageMgrImageLibraryHeader *) getIxNpeMicroCodeImageLibrary();
|
||||
|
||||
if (ixNpeDlImageMgrSignatureCheck (IxNpeMicroCodeImageLibrary))
|
||||
if (ixNpeDlImageMgrSignatureCheck (getIxNpeMicroCodeImageLibrary()))
|
||||
{
|
||||
/* for each image entry in the image header ... */
|
||||
while (header->entry[imageCount].eohMarker !=
|
||||
|
@ -291,9 +299,9 @@ ixNpeDlImageMgrImageLocate (
|
|||
IX_NPEDL_TRACE0 (IX_NPEDL_FN_ENTRY_EXIT,
|
||||
"Entering ixNpeDlImageMgrImageLocate\n");
|
||||
|
||||
header = (IxNpeDlImageMgrImageLibraryHeader *) IxNpeMicroCodeImageLibrary;
|
||||
header = (IxNpeDlImageMgrImageLibraryHeader *) getIxNpeMicroCodeImageLibrary();
|
||||
|
||||
if (ixNpeDlImageMgrSignatureCheck (IxNpeMicroCodeImageLibrary))
|
||||
if (ixNpeDlImageMgrSignatureCheck (getIxNpeMicroCodeImageLibrary()))
|
||||
{
|
||||
/* for each image entry in the image library header ... */
|
||||
while (header->entry[imageCount].eohMarker !=
|
||||
|
@ -308,8 +316,9 @@ ixNpeDlImageMgrImageLocate (
|
|||
* get pointer to the image in the image library using offset from
|
||||
* 1st word in image library
|
||||
*/
|
||||
UINT32 *tmp=getIxNpeMicroCodeImageLibrary();
|
||||
imageOffset = header->entry[imageCount].image.offset;
|
||||
*imagePtr = &IxNpeMicroCodeImageLibrary[imageOffset];
|
||||
*imagePtr = &tmp[imageOffset];
|
||||
/* get the image size */
|
||||
*imageSize = header->entry[imageCount].image.size;
|
||||
status = IX_SUCCESS;
|
||||
|
@ -354,9 +363,9 @@ ixNpeDlImageMgrLatestImageExtract (IxNpeDlImageId *imageId)
|
|||
IX_NPEDL_TRACE0 (IX_NPEDL_FN_ENTRY_EXIT,
|
||||
"Entering ixNpeDlImageMgrLatestImageExtract\n");
|
||||
|
||||
header = (IxNpeDlImageMgrImageLibraryHeader *) IxNpeMicroCodeImageLibrary;
|
||||
header = (IxNpeDlImageMgrImageLibraryHeader *) getIxNpeMicroCodeImageLibrary();
|
||||
|
||||
if (ixNpeDlImageMgrSignatureCheck (IxNpeMicroCodeImageLibrary))
|
||||
if (ixNpeDlImageMgrSignatureCheck (getIxNpeMicroCodeImageLibrary()))
|
||||
{
|
||||
/* for each image entry in the image library header ... */
|
||||
while (header->entry[imageCount].eohMarker !=
|
||||
|
@ -633,7 +642,7 @@ ixNpeDlImageMgrImageFind (
|
|||
imageLibrary = ixNpeMicrocode_binaryArray;
|
||||
}
|
||||
#else
|
||||
imageLibrary = IxNpeMicroCodeImageLibrary;
|
||||
imageLibrary = getIxNpeMicroCodeImageLibrary();
|
||||
#endif /* IX_NPEDL_READ_MICROCODE_FROM_FILE */
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue