Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | /* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */ /* * Copyright (c) 2018 Microsemi Corporation */ #ifndef __ASM_MACH_COMMON_H #define __ASM_MACH_COMMON_H #if defined(CONFIG_SOC_OCELOT) #include <mach/ocelot/ocelot.h> #include <mach/ocelot/ocelot_devcpu_gcb.h> #include <mach/ocelot/ocelot_devcpu_gcb_miim_regs.h> #include <mach/ocelot/ocelot_icpu_cfg.h> #elif defined(CONFIG_SOC_LUTON) #include <mach/luton/luton.h> #include <mach/luton/luton_devcpu_gcb.h> #include <mach/luton/luton_devcpu_gcb_miim_regs.h> #include <mach/luton/luton_icpu_cfg.h> #elif defined(CONFIG_SOC_JR2) #include <mach/jr2/jr2.h> #include <mach/jr2/jr2_devcpu_gcb.h> #include <mach/jr2/jr2_devcpu_gcb_miim_regs.h> #include <mach/jr2/jr2_icpu_cfg.h> #elif defined(CONFIG_SOC_SERVALT) #include <mach/servalt/servalt.h> #include <mach/servalt/servalt_devcpu_gcb.h> #include <mach/servalt/servalt_devcpu_gcb_miim_regs.h> #include <mach/servalt/servalt_icpu_cfg.h> #elif defined(CONFIG_SOC_SERVAL) #include <mach/serval/serval.h> #include <mach/serval/serval_devcpu_gcb.h> #include <mach/serval/serval_devcpu_gcb_miim_regs.h> #include <mach/serval/serval_icpu_cfg.h> #else #error Unsupported platform #endif #define MSCC_DDR_TO 0x20000000 /* DDR RAM base offset */ #define MSCC_MEMCTL1_TO 0x40000000 /* SPI/PI base offset */ #define MSCC_MEMCTL2_TO 0x50000000 /* SPI/PI base offset */ #define MSCC_FLASH_TO MSCC_MEMCTL1_TO /* Flash base offset */ #define VCOREIII_TIMER_DIVIDER 25 /* Clock tick ~ 0.1 us */ /* Common utility functions */ /* * Perform a number of NOP instructions, blocks of 8 instructions. * The (inlined) function will not affect cache or processor state. */ static inline void mscc_vcoreiii_nop_delay(int delay) { while (delay > 0) { #define DELAY_8_NOPS() asm volatile("nop; nop; nop; nop; nop; nop; nop; nop;") switch (delay) { case 8: DELAY_8_NOPS(); /* fallthrough */ case 7: DELAY_8_NOPS(); /* fallthrough */ case 6: DELAY_8_NOPS(); /* fallthrough */ case 5: DELAY_8_NOPS(); /* fallthrough */ case 4: DELAY_8_NOPS(); /* fallthrough */ case 3: DELAY_8_NOPS(); /* fallthrough */ case 2: DELAY_8_NOPS(); /* fallthrough */ case 1: DELAY_8_NOPS(); } delay -= 8; #undef DELAY_8_NOPS } } int mscc_phy_rd_wr(u8 read, u32 miim_controller, u8 miim_addr, u8 addr, u16 *value); int mscc_phy_rd(u32 miim_controller, u8 miim_addr, u8 addr, u16 *value); int mscc_phy_wr(u32 miim_controller, u8 miim_addr, u8 addr, u16 value); void mscc_gpio_set_alternate(int gpio, int mode); #endif /* __ASM_MACH_COMMON_H */ |