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

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
...@@ -12,6 +12,15 @@ ...@@ -12,6 +12,15 @@
* more details. * 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 * In addition to including the proper base SPR definition file, depending
* on machine architecture, this file defines several macros which allow * on machine architecture, this file defines several macros which allow
...@@ -29,7 +38,6 @@ ...@@ -29,7 +38,6 @@
#define _concat4(a, b, c, d) __concat4(a, b, c, d) #define _concat4(a, b, c, d) __concat4(a, b, c, d)
#ifdef __tilegx__ #ifdef __tilegx__
#include <arch/spr_def_64.h>
/* TILE-Gx dependent, protection-level dependent SPRs. */ /* TILE-Gx dependent, protection-level dependent SPRs. */
...@@ -65,7 +73,6 @@ ...@@ -65,7 +73,6 @@
_concat4(INT_SINGLE_STEP_, CONFIG_KERNEL_PL,,) _concat4(INT_SINGLE_STEP_, CONFIG_KERNEL_PL,,)
#else #else
#include <arch/spr_def_32.h>
/* TILEPro dependent, protection-level dependent SPRs. */ /* TILEPro dependent, protection-level dependent SPRs. */
...@@ -102,3 +109,5 @@ ...@@ -102,3 +109,5 @@
_concat4(SPR_INTCTRL_, CONFIG_KERNEL_PL, _STATUS,) _concat4(SPR_INTCTRL_, CONFIG_KERNEL_PL, _STATUS,)
#define INT_INTCTRL_K \ #define INT_INTCTRL_K \
_concat4(INT_INTCTRL_, CONFIG_KERNEL_PL,,) _concat4(INT_INTCTRL_, CONFIG_KERNEL_PL,,)
#endif /* __KERNEL__ */
#include <asm-generic/fb.h>
...@@ -52,6 +52,7 @@ extern void iounmap(volatile void __iomem *addr); ...@@ -52,6 +52,7 @@ extern void iounmap(volatile void __iomem *addr);
#endif #endif
#define ioremap_nocache(physaddr, size) ioremap(physaddr, size) #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_writethrough(physaddr, size) ioremap(physaddr, size)
#define ioremap_fullcache(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) ...@@ -161,6 +162,15 @@ static inline void _tile_writeq(u64 val, unsigned long addr)
#define iowrite32 writel #define iowrite32 writel
#define iowrite64 writeq #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, static inline void memcpy_fromio(void *dst, const volatile void __iomem *src,
size_t len) size_t len)
{ {
...@@ -269,6 +279,11 @@ static inline void outsl(unsigned long addr, const void *buffer, int count) ...@@ -269,6 +279,11 @@ static inline void outsl(unsigned long addr, const void *buffer, int count)
ioport_panic(); 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) \ #define ioread8_rep(p, dst, count) \
insb((unsigned long) (p), (dst), (count)) insb((unsigned long) (p), (dst), (count))
#define ioread16_rep(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) ...@@ -283,4 +298,7 @@ static inline void outsl(unsigned long addr, const void *buffer, int count)
#define iowrite32_rep(p, src, count) \ #define iowrite32_rep(p, src, count) \
outsl((unsigned long) (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 */ #endif /* _ASM_TILE_IO_H */
...@@ -23,6 +23,8 @@ ...@@ -23,6 +23,8 @@
/* IRQ numbers used for linux IPIs. */ /* IRQ numbers used for linux IPIs. */
#define IRQ_RESCHEDULE 1 #define IRQ_RESCHEDULE 1
#define irq_canonicalize(irq) (irq)
void ack_bad_irq(unsigned int irq); void ack_bad_irq(unsigned int irq);
/* /*
......
...@@ -91,6 +91,10 @@ typedef struct page *pgtable_t; ...@@ -91,6 +91,10 @@ typedef struct page *pgtable_t;
/* Must be a macro since it is used to create constants. */ /* Must be a macro since it is used to create constants. */
#define __pgprot(val) hv_pte(val) #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) static inline u64 pgprot_val(pgprot_t pgprot)
{ {
return hv_pte_val(pgprot); return hv_pte_val(pgprot);
...@@ -110,6 +114,8 @@ static inline u64 pgd_val(pgd_t pgd) ...@@ -110,6 +114,8 @@ static inline u64 pgd_val(pgd_t pgd)
typedef HV_PTE pmd_t; typedef HV_PTE pmd_t;
#define __pmd(x) hv_pte(x)
static inline u64 pmd_val(pmd_t pmd) static inline u64 pmd_val(pmd_t pmd)
{ {
return hv_pte_val(pmd); return hv_pte_val(pmd);
...@@ -318,7 +324,7 @@ static inline int pfn_valid(unsigned long pfn) ...@@ -318,7 +324,7 @@ static inline int pfn_valid(unsigned long pfn)
/* Provide as macros since these require some other headers included. */ /* 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 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)) #define page_to_virt(page) pfn_to_kaddr(page_to_pfn(page))
struct mm_struct; struct mm_struct;
......
#include <asm-generic/parport.h>
#include <asm-generic/serial.h>
#ifdef CONFIG_COMPAT #if defined(__KERNEL__) && defined(CONFIG_COMPAT)
#define __ARCH_WANT_STAT64 /* Used for compat_sys_stat64() etc. */ #define __ARCH_WANT_STAT64 /* Used for compat_sys_stat64() etc. */
#endif #endif
#include <asm-generic/stat.h> #include <asm-generic/stat.h>
...@@ -18,12 +18,6 @@ ...@@ -18,12 +18,6 @@
/* Tile gcc is always >= 4.3.0, so we use __builtin_bswap. */ /* Tile gcc is always >= 4.3.0, so we use __builtin_bswap. */
#define __arch_swab32(x) __builtin_bswap32(x) #define __arch_swab32(x) __builtin_bswap32(x)
#define __arch_swab64(x) __builtin_bswap64(x) #define __arch_swab64(x) __builtin_bswap64(x)
/* Use the variant that is natural for the wordsize. */
#ifdef CONFIG_64BIT
#define __arch_swab16(x) (__builtin_bswap64(x) >> 48)
#else
#define __arch_swab16(x) (__builtin_bswap32(x) >> 16) #define __arch_swab16(x) (__builtin_bswap32(x) >> 16)
#endif
#endif /* _ASM_TILE_SWAB_H */ #endif /* _ASM_TILE_SWAB_H */
/*
* Copyright 2010 Tilera Corporation. All Rights Reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation, version 2.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
* NON INFRINGEMENT. See the GNU General Public License for
* more details.
*
* Access to VGA videoram.
*/
#ifndef _ASM_TILE_VGA_H
#define _ASM_TILE_VGA_H
#include <asm/io.h>
#define VT_BUF_HAVE_RW
static inline void scr_writew(u16 val, volatile u16 *addr)
{
__raw_writew(val, (volatile u16 __iomem *) addr);
}
static inline u16 scr_readw(volatile const u16 *addr)
{
return __raw_readw((volatile const u16 __iomem *) addr);
}
#define vga_readb(a) readb((u8 __iomem *)(a))
#define vga_writeb(v,a) writeb(v, (u8 __iomem *)(a))
#define VGA_MAP_MEM(x,s) ((unsigned long) ioremap(x, s))
#endif
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/module.h>
#include <asm/irq_regs.h> #include <asm/irq_regs.h>
#include <asm/traps.h> #include <asm/traps.h>
#include <hv/hypervisor.h> #include <hv/hypervisor.h>
...@@ -56,6 +57,7 @@ cycles_t get_cycles(void) ...@@ -56,6 +57,7 @@ cycles_t get_cycles(void)
return (((cycles_t)high) << 32) | low; return (((cycles_t)high) << 32) | low;
} }
EXPORT_SYMBOL(get_cycles);
#endif #endif
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment