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
|
Useful on scripts which control the retry operation
|
||||||
themselves.
|
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
|
tftpsrcport - If this is set, the value is used for TFTP's
|
||||||
UDP source port.
|
UDP source port.
|
||||||
|
|
||||||
|
|
|
@ -140,6 +140,14 @@ static UINT32 *IxNpeMicroCodeImageLibrary = (UINT32 *)CONFIG_IXP4XX_NPE_EXT_UCOD
|
||||||
static UINT32 *IxNpeMicroCodeImageLibrary = (UINT32 *)IxNpeMicrocode_array;
|
static UINT32 *IxNpeMicroCodeImageLibrary = (UINT32 *)IxNpeMicrocode_array;
|
||||||
#endif
|
#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.
|
* static function prototypes.
|
||||||
|
@ -218,9 +226,9 @@ ixNpeDlImageMgrImageListExtract (
|
||||||
IX_NPEDL_TRACE0 (IX_NPEDL_FN_ENTRY_EXIT,
|
IX_NPEDL_TRACE0 (IX_NPEDL_FN_ENTRY_EXIT,
|
||||||
"Entering ixNpeDlImageMgrImageListExtract\n");
|
"Entering ixNpeDlImageMgrImageListExtract\n");
|
||||||
|
|
||||||
header = (IxNpeDlImageMgrImageLibraryHeader *) IxNpeMicroCodeImageLibrary;
|
header = (IxNpeDlImageMgrImageLibraryHeader *) getIxNpeMicroCodeImageLibrary();
|
||||||
|
|
||||||
if (ixNpeDlImageMgrSignatureCheck (IxNpeMicroCodeImageLibrary))
|
if (ixNpeDlImageMgrSignatureCheck (getIxNpeMicroCodeImageLibrary()))
|
||||||
{
|
{
|
||||||
/* for each image entry in the image header ... */
|
/* for each image entry in the image header ... */
|
||||||
while (header->entry[imageCount].eohMarker !=
|
while (header->entry[imageCount].eohMarker !=
|
||||||
|
@ -291,9 +299,9 @@ ixNpeDlImageMgrImageLocate (
|
||||||
IX_NPEDL_TRACE0 (IX_NPEDL_FN_ENTRY_EXIT,
|
IX_NPEDL_TRACE0 (IX_NPEDL_FN_ENTRY_EXIT,
|
||||||
"Entering ixNpeDlImageMgrImageLocate\n");
|
"Entering ixNpeDlImageMgrImageLocate\n");
|
||||||
|
|
||||||
header = (IxNpeDlImageMgrImageLibraryHeader *) IxNpeMicroCodeImageLibrary;
|
header = (IxNpeDlImageMgrImageLibraryHeader *) getIxNpeMicroCodeImageLibrary();
|
||||||
|
|
||||||
if (ixNpeDlImageMgrSignatureCheck (IxNpeMicroCodeImageLibrary))
|
if (ixNpeDlImageMgrSignatureCheck (getIxNpeMicroCodeImageLibrary()))
|
||||||
{
|
{
|
||||||
/* for each image entry in the image library header ... */
|
/* for each image entry in the image library header ... */
|
||||||
while (header->entry[imageCount].eohMarker !=
|
while (header->entry[imageCount].eohMarker !=
|
||||||
|
@ -308,8 +316,9 @@ ixNpeDlImageMgrImageLocate (
|
||||||
* get pointer to the image in the image library using offset from
|
* get pointer to the image in the image library using offset from
|
||||||
* 1st word in image library
|
* 1st word in image library
|
||||||
*/
|
*/
|
||||||
|
UINT32 *tmp=getIxNpeMicroCodeImageLibrary();
|
||||||
imageOffset = header->entry[imageCount].image.offset;
|
imageOffset = header->entry[imageCount].image.offset;
|
||||||
*imagePtr = &IxNpeMicroCodeImageLibrary[imageOffset];
|
*imagePtr = &tmp[imageOffset];
|
||||||
/* get the image size */
|
/* get the image size */
|
||||||
*imageSize = header->entry[imageCount].image.size;
|
*imageSize = header->entry[imageCount].image.size;
|
||||||
status = IX_SUCCESS;
|
status = IX_SUCCESS;
|
||||||
|
@ -354,9 +363,9 @@ ixNpeDlImageMgrLatestImageExtract (IxNpeDlImageId *imageId)
|
||||||
IX_NPEDL_TRACE0 (IX_NPEDL_FN_ENTRY_EXIT,
|
IX_NPEDL_TRACE0 (IX_NPEDL_FN_ENTRY_EXIT,
|
||||||
"Entering ixNpeDlImageMgrLatestImageExtract\n");
|
"Entering ixNpeDlImageMgrLatestImageExtract\n");
|
||||||
|
|
||||||
header = (IxNpeDlImageMgrImageLibraryHeader *) IxNpeMicroCodeImageLibrary;
|
header = (IxNpeDlImageMgrImageLibraryHeader *) getIxNpeMicroCodeImageLibrary();
|
||||||
|
|
||||||
if (ixNpeDlImageMgrSignatureCheck (IxNpeMicroCodeImageLibrary))
|
if (ixNpeDlImageMgrSignatureCheck (getIxNpeMicroCodeImageLibrary()))
|
||||||
{
|
{
|
||||||
/* for each image entry in the image library header ... */
|
/* for each image entry in the image library header ... */
|
||||||
while (header->entry[imageCount].eohMarker !=
|
while (header->entry[imageCount].eohMarker !=
|
||||||
|
@ -633,7 +642,7 @@ ixNpeDlImageMgrImageFind (
|
||||||
imageLibrary = ixNpeMicrocode_binaryArray;
|
imageLibrary = ixNpeMicrocode_binaryArray;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
imageLibrary = IxNpeMicroCodeImageLibrary;
|
imageLibrary = getIxNpeMicroCodeImageLibrary();
|
||||||
#endif /* IX_NPEDL_READ_MICROCODE_FROM_FILE */
|
#endif /* IX_NPEDL_READ_MICROCODE_FROM_FILE */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue