Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus
Pull MIPS updates from Ralf Baechle: o Add basic support for the Mediatek/Ralink Wireless SoC family. o The Qualcomm Atheros platform is extended by support for the new QCA955X SoC series as well as a bunch of patches that get the code ready for OF support. o Lantiq and BCM47XX platform have a few improvements and bug fixes. o MIPS has sent a few patches that get the kernel ready for the upcoming microMIPS support. o The rest of the series is made up of small bug fixes and cleanups that relate to various parts of the MIPS code. The biggy in there is a whitespace cleanup. After I was sent another set of whitespace cleanup patches I decided it was the time to clean the whitespace "issues" for once and and that touches many files below arch/mips/. Fix up silly conflicts, mostly due to whitespace cleanups. * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: (105 commits) MIPS: Quit exporting kernel internel break codes to uapi/asm/break.h MIPS: remove broken conditional inside vpe loader code MIPS: SMTC: fix implicit declaration of set_vi_handler MIPS: early_printk: drop __init annotations MIPS: Probe for and report hardware virtualization support. MIPS: ath79: add support for the Qualcomm Atheros AP136-010 board MIPS: ath79: add USB controller registration code for the QCA955X SoCs MIPS: ath79: add PCI controller registration code for the QCA955X SoCs MIPS: ath79: add WMAC registration code for the QCA955X SoCs MIPS: ath79: register UART for the QCA955X SoCs MIPS: ath79: add QCA955X specific glue to ath79_device_reset_{set, clear} MIPS: ath79: add GPIO setup code for the QCA955X SoCs MIPS: ath79: add IRQ handling code for the QCA955X SoCs MIPS: ath79: add clock setup code for the QCA955X SoCs MIPS: ath79: add SoC detection code for the QCA955X SoCs MIPS: ath79: add early printk support for the QCA955X SoCs MIPS: ath79: fix WMAC IRQ resource assignment mips: reserve elfcorehdr mips: Make sure kernel memory is in iomem MIPS: ath79: use dynamically allocated USB platform devices ...
This commit is contained in:
@@ -254,7 +254,7 @@ static void __maybe_unused dump_mtregs(void)
|
||||
val & MVPCONF0_PTC, (val & MVPCONF0_M) >> MVPCONF0_M_SHIFT);
|
||||
}
|
||||
|
||||
/* Find some VPE program space */
|
||||
/* Find some VPE program space */
|
||||
static void *alloc_progmem(unsigned long len)
|
||||
{
|
||||
void *addr;
|
||||
@@ -292,7 +292,7 @@ static long get_offset(unsigned long *size, Elf_Shdr * sechdr)
|
||||
}
|
||||
|
||||
/* Lay out the SHF_ALLOC sections in a way not dissimilar to how ld
|
||||
might -- code, read-only data, read-write data, small data. Tally
|
||||
might -- code, read-only data, read-write data, small data. Tally
|
||||
sizes, and place the offsets into sh_entsize fields: high bit means it
|
||||
belongs in init. */
|
||||
static void layout_sections(struct module *mod, const Elf_Ehdr * hdr,
|
||||
@@ -386,7 +386,7 @@ static int apply_r_mips_pc16(struct module *me, uint32_t *location,
|
||||
|
||||
if( (rel > 32768) || (rel < -32768) ) {
|
||||
printk(KERN_DEBUG "VPE loader: "
|
||||
"apply_r_mips_pc16: relative address out of range 0x%x\n", rel);
|
||||
"apply_r_mips_pc16: relative address out of range 0x%x\n", rel);
|
||||
return -ENOEXEC;
|
||||
}
|
||||
|
||||
@@ -458,7 +458,7 @@ static int apply_r_mips_lo16(struct module *me, uint32_t *location,
|
||||
Elf32_Addr val, vallo;
|
||||
struct mips_hi16 *l, *next;
|
||||
|
||||
/* Sign extend the addend we extract from the lo insn. */
|
||||
/* Sign extend the addend we extract from the lo insn. */
|
||||
vallo = ((insnlo & 0xffff) ^ 0x8000) - 0x8000;
|
||||
|
||||
if (mips_hi16_list != NULL) {
|
||||
@@ -470,7 +470,7 @@ static int apply_r_mips_lo16(struct module *me, uint32_t *location,
|
||||
/*
|
||||
* The value for the HI16 had best be the same.
|
||||
*/
|
||||
if (v != l->value) {
|
||||
if (v != l->value) {
|
||||
printk(KERN_DEBUG "VPE loader: "
|
||||
"apply_r_mips_lo16/hi16: \t"
|
||||
"inconsistent value information\n");
|
||||
@@ -505,7 +505,7 @@ static int apply_r_mips_lo16(struct module *me, uint32_t *location,
|
||||
}
|
||||
|
||||
/*
|
||||
* Ok, we're done with the HI16 relocs. Now deal with the LO16.
|
||||
* Ok, we're done with the HI16 relocs. Now deal with the LO16.
|
||||
*/
|
||||
val = v + vallo;
|
||||
insnlo = (insnlo & ~0xffff) | (val & 0xffff);
|
||||
@@ -579,7 +579,7 @@ static int apply_relocations(Elf32_Shdr *sechdrs,
|
||||
res = reloc_handlers[ELF32_R_TYPE(r_info)](me, location, v);
|
||||
if( res ) {
|
||||
char *r = rstrs[ELF32_R_TYPE(r_info)];
|
||||
printk(KERN_WARNING "VPE loader: .text+0x%x "
|
||||
printk(KERN_WARNING "VPE loader: .text+0x%x "
|
||||
"relocation type %s for symbol \"%s\" failed\n",
|
||||
rel[i].r_offset, r ? r : "UNKNOWN",
|
||||
strtab + sym->st_name);
|
||||
@@ -697,18 +697,7 @@ static int vpe_run(struct vpe * v)
|
||||
dmt_flag = dmt();
|
||||
vpeflags = dvpe();
|
||||
|
||||
if (!list_empty(&v->tc)) {
|
||||
if ((t = list_entry(v->tc.next, struct tc, tc)) == NULL) {
|
||||
evpe(vpeflags);
|
||||
emt(dmt_flag);
|
||||
local_irq_restore(flags);
|
||||
|
||||
printk(KERN_WARNING
|
||||
"VPE loader: TC %d is already in use.\n",
|
||||
v->tc->index);
|
||||
return -ENOEXEC;
|
||||
}
|
||||
} else {
|
||||
if (list_empty(&v->tc)) {
|
||||
evpe(vpeflags);
|
||||
emt(dmt_flag);
|
||||
local_irq_restore(flags);
|
||||
@@ -720,6 +709,8 @@ static int vpe_run(struct vpe * v)
|
||||
return -ENOEXEC;
|
||||
}
|
||||
|
||||
t = list_first_entry(&v->tc, struct tc, tc);
|
||||
|
||||
/* Put MVPE's into 'configuration state' */
|
||||
set_c0_mvpcontrol(MVPCONTROL_VPC);
|
||||
|
||||
@@ -772,7 +763,7 @@ static int vpe_run(struct vpe * v)
|
||||
|
||||
/* Set up the XTC bit in vpeconf0 to point at our tc */
|
||||
write_vpe_c0_vpeconf0( (read_vpe_c0_vpeconf0() & ~(VPECONF0_XTC))
|
||||
| (t->index << VPECONF0_XTC_SHIFT));
|
||||
| (t->index << VPECONF0_XTC_SHIFT));
|
||||
|
||||
back_to_back_c0_hazard();
|
||||
|
||||
@@ -926,34 +917,34 @@ static int vpe_elfload(struct vpe * v)
|
||||
secstrings + sechdrs[i].sh_name, sechdrs[i].sh_addr);
|
||||
}
|
||||
|
||||
/* Fix up syms, so that st_value is a pointer to location. */
|
||||
simplify_symbols(sechdrs, symindex, strtab, secstrings,
|
||||
hdr->e_shnum, &mod);
|
||||
/* Fix up syms, so that st_value is a pointer to location. */
|
||||
simplify_symbols(sechdrs, symindex, strtab, secstrings,
|
||||
hdr->e_shnum, &mod);
|
||||
|
||||
/* Now do relocations. */
|
||||
for (i = 1; i < hdr->e_shnum; i++) {
|
||||
const char *strtab = (char *)sechdrs[strindex].sh_addr;
|
||||
unsigned int info = sechdrs[i].sh_info;
|
||||
/* Now do relocations. */
|
||||
for (i = 1; i < hdr->e_shnum; i++) {
|
||||
const char *strtab = (char *)sechdrs[strindex].sh_addr;
|
||||
unsigned int info = sechdrs[i].sh_info;
|
||||
|
||||
/* Not a valid relocation section? */
|
||||
if (info >= hdr->e_shnum)
|
||||
continue;
|
||||
/* Not a valid relocation section? */
|
||||
if (info >= hdr->e_shnum)
|
||||
continue;
|
||||
|
||||
/* Don't bother with non-allocated sections */
|
||||
if (!(sechdrs[info].sh_flags & SHF_ALLOC))
|
||||
continue;
|
||||
/* Don't bother with non-allocated sections */
|
||||
if (!(sechdrs[info].sh_flags & SHF_ALLOC))
|
||||
continue;
|
||||
|
||||
if (sechdrs[i].sh_type == SHT_REL)
|
||||
err = apply_relocations(sechdrs, strtab, symindex, i,
|
||||
&mod);
|
||||
else if (sechdrs[i].sh_type == SHT_RELA)
|
||||
err = apply_relocate_add(sechdrs, strtab, symindex, i,
|
||||
&mod);
|
||||
if (err < 0)
|
||||
return err;
|
||||
if (sechdrs[i].sh_type == SHT_REL)
|
||||
err = apply_relocations(sechdrs, strtab, symindex, i,
|
||||
&mod);
|
||||
else if (sechdrs[i].sh_type == SHT_RELA)
|
||||
err = apply_relocate_add(sechdrs, strtab, symindex, i,
|
||||
&mod);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
}
|
||||
} else {
|
||||
}
|
||||
} else {
|
||||
struct elf_phdr *phdr = (struct elf_phdr *) ((char *)hdr + hdr->e_phoff);
|
||||
|
||||
for (i = 0; i < hdr->e_phnum; i++) {
|
||||
@@ -968,16 +959,16 @@ static int vpe_elfload(struct vpe * v)
|
||||
}
|
||||
|
||||
for (i = 0; i < hdr->e_shnum; i++) {
|
||||
/* Internal symbols and strings. */
|
||||
if (sechdrs[i].sh_type == SHT_SYMTAB) {
|
||||
symindex = i;
|
||||
strindex = sechdrs[i].sh_link;
|
||||
strtab = (char *)hdr + sechdrs[strindex].sh_offset;
|
||||
/* Internal symbols and strings. */
|
||||
if (sechdrs[i].sh_type == SHT_SYMTAB) {
|
||||
symindex = i;
|
||||
strindex = sechdrs[i].sh_link;
|
||||
strtab = (char *)hdr + sechdrs[strindex].sh_offset;
|
||||
|
||||
/* mark the symtab's address for when we try to find the
|
||||
magic symbols */
|
||||
sechdrs[i].sh_addr = (size_t) hdr + sechdrs[i].sh_offset;
|
||||
}
|
||||
/* mark the symtab's address for when we try to find the
|
||||
magic symbols */
|
||||
sechdrs[i].sh_addr = (size_t) hdr + sechdrs[i].sh_offset;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1049,7 +1040,7 @@ static int getcwd(char *buff, int size)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* checks VPE is unused and gets ready to load program */
|
||||
/* checks VPE is unused and gets ready to load program */
|
||||
static int vpe_open(struct inode *inode, struct file *filp)
|
||||
{
|
||||
enum vpe_state state;
|
||||
@@ -1121,11 +1112,11 @@ static int vpe_release(struct inode *inode, struct file *filp)
|
||||
if (vpe_elfload(v) >= 0) {
|
||||
vpe_run(v);
|
||||
} else {
|
||||
printk(KERN_WARNING "VPE loader: ELF load failed.\n");
|
||||
printk(KERN_WARNING "VPE loader: ELF load failed.\n");
|
||||
ret = -ENOEXEC;
|
||||
}
|
||||
} else {
|
||||
printk(KERN_WARNING "VPE loader: only elf files are supported\n");
|
||||
printk(KERN_WARNING "VPE loader: only elf files are supported\n");
|
||||
ret = -ENOEXEC;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user