mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 07:20:53 +07:00
Merge branch 'unicore32' of git://git.kernel.org/pub/scm/linux/kernel/git/epip/linux-2.6-unicore32
* 'unicore32' of git://git.kernel.org/pub/scm/linux/kernel/git/epip/linux-2.6-unicore32: unicore32 framebuffer fix: get videomemory by __get_free_pages() and make it floatable unicore32 core architecture: remove duplicated #include unicore32 rtc driver fix: cleanup irq_set_freq and irq_set_state unicore32 fix: remove arch-specific futex support unicore32 ldscript fix: add cacheline parameter to PERCPU() macro
This commit is contained in:
commit
3230ca9dc6
@ -48,7 +48,7 @@ ASM_GENERIC_HEADERS += bitsperlong.h bug.h bugs.h
|
|||||||
ASM_GENERIC_HEADERS += cputime.h current.h
|
ASM_GENERIC_HEADERS += cputime.h current.h
|
||||||
ASM_GENERIC_HEADERS += device.h div64.h
|
ASM_GENERIC_HEADERS += device.h div64.h
|
||||||
ASM_GENERIC_HEADERS += emergency-restart.h errno.h
|
ASM_GENERIC_HEADERS += emergency-restart.h errno.h
|
||||||
ASM_GENERIC_HEADERS += fb.h fcntl.h ftrace.h
|
ASM_GENERIC_HEADERS += fb.h fcntl.h ftrace.h futex.h
|
||||||
ASM_GENERIC_HEADERS += hardirq.h hw_irq.h
|
ASM_GENERIC_HEADERS += hardirq.h hw_irq.h
|
||||||
ASM_GENERIC_HEADERS += ioctl.h ioctls.h ipcbuf.h irq_regs.h
|
ASM_GENERIC_HEADERS += ioctl.h ioctls.h ipcbuf.h irq_regs.h
|
||||||
ASM_GENERIC_HEADERS += kdebug.h kmap_types.h
|
ASM_GENERIC_HEADERS += kdebug.h kmap_types.h
|
||||||
|
@ -1,143 +0,0 @@
|
|||||||
/*
|
|
||||||
* linux/arch/unicore32/include/asm/futex.h
|
|
||||||
*
|
|
||||||
* Code specific to PKUnity SoC and UniCore ISA
|
|
||||||
*
|
|
||||||
* Copyright (C) 2001-2010 GUAN Xue-tao
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __UNICORE_FUTEX_H__
|
|
||||||
#define __UNICORE_FUTEX_H__
|
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
|
||||||
|
|
||||||
#include <linux/futex.h>
|
|
||||||
#include <linux/preempt.h>
|
|
||||||
#include <linux/uaccess.h>
|
|
||||||
#include <linux/errno.h>
|
|
||||||
|
|
||||||
#define __futex_atomic_op(insn, ret, oldval, uaddr, oparg) \
|
|
||||||
__asm__ __volatile__( \
|
|
||||||
"1: ldw.u %1, [%2]\n" \
|
|
||||||
" " insn "\n" \
|
|
||||||
"2: stw.u %0, [%2]\n" \
|
|
||||||
" mov %0, #0\n" \
|
|
||||||
"3:\n" \
|
|
||||||
" .pushsection __ex_table,\"a\"\n" \
|
|
||||||
" .align 3\n" \
|
|
||||||
" .long 1b, 4f, 2b, 4f\n" \
|
|
||||||
" .popsection\n" \
|
|
||||||
" .pushsection .fixup,\"ax\"\n" \
|
|
||||||
"4: mov %0, %4\n" \
|
|
||||||
" b 3b\n" \
|
|
||||||
" .popsection" \
|
|
||||||
: "=&r" (ret), "=&r" (oldval) \
|
|
||||||
: "r" (uaddr), "r" (oparg), "Ir" (-EFAULT) \
|
|
||||||
: "cc", "memory")
|
|
||||||
|
|
||||||
static inline int
|
|
||||||
futex_atomic_op_inuser(int encoded_op, int __user *uaddr)
|
|
||||||
{
|
|
||||||
int op = (encoded_op >> 28) & 7;
|
|
||||||
int cmp = (encoded_op >> 24) & 15;
|
|
||||||
int oparg = (encoded_op << 8) >> 20;
|
|
||||||
int cmparg = (encoded_op << 20) >> 20;
|
|
||||||
int oldval = 0, ret;
|
|
||||||
|
|
||||||
if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
|
|
||||||
oparg = 1 << oparg;
|
|
||||||
|
|
||||||
if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int)))
|
|
||||||
return -EFAULT;
|
|
||||||
|
|
||||||
pagefault_disable(); /* implies preempt_disable() */
|
|
||||||
|
|
||||||
switch (op) {
|
|
||||||
case FUTEX_OP_SET:
|
|
||||||
__futex_atomic_op("mov %0, %3", ret, oldval, uaddr, oparg);
|
|
||||||
break;
|
|
||||||
case FUTEX_OP_ADD:
|
|
||||||
__futex_atomic_op("add %0, %1, %3", ret, oldval, uaddr, oparg);
|
|
||||||
break;
|
|
||||||
case FUTEX_OP_OR:
|
|
||||||
__futex_atomic_op("or %0, %1, %3", ret, oldval, uaddr, oparg);
|
|
||||||
break;
|
|
||||||
case FUTEX_OP_ANDN:
|
|
||||||
__futex_atomic_op("and %0, %1, %3",
|
|
||||||
ret, oldval, uaddr, ~oparg);
|
|
||||||
break;
|
|
||||||
case FUTEX_OP_XOR:
|
|
||||||
__futex_atomic_op("xor %0, %1, %3", ret, oldval, uaddr, oparg);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ret = -ENOSYS;
|
|
||||||
}
|
|
||||||
|
|
||||||
pagefault_enable(); /* subsumes preempt_enable() */
|
|
||||||
|
|
||||||
if (!ret) {
|
|
||||||
switch (cmp) {
|
|
||||||
case FUTEX_OP_CMP_EQ:
|
|
||||||
ret = (oldval == cmparg);
|
|
||||||
break;
|
|
||||||
case FUTEX_OP_CMP_NE:
|
|
||||||
ret = (oldval != cmparg);
|
|
||||||
break;
|
|
||||||
case FUTEX_OP_CMP_LT:
|
|
||||||
ret = (oldval < cmparg);
|
|
||||||
break;
|
|
||||||
case FUTEX_OP_CMP_GE:
|
|
||||||
ret = (oldval >= cmparg);
|
|
||||||
break;
|
|
||||||
case FUTEX_OP_CMP_LE:
|
|
||||||
ret = (oldval <= cmparg);
|
|
||||||
break;
|
|
||||||
case FUTEX_OP_CMP_GT:
|
|
||||||
ret = (oldval > cmparg);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ret = -ENOSYS;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int
|
|
||||||
futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval)
|
|
||||||
{
|
|
||||||
int val;
|
|
||||||
|
|
||||||
if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int)))
|
|
||||||
return -EFAULT;
|
|
||||||
|
|
||||||
pagefault_disable(); /* implies preempt_disable() */
|
|
||||||
|
|
||||||
__asm__ __volatile__("@futex_atomic_cmpxchg_inatomic\n"
|
|
||||||
"1: ldw.u %0, [%3]\n"
|
|
||||||
" cmpxor.a %0, %1\n"
|
|
||||||
" bne 3f\n"
|
|
||||||
"2: stw.u %2, [%3]\n"
|
|
||||||
"3:\n"
|
|
||||||
" .pushsection __ex_table,\"a\"\n"
|
|
||||||
" .align 3\n"
|
|
||||||
" .long 1b, 4f, 2b, 4f\n"
|
|
||||||
" .popsection\n"
|
|
||||||
" .pushsection .fixup,\"ax\"\n"
|
|
||||||
"4: mov %0, %4\n"
|
|
||||||
" b 3b\n"
|
|
||||||
" .popsection"
|
|
||||||
: "=&r" (val)
|
|
||||||
: "r" (oldval), "r" (newval), "r" (uaddr), "Ir" (-EFAULT)
|
|
||||||
: "cc", "memory");
|
|
||||||
|
|
||||||
pagefault_enable(); /* subsumes preempt_enable() */
|
|
||||||
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* __KERNEL__ */
|
|
||||||
#endif /* __UNICORE_FUTEX_H__ */
|
|
@ -23,16 +23,6 @@
|
|||||||
#define PKUNITY_SDRAM_BASE 0x00000000 /* 0x00000000 - 0x7FFFFFFF 2GB */
|
#define PKUNITY_SDRAM_BASE 0x00000000 /* 0x00000000 - 0x7FFFFFFF 2GB */
|
||||||
#define PKUNITY_MMIO_BASE 0x80000000 /* 0x80000000 - 0xFFFFFFFF 2GB */
|
#define PKUNITY_MMIO_BASE 0x80000000 /* 0x80000000 - 0xFFFFFFFF 2GB */
|
||||||
|
|
||||||
/*
|
|
||||||
* PKUNITY Memory Map Addresses: 0x0D000000 - 0x0EFFFFFF (32MB)
|
|
||||||
* 0x0D000000 - 0x0DFFFFFF 16MB: for UVC
|
|
||||||
* 0x0E000000 - 0x0EFFFFFF 16MB: for UNIGFX
|
|
||||||
*/
|
|
||||||
#define PKUNITY_UVC_MMAP_BASE 0x0D000000
|
|
||||||
#define PKUNITY_UVC_MMAP_SIZE 0x01000000 /* 16MB */
|
|
||||||
#define PKUNITY_UNIGFX_MMAP_BASE 0x0E000000
|
|
||||||
#define PKUNITY_UNIGFX_MMAP_SIZE 0x01000000 /* 16MB */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PKUNITY System Bus Addresses (PCI): 0x80000000 - 0xBFFFFFFF (1GB)
|
* PKUNITY System Bus Addresses (PCI): 0x80000000 - 0xBFFFFFFF (1GB)
|
||||||
* 0x80000000 - 0x8000000B 12B PCI Configuration regs
|
* 0x80000000 - 0x8000000B 12B PCI Configuration regs
|
||||||
|
@ -50,7 +50,6 @@ void puv3_pci_adjust_zones(unsigned long *size, unsigned long *holes);
|
|||||||
|
|
||||||
/* kuser area */
|
/* kuser area */
|
||||||
#define KUSER_VECPAGE_BASE (KUSER_BASE + UL(0x3fff0000))
|
#define KUSER_VECPAGE_BASE (KUSER_BASE + UL(0x3fff0000))
|
||||||
#define KUSER_UNIGFX_BASE (PAGE_OFFSET + PKUNITY_UNIGFX_MMAP_BASE)
|
|
||||||
/* kuser_vecpage (0xbfff0000) is ro, and vectors page (0xffff0000) is rw */
|
/* kuser_vecpage (0xbfff0000) is ro, and vectors page (0xffff0000) is rw */
|
||||||
#define kuser_vecpage_to_vectors(x) ((x) - (KUSER_VECPAGE_BASE) \
|
#define kuser_vecpage_to_vectors(x) ((x) - (KUSER_VECPAGE_BASE) \
|
||||||
+ (VECTORS_BASE))
|
+ (VECTORS_BASE))
|
||||||
|
@ -99,11 +99,6 @@ static struct resource puv3_unigfx_resources[] = {
|
|||||||
.end = io_v2p(PKUNITY_UNIGFX_BASE) + 0xfff,
|
.end = io_v2p(PKUNITY_UNIGFX_BASE) + 0xfff,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
[1] = {
|
|
||||||
.start = PKUNITY_UNIGFX_MMAP_BASE,
|
|
||||||
.end = PKUNITY_UNIGFX_MMAP_BASE + PKUNITY_UNIGFX_MMAP_SIZE,
|
|
||||||
.flags = IORESOURCE_MEM,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct resource puv3_rtc_resources[] = {
|
static struct resource puv3_rtc_resources[] = {
|
||||||
|
@ -88,11 +88,6 @@ static int puv3_rtc_setpie(struct device *dev, int enabled)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int puv3_rtc_setfreq(struct device *dev, int freq)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Time read/write */
|
/* Time read/write */
|
||||||
|
|
||||||
static int puv3_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm)
|
static int puv3_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm)
|
||||||
@ -214,8 +209,6 @@ static const struct rtc_class_ops puv3_rtcops = {
|
|||||||
.set_time = puv3_rtc_settime,
|
.set_time = puv3_rtc_settime,
|
||||||
.read_alarm = puv3_rtc_getalarm,
|
.read_alarm = puv3_rtc_getalarm,
|
||||||
.set_alarm = puv3_rtc_setalarm,
|
.set_alarm = puv3_rtc_setalarm,
|
||||||
.irq_set_freq = puv3_rtc_setfreq,
|
|
||||||
.irq_set_state = puv3_rtc_setpie,
|
|
||||||
.proc = puv3_rtc_proc,
|
.proc = puv3_rtc_proc,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -294,8 +287,6 @@ static int puv3_rtc_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
puv3_rtc_enable(pdev, 1);
|
puv3_rtc_enable(pdev, 1);
|
||||||
|
|
||||||
puv3_rtc_setfreq(&pdev->dev, 1);
|
|
||||||
|
|
||||||
/* register RTC and exit */
|
/* register RTC and exit */
|
||||||
|
|
||||||
rtc = rtc_device_register("pkunity", &pdev->dev, &puv3_rtcops,
|
rtc = rtc_device_register("pkunity", &pdev->dev, &puv3_rtcops,
|
||||||
|
@ -63,12 +63,6 @@ static char default_command_line[COMMAND_LINE_SIZE] __initdata = CONFIG_CMDLINE;
|
|||||||
* Standard memory resources
|
* Standard memory resources
|
||||||
*/
|
*/
|
||||||
static struct resource mem_res[] = {
|
static struct resource mem_res[] = {
|
||||||
{
|
|
||||||
.name = "Video RAM",
|
|
||||||
.start = 0,
|
|
||||||
.end = 0,
|
|
||||||
.flags = IORESOURCE_MEM
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
.name = "Kernel text",
|
.name = "Kernel text",
|
||||||
.start = 0,
|
.start = 0,
|
||||||
@ -83,9 +77,8 @@ static struct resource mem_res[] = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#define video_ram mem_res[0]
|
#define kernel_code mem_res[0]
|
||||||
#define kernel_code mem_res[1]
|
#define kernel_data mem_res[1]
|
||||||
#define kernel_data mem_res[2]
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* These functions re-use the assembly code in head.S, which
|
* These functions re-use the assembly code in head.S, which
|
||||||
@ -224,10 +217,6 @@ request_standard_resources(struct meminfo *mi)
|
|||||||
kernel_data.end <= res->end)
|
kernel_data.end <= res->end)
|
||||||
request_resource(res, &kernel_data);
|
request_resource(res, &kernel_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
video_ram.start = PKUNITY_UNIGFX_MMAP_BASE;
|
|
||||||
video_ram.end = PKUNITY_UNIGFX_MMAP_BASE + PKUNITY_UNIGFX_MMAP_SIZE;
|
|
||||||
request_resource(&iomem_resource, &video_ram);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void (*init_machine)(void) __initdata;
|
static void (*init_machine)(void) __initdata;
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/hardirq.h>
|
#include <linux/hardirq.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/uaccess.h>
|
|
||||||
#include <linux/atomic.h>
|
#include <linux/atomic.h>
|
||||||
#include <linux/unistd.h>
|
#include <linux/unistd.h>
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include <asm/thread_info.h>
|
#include <asm/thread_info.h>
|
||||||
#include <asm/memory.h>
|
#include <asm/memory.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
|
#include <asm/cache.h>
|
||||||
|
|
||||||
OUTPUT_ARCH(unicore32)
|
OUTPUT_ARCH(unicore32)
|
||||||
ENTRY(stext)
|
ENTRY(stext)
|
||||||
@ -29,7 +30,7 @@ SECTIONS
|
|||||||
HEAD_TEXT_SECTION
|
HEAD_TEXT_SECTION
|
||||||
INIT_TEXT_SECTION(PAGE_SIZE)
|
INIT_TEXT_SECTION(PAGE_SIZE)
|
||||||
INIT_DATA_SECTION(16)
|
INIT_DATA_SECTION(16)
|
||||||
PERCPU(PAGE_SIZE)
|
PERCPU(L1_CACHE_BYTES, PAGE_SIZE)
|
||||||
__init_end = .;
|
__init_end = .;
|
||||||
|
|
||||||
_stext = .;
|
_stext = .;
|
||||||
@ -45,10 +46,10 @@ SECTIONS
|
|||||||
|
|
||||||
_sdata = .;
|
_sdata = .;
|
||||||
RO_DATA_SECTION(PAGE_SIZE)
|
RO_DATA_SECTION(PAGE_SIZE)
|
||||||
RW_DATA_SECTION(32, PAGE_SIZE, THREAD_SIZE)
|
RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE)
|
||||||
_edata = .;
|
_edata = .;
|
||||||
|
|
||||||
EXCEPTION_TABLE(32)
|
EXCEPTION_TABLE(L1_CACHE_BYTES)
|
||||||
NOTES
|
NOTES
|
||||||
|
|
||||||
BSS_SECTION(0, 0, 0)
|
BSS_SECTION(0, 0, 0)
|
||||||
|
@ -338,15 +338,6 @@ void __init uc32_mm_memblock_reserve(void)
|
|||||||
* and can only be in node 0.
|
* and can only be in node 0.
|
||||||
*/
|
*/
|
||||||
memblock_reserve(__pa(swapper_pg_dir), PTRS_PER_PGD * sizeof(pgd_t));
|
memblock_reserve(__pa(swapper_pg_dir), PTRS_PER_PGD * sizeof(pgd_t));
|
||||||
|
|
||||||
#ifdef CONFIG_PUV3_UNIGFX
|
|
||||||
/*
|
|
||||||
* These should likewise go elsewhere. They pre-reserve the
|
|
||||||
* screen/video memory region at the 48M~64M of main system memory.
|
|
||||||
*/
|
|
||||||
memblock_reserve(PKUNITY_UNIGFX_MMAP_BASE, PKUNITY_UNIGFX_MMAP_SIZE);
|
|
||||||
memblock_reserve(PKUNITY_UVC_MMAP_BASE, PKUNITY_UVC_MMAP_SIZE);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -370,17 +361,6 @@ static void __init devicemaps_init(void)
|
|||||||
for (addr = VMALLOC_END; addr; addr += PGDIR_SIZE)
|
for (addr = VMALLOC_END; addr; addr += PGDIR_SIZE)
|
||||||
pmd_clear(pmd_off_k(addr));
|
pmd_clear(pmd_off_k(addr));
|
||||||
|
|
||||||
/*
|
|
||||||
* Create a mapping for UniGFX VRAM
|
|
||||||
*/
|
|
||||||
#ifdef CONFIG_PUV3_UNIGFX
|
|
||||||
map.pfn = __phys_to_pfn(PKUNITY_UNIGFX_MMAP_BASE);
|
|
||||||
map.virtual = KUSER_UNIGFX_BASE;
|
|
||||||
map.length = PKUNITY_UNIGFX_MMAP_SIZE;
|
|
||||||
map.type = MT_KUSER;
|
|
||||||
create_mapping(&map);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create a mapping for the machine vectors at the high-vectors
|
* Create a mapping for the machine vectors at the high-vectors
|
||||||
* location (0xffff0000). If we aren't using high-vectors, also
|
* location (0xffff0000). If we aren't using high-vectors, also
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/vmalloc.h>
|
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/fb.h>
|
#include <linux/fb.h>
|
||||||
@ -531,7 +530,7 @@ static int unifb_set_par(struct fb_info *info)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
writel(PKUNITY_UNIGFX_MMAP_BASE, UDE_FSA);
|
writel(info->fix.smem_start, UDE_FSA);
|
||||||
writel(info->var.yres, UDE_LS);
|
writel(info->var.yres, UDE_LS);
|
||||||
writel(get_line_length(info->var.xres,
|
writel(get_line_length(info->var.xres,
|
||||||
info->var.bits_per_pixel) >> 3, UDE_PS);
|
info->var.bits_per_pixel) >> 3, UDE_PS);
|
||||||
@ -680,13 +679,27 @@ static int unifb_probe(struct platform_device *dev)
|
|||||||
struct fb_info *info;
|
struct fb_info *info;
|
||||||
u32 unifb_regs[UNIFB_REGS_NUM];
|
u32 unifb_regs[UNIFB_REGS_NUM];
|
||||||
int retval = -ENOMEM;
|
int retval = -ENOMEM;
|
||||||
struct resource *iomem, *mapmem;
|
struct resource *iomem;
|
||||||
|
void *videomemory;
|
||||||
|
|
||||||
|
videomemory = (void *)__get_free_pages(GFP_KERNEL | __GFP_COMP,
|
||||||
|
get_order(UNIFB_MEMSIZE));
|
||||||
|
if (!videomemory)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
memset(videomemory, 0, UNIFB_MEMSIZE);
|
||||||
|
|
||||||
|
unifb_fix.smem_start = virt_to_phys(videomemory);
|
||||||
|
unifb_fix.smem_len = UNIFB_MEMSIZE;
|
||||||
|
|
||||||
|
iomem = platform_get_resource(dev, IORESOURCE_MEM, 0);
|
||||||
|
unifb_fix.mmio_start = iomem->start;
|
||||||
|
|
||||||
info = framebuffer_alloc(sizeof(u32)*256, &dev->dev);
|
info = framebuffer_alloc(sizeof(u32)*256, &dev->dev);
|
||||||
if (!info)
|
if (!info)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
info->screen_base = (char __iomem *)KUSER_UNIGFX_BASE;
|
info->screen_base = (char __iomem *)videomemory;
|
||||||
info->fbops = &unifb_ops;
|
info->fbops = &unifb_ops;
|
||||||
|
|
||||||
retval = fb_find_mode(&info->var, info, NULL,
|
retval = fb_find_mode(&info->var, info, NULL,
|
||||||
@ -695,13 +708,6 @@ static int unifb_probe(struct platform_device *dev)
|
|||||||
if (!retval || (retval == 4))
|
if (!retval || (retval == 4))
|
||||||
info->var = unifb_default;
|
info->var = unifb_default;
|
||||||
|
|
||||||
iomem = platform_get_resource(dev, IORESOURCE_MEM, 0);
|
|
||||||
unifb_fix.mmio_start = iomem->start;
|
|
||||||
|
|
||||||
mapmem = platform_get_resource(dev, IORESOURCE_MEM, 1);
|
|
||||||
unifb_fix.smem_start = mapmem->start;
|
|
||||||
unifb_fix.smem_len = UNIFB_MEMSIZE;
|
|
||||||
|
|
||||||
info->fix = unifb_fix;
|
info->fix = unifb_fix;
|
||||||
info->pseudo_palette = info->par;
|
info->pseudo_palette = info->par;
|
||||||
info->par = NULL;
|
info->par = NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user