Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 28d71741 authored by Chris Metcalf's avatar Chris Metcalf
Browse files

arch/tile: various header improvements for building drivers



This change adds a number of missing headers in asm (fb.h, parport.h,
serial.h, and vga.h) using the minimal generic versions.

It also adds a number of missing interfaces that showed up as build
failures when trying to build various drivers not normally included in the
"tile" distribution: ioremap_wc(), memset_io(), io{read,write}{16,32}be(),
virt_to_bus(), bus_to_virt(), irq_canonicalize(), __pte(), __pgd(),
and __pmd().  I also added a cast in virt_to_page() since not all callers
pass a pointer.

I fixed <asm/stat.h> to properly include a __KERNEL__ guard for the
__ARCH_WANT_STAT64 symbol, and <asm/swab.h> to use __builtin_bswap32()
even for our 64-bit architecture, since the same code is produced.

I added an export for get_cycles(), since it's used in some modules.

And I made <arch/spr_def.h> properly include the __KERNEL__ guard,
even though it's not yet exported, since it likely will be soon.

Signed-off-by: default avatarChris Metcalf <cmetcalf@tilera.com>
parent dbb43421
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -12,6 +12,15 @@
 *   more details.
 */

/* Include the proper base SPR definition file. */
#ifdef __tilegx__
#include <arch/spr_def_64.h>
#else
#include <arch/spr_def_32.h>
#endif

#ifdef __KERNEL__

/*
 * In addition to including the proper base SPR definition file, depending
 * on machine architecture, this file defines several macros which allow
@@ -29,7 +38,6 @@
#define _concat4(a, b, c, d)  __concat4(a, b, c, d)

#ifdef __tilegx__
#include <arch/spr_def_64.h>

/* TILE-Gx dependent, protection-level dependent SPRs. */

@@ -65,7 +73,6 @@
	_concat4(INT_SINGLE_STEP_, CONFIG_KERNEL_PL,,)

#else
#include <arch/spr_def_32.h>

/* TILEPro dependent, protection-level dependent SPRs. */

@@ -102,3 +109,5 @@
	_concat4(SPR_INTCTRL_, CONFIG_KERNEL_PL, _STATUS,)
#define INT_INTCTRL_K \
	_concat4(INT_INTCTRL_, CONFIG_KERNEL_PL,,)

#endif /* __KERNEL__ */
+1 −0
Original line number Diff line number Diff line
#include <asm-generic/fb.h>
+18 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ extern void iounmap(volatile void __iomem *addr);
#endif

#define ioremap_nocache(physaddr, size)		ioremap(physaddr, size)
#define ioremap_wc(physaddr, size)		ioremap(physaddr, size)
#define ioremap_writethrough(physaddr, size)	ioremap(physaddr, size)
#define ioremap_fullcache(physaddr, size)	ioremap(physaddr, size)

@@ -161,6 +162,15 @@ static inline void _tile_writeq(u64 val, unsigned long addr)
#define iowrite32 writel
#define iowrite64 writeq

static inline void memset_io(void *dst, int val, size_t len)
{
	int x;
	BUG_ON((unsigned long)dst & 0x3);
	val = (val & 0xff) * 0x01010101;
	for (x = 0; x < len; x += 4)
		writel(val, dst + x);
}

static inline void memcpy_fromio(void *dst, const volatile void __iomem *src,
				 size_t len)
{
@@ -269,6 +279,11 @@ static inline void outsl(unsigned long addr, const void *buffer, int count)
	ioport_panic();
}

#define ioread16be(addr)	be16_to_cpu(ioread16(addr))
#define ioread32be(addr)	be32_to_cpu(ioread32(addr))
#define iowrite16be(v, addr)	iowrite16(be16_to_cpu(v), (addr))
#define iowrite32be(v, addr)	iowrite32(be32_to_cpu(v), (addr))

#define ioread8_rep(p, dst, count) \
	insb((unsigned long) (p), (dst), (count))
#define ioread16_rep(p, dst, count) \
@@ -283,4 +298,7 @@ static inline void outsl(unsigned long addr, const void *buffer, int count)
#define iowrite32_rep(p, src, count) \
	outsl((unsigned long) (p), (src), (count))

#define virt_to_bus     virt_to_phys
#define bus_to_virt     phys_to_virt

#endif /* _ASM_TILE_IO_H */
+2 −0
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@
/* IRQ numbers used for linux IPIs. */
#define IRQ_RESCHEDULE 1

#define irq_canonicalize(irq)   (irq)

void ack_bad_irq(unsigned int irq);

/*
+7 −1
Original line number Diff line number Diff line
@@ -91,6 +91,10 @@ typedef struct page *pgtable_t;
/* Must be a macro since it is used to create constants. */
#define __pgprot(val) hv_pte(val)

/* Rarely-used initializers, typically with a "zero" value. */
#define __pte(x) hv_pte(x)
#define __pgd(x) hv_pte(x)

static inline u64 pgprot_val(pgprot_t pgprot)
{
	return hv_pte_val(pgprot);
@@ -110,6 +114,8 @@ static inline u64 pgd_val(pgd_t pgd)

typedef HV_PTE pmd_t;

#define __pmd(x) hv_pte(x)

static inline u64 pmd_val(pmd_t pmd)
{
	return hv_pte_val(pmd);
@@ -318,7 +324,7 @@ static inline int pfn_valid(unsigned long pfn)

/* Provide as macros since these require some other headers included. */
#define page_to_pa(page) ((phys_addr_t)(page_to_pfn(page)) << PAGE_SHIFT)
#define virt_to_page(kaddr) pfn_to_page(kaddr_to_pfn(kaddr))
#define virt_to_page(kaddr) pfn_to_page(kaddr_to_pfn((void *)(kaddr)))
#define page_to_virt(page) pfn_to_kaddr(page_to_pfn(page))

struct mm_struct;
Loading