All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@arndb.de>
To: Richard Kuo <rkuo@codeaurora.org>
Cc: linux-kernel@vger.kernel.org, linux-hexagon@vger.kernel.org,
	Linas Vepstas <linas@codeaurora.org>
Subject: Re: [patch v2 24/35] Hexagon: Provide basic implementation and/or stubs for I/O routines.
Date: Wed, 31 Aug 2011 16:47:41 +0200	[thread overview]
Message-ID: <201108311647.42017.arnd@arndb.de> (raw)
In-Reply-To: <20110830190801.995980546@codeaurora.org>

On Tuesday 30 August 2011, Richard Kuo wrote:
> Changed read/write to use inline assembly.
> 
> Rearranged the file and put all the ioport stuff at the bottom.  For now
> I'd like to just leave the stubs in there in case they need to be
> filled out later; plus things don't compile.
> 
> We still seem to need IO_SPACE_LIMIT to be defined, particularly to something
> large, as we have drivers that request resources with IORESOURCE_IO that
> are memory mapped IO.  The ioread/iowrites work as they select the correct
> routine to use.

Which drivers? If the drivers are buggy, better fix them than working around
in the architecture.

I have experimental patches in the tmp/randconfig3 branch of the arm-soc.git
tree to remove the need for PIO functions in ARM. Please have a look there
if you are interested.

> +/*
> + * We don't have PCI yet.
> + */
> +#define IO_SPACE_LIMIT 0xffffffff
> +#define _IO_BASE 0x0

If you absolutely insist on defining these, at least make them meaningful,
e.g. defining _IO_BASE to an unused location in the virtual address space,
and IO_SPACE_LIMIT small enough to be harmless, at most 0xffff.

If you ever gain PCI support, you can then map the PCI I/O space into that
area.

> +static inline void memcpy_fromio(void *dst, const volatile void __iomem *src,
> +	int count)
> +{
> +	memcpy(dst, (void *) src, count);
> +}
> +
> +static inline void memcpy_toio(volatile void __iomem *dst, const void *src,
> +	int count)
> +{
> +	memcpy((void *) dst, src, count);
> +}

This will need __force in order to build with sparse.

> +#define PCI_IO_ADDR	volatile void __iomem *

Better make _IO_BASE have the right type to start with, like

#define _IO_BASE ((void __iomem *)0xefff0000)
static inline u8 inb(unsigned long port)
{
	return readb(_IO_BASE + (port & IO_SPACE_LIMIT));
}

static inline void outb(u8 data, unsigned long port)
{
	writeb(data, _IO_BASE + (port & IO_SPACE_LIMIT));
}

> +/*  _p means "pause until the I/O completes"  */
> +#define outb_p outb
> +#define outw_p outw
> +#define outl_p outl
> +
> +#define inb_p inb
> +#define inw_p inw
> +#define inl_p inl

It doesn't actually mean that. It means 'pause for a bit longer'. The inb/outb
family of functions is already required to wait for the I/O to complete,
unlike readb/writeb, which only needs to wait for inbound data, while
outbound writes are posted to the bus without waiting for the data to arrive.

> +static inline void insb(unsigned long addr, void *buffer, int count)
> +{
> +	printk(KERN_INFO "insb not implemented\n");
> +}
> +
> +static inline void insw(unsigned long addr, void *buffer, int count)
> +{
> +	printk(KERN_INFO "insw not implemented\n");
> +}
> +
> +static inline void insl(unsigned long addr, void *buffer, int count)
> +{
> +	printk(KERN_INFO "insl not implemented\n");
> +}
> +
> +static inline void outsb(unsigned long addr, const void *buffer, int count)
> +{
> +	printk(KERN_INFO "outsb not implemented\n");
> +}
> +
> +static inline void outsw(unsigned long addr, const void *buffer, int count)
> +{
> +	printk(KERN_INFO "outsw not implemented\n");
> +}
> +
> +static inline void outsl(unsigned long addr, const void *buffer, int count)
> +{
> +	printk(KERN_INFO "outsl not implemented\n");
> +}

Either just add the obvious implementations adding _IO_BASE as above
or stub these out to create a link time error in drivers using them.
If a driver relies on these functions, it won't work anyway, so it's
better to not even build it.

> +/*  generic versions defined in lib/iomap.c  */
> +extern void __iomem *ioport_map(unsigned long port, unsigned int nr);
> +extern void ioport_unmap(void __iomem *addr);


You can also just set CONFIG_NO_IOPORT (CONFIG_NO_IOPORT_MAP once my
patches went in) to remove support for ioport_map.

	Arnd

  parent reply	other threads:[~2011-08-31 14:47 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-30 19:07 [patch v2 00/35] Hexagon: Add support for Qualcomm Hexagon architecture Richard Kuo
2011-08-30 19:07 ` [patch v2 01/35] Hexagon: Add generic headers Richard Kuo
2011-08-31 13:24   ` Arnd Bergmann
2011-08-31 19:51     ` David Brown
2011-08-31 20:00       ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 02/35] Hexagon: Core arch-specific header files Richard Kuo
2011-08-31 13:25   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 03/35] Hexagon: Add bitops support Richard Kuo
2011-08-31 13:26   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 04/35] Hexagon: Add atomic ops support Richard Kuo
2011-08-31 13:26   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 05/35] Hexagon: Add syscalls Richard Kuo
2011-08-31 13:34   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 06/35] Hexagon: Add processor and system headers Richard Kuo
2011-08-31 13:35   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 07/35] Hexagon: Add threadinfo Richard Kuo
2011-08-31 13:36   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 08/35] Hexagon: Add delay functions Richard Kuo
2011-08-31 13:39   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 09/35] Hexagon: Add checksum functions Richard Kuo
2011-08-30 19:34   ` Joe Perches
2011-08-30 19:52     ` Sam Ravnborg
2011-08-31 14:49   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 10/35] Hexagon: Add memcpy and memset accelerated functions Richard Kuo
2011-08-31 13:40   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 11/35] Hexagon: Add hypervisor interface Richard Kuo
2011-08-31 13:41   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 12/35] Hexagon: Export ksyms defined in assembly files Richard Kuo
2011-08-31 13:41   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 13/35] Hexagon: Support dynamic module loading Richard Kuo
2011-08-31 13:41   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 14/35] Hexagon: Add signal functions Richard Kuo
2011-08-31 13:42   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 15/35] Hexagon: Add init_task and process functions Richard Kuo
2011-08-31 13:45   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 16/35] Hexagon: Add startup code Richard Kuo
2011-08-31 13:46   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 17/35] Hexagon: Add interrupts Richard Kuo
2011-08-31 13:50   ` Arnd Bergmann
2011-08-31 16:16     ` Linas Vepstas (Code Aurora)
2011-08-30 19:07 ` [patch v2 18/35] Hexagon: Add time and timer functions Richard Kuo
2011-08-31 14:04   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 19/35] Hexagon: Add ptrace support Richard Kuo
2011-08-31 14:07   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 20/35] Hexagon: Provide basic debugging and system trap support Richard Kuo
2011-08-31 14:08   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 21/35] Hexagon: Add SMP support Richard Kuo
2011-08-30 19:30   ` Joe Perches
2011-08-30 20:50     ` Richard Kuo
2011-08-31 15:00   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 22/35] Hexagon: Add locking types and functions Richard Kuo
2011-08-31 14:09   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 23/35] Hexagon: Add user access functions Richard Kuo
2011-08-31 14:10   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 24/35] Hexagon: Provide basic implementation and/or stubs for I/O routines Richard Kuo
2011-08-31 14:28   ` Arnd Bergmann
2011-08-31 14:47   ` Arnd Bergmann [this message]
2011-08-30 19:07 ` [patch v2 25/35] Hexagon: Implement basic cache-flush support Richard Kuo
2011-08-31 14:49   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 26/35] Hexagon: Implement basic TLB management routines for Hexagon Richard Kuo
2011-08-31 14:49   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 27/35] Hexagon: Provide DMA implementation Richard Kuo
2011-08-31 14:51   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 28/35] Hexagon: Add ioremap support Richard Kuo
2011-08-31 14:53   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 29/35] Hexagon: Add page table header files & etc Richard Kuo
2011-08-31 14:57   ` Arnd Bergmann
2011-08-30 19:07 ` [patch v2 30/35] Hexagon: Add page-fault support Richard Kuo
2011-08-31 14:58   ` Arnd Bergmann
2011-08-30 19:08 ` [patch v2 31/35] Hexagon: kgdb support files Richard Kuo
2011-08-31 14:58   ` Arnd Bergmann
2011-08-30 19:08 ` [patch v2 32/35] Hexagon: Comet platform support Richard Kuo
2011-08-31 15:00   ` Arnd Bergmann
2011-08-30 19:08 ` [patch v2 33/35] Hexagon: Add configuration and makefiles for the Hexagon architecture Richard Kuo
2011-08-31 14:59   ` Arnd Bergmann
2011-08-30 19:08 ` [patch v2 34/35] Hexagon: Add basic stacktrace functionality for " Richard Kuo
2011-08-31 14:59   ` Arnd Bergmann
2011-08-30 19:08 ` [patch v2 35/35] Hexagon: Add self to MAINTAINERS Richard Kuo
2011-08-31 14:59   ` Arnd Bergmann
2011-08-30 20:18 ` [patch v2 00/35] Hexagon: Add support for Qualcomm Hexagon architecture Pekka Enberg
2011-08-30 20:18   ` Pekka Enberg
2011-08-30 20:48   ` Linas Vepstas (Code Aurora)
2011-08-30 20:48     ` Linas Vepstas (Code Aurora)
2011-08-31 15:08 ` Arnd Bergmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201108311647.42017.arnd@arndb.de \
    --to=arnd@arndb.de \
    --cc=linas@codeaurora.org \
    --cc=linux-hexagon@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rkuo@codeaurora.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.