mirror of
https://git.proxmox.com/git/fwupd
synced 2025-08-11 06:05:31 +00:00
ccgx: Do not store the silicon ID in the image address
First, it's a hack; second we actually need to store the start address for flashing FW2 on asymmetric hardware...
This commit is contained in:
parent
bf5481e358
commit
87d39d06a3
@ -21,6 +21,7 @@ struct _FuCcgxCyacdFirmwareImage {
|
||||
FuFirmwareImageClass parent_instance;
|
||||
GPtrArray *records;
|
||||
guint16 app_type;
|
||||
guint16 silicon_id;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (FuCcgxCyacdFirmwareImage, fu_ccgx_cyacd_firmware_image, FU_TYPE_FIRMWARE_IMAGE)
|
||||
@ -39,6 +40,13 @@ fu_ccgx_cyacd_firmware_image_get_app_type (FuCcgxCyacdFirmwareImage *self)
|
||||
return self->app_type;
|
||||
}
|
||||
|
||||
guint16
|
||||
fu_ccgx_cyacd_firmware_image_get_silicon_id (FuCcgxCyacdFirmwareImage *self)
|
||||
{
|
||||
g_return_val_if_fail (FU_IS_CCGX_CYACD_FIRMWARE_IMAGE (self), 0);
|
||||
return self->silicon_id;
|
||||
}
|
||||
|
||||
static void
|
||||
fu_ccgx_cyacd_firmware_image_record_free (FuCcgxCyacdFirmwareImageRecord *rcd)
|
||||
{
|
||||
@ -158,8 +166,7 @@ fu_ccgx_cyacd_firmware_image_parse_header (FuCcgxCyacdFirmwareImage *self,
|
||||
"invalid header, expected == 12 chars");
|
||||
return FALSE;
|
||||
}
|
||||
fu_firmware_image_set_addr (FU_FIRMWARE_IMAGE (self),
|
||||
fu_firmware_strparse_uint32 (line));
|
||||
self->silicon_id = fu_firmware_strparse_uint32 (line) >> 16;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -221,6 +228,10 @@ fu_ccgx_cyacd_firmware_image_add_record (FuCcgxCyacdFirmwareImage *self,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* first data entry */
|
||||
if (self->records->len == 0)
|
||||
fu_firmware_image_set_addr (FU_FIRMWARE_IMAGE (self), rcd->row_number);
|
||||
|
||||
/* success */
|
||||
g_ptr_array_add (self->records, g_steal_pointer (&rcd));
|
||||
return TRUE;
|
||||
|
@ -29,3 +29,4 @@ gboolean fu_ccgx_cyacd_firmware_image_add_record (FuCcgxCyacdFirmwareImage *sel
|
||||
GError **error);
|
||||
GPtrArray *fu_ccgx_cyacd_firmware_image_get_records (FuCcgxCyacdFirmwareImage *self);
|
||||
guint16 fu_ccgx_cyacd_firmware_image_get_app_type (FuCcgxCyacdFirmwareImage *self);
|
||||
guint16 fu_ccgx_cyacd_firmware_image_get_silicon_id (FuCcgxCyacdFirmwareImage *self);
|
||||
|
@ -573,15 +573,16 @@ fu_ccgx_hpi_device_prepare_firmware (FuDevice *device,
|
||||
images = fu_firmware_get_images (firmware);
|
||||
for (guint i = 0; i < images->len; i++) {
|
||||
FuFirmwareImage *img = g_ptr_array_index (images, i);
|
||||
guint16 fw_app_type = fu_ccgx_cyacd_firmware_image_get_app_type (FU_CCGX_CYACD_FIRMWARE_IMAGE (img));
|
||||
if (fu_firmware_image_get_addr (img) != self->silicon_id) {
|
||||
FuCcgxCyacdFirmwareImage *img_ccgx = FU_CCGX_CYACD_FIRMWARE_IMAGE (img);
|
||||
guint16 fw_app_type = fu_ccgx_cyacd_firmware_image_get_app_type (img_ccgx);
|
||||
guint16 fw_silicon_id = fu_ccgx_cyacd_firmware_image_get_silicon_id (img_ccgx);
|
||||
if (fw_silicon_id != self->silicon_id) {
|
||||
g_set_error (error,
|
||||
FWUPD_ERROR,
|
||||
FWUPD_ERROR_NOT_SUPPORTED,
|
||||
"silicon id mismatch on image %u, "
|
||||
"expected 0x%x, got 0x%x",
|
||||
i, self->silicon_id,
|
||||
(guint) fu_firmware_image_get_addr (img));
|
||||
i, self->silicon_id, fw_silicon_id);
|
||||
return NULL;
|
||||
}
|
||||
if (fw_app_type != self->fw_app_type) {
|
||||
|
Loading…
Reference in New Issue
Block a user