All of lore.kernel.org
 help / color / mirror / Atom feed
From: marek.vasut@gmail.com (Marek Vasut)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 02/17] ARM: pxa: Access SMEMC via virtual addresses
Date: Wed, 3 Nov 2010 16:30:03 +0100	[thread overview]
Message-ID: <201011031630.03658.marek.vasut@gmail.com> (raw)
In-Reply-To: <AANLkTimdrc1XjnTbq8nW+0yov00YyhpJnMG9j57f4uZk@mail.gmail.com>

On Wednesday 03 November 2010 15:37:14 Eric Miao wrote:
> On Wed, Nov 3, 2010 at 7:51 AM, Marek Vasut <marek.vasut@gmail.com> wrote:
> > This is important because on PXA3xx, the physical mapping of SMEMC
> > registers differs from the one on PXA2xx. In order to get PCMCIA working
> > on both PXA2xx and PXA320, the PCMCIA driver was adjusted accordingly as
> > well.
> > 
> > Also, various places in the kernel had to be patched to use
> > __raw_read/__raw_write.
> > 
> > Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
> > Acked-by: Haojian Zhuang <haojian.zhuang@gmail.com>
> > ---
> >  arch/arm/mach-pxa/cm-x2xx.c                  |   13 +++--
> >  arch/arm/mach-pxa/cpufreq-pxa2xx.c           |   10 ++--
> >  arch/arm/mach-pxa/csb726.c                   |    7 ++-
> >  arch/arm/mach-pxa/generic.c                  |    1 +
> >  arch/arm/mach-pxa/h5000.c                    |    9 ++--
> >  arch/arm/mach-pxa/include/mach/pxa-smemc.h   |   74
> > ++++++++++++++++++++++++++ arch/arm/mach-pxa/include/mach/pxa2xx-regs.h
> > |   55 ------------------- arch/arm/mach-pxa/lpd270.c                  
> > |    3 +-
> >  arch/arm/mach-pxa/lubbock.c                  |    3 +-
> >  arch/arm/mach-pxa/mainstone.c                |    5 +-
> >  arch/arm/mach-pxa/pxa25x.c                   |    5 +-
> >  arch/arm/mach-pxa/pxa27x.c                   |   10 ++--
> >  arch/arm/mach-pxa/pxa3xx.c                   |    5 +-
> >  arch/arm/mach-pxa/sleep.S                    |    2 +-
> >  arch/arm/mach-pxa/smemc.c                    |   51 ++++++------------
> >  arch/arm/mach-pxa/spitz.c                    |    5 +-
> >  arch/arm/mach-pxa/stargate2.c                |    3 +-
> >  arch/arm/mach-pxa/tosa.c                     |    7 ++-
> >  arch/arm/mach-pxa/trizeps4.c                 |    3 +-
> >  arch/arm/mach-pxa/xcep.c                     |    5 +-
> >  arch/arm/mach-pxa/zeus.c                     |    5 +-
> >  drivers/pcmcia/pxa2xx_base.c                 |   65
> > +++++++++++++++------- 22 files changed, 196 insertions(+), 150
> > deletions(-)
> >  create mode 100644 arch/arm/mach-pxa/include/mach/pxa-smemc.h
> > 

SNIP

> > diff --git a/arch/arm/mach-pxa/zeus.c b/arch/arm/mach-pxa/zeus.c
> > index 0909df2..2f21144 100644
> > --- a/arch/arm/mach-pxa/zeus.c
> > +++ b/arch/arm/mach-pxa/zeus.c
> > @@ -47,6 +47,7 @@
> >  #include <mach/audio.h>
> >  #include <mach/arcom-pcmcia.h>
> >  #include <mach/zeus.h>
> > +#include <mach/pxa-smemc.h>
> > 
> >  #include "generic.h"
> > 
> > @@ -828,8 +829,8 @@ static void __init zeus_init(void)
> >        pr_info("Zeus CPLD V%dI%d\n", (system_rev & 0xf0) >> 4,
> > (system_rev & 0x0f));
> > 
> >        /* Fix timings for dm9000s (CS1/CS2)*/
> > -       MSC0 = (MSC0 & 0xffff) | (dm9000_msc << 16);
> > -       MSC1 = (MSC1 & 0xffff0000) | dm9000_msc;
> > +       __raw_writel((MSC0 & 0xffff) | (dm9000_msc << 16), MSC0);
> > +       __raw_writel((MSC1 & 0xffff0000) | dm9000_msc, MSC1);
> 
> This isn't correct.

I don't see the difference (well, besides that this should be adjusted by 
bootloader).

