Merge git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6: sh: LCDC dcache flush for deferred io sh: Fix compiler error and include the definition of IS_ERR_VALUE sh: re-add LCDC fbdev support to the Migo-R defconfig sh: fix se7724 ceu names sh: ms7724se: Enable sh_eth in defconfig. arch/sh/boards/mach-se/7206/io.c: Remove unnecessary semicolons sh: ms7724se: Add sh_eth support nommu: provide follow_pfn(). sh: Kill off unused DEBUG_BOOTMEM symbol. perf_counter tools: add cpu_relax()/rmb() definitions for sh. sh64: Hook up page fault events for software perf counters. sh: Hook up page fault events for software perf counters. sh: make set_perf_counter_pending() static inline. clocksource: sh_tmu: Make undefined TCOR behaviour less undefined.
This commit is contained in:
@@ -61,10 +61,6 @@ config EARLY_PRINTK
|
|||||||
select both the EARLY_SCIF_CONSOLE and SH_STANDARD_BIOS, using
|
select both the EARLY_SCIF_CONSOLE and SH_STANDARD_BIOS, using
|
||||||
the kernel command line option to toggle back and forth.
|
the kernel command line option to toggle back and forth.
|
||||||
|
|
||||||
config DEBUG_BOOTMEM
|
|
||||||
depends on DEBUG_KERNEL
|
|
||||||
bool "Debug BOOTMEM initialization"
|
|
||||||
|
|
||||||
config DEBUG_STACKOVERFLOW
|
config DEBUG_STACKOVERFLOW
|
||||||
bool "Check for stack overflows"
|
bool "Check for stack overflows"
|
||||||
depends on DEBUG_KERNEL && SUPERH32
|
depends on DEBUG_KERNEL && SUPERH32
|
||||||
|
@@ -50,7 +50,7 @@ unsigned char se7206_inb_p(unsigned long port)
|
|||||||
|
|
||||||
unsigned short se7206_inw(unsigned long port)
|
unsigned short se7206_inw(unsigned long port)
|
||||||
{
|
{
|
||||||
return *port2adr(port);;
|
return *port2adr(port);
|
||||||
}
|
}
|
||||||
|
|
||||||
void se7206_outb(unsigned char value, unsigned long port)
|
void se7206_outb(unsigned char value, unsigned long port)
|
||||||
|
@@ -23,6 +23,8 @@
|
|||||||
#include <media/sh_mobile_ceu.h>
|
#include <media/sh_mobile_ceu.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/heartbeat.h>
|
#include <asm/heartbeat.h>
|
||||||
|
#include <asm/sh_eth.h>
|
||||||
|
#include <asm/clock.h>
|
||||||
#include <asm/sh_keysc.h>
|
#include <asm/sh_keysc.h>
|
||||||
#include <cpu/sh7724.h>
|
#include <cpu/sh7724.h>
|
||||||
#include <mach-se/mach/se7724.h>
|
#include <mach-se/mach/se7724.h>
|
||||||
@@ -272,6 +274,34 @@ static struct platform_device keysc_device = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* SH Eth */
|
||||||
|
static struct resource sh_eth_resources[] = {
|
||||||
|
[0] = {
|
||||||
|
.start = SH_ETH_ADDR,
|
||||||
|
.end = SH_ETH_ADDR + 0x1FC,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
},
|
||||||
|
[1] = {
|
||||||
|
.start = 91,
|
||||||
|
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
struct sh_eth_plat_data sh_eth_plat = {
|
||||||
|
.phy = 0x1f, /* SMSC LAN8187 */
|
||||||
|
.edmac_endian = EDMAC_LITTLE_ENDIAN,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device sh_eth_device = {
|
||||||
|
.name = "sh-eth",
|
||||||
|
.id = 0,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &sh_eth_plat,
|
||||||
|
},
|
||||||
|
.num_resources = ARRAY_SIZE(sh_eth_resources),
|
||||||
|
.resource = sh_eth_resources,
|
||||||
|
};
|
||||||
|
|
||||||
static struct platform_device *ms7724se_devices[] __initdata = {
|
static struct platform_device *ms7724se_devices[] __initdata = {
|
||||||
&heartbeat_device,
|
&heartbeat_device,
|
||||||
&smc91x_eth_device,
|
&smc91x_eth_device,
|
||||||
@@ -280,8 +310,57 @@ static struct platform_device *ms7724se_devices[] __initdata = {
|
|||||||
&ceu0_device,
|
&ceu0_device,
|
||||||
&ceu1_device,
|
&ceu1_device,
|
||||||
&keysc_device,
|
&keysc_device,
|
||||||
|
&sh_eth_device,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define EEPROM_OP 0xBA206000
|
||||||
|
#define EEPROM_ADR 0xBA206004
|
||||||
|
#define EEPROM_DATA 0xBA20600C
|
||||||
|
#define EEPROM_STAT 0xBA206010
|
||||||
|
#define EEPROM_STRT 0xBA206014
|
||||||
|
static int __init sh_eth_is_eeprom_ready(void)
|
||||||
|
{
|
||||||
|
int t = 10000;
|
||||||
|
|
||||||
|
while (t--) {
|
||||||
|
if (!ctrl_inw(EEPROM_STAT))
|
||||||
|
return 1;
|
||||||
|
cpu_relax();
|
||||||
|
}
|
||||||
|
|
||||||
|
printk(KERN_ERR "ms7724se can not access to eeprom\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init sh_eth_init(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
u16 mac[3];
|
||||||
|
|
||||||
|
/* check EEPROM status */
|
||||||
|
if (!sh_eth_is_eeprom_ready())
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* read MAC addr from EEPROM */
|
||||||
|
for (i = 0 ; i < 3 ; i++) {
|
||||||
|
ctrl_outw(0x0, EEPROM_OP); /* read */
|
||||||
|
ctrl_outw(i*2, EEPROM_ADR);
|
||||||
|
ctrl_outw(0x1, EEPROM_STRT);
|
||||||
|
if (!sh_eth_is_eeprom_ready())
|
||||||
|
return;
|
||||||
|
|
||||||
|
mac[i] = ctrl_inw(EEPROM_DATA);
|
||||||
|
mac[i] = ((mac[i] & 0xFF) << 8) | (mac[i] >> 8); /* swap */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* reset sh-eth */
|
||||||
|
ctrl_outl(0x1, SH_ETH_ADDR + 0x0);
|
||||||
|
|
||||||
|
/* set MAC addr */
|
||||||
|
ctrl_outl(((mac[0] << 16) | (mac[1])), SH_ETH_MAHR);
|
||||||
|
ctrl_outl((mac[2]), SH_ETH_MALR);
|
||||||
|
}
|
||||||
|
|
||||||
#define SW4140 0xBA201000
|
#define SW4140 0xBA201000
|
||||||
#define FPGA_OUT 0xBA200400
|
#define FPGA_OUT 0xBA200400
|
||||||
#define PORT_HIZA 0xA4050158
|
#define PORT_HIZA 0xA4050158
|
||||||
@@ -302,7 +381,8 @@ static int __init devices_setup(void)
|
|||||||
ctrl_outw(ctrl_inw(FPGA_OUT) &
|
ctrl_outw(ctrl_inw(FPGA_OUT) &
|
||||||
~((1 << 1) | /* LAN */
|
~((1 << 1) | /* LAN */
|
||||||
(1 << 6) | /* VIDEO DAC */
|
(1 << 6) | /* VIDEO DAC */
|
||||||
(1 << 12)), /* USB0 */
|
(1 << 12) | /* USB0 */
|
||||||
|
(1 << 14)), /* RMII */
|
||||||
FPGA_OUT);
|
FPGA_OUT);
|
||||||
|
|
||||||
/* enable IRQ 0,1,2 */
|
/* enable IRQ 0,1,2 */
|
||||||
@@ -374,7 +454,7 @@ static int __init devices_setup(void)
|
|||||||
gpio_request(GPIO_FN_VIO0_CLK, NULL);
|
gpio_request(GPIO_FN_VIO0_CLK, NULL);
|
||||||
gpio_request(GPIO_FN_VIO0_FLD, NULL);
|
gpio_request(GPIO_FN_VIO0_FLD, NULL);
|
||||||
gpio_request(GPIO_FN_VIO0_HD, NULL);
|
gpio_request(GPIO_FN_VIO0_HD, NULL);
|
||||||
platform_resource_setup_memory(&ceu0_device, "ceu", 4 << 20);
|
platform_resource_setup_memory(&ceu0_device, "ceu0", 4 << 20);
|
||||||
|
|
||||||
/* enable CEU1 */
|
/* enable CEU1 */
|
||||||
gpio_request(GPIO_FN_VIO1_D7, NULL);
|
gpio_request(GPIO_FN_VIO1_D7, NULL);
|
||||||
@@ -389,7 +469,7 @@ static int __init devices_setup(void)
|
|||||||
gpio_request(GPIO_FN_VIO1_HD, NULL);
|
gpio_request(GPIO_FN_VIO1_HD, NULL);
|
||||||
gpio_request(GPIO_FN_VIO1_VD, NULL);
|
gpio_request(GPIO_FN_VIO1_VD, NULL);
|
||||||
gpio_request(GPIO_FN_VIO1_CLK, NULL);
|
gpio_request(GPIO_FN_VIO1_CLK, NULL);
|
||||||
platform_resource_setup_memory(&ceu1_device, "ceu", 4 << 20);
|
platform_resource_setup_memory(&ceu1_device, "ceu1", 4 << 20);
|
||||||
|
|
||||||
/* KEYSC */
|
/* KEYSC */
|
||||||
gpio_request(GPIO_FN_KEYOUT5_IN5, NULL);
|
gpio_request(GPIO_FN_KEYOUT5_IN5, NULL);
|
||||||
@@ -404,6 +484,28 @@ static int __init devices_setup(void)
|
|||||||
gpio_request(GPIO_FN_KEYOUT1, NULL);
|
gpio_request(GPIO_FN_KEYOUT1, NULL);
|
||||||
gpio_request(GPIO_FN_KEYOUT0, NULL);
|
gpio_request(GPIO_FN_KEYOUT0, NULL);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* enable SH-Eth
|
||||||
|
*
|
||||||
|
* please remove J33 pin from your board !!
|
||||||
|
*
|
||||||
|
* ms7724 board should not use GPIO_FN_LNKSTA pin
|
||||||
|
* So, This time PTX5 is set to input pin
|
||||||
|
*/
|
||||||
|
gpio_request(GPIO_FN_RMII_RXD0, NULL);
|
||||||
|
gpio_request(GPIO_FN_RMII_RXD1, NULL);
|
||||||
|
gpio_request(GPIO_FN_RMII_TXD0, NULL);
|
||||||
|
gpio_request(GPIO_FN_RMII_TXD1, NULL);
|
||||||
|
gpio_request(GPIO_FN_RMII_REF_CLK, NULL);
|
||||||
|
gpio_request(GPIO_FN_RMII_TX_EN, NULL);
|
||||||
|
gpio_request(GPIO_FN_RMII_RX_ER, NULL);
|
||||||
|
gpio_request(GPIO_FN_RMII_CRS_DV, NULL);
|
||||||
|
gpio_request(GPIO_FN_MDIO, NULL);
|
||||||
|
gpio_request(GPIO_FN_MDC, NULL);
|
||||||
|
gpio_request(GPIO_PTX5, NULL);
|
||||||
|
gpio_direction_input(GPIO_PTX5);
|
||||||
|
sh_eth_init();
|
||||||
|
|
||||||
if (sw & SW41_B) {
|
if (sw & SW41_B) {
|
||||||
/* SVGA */
|
/* SVGA */
|
||||||
lcdc_info.ch[0].lcd_cfg.xres = 800;
|
lcdc_info.ch[0].lcd_cfg.xres = 800;
|
||||||
|
@@ -309,7 +309,7 @@ CONFIG_ZERO_PAGE_OFFSET=0x00001000
|
|||||||
CONFIG_BOOT_LINK_OFFSET=0x00800000
|
CONFIG_BOOT_LINK_OFFSET=0x00800000
|
||||||
CONFIG_ENTRY_OFFSET=0x00001000
|
CONFIG_ENTRY_OFFSET=0x00001000
|
||||||
CONFIG_CMDLINE_BOOL=y
|
CONFIG_CMDLINE_BOOL=y
|
||||||
CONFIG_CMDLINE="console=ttySC0,115200 earlyprintk=serial ip=on root=/dev/nfs ip=dhcp"
|
CONFIG_CMDLINE="console=tty0 console=ttySC0,115200 earlyprintk=serial ip=on root=/dev/nfs ip=dhcp"
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bus options
|
# Bus options
|
||||||
@@ -858,7 +858,35 @@ CONFIG_VIDEO_SH_MOBILE_CEU=y
|
|||||||
#
|
#
|
||||||
# CONFIG_VGASTATE is not set
|
# CONFIG_VGASTATE is not set
|
||||||
# CONFIG_VIDEO_OUTPUT_CONTROL is not set
|
# CONFIG_VIDEO_OUTPUT_CONTROL is not set
|
||||||
# CONFIG_FB is not set
|
CONFIG_FB=y
|
||||||
|
# CONFIG_FIRMWARE_EDID is not set
|
||||||
|
# CONFIG_FB_DDC is not set
|
||||||
|
# CONFIG_FB_BOOT_VESA_SUPPORT is not set
|
||||||
|
# CONFIG_FB_CFB_FILLRECT is not set
|
||||||
|
# CONFIG_FB_CFB_COPYAREA is not set
|
||||||
|
# CONFIG_FB_CFB_IMAGEBLIT is not set
|
||||||
|
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
|
||||||
|
CONFIG_FB_SYS_FILLRECT=y
|
||||||
|
CONFIG_FB_SYS_COPYAREA=y
|
||||||
|
CONFIG_FB_SYS_IMAGEBLIT=y
|
||||||
|
# CONFIG_FB_FOREIGN_ENDIAN is not set
|
||||||
|
CONFIG_FB_SYS_FOPS=y
|
||||||
|
CONFIG_FB_DEFERRED_IO=y
|
||||||
|
# CONFIG_FB_SVGALIB is not set
|
||||||
|
# CONFIG_FB_MACMODES is not set
|
||||||
|
# CONFIG_FB_BACKLIGHT is not set
|
||||||
|
# CONFIG_FB_MODE_HELPERS is not set
|
||||||
|
# CONFIG_FB_TILEBLITTING is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Frame buffer hardware drivers
|
||||||
|
#
|
||||||
|
# CONFIG_FB_S1D13XXX is not set
|
||||||
|
CONFIG_FB_SH_MOBILE_LCDC=y
|
||||||
|
# CONFIG_FB_VIRTUAL is not set
|
||||||
|
# CONFIG_FB_METRONOME is not set
|
||||||
|
# CONFIG_FB_MB862XX is not set
|
||||||
|
# CONFIG_FB_BROADSHEET is not set
|
||||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -870,6 +898,27 @@ CONFIG_VIDEO_SH_MOBILE_CEU=y
|
|||||||
# Console display driver support
|
# Console display driver support
|
||||||
#
|
#
|
||||||
CONFIG_DUMMY_CONSOLE=y
|
CONFIG_DUMMY_CONSOLE=y
|
||||||
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
|
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
|
||||||
|
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
|
||||||
|
CONFIG_FONTS=y
|
||||||
|
# CONFIG_FONT_8x8 is not set
|
||||||
|
# CONFIG_FONT_8x16 is not set
|
||||||
|
# CONFIG_FONT_6x11 is not set
|
||||||
|
# CONFIG_FONT_7x14 is not set
|
||||||
|
# CONFIG_FONT_PEARL_8x8 is not set
|
||||||
|
# CONFIG_FONT_ACORN_8x8 is not set
|
||||||
|
CONFIG_FONT_MINI_4x6=y
|
||||||
|
# CONFIG_FONT_SUN8x16 is not set
|
||||||
|
# CONFIG_FONT_SUN12x22 is not set
|
||||||
|
# CONFIG_FONT_10x18 is not set
|
||||||
|
CONFIG_LOGO=y
|
||||||
|
# CONFIG_LOGO_LINUX_MONO is not set
|
||||||
|
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||||
|
# CONFIG_LOGO_LINUX_CLUT224 is not set
|
||||||
|
# CONFIG_LOGO_SUPERH_MONO is not set
|
||||||
|
CONFIG_LOGO_SUPERH_VGA16=y
|
||||||
|
# CONFIG_LOGO_SUPERH_CLUT224 is not set
|
||||||
# CONFIG_SOUND is not set
|
# CONFIG_SOUND is not set
|
||||||
CONFIG_HID_SUPPORT=y
|
CONFIG_HID_SUPPORT=y
|
||||||
CONFIG_HID=y
|
CONFIG_HID=y
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.30
|
# Linux kernel version: 2.6.30
|
||||||
# Thu Jun 18 16:09:05 2009
|
# Mon Jun 29 16:28:43 2009
|
||||||
#
|
#
|
||||||
CONFIG_SUPERH=y
|
CONFIG_SUPERH=y
|
||||||
CONFIG_SUPERH32=y
|
CONFIG_SUPERH32=y
|
||||||
@@ -14,6 +14,7 @@ CONFIG_GENERIC_HWEIGHT=y
|
|||||||
CONFIG_GENERIC_HARDIRQS=y
|
CONFIG_GENERIC_HARDIRQS=y
|
||||||
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
|
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
|
||||||
CONFIG_GENERIC_IRQ_PROBE=y
|
CONFIG_GENERIC_IRQ_PROBE=y
|
||||||
|
CONFIG_IRQ_PER_CPU=y
|
||||||
CONFIG_GENERIC_GPIO=y
|
CONFIG_GENERIC_GPIO=y
|
||||||
CONFIG_GENERIC_TIME=y
|
CONFIG_GENERIC_TIME=y
|
||||||
CONFIG_GENERIC_CLOCKEVENTS=y
|
CONFIG_GENERIC_CLOCKEVENTS=y
|
||||||
@@ -28,7 +29,9 @@ CONFIG_HAVE_LATENCYTOP_SUPPORT=y
|
|||||||
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
|
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
|
||||||
CONFIG_ARCH_NO_VIRT_TO_BUS=y
|
CONFIG_ARCH_NO_VIRT_TO_BUS=y
|
||||||
CONFIG_ARCH_HAS_DEFAULT_IDLE=y
|
CONFIG_ARCH_HAS_DEFAULT_IDLE=y
|
||||||
|
CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
|
||||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||||
|
CONFIG_CONSTRUCTORS=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# General setup
|
# General setup
|
||||||
@@ -88,10 +91,12 @@ CONFIG_TIMERFD=y
|
|||||||
CONFIG_EVENTFD=y
|
CONFIG_EVENTFD=y
|
||||||
CONFIG_SHMEM=y
|
CONFIG_SHMEM=y
|
||||||
CONFIG_AIO=y
|
CONFIG_AIO=y
|
||||||
|
CONFIG_HAVE_PERF_COUNTERS=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Performance Counters
|
# Performance Counters
|
||||||
#
|
#
|
||||||
|
# CONFIG_PERF_COUNTERS is not set
|
||||||
CONFIG_VM_EVENT_COUNTERS=y
|
CONFIG_VM_EVENT_COUNTERS=y
|
||||||
# CONFIG_STRIP_ASM_SYMS is not set
|
# CONFIG_STRIP_ASM_SYMS is not set
|
||||||
CONFIG_COMPAT_BRK=y
|
CONFIG_COMPAT_BRK=y
|
||||||
@@ -107,6 +112,10 @@ CONFIG_HAVE_KRETPROBES=y
|
|||||||
CONFIG_HAVE_ARCH_TRACEHOOK=y
|
CONFIG_HAVE_ARCH_TRACEHOOK=y
|
||||||
CONFIG_HAVE_CLK=y
|
CONFIG_HAVE_CLK=y
|
||||||
CONFIG_HAVE_DMA_API_DEBUG=y
|
CONFIG_HAVE_DMA_API_DEBUG=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# GCOV-based kernel profiling
|
||||||
|
#
|
||||||
# CONFIG_SLOW_WORK is not set
|
# CONFIG_SLOW_WORK is not set
|
||||||
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
|
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
|
||||||
CONFIG_SLABINFO=y
|
CONFIG_SLABINFO=y
|
||||||
@@ -119,7 +128,7 @@ CONFIG_MODULE_UNLOAD=y
|
|||||||
# CONFIG_MODVERSIONS is not set
|
# CONFIG_MODVERSIONS is not set
|
||||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||||
CONFIG_BLOCK=y
|
CONFIG_BLOCK=y
|
||||||
# CONFIG_LBD is not set
|
CONFIG_LBDAF=y
|
||||||
# CONFIG_BLK_DEV_BSG is not set
|
# CONFIG_BLK_DEV_BSG is not set
|
||||||
# CONFIG_BLK_DEV_INTEGRITY is not set
|
# CONFIG_BLK_DEV_INTEGRITY is not set
|
||||||
|
|
||||||
@@ -584,7 +593,6 @@ CONFIG_SCSI_WAIT_SCAN=m
|
|||||||
# CONFIG_SCSI_SRP_ATTRS is not set
|
# CONFIG_SCSI_SRP_ATTRS is not set
|
||||||
CONFIG_SCSI_LOWLEVEL=y
|
CONFIG_SCSI_LOWLEVEL=y
|
||||||
# CONFIG_ISCSI_TCP is not set
|
# CONFIG_ISCSI_TCP is not set
|
||||||
# CONFIG_SCSI_BNX2_ISCSI is not set
|
|
||||||
# CONFIG_LIBFC is not set
|
# CONFIG_LIBFC is not set
|
||||||
# CONFIG_LIBFCOE is not set
|
# CONFIG_LIBFCOE is not set
|
||||||
# CONFIG_SCSI_DEBUG is not set
|
# CONFIG_SCSI_DEBUG is not set
|
||||||
@@ -624,7 +632,7 @@ CONFIG_NET_ETHERNET=y
|
|||||||
CONFIG_MII=y
|
CONFIG_MII=y
|
||||||
# CONFIG_AX88796 is not set
|
# CONFIG_AX88796 is not set
|
||||||
# CONFIG_STNIC is not set
|
# CONFIG_STNIC is not set
|
||||||
# CONFIG_SH_ETH is not set
|
CONFIG_SH_ETH=y
|
||||||
CONFIG_SMC91X=y
|
CONFIG_SMC91X=y
|
||||||
# CONFIG_ENC28J60 is not set
|
# CONFIG_ENC28J60 is not set
|
||||||
# CONFIG_ETHOC is not set
|
# CONFIG_ETHOC is not set
|
||||||
@@ -801,6 +809,11 @@ CONFIG_SPI_BITBANG=y
|
|||||||
#
|
#
|
||||||
# CONFIG_SPI_SPIDEV is not set
|
# CONFIG_SPI_SPIDEV is not set
|
||||||
# CONFIG_SPI_TLE62X0 is not set
|
# CONFIG_SPI_TLE62X0 is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# PPS support
|
||||||
|
#
|
||||||
|
# CONFIG_PPS is not set
|
||||||
CONFIG_ARCH_REQUIRE_GPIOLIB=y
|
CONFIG_ARCH_REQUIRE_GPIOLIB=y
|
||||||
CONFIG_GPIOLIB=y
|
CONFIG_GPIOLIB=y
|
||||||
# CONFIG_GPIO_SYSFS is not set
|
# CONFIG_GPIO_SYSFS is not set
|
||||||
@@ -851,6 +864,8 @@ CONFIG_SSB_POSSIBLE=y
|
|||||||
# CONFIG_MFD_WM8400 is not set
|
# CONFIG_MFD_WM8400 is not set
|
||||||
# CONFIG_MFD_WM8350_I2C is not set
|
# CONFIG_MFD_WM8350_I2C is not set
|
||||||
# CONFIG_MFD_PCF50633 is not set
|
# CONFIG_MFD_PCF50633 is not set
|
||||||
|
# CONFIG_AB3100_CORE is not set
|
||||||
|
# CONFIG_EZX_PCAP is not set
|
||||||
# CONFIG_REGULATOR is not set
|
# CONFIG_REGULATOR is not set
|
||||||
CONFIG_MEDIA_SUPPORT=y
|
CONFIG_MEDIA_SUPPORT=y
|
||||||
|
|
||||||
@@ -1196,6 +1211,7 @@ CONFIG_RTC_DRV_PCF8563=y
|
|||||||
# CONFIG_RTC_DRV_S35390A is not set
|
# CONFIG_RTC_DRV_S35390A is not set
|
||||||
# CONFIG_RTC_DRV_FM3130 is not set
|
# CONFIG_RTC_DRV_FM3130 is not set
|
||||||
# CONFIG_RTC_DRV_RX8581 is not set
|
# CONFIG_RTC_DRV_RX8581 is not set
|
||||||
|
# CONFIG_RTC_DRV_RX8025 is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# SPI RTC drivers
|
# SPI RTC drivers
|
||||||
@@ -1260,6 +1276,7 @@ CONFIG_FS_MBCACHE=y
|
|||||||
# CONFIG_JFS_FS is not set
|
# CONFIG_JFS_FS is not set
|
||||||
CONFIG_FS_POSIX_ACL=y
|
CONFIG_FS_POSIX_ACL=y
|
||||||
# CONFIG_XFS_FS is not set
|
# CONFIG_XFS_FS is not set
|
||||||
|
# CONFIG_GFS2_FS is not set
|
||||||
# CONFIG_OCFS2_FS is not set
|
# CONFIG_OCFS2_FS is not set
|
||||||
# CONFIG_BTRFS_FS is not set
|
# CONFIG_BTRFS_FS is not set
|
||||||
CONFIG_FILE_LOCKING=y
|
CONFIG_FILE_LOCKING=y
|
||||||
|
@@ -2,6 +2,6 @@
|
|||||||
#define __ASM_SH_PERF_COUNTER_H
|
#define __ASM_SH_PERF_COUNTER_H
|
||||||
|
|
||||||
/* SH only supports software counters through this interface. */
|
/* SH only supports software counters through this interface. */
|
||||||
#define set_perf_counter_pending() do { } while (0)
|
static inline void set_perf_counter_pending(void) {}
|
||||||
|
|
||||||
#endif /* __ASM_SH_PERF_COUNTER_H */
|
#endif /* __ASM_SH_PERF_COUNTER_H */
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
|
#include <linux/err.h>
|
||||||
#include <asm/ptrace.h>
|
#include <asm/ptrace.h>
|
||||||
|
|
||||||
/* The system call number is given by the user in R3 */
|
/* The system call number is given by the user in R3 */
|
||||||
|
@@ -20,6 +20,11 @@
|
|||||||
*/
|
*/
|
||||||
#include <asm/addrspace.h>
|
#include <asm/addrspace.h>
|
||||||
|
|
||||||
|
/* SH Eth */
|
||||||
|
#define SH_ETH_ADDR (0xA4600000)
|
||||||
|
#define SH_ETH_MAHR (SH_ETH_ADDR + 0x1C0)
|
||||||
|
#define SH_ETH_MALR (SH_ETH_ADDR + 0x1C8)
|
||||||
|
|
||||||
#define PA_LED (0xba203000) /* 8bit LED */
|
#define PA_LED (0xba203000) /* 8bit LED */
|
||||||
#define IRQ_MODE (0xba200010)
|
#define IRQ_MODE (0xba200010)
|
||||||
#define IRQ0_SR (0xba200014)
|
#define IRQ0_SR (0xba200014)
|
||||||
|
@@ -15,12 +15,28 @@
|
|||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/hardirq.h>
|
#include <linux/hardirq.h>
|
||||||
#include <linux/kprobes.h>
|
#include <linux/kprobes.h>
|
||||||
#include <linux/marker.h>
|
#include <linux/perf_counter.h>
|
||||||
#include <asm/io_trapped.h>
|
#include <asm/io_trapped.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
|
|
||||||
|
static inline int notify_page_fault(struct pt_regs *regs, int trap)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
#ifdef CONFIG_KPROBES
|
||||||
|
if (!user_mode(regs)) {
|
||||||
|
preempt_disable();
|
||||||
|
if (kprobe_running() && kprobe_fault_handler(regs, trap))
|
||||||
|
ret = 1;
|
||||||
|
preempt_enable();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This routine handles page faults. It determines the address,
|
* This routine handles page faults. It determines the address,
|
||||||
* and the problem, and then passes it off to one of the appropriate
|
* and the problem, and then passes it off to one of the appropriate
|
||||||
@@ -87,14 +103,17 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Only enable interrupts if they were on before the fault */
|
|
||||||
if ((regs->sr & SR_IMASK) != SR_IMASK) {
|
|
||||||
trace_hardirqs_on();
|
|
||||||
local_irq_enable();
|
|
||||||
}
|
|
||||||
|
|
||||||
mm = tsk->mm;
|
mm = tsk->mm;
|
||||||
|
|
||||||
|
if (unlikely(notify_page_fault(regs, lookup_exception_vector())))
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* Only enable interrupts if they were on before the fault */
|
||||||
|
if ((regs->sr & SR_IMASK) != SR_IMASK)
|
||||||
|
local_irq_enable();
|
||||||
|
|
||||||
|
perf_swcounter_event(PERF_COUNT_SW_PAGE_FAULTS, 1, 0, regs, address);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we're in an interrupt or have no user
|
* If we're in an interrupt or have no user
|
||||||
* context, we must not take the fault..
|
* context, we must not take the fault..
|
||||||
@@ -141,10 +160,15 @@ survive:
|
|||||||
goto do_sigbus;
|
goto do_sigbus;
|
||||||
BUG();
|
BUG();
|
||||||
}
|
}
|
||||||
if (fault & VM_FAULT_MAJOR)
|
if (fault & VM_FAULT_MAJOR) {
|
||||||
tsk->maj_flt++;
|
tsk->maj_flt++;
|
||||||
else
|
perf_swcounter_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, 0,
|
||||||
|
regs, address);
|
||||||
|
} else {
|
||||||
tsk->min_flt++;
|
tsk->min_flt++;
|
||||||
|
perf_swcounter_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, 0,
|
||||||
|
regs, address);
|
||||||
|
}
|
||||||
|
|
||||||
up_read(&mm->mmap_sem);
|
up_read(&mm->mmap_sem);
|
||||||
return;
|
return;
|
||||||
@@ -245,22 +269,6 @@ do_sigbus:
|
|||||||
goto no_context;
|
goto no_context;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int notify_page_fault(struct pt_regs *regs, int trap)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
#ifdef CONFIG_KPROBES
|
|
||||||
if (!user_mode(regs)) {
|
|
||||||
preempt_disable();
|
|
||||||
if (kprobe_running() && kprobe_fault_handler(regs, trap))
|
|
||||||
ret = 1;
|
|
||||||
preempt_enable();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Called with interrupts disabled.
|
* Called with interrupts disabled.
|
||||||
*/
|
*/
|
||||||
@@ -273,12 +281,7 @@ asmlinkage int __kprobes __do_page_fault(struct pt_regs *regs,
|
|||||||
pmd_t *pmd;
|
pmd_t *pmd;
|
||||||
pte_t *pte;
|
pte_t *pte;
|
||||||
pte_t entry;
|
pte_t entry;
|
||||||
int ret = 0;
|
int ret = 1;
|
||||||
|
|
||||||
if (notify_page_fault(regs, lookup_exception_vector()))
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
ret = 1;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We don't take page faults for P1, P2, and parts of P4, these
|
* We don't take page faults for P1, P2, and parts of P4, these
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (C) 2000, 2001 Paolo Alberelli
|
* Copyright (C) 2000, 2001 Paolo Alberelli
|
||||||
* Copyright (C) 2003 Richard Curnow (/proc/tlb, bug fixes)
|
* Copyright (C) 2003 Richard Curnow (/proc/tlb, bug fixes)
|
||||||
* Copyright (C) 2003 Paul Mundt
|
* Copyright (C) 2003 - 2009 Paul Mundt
|
||||||
*
|
*
|
||||||
* This file is subject to the terms and conditions of the GNU General Public
|
* This file is subject to the terms and conditions of the GNU General Public
|
||||||
* License. See the file "COPYING" in the main directory of this archive
|
* License. See the file "COPYING" in the main directory of this archive
|
||||||
@@ -20,6 +20,7 @@
|
|||||||
#include <linux/mman.h>
|
#include <linux/mman.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
|
#include <linux/perf_counter.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
@@ -115,6 +116,8 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long writeaccess,
|
|||||||
/* Not an IO address, so reenable interrupts */
|
/* Not an IO address, so reenable interrupts */
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
|
|
||||||
|
perf_swcounter_event(PERF_COUNT_SW_PAGE_FAULTS, 1, 0, regs, address);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we're in an interrupt or have no user
|
* If we're in an interrupt or have no user
|
||||||
* context, we must not take the fault..
|
* context, we must not take the fault..
|
||||||
@@ -195,10 +198,16 @@ survive:
|
|||||||
goto do_sigbus;
|
goto do_sigbus;
|
||||||
BUG();
|
BUG();
|
||||||
}
|
}
|
||||||
if (fault & VM_FAULT_MAJOR)
|
|
||||||
|
if (fault & VM_FAULT_MAJOR) {
|
||||||
tsk->maj_flt++;
|
tsk->maj_flt++;
|
||||||
else
|
perf_swcounter_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, 0,
|
||||||
|
regs, address);
|
||||||
|
} else {
|
||||||
tsk->min_flt++;
|
tsk->min_flt++;
|
||||||
|
perf_swcounter_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, 0,
|
||||||
|
regs, address);
|
||||||
|
}
|
||||||
|
|
||||||
/* If we get here, the page fault has been handled. Do the TLB refill
|
/* If we get here, the page fault has been handled. Do the TLB refill
|
||||||
now from the newly-setup PTE, to avoid having to fault again right
|
now from the newly-setup PTE, to avoid having to fault again right
|
||||||
|
@@ -161,7 +161,7 @@ static void sh_tmu_set_next(struct sh_tmu_priv *p, unsigned long delta,
|
|||||||
if (periodic)
|
if (periodic)
|
||||||
sh_tmu_write(p, TCOR, delta);
|
sh_tmu_write(p, TCOR, delta);
|
||||||
else
|
else
|
||||||
sh_tmu_write(p, TCOR, 0);
|
sh_tmu_write(p, TCOR, 0xffffffff);
|
||||||
|
|
||||||
sh_tmu_write(p, TCNT, delta);
|
sh_tmu_write(p, TCNT, delta);
|
||||||
|
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
#include <linux/vmalloc.h>
|
||||||
#include <video/sh_mobile_lcdc.h>
|
#include <video/sh_mobile_lcdc.h>
|
||||||
#include <asm/atomic.h>
|
#include <asm/atomic.h>
|
||||||
|
|
||||||
@@ -33,6 +34,7 @@ struct sh_mobile_lcdc_chan {
|
|||||||
struct fb_info info;
|
struct fb_info info;
|
||||||
dma_addr_t dma_handle;
|
dma_addr_t dma_handle;
|
||||||
struct fb_deferred_io defio;
|
struct fb_deferred_io defio;
|
||||||
|
struct scatterlist *sglist;
|
||||||
unsigned long frame_end;
|
unsigned long frame_end;
|
||||||
wait_queue_head_t frame_end_wait;
|
wait_queue_head_t frame_end_wait;
|
||||||
};
|
};
|
||||||
@@ -206,16 +208,38 @@ static void sh_mobile_lcdc_clk_on(struct sh_mobile_lcdc_priv *priv) {}
|
|||||||
static void sh_mobile_lcdc_clk_off(struct sh_mobile_lcdc_priv *priv) {}
|
static void sh_mobile_lcdc_clk_off(struct sh_mobile_lcdc_priv *priv) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static int sh_mobile_lcdc_sginit(struct fb_info *info,
|
||||||
|
struct list_head *pagelist)
|
||||||
|
{
|
||||||
|
struct sh_mobile_lcdc_chan *ch = info->par;
|
||||||
|
unsigned int nr_pages_max = info->fix.smem_len >> PAGE_SHIFT;
|
||||||
|
struct page *page;
|
||||||
|
int nr_pages = 0;
|
||||||
|
|
||||||
|
sg_init_table(ch->sglist, nr_pages_max);
|
||||||
|
|
||||||
|
list_for_each_entry(page, pagelist, lru)
|
||||||
|
sg_set_page(&ch->sglist[nr_pages++], page, PAGE_SIZE, 0);
|
||||||
|
|
||||||
|
return nr_pages;
|
||||||
|
}
|
||||||
|
|
||||||
static void sh_mobile_lcdc_deferred_io(struct fb_info *info,
|
static void sh_mobile_lcdc_deferred_io(struct fb_info *info,
|
||||||
struct list_head *pagelist)
|
struct list_head *pagelist)
|
||||||
{
|
{
|
||||||
struct sh_mobile_lcdc_chan *ch = info->par;
|
struct sh_mobile_lcdc_chan *ch = info->par;
|
||||||
|
unsigned int nr_pages;
|
||||||
|
|
||||||
/* enable clocks before accessing hardware */
|
/* enable clocks before accessing hardware */
|
||||||
sh_mobile_lcdc_clk_on(ch->lcdc);
|
sh_mobile_lcdc_clk_on(ch->lcdc);
|
||||||
|
|
||||||
|
nr_pages = sh_mobile_lcdc_sginit(info, pagelist);
|
||||||
|
dma_map_sg(info->dev, ch->sglist, nr_pages, DMA_TO_DEVICE);
|
||||||
|
|
||||||
/* trigger panel update */
|
/* trigger panel update */
|
||||||
lcdc_write_chan(ch, LDSM2R, 1);
|
lcdc_write_chan(ch, LDSM2R, 1);
|
||||||
|
|
||||||
|
dma_unmap_sg(info->dev, ch->sglist, nr_pages, DMA_TO_DEVICE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sh_mobile_lcdc_deferred_io_touch(struct fb_info *info)
|
static void sh_mobile_lcdc_deferred_io_touch(struct fb_info *info)
|
||||||
@@ -846,21 +870,31 @@ static int __init sh_mobile_lcdc_probe(struct platform_device *pdev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < j; i++) {
|
for (i = 0; i < j; i++) {
|
||||||
error = register_framebuffer(&priv->ch[i].info);
|
struct sh_mobile_lcdc_chan *ch = priv->ch + i;
|
||||||
if (error < 0)
|
|
||||||
|
info = &ch->info;
|
||||||
|
|
||||||
|
if (info->fbdefio) {
|
||||||
|
priv->ch->sglist = vmalloc(sizeof(struct scatterlist) *
|
||||||
|
info->fix.smem_len >> PAGE_SHIFT);
|
||||||
|
if (!priv->ch->sglist) {
|
||||||
|
dev_err(&pdev->dev, "cannot allocate sglist\n");
|
||||||
goto err1;
|
goto err1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
error = register_framebuffer(info);
|
||||||
|
if (error < 0)
|
||||||
|
goto err1;
|
||||||
|
|
||||||
for (i = 0; i < j; i++) {
|
|
||||||
info = &priv->ch[i].info;
|
|
||||||
dev_info(info->dev,
|
dev_info(info->dev,
|
||||||
"registered %s/%s as %dx%d %dbpp.\n",
|
"registered %s/%s as %dx%d %dbpp.\n",
|
||||||
pdev->name,
|
pdev->name,
|
||||||
(priv->ch[i].cfg.chan == LCDC_CHAN_MAINLCD) ?
|
(ch->cfg.chan == LCDC_CHAN_MAINLCD) ?
|
||||||
"mainlcd" : "sublcd",
|
"mainlcd" : "sublcd",
|
||||||
(int) priv->ch[i].cfg.lcd_cfg.xres,
|
(int) ch->cfg.lcd_cfg.xres,
|
||||||
(int) priv->ch[i].cfg.lcd_cfg.yres,
|
(int) ch->cfg.lcd_cfg.yres,
|
||||||
priv->ch[i].cfg.bpp);
|
ch->cfg.bpp);
|
||||||
|
|
||||||
/* deferred io mode: disable clock to save power */
|
/* deferred io mode: disable clock to save power */
|
||||||
if (info->fbdefio)
|
if (info->fbdefio)
|
||||||
@@ -892,6 +926,9 @@ static int sh_mobile_lcdc_remove(struct platform_device *pdev)
|
|||||||
if (!info->device)
|
if (!info->device)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (priv->ch[i].sglist)
|
||||||
|
vfree(priv->ch[i].sglist);
|
||||||
|
|
||||||
dma_free_coherent(&pdev->dev, info->fix.smem_len,
|
dma_free_coherent(&pdev->dev, info->fix.smem_len,
|
||||||
info->screen_base, priv->ch[i].dma_handle);
|
info->screen_base, priv->ch[i].dma_handle);
|
||||||
fb_dealloc_cmap(&info->cmap);
|
fb_dealloc_cmap(&info->cmap);
|
||||||
|
21
mm/nommu.c
21
mm/nommu.c
@@ -238,6 +238,27 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(get_user_pages);
|
EXPORT_SYMBOL(get_user_pages);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* follow_pfn - look up PFN at a user virtual address
|
||||||
|
* @vma: memory mapping
|
||||||
|
* @address: user virtual address
|
||||||
|
* @pfn: location to store found PFN
|
||||||
|
*
|
||||||
|
* Only IO mappings and raw PFN mappings are allowed.
|
||||||
|
*
|
||||||
|
* Returns zero and the pfn at @pfn on success, -ve otherwise.
|
||||||
|
*/
|
||||||
|
int follow_pfn(struct vm_area_struct *vma, unsigned long address,
|
||||||
|
unsigned long *pfn)
|
||||||
|
{
|
||||||
|
if (!(vma->vm_flags & (VM_IO | VM_PFNMAP)))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
*pfn = address >> PAGE_SHIFT;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(follow_pfn);
|
||||||
|
|
||||||
DEFINE_RWLOCK(vmlist_lock);
|
DEFINE_RWLOCK(vmlist_lock);
|
||||||
struct vm_struct *vmlist;
|
struct vm_struct *vmlist;
|
||||||
|
|
||||||
|
@@ -19,6 +19,16 @@
|
|||||||
#define cpu_relax() asm volatile("" ::: "memory");
|
#define cpu_relax() asm volatile("" ::: "memory");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __sh__
|
||||||
|
#include "../../arch/sh/include/asm/unistd.h"
|
||||||
|
#if defined(__SH4A__) || defined(__SH5__)
|
||||||
|
# define rmb() asm volatile("synco" ::: "memory")
|
||||||
|
#else
|
||||||
|
# define rmb() asm volatile("" ::: "memory")
|
||||||
|
#endif
|
||||||
|
#define cpu_relax() asm volatile("" ::: "memory")
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
Reference in New Issue
Block a user