From 89b009dfdcb7077e64e3d104e12d7377721c9102 Mon Sep 17 00:00:00 2001 From: Pali Rohár Date: Thu, 6 Jun 2024 18:33:23 +0200 Subject: powerpc: mpc8xxx: Extend find_law() to find_law_by_addr_id() The find_law() function searches for LAW just by physical address. This is unsuitable for cases with overlapping LAWs. Extend it to find_law_by_addr_id(), which searches for LAW by physical address and target id. Add a static inline definition of the original find_law() into fsl_law.h header. Signed-off-by: Pali Rohár Signed-off-by: Marek Mojík Reviewed-by: Marek Behún --- arch/powerpc/cpu/mpc8xxx/law.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'arch/powerpc/cpu') diff --git a/arch/powerpc/cpu/mpc8xxx/law.c b/arch/powerpc/cpu/mpc8xxx/law.c index f16bc199663..f3a9749625c 100644 --- a/arch/powerpc/cpu/mpc8xxx/law.c +++ b/arch/powerpc/cpu/mpc8xxx/law.c @@ -130,7 +130,7 @@ int set_last_law(phys_addr_t addr, enum law_size sz, enum law_trgt_if id) return idx; } -struct law_entry find_law(phys_addr_t addr) +struct law_entry find_law_by_addr_id(phys_addr_t addr, enum law_trgt_if id) { struct law_entry entry; int i; @@ -146,6 +146,9 @@ struct law_entry find_law(phys_addr_t addr) if (!get_law_entry(i, &entry)) continue; + if (id != -1 && id != entry.trgt_id) + continue; + upper = entry.addr + (2ull << entry.size); if ((addr >= entry.addr) && (addr < upper)) { entry.index = i; -- cgit v1.2.3