Commit e8707847 authored by Juan David González Cobas's avatar Juan David González Cobas

Merge branch 'fpga-build-info' into david-libertm-devel

parents fd4642d3 cb1a4f19
......@@ -195,6 +195,7 @@ struct ertm14_device_metadata {
unsigned char source_id[16];
uint32_t capability_mask;
unsigned char vendor_uuid[16];
char fpga_buildinfo_text[200];
};
};
};
......
......@@ -1032,17 +1032,16 @@ void get_version_info(struct ertm14_version_info *bi)
sizeof(bi->ertm15_firmware_version));
}
void get_fpga_info(struct ertm14_device_metadata *bi)
void get_fpga_info(uint8_t *bi)
{
int i;
uint32_t *info = (uint32_t *)bi;
int len = sizeof(*bi) / sizeof(info[0]);
uint32_t *regs = (uint32_t *)(BASE_ERTM14_BUILD_INFO);
size_t size = sizeof(((struct ertm14_device_metadata *)0)->fpga_buildinfo_text);
int len = size / sizeof(info[0]);
pp_printf("len: %d\n", len);
memcpy(bi, (void*)(BASE_ERTM14_BUILD_INFO), sizeof(*bi));
for (i = 0; i < len; i++)
info[i] = htonl(info[i]);
info[i] = htonl(regs[i]);
}
static void get_wrc_diags(struct WRC_DIAGS_WB *diags)
......@@ -1145,7 +1144,7 @@ static int ertm_process_psnmp(struct uart_packet *rx_pkt, struct uart_packet *tx
uint8_t opcode = rx_pkt->payload[0];
struct ertm14_protocol_op *op;
struct ertm14_version_info *ver;
struct ertm14_device_metadata *fver;
uint8_t *fver;
/* return board config in case of bad opcode */
if ((op = get_proto_op(opcode)) == NULL)
......@@ -1195,7 +1194,7 @@ static int ertm_process_psnmp(struct uart_packet *rx_pkt, struct uart_packet *tx
get_version_info(ver);
break;
case ertm14_get_fpga_info:
fver = (struct ertm14_device_metadata *)&tx_pkt->payload[op->offset2];
fver = (uint8_t *)&tx_pkt->payload[op->offset2];
get_fpga_info(fver);
break;
case ertm14_get_sensors:
......
......@@ -67,7 +67,7 @@ static struct ertm14_protocol_op {
.offset1 = 1,
.length1 = 0,
.offset2 = 0,
.length2 = sizeof(struct ertm14_device_metadata),
.length2 = sizeof(((struct ertm14_device_metadata *)0)->fpga_buildinfo_text),
},
{
.opcode = ertm14_get_sensors,
......
......@@ -311,7 +311,15 @@ void display_version_info(struct ertm_board_info *bi)
bi->wrpc_sw_build_date,
bi->wrpc_sw_build_time,
bi->wrpc_sw_build_by);
printf("FPGA buildinfo:\n%s", bi->firmware_metadata.fpga_build_info);
printf("FPGA buildinfo:\n\tcommit [%s]\n\tbuild date: [%s]\n",
bi->firmware_metadata.source_id,
bi->firmware_metadata.vendor_uuid);
};
void display_fpga_buildinfo(struct ertm_board_info *bi)
{
printf("FPGA buildinfo:\n%s\n",
bi->firmware_metadata.fpga_buildinfo_text);
};
void display_temperatures(struct ertm_temperatures *t)
......
......@@ -417,6 +417,12 @@ class ErtmTest(cmd.Cmd):
self.lib.ertm_get_board_info(self.handle, byref(bi))
self.display.display_version_info(byref(bi))
def do_fpga(self, args):
"""display full FPGA buildinfo string."""
bi = self.BoardInfo()
self.lib.ertm_get_board_info(self.handle, byref(bi))
self.display.display_fpga_buildinfo(byref(bi))
def my_postloop(self):
readline.write_history_file(self.history)
self.lib.ertm_exit(self.handle)
......
......@@ -464,14 +464,40 @@ void bytes_to_64_mac(uint64_t *mac, uint8_t src[])
*mac = tmp;
}
void split_buildinfo(char *fpga, char *tag, char *date)
{
char *p;
char tmp[256];
memcpy(tmp, fpga, 256);
p = strtok(tmp, "\n");
p = strtok(NULL, "\n");
p = strtok(NULL, "\n");
p = strtok(NULL, "\n");
if (p == NULL) {
*tag = *date = '\0';
return;
}
strncpy(tag, p + strlen("tag:"), 16); tag[15] = '\0';
p = strtok(NULL, "\n");
p = strtok(NULL, "\n");
if (p == NULL) {
*date = '\0';
return;
}
strncpy(date, p + strlen("syndate:"), 16); date[15] = '\0';
printf("tag: [%s]\n" "date: [%s]\n", tag, date);
}
static int get_version_info(struct ertm_status *st,
struct ertm_board_info *bi)
{
struct uart_link *link = &st->link;
int res;
struct ertm_device_metadata *fpga = &bi->firmware_metadata;
char *fpga = bi->firmware_metadata.fpga_buildinfo_text;
uint32_t *words = (uint32_t *)fpga;
int i, size = sizeof(*fpga)/sizeof(uint32_t);
int size = sizeof(bi->firmware_metadata.fpga_buildinfo_text)/sizeof(uint32_t);
int i;
res = ertm_proto_cycle(link, ertm14_get_version_info, NULL, bi);
/* FIXME: if they **really** want the MAC in uint64_t shape,
......@@ -484,9 +510,12 @@ static int get_version_info(struct ertm_status *st,
res = ertm_proto_cycle(link, ertm14_get_fpga_info, NULL, fpga);
if (res < 0)
return res;
printf("size: %d\n", size);
for (i = 0; i < size; i++)
words[i] = ntohl(words[i]);
split_buildinfo(fpga,
(char *)bi->firmware_metadata.source_id,
(char *)bi->firmware_metadata.vendor_uuid);
return 0;
}
......
......@@ -114,6 +114,7 @@ struct ertm_device_metadata {
unsigned char source_id[16];
uint32_t capability_mask;
unsigned char vendor_uuid[16];
char fpga_buildinfo_text[200];
};
};
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment