From ba04f7010958e88a8910f2a123fee53fdc72e013 Mon Sep 17 00:00:00 2001 From: Kumar Gala Date: Tue, 10 Jun 2008 16:16:02 -0500 Subject: [PATCH] FSL LAW: Add new interface to use the last free LAW LAWs have the concept of priority so its useful to be able to allocate the lowest (highest number) priority. We will end up using this with the new DDR code. Signed-off-by: Kumar Gala --- drivers/misc/fsl_law.c | 19 +++++++++++++++++++ include/asm-ppc/fsl_law.h | 1 + 2 files changed, 20 insertions(+) diff --git a/drivers/misc/fsl_law.c b/drivers/misc/fsl_law.c index d7d6c40..48ece4f 100644 --- a/drivers/misc/fsl_law.c +++ b/drivers/misc/fsl_law.c @@ -70,6 +70,25 @@ int set_next_law(phys_addr_t addr, enum law_size sz, enum law_trgt_if id) return idx; } +int set_last_law(phys_addr_t addr, enum law_size sz, enum law_trgt_if id) +{ + u32 idx; + + /* we have no LAWs free */ + if (gd->used_laws == -1) + return -1; + + /* grab the last free law */ + idx = __ilog2(~(gd->used_laws)); + + if (idx >= FSL_HW_NUM_LAWS) + return -1; + + set_law(idx, addr, sz, id); + + return idx; +} + void disable_law(u8 idx) { volatile u32 *base = (volatile u32 *)(CFG_IMMR + 0xc08); diff --git a/include/asm-ppc/fsl_law.h b/include/asm-ppc/fsl_law.h index 6c445a4..227bf83 100644 --- a/include/asm-ppc/fsl_law.h +++ b/include/asm-ppc/fsl_law.h @@ -74,6 +74,7 @@ struct law_entry { extern void set_law(u8 idx, phys_addr_t addr, enum law_size sz, enum law_trgt_if id); extern int set_next_law(phys_addr_t addr, enum law_size sz, enum law_trgt_if id); +extern int set_last_law(phys_addr_t addr, enum law_size sz, enum law_trgt_if id); extern void disable_law(u8 idx); extern void init_laws(void); extern void print_laws(void);