crypto: qat - add support for relative FW ucode loading
Improve the way micro instructions (FW code) are uploaded to Accelerator Engines (AEs). If code starts at PC zero (absolute addressing), read uwords with no relative address. Otherwise, use relative addressing to the page region. Signed-off-by: Jack Xu <jack.xu@intel.com> Co-developed-by: Wojciech Ziemba <wojciech.ziemba@intel.com> Signed-off-by: Wojciech Ziemba <wojciech.ziemba@intel.com> Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
ee103cf1f5
commit
72b67d9507
@ -1735,21 +1735,22 @@ static void qat_uclo_fill_uwords(struct icp_qat_uclo_objhandle *obj_handle,
|
|||||||
u64 *uword, unsigned int addr_p,
|
u64 *uword, unsigned int addr_p,
|
||||||
unsigned int raddr, u64 fill)
|
unsigned int raddr, u64 fill)
|
||||||
{
|
{
|
||||||
|
unsigned int i, addr;
|
||||||
u64 uwrd = 0;
|
u64 uwrd = 0;
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
if (!encap_page) {
|
if (!encap_page) {
|
||||||
*uword = fill;
|
*uword = fill;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
addr = (encap_page->page_region) ? raddr : addr_p;
|
||||||
for (i = 0; i < encap_page->uwblock_num; i++) {
|
for (i = 0; i < encap_page->uwblock_num; i++) {
|
||||||
if (raddr >= encap_page->uwblock[i].start_addr &&
|
if (addr >= encap_page->uwblock[i].start_addr &&
|
||||||
raddr <= encap_page->uwblock[i].start_addr +
|
addr <= encap_page->uwblock[i].start_addr +
|
||||||
encap_page->uwblock[i].words_num - 1) {
|
encap_page->uwblock[i].words_num - 1) {
|
||||||
raddr -= encap_page->uwblock[i].start_addr;
|
addr -= encap_page->uwblock[i].start_addr;
|
||||||
raddr *= obj_handle->uword_in_bytes;
|
addr *= obj_handle->uword_in_bytes;
|
||||||
memcpy(&uwrd, (void *)(((uintptr_t)
|
memcpy(&uwrd, (void *)(((uintptr_t)
|
||||||
encap_page->uwblock[i].micro_words) + raddr),
|
encap_page->uwblock[i].micro_words) + addr),
|
||||||
obj_handle->uword_in_bytes);
|
obj_handle->uword_in_bytes);
|
||||||
uwrd = uwrd & 0xbffffffffffull;
|
uwrd = uwrd & 0xbffffffffffull;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user