cregit-Linux how code gets into the kernel

Release 4.11 arch/arm/mach-pxa/reset.c

/*
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/delay.h>
#include <linux/gpio.h>
#include <linux/io.h>
#include <asm/proc-fns.h>
#include <asm/system_misc.h>

#include <mach/regs-ost.h>
#include <mach/reset.h>
#include <mach/smemc.h>


unsigned int reset_status;

EXPORT_SYMBOL(reset_status);

static void do_hw_reset(void);


static int reset_gpio = -1;


int init_gpio_reset(int gpio, int output, int level) { int rc; rc = gpio_request(gpio, "reset generator"); if (rc) { printk(KERN_ERR "Can't request reset_gpio\n"); goto out; } if (output) rc = gpio_direction_output(gpio, level); else rc = gpio_direction_input(gpio); if (rc) { printk(KERN_ERR "Can't configure reset_gpio\n"); gpio_free(gpio); goto out; } out: if (!rc) reset_gpio = gpio; return rc; }

Contributors

PersonTokensPropCommitsCommitProp
Dmitry Baryshkov9295.83%266.67%
Daniel Ribeiro44.17%133.33%
Total96100.00%3100.00%

/* * Trigger GPIO reset. * This covers various types of logic connecting gpio pin * to RESET pins (nRESET or GPIO_RESET): */
static void do_gpio_reset(void) { BUG_ON(reset_gpio == -1); /* drive it low */ gpio_direction_output(reset_gpio, 0); mdelay(2); /* rising edge or drive high */ gpio_set_value(reset_gpio, 1); mdelay(2); /* falling edge */ gpio_set_value(reset_gpio, 0); /* give it some time */ mdelay(10); WARN_ON(1); /* fallback */ do_hw_reset(); }

Contributors

PersonTokensPropCommitsCommitProp
Dmitry Baryshkov65100.00%1100.00%
Total65100.00%1100.00%


static void do_hw_reset(void) { /* Initialize the watchdog and let it fire */ writel_relaxed(OWER_WME, OWER); writel_relaxed(OSSR_M3, OSSR); /* ... in 100 ms */ writel_relaxed(readl_relaxed(OSCR) + 368640, OSMR3); /* * SDRAM hangs on watchdog reset on Marvell PXA270 (erratum 71) * we put SDRAM into self-refresh to prevent that */ while (1) writel_relaxed(MDREFR_SLFRSH, MDREFR); }

Contributors

PersonTokensPropCommitsCommitProp
Russell King1939.58%133.33%
Dmitry Baryshkov1735.42%133.33%
Sergey Yanovich1225.00%133.33%
Total48100.00%3100.00%


void pxa_restart(enum reboot_mode mode, const char *cmd) { local_irq_disable(); local_fiq_disable(); clear_reset_status(RESET_STATUS_ALL); switch (mode) { case REBOOT_SOFT: /* Jump into ROM at address 0 */ soft_restart(0); break; case REBOOT_GPIO: do_gpio_reset(); break; case REBOOT_HARD: default: do_hw_reset(); break; } }

Contributors

PersonTokensPropCommitsCommitProp
Dmitry Baryshkov3155.36%114.29%
Russell King1323.21%342.86%
Robin Holt58.93%114.29%
Eric Miao47.14%114.29%
Jaya Kumar35.36%114.29%
Total56100.00%7100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Dmitry Baryshkov24075.00%212.50%
Russell King3410.62%637.50%
Sergey Yanovich154.69%16.25%
Eric Miao144.38%212.50%
Robin Holt51.56%16.25%
Daniel Ribeiro41.25%16.25%
Jaya Kumar30.94%16.25%
David Howells30.94%16.25%
Philipp Zabel20.62%16.25%
Total320100.00%16100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.