[Error] cs: warning: no high memory space available!
Hi, After "pccardctl" eject and "pccardctl insert", I get the message "cs: warning: no high memory space available!" in the PCMCIA patches(brodo/pcmcia-2.6.git). >pcmcia_socket pcmcia_socket0: parse_uevents: events 0002 >pcmcia_socket pcmcia_socket0: insert >pcmcia_socket pcmcia_socket0: setup >pcmcia_socket pcmcia_socket0: reset >pcmcia_socket pcmcia_socket0: pccard: PCMCIA card inserted into slot 0 >pcmcia_socket pcmcia_socket0: insert done >pcmcia_socket pcmcia_socket0: send_event(event 4, pri 0, callback 0xf88fbbbc) >pcmcia_socket pcmcia_socket0: ds_event(0x04, 0, 0xf6b00040) >pcmcia_socket pcmcia_socket0: cs: warning: no high memory space available! ___ Linux PCMCIA reimplementation list http://lists.infradead.org/mailman/listinfo/linux-pcmcia
Re: [RFC v3] PCMCIA locking updates for 2.6.34
Hi, > > eth8: command 0x5800 did not complete! > > eth8: command 0x5800 did not complete! > > eth8: command 0x5800 did not complete! > > eth8: command 0x5800 did not complete! > > eth8: command 0x5800 did not complete! > > Actually, this error happens when the conf->ConfigIndex of the 3com card > is not set up properly... >but that is statically set to "1" in 3c589_cs.c? I'm a bit confused... I set the ConfigIndex = 7 in 3c589_cs.c. 3CXEM556 works now. -link->conf.ConfigIndex = 1; +link->conf.ConfigIndex = 7; Best Regards Komuro ___ Linux PCMCIA reimplementation list http://lists.infradead.org/mailman/listinfo/linux-pcmcia
Re: [RFC v3] PCMCIA locking updates for 2.6.34
Hey, On Sun, Feb 21, 2010 at 05:19:13AM +0900, Komuro wrote: > >> eth0: 3Com 3c589, io 0x300, irq 3, hw_addr 00:00:86:xx:xx:xx > >> 8K FIFO split 5:3 Rx:Tx, auto xcvr > > >Did you modify the hw_addr here, or is it reported wrongly here, compared to > > sorry, I modified the hw_addr, so the hw_addr is same between 2.6.33-rc8 > and the PCMCIA patches. > > > eth8: command 0x5800 did not complete! > > eth8: command 0x5800 did not complete! > > eth8: command 0x5800 did not complete! > > eth8: command 0x5800 did not complete! > > eth8: command 0x5800 did not complete! > > Actually, this error happens when the conf->ConfigIndex of the 3com card > is not set up properly... but that is statically set to "1" in 3c589_cs.c? I'm a bit confused... Best, Dominik ___ Linux PCMCIA reimplementation list http://lists.infradead.org/mailman/listinfo/linux-pcmcia
Re: [RFC v3] PCMCIA locking updates for 2.6.34
Hi, >> eth0: 3Com 3c589, io 0x300, irq 3, hw_addr 00:00:86:xx:xx:xx >> 8K FIFO split 5:3 Rx:Tx, auto xcvr >Did you modify the hw_addr here, or is it reported wrongly here, compared to sorry, I modified the hw_addr, so the hw_addr is same between 2.6.33-rc8 and the PCMCIA patches. > eth8: command 0x5800 did not complete! > eth8: command 0x5800 did not complete! > eth8: command 0x5800 did not complete! > eth8: command 0x5800 did not complete! > eth8: command 0x5800 did not complete! Actually, this error happens when the conf->ConfigIndex of the 3com card is not set up properly... Best Regards Komuro ___ Linux PCMCIA reimplementation list http://lists.infradead.org/mailman/listinfo/linux-pcmcia
Re: [PATCH 0/3] MXC PCMCIA Support
Russell King - ARM Linux wrote: > I do wonder whether, as you have windows, you should be using the soc > support - the soc support is based interfacing hardware which does not > have windows into the generic infrastructure which assumes the presence > of windows. > Hi Russell, Yes I understand what you mean. I asked on -pcmcia about the approach back in June 2009: http://marc.info/?l=linux-pcmcia&m=124805223926065&w=2 but didn't get a reply :( OTOH soc_common provides some other useful stuff like polling thread, common interrupt handler core, common debug etc. Cheers, Martin ___ Linux PCMCIA reimplementation list http://lists.infradead.org/mailman/listinfo/linux-pcmcia
Re: [PATCH 0/3] MXC PCMCIA Support
On Sat, Feb 20, 2010 at 04:32:01PM +0100, Martin Fuzzey wrote: > This patch series adds support for the MXC PCMCIA / CF controller. > > It has been tested on MX21 (with CF card + ide-cs as well as a > broadcom based wificard using b43 driver) > > It has been compile only tested for MX27, MX31 as I don't have > this hardware but the code is based on Freescale's MX31. > > Changes since RFC: >* Split arch specifc changes from driver >* Update to 2.6.33-rc8 [soc-common is now a standalone module] I do wonder whether, as you have windows, you should be using the soc support - the soc support is based interfacing hardware which does not have windows into the generic infrastructure which assumes the presence of windows. ___ Linux PCMCIA reimplementation list http://lists.infradead.org/mailman/listinfo/linux-pcmcia
[PATCH 1/3] PCMCIA: Add soc_common support for banked SoC drivers.
Some SoCs (like freescale MXC) require configuring a device register to set the bank mapped into the memory window. Also allow interrupt flags to be configured (to support shared interrupts). Signed-off-by: Martin Fuzzey --- drivers/pcmcia/soc_common.c | 21 +++-- drivers/pcmcia/soc_common.h |7 +++ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/drivers/pcmcia/soc_common.c b/drivers/pcmcia/soc_common.c index 6f1a86b..feab118 100644 --- a/drivers/pcmcia/soc_common.c +++ b/drivers/pcmcia/soc_common.c @@ -257,7 +257,8 @@ static irqreturn_t soc_common_pcmcia_interrupt(int irq, void *dev) struct soc_pcmcia_socket *skt = dev; debug(skt, 3, "servicing IRQ %d\n", irq); - + if (skt->ops->ack_interrupt) + skt->ops->ack_interrupt(skt); soc_common_check_status(skt); return IRQ_HANDLED; @@ -335,6 +336,7 @@ soc_common_pcmcia_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *m { struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock); unsigned short speed = map->speed; + int ret = 0; debug(skt, 2, "map %u speed %u start 0x%08llx stop 0x%08llx\n", map->map, map->speed, (unsigned long long)map->start, @@ -368,11 +370,14 @@ soc_common_pcmcia_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *m if (map->stop == 1) map->stop = PAGE_SIZE-1; + if (skt->ops->set_io_map) + ret = skt->ops->set_io_map(skt, map); + map->stop -= map->start; map->stop += skt->socket.io_offset; map->start = skt->socket.io_offset; - return 0; + return ret; } @@ -390,6 +395,7 @@ soc_common_pcmcia_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map struct soc_pcmcia_socket *skt = to_soc_pcmcia_socket(sock); struct resource *res; unsigned short speed = map->speed; + int ret = 0; debug(skt, 2, "map %u speed %u card_start %08x\n", map->map, map->speed, map->card_start); @@ -424,10 +430,12 @@ soc_common_pcmcia_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map } skt->ops->set_timing(skt); + if (skt->ops->set_mem_map) + ret = skt->ops->set_mem_map(skt, map); + else + map->static_start = res->start + map->card_start; - map->static_start = res->start + map->card_start; - - return 0; + return ret; } struct bittbl { @@ -521,7 +529,8 @@ int soc_pcmcia_request_irqs(struct soc_pcmcia_socket *skt, if (irqs[i].sock != skt->nr) continue; res = request_irq(irqs[i].irq, soc_common_pcmcia_interrupt, - IRQF_DISABLED, irqs[i].str, skt); + IRQF_DISABLED | irqs[i].flags, + irqs[i].str, skt); if (res) break; set_irq_type(irqs[i].irq, IRQ_TYPE_NONE); diff --git a/drivers/pcmcia/soc_common.h b/drivers/pcmcia/soc_common.h index e40824c..f0c7a15 100644 --- a/drivers/pcmcia/soc_common.h +++ b/drivers/pcmcia/soc_common.h @@ -111,6 +111,12 @@ struct pcmcia_low_level { */ int (*frequency_change)(struct soc_pcmcia_socket *, unsigned long, struct cpufreq_freqs *); #endif + void (*ack_interrupt)(struct soc_pcmcia_socket *); + + /* Hardware specific mapping */ + int (*set_mem_map)(struct soc_pcmcia_socket *, struct pccard_mem_map *); + int (*set_io_map)(struct soc_pcmcia_socket *, struct pccard_io_map *map); + }; @@ -118,6 +124,7 @@ struct pcmcia_irqs { int sock; int irq; const char *str; + unsigned long flags; }; struct soc_pcmcia_timing { ___ Linux PCMCIA reimplementation list http://lists.infradead.org/mailman/listinfo/linux-pcmcia
[PATCH 3/3] PCMCIA: Add support for freescale MX2/3 SoCs
Signed-off-by: Martin Fuzzey --- drivers/pcmcia/Kconfig |7 drivers/pcmcia/Makefile |1 drivers/pcmcia/mxc_pcmcia.c | 710 +++ 3 files changed, 718 insertions(+), 0 deletions(-) create mode 100644 drivers/pcmcia/mxc_pcmcia.c diff --git a/drivers/pcmcia/Kconfig b/drivers/pcmcia/Kconfig index 9f3adbd..373a898 100644 --- a/drivers/pcmcia/Kconfig +++ b/drivers/pcmcia/Kconfig @@ -298,4 +298,11 @@ config PCCARD_NONSTATIC config PCCARD_IODYN bool +config PCMCIA_MXC + tristate "Freescale MXC PCMCIA Driver" + depends on PCMCIA && ARCH_MXC + select PCMCIA_SOC_COMMON + help + Say Y here to support the integrated PCMCIA in the freescale MXC SoCs. + endif # PCCARD diff --git a/drivers/pcmcia/Makefile b/drivers/pcmcia/Makefile index 83ff802..3791193 100644 --- a/drivers/pcmcia/Makefile +++ b/drivers/pcmcia/Makefile @@ -35,6 +35,7 @@ obj-$(CONFIG_OMAP_CF) += omap_cf.o obj-$(CONFIG_BFIN_CFPCMCIA)+= bfin_cf_pcmcia.o obj-$(CONFIG_AT91_CF) += at91_cf.o obj-$(CONFIG_ELECTRA_CF) += electra_cf.o +obj-$(CONFIG_PCMCIA_MXC) += mxc_pcmcia.o au1x00_ss-y+= au1000_generic.o au1x00_ss-$(CONFIG_MIPS_PB1000)+= au1000_pb1x00.o diff --git a/drivers/pcmcia/mxc_pcmcia.c b/drivers/pcmcia/mxc_pcmcia.c new file mode 100644 index 000..af05a2d --- /dev/null +++ b/drivers/pcmcia/mxc_pcmcia.c @@ -0,0 +1,710 @@ +/* + * drivers/pcmcia/mxc_pcmica.c + * + * Driver for the PCMCIA control functionality of i.MX SoC family + * + * Copyright (C) 1999 John G. Dorsey. All Rights Reserved. + * Copyright (C) 2005-2007 Freescale Semiconductor, Inc. All Rights Reserved. + * Copyright (C) 2009 Martin Fuzzey + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include "soc_common.h" + + +#define PCMCIA_WINDOWS 5 /* # windows supported by hardware */ +#define ATTRIBUTE_MEMORY_WINDOW0 +#define COMMON_MEMORY_WINDOW 1 +#define IO_WINDOW 2 + +/* Registers */ +#define PCMCIA_PIPR0x00/* Input pins register */ +#define PIPR_POWERON (1 << 8) /* card indicates "power on" */ +#define PIPR_RDY (1 << 7) /* card is ready */ +#define PIPR_BVD2 (1 << 6) /* battery voltage 2/SPKR in */ +#define PIPR_BVD1 (1 << 5) /* battery voltage 1/STSCHG */ +#define PIPR_CD(3 << 3) /* card detect 1 and 2 */ +#define PIPR_WP(1 << 2) /* write protect switch enabled */ +#define PIPR_VS(3 << 0) /* voltage sense bits */ +#define PIPR_VS_5V (1 << 0) /* 5v */ + +#define PCMCIA_PSCR0x04/* Status Changed Register */ +#define PSCR_POWC (1 << 11) /* power on changed */ +#define PSCR_RDYR (1 << 10) /* ready rising changed */ +#define PSCR_RDYF (1 << 9) /* ready falling changed */ +#define PSCR_RDYH (1 << 8) /* ready state */ +#define PSCR_RDYL (1 << 7) /* inverted ready state */ +#define PSCR_BVDC2 (1 << 6) /* battery voltage 2 changed */ +#define PSCR_BVDC1 (1 << 5) /* battery voltage 1 changed */ +#define PSCR_CDC2 (1 << 4) /* card detect 2 changed */ +#define PSCR_CDC1 (1 << 3) /* card detect 1 changed */ +#define PSCR_WPC (1 << 2) /* write protect changed */ +#define PSCR_VSC2 (1 << 1) /* voltage sense 2 changed */ +#define PSCR_VSC1 (1 << 0) /* voltage sense 1 changed */ + +#define PCMCIA_PER 0x08/* Interrupt Enable Register */ +#define PER_ERRINTEN (1 << 12) /* error interrupt enable */ +#define PER_POWERONEN (1 << 11) /* power on interrupt enable */ +#define PER_RDYRE (1 << 10) /* RDY/nIREQ pin rising edge */ +#define PER_RDYFE (1 << 9) /* RDY/nIREQ pin falling edge */ +#define PER_RDYHE (1 << 8) /* RDY/nIREQ pin high */ +#define PER_RDYLE (1 << 7) /* RDY/nIREQ pin low */ +#define PER_BVDE2 (1 << 6) /* battery voltage 2/SPKR in */ +#define PER_BVDE1 (1 << 5) /* battery voltage 1/STSCHG */ +#define PER_CDE2 (1 << 4) /* card detect 2 */ +#define PER_CDE1 (1 << 3) /* card detect 1 */ +#define PER_WPE(1 << 2) /* write protect */ +#define PER_VSE2 (1 << 1) /* voltage sense 2 */ +#define PER_VSE1 (1 << 0) /* voltage sense 1 */ + +/* win: 0-4 */ +#define PCMCIA_PBR(win)(0x0C + 4 * (win)) /* Base Register x */ + +#define PCMCIA_POR(win)(0x28 + 4 * (win)) /* Option Register x */ +#d
[PATCH 2/3] MXC: add pcmcia support
Signed-off-by: Martin Fuzzey --- arch/arm/mach-mx2/clock_imx21.c |1 + arch/arm/mach-mx2/clock_imx27.c |1 + arch/arm/mach-mx2/devices.c | 21 + arch/arm/mach-mx2/devices.h |2 ++ arch/arm/mach-mx3/clock.c |1 + 5 files changed, 26 insertions(+), 0 deletions(-) diff --git a/arch/arm/mach-mx2/clock_imx21.c b/arch/arm/mach-mx2/clock_imx21.c index 9f24748..16e5ce6 100644 --- a/arch/arm/mach-mx2/clock_imx21.c +++ b/arch/arm/mach-mx2/clock_imx21.c @@ -960,6 +960,7 @@ static struct clk_lookup lookups[] = { _REGISTER_CLOCK("mxc-keypad", NULL, kpp_clk) _REGISTER_CLOCK(NULL, "owire", owire_clk) _REGISTER_CLOCK(NULL, "rtc", rtc_clk) + _REGISTER_CLOCK("mxc-pcmcia", NULL, hclk_clk) }; /* diff --git a/arch/arm/mach-mx2/clock_imx27.c b/arch/arm/mach-mx2/clock_imx27.c index 514688e..07e234c 100644 --- a/arch/arm/mach-mx2/clock_imx27.c +++ b/arch/arm/mach-mx2/clock_imx27.c @@ -674,6 +674,7 @@ static struct clk_lookup lookups[] = { _REGISTER_CLOCK("mxc_w1.0", NULL, owire_clk) _REGISTER_CLOCK(NULL, "rtc", rtc_clk) _REGISTER_CLOCK(NULL, "scc", scc_clk) + _REGISTER_CLOCK("mxc-pcmcia", NULL, ahb_clk) }; /* Adjust the clock path for TO2 and later */ diff --git a/arch/arm/mach-mx2/devices.c b/arch/arm/mach-mx2/devices.c index 3d398ce..fa0646a 100644 --- a/arch/arm/mach-mx2/devices.c +++ b/arch/arm/mach-mx2/devices.c @@ -642,3 +642,24 @@ int __init mxc_register_gpios(void) { return mxc_gpio_init(imx_gpio_ports, ARRAY_SIZE(imx_gpio_ports)); } + +static struct resource mxc_resource_pcmcia[] = { + { + .start = PCMCIA_CTL_BASE_ADDR, + .end= PCMCIA_CTL_BASE_ADDR + 0x67, + .flags = IORESOURCE_MEM, + }, + { + .start = MXC_INT_PCMCIA, + .end= MXC_INT_PCMCIA, + .flags = IORESOURCE_IRQ, + }, +}; + +struct platform_device mxc_device_pcmcia = { + .name = "mxc-pcmcia", + .id = -1, + .resource = mxc_resource_pcmcia, + .num_resources = ARRAY_SIZE(mxc_resource_pcmcia), +}; + diff --git a/arch/arm/mach-mx2/devices.h b/arch/arm/mach-mx2/devices.h index 97306aa..c1027bc 100644 --- a/arch/arm/mach-mx2/devices.h +++ b/arch/arm/mach-mx2/devices.h @@ -28,3 +28,5 @@ extern struct platform_device mxc_spi_device1; extern struct platform_device mxc_spi_device2; extern struct platform_device imx_ssi_device0; extern struct platform_device imx_ssi_device1; +extern struct platform_device mxc_device_pcmcia; + diff --git a/arch/arm/mach-mx3/clock.c b/arch/arm/mach-mx3/clock.c index 7ec71d0..7158210 100644 --- a/arch/arm/mach-mx3/clock.c +++ b/arch/arm/mach-mx3/clock.c @@ -573,6 +573,7 @@ static struct clk_lookup lookups[] = { _REGISTER_CLOCK(NULL, "mpeg4", mpeg4_clk) _REGISTER_CLOCK(NULL, "mbx", mbx_clk) _REGISTER_CLOCK("mxc_rtc", NULL, ckil_clk) + _REGISTER_CLOCK("mxc-pcmcia", NULL, ahb_clk) }; int __init mx31_clocks_init(unsigned long fref) ___ Linux PCMCIA reimplementation list http://lists.infradead.org/mailman/listinfo/linux-pcmcia
[PATCH 0/3] MXC PCMCIA Support
This patch series adds support for the MXC PCMCIA / CF controller. It has been tested on MX21 (with CF card + ide-cs as well as a broadcom based wificard using b43 driver) It has been compile only tested for MX27, MX31 as I don't have this hardware but the code is based on Freescale's MX31. Changes since RFC: * Split arch specifc changes from driver * Update to 2.6.33-rc8 [soc-common is now a standalone module] ___ Linux PCMCIA reimplementation list http://lists.infradead.org/mailman/listinfo/linux-pcmcia
Re: [RFC v3] PCMCIA locking updates for 2.6.34
Hey, thanks for testing! On Sat, Feb 20, 2010 at 08:42:28PM +0900, Komuro wrote: > pcmcia 0.0: trying to load CIS file cis/3CXEM556.cis > pcmcia 0.0: firmware: requesting cis/3CXEM556.cis > pcmcia_socket pcmcia_socket0: Using replacement CIS > pcmcia_socket pcmcia_socket0: parse_uevents: events 0010 > pcmcia 0.0: matched to 3c589_cs > 3c589_cs 0.0: trying to bind to 3c589_cs > pcmcia_socket pcmcia_socket0: trying to allocate resource 1 > pcmcia_socket pcmcia_socket0: allocating resources succeeded: 0 > pcmcia_socket pcmcia_socket0: pcmcia_write_cis_mem(1, 0x400, 1) > adding device to 0, function 1 > pcmcia 0.1: devname is pcmcia0.1 > pcmcia 0.1: creating config_t > pcmcia 0.1: pcmcia: registering new device pcmcia0.1 > pcmcia_socket pcmcia_socket0: parse_uevents: events 0010 > pcmcia_socket pcmcia_socket0: pcmcia_write_cis_mem(1, 0x401, 1) > pcmcia_socket pcmcia_socket0: pcmcia_write_cis_mem(1, 0x405, 1) > pcmcia_socket pcmcia_socket0: pcmcia_write_cis_mem(1, 0x406, 1) > eth0: 3Com 3c589, io 0x300, irq 3, hw_addr 00:00:86:xx:xx:xx > 8K FIFO split 5:3 Rx:Tx, auto xcvr Did you modify the hw_addr here, or is it reported wrongly here, compared to -rc8? If it is indeed different, that'd be a good starting point to hunt the regression down. Other than that, I see nothing suspicious at all... Well, maybe except the patch below (which would expose some bad CIS behaviour). Best, Dominik diff --git a/drivers/pcmcia/cistpl.c b/drivers/pcmcia/cistpl.c index 2f3622d..9e724e0 100644 --- a/drivers/pcmcia/cistpl.c +++ b/drivers/pcmcia/cistpl.c @@ -298,7 +298,7 @@ static int read_cis_cache(struct pcmcia_socket *s, int attr, u_int addr, memcpy(ptr, s->fake_cis+addr, len); else { memset(ptr, 0xff, len); - ret = -EINVAL; + ret = 0; } mutex_unlock(&s->ops_mutex); return ret; ___ Linux PCMCIA reimplementation list http://lists.infradead.org/mailman/listinfo/linux-pcmcia
Re: [RFC v3] PCMCIA locking updates for 2.6.34
Hey, On Sat, Feb 20, 2010 at 01:41:59PM +0900, Komuro wrote: > (1) it seems the 3c562 multi_function card works now. That's good news -- thanks for testing! > (2) but another 3com card 3CXEM556 (multi_function + cis override) does not > work. > This card works fine with kernel 2.6.33-rc8. Oh. That's not so good... Does /proc/iomem and/or /proc/ioports change between 2.6.33-rc8 and the PCMCIA patches, both with this card inserted? Also is that at boot or sometime later? If it also happens post-bootr, could you try out the following? # mount debugfs mount none -t debugfs /sys/kernel/debug/ # enable debug echo "module pcmcia +p" > /sys/kernel/debug/dynamic_debug/control echo "module pcmcia_core +p" > /sys/kernel/debug/dynamic_debug/control echo "module yenta_socket +p" > /sys/kernel/debug/dynamic_debug/control # insert the card dmesg -s200 # and send the output to me, please (If this does not work, please apply the "debug" patch and send me the dmesg). Many thanks! Dominik ___ Linux PCMCIA reimplementation list http://lists.infradead.org/mailman/listinfo/linux-pcmcia