dde_linux: implement memory barriers in USB driver
This patch implements the memory barrier macros in the USB driver for ARMv7 and x86. Fixes #1159.
This commit is contained in:
parent
0ed68a56b7
commit
14951649e4
|
@ -0,0 +1,3 @@
|
||||||
|
INC_DIR += $(LIB_INC_DIR)/armv6
|
||||||
|
|
||||||
|
include $(REP_DIR)/lib/mk/arm/usb.inc
|
|
@ -0,0 +1,3 @@
|
||||||
|
INC_DIR += $(LIB_INC_DIR)/armv7
|
||||||
|
|
||||||
|
include $(REP_DIR)/lib/mk/arm/usb.inc
|
|
@ -2,7 +2,7 @@ SRC_C += usbnet.c asix_devices.c asix_common.c ax88172a.c ax88179_178a.c
|
||||||
|
|
||||||
include $(REP_DIR)/lib/mk/xhci.inc
|
include $(REP_DIR)/lib/mk/xhci.inc
|
||||||
include $(REP_DIR)/lib/mk/usb.inc
|
include $(REP_DIR)/lib/mk/usb.inc
|
||||||
include $(REP_DIR)/lib/mk/arm/usb.inc
|
include $(REP_DIR)/lib/mk/armv7/usb.inc
|
||||||
|
|
||||||
CC_OPT += -DCONFIG_USB_EHCI_S5P -DCONFIG_USB_EHCI_TT_NEWSCHED -DCONFIG_OF -DCONFIG_USB_DWC3_HOST \
|
CC_OPT += -DCONFIG_USB_EHCI_S5P -DCONFIG_USB_EHCI_TT_NEWSCHED -DCONFIG_OF -DCONFIG_USB_DWC3_HOST \
|
||||||
-DCONFIG_USB_OTG_UTILS -DCONFIG_USB_XHCI_PLATFORM -DDWC3_QUIRK
|
-DCONFIG_USB_OTG_UTILS -DCONFIG_USB_XHCI_PLATFORM -DDWC3_QUIRK
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
SRC_C += usbnet.c smsc95xx.c
|
SRC_C += usbnet.c smsc95xx.c
|
||||||
|
|
||||||
include $(REP_DIR)/lib/mk/usb.inc
|
include $(REP_DIR)/lib/mk/usb.inc
|
||||||
include $(REP_DIR)/lib/mk/arm/usb.inc
|
include $(REP_DIR)/lib/mk/armv7/usb.inc
|
||||||
|
|
||||||
CC_OPT += -DCONFIG_USB_EHCI_HCD_OMAP -DCONFIG_USB_EHCI_TT_NEWSCHED -DVERBOSE_DEBUG
|
CC_OPT += -DCONFIG_USB_EHCI_HCD_OMAP -DCONFIG_USB_EHCI_TT_NEWSCHED -DVERBOSE_DEBUG
|
||||||
SRC_CC += platform.cc
|
SRC_CC += platform.cc
|
||||||
|
|
|
@ -23,7 +23,7 @@ SRC_C += \
|
||||||
SRC_C += usbnet.c smsc95xx.c
|
SRC_C += usbnet.c smsc95xx.c
|
||||||
|
|
||||||
include $(REP_DIR)/lib/mk/usb.inc
|
include $(REP_DIR)/lib/mk/usb.inc
|
||||||
include $(REP_DIR)/lib/mk/arm/usb.inc
|
include $(REP_DIR)/lib/mk/armv6/usb.inc
|
||||||
|
|
||||||
CC_OPT += -DDWC_LINUX -DPLATFORM_INTERFACE
|
CC_OPT += -DDWC_LINUX -DPLATFORM_INTERFACE
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,8 @@
|
||||||
#ifndef _ARM__PLATFORM__LX_EMUL_H_
|
#ifndef _ARM__PLATFORM__LX_EMUL_H_
|
||||||
#define _ARM__PLATFORM__LX_EMUL_H_
|
#define _ARM__PLATFORM__LX_EMUL_H_
|
||||||
|
|
||||||
|
#include <platform/lx_emul_barrier.h>
|
||||||
|
|
||||||
/*************************
|
/*************************
|
||||||
** asm-generic/sizes.h **
|
** asm-generic/sizes.h **
|
||||||
*************************/
|
*************************/
|
||||||
|
@ -266,5 +268,4 @@ void set_fiq_regs(struct pt_regs const *regs);
|
||||||
void enable_fiq();
|
void enable_fiq();
|
||||||
void set_fiq_handler(void *start, unsigned int length);
|
void set_fiq_handler(void *start, unsigned int length);
|
||||||
|
|
||||||
|
|
||||||
#endif /* _ARM__PLATFORM__LX_EMUL_H_ */
|
#endif /* _ARM__PLATFORM__LX_EMUL_H_ */
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
/*
|
||||||
|
* \brief ARMv6-specific part of the Linux API emulation
|
||||||
|
* \author Christian Prochaska
|
||||||
|
* \date 2014-05-28
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2014 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU General Public License version 2.
|
||||||
|
*/
|
||||||
|
#ifndef _ARMV6__PLATFORM__LX_EMUL_BARRIER_H_
|
||||||
|
#define _ARMV6__PLATFORM__LX_EMUL_BARRIER_H_
|
||||||
|
|
||||||
|
|
||||||
|
/*******************
|
||||||
|
** asm/barrier.h **
|
||||||
|
*******************/
|
||||||
|
|
||||||
|
#define mb() asm volatile ("": : :"memory")
|
||||||
|
#define rmb() mb()
|
||||||
|
#define wmb() asm volatile ("": : :"memory")
|
||||||
|
|
||||||
|
#define smp_mb() asm volatile ("": : :"memory")
|
||||||
|
#define smp_rmb() smp_mb()
|
||||||
|
#define smp_wmb() asm volatile ("": : :"memory")
|
||||||
|
|
||||||
|
static inline void barrier() { asm volatile ("": : :"memory"); }
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* _ARMV6__PLATFORM__LX_EMUL_BARRIER_H_ */
|
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
* \brief ARMv7-specific part of the Linux API emulation
|
||||||
|
* \author Christian Prochaska
|
||||||
|
* \date 2014-05-28
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2014 Genode Labs GmbH
|
||||||
|
*
|
||||||
|
* This file is part of the Genode OS framework, which is distributed
|
||||||
|
* under the terms of the GNU General Public License version 2.
|
||||||
|
*/
|
||||||
|
#ifndef _ARMV7__PLATFORM__LX_EMUL_BARRIER_H_
|
||||||
|
#define _ARMV7__PLATFORM__LX_EMUL_BARRIER_H_
|
||||||
|
|
||||||
|
|
||||||
|
/*******************
|
||||||
|
** asm/barrier.h **
|
||||||
|
*******************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is the "safe" implementation as needed for a configuration
|
||||||
|
* with bufferable DMA memory and SMP enabled.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define mb() asm volatile ("dsb": : :"memory")
|
||||||
|
#define rmb() mb()
|
||||||
|
#define wmb() asm volatile ("dsb st": : :"memory")
|
||||||
|
|
||||||
|
#define smp_mb() asm volatile ("dmb ish": : :"memory")
|
||||||
|
#define smp_rmb() smp_mb()
|
||||||
|
#define smp_wmb() asm volatile ("dmb ishst": : :"memory")
|
||||||
|
|
||||||
|
static inline void barrier() { asm volatile ("": : :"memory"); }
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* _ARMV7__PLATFORM__LX_EMUL_BARRIER_H_ */
|
|
@ -249,19 +249,6 @@ typedef uint32_t u_int32_t;
|
||||||
|
|
||||||
#include <linux/usb/storage.h>
|
#include <linux/usb/storage.h>
|
||||||
|
|
||||||
/******************
|
|
||||||
** asm/system.h **
|
|
||||||
******************/
|
|
||||||
|
|
||||||
#define mb() asm volatile ("": : :"memory")
|
|
||||||
#define rmb() mb()
|
|
||||||
#define wmb() asm volatile ("": : :"memory")
|
|
||||||
#define smp_wmb() wmb()
|
|
||||||
#define smp_mb() mb()
|
|
||||||
|
|
||||||
static inline void barrier() { mb(); }
|
|
||||||
|
|
||||||
|
|
||||||
/**********************
|
/**********************
|
||||||
** linux/compiler.h **
|
** linux/compiler.h **
|
||||||
**********************/
|
**********************/
|
||||||
|
|
|
@ -19,4 +19,23 @@ struct platform_device
|
||||||
void *data;
|
void *data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*******************
|
||||||
|
** asm/barrier.h **
|
||||||
|
*******************/
|
||||||
|
|
||||||
|
#define mb() asm volatile ("mfence": : :"memory")
|
||||||
|
#define rmb() asm volatile ("lfence": : :"memory")
|
||||||
|
#define wmb() asm volatile ("sfence": : :"memory")
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is the "safe" implementation as needed for a configuration
|
||||||
|
* with SMP enabled.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define smp_mb() mb()
|
||||||
|
#define smp_rmb() barrier()
|
||||||
|
#define smp_wmb() barrier()
|
||||||
|
|
||||||
|
static inline void barrier() { asm volatile ("": : :"memory"); }
|
||||||
|
|
||||||
#endif /* _X86_32__PLATFORM__LX_EMUL_ */
|
#endif /* _X86_32__PLATFORM__LX_EMUL_ */
|
||||||
|
|
Loading…
Reference in New Issue