static inline void set_law_base_addr(int idx, phys_addr_t addr) { #ifdef CONFIG_FSL_CORENET out_be32(LAWBARL_ADDR(idx), addr & 0xffffffff); out_be32(LAWBARH_ADDR(idx), (u64)addr >> 32); #else out_be32(LAWBAR_ADDR(idx), addr >> LAWBAR_SHIFT); #endif }
static inline phys_addr_t get_law_base_addr(int idx) { #ifdef CONFIG_FSL_CORENET return (phys_addr_t) ((u64)in_be32(LAWBARH_ADDR(idx)) << 32) | in_be32(LAWBARL_ADDR(idx)); #else return (phys_addr_t)in_be32(LAWBAR_ADDR(idx)) << LAWBAR_SHIFT; #endif }
void print_laws(void) { int i; u32 lawar; printf("\nLocal Access Window Configuration\n"); for (i = 0; i < FSL_HW_NUM_LAWS; i++) { lawar = in_be32(LAWAR_ADDR(i)); #ifdef CONFIG_FSL_CORENET printf("LAWBARH%02d: 0x%08x LAWBARL%02d: 0x%08x", i, in_be32(LAWBARH_ADDR(i)), i, in_be32(LAWBARL_ADDR(i))); #else printf("LAWBAR%02d: 0x%08x", i, in_be32(LAWBAR_ADDR(i))); #endif printf(" LAWAR%02d: 0x%08x\n", i, lawar); printf("\t(EN: %d TGT: 0x%02x SIZE: ", (lawar & LAW_EN) ? 1 : 0, (lawar >> 20) & 0xff); print_size(lawar_size(lawar), ")\n"); } return; }
static inline phys_addr_t fsl_get_law_base_addr(int idx) { return (phys_addr_t)in_be32(LAWBAR_ADDR(idx)) << LAWBAR_SHIFT; }
#define FSL_HW_NUM_LAWS FSL_NUM_LAWS #define LAW_BASE (CFG_IMMR + 0xc08) #define LAWAR_ADDR(x) ((u32 *)LAW_BASE + 8 * (x) + 2) #define LAWBAR_ADDR(x) ((u32 *)LAW_BASE + 8 * (x)) #define LAWBAR_SHIFT 12 static inline phys_addr_t fsl_get_law_base_addr(int idx) { return (phys_addr_t)in_be32(LAWBAR_ADDR(idx)) << LAWBAR_SHIFT; } static inline void fsl_set_law_base_addr(int idx, phys_addr_t addr) { out_be32(LAWBAR_ADDR(idx), addr >> LAWBAR_SHIFT); } static void fsl_set_law(u8 idx, phys_addr_t addr, enum law_size sz, enum law_trgt_if id) { out_be32(LAWAR_ADDR(idx), 0); fsl_set_law_base_addr(idx, addr); out_be32(LAWAR_ADDR(idx), LAW_EN | ((u32)id << 20) | (u32)sz); /* Read back so that we sync the writes */ in_be32(LAWAR_ADDR(idx)); } static int fsl_is_free_law(int idx) {