Lines Matching refs:imr
91 static inline int imr_is_enabled(struct imr_regs *imr) in imr_is_enabled() argument
93 return !(imr->rmask == IMR_READ_ACCESS_ALL && in imr_is_enabled()
94 imr->wmask == IMR_WRITE_ACCESS_ALL && in imr_is_enabled()
95 imr_to_phys(imr->addr_lo) == 0 && in imr_is_enabled()
96 imr_to_phys(imr->addr_hi) == 0); in imr_is_enabled()
109 static int imr_read(struct imr_device *idev, u32 imr_id, struct imr_regs *imr) in imr_read() argument
115 reg++, &imr->addr_lo); in imr_read()
120 reg++, &imr->addr_hi); in imr_read()
125 reg++, &imr->rmask); in imr_read()
130 reg++, &imr->wmask); in imr_read()
146 struct imr_regs *imr, bool lock) in imr_write() argument
155 imr->addr_lo); in imr_write()
160 reg++, imr->addr_hi); in imr_write()
165 reg++, imr->rmask); in imr_write()
170 reg++, imr->wmask); in imr_write()
176 imr->addr_lo |= IMR_LOCK; in imr_write()
178 reg - IMR_NUM_REGS, imr->addr_lo); in imr_write()
193 imr_to_phys(imr->addr_lo), imr_to_phys(imr->addr_hi) + IMR_MASK); in imr_write()
211 struct imr_regs imr; in imr_dbgfs_state_show() local
219 ret = imr_read(idev, i, &imr); in imr_dbgfs_state_show()
228 if (imr_is_enabled(&imr)) { in imr_dbgfs_state_show()
229 base = imr_to_phys(imr.addr_lo); in imr_dbgfs_state_show()
230 end = imr_to_phys(imr.addr_hi) + IMR_MASK; in imr_dbgfs_state_show()
238 &base, &end, size, imr.rmask, imr.wmask, in imr_dbgfs_state_show()
239 imr_is_enabled(&imr) ? "enabled " : "disabled", in imr_dbgfs_state_show()
240 imr.addr_lo & IMR_LOCK ? "locked" : "unlocked"); in imr_dbgfs_state_show()
332 static inline int imr_address_overlap(phys_addr_t addr, struct imr_regs *imr) in imr_address_overlap() argument
334 return addr >= imr_to_phys(imr->addr_lo) && addr <= imr_to_phys(imr->addr_hi); in imr_address_overlap()
353 struct imr_regs imr; in imr_add_range() local
373 imr.addr_lo = phys_to_imr(base); in imr_add_range()
374 imr.addr_hi = phys_to_imr(end); in imr_add_range()
375 imr.rmask = rmask; in imr_add_range()
376 imr.wmask = wmask; in imr_add_range()
377 if (!imr_is_enabled(&imr)) in imr_add_range()
390 ret = imr_read(idev, i, &imr); in imr_add_range()
396 if (imr_is_enabled(&imr)) { in imr_add_range()
397 if (imr_address_overlap(base, &imr)) in imr_add_range()
399 if (imr_address_overlap(end, &imr)) in imr_add_range()
416 imr.addr_lo = phys_to_imr(base); in imr_add_range()
417 imr.addr_hi = phys_to_imr(end); in imr_add_range()
418 imr.rmask = rmask; in imr_add_range()
419 imr.wmask = wmask; in imr_add_range()
421 ret = imr_write(idev, reg, &imr, lock); in imr_add_range()
428 imr.addr_lo = 0; in imr_add_range()
429 imr.addr_hi = 0; in imr_add_range()
430 imr.rmask = IMR_READ_ACCESS_ALL; in imr_add_range()
431 imr.wmask = IMR_WRITE_ACCESS_ALL; in imr_add_range()
432 imr_write(idev, reg, &imr, false); in imr_add_range()
462 struct imr_regs imr; in __imr_remove_range() local
487 ret = imr_read(idev, reg, &imr); in __imr_remove_range()
491 if (!imr_is_enabled(&imr) || imr.addr_lo & IMR_LOCK) { in __imr_remove_range()
499 ret = imr_read(idev, i, &imr); in __imr_remove_range()
503 if (!imr_is_enabled(&imr) || imr.addr_lo & IMR_LOCK) in __imr_remove_range()
506 if ((imr_to_phys(imr.addr_lo) == base) && in __imr_remove_range()
507 (imr_to_phys(imr.addr_hi) == end)) { in __imr_remove_range()
523 imr.addr_lo = 0; in __imr_remove_range()
524 imr.addr_hi = 0; in __imr_remove_range()
525 imr.rmask = IMR_READ_ACCESS_ALL; in __imr_remove_range()
526 imr.wmask = IMR_WRITE_ACCESS_ALL; in __imr_remove_range()
528 ret = imr_write(idev, reg, &imr, false); in __imr_remove_range()