122,6 → 122,78 |
|
#define GUC_CTL_MAX_DWORDS (GUC_CTL_RSRVD + 1) |
|
/** |
* DOC: GuC Firmware Layout |
* |
* The GuC firmware layout looks like this: |
* |
* +-------------------------------+ |
* | guc_css_header | |
* | contains major/minor version | |
* +-------------------------------+ |
* | uCode | |
* +-------------------------------+ |
* | RSA signature | |
* +-------------------------------+ |
* | modulus key | |
* +-------------------------------+ |
* | exponent val | |
* +-------------------------------+ |
* |
* The firmware may or may not have modulus key and exponent data. The header, |
* uCode and RSA signature are must-have components that will be used by driver. |
* Length of each components, which is all in dwords, can be found in header. |
* In the case that modulus and exponent are not present in fw, a.k.a truncated |
* image, the length value still appears in header. |
* |
* Driver will do some basic fw size validation based on the following rules: |
* |
* 1. Header, uCode and RSA are must-have components. |
* 2. All firmware components, if they present, are in the sequence illustrated |
* in the layout table above. |
* 3. Length info of each component can be found in header, in dwords. |
* 4. Modulus and exponent key are not required by driver. They may not appear |
* in fw. So driver will load a truncated firmware in this case. |
*/ |
|
struct guc_css_header { |
uint32_t module_type; |
/* header_size includes all non-uCode bits, including css_header, rsa |
* key, modulus key and exponent data. */ |
uint32_t header_size_dw; |
uint32_t header_version; |
uint32_t module_id; |
uint32_t module_vendor; |
union { |
struct { |
uint8_t day; |
uint8_t month; |
uint16_t year; |
}; |
uint32_t date; |
}; |
uint32_t size_dw; /* uCode plus header_size_dw */ |
uint32_t key_size_dw; |
uint32_t modulus_size_dw; |
uint32_t exponent_size_dw; |
union { |
struct { |
uint8_t hour; |
uint8_t min; |
uint16_t sec; |
}; |
uint32_t time; |
}; |
|
char username[8]; |
char buildnumber[12]; |
uint32_t device_id; |
uint32_t guc_sw_version; |
uint32_t prod_preprod_fw; |
uint32_t reserved[12]; |
uint32_t header_info; |
} __packed; |
|
struct guc_doorbell_info { |
u32 db_status; |
u32 cookie; |