diff options
| -rw-r--r-- | drivers/misc/fsl_law.c | 19 | ||||
| -rw-r--r-- | include/asm-ppc/fsl_law.h | 1 | 
2 files changed, 20 insertions, 0 deletions
| diff --git a/drivers/misc/fsl_law.c b/drivers/misc/fsl_law.c index d7d6c403b..48ece4f09 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 6c445a471..227bf8326 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); |