complier.h: add __always_inline and use it in code base

Add a __always_inline macro that wraps __attribute__((always_inline))
and replace current users with the macro, excluding files under
src/vendorcode.

Change-Id: Ic57e474c1d2ca7cc0405ac677869f78a28d3e529
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: https://review.coreboot.org/28587
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Julius Werner <jwerner@google.com>
This commit is contained in:
Aaron Durbin 2018-09-13 02:10:45 -06:00
parent cf9ea55473
commit 75a62e7648
28 changed files with 124 additions and 101 deletions

View File

@ -14,7 +14,9 @@
#ifndef ARCH_HLT_H #ifndef ARCH_HLT_H
#define ARCH_HLT_H #define ARCH_HLT_H
static inline __attribute__((always_inline)) void hlt(void) #include <compiler.h>
static __always_inline void hlt(void)
{ {
for (;;) ; for (;;) ;
} }

View File

@ -33,7 +33,7 @@ typedef struct {
#define spin_is_locked(x) (*(volatile char *)(&(x)->lock) != 0) #define spin_is_locked(x) (*(volatile char *)(&(x)->lock) != 0)
#define spin_unlock_wait(x) do { barrier(); } while (spin_is_locked(x)) #define spin_unlock_wait(x) do { barrier(); } while (spin_is_locked(x))
static inline __attribute__((always_inline)) void spin_lock(spinlock_t *lock) static __always_inline void spin_lock(spinlock_t *lock)
{ {
unsigned long tmp; unsigned long tmp;
__asm__ __volatile__ ( __asm__ __volatile__ (
@ -49,7 +49,7 @@ static inline __attribute__((always_inline)) void spin_lock(spinlock_t *lock)
barrier(); barrier();
} }
static inline __attribute__((always_inline)) void spin_unlock(spinlock_t *lock) static __always_inline void spin_unlock(spinlock_t *lock)
{ {
__asm__ __volatile__( __asm__ __volatile__(
" str %1, [%0]\n" " str %1, [%0]\n"

View File

@ -14,7 +14,9 @@
#ifndef ARCH_HLT_H #ifndef ARCH_HLT_H
#define ARCH_HLT_H #define ARCH_HLT_H
static inline __attribute__((always_inline)) void hlt(void) #include <compiler.h>
static __always_inline void hlt(void)
{ {
for (;;) ; for (;;) ;
} }

View File

@ -16,7 +16,9 @@
#ifndef __MIPS_ARCH_HLT_H #ifndef __MIPS_ARCH_HLT_H
#define __MIPS_ARCH_HLT_H #define __MIPS_ARCH_HLT_H
static inline __attribute__((always_inline)) void hlt(void) #include <compiler.h>
static inline __always_inline void hlt(void)
{ {
for (;;) for (;;)
; ;

View File

@ -11,7 +11,9 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
static inline __attribute__((always_inline)) void hlt(void) #include <compiler.h>
static __always_inline void hlt(void)
{ {
while (1) while (1)
; ;

View File

@ -11,7 +11,9 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
static inline __attribute__((always_inline)) void hlt(void) #include <compiler.h>
static __always_inline void hlt(void)
{ {
while (1); while (1);
} }

View File

@ -15,33 +15,34 @@
#define _ASM_IO_H #define _ASM_IO_H
#include <stdint.h> #include <stdint.h>
#include <compiler.h>
static inline __attribute__((always_inline)) uint8_t read8(const volatile void *addr) static __always_inline uint8_t read8(const volatile void *addr)
{ {
return *((volatile uint8_t *)(addr)); return *((volatile uint8_t *)(addr));
} }
static inline __attribute__((always_inline)) uint16_t read16(const volatile void *addr) static __always_inline uint16_t read16(const volatile void *addr)
{ {
return *((volatile uint16_t *)(addr)); return *((volatile uint16_t *)(addr));
} }
static inline __attribute__((always_inline)) uint32_t read32(const volatile void *addr) static __always_inline uint32_t read32(const volatile void *addr)
{ {
return *((volatile uint32_t *)(addr)); return *((volatile uint32_t *)(addr));
} }
static inline __attribute__((always_inline)) void write8(volatile void *addr, uint8_t value) static __always_inline void write8(volatile void *addr, uint8_t value)
{ {
*((volatile uint8_t *)(addr)) = value; *((volatile uint8_t *)(addr)) = value;
} }
static inline __attribute__((always_inline)) void write16(volatile void *addr, uint16_t value) static __always_inline void write16(volatile void *addr, uint16_t value)
{ {
*((volatile uint16_t *)(addr)) = value; *((volatile uint16_t *)(addr)) = value;
} }
static inline __attribute__((always_inline)) void write32(volatile void *addr, uint32_t value) static __always_inline void write32(volatile void *addr, uint32_t value)
{ {
*((volatile uint32_t *)(addr)) = value; *((volatile uint32_t *)(addr)) = value;
} }

View File

@ -242,7 +242,6 @@ static inline void get_fms(struct cpuinfo_x86 *c, uint32_t tfms)
#endif #endif
#define asmlinkage __attribute__((regparm(0))) #define asmlinkage __attribute__((regparm(0)))
#define alwaysinline inline __attribute__((always_inline))
#ifndef __ROMCC__ #ifndef __ROMCC__
/* /*

View File

@ -20,7 +20,9 @@ static void hlt(void)
__builtin_hlt(); __builtin_hlt();
} }
#else #else
static inline __attribute__((always_inline)) void hlt(void) #include <compiler.h>
static __always_inline void hlt(void)
{ {
asm("hlt"); asm("hlt");
} }

View File

@ -14,6 +14,7 @@
#ifndef _ASM_IO_H #ifndef _ASM_IO_H
#define _ASM_IO_H #define _ASM_IO_H
#include <compiler.h>
#include <endian.h> #include <endian.h>
#include <stdint.h> #include <stdint.h>
#include <rules.h> #include <rules.h>
@ -156,52 +157,52 @@ static inline void insl(uint16_t port, void *addr, unsigned long count)
); );
} }
static inline __attribute__((always_inline)) uint8_t read8( static __always_inline uint8_t read8(
const volatile void *addr) const volatile void *addr)
{ {
return *((volatile uint8_t *)(addr)); return *((volatile uint8_t *)(addr));
} }
static inline __attribute__((always_inline)) uint16_t read16( static __always_inline uint16_t read16(
const volatile void *addr) const volatile void *addr)
{ {
return *((volatile uint16_t *)(addr)); return *((volatile uint16_t *)(addr));
} }
static inline __attribute__((always_inline)) uint32_t read32( static __always_inline uint32_t read32(
const volatile void *addr) const volatile void *addr)
{ {
return *((volatile uint32_t *)(addr)); return *((volatile uint32_t *)(addr));
} }
#ifndef __ROMCC__ #ifndef __ROMCC__
static inline __attribute__((always_inline)) uint64_t read64( static __always_inline uint64_t read64(
const volatile void *addr) const volatile void *addr)
{ {
return *((volatile uint64_t *)(addr)); return *((volatile uint64_t *)(addr));
} }
#endif #endif
static inline __attribute__((always_inline)) void write8(volatile void *addr, static __always_inline void write8(volatile void *addr,
uint8_t value) uint8_t value)
{ {
*((volatile uint8_t *)(addr)) = value; *((volatile uint8_t *)(addr)) = value;
} }
static inline __attribute__((always_inline)) void write16(volatile void *addr, static __always_inline void write16(volatile void *addr,
uint16_t value) uint16_t value)
{ {
*((volatile uint16_t *)(addr)) = value; *((volatile uint16_t *)(addr)) = value;
} }
static inline __attribute__((always_inline)) void write32(volatile void *addr, static __always_inline void write32(volatile void *addr,
uint32_t value) uint32_t value)
{ {
*((volatile uint32_t *)(addr)) = value; *((volatile uint32_t *)(addr)) = value;
} }
#ifndef __ROMCC__ #ifndef __ROMCC__
static inline __attribute__((always_inline)) void write64(volatile void *addr, static __always_inline void write64(volatile void *addr,
uint64_t value) uint64_t value)
{ {
*((volatile uint64_t *)(addr)) = value; *((volatile uint64_t *)(addr)) = value;
@ -268,7 +269,7 @@ typedef u32 device_t;
#include <arch/pci_io_cfg.h> #include <arch/pci_io_cfg.h>
#include <arch/pci_mmio_cfg.h> #include <arch/pci_mmio_cfg.h>
static inline __attribute__((always_inline)) static __always_inline
uint8_t pci_read_config8(pci_devfn_t dev, unsigned int where) uint8_t pci_read_config8(pci_devfn_t dev, unsigned int where)
{ {
if (IS_ENABLED(CONFIG_MMCONF_SUPPORT)) if (IS_ENABLED(CONFIG_MMCONF_SUPPORT))
@ -277,7 +278,7 @@ uint8_t pci_read_config8(pci_devfn_t dev, unsigned int where)
return pci_io_read_config8(dev, where); return pci_io_read_config8(dev, where);
} }
static inline __attribute__((always_inline)) static __always_inline
uint16_t pci_read_config16(pci_devfn_t dev, unsigned int where) uint16_t pci_read_config16(pci_devfn_t dev, unsigned int where)
{ {
if (IS_ENABLED(CONFIG_MMCONF_SUPPORT)) if (IS_ENABLED(CONFIG_MMCONF_SUPPORT))
@ -286,7 +287,7 @@ uint16_t pci_read_config16(pci_devfn_t dev, unsigned int where)
return pci_io_read_config16(dev, where); return pci_io_read_config16(dev, where);
} }
static inline __attribute__((always_inline)) static __always_inline
uint32_t pci_read_config32(pci_devfn_t dev, unsigned int where) uint32_t pci_read_config32(pci_devfn_t dev, unsigned int where)
{ {
if (IS_ENABLED(CONFIG_MMCONF_SUPPORT)) if (IS_ENABLED(CONFIG_MMCONF_SUPPORT))
@ -295,7 +296,7 @@ uint32_t pci_read_config32(pci_devfn_t dev, unsigned int where)
return pci_io_read_config32(dev, where); return pci_io_read_config32(dev, where);
} }
static inline __attribute__((always_inline)) static __always_inline
void pci_write_config8(pci_devfn_t dev, unsigned int where, uint8_t value) void pci_write_config8(pci_devfn_t dev, unsigned int where, uint8_t value)
{ {
if (IS_ENABLED(CONFIG_MMCONF_SUPPORT)) if (IS_ENABLED(CONFIG_MMCONF_SUPPORT))
@ -304,7 +305,7 @@ void pci_write_config8(pci_devfn_t dev, unsigned int where, uint8_t value)
pci_io_write_config8(dev, where, value); pci_io_write_config8(dev, where, value);
} }
static inline __attribute__((always_inline)) static __always_inline
void pci_write_config16(pci_devfn_t dev, unsigned int where, uint16_t value) void pci_write_config16(pci_devfn_t dev, unsigned int where, uint16_t value)
{ {
if (IS_ENABLED(CONFIG_MMCONF_SUPPORT)) if (IS_ENABLED(CONFIG_MMCONF_SUPPORT))
@ -313,7 +314,7 @@ void pci_write_config16(pci_devfn_t dev, unsigned int where, uint16_t value)
pci_io_write_config16(dev, where, value); pci_io_write_config16(dev, where, value);
} }
static inline __attribute__((always_inline)) static __always_inline
void pci_write_config32(pci_devfn_t dev, unsigned int where, uint32_t value) void pci_write_config32(pci_devfn_t dev, unsigned int where, uint32_t value)
{ {
if (IS_ENABLED(CONFIG_MMCONF_SUPPORT)) if (IS_ENABLED(CONFIG_MMCONF_SUPPORT))
@ -365,7 +366,7 @@ static inline pci_devfn_t pci_locate_device_on_bus(unsigned int pci_id,
} }
/* Generic functions for pnp devices */ /* Generic functions for pnp devices */
static inline __attribute__((always_inline)) void pnp_write_config( static __always_inline void pnp_write_config(
pnp_devfn_t dev, uint8_t reg, uint8_t value) pnp_devfn_t dev, uint8_t reg, uint8_t value)
{ {
unsigned int port = dev >> 8; unsigned int port = dev >> 8;
@ -373,7 +374,7 @@ static inline __attribute__((always_inline)) void pnp_write_config(
outb(value, port + 1); outb(value, port + 1);
} }
static inline __attribute__((always_inline)) uint8_t pnp_read_config( static __always_inline uint8_t pnp_read_config(
pnp_devfn_t dev, uint8_t reg) pnp_devfn_t dev, uint8_t reg)
{ {
unsigned int port = dev >> 8; unsigned int port = dev >> 8;
@ -381,46 +382,46 @@ static inline __attribute__((always_inline)) uint8_t pnp_read_config(
return inb(port + 1); return inb(port + 1);
} }
static inline __attribute__((always_inline)) static __always_inline
void pnp_set_logical_device(pnp_devfn_t dev) void pnp_set_logical_device(pnp_devfn_t dev)
{ {
unsigned int device = dev & 0xff; unsigned int device = dev & 0xff;
pnp_write_config(dev, 0x07, device); pnp_write_config(dev, 0x07, device);
} }
static inline __attribute__((always_inline)) static __always_inline
void pnp_set_enable(pnp_devfn_t dev, int enable) void pnp_set_enable(pnp_devfn_t dev, int enable)
{ {
pnp_write_config(dev, 0x30, enable?0x1:0x0); pnp_write_config(dev, 0x30, enable?0x1:0x0);
} }
static inline __attribute__((always_inline)) static __always_inline
int pnp_read_enable(pnp_devfn_t dev) int pnp_read_enable(pnp_devfn_t dev)
{ {
return !!pnp_read_config(dev, 0x30); return !!pnp_read_config(dev, 0x30);
} }
static inline __attribute__((always_inline)) static __always_inline
void pnp_set_iobase(pnp_devfn_t dev, unsigned int index, unsigned int iobase) void pnp_set_iobase(pnp_devfn_t dev, unsigned int index, unsigned int iobase)
{ {
pnp_write_config(dev, index + 0, (iobase >> 8) & 0xff); pnp_write_config(dev, index + 0, (iobase >> 8) & 0xff);
pnp_write_config(dev, index + 1, iobase & 0xff); pnp_write_config(dev, index + 1, iobase & 0xff);
} }
static inline __attribute__((always_inline)) static __always_inline
uint16_t pnp_read_iobase(pnp_devfn_t dev, unsigned int index) uint16_t pnp_read_iobase(pnp_devfn_t dev, unsigned int index)
{ {
return ((uint16_t)(pnp_read_config(dev, index)) << 8) return ((uint16_t)(pnp_read_config(dev, index)) << 8)
| pnp_read_config(dev, index + 1); | pnp_read_config(dev, index + 1);
} }
static inline __attribute__((always_inline)) static __always_inline
void pnp_set_irq(pnp_devfn_t dev, unsigned int index, unsigned int irq) void pnp_set_irq(pnp_devfn_t dev, unsigned int index, unsigned int irq)
{ {
pnp_write_config(dev, index, irq); pnp_write_config(dev, index, irq);
} }
static inline __attribute__((always_inline)) static __always_inline
void pnp_set_drq(pnp_devfn_t dev, unsigned int index, unsigned int drq) void pnp_set_drq(pnp_devfn_t dev, unsigned int index, unsigned int drq)
{ {
pnp_write_config(dev, index, drq & 0xff); pnp_write_config(dev, index, drq & 0xff);

View File

@ -14,9 +14,10 @@
#ifndef _PCI_IO_CFG_H #ifndef _PCI_IO_CFG_H
#define _PCI_IO_CFG_H #define _PCI_IO_CFG_H
#include <compiler.h>
#include <arch/io.h> #include <arch/io.h>
static inline __attribute__((always_inline)) static __always_inline
unsigned int pci_io_encode_addr(pci_devfn_t dev, unsigned int where) unsigned int pci_io_encode_addr(pci_devfn_t dev, unsigned int where)
{ {
if (IS_ENABLED(CONFIG_PCI_IO_CFG_EXT)) { if (IS_ENABLED(CONFIG_PCI_IO_CFG_EXT)) {
@ -27,7 +28,7 @@ unsigned int pci_io_encode_addr(pci_devfn_t dev, unsigned int where)
} }
} }
static inline __attribute__((always_inline)) static __always_inline
uint8_t pci_io_read_config8(pci_devfn_t dev, unsigned int where) uint8_t pci_io_read_config8(pci_devfn_t dev, unsigned int where)
{ {
unsigned int addr = pci_io_encode_addr(dev, where); unsigned int addr = pci_io_encode_addr(dev, where);
@ -35,7 +36,7 @@ uint8_t pci_io_read_config8(pci_devfn_t dev, unsigned int where)
return inb(0xCFC + (addr & 3)); return inb(0xCFC + (addr & 3));
} }
static inline __attribute__((always_inline)) static __always_inline
uint16_t pci_io_read_config16(pci_devfn_t dev, unsigned int where) uint16_t pci_io_read_config16(pci_devfn_t dev, unsigned int where)
{ {
unsigned int addr = pci_io_encode_addr(dev, where); unsigned int addr = pci_io_encode_addr(dev, where);
@ -43,7 +44,7 @@ uint16_t pci_io_read_config16(pci_devfn_t dev, unsigned int where)
return inw(0xCFC + (addr & 2)); return inw(0xCFC + (addr & 2));
} }
static inline __attribute__((always_inline)) static __always_inline
uint32_t pci_io_read_config32(pci_devfn_t dev, unsigned int where) uint32_t pci_io_read_config32(pci_devfn_t dev, unsigned int where)
{ {
unsigned int addr = pci_io_encode_addr(dev, where); unsigned int addr = pci_io_encode_addr(dev, where);
@ -51,7 +52,7 @@ uint32_t pci_io_read_config32(pci_devfn_t dev, unsigned int where)
return inl(0xCFC); return inl(0xCFC);
} }
static inline __attribute__((always_inline)) static __always_inline
void pci_io_write_config8(pci_devfn_t dev, unsigned int where, uint8_t value) void pci_io_write_config8(pci_devfn_t dev, unsigned int where, uint8_t value)
{ {
unsigned int addr = pci_io_encode_addr(dev, where); unsigned int addr = pci_io_encode_addr(dev, where);
@ -59,7 +60,7 @@ void pci_io_write_config8(pci_devfn_t dev, unsigned int where, uint8_t value)
outb(value, 0xCFC + (addr & 3)); outb(value, 0xCFC + (addr & 3));
} }
static inline __attribute__((always_inline)) static __always_inline
void pci_io_write_config16(pci_devfn_t dev, unsigned int where, uint16_t value) void pci_io_write_config16(pci_devfn_t dev, unsigned int where, uint16_t value)
{ {
unsigned int addr = pci_io_encode_addr(dev, where); unsigned int addr = pci_io_encode_addr(dev, where);
@ -67,7 +68,7 @@ void pci_io_write_config16(pci_devfn_t dev, unsigned int where, uint16_t value)
outw(value, 0xCFC + (addr & 2)); outw(value, 0xCFC + (addr & 2));
} }
static inline __attribute__((always_inline)) static __always_inline
void pci_io_write_config32(pci_devfn_t dev, unsigned int where, uint32_t value) void pci_io_write_config32(pci_devfn_t dev, unsigned int where, uint32_t value)
{ {
unsigned int addr = pci_io_encode_addr(dev, where); unsigned int addr = pci_io_encode_addr(dev, where);

View File

@ -17,10 +17,11 @@
#define _PCI_MMIO_CFG_H #define _PCI_MMIO_CFG_H
#include <arch/io.h> #include <arch/io.h>
#include <compiler.h>
#define DEFAULT_PCIEXBAR CONFIG_MMCONF_BASE_ADDRESS #define DEFAULT_PCIEXBAR CONFIG_MMCONF_BASE_ADDRESS
static inline __attribute__((always_inline)) static __always_inline
u8 pci_mmio_read_config8(pci_devfn_t dev, unsigned int where) u8 pci_mmio_read_config8(pci_devfn_t dev, unsigned int where)
{ {
void *addr; void *addr;
@ -28,7 +29,7 @@ u8 pci_mmio_read_config8(pci_devfn_t dev, unsigned int where)
return read8(addr); return read8(addr);
} }
static inline __attribute__((always_inline)) static __always_inline
u16 pci_mmio_read_config16(pci_devfn_t dev, unsigned int where) u16 pci_mmio_read_config16(pci_devfn_t dev, unsigned int where)
{ {
void *addr; void *addr;
@ -36,7 +37,7 @@ u16 pci_mmio_read_config16(pci_devfn_t dev, unsigned int where)
return read16(addr); return read16(addr);
} }
static inline __attribute__((always_inline)) static __always_inline
u32 pci_mmio_read_config32(pci_devfn_t dev, unsigned int where) u32 pci_mmio_read_config32(pci_devfn_t dev, unsigned int where)
{ {
void *addr; void *addr;
@ -44,7 +45,7 @@ u32 pci_mmio_read_config32(pci_devfn_t dev, unsigned int where)
return read32(addr); return read32(addr);
} }
static inline __attribute__((always_inline)) static __always_inline
void pci_mmio_write_config8(pci_devfn_t dev, unsigned int where, u8 value) void pci_mmio_write_config8(pci_devfn_t dev, unsigned int where, u8 value)
{ {
void *addr; void *addr;
@ -52,7 +53,7 @@ void pci_mmio_write_config8(pci_devfn_t dev, unsigned int where, u8 value)
write8(addr, value); write8(addr, value);
} }
static inline __attribute__((always_inline)) static __always_inline
void pci_mmio_write_config16(pci_devfn_t dev, unsigned int where, u16 value) void pci_mmio_write_config16(pci_devfn_t dev, unsigned int where, u16 value)
{ {
void *addr; void *addr;
@ -60,7 +61,7 @@ void pci_mmio_write_config16(pci_devfn_t dev, unsigned int where, u16 value)
write16(addr, value); write16(addr, value);
} }
static inline __attribute__((always_inline)) static __always_inline
void pci_mmio_write_config32(pci_devfn_t dev, unsigned int where, u32 value) void pci_mmio_write_config32(pci_devfn_t dev, unsigned int where, u32 value)
{ {
void *addr; void *addr;

View File

@ -14,6 +14,8 @@
#ifndef ARCH_SMP_ATOMIC_H #ifndef ARCH_SMP_ATOMIC_H
#define ARCH_SMP_ATOMIC_H #define ARCH_SMP_ATOMIC_H
#include <compiler.h>
/* /*
* Make sure gcc doesn't try to be clever and move things around * Make sure gcc doesn't try to be clever and move things around
* on us. We need to use _exactly_ the address the user gave us, * on us. We need to use _exactly_ the address the user gave us,
@ -55,7 +57,7 @@ typedef struct { volatile int counter; } atomic_t;
* Atomically increments v by 1. Note that the guaranteed * Atomically increments v by 1. Note that the guaranteed
* useful range of an atomic_t is only 24 bits. * useful range of an atomic_t is only 24 bits.
*/ */
static inline __attribute__((always_inline)) void atomic_inc(atomic_t *v) static __always_inline void atomic_inc(atomic_t *v)
{ {
__asm__ __volatile__( __asm__ __volatile__(
"lock ; incl %0" "lock ; incl %0"
@ -70,7 +72,7 @@ static inline __attribute__((always_inline)) void atomic_inc(atomic_t *v)
* Atomically decrements v by 1. Note that the guaranteed * Atomically decrements v by 1. Note that the guaranteed
* useful range of an atomic_t is only 24 bits. * useful range of an atomic_t is only 24 bits.
*/ */
static inline __attribute__((always_inline)) void atomic_dec(atomic_t *v) static __always_inline void atomic_dec(atomic_t *v)
{ {
__asm__ __volatile__( __asm__ __volatile__(
"lock ; decl %0" "lock ; decl %0"

View File

@ -14,6 +14,8 @@
#ifndef ARCH_SMP_SPINLOCK_H #ifndef ARCH_SMP_SPINLOCK_H
#define ARCH_SMP_SPINLOCK_H #define ARCH_SMP_SPINLOCK_H
#include <compiler.h>
#if !defined(__PRE_RAM__) \ #if !defined(__PRE_RAM__) \
|| IS_ENABLED(CONFIG_HAVE_ROMSTAGE_CONSOLE_SPINLOCK) \ || IS_ENABLED(CONFIG_HAVE_ROMSTAGE_CONSOLE_SPINLOCK) \
|| IS_ENABLED(CONFIG_HAVE_ROMSTAGE_NVRAM_CBFS_SPINLOCK) \ || IS_ENABLED(CONFIG_HAVE_ROMSTAGE_NVRAM_CBFS_SPINLOCK) \
@ -73,14 +75,14 @@ void initialize_romstage_microcode_cbfs_lock(void);
#define spin_unlock_string \ #define spin_unlock_string \
"movb $1,%0" "movb $1,%0"
static inline __attribute__((always_inline)) void spin_lock(spinlock_t *lock) static __always_inline void spin_lock(spinlock_t *lock)
{ {
__asm__ __volatile__( __asm__ __volatile__(
spin_lock_string spin_lock_string
: "=m" (lock->lock) : : "memory"); : "=m" (lock->lock) : : "memory");
} }
static inline __attribute__((always_inline)) void spin_unlock(spinlock_t *lock) static __always_inline void spin_unlock(spinlock_t *lock)
{ {
__asm__ __volatile__( __asm__ __volatile__(
spin_unlock_string spin_unlock_string
@ -88,7 +90,7 @@ static inline __attribute__((always_inline)) void spin_unlock(spinlock_t *lock)
} }
/* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */ /* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
static inline __attribute__((always_inline)) void cpu_relax(void) static __always_inline void cpu_relax(void)
{ {
__asm__ __volatile__("rep;nop" : : : "memory"); __asm__ __volatile__("rep;nop" : : : "memory");
} }

View File

@ -84,7 +84,7 @@ typedef uint32_t U32;
typedef int32_t S32; typedef int32_t S32;
typedef uint64_t U64; typedef uint64_t U64;
#define FORCE_INLINE static inline __attribute__((always_inline)) #define FORCE_INLINE static __always_inline
#define likely(expr) __builtin_expect((expr) != 0, 1) #define likely(expr) __builtin_expect((expr) != 0, 1)
#define unlikely(expr) __builtin_expect((expr) != 0, 0) #define unlikely(expr) __builtin_expect((expr) != 0, 0)

View File

@ -19,10 +19,11 @@
* WARNING: this file will be used by both any AP cores and core 0 / node 0 * WARNING: this file will be used by both any AP cores and core 0 / node 0
*/ */
#include <compiler.h>
#include <cpu/x86/cache.h> #include <cpu/x86/cache.h>
#include <cpu/x86/msr.h> #include <cpu/x86/msr.h>
static inline __attribute__((always_inline)) uint32_t amd_fam1x_cpu_family(void) static __always_inline uint32_t amd_fam1x_cpu_family(void)
{ {
uint32_t family; uint32_t family;
@ -32,7 +33,7 @@ static inline __attribute__((always_inline)) uint32_t amd_fam1x_cpu_family(void)
return family; return family;
} }
static inline __attribute__((always_inline)) static __always_inline
void disable_cache_as_ram_real(uint8_t skip_sharedc_config) void disable_cache_as_ram_real(uint8_t skip_sharedc_config)
{ {
msr_t msr; msr_t msr;

View File

@ -14,6 +14,7 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#include <compiler.h>
#include "init_cpus.h" #include "init_cpus.h"
#if IS_ENABLED(CONFIG_HAVE_OPTION_TABLE) #if IS_ENABLED(CONFIG_HAVE_OPTION_TABLE)
@ -231,7 +232,7 @@ static inline int lapic_remote_read(int apicid, int reg, u32 *pvalue)
static void init_fidvid_ap(u32 apicid, u32 nodeid, u32 coreid); static void init_fidvid_ap(u32 apicid, u32 nodeid, u32 coreid);
#endif #endif
static inline __attribute__((always_inline)) static __always_inline
void print_apicid_nodeid_coreid(u32 apicid, struct node_core_id id, void print_apicid_nodeid_coreid(u32 apicid, struct node_core_id id,
const char *str) const char *str)
{ {

View File

@ -60,7 +60,7 @@ void smi_release_lock(void)
} }
#define LAPIC_ID 0xfee00020 #define LAPIC_ID 0xfee00020
static inline __attribute__((always_inline)) unsigned long nodeid(void) static __always_inline unsigned long nodeid(void)
{ {
return (*((volatile unsigned long *)(LAPIC_ID)) >> 24); return (*((volatile unsigned long *)(LAPIC_ID)) >> 24);
} }

View File

@ -27,5 +27,6 @@
#define __must_check __attribute__((warn_unused_result)) #define __must_check __attribute__((warn_unused_result))
#define __weak __attribute__((weak)) #define __weak __attribute__((weak))
#define __noreturn __attribute__((noreturn)) #define __noreturn __attribute__((noreturn))
#define __always_inline inline __attribute__((always_inline))
#endif #endif

View File

@ -38,13 +38,14 @@
#if !defined(__PRE_RAM__) && !defined(__ASSEMBLER__) #if !defined(__PRE_RAM__) && !defined(__ASSEMBLER__)
#include <compiler.h>
#include <cpu/x86/msr.h> #include <cpu/x86/msr.h>
void amd_setup_mtrrs(void); void amd_setup_mtrrs(void);
struct device; struct device;
void add_uma_resource_below_tolm(struct device *nb, int idx); void add_uma_resource_below_tolm(struct device *nb, int idx);
static inline __attribute__((always_inline)) msr_t rdmsr_amd(unsigned int index) static __always_inline msr_t rdmsr_amd(unsigned int index)
{ {
msr_t result; msr_t result;
__asm__ __volatile__ ( __asm__ __volatile__ (
@ -55,8 +56,7 @@ static inline __attribute__((always_inline)) msr_t rdmsr_amd(unsigned int index)
return result; return result;
} }
static inline __attribute__((always_inline)) void wrmsr_amd(unsigned int index, static __always_inline void wrmsr_amd(unsigned int index, msr_t msr)
msr_t msr)
{ {
__asm__ __volatile__ ( __asm__ __volatile__ (
"wrmsr" "wrmsr"

View File

@ -16,6 +16,7 @@
#ifndef CPU_X86_CACHE #ifndef CPU_X86_CACHE
#define CPU_X86_CACHE #define CPU_X86_CACHE
#include <compiler.h>
#include <cpu/x86/cr.h> #include <cpu/x86/cr.h>
#define CR0_CacheDisable (CR0_CD) #define CR0_CacheDisable (CR0_CD)
@ -55,7 +56,7 @@ static inline void clflush(void *addr)
asm volatile ("clflush (%0)"::"r" (addr)); asm volatile ("clflush (%0)"::"r" (addr));
} }
/* The following functions require the always_inline due to AMD /* The following functions require the __always_inline due to AMD
* function STOP_CAR_AND_CPU that disables cache as * function STOP_CAR_AND_CPU that disables cache as
* RAM, the cache as RAM stack can no longer be used. Called * RAM, the cache as RAM stack can no longer be used. Called
* functions must be inlined to avoid stack usage. Also, the * functions must be inlined to avoid stack usage. Also, the
@ -63,9 +64,9 @@ static inline void clflush(void *addr)
* allocated them from the stack. With gcc 4.5.0, some functions * allocated them from the stack. With gcc 4.5.0, some functions
* declared as inline are not being inlined. This patch forces * declared as inline are not being inlined. This patch forces
* these functions to always be inlined by adding the qualifier * these functions to always be inlined by adding the qualifier
* __attribute__((always_inline)) to their declaration. * __always_inline to their declaration.
*/ */
static inline __attribute__((always_inline)) void enable_cache(void) static __always_inline void enable_cache(void)
{ {
unsigned long cr0; unsigned long cr0;
cr0 = read_cr0(); cr0 = read_cr0();
@ -73,7 +74,7 @@ static inline __attribute__((always_inline)) void enable_cache(void)
write_cr0(cr0); write_cr0(cr0);
} }
static inline __attribute__((always_inline)) void disable_cache(void) static __always_inline void disable_cache(void)
{ {
/* Disable and write back the cache */ /* Disable and write back the cache */
unsigned long cr0; unsigned long cr0;

View File

@ -18,6 +18,7 @@
#if !defined(__ASSEMBLER__) #if !defined(__ASSEMBLER__)
#include <compiler.h>
#include <stdint.h> #include <stdint.h>
#include <arch/cpu.h> #include <arch/cpu.h>
@ -37,7 +38,7 @@
#define CRx_IN "r" #define CRx_IN "r"
#define CRx_RET "=r" #define CRx_RET "=r"
#endif #endif
static alwaysinline CRx_TYPE read_cr0(void) static __always_inline CRx_TYPE read_cr0(void)
{ {
CRx_TYPE value; CRx_TYPE value;
__asm__ __volatile__ ( __asm__ __volatile__ (
@ -49,7 +50,7 @@ static alwaysinline CRx_TYPE read_cr0(void)
return value; return value;
} }
static alwaysinline void write_cr0(CRx_TYPE data) static __always_inline void write_cr0(CRx_TYPE data)
{ {
__asm__ __volatile__ ( __asm__ __volatile__ (
"mov %0, %%cr0" "mov %0, %%cr0"
@ -59,7 +60,7 @@ static alwaysinline void write_cr0(CRx_TYPE data)
); );
} }
static alwaysinline CRx_TYPE read_cr2(void) static __always_inline CRx_TYPE read_cr2(void)
{ {
CRx_TYPE value; CRx_TYPE value;
__asm__ __volatile__ ( __asm__ __volatile__ (
@ -71,7 +72,7 @@ static alwaysinline CRx_TYPE read_cr2(void)
return value; return value;
} }
static alwaysinline CRx_TYPE read_cr3(void) static __always_inline CRx_TYPE read_cr3(void)
{ {
CRx_TYPE value; CRx_TYPE value;
__asm__ __volatile__ ( __asm__ __volatile__ (
@ -83,7 +84,7 @@ static alwaysinline CRx_TYPE read_cr3(void)
return value; return value;
} }
static alwaysinline void write_cr3(CRx_TYPE data) static __always_inline void write_cr3(CRx_TYPE data)
{ {
__asm__ __volatile__ ( __asm__ __volatile__ (
"mov %0, %%cr3" "mov %0, %%cr3"
@ -92,7 +93,7 @@ static alwaysinline void write_cr3(CRx_TYPE data)
: COMPILER_BARRIER : COMPILER_BARRIER
); );
} }
static alwaysinline CRx_TYPE read_cr4(void) static __always_inline CRx_TYPE read_cr4(void)
{ {
CRx_TYPE value; CRx_TYPE value;
__asm__ __volatile__ ( __asm__ __volatile__ (
@ -104,7 +105,7 @@ static alwaysinline CRx_TYPE read_cr4(void)
return value; return value;
} }
static alwaysinline void write_cr4(CRx_TYPE data) static __always_inline void write_cr4(CRx_TYPE data)
{ {
__asm__ __volatile__ ( __asm__ __volatile__ (
"mov %0, %%cr4" "mov %0, %%cr4"

View File

@ -1,24 +1,23 @@
#ifndef CPU_X86_LAPIC_H #ifndef CPU_X86_LAPIC_H
#define CPU_X86_LAPIC_H #define CPU_X86_LAPIC_H
#include <compiler.h>
#include <cpu/x86/lapic_def.h> #include <cpu/x86/lapic_def.h>
#include <cpu/x86/msr.h> #include <cpu/x86/msr.h>
#include <halt.h> #include <halt.h>
#include <smp/node.h> #include <smp/node.h>
static inline __attribute__((always_inline)) unsigned long lapic_read( static __always_inline unsigned long lapic_read(unsigned long reg)
unsigned long reg)
{ {
return *((volatile unsigned long *)(LAPIC_DEFAULT_BASE+reg)); return *((volatile unsigned long *)(LAPIC_DEFAULT_BASE+reg));
} }
static inline __attribute__((always_inline)) void lapic_write(unsigned long reg, static __always_inline void lapic_write(unsigned long reg, unsigned long v)
unsigned long v)
{ {
*((volatile unsigned long *)(LAPIC_DEFAULT_BASE+reg)) = v; *((volatile unsigned long *)(LAPIC_DEFAULT_BASE+reg)) = v;
} }
static inline __attribute__((always_inline)) void lapic_wait_icr_idle(void) static __always_inline void lapic_wait_icr_idle(void)
{ {
do { } while (lapic_read(LAPIC_ICR) & LAPIC_ICR_BUSY); do { } while (lapic_read(LAPIC_ICR) & LAPIC_ICR_BUSY);
} }
@ -42,7 +41,7 @@ static inline void disable_lapic(void)
wrmsr(LAPIC_BASE_MSR, msr); wrmsr(LAPIC_BASE_MSR, msr);
} }
static inline __attribute__((always_inline)) unsigned long lapicid(void) static __always_inline unsigned long lapicid(void)
{ {
return lapic_read(LAPIC_ID) >> 24; return lapic_read(LAPIC_ID) >> 24;
} }
@ -51,7 +50,7 @@ static inline __attribute__((always_inline)) unsigned long lapicid(void)
/* If we need to go back to sipi wait, we use the long non-inlined version of /* If we need to go back to sipi wait, we use the long non-inlined version of
* this function in lapic_cpu_init.c * this function in lapic_cpu_init.c
*/ */
static inline __attribute__((always_inline)) void stop_this_cpu(void) static __always_inline void stop_this_cpu(void)
{ {
/* Called by an AP when it is ready to halt and wait for a new task */ /* Called by an AP when it is ready to halt and wait for a new task */
halt(); halt();

View File

@ -1,6 +1,8 @@
#ifndef CPU_X86_MSR_H #ifndef CPU_X86_MSR_H
#define CPU_X86_MSR_H #define CPU_X86_MSR_H
#include <compiler.h>
/* Intel SDM: Table 2-1 /* Intel SDM: Table 2-1
* IA-32 architectural MSR: Extended Feature Enable Register * IA-32 architectural MSR: Extended Feature Enable Register
*/ */
@ -50,19 +52,18 @@ msr_t soc_msr_read(unsigned int index);
void soc_msr_write(unsigned int index, msr_t msr); void soc_msr_write(unsigned int index, msr_t msr);
/* Handle MSR references in the other source code */ /* Handle MSR references in the other source code */
static inline __attribute__((always_inline)) msr_t rdmsr(unsigned int index) static __always_inline msr_t rdmsr(unsigned int index)
{ {
return soc_msr_read(index); return soc_msr_read(index);
} }
static inline __attribute__((always_inline)) void wrmsr(unsigned int index, static __always_inline void wrmsr(unsigned int index, msr_t msr)
msr_t msr)
{ {
soc_msr_write(index, msr); soc_msr_write(index, msr);
} }
#else /* CONFIG_SOC_SETS_MSRS */ #else /* CONFIG_SOC_SETS_MSRS */
/* The following functions require the always_inline due to AMD /* The following functions require the __always_inline due to AMD
* function STOP_CAR_AND_CPU that disables cache as * function STOP_CAR_AND_CPU that disables cache as
* RAM, the cache as RAM stack can no longer be used. Called * RAM, the cache as RAM stack can no longer be used. Called
* functions must be inlined to avoid stack usage. Also, the * functions must be inlined to avoid stack usage. Also, the
@ -70,9 +71,9 @@ static inline __attribute__((always_inline)) void wrmsr(unsigned int index,
* allocated them from the stack. With gcc 4.5.0, some functions * allocated them from the stack. With gcc 4.5.0, some functions
* declared as inline are not being inlined. This patch forces * declared as inline are not being inlined. This patch forces
* these functions to always be inlined by adding the qualifier * these functions to always be inlined by adding the qualifier
* __attribute__((always_inline)) to their declaration. * __always_inline to their declaration.
*/ */
static inline __attribute__((always_inline)) msr_t rdmsr(unsigned int index) static __always_inline msr_t rdmsr(unsigned int index)
{ {
msr_t result; msr_t result;
__asm__ __volatile__ ( __asm__ __volatile__ (
@ -83,8 +84,7 @@ static inline __attribute__((always_inline)) msr_t rdmsr(unsigned int index)
return result; return result;
} }
static inline __attribute__((always_inline)) void wrmsr(unsigned int index, static __always_inline void wrmsr(unsigned int index, msr_t msr)
msr_t msr)
{ {
__asm__ __volatile__ ( __asm__ __volatile__ (
"wrmsr" "wrmsr"

View File

@ -1,6 +1,7 @@
#ifndef PCI_OPS_H #ifndef PCI_OPS_H
#define PCI_OPS_H #define PCI_OPS_H
#include <compiler.h>
#include <stdint.h> #include <stdint.h>
#include <device/device.h> #include <device/device.h>
#include <arch/pci_ops.h> #include <arch/pci_ops.h>
@ -19,28 +20,28 @@ void pci_write_config32(struct device *dev, unsigned int where, u32 val);
* Use device_t here as the functions are to be used with either * Use device_t here as the functions are to be used with either
* __SIMPLE_DEVICE__ defined or undefined. * __SIMPLE_DEVICE__ defined or undefined.
*/ */
static inline __attribute__((always_inline)) static __always_inline
void pci_or_config8(device_t dev, unsigned int where, u8 ormask) void pci_or_config8(device_t dev, unsigned int where, u8 ormask)
{ {
u8 value = pci_read_config8(dev, where); u8 value = pci_read_config8(dev, where);
pci_write_config8(dev, where, value | ormask); pci_write_config8(dev, where, value | ormask);
} }
static inline __attribute__((always_inline)) static __always_inline
void pci_or_config16(device_t dev, unsigned int where, u16 ormask) void pci_or_config16(device_t dev, unsigned int where, u16 ormask)
{ {
u16 value = pci_read_config16(dev, where); u16 value = pci_read_config16(dev, where);
pci_write_config16(dev, where, value | ormask); pci_write_config16(dev, where, value | ormask);
} }
static inline __attribute__((always_inline)) static __always_inline
void pci_or_config32(device_t dev, unsigned int where, u32 ormask) void pci_or_config32(device_t dev, unsigned int where, u32 ormask)
{ {
u32 value = pci_read_config32(dev, where); u32 value = pci_read_config32(dev, where);
pci_write_config32(dev, where, value | ormask); pci_write_config32(dev, where, value | ormask);
} }
static inline __attribute__((always_inline)) static __always_inline
void pci_update_config8(device_t dev, int reg, u8 mask, u8 or) void pci_update_config8(device_t dev, int reg, u8 mask, u8 or)
{ {
u8 reg8; u8 reg8;
@ -51,7 +52,7 @@ void pci_update_config8(device_t dev, int reg, u8 mask, u8 or)
pci_write_config8(dev, reg, reg8); pci_write_config8(dev, reg, reg8);
} }
static inline __attribute__((always_inline)) static __always_inline
void pci_update_config16(device_t dev, int reg, u16 mask, u16 or) void pci_update_config16(device_t dev, int reg, u16 mask, u16 or)
{ {
u16 reg16; u16 reg16;
@ -62,7 +63,7 @@ void pci_update_config16(device_t dev, int reg, u16 mask, u16 or)
pci_write_config16(dev, reg, reg16); pci_write_config16(dev, reg, reg16);
} }
static inline __attribute__((always_inline)) static __always_inline
void pci_update_config32(device_t dev, int reg, u32 mask, u32 or) void pci_update_config32(device_t dev, int reg, u32 mask, u32 or)
{ {
u32 reg32; u32 reg32;

View File

@ -24,6 +24,7 @@
* Steven James 02/06/2003 * Steven James 02/06/2003
*/ */
#include <compiler.h>
#include <stdint.h> #include <stdint.h>
#include <device/pci_def.h> #include <device/pci_def.h>
#include <arch/io.h> #include <arch/io.h>
@ -911,7 +912,7 @@ static void configure_e7501_ram_addresses(const struct mem_controller
* *
* NOTE: All cache and stack is lost during ECC scrub loop. * NOTE: All cache and stack is lost during ECC scrub loop.
*/ */
static inline void __attribute__((always_inline)) static __always_inline void
initialize_ecc(unsigned long ret_addr, unsigned long ret_addr2) initialize_ecc(unsigned long ret_addr, unsigned long ret_addr2)
{ {
uint16_t scrubbed = pci_read_config16(MCHDEV, MCHCFGNS) & 0x08; uint16_t scrubbed = pci_read_config16(MCHDEV, MCHCFGNS) & 0x08;

View File

@ -264,8 +264,7 @@ static uint32_t *sysctr_cntfid0_ptr = (void *)(SYSCTR_CTLR_BASE + 0x20);
/* Utility functions. */ /* Utility functions. */
static inline void __attribute__((always_inline)) static __always_inline void __noreturn halt(void)
__noreturn halt(void)
{ {
for (;;); for (;;);
} }

View File

@ -428,8 +428,7 @@ enum {
/* Utility functions. */ /* Utility functions. */
static inline void __attribute__((always_inline)) static __always_inline void __noreturn halt(void)
__noreturn halt(void)
{ {
for (;;); for (;;);
} }