You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/egtvedt/avr32-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/egtvedt/avr32-2.6: avr32: add ATAG_BOARDINFO don't check platform_get_irq's return value against zero avr32: init cannot ignore signals sent by force_sig_info() avr32: fix deadlock when reading clock list in debugfs avr32: Fix .size directive for cpu_enter_idle avr32: At32ap: pio fix typo "))" on gpio_irq_unmask prototype fix the wrong argument of the functions definition
This commit is contained in:
@@ -94,6 +94,13 @@ struct tag_ethernet {
|
|||||||
|
|
||||||
#define ETH_INVALID_PHY 0xff
|
#define ETH_INVALID_PHY 0xff
|
||||||
|
|
||||||
|
/* board information */
|
||||||
|
#define ATAG_BOARDINFO 0x54410008
|
||||||
|
|
||||||
|
struct tag_boardinfo {
|
||||||
|
u32 board_number;
|
||||||
|
};
|
||||||
|
|
||||||
struct tag {
|
struct tag {
|
||||||
struct tag_header hdr;
|
struct tag_header hdr;
|
||||||
union {
|
union {
|
||||||
@@ -102,6 +109,7 @@ struct tag {
|
|||||||
struct tag_cmdline cmdline;
|
struct tag_cmdline cmdline;
|
||||||
struct tag_clock clock;
|
struct tag_clock clock;
|
||||||
struct tag_ethernet ethernet;
|
struct tag_ethernet ethernet;
|
||||||
|
struct tag_boardinfo boardinfo;
|
||||||
} u;
|
} u;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -128,6 +136,7 @@ extern struct tag *bootloader_tags;
|
|||||||
|
|
||||||
extern resource_size_t fbmem_start;
|
extern resource_size_t fbmem_start;
|
||||||
extern resource_size_t fbmem_size;
|
extern resource_size_t fbmem_size;
|
||||||
|
extern u32 board_number;
|
||||||
|
|
||||||
void setup_processor(void);
|
void setup_processor(void);
|
||||||
|
|
||||||
|
|||||||
@@ -390,6 +390,21 @@ static int __init parse_tag_clock(struct tag *tag)
|
|||||||
}
|
}
|
||||||
__tagtable(ATAG_CLOCK, parse_tag_clock);
|
__tagtable(ATAG_CLOCK, parse_tag_clock);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The board_number correspond to the bd->bi_board_number in U-Boot. This
|
||||||
|
* parameter is only available during initialisation and can be used in some
|
||||||
|
* kind of board identification.
|
||||||
|
*/
|
||||||
|
u32 __initdata board_number;
|
||||||
|
|
||||||
|
static int __init parse_tag_boardinfo(struct tag *tag)
|
||||||
|
{
|
||||||
|
board_number = tag->u.boardinfo.board_number;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
__tagtable(ATAG_BOARDINFO, parse_tag_boardinfo);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Scan the tag table for this tag, and call its parse function. The
|
* Scan the tag table for this tag, and call its parse function. The
|
||||||
* tag table is built by the linker from all the __tagtable
|
* tag table is built by the linker from all the __tagtable
|
||||||
|
|||||||
@@ -95,28 +95,6 @@ void _exception(long signr, struct pt_regs *regs, int code,
|
|||||||
info.si_code = code;
|
info.si_code = code;
|
||||||
info.si_addr = (void __user *)addr;
|
info.si_addr = (void __user *)addr;
|
||||||
force_sig_info(signr, &info, current);
|
force_sig_info(signr, &info, current);
|
||||||
|
|
||||||
/*
|
|
||||||
* Init gets no signals that it doesn't have a handler for.
|
|
||||||
* That's all very well, but if it has caused a synchronous
|
|
||||||
* exception and we ignore the resulting signal, it will just
|
|
||||||
* generate the same exception over and over again and we get
|
|
||||||
* nowhere. Better to kill it and let the kernel panic.
|
|
||||||
*/
|
|
||||||
if (is_global_init(current)) {
|
|
||||||
__sighandler_t handler;
|
|
||||||
|
|
||||||
spin_lock_irq(¤t->sighand->siglock);
|
|
||||||
handler = current->sighand->action[signr-1].sa.sa_handler;
|
|
||||||
spin_unlock_irq(¤t->sighand->siglock);
|
|
||||||
if (handler == SIG_DFL) {
|
|
||||||
/* init has generated a synchronous exception
|
|
||||||
and it doesn't have a handler for the signal */
|
|
||||||
printk(KERN_CRIT "init has generated signal %ld "
|
|
||||||
"but has no handler for it\n", signr);
|
|
||||||
do_exit(signr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
asmlinkage void do_nmi(unsigned long ecr, struct pt_regs *regs)
|
asmlinkage void do_nmi(unsigned long ecr, struct pt_regs *regs)
|
||||||
|
|||||||
@@ -35,22 +35,30 @@ void at32_clk_register(struct clk *clk)
|
|||||||
spin_unlock(&clk_list_lock);
|
spin_unlock(&clk_list_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct clk *__clk_get(struct device *dev, const char *id)
|
||||||
|
{
|
||||||
|
struct clk *clk;
|
||||||
|
|
||||||
|
list_for_each_entry(clk, &at32_clock_list, list) {
|
||||||
|
if (clk->dev == dev && strcmp(id, clk->name) == 0) {
|
||||||
|
return clk;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ERR_PTR(-ENOENT);
|
||||||
|
}
|
||||||
|
|
||||||
struct clk *clk_get(struct device *dev, const char *id)
|
struct clk *clk_get(struct device *dev, const char *id)
|
||||||
{
|
{
|
||||||
struct clk *clk;
|
struct clk *clk;
|
||||||
|
|
||||||
spin_lock(&clk_list_lock);
|
spin_lock(&clk_list_lock);
|
||||||
|
clk = __clk_get(dev, id);
|
||||||
list_for_each_entry(clk, &at32_clock_list, list) {
|
|
||||||
if (clk->dev == dev && strcmp(id, clk->name) == 0) {
|
|
||||||
spin_unlock(&clk_list_lock);
|
|
||||||
return clk;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
spin_unlock(&clk_list_lock);
|
spin_unlock(&clk_list_lock);
|
||||||
return ERR_PTR(-ENOENT);
|
|
||||||
|
return clk;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(clk_get);
|
EXPORT_SYMBOL(clk_get);
|
||||||
|
|
||||||
void clk_put(struct clk *clk)
|
void clk_put(struct clk *clk)
|
||||||
@@ -257,15 +265,15 @@ static int clk_show(struct seq_file *s, void *unused)
|
|||||||
spin_lock(&clk_list_lock);
|
spin_lock(&clk_list_lock);
|
||||||
|
|
||||||
/* show clock tree as derived from the three oscillators */
|
/* show clock tree as derived from the three oscillators */
|
||||||
clk = clk_get(NULL, "osc32k");
|
clk = __clk_get(NULL, "osc32k");
|
||||||
dump_clock(clk, &r);
|
dump_clock(clk, &r);
|
||||||
clk_put(clk);
|
clk_put(clk);
|
||||||
|
|
||||||
clk = clk_get(NULL, "osc0");
|
clk = __clk_get(NULL, "osc0");
|
||||||
dump_clock(clk, &r);
|
dump_clock(clk, &r);
|
||||||
clk_put(clk);
|
clk_put(clk);
|
||||||
|
|
||||||
clk = clk_get(NULL, "osc1");
|
clk = __clk_get(NULL, "osc1");
|
||||||
dump_clock(clk, &r);
|
dump_clock(clk, &r);
|
||||||
clk_put(clk);
|
clk_put(clk);
|
||||||
|
|
||||||
|
|||||||
@@ -61,34 +61,34 @@ struct eic {
|
|||||||
static struct eic *nmi_eic;
|
static struct eic *nmi_eic;
|
||||||
static bool nmi_enabled;
|
static bool nmi_enabled;
|
||||||
|
|
||||||
static void eic_ack_irq(struct irq_chip *d)
|
static void eic_ack_irq(struct irq_data *d)
|
||||||
{
|
{
|
||||||
struct eic *eic = irq_data_get_irq_chip_data(data);
|
struct eic *eic = irq_data_get_irq_chip_data(d);
|
||||||
eic_writel(eic, ICR, 1 << (d->irq - eic->first_irq));
|
eic_writel(eic, ICR, 1 << (d->irq - eic->first_irq));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void eic_mask_irq(struct irq_chip *d)
|
static void eic_mask_irq(struct irq_data *d)
|
||||||
{
|
{
|
||||||
struct eic *eic = irq_data_get_irq_chip_data(data);
|
struct eic *eic = irq_data_get_irq_chip_data(d);
|
||||||
eic_writel(eic, IDR, 1 << (d->irq - eic->first_irq));
|
eic_writel(eic, IDR, 1 << (d->irq - eic->first_irq));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void eic_mask_ack_irq(struct irq_chip *d)
|
static void eic_mask_ack_irq(struct irq_data *d)
|
||||||
{
|
{
|
||||||
struct eic *eic = irq_data_get_irq_chip_data(data);
|
struct eic *eic = irq_data_get_irq_chip_data(d);
|
||||||
eic_writel(eic, ICR, 1 << (d->irq - eic->first_irq));
|
eic_writel(eic, ICR, 1 << (d->irq - eic->first_irq));
|
||||||
eic_writel(eic, IDR, 1 << (d->irq - eic->first_irq));
|
eic_writel(eic, IDR, 1 << (d->irq - eic->first_irq));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void eic_unmask_irq(struct irq_chip *d)
|
static void eic_unmask_irq(struct irq_data *d)
|
||||||
{
|
{
|
||||||
struct eic *eic = irq_data_get_irq_chip_data(data);
|
struct eic *eic = irq_data_get_irq_chip_data(d);
|
||||||
eic_writel(eic, IER, 1 << (d->irq - eic->first_irq));
|
eic_writel(eic, IER, 1 << (d->irq - eic->first_irq));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int eic_set_irq_type(struct irq_chip *d, unsigned int flow_type)
|
static int eic_set_irq_type(struct irq_data *d, unsigned int flow_type)
|
||||||
{
|
{
|
||||||
struct eic *eic = irq_data_get_irq_chip_data(data);
|
struct eic *eic = irq_data_get_irq_chip_data(d);
|
||||||
unsigned int irq = d->irq;
|
unsigned int irq = d->irq;
|
||||||
unsigned int i = irq - eic->first_irq;
|
unsigned int i = irq - eic->first_irq;
|
||||||
u32 mode, edge, level;
|
u32 mode, edge, level;
|
||||||
@@ -191,7 +191,7 @@ static int __init eic_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
int_irq = platform_get_irq(pdev, 0);
|
int_irq = platform_get_irq(pdev, 0);
|
||||||
if (!regs || !int_irq) {
|
if (!regs || (int)int_irq <= 0) {
|
||||||
dev_dbg(&pdev->dev, "missing regs and/or irq resource\n");
|
dev_dbg(&pdev->dev, "missing regs and/or irq resource\n");
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -257,7 +257,7 @@ static void gpio_irq_mask(struct irq_data *d)
|
|||||||
pio_writel(pio, IDR, 1 << (gpio & 0x1f));
|
pio_writel(pio, IDR, 1 << (gpio & 0x1f));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gpio_irq_unmask(struct irq_data *d))
|
static void gpio_irq_unmask(struct irq_data *d)
|
||||||
{
|
{
|
||||||
unsigned gpio = irq_to_gpio(d->irq);
|
unsigned gpio = irq_to_gpio(d->irq);
|
||||||
struct pio_device *pio = &pio_dev[gpio >> 5];
|
struct pio_device *pio = &pio_dev[gpio >> 5];
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ cpu_enter_idle:
|
|||||||
st.w r8[TI_flags], r9
|
st.w r8[TI_flags], r9
|
||||||
unmask_interrupts
|
unmask_interrupts
|
||||||
sleep CPU_SLEEP_IDLE
|
sleep CPU_SLEEP_IDLE
|
||||||
.size cpu_idle_sleep, . - cpu_idle_sleep
|
.size cpu_enter_idle, . - cpu_enter_idle
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Common return path for PM functions that don't run from
|
* Common return path for PM functions that don't run from
|
||||||
|
|||||||
Reference in New Issue
Block a user