> 
> >        pm_power_off = zeus_power_off;
> >        zeus_setup_apm();
> > diff --git a/drivers/pcmcia/pxa2xx_base.c b/drivers/pcmcia/pxa2xx_base.c
> > index ae07b4d..65a8b6f 100644
> > --- a/drivers/pcmcia/pxa2xx_base.c
> > +++ b/drivers/pcmcia/pxa2xx_base.c
> > @@ -26,6 +26,7 @@
> >  #include <linux/platform_device.h>
> > 
> >  #include <mach/hardware.h>
> > +#include <mach/pxa-smemc.h>
> >  #include <asm/io.h>
> >  #include <asm/irq.h>
> >  #include <asm/system.h>
> > @@ -116,37 +117,49 @@ static inline u_int pxa2xx_pcmcia_cmd_time(u_int
> > mem_clk_10khz,
> > 
> >  static int pxa2xx_pcmcia_set_mcmem( int sock, int speed, int clock )
> >  {
> > -       MCMEM(sock) = ((pxa2xx_mcxx_setup(speed, clock)
> > +       uint32_t val;
> > +
> > +       val = ((pxa2xx_mcxx_setup(speed, clock)
> >                & MCXX_SETUP_MASK) << MCXX_SETUP_SHIFT)
> >                | ((pxa2xx_mcxx_asst(speed, clock)
> >                & MCXX_ASST_MASK) << MCXX_ASST_SHIFT)
> >                | ((pxa2xx_mcxx_hold(speed, clock)
> >                & MCXX_HOLD_MASK) << MCXX_HOLD_SHIFT);
> > 
> > +       __raw_writel(val, MCMEM(sock));
> > +
> >        return 0;
> >  }
> > 
> >  static int pxa2xx_pcmcia_set_mcio( int sock, int speed, int clock )
> >  {
> > -       MCIO(sock) = ((pxa2xx_mcxx_setup(speed, clock)
> > +       uint32_t val;
> > +
> > +       val = ((pxa2xx_mcxx_setup(speed, clock)
> >                & MCXX_SETUP_MASK) << MCXX_SETUP_SHIFT)
> >                | ((pxa2xx_mcxx_asst(speed, clock)
> >                & MCXX_ASST_MASK) << MCXX_ASST_SHIFT)
> >                | ((pxa2xx_mcxx_hold(speed, clock)
> >                & MCXX_HOLD_MASK) << MCXX_HOLD_SHIFT);
> > 
> > +       __raw_writel(val, MCIO(sock));
> > +
> >        return 0;
> >  }
> > 
> >  static int pxa2xx_pcmcia_set_mcatt( int sock, int speed, int clock )
> >  {
> > -       MCATT(sock) = ((pxa2xx_mcxx_setup(speed, clock)
> > +       uint32_t val;
> > +
> > +       val = ((pxa2xx_mcxx_setup(speed, clock)
> >                & MCXX_SETUP_MASK) << MCXX_SETUP_SHIFT)
> >                | ((pxa2xx_mcxx_asst(speed, clock)
> >                & MCXX_ASST_MASK) << MCXX_ASST_SHIFT)
> >                | ((pxa2xx_mcxx_hold(speed, clock)
> >                & MCXX_HOLD_MASK) << MCXX_HOLD_SHIFT);
> > 
> > +       __raw_writel(val, MCATT(sock));
> > +
> >        return 0;
> >  }
> > 
> > @@ -205,19 +218,18 @@ pxa2xx_pcmcia_frequency_change(struct
> > soc_pcmcia_socket *skt, static void pxa2xx_configure_sockets(struct
> > device *dev)
> >  {
> >        struct pcmcia_low_level *ops = dev->platform_data;
> > -
> >        /*
> >         * We have at least one socket, so set MECR:CIT
> >         * (Card Is There)
> >         */
> > -       MECR |= MECR_CIT;
> > +       uint32_t mecr = MECR_CIT;
> > 
> >        /* Set MECR:NOS (Number Of Sockets) */
> >        if ((ops->first + ops->nr) > 1 ||
> >            machine_is_viper() || machine_is_arcom_zeus())
> > -               MECR |= MECR_NOS;
> > -       else
> > -               MECR &= ~MECR_NOS;
> > +               mecr |= MECR_NOS;
> > +
> > +       __raw_writel(mecr, MECR);
> 
> This looks to be a bit inconsistent with the original code?
> 
> >  }
> > 
> >  static const char *skt_names[] = {
> > @@ -272,14 +284,24 @@ static int pxa2xx_drv_pcmcia_probe(struct
> > platform_device *dev) struct soc_pcmcia_socket *skt;
> > 
> >        ops = (struct pcmcia_low_level *)dev->dev.platform_data;
> > -       if (!ops)
> > -               return -ENODEV;
> > +       if (!ops) {
> > +               ret = -ENODEV;
> > +               goto err0;
> > +       }
> > +
> > +       if (cpu_is_pxa320() && ops->nr > 1) {
> > +               dev_err(&dev->dev, "pxa320 supports only one pcmcia
> > slot"); +               ret = -EINVAL;
> > +               goto err0;
> > +       }
> 
> This change doesn't look to be part of this patch?
> 
> >        pxa2xx_drv_pcmcia_ops(ops);
> > 
> >        sinfo = kzalloc(SKT_DEV_INFO_SIZE(ops->nr), GFP_KERNEL);
> > -       if (!sinfo)
> > -               return -ENOMEM;
> > +       if (!sinfo) {
> > +               ret = -ENOMEM;
> > +               goto err0;
> > +       }
> > 
> >        sinfo->nskt = ops->nr;
> > 
> > @@ -295,18 +317,19 @@ static int pxa2xx_drv_pcmcia_probe(struct
> > platform_device *dev)
> > 
> >                ret = pxa2xx_drv_pcmcia_add_one(skt);
> >                if (ret)
> > -                       break;
> > +                       goto err1;
> >        }
> > 
> > -       if (ret) {
> > -               while (--i >= 0)
> > -                       soc_pcmcia_remove_one(&sinfo->skt[i]);
> > -               kfree(sinfo);
> > -       } else {
> > -               pxa2xx_configure_sockets(&dev->dev);
> > -               dev_set_drvdata(&dev->dev, sinfo);
> > -       }
> > +       pxa2xx_configure_sockets(&dev->dev);
> > +       dev_set_drvdata(&dev->dev, sinfo);
> > 
> > +       return 0;
> > +
> > +err1:
> > +       while (--i >= 0)
> > +               soc_pcmcia_remove_one(&sinfo->skt[i]);
> > +       kfree(sinfo);
> > +err0:
> >        return ret;
> >  }
> > 
> > --
> > 1.7.2.3

Splited into two patches. Thanks

Cheers

  reply	other threads:[~2010-11-03 15:30 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-02 23:51 [PATCH 01/17] ARM: pxa: Fix missing includes Marek Vasut
2010-11-02 23:51 ` [PATCH 02/17] ARM: pxa: Access SMEMC via virtual addresses Marek Vasut
2010-11-03 14:37   ` Eric Miao
2010-11-03 15:30     ` Marek Vasut [this message]
2010-11-03 16:40       ` Russell King - ARM Linux
2010-11-03 16:48         ` Marek Vasut
2010-11-03 17:30       ` Eric Miao
2010-11-02 23:51 ` [PATCH 03/17] ARM: pxa: Toradex Colibri PXA270 CF support Marek Vasut
2010-11-03 14:44   ` Eric Miao
2010-11-02 23:51 ` [PATCH 04/17] ARM: pxa: Push Colibri evalboard MFP into module files Marek Vasut
2010-11-03 14:47   ` Eric Miao
2010-11-02 23:51 ` [PATCH 05/17] ARM: pxa: Add M41T00 RTC support into Colibri evalboard Marek Vasut
2010-11-02 23:51 ` [PATCH 06/17] ARM: pxa: Rename " Marek Vasut
2010-11-03 14:53   ` Eric Miao
2010-11-02 23:51 ` [PATCH 07/17] ARM: pxa: Colibri PXA320 PCMCIA driver Marek Vasut
2010-11-02 23:51 ` [PATCH 08/17] ARM: pxa: Modularize Palm Tungsten|C Marek Vasut
2010-11-02 23:51 ` [PATCH 09/17] UCB1400: Pass ucb1400-gpio data through ac97 bus Marek Vasut
2010-12-01  2:51   ` Eric Miao
2010-12-01  9:38     ` Samuel Ortiz
2010-11-02 23:51 ` [PATCH 10/17] ARM: pxa: Correct touch IRQ passing to UCB1400 on vpac270 Marek Vasut
2010-12-14 14:07   ` Eric Miao
2010-11-02 23:51 ` [PATCH 11/17] ARM: pxa: Pass GPIO offset to ucb1400-gpio on PalmTC Marek Vasut
2010-11-02 23:51 ` [PATCH 12/17] ARM: pxa: Add gpio-leds and vibrator support to PalmTC Marek Vasut
2010-11-02 23:51 ` [PATCH 13/17] ARM: pxa: Fix pxa2xx-flash section mismatch Marek Vasut
2010-11-02 23:51 ` [PATCH 14/17] ARM: pxa: Fix number of IRQs on Balloon3 Marek Vasut
2010-11-02 23:51 ` [PATCH 15/17] ARM: pxa: Update Balloon3 for new FPGA firmware Marek Vasut
2010-11-02 23:51 ` [PATCH 16/17] SND: Tosa: Fix pointer to codec location Marek Vasut
2010-11-02 23:51 ` [PATCH 17/17] ARM: pxa/colibri: setup pins for USB host port 3 Marek Vasut
2010-11-03 13:33 ` [PATCH 01/17] ARM: pxa: Fix missing includes Eric Miao

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=201011031630.03658.marek.vasut@gmail.com \
    --to=marek.vasut@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.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.