Lines Matching refs:imr

92 static inline int imr_is_enabled(struct imr_regs *imr)  in imr_is_enabled()  argument
94 return !(imr->rmask == IMR_READ_ACCESS_ALL && in imr_is_enabled()
95 imr->wmask == IMR_WRITE_ACCESS_ALL && in imr_is_enabled()
96 imr_to_phys(imr->addr_lo) == 0 && in imr_is_enabled()
97 imr_to_phys(imr->addr_hi) == 0); in imr_is_enabled()
110 static int imr_read(struct imr_device *idev, u32 imr_id, struct imr_regs *imr) in imr_read() argument
115 ret = iosf_mbi_read(QRK_MBI_UNIT_MM, MBI_REG_READ, reg++, &imr->addr_lo); in imr_read()
119 ret = iosf_mbi_read(QRK_MBI_UNIT_MM, MBI_REG_READ, reg++, &imr->addr_hi); in imr_read()
123 ret = iosf_mbi_read(QRK_MBI_UNIT_MM, MBI_REG_READ, reg++, &imr->rmask); in imr_read()
127 return iosf_mbi_read(QRK_MBI_UNIT_MM, MBI_REG_READ, reg++, &imr->wmask); in imr_read()
141 static int imr_write(struct imr_device *idev, u32 imr_id, struct imr_regs *imr) in imr_write() argument
149 ret = iosf_mbi_write(QRK_MBI_UNIT_MM, MBI_REG_WRITE, reg++, imr->addr_lo); in imr_write()
153 ret = iosf_mbi_write(QRK_MBI_UNIT_MM, MBI_REG_WRITE, reg++, imr->addr_hi); in imr_write()
157 ret = iosf_mbi_write(QRK_MBI_UNIT_MM, MBI_REG_WRITE, reg++, imr->rmask); in imr_write()
161 ret = iosf_mbi_write(QRK_MBI_UNIT_MM, MBI_REG_WRITE, reg++, imr->wmask); in imr_write()
175 imr_to_phys(imr->addr_lo), imr_to_phys(imr->addr_hi) + IMR_MASK); in imr_write()
193 struct imr_regs imr; in imr_dbgfs_state_show() local
201 ret = imr_read(idev, i, &imr); in imr_dbgfs_state_show()
210 if (imr_is_enabled(&imr)) { in imr_dbgfs_state_show()
211 base = imr_to_phys(imr.addr_lo); in imr_dbgfs_state_show()
212 end = imr_to_phys(imr.addr_hi) + IMR_MASK; in imr_dbgfs_state_show()
221 &base, &end, size, imr.rmask, imr.wmask, in imr_dbgfs_state_show()
222 imr_is_enabled(&imr) ? "enabled " : "disabled", in imr_dbgfs_state_show()
223 imr.addr_lo & IMR_LOCK ? "locked" : "unlocked"); in imr_dbgfs_state_show()
284 static inline int imr_address_overlap(phys_addr_t addr, struct imr_regs *imr) in imr_address_overlap() argument
286 return addr >= imr_to_phys(imr->addr_lo) && addr <= imr_to_phys(imr->addr_hi); in imr_address_overlap()
304 struct imr_regs imr; in imr_add_range() local
324 imr.addr_lo = phys_to_imr(base); in imr_add_range()
325 imr.addr_hi = phys_to_imr(end); in imr_add_range()
326 imr.rmask = rmask; in imr_add_range()
327 imr.wmask = wmask; in imr_add_range()
328 if (!imr_is_enabled(&imr)) in imr_add_range()
341 ret = imr_read(idev, i, &imr); in imr_add_range()
347 if (imr_is_enabled(&imr)) { in imr_add_range()
348 if (imr_address_overlap(base, &imr)) in imr_add_range()
350 if (imr_address_overlap(end, &imr)) in imr_add_range()
367 imr.addr_lo = phys_to_imr(base); in imr_add_range()
368 imr.addr_hi = phys_to_imr(end); in imr_add_range()
369 imr.rmask = rmask; in imr_add_range()
370 imr.wmask = wmask; in imr_add_range()
372 ret = imr_write(idev, reg, &imr); in imr_add_range()
379 imr.addr_lo = 0; in imr_add_range()
380 imr.addr_hi = 0; in imr_add_range()
381 imr.rmask = IMR_READ_ACCESS_ALL; in imr_add_range()
382 imr.wmask = IMR_WRITE_ACCESS_ALL; in imr_add_range()
383 imr_write(idev, reg, &imr); in imr_add_range()
413 struct imr_regs imr; in __imr_remove_range() local
438 ret = imr_read(idev, reg, &imr); in __imr_remove_range()
442 if (!imr_is_enabled(&imr) || imr.addr_lo & IMR_LOCK) { in __imr_remove_range()
450 ret = imr_read(idev, i, &imr); in __imr_remove_range()
454 if (!imr_is_enabled(&imr) || imr.addr_lo & IMR_LOCK) in __imr_remove_range()
457 if ((imr_to_phys(imr.addr_lo) == base) && in __imr_remove_range()
458 (imr_to_phys(imr.addr_hi) == end)) { in __imr_remove_range()
474 imr.addr_lo = 0; in __imr_remove_range()
475 imr.addr_hi = 0; in __imr_remove_range()
476 imr.rmask = IMR_READ_ACCESS_ALL; in __imr_remove_range()
477 imr.wmask = IMR_WRITE_ACCESS_ALL; in __imr_remove_range()
479 ret = imr_write(idev, reg, &imr); in __imr_remove_range()