
On Nov 30, 2007, at 3:20 PM, Timur Tabi wrote:
Define the layout of a binary blob that contains a QE firmware and instructions on how to upload it. Add function qe_upload_firmware() to parse the blob and perform the actual upload. Add command-line command "qe fw" to take a firmware blob in memory and upload it. Fully define 'struct rsp' in immap_qe.h to include the actual RISC Special Registers.
Signed-off-by: Timur Tabi timur@freescale.com
This patch applies to Kim's mpc83xx branch on u-boot-mpc83xx.git at denx.de.
doc/README.qe_firmware | 295 +++++++++++++++++++++++++++++++++++ +++++++++ drivers/qe/qe.c | 213 ++++++++++++++++++++++++++++++++ drivers/qe/qe.h | 56 +++++++++ include/asm-ppc/immap_qe.h | 35 +++++- 4 files changed, 596 insertions(+), 3 deletions(-) create mode 100644 doc/README.qe_firmware
+static int qe_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{
- ulong addr;
- if (argc < 3) {
printf ("Usage:\n%s\n", cmdtp->usage);
return 1;
- }
- if (strcmp(argv[1], "fw") == 0) {
addr = simple_strtoul(argv[2], NULL, 16);
if (!addr) {
printf("Invalid address\n");
return -EINVAL;
}
/*
* If a length was supplied, compare that with the
'length'
* field.
*/
if (argc >= 3) {
ulong length = simple_strtoul(argv[3], NULL, 16);
struct qe_firmware *firmware = (void *) addr;
if (length != be32_to_cpu(firmware->header.length)) {
printf("Invalid length\n");
return -EINVAL;
}
}
return qe_upload_firmware((const struct qe_firmware *) addr);
- }
- printf ("Usage:\n%s\n", cmdtp->usage);
- return 1;
+}
+U_BOOT_CMD(
- qe, 4, 0, qe_cmd,
- "qe - QUICC Engine commands\n",
- "fw <addr> [<length>] - Upload firmware at address <addr>,\n"
I'm at a loss, why have length at all? You seem to always take it from firmware->header.length.
Also can we be more explicit in the help with 'Upload firmware'.. to 'Upload microcode firmware to QE' or something like that.
- k