mirror of
https://github.com/tinygrad/tinygrad.git
synced 2026-06-24 02:14:17 +00:00
am: tiny changes in psp load (#9952)
This commit is contained in:
parent
0bee225a58
commit
46469f00a2
1 changed files with 11 additions and 18 deletions
|
|
@ -406,8 +406,8 @@ class AM_PSP(AM_IP):
|
|||
def _wait_for_bootloader(self): self.adev.wait_reg(self.adev.reg(f"{self.reg_pref}_35"), mask=0x80000000, value=0x80000000)
|
||||
|
||||
def _prep_msg1(self, data):
|
||||
ctypes.memset(cpu_addr:=self.adev.paddr2cpu(self.msg1_paddr), 0, am.PSP_1_MEG)
|
||||
to_mv(cpu_addr, len(data))[:] = data
|
||||
to_mv(cpu_addr:=self.adev.paddr2cpu(self.msg1_paddr), len(data))[:] = data
|
||||
to_mv(cpu_addr + len(data), 1)[0] = 0
|
||||
self.adev.gmc.flush_hdp()
|
||||
|
||||
def _bootloader_load_component(self, fw, compid):
|
||||
|
|
@ -449,10 +449,11 @@ class AM_PSP(AM_IP):
|
|||
|
||||
self.adev.wait_reg(self.adev.reg(f"{self.reg_pref}_64"), mask=0x8000FFFF, value=0x80000000)
|
||||
|
||||
def _ring_submit(self):
|
||||
def _ring_submit(self, cmd):
|
||||
prev_wptr = self.adev.reg(f"{self.reg_pref}_67").read()
|
||||
ring_entry_addr = self.adev.paddr2cpu(self.ring_paddr) + prev_wptr * 4
|
||||
|
||||
ctypes.memmove(self.adev.paddr2cpu(self.cmd_paddr), ctypes.addressof(cmd), ctypes.sizeof(cmd))
|
||||
ctypes.memset(ring_entry_addr, 0, ctypes.sizeof(am.struct_psp_gfx_rb_frame))
|
||||
write_loc = am.struct_psp_gfx_rb_frame.from_address(ring_entry_addr)
|
||||
write_loc.cmd_buf_addr_hi, write_loc.cmd_buf_addr_lo = data64(self.adev.paddr2mc(self.cmd_paddr))
|
||||
|
|
@ -470,36 +471,28 @@ class AM_PSP(AM_IP):
|
|||
|
||||
return resp
|
||||
|
||||
def _prep_ring_cmd(self, hdr):
|
||||
ctypes.memset(self.adev.paddr2cpu(self.cmd_paddr), 0, 0x1000)
|
||||
cmd = am.struct_psp_gfx_cmd_resp.from_address(self.adev.paddr2cpu(self.cmd_paddr))
|
||||
cmd.cmd_id = hdr
|
||||
return cmd
|
||||
|
||||
def _load_ip_fw_cmd(self, fw_types, fw_bytes):
|
||||
self._prep_msg1(fw_bytes)
|
||||
for fw_type in fw_types:
|
||||
if DEBUG >= 2: print(f"am {self.adev.devfmt}: loading fw: {am.psp_gfx_fw_type__enumvalues[fw_type]}")
|
||||
cmd = self._prep_ring_cmd(am.GFX_CMD_ID_LOAD_IP_FW)
|
||||
cmd = am.struct_psp_gfx_cmd_resp(cmd_id=am.GFX_CMD_ID_LOAD_IP_FW)
|
||||
cmd.cmd.cmd_load_ip_fw.fw_phy_addr_hi, cmd.cmd.cmd_load_ip_fw.fw_phy_addr_lo = data64(self.adev.paddr2mc(self.msg1_paddr))
|
||||
cmd.cmd.cmd_load_ip_fw.fw_size = len(fw_bytes)
|
||||
cmd.cmd.cmd_load_ip_fw.fw_type = fw_type
|
||||
self._ring_submit()
|
||||
self._ring_submit(cmd)
|
||||
|
||||
def _tmr_load_cmd(self):
|
||||
cmd = self._prep_ring_cmd(am.GFX_CMD_ID_SETUP_TMR)
|
||||
cmd = am.struct_psp_gfx_cmd_resp(cmd_id=am.GFX_CMD_ID_SETUP_TMR)
|
||||
cmd.cmd.cmd_setup_tmr.buf_phy_addr_hi, cmd.cmd.cmd_setup_tmr.buf_phy_addr_lo = data64(self.adev.paddr2mc(self.tmr_paddr))
|
||||
cmd.cmd.cmd_setup_tmr.system_phy_addr_hi, cmd.cmd.cmd_setup_tmr.system_phy_addr_lo = data64(self.tmr_paddr)
|
||||
cmd.cmd.cmd_setup_tmr.bitfield.virt_phy_addr = 1
|
||||
cmd.cmd.cmd_setup_tmr.buf_size = self.tmr_size
|
||||
return self._ring_submit()
|
||||
return self._ring_submit(cmd)
|
||||
|
||||
def _load_toc_cmd(self, toc_size):
|
||||
cmd = self._prep_ring_cmd(am.GFX_CMD_ID_LOAD_TOC)
|
||||
cmd = am.struct_psp_gfx_cmd_resp(cmd_id=am.GFX_CMD_ID_LOAD_TOC)
|
||||
cmd.cmd.cmd_load_toc.toc_phy_addr_hi, cmd.cmd.cmd_load_toc.toc_phy_addr_lo = data64(self.adev.paddr2mc(self.msg1_paddr))
|
||||
cmd.cmd.cmd_load_toc.toc_size = toc_size
|
||||
return self._ring_submit()
|
||||
return self._ring_submit(cmd)
|
||||
|
||||
def _rlc_autoload_cmd(self):
|
||||
self._prep_ring_cmd(am.GFX_CMD_ID_AUTOLOAD_RLC)
|
||||
return self._ring_submit()
|
||||
def _rlc_autoload_cmd(self): return self._ring_submit(am.struct_psp_gfx_cmd_resp(cmd_id=am.GFX_CMD_ID_AUTOLOAD_RLC))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue