static int octeon_gpio_dir_out(struct gpio_chip *chip, unsigned offset, int value) { struct octeon_gpio *gpio = gpiochip_get_data(chip); union cvmx_gpio_bit_cfgx cfgx; octeon_gpio_set(chip, offset, value); cfgx.u64 = 0; cfgx.s.tx_oe = 1; cvmx_write_csr(gpio->register_base + bit_cfg_reg(offset), cfgx.u64); return 0; }
void hw_watchdog_reset(void) { static unsigned char v = 0; static uint64_t ms = 0; static uint64_t now_ms; DECLARE_GLOBAL_DATA_PTR; now_ms= octeon_get_cycles() / AMPP2_CPU_CLK_MHZ / 1000; // maclee: IPMC is falling edge trigger, feeding each 2 seconds if ((now_ms - ms) > (wdt_expire_time_ms/20)) { #ifdef CFG_BOARD_AMPP2_A if (v) { octeon_gpio_set(GPIO_05_CPU_WATCHDOG_FEED); } else { octeon_gpio_clr(GPIO_05_CPU_WATCHDOG_FEED); } v ^= 1; #endif ms = now_ms; } }