* [GIT PULL] arm-soc fixes for 3.7-rc3
From: Arnd Bergmann @ 2012-10-27 16:01 UTC (permalink / raw)
To: linux-arm-kernel
The following changes since commit 6f0c0580b70c89094b3422ba81118c7b959c7556:
Linux 3.7-rc2 (2012-10-20 12:11:32 -0700)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc.git tags/fixes-for-3.7
for you to fetch changes up to 943bb48755a7f70ee36e029904ed8b679bb1da58:
Revert "ARM i.MX25: Fix PWM per clock lookups" (2012-10-27 17:46:56 +0200)
----------------------------------------------------------------
arm-soc: fixes for v3.7-rc3
Bug fixes for a number of ARM platforms, mostly OMAP, imx and at91.
These come a little later than I had hoped but unfortunately we
had a few of these patches cause regressions themselves and had to
work out how to deal with those in the meantime.
----------------------------------------------------------------
Arnd Bergmann (9):
Merge tag 'at91-fixes' of git://github.com/at91linux/linux-at91 into fixes
Merge branch 'for-rcs-3.7' of git://git.linaro.org/people/ljones/linux-3.0-ux500 into fixes
Merge tag 'imx-fixes' of git://git.pengutronix.de/git/imx/linux-2.6 into fixes
Merge tag 'omap-for-v3.7-rc2/fixes-signed' of git://git.kernel.org/.../tmlind/linux-omap into fixes
Merge branch 'v3.7-samsung-fixes-2' of git://git.kernel.org/.../kgene/linux-samsung into fixes
Merge branch 'fixes' of git://git.kernel.org/.../horms/renesas into fixes
ARM: at91: fix at91x40 build
ARM: versatile: fix versatile_defconfig
Revert "ARM i.MX25: Fix PWM per clock lookups"
Bo Shen (2):
ARM: at91/i2c: change id to let i2c-gpio work
ARM: at91/i2c: change id to let i2c-at91 work
Fabio Estevam (3):
ARM: imx_v6_v7_defconfig: Enable CONFIG_GPIO_MC9S08DZ60
ARM: imx: clk-imx27: Fix divider width field
ARM: mxc: platform-mxc-mmc: Fix register region size
Heiko Stuebner (1):
ARM: SAMSUNG: Add naming of s3c64xx-spi devices
Huang Shijie (1):
ARM: dts: mxs: add the "clock-names" for gpmi-nand
Ivan Shugov (1):
ARM: at91: at91sam9g10: fix SOC type detection
Jean-Christophe PLAGNIOL-VILLARD (1):
ARM: at91: drop duplicated config SOC_AT91SAM9 entry
Josh Wu (1):
ARM: at91/tc: fix typo in the DT document
Kevin Hilman (2):
ARM: OMAP2: UART: fix console UART mismatched runtime PM status
ARM: OMAP3: Beagle: fix OPP customization and initcall ordering
Kuninori Morimoto (1):
ARM: shmobile: r8a7779: I/O address abuse cleanup
Lee Jones (3):
ARM: ux500: Fix build error relating to IRQCHIP_SKIP_SET_WAKE
ARM: ux500: Specify AMBA Primecell IDs for Nomadik I2C in DT
ARM: ux500: Correct SDI5 address and add some format changes
Marek Belisko (1):
ARM: at91/dts: at91sam9g20ek_common: Fix typos in buttons labels.
Nicolas Ferre (2):
ARM: at91: fix external interrupts in non-DT case
ARM: at91: fix external interrupt specification in board code
Paul Walmsley (1):
ARM: OMAP3: PM: apply part of the erratum i582 workaround
Pavel Machek (1):
ARM: socfpga: Fix socfpga compilation with early_printk() enabled
Peter Ujfalusi (1):
ARM/dts: omap3: Fix mcbsp2/3 hwmods to be able to probe the drivers for audio
Sascha Hauer (3):
ARM i.MX25: Fix lcdc_ipg_per parent clock
ARM i.MX25 clk: Fix nfc_ipg_per parent
ARM i.MX25: Fix PWM per clock lookups
Stephen Boyd (1):
MAINTAINERS: Add arm-soc tree entry
Thomas Petazzoni (1):
ARM: mvebu: update defconfig with 3.7 changes
Tomasz Figa (2):
ARM: dts: Split memory into 4 sections for exynos4210-trats
ARM: EXYNOS: Set .smp field of machine descriptor for exynos4-dt
Tony Lindgren (3):
ARM: OMAP2+: Fix location of select PINCTRL
ARM: OMAP3: Fix 3430 legacy mux names for ssi1 signals.
Merge tag 'for_3.7-rc3-fixes-pm' of git://git.kernel.org/.../khilman/linux-omap-pm into omap-for-v3.7-rc2/fixes
Vaibhav Hiremath (1):
ARM: AM33XX: Fix configuration of dmtimer parent clock by dmtimer driverDate:Wed, 17 Oct 2012 13:55:55 -0500
Viresh Kumar (1):
ARM: SPEAr: Remove unused empty files
Wei Yongjun (2):
ARM: imx: fix return value check in imx3_init_l2x0()
ARM: imx: fix the return value check in imx_clk_busy_divider()
.../devicetree/bindings/arm/atmel-at91.txt | 2 +-
MAINTAINERS | 7 +++++
arch/arm/boot/dts/at91sam9g20ek_common.dtsi | 4 +--
arch/arm/boot/dts/dbx5x0.dtsi | 17 ++++++++++-
arch/arm/boot/dts/exynos4210-trats.dts | 6 ++--
arch/arm/boot/dts/imx23.dtsi | 1 +
arch/arm/boot/dts/imx28.dtsi | 1 +
arch/arm/boot/dts/omap3.dtsi | 4 +--
arch/arm/configs/imx_v6_v7_defconfig | 2 ++
arch/arm/configs/mvebu_defconfig | 10 +++++--
arch/arm/configs/versatile_defconfig | 1 +
arch/arm/include/debug/8250_32.S | 27 ++++++++++++++++++
arch/arm/include/debug/picoxcell.S | 18 +-----------
arch/arm/include/debug/socfpga.S | 5 ++++
arch/arm/mach-at91/Kconfig | 10 ++-----
arch/arm/mach-at91/at91rm9200.c | 2 +-
arch/arm/mach-at91/at91rm9200_devices.c | 4 +--
arch/arm/mach-at91/at91sam9260.c | 4 +--
arch/arm/mach-at91/at91sam9260_devices.c | 4 +--
arch/arm/mach-at91/at91sam9261.c | 4 +--
arch/arm/mach-at91/at91sam9261_devices.c | 4 +--
arch/arm/mach-at91/at91sam9263.c | 2 +-
arch/arm/mach-at91/at91sam9263_devices.c | 4 +--
arch/arm/mach-at91/at91sam9rl_devices.c | 4 +--
arch/arm/mach-at91/at91x40.c | 2 +-
arch/arm/mach-at91/board-neocore926.c | 2 +-
arch/arm/mach-at91/board-sam9261ek.c | 2 +-
arch/arm/mach-at91/board-sam9263ek.c | 2 +-
arch/arm/mach-at91/generic.h | 3 +-
arch/arm/mach-at91/irq.c | 9 ++++--
arch/arm/mach-at91/setup.c | 4 +--
arch/arm/mach-exynos/common.c | 5 ++++
arch/arm/mach-exynos/mach-exynos4-dt.c | 1 +
arch/arm/mach-imx/clk-busy.c | 2 +-
arch/arm/mach-imx/clk-imx25.c | 4 +--
arch/arm/mach-imx/clk-imx27.c | 4 +--
arch/arm/mach-imx/mm-imx3.c | 5 ++--
arch/arm/mach-omap2/Kconfig | 1 -
arch/arm/mach-omap2/board-omap3beagle.c | 22 ++++++++------
arch/arm/mach-omap2/clock33xx_data.c | 2 ++
arch/arm/mach-omap2/mux34xx.c | 8 +++---
arch/arm/mach-omap2/pm.h | 1 +
arch/arm/mach-omap2/pm34xx.c | 30 ++++++++++++++++++--
arch/arm/mach-omap2/serial.c | 5 ++++
arch/arm/mach-s3c24xx/s3c2416.c | 2 ++
arch/arm/mach-s3c24xx/s3c2443.c | 4 +++
arch/arm/mach-s5p64x0/common.c | 3 ++
arch/arm/mach-s5pc100/common.c | 3 ++
arch/arm/mach-s5pv210/common.c | 3 ++
arch/arm/mach-shmobile/setup-r8a7779.c | 2 +-
arch/arm/mach-ux500/cpu.c | 1 +
arch/arm/plat-mxc/devices/platform-mxc-mmc.c | 2 +-
arch/arm/plat-omap/Kconfig | 1 +
arch/arm/plat-samsung/include/plat/spi-core.h | 30 ++++++++++++++++++++
54 files changed, 225 insertions(+), 87 deletions(-)
create mode 100644 arch/arm/include/debug/8250_32.S
delete mode 100644 arch/arm/mach-spear13xx/include/mach/spear1310_misc_regs.h
delete mode 100644 arch/arm/mach-spear13xx/include/mach/spear1340_misc_regs.h
create mode 100644 arch/arm/plat-samsung/include/plat/spi-core.h
^ permalink raw reply
* [PATCH 1/4] mfd: ab8500: add devicetree support for fuelgauge
From: Rajanikanth HV @ 2012-10-27 16:00 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <508BF8A8.9090206@gmail.com>
On 27 October 2012 20:37, Francesco Lavra <francescolavra.fl@gmail.com> wrote:
> On 10/25/2012 08:30 AM, Rajanikanth H.V wrote:
>> From: "Rajanikanth H.V" <rajanikanth.hv@stericsson.com>
>> + bat_tech = of_get_property(np_bat_supply,
>> + "stericsson,battery-type", NULL);
>> + if (!bat_tech)
>> + dev_warn(dev, "missing property battery-name/type\n");
>> +
>> + if (strncmp(bat_tech, "LION", 4) == 0) {
>
> What if bat_tech is NULL?
It will be UNKNOWN
^ permalink raw reply
* [PATCH] i2c: omap: ensure writes to dev->buf_len are ordered
From: Paul Walmsley @ 2012-10-27 15:59 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <508BBC59.60504@ti.com>
On Sat, 27 Oct 2012, Santosh Shilimkar wrote:
> Another alternative, which I will recommend to just make use of the
> read*/wrire* instead __raw versions. The barriers are taken care
> already and driver point of view, it is transparent.
Those barriers will disappear if CONFIG_ARM_DMA_MEM_BUFFERABLE is set to
N, so that's probably not the right thing to do in this case. The barrier
here isn't DMA-related, it's needed due to the design of the driver.
In fact the wmb() is probably overkill, since only a compiler reordering
barrier is needed. It can probably just be barrier().
- Paul
^ permalink raw reply
* [PATCH 1/1] net: macb: add pinctrl consumer support
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-27 15:49 UTC (permalink / raw)
To: linux-arm-kernel
If no pinctrl available just report a warning as some architecture may not
need to do anything.
Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
Cc: netdev at vger.kernel.org
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
---
drivers/net/ethernet/cadence/macb.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
index 033064b..e5fdf8a 100644
--- a/drivers/net/ethernet/cadence/macb.c
+++ b/drivers/net/ethernet/cadence/macb.c
@@ -26,6 +26,9 @@
#include <linux/of.h>
#include <linux/of_device.h>
#include <linux/of_net.h>
+#include <linux/of_gpio.h>
+#include <linux/gpio.h>
+#include <linux/pinctrl/consumer.h>
#include "macb.h"
@@ -1306,6 +1309,7 @@ static int __init macb_probe(struct platform_device *pdev)
struct phy_device *phydev;
u32 config;
int err = -ENXIO;
+ struct pinctrl *pinctrl;
regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!regs) {
@@ -1313,6 +1317,15 @@ static int __init macb_probe(struct platform_device *pdev)
goto err_out;
}
+ pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
+ if (IS_ERR(pinctrl)) {
+ err = PTR_ERR(pinctrl);
+ if (err == -EPROBE_DEFER)
+ return err;
+
+ dev_warn(&pdev->dev, "No pinctrl provided\n");
+ }
+
err = -ENOMEM;
dev = alloc_etherdev(sizeof(*bp));
if (!dev)
--
1.7.10.4
^ permalink raw reply related
* [PATCH] dma: ste_dma40: use for_each_set_bit
From: Akinobu Mita @ 2012-10-27 15:49 UTC (permalink / raw)
To: linux-arm-kernel
Replace open-coded loop with for_each_set_bit().
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Cc: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: linux-arm-kernel at lists.infradead.org
Cc: Vinod Koul <vinod.koul@intel.com>
Cc: Dan Williams <djbw@fb.com>
---
drivers/dma/ste_dma40.c | 13 +++----------
1 file changed, 3 insertions(+), 10 deletions(-)
diff --git a/drivers/dma/ste_dma40.c b/drivers/dma/ste_dma40.c
index ae55091..08f5bfe 100644
--- a/drivers/dma/ste_dma40.c
+++ b/drivers/dma/ste_dma40.c
@@ -1487,7 +1487,7 @@ static irqreturn_t d40_handle_interrupt(int irq, void *data)
u32 regs[ARRAY_SIZE(il)];
u32 idx;
u32 row;
- long chan = -1;
+ long chan;
struct d40_chan *d40c;
unsigned long flags;
struct d40_base *base = data;
@@ -1498,15 +1498,8 @@ static irqreturn_t d40_handle_interrupt(int irq, void *data)
for (i = 0; i < ARRAY_SIZE(il); i++)
regs[i] = readl(base->virtbase + il[i].src);
- for (;;) {
-
- chan = find_next_bit((unsigned long *)regs,
- BITS_PER_LONG * ARRAY_SIZE(il), chan + 1);
-
- /* No more set bits found? */
- if (chan == BITS_PER_LONG * ARRAY_SIZE(il))
- break;
-
+ for_each_set_bit(chan, (unsigned long *)regs,
+ BITS_PER_LONG * ARRAY_SIZE(il)) {
row = chan / BITS_PER_LONG;
idx = chan & (BITS_PER_LONG - 1);
--
1.7.11.7
^ permalink raw reply related
* [PATCH] Fix socfpga compilation with early_printk() enabled
From: Arnd Bergmann @ 2012-10-27 15:39 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <20121027115615.GC5912@elf.ucw.cz>
On Saturday 27 October 2012, Pavel Machek wrote:
> > > This fixes early_printk() compilation for
> > > socfpga. (senduart/busyuart/waituart were missing). It does that by
> > > making Picochip code generic.
> > >
> > > Signed-off-by: Pavel Machek <pavel@denx.de>
> > > Acked-by: Dinh Nguyen <dinguyen@altera.com>
> > > Acked-by: Jamie Iles <jamie@jamieiles.com
> >
> > Applied to fixes branch of arm-soc, but please be more explicit about
> > what you want to happen with patches in the future. Ideally we would
> > get pull requests for patches on each platform from only one person,
> > so please coordinate with Dinh Nguyen who that should be.
>
> Dinh is the maintainer, so if we can only send patches from one
> person, it needs to be him. If you'd be willing to take patches from
> second person, that would help us... if not, of course I can send all
> the patches through Dinh.
You can both send patches, we just need to know what to expect. For most
platforms it works best if one person collects the patches from everyone.
If you are sending patches with both Dinh and us as the recipients,
just make it clear who you want to pick up the patch.
> > * When you submit a patch for inclusion, please always take both
> > Olof and me on Cc on the email, since we are doing this work together
> > and take turns, so you might not always know which one will take
> > the patch. We have an alias "arm at kernel.org" that you can also
> > use.
>
> Olof Johansson <olof@lixom.net>? Can do.
>
> But... perhaps you should add an entry into MAINTAINERS file
> explaining all this? arm at kernel.org is not mentioned there, Olof is
> not mentioned as maintaining arm. (And yes, I did check it before
> original patch submission).
We intentionally didn't put our names into the maintainers file because
that would mean getting Cc'd on every patch that should actually go
to one of the sub-maintainers instead.
We are adding an entry pointing to the arm-soc tree now though, just
without the arm at kernel.org entry.
Arnd
^ permalink raw reply
* [PATCH v4 1/5] zynq: use GIC device tree bindings
From: Michal Simek @ 2012-10-27 15:20 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <20121027144253.GC5190@beefymiracle.amer.corp.natinst.com>
> -----Original Message-----
> From: Josh Cartwright [mailto:josh.cartwright at ni.com]
> Sent: Saturday, October 27, 2012 4:43 PM
> To: Michal Simek
> Cc: arm at kernel.org; Arnd Bergmann; linux-kernel at vger.kernel.org; linux-arm-
> kernel at lists.infradead.org; John Linn; Nick Bowler
> Subject: Re: [PATCH v4 1/5] zynq: use GIC device tree bindings
>
> On Sat, Oct 27, 2012 at 02:06:45PM +0000, Michal Simek wrote:
> [...]
> > I am not big fan to use dtsi solution because dts can be simple
> > generated directly From Xilinx design tool based on your hw design.
> > That's why I can't see any benefit To have dtsi file.
>
> Can I ask you to reconsider?
I am open to all solution which will help others. I am not definitely saying NO for this features
I just haven't found a reason to support it.
> We, for example, don't make any use of the Xilinx
> dev tools to generate our device trees.
Ok. How does your working flow looks like?
I mean you don't get any information from hardware guys how does your hw design look like?
> Having a dtsi allows for easy extension
> of the zynq-7000 platform for our boards, without having to carry duplicate data.
ok. I think that make sense if you send the next your series as RFC to see how exactly
you would like to use it.
In my workflow we generate DTS directly from design tool which I expect your hw
guys use because it is probably needed to generate boot.bin/fsbl/etc.
Then there is one more additional step to setup device-tree bsp to generate DTS
which directly fits to your HW design.
If you have the same boards with different programmable logic I understand
that you would like to share that PS part and then just add it that IPs in PL.
> Is it going to be expected that users building kernels for their zynq targets have
> access to the Xilinx EDK?
Definitely not. You can do it just once and of course you can write it by hand
and then just reusing.
>From my point of view. You have to use design tools at least once to get bitstream
and boot.bin with fsbl. Please correct me if I am wrong.
In this step you can use device-tree BSP to generate DTS ( I doesn't need to be perfect with
all attached devices on i2c,spi, phys, etc but it reflects your hardware).
You will get it in some seconds and your dts has correct irq numbers/ip description, compatible strings,
addresses, position in the system - if you use bus bridges, etc) and you can just directly use it
and kernel will boot. If you need to do changes in dts by hand, you can of course do it.
> > > Would you like for me to pull this into v5, or spin up a separate patch series?
> >
> > Definitely not. I have checked patches but haven't got it work on the zc702.
> > Not sure if you have run it on real hw or just on the qemu as you have
> > mentioned In 5/5.
>
> You're likely running into the issue Nick has identified in the thread for patch 5
> where the chosen virtual address for the uart doesn't seem to work:
> http://www.spinics.net/lists/arm-kernel/msg203141.html
>
> We haven't yet identified the root cause; any insight you can provide here
> would be beneficial.
>
> Otherwise, I'm considering reworking patch 5 to move the uart mapping to a
> known working location.
I just need to get some time to catch you.
thanks,
Michal
^ permalink raw reply
* [PATCH 4/4] mfd: ab8500: add devicetree support for chargalg
From: Francesco Lavra @ 2012-10-27 15:11 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351146654-9110-5-git-send-email-rajanikanth.hv@stericsson.com>
On 10/25/2012 08:30 AM, Rajanikanth H.V wrote:
> From: "Rajanikanth H.V" <rajanikanth.hv@stericsson.com>
>
> This patch adds device tree support for charging algorithm
> driver
>
> Signed-off-by: Rajanikanth H.V <rajanikanth.hv@stericsson.com>
[...]
> diff --git a/drivers/power/abx500_chargalg.c b/drivers/power/abx500_chargalg.c
> index 88b5cc1..829fcfd 100644
> --- a/drivers/power/abx500_chargalg.c
> +++ b/drivers/power/abx500_chargalg.c
> @@ -21,6 +21,8 @@
> #include <linux/completion.h>
> #include <linux/workqueue.h>
> #include <linux/kobject.h>
> +#include <linux/of.h>
> +#include <linux/mfd/core.h>
> #include <linux/mfd/abx500.h>
> #include <linux/mfd/abx500/ux500_chargalg.h>
> #include <linux/mfd/abx500/ab8500-bm.h>
> @@ -231,7 +233,6 @@ struct abx500_chargalg {
> struct abx500_chargalg_charger_info chg_info;
> struct abx500_chargalg_battery_data batt_data;
> struct abx500_chargalg_suspension_status susp_status;
> - struct abx500_bmdevs_plat_data *pdata;
pdata should be removed from the description of the struct members as well.
> struct abx500_bm_data *bat;
> struct power_supply chargalg_psy;
> struct ux500_charger *ac_chg;
> @@ -1795,25 +1796,45 @@ static int __devexit abx500_chargalg_remove(struct platform_device *pdev)
> flush_scheduled_work();
> power_supply_unregister(&di->chargalg_psy);
> platform_set_drvdata(pdev, NULL);
> - kfree(di);
>
> return 0;
> }
>
> +static char *supply_interface[] = {
> + "ab8500_fg",
> +};
> +
> static int __devinit abx500_chargalg_probe(struct platform_device *pdev)
> {
> - struct abx500_bmdevs_plat_data *plat_data;
> + struct device_node *np = pdev->dev.of_node;
> + struct abx500_chargalg *di;
> int ret = 0;
>
> - struct abx500_chargalg *di =
> - kzalloc(sizeof(struct abx500_chargalg), GFP_KERNEL);
> - if (!di)
> + di = devm_kzalloc(&pdev->dev, sizeof(*di), GFP_KERNEL);
> + if (!di) {
> + dev_err(&pdev->dev, "%s no mem for ab8500_chargalg\n", __func__);
> return -ENOMEM;
> + }
> + di->bat = pdev->mfd_cell->platform_data;
> + if (!di->bat) {
> + if (np) {
> + ret = bmdevs_of_probe(&pdev->dev, np, &di->bat);
> + if (ret) {
> + dev_err(&pdev->dev,
> + "failed to get battery information\n");
> + return ret;
> + }
> + } else {
> + dev_err(&pdev->dev, "missing dt node for ab8500_chargalg\n");
> + return -EINVAL;
> + }
> + } else {
> + dev_info(&pdev->dev, "falling back to legacy platform data\n");
> + printk("%s falling back to legacy platform data\n", __func__);
You forgot to remove the printk() call.
--
Francesco
^ permalink raw reply
* [PATCH 3/4] mfd: ab8500: add devicetree support for charger
From: Francesco Lavra @ 2012-10-27 15:10 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351146654-9110-4-git-send-email-rajanikanth.hv@stericsson.com>
On 10/25/2012 08:30 AM, Rajanikanth H.V wrote:
> From: "Rajanikanth H.V" <rajanikanth.hv@stericsson.com>
>
> This patch adds device tree support for ab8500-charger
> driver
>
> Signed-off-by: Rajanikanth H.V <rajanikanth.hv@stericsson.com>
[...]
> diff --git a/drivers/power/ab8500_charger.c b/drivers/power/ab8500_charger.c
> index 78a730c..956943e 100644
> --- a/drivers/power/ab8500_charger.c
> +++ b/drivers/power/ab8500_charger.c
> @@ -23,6 +23,8 @@
> #include <linux/err.h>
> #include <linux/workqueue.h>
> #include <linux/kobject.h>
> +#include <linux/of.h>
> +#include <linux/mfd/core.h>
> #include <linux/mfd/abx500/ab8500.h>
> #include <linux/mfd/abx500.h>
> #include <linux/mfd/abx500/ab8500-bm.h>
> @@ -183,7 +185,6 @@ struct ab8500_charger_usb_state {
> * @autopower Indicate if we should have automatic pwron after pwrloss
> * @parent: Pointer to the struct ab8500
> * @gpadc: Pointer to the struct gpadc
> - * @pdata: Pointer to the abx500_charger platform data
> * @bat: Pointer to the abx500_bm platform data
> * @flags: Structure for information about events triggered
> * @usb_state: Structure for usb stack information
> @@ -218,9 +219,9 @@ struct ab8500_charger {
> int vbat;
> int old_vbat;
> bool autopower;
> + bool autopower_cfg;
autopower_cfg should be added in the description of the struct members
as well.
--
Francesco
^ permalink raw reply
* [PATCH 2/4] mfd: ab8500: add devicetree support for btemp
From: Francesco Lavra @ 2012-10-27 15:08 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351146654-9110-3-git-send-email-rajanikanth.hv@stericsson.com>
On 10/25/2012 08:30 AM, Rajanikanth H.V wrote:
> From: "Rajanikanth H.V" <rajanikanth.hv@stericsson.com>
>
> This patch adds device tree support for
> battery-temperature-monitor driver
>
> Signed-off-by: Rajanikanth H.V <rajanikanth.hv@stericsson.com>
> ---
> Documentation/devicetree/bindings/mfd/ab8500.txt | 6 ++
> .../bindings/power_supply/ab8500/btemp.txt | 16 +++++
> arch/arm/boot/dts/dbx5x0.dtsi | 5 ++
> drivers/mfd/ab8500-core.c | 5 ++
> drivers/power/Kconfig | 6 --
> drivers/power/ab8500_bmdata.c | 4 +-
> drivers/power/ab8500_btemp.c | 66 ++++++++++++--------
> 7 files changed, 73 insertions(+), 35 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/power_supply/ab8500/btemp.txt
>
> diff --git a/Documentation/devicetree/bindings/mfd/ab8500.txt b/Documentation/devicetree/bindings/mfd/ab8500.txt
> index 6ca8d81..179c802 100644
> --- a/Documentation/devicetree/bindings/mfd/ab8500.txt
> +++ b/Documentation/devicetree/bindings/mfd/ab8500.txt
> @@ -30,6 +30,12 @@ ab8500-fg : : vddadc : Fuel Gauge
> : LOW_BAT_F : : LOW threshold battery voltage
> : CC_INT_CALIB : : Coulomb Counter Internal Calibration
> : CCEOC : : Coulomb Counter End of Conversion
> +ab8500-btemp : : vtvout : Battery Temperature
> + : BAT_CTRL_INDB : : Battery Removal Indicator
> + : BTEMP_LOW : : Btemp < BtempLow, if battery temperature is lower than -10?C
> + : BTEMP_HIGH : : BtempLow < Btemp < BtempMedium,if battery temperature is between -10 and 0?C
> + : BTEMP_LOW_MEDIUM : : BtempMedium < Btemp < BtempHigh,if battery temperature is between 0?C and?MaxTemp
> + : BTEMP_MEDIUM_HIGH : : Btemp > BtempHigh, if battery temperature is higher than ?MaxTemp?
BTEMP_HIGH, BTEMP_LOW_MEDIUM and BTEMP_MEDIUM_HIGH are in the wrong
order and don't correspond to their description.
--
Francesco
^ permalink raw reply
* [PATCH 1/4] mfd: ab8500: add devicetree support for fuelgauge
From: Francesco Lavra @ 2012-10-27 15:07 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351146654-9110-2-git-send-email-rajanikanth.hv@stericsson.com>
On 10/25/2012 08:30 AM, Rajanikanth H.V wrote:
> From: "Rajanikanth H.V" <rajanikanth.hv@stericsson.com>
>
> - This patch adds device tree support for fuelgauge driver
> - optimize bm devices platform_data usage and of_probe(...)
> Note: of_probe() routine for battery managed devices is made
> common across all bm drivers.
> - test status:
> - interrupt numbers assigned differs between legacy and FDT mode.
>
> Signed-off-by: Rajanikanth H.V <rajanikanth.hv@stericsson.com>
[...]
> diff --git a/Documentation/devicetree/bindings/power_supply/ab8500/fg.txt b/Documentation/devicetree/bindings/power_supply/ab8500/fg.txt
> new file mode 100644
> index 0000000..28eaf35
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/power_supply/ab8500/fg.txt
> @@ -0,0 +1,58 @@
> +=== AB8500 Fuel Gauge Driver ===
> +
> +AB8500 is a mixed signal multimedia and power management
> +device comprising: power and energy-management-module,
> +wall-charger, usb-charger, audio codec, general purpose adc,
> +tvout, clock management and sim card interface.
> +
> +Fuelgauge support is part of energy-management-modules, other
> +components of this module are:
> +main-charger, usb-combo-charger and battery-temperature-monitoring.
> +
> +The properties below describes the node for fuelgauge driver.
> +
> +Required Properties:
> +- compatible = This shall be: "stericsson,ab8500-fg"
> +- battery = Shall be battery specific information
> + Example:
> + ab8500_fg {
> + compatible = "stericsson,ab8500-fg";
> + battery = <&ab8500_battery>;
> + };
> +
> +dependent node:
> + ab8500_battery: ab8500_battery {
> + };
> + This node will provide information on 'thermistor interface' and
> + 'battery technology type' used.
> +
> +Properties of this node are:
> +thermistor-on-batctrl:
> + A boolean value indicating thermistor interface to battery
> +
> + Note:
> + 'btemp' and 'batctrl' are the pins interfaced for battery temperature
> + measurement, 'btemp' signal is used when NTC(negative temperature
> + coefficient) resister is interfaced external to battery whereas
> + 'batctrl' pin is used when NTC resister is internal to battery.
> +
> + Example:
> + ab8500_battery: ab8500_battery {
> + thermistor-on-batctrl;
> + };
> + indiactes: NTC resister is internal to battery, 'batctrl' is used
s/indiactes/indicates
[...]
> +int __devinit
> +bmdevs_of_probe(struct device *dev,
> + struct device_node *np,
> + struct abx500_bm_data **battery)
> +{
> + struct abx500_battery_type *btype;
> + struct device_node *np_bat_supply;
> + struct abx500_bm_data *bat;
> + const char *bat_tech;
> + int i, thermistor;
> +
> + *battery = &ab8500_bm_data;
> +
> + /* get phandle to 'battery-info' node */
> + np_bat_supply = of_parse_phandle(np, "battery", 0);
> + if (!np_bat_supply) {
> + dev_err(dev, "missing property battery\n");
> + return -EINVAL;
> + }
> + if (of_property_read_bool(np_bat_supply,
> + "thermistor-on-batctrl"))
> + thermistor = NTC_INTERNAL;
> + else
> + thermistor = NTC_EXTERNAL;
> +
> + bat = *battery;
> + if (thermistor == NTC_EXTERNAL) {
> + bat->n_btypes = 4;
> + bat->bat_type = bat_type_ext_thermistor;
> + bat->adc_therm = ABx500_ADC_THERM_BATTEMP;
> + }
> + bat_tech = of_get_property(np_bat_supply,
> + "stericsson,battery-type", NULL);
> + if (!bat_tech)
> + dev_warn(dev, "missing property battery-name/type\n");
> +
> + if (strncmp(bat_tech, "LION", 4) == 0) {
What if bat_tech is NULL?
[...]
> diff --git a/drivers/power/ab8500_fg.c b/drivers/power/ab8500_fg.c
> index bf02225..e117920 100644
> --- a/drivers/power/ab8500_fg.c
> +++ b/drivers/power/ab8500_fg.c
> @@ -22,15 +22,16 @@
> #include <linux/platform_device.h>
> #include <linux/power_supply.h>
> #include <linux/kobject.h>
> -#include <linux/mfd/abx500/ab8500.h>
> -#include <linux/mfd/abx500.h>
> #include <linux/slab.h>
> -#include <linux/mfd/abx500/ab8500-bm.h>
> #include <linux/delay.h>
> -#include <linux/mfd/abx500/ab8500-gpadc.h>
> -#include <linux/mfd/abx500.h>
> #include <linux/time.h>
> +#include <linux/of.h>
> #include <linux/completion.h>
> +#include <linux/mfd/core.h>
> +#include <linux/mfd/abx500.h>
> +#include <linux/mfd/abx500/ab8500.h>
> +#include <linux/mfd/abx500/ab8500-bm.h>
> +#include <linux/mfd/abx500/ab8500-gpadc.h>
>
> #define MILLI_TO_MICRO 1000
> #define FG_LSB_IN_MA 1627
> @@ -212,7 +213,6 @@ struct ab8500_fg {
> struct ab8500_fg_avg_cap avg_cap;
> struct ab8500 *parent;
> struct ab8500_gpadc *gpadc;
> - struct abx500_fg_platform_data *pdata;
pdata should be removed from the description of the struct members as well.
--
Francesco
^ permalink raw reply
* [PATCH] at91sam9m10g45-ek: rename leds to match board
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-27 14:51 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351279752-6491-1-git-send-email-alexandre.belloni@piout.net>
On 21:29 Fri 26 Oct , Alexandre Belloni wrote:
> The leds' name in the board file didn't match the names written on the
> board itsef. This can be confusing when trying to use them for another
> purpose.
It like this for so long time and I'm not really willing to touch the dts
Best Regards,
J.
>
> Signed-off-by: Alexandre Belloni <alexandre.belloni@piout.net>
> Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
> ---
> arch/arm/boot/dts/at91sam9m10g45ek.dts | 12 ++++++------
> arch/arm/mach-at91/board-sam9m10g45ek.c | 8 ++++----
> 2 files changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/arch/arm/boot/dts/at91sam9m10g45ek.dts b/arch/arm/boot/dts/at91sam9m10g45ek.dts
> index 15e1dd4..c58b628 100644
> --- a/arch/arm/boot/dts/at91sam9m10g45ek.dts
> +++ b/arch/arm/boot/dts/at91sam9m10g45ek.dts
> @@ -93,20 +93,20 @@
> leds {
> compatible = "gpio-leds";
>
> - d8 {
> - label = "d8";
> + d3 {
> + label = "d3";
> gpios = <&pioD 30 0>;
> linux,default-trigger = "heartbeat";
> };
>
> - d6 {
> - label = "d6";
> + d1 {
> + label = "d1";
> gpios = <&pioD 0 1>;
> linux,default-trigger = "nand-disk";
> };
>
> - d7 {
> - label = "d7";
> + d2 {
> + label = "d2";
> gpios = <&pioD 31 1>;
> linux,default-trigger = "mmc0";
> };
> diff --git a/arch/arm/mach-at91/board-sam9m10g45ek.c b/arch/arm/mach-at91/board-sam9m10g45ek.c
> index 3d48ec1..6d77687 100644
> --- a/arch/arm/mach-at91/board-sam9m10g45ek.c
> +++ b/arch/arm/mach-at91/board-sam9m10g45ek.c
> @@ -413,19 +413,19 @@ static struct ac97c_platform_data ek_ac97_data = {
> */
> static struct gpio_led ek_leds[] = {
> { /* "top" led, red, powerled */
> - .name = "d8",
> + .name = "d3",
> .gpio = AT91_PIN_PD30,
> .default_trigger = "heartbeat",
> },
> { /* "left" led, green, userled2, pwm3 */
> - .name = "d6",
> + .name = "d1",
> .gpio = AT91_PIN_PD0,
> .active_low = 1,
> .default_trigger = "nand-disk",
> },
> #if !(defined(CONFIG_LEDS_ATMEL_PWM) || defined(CONFIG_LEDS_ATMEL_PWM_MODULE))
> { /* "right" led, green, userled1, pwm1 */
> - .name = "d7",
> + .name = "d2",
> .gpio = AT91_PIN_PD31,
> .active_low = 1,
> .default_trigger = "mmc0",
> @@ -440,7 +440,7 @@ static struct gpio_led ek_leds[] = {
> static struct gpio_led ek_pwm_led[] = {
> #if defined(CONFIG_LEDS_ATMEL_PWM) || defined(CONFIG_LEDS_ATMEL_PWM_MODULE)
> { /* "right" led, green, userled1, pwm1 */
> - .name = "d7",
> + .name = "d2",
> .gpio = 1, /* is PWM channel number */
> .active_low = 1,
> .default_trigger = "none",
> --
> 1.7.9.5
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply
* [GIT PULL] at91: fixes for 3.7-rc3
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-27 14:48 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <201210262053.11498.arnd@arndb.de>
On 20:53 Fri 26 Oct , Arnd Bergmann wrote:
> On Thursday 25 October 2012, Nicolas Ferre wrote:
> > ARM: at91: fix external interrupts in non-DT case
>
> This patch now leads to build errors with at91x40_defconfig,
> which I've fixed up by applying the patch below on top.
>
> Please yell if this is not the right fix.
>
> Arnd
>
> commit 3a8852afde01682083028ee427e0678f9bbddd75
> Author: Arnd Bergmann <arnd@arndb.de>
> Date: Fri Oct 26 22:49:09 2012 +0200
>
> ARM: at91: fix at91x40 build
>
> patch 738a0fd7 "ARM: at91: fix external interrupts in non-DT case"
> fixed a run-time error on some at91 platforms but did not apply
> the same change to at91x40, which now doesn't build.
>
> This changes at91x40 in the same way that the other platforms
> were changed.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Best Regards,
J.
^ permalink raw reply
* [PATCH v4 1/5] zynq: use GIC device tree bindings
From: Josh Cartwright @ 2012-10-27 14:42 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <4fd22fac-49c4-4000-9e70-12e94f248753@AM1EHSMHS010.ehs.local>
On Sat, Oct 27, 2012 at 02:06:45PM +0000, Michal Simek wrote:
[...]
> I am not big fan to use dtsi solution because dts can be simple generated directly
> From Xilinx design tool based on your hw design. That's why I can't see any benefit
> To have dtsi file.
Can I ask you to reconsider? We, for example, don't make any use of the
Xilinx dev tools to generate our device trees. Having a dtsi allows for
easy extension of the zynq-7000 platform for our boards, without having
to carry duplicate data.
Is it going to be expected that users building kernels for their zynq
targets have access to the Xilinx EDK?
> > Would you like for me to pull this into v5, or spin up a separate patch series?
>
> Definitely not. I have checked patches but haven't got it work on the zc702.
> Not sure if you have run it on real hw or just on the qemu as you have mentioned
> In 5/5.
You're likely running into the issue Nick has identified in the thread
for patch 5 where the chosen virtual address for the uart doesn't seem
to work: http://www.spinics.net/lists/arm-kernel/msg203141.html
We haven't yet identified the root cause; any insight you can provide
here would be beneficial.
Otherwise, I'm considering reworking patch 5 to move the uart mapping to
a known working location.
Thanks,
Josh
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20121027/1fdbdb53/attachment.sig>
^ permalink raw reply
* [PATCH 7/8] i2c: add 'transferred' field to struct i2c_msg
From: Jean Delvare @ 2012-10-27 14:32 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <20121025141800.GI28061@n2100.arm.linux.org.uk>
On Thu, 25 Oct 2012 15:18:00 +0100, Russell King - ARM Linux wrote:
> On Thu, Oct 25, 2012 at 03:56:33PM +0200, Jean Delvare wrote:
> > The original idea of using the hole in the i2c_msg structure is from
> > David Brownell, who was apparently familiar with such practice, so I
> > assumed it was OK. Actually I still assume it is, until someone comes
> > with an supported architecture where it is not.
>
> According to Al Viro, that would be m68k.
OK... So to make things clear, let me ask Al directly about it. Al, can
you please tell us if:
--- a/include/uapi/linux/i2c.h
+++ b/include/uapi/linux/i2c.h
struct i2c_msg {
__u16 addr; /* slave address */
__u16 flags;
__u16 len; /* msg length */
+ __u16 transferred; /* actual bytes transferred */
__u8 *buf; /* pointer to msg data */
};
would break binary compatibility on m68k or any other architecture you
are familiar with? Note that struct i2c_msg isn't declared with
attribute packed, so my assumption was that pointer "buf" was align on
at least 4 bytes, leaving a hole between len and buf. Am I wrong?
Thanks,
--
Jean Delvare
^ permalink raw reply
* [PATCH v4 1/5] zynq: use GIC device tree bindings
From: Michal Simek @ 2012-10-27 14:06 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <20121027140053.GB5190@beefymiracle.amer.corp.natinst.com>
Hi Josh
> -----Original Message-----
> From: Josh Cartwright [mailto:josh.cartwright at ni.com]
> Sent: Saturday, October 27, 2012 4:01 PM
> To: Michal Simek
> Cc: arm at kernel.org; Arnd Bergmann; linux-kernel at vger.kernel.org; linux-arm-
> kernel at lists.infradead.org; John Linn; Nick Bowler
> Subject: Re: [PATCH v4 1/5] zynq: use GIC device tree bindings
>
> On Sat, Oct 27, 2012 at 01:39:00PM +0000, Michal Simek wrote:
> > Hi Josh,
> >
> > > -----Original Message-----
> > > From: Josh Cartwright [mailto:josh.cartwright at ni.com]
> > > Sent: Wednesday, October 24, 2012 10:03 PM
> > > To: arm at kernel.org; Arnd Bergmann
> > > Cc: linux-kernel at vger.kernel.org;
> > > linux-arm-kernel at lists.infradead.org; John Linn; Nick Bowler; Michal
> > > Simek
> > > Subject: [PATCH v4 1/5] zynq: use GIC device tree bindings
> > >
> > > The Zynq uses the cortex-a9-gic. This eliminates the need to
> > > hardcode register addresses.
> > >
> > > Signed-off-by: Josh Cartwright <josh.cartwright@ni.com>
> > > Cc: John Linn <john.linn@xilinx.com>
> > > Acked-by: Arnd Bergmann <arnd@arndb.de>
> > > ---
> > > arch/arm/boot/dts/zynq-ep107.dts | 8 +++++---
> > > arch/arm/mach-zynq/common.c | 7 ++++++-
> > > arch/arm/mach-zynq/include/mach/zynq_soc.h | 2 --
> > > 3 files changed, 11 insertions(+), 6 deletions(-)
> > >
> > > diff --git a/arch/arm/boot/dts/zynq-ep107.dts
> > > b/arch/arm/boot/dts/zynq- ep107.dts index 37ca192..7bfff4a 100644
> > > --- a/arch/arm/boot/dts/zynq-ep107.dts
> > > +++ b/arch/arm/boot/dts/zynq-ep107.dts
> > > @@ -36,10 +36,12 @@
> > > ranges;
> > >
> > > intc: interrupt-controller at f8f01000 {
> > > + compatible = "arm,cortex-a9-gic";
> > > + #interrupt-cells = <3>;
> >
> > If you change git to 3 cells format you should also change it for uart below.
> >
> > Also will be the best to remove this dts entirely and replace it by
> > existing Platform.
>
> Do you mean to say get rid of the ep107 entirely and replace it with, for
> example, a zc702 dts?
Yes, Ep107 platform is nothing what you can buy, that's why it is not the platform
Which should be supported in mainline. Supporting zc702 make sense.
>
> I have a follow up patchset which splits off a zynq-7000.dtsi and a zynq-
> zc702.dts, and which also fixes the 3 interrupt cell problem.
I am not big fan to use dtsi solution because dts can be simple generated directly
>From Xilinx design tool based on your hw design. That's why I can't see any benefit
To have dtsi file.
> Would you like for me to pull this into v5, or spin up a separate patch series?
Definitely not. I have checked patches but haven't got it work on the zc702.
Not sure if you have run it on real hw or just on the qemu as you have mentioned
In 5/5.
Thanks,
Michal
^ permalink raw reply
* [PATCH v4 1/5] zynq: use GIC device tree bindings
From: Josh Cartwright @ 2012-10-27 14:00 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <0d1c4cf8-70d8-4d12-bd77-393009d32b22@CH1EHSMHS001.ehs.local>
On Sat, Oct 27, 2012 at 01:39:00PM +0000, Michal Simek wrote:
> Hi Josh,
>
> > -----Original Message-----
> > From: Josh Cartwright [mailto:josh.cartwright at ni.com]
> > Sent: Wednesday, October 24, 2012 10:03 PM
> > To: arm at kernel.org; Arnd Bergmann
> > Cc: linux-kernel at vger.kernel.org; linux-arm-kernel at lists.infradead.org; John
> > Linn; Nick Bowler; Michal Simek
> > Subject: [PATCH v4 1/5] zynq: use GIC device tree bindings
> >
> > The Zynq uses the cortex-a9-gic. This eliminates the need to hardcode register
> > addresses.
> >
> > Signed-off-by: Josh Cartwright <josh.cartwright@ni.com>
> > Cc: John Linn <john.linn@xilinx.com>
> > Acked-by: Arnd Bergmann <arnd@arndb.de>
> > ---
> > arch/arm/boot/dts/zynq-ep107.dts | 8 +++++---
> > arch/arm/mach-zynq/common.c | 7 ++++++-
> > arch/arm/mach-zynq/include/mach/zynq_soc.h | 2 --
> > 3 files changed, 11 insertions(+), 6 deletions(-)
> >
> > diff --git a/arch/arm/boot/dts/zynq-ep107.dts b/arch/arm/boot/dts/zynq-
> > ep107.dts
> > index 37ca192..7bfff4a 100644
> > --- a/arch/arm/boot/dts/zynq-ep107.dts
> > +++ b/arch/arm/boot/dts/zynq-ep107.dts
> > @@ -36,10 +36,12 @@
> > ranges;
> >
> > intc: interrupt-controller at f8f01000 {
> > + compatible = "arm,cortex-a9-gic";
> > + #interrupt-cells = <3>;
>
> If you change git to 3 cells format you should also change it for uart below.
>
> Also will be the best to remove this dts entirely and replace it by existing
> Platform.
Do you mean to say get rid of the ep107 entirely and replace it with,
for example, a zc702 dts?
I have a follow up patchset which splits off a zynq-7000.dtsi and a
zynq-zc702.dts, and which also fixes the 3 interrupt cell problem.
Would you like for me to pull this into v5, or spin up a separate patch
series?
Thanks,
Josh
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20121027/46954293/attachment.sig>
^ permalink raw reply
* [PATCH v4 4/5] ARM: annotate VMALLOC_END definition with _AC
From: Michal Simek @ 2012-10-27 13:59 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <20121024200431.GE6713@beefymiracle.amer.corp.natinst.com>
> -----Original Message-----
> From: Josh Cartwright [mailto:josh.cartwright at ni.com]
> Sent: Wednesday, October 24, 2012 10:05 PM
> To: arm at kernel.org; Arnd Bergmann
> Cc: linux-kernel at vger.kernel.org; linux-arm-kernel at lists.infradead.org; John
> Linn; Nick Bowler; Michal Simek
> Subject: [PATCH v4 4/5] ARM: annotate VMALLOC_END definition with _AC
>
> This makes the definition of VMALLOC_END suitable for use within assembly
> code. This is necessary to allow the use of VMALLOC_END in defining where the
> early uart is mapped for use with DEBUG_LL.
>
> Signed-off-by: Josh Cartwright <josh.cartwright@ni.com>
> Acked-by: Arnd Bergmann <arnd@arndb.de>
> ---
> arch/arm/include/asm/pgtable.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h
> index 08c1231..72904a2 100644
> --- a/arch/arm/include/asm/pgtable.h
> +++ b/arch/arm/include/asm/pgtable.h
> @@ -40,7 +40,7 @@
> */
> #define VMALLOC_OFFSET (8*1024*1024)
> #define VMALLOC_START (((unsigned long)high_memory +
> VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1))
> -#define VMALLOC_END 0xff000000UL
> +#define VMALLOC_END _AC(0xff000000,UL)
This shouldn't be the part of this series but should go to mainline through different tree.
Arnd, Olof: Can you take this patch to your arm-soc tree?
I don't think it is a good workstyle to propose it to mainline through zynq soc tree.
What do you think?
Thanks,
Michal
^ permalink raw reply
* [PATCH v4 2/5] zynq: use pl310 device tree bindings
From: Michal Simek @ 2012-10-27 13:40 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <20121024200337.GC6713@beefymiracle.amer.corp.natinst.com>
> -----Original Message-----
> From: Josh Cartwright [mailto:josh.cartwright at ni.com]
> Sent: Wednesday, October 24, 2012 10:04 PM
> To: arm at kernel.org; Arnd Bergmann
> Cc: linux-kernel at vger.kernel.org; linux-arm-kernel at lists.infradead.org; John
> Linn; Nick Bowler; Michal Simek
> Subject: [PATCH v4 2/5] zynq: use pl310 device tree bindings
>
> The Zynq has a PL310 L2 cache controller. Convert in-tree uses to using the
> device tree.
>
> Signed-off-by: Josh Cartwright <josh.cartwright@ni.com>
> Cc: John Linn <john.linn@xilinx.com>
> Acked-by: Arnd Bergmann <arnd@arndb.de>
> ---
> arch/arm/boot/dts/zynq-ep107.dts | 9 +++++++++
> arch/arm/mach-zynq/common.c | 9 +--------
> arch/arm/mach-zynq/include/mach/zynq_soc.h | 4 ----
> 3 files changed, 10 insertions(+), 12 deletions(-)
>
> diff --git a/arch/arm/boot/dts/zynq-ep107.dts b/arch/arm/boot/dts/zynq-
> ep107.dts
> index 7bfff4a..87204d7 100644
> --- a/arch/arm/boot/dts/zynq-ep107.dts
> +++ b/arch/arm/boot/dts/zynq-ep107.dts
> @@ -44,6 +44,15 @@
> <0xF8F00100 0x100>;
> };
>
> + L2: cache-controller {
> + compatible = "arm,pl310-cache";
> + reg = <0xF8F02000 0x1000>;
> + arm,data-latency = <2 3 2>;
> + arm,tag-latency = <2 3 2>;
> + cache-unified;
> + cache-level = <2>;
> + };
> +
> uart0: uart at e0000000 {
> compatible = "xlnx,xuartps";
> reg = <0xE0000000 0x1000>;
> diff --git a/arch/arm/mach-zynq/common.c b/arch/arm/mach-zynq/common.c
> index d73963b..056091a 100644
> --- a/arch/arm/mach-zynq/common.c
> +++ b/arch/arm/mach-zynq/common.c
> @@ -45,12 +45,10 @@ static struct of_device_id zynq_of_bus_ids[] __initdata = {
> */
> static void __init xilinx_init_machine(void) { -#ifdef CONFIG_CACHE_L2X0
> /*
> * 64KB way size, 8-way associativity, parity disabled
> */
> - l2x0_init(PL310_L2CC_BASE, 0x02060000, 0xF0F0FFFF);
> -#endif
> + l2x0_of_init(0x02060000, 0xF0F0FFFF);
>
> of_platform_bus_probe(NULL, zynq_of_bus_ids, NULL); } @@ -83,11
> +81,6 @@ static struct map_desc io_desc[] __initdata = {
> .pfn = __phys_to_pfn(SCU_PERIPH_PHYS),
> .length = SZ_8K,
> .type = MT_DEVICE,
> - }, {
> - .virtual = PL310_L2CC_VIRT,
> - .pfn = __phys_to_pfn(PL310_L2CC_PHYS),
> - .length = SZ_4K,
> - .type = MT_DEVICE,
> },
>
> #ifdef CONFIG_DEBUG_LL
> diff --git a/arch/arm/mach-zynq/include/mach/zynq_soc.h b/arch/arm/mach-
> zynq/include/mach/zynq_soc.h
> index 3d1c6a6..218283a 100644
> --- a/arch/arm/mach-zynq/include/mach/zynq_soc.h
> +++ b/arch/arm/mach-zynq/include/mach/zynq_soc.h
> @@ -25,9 +25,6 @@
> #define TTC0_PHYS 0xF8001000
> #define TTC0_VIRT TTC0_PHYS
>
> -#define PL310_L2CC_PHYS 0xF8F02000
> -#define PL310_L2CC_VIRT PL310_L2CC_PHYS
> -
> #define SCU_PERIPH_PHYS 0xF8F00000
> #define SCU_PERIPH_VIRT SCU_PERIPH_PHYS
>
> @@ -35,7 +32,6 @@
>
> #define TTC0_BASE IOMEM(TTC0_VIRT)
> #define SCU_PERIPH_BASE IOMEM(SCU_PERIPH_VIRT)
> -#define PL310_L2CC_BASE IOMEM(PL310_L2CC_VIRT)
>
> /*
> * Mandatory for CONFIG_LL_DEBUG, UART is mapped virtual = physical
> --
> 1.8.0
>
This is ok. No changes are necessary.
Acked-by: Michal Simek <michal.simek@xilinx.com>
Please add my acked-by line to this patch to the v5 series.
When all patches are ready I will apply it to zynq next branch at git.xilnx.com.
Thanks,
Michal
This email and any attachments are intended for the sole use of the named recipient(s) and contain(s) confidential information that may be proprietary, privileged or copyrighted under applicable law. If you are not the intended recipient, do not read, copy, or forward this email message or any attachments. Delete this email message and any attachments immediately.
^ permalink raw reply
* [PATCH v4 1/5] zynq: use GIC device tree bindings
From: Michal Simek @ 2012-10-27 13:39 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <20121024200310.GB6713@beefymiracle.amer.corp.natinst.com>
Hi Josh,
> -----Original Message-----
> From: Josh Cartwright [mailto:josh.cartwright at ni.com]
> Sent: Wednesday, October 24, 2012 10:03 PM
> To: arm at kernel.org; Arnd Bergmann
> Cc: linux-kernel at vger.kernel.org; linux-arm-kernel at lists.infradead.org; John
> Linn; Nick Bowler; Michal Simek
> Subject: [PATCH v4 1/5] zynq: use GIC device tree bindings
>
> The Zynq uses the cortex-a9-gic. This eliminates the need to hardcode register
> addresses.
>
> Signed-off-by: Josh Cartwright <josh.cartwright@ni.com>
> Cc: John Linn <john.linn@xilinx.com>
> Acked-by: Arnd Bergmann <arnd@arndb.de>
> ---
> arch/arm/boot/dts/zynq-ep107.dts | 8 +++++---
> arch/arm/mach-zynq/common.c | 7 ++++++-
> arch/arm/mach-zynq/include/mach/zynq_soc.h | 2 --
> 3 files changed, 11 insertions(+), 6 deletions(-)
>
> diff --git a/arch/arm/boot/dts/zynq-ep107.dts b/arch/arm/boot/dts/zynq-
> ep107.dts
> index 37ca192..7bfff4a 100644
> --- a/arch/arm/boot/dts/zynq-ep107.dts
> +++ b/arch/arm/boot/dts/zynq-ep107.dts
> @@ -36,10 +36,12 @@
> ranges;
>
> intc: interrupt-controller at f8f01000 {
> + compatible = "arm,cortex-a9-gic";
> + #interrupt-cells = <3>;
If you change git to 3 cells format you should also change it for uart below.
Also will be the best to remove this dts entirely and replace it by existing
Platform.
Thanks,
Michal
This email and any attachments are intended for the sole use of the named recipient(s) and contain(s) confidential information that may be proprietary, privileged or copyrighted under applicable law. If you are not the intended recipient, do not read, copy, or forward this email message or any attachments. Delete this email message and any attachments immediately.
^ permalink raw reply
* [PATCH v3 3/3] ARM: OMAP: ocp2scp: create omap device for ocp2scp
From: Kishon Vijay Abraham I @ 2012-10-27 13:35 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351344956-22868-1-git-send-email-kishon@ti.com>
Platfrom device for ocp2scp is created using omap_device_build in
devices file. This is used for both omap4(musb) and omap5(dwc3).
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
---
arch/arm/mach-omap2/devices.c | 79 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 79 insertions(+)
diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
index c8c2117..4f3c58c 100644
--- a/arch/arm/mach-omap2/devices.c
+++ b/arch/arm/mach-omap2/devices.c
@@ -19,6 +19,7 @@
#include <linux/of.h>
#include <linux/pinctrl/machine.h>
#include <linux/platform_data/omap4-keypad.h>
+#include <linux/platform_data/omap_ocp2scp.h>
#include <asm/mach-types.h>
#include <asm/mach/map.h>
@@ -613,6 +614,83 @@ static void omap_init_vout(void)
static inline void omap_init_vout(void) {}
#endif
+#if defined(CONFIG_OMAP_OCP2SCP) || defined(CONFIG_OMAP_OCP2SCP_MODULE)
+static int count_ocp2scp_devices(struct omap_ocp2scp_dev *ocp2scp_dev)
+{
+ int cnt = 0;
+
+ while (ocp2scp_dev->drv_name != NULL) {
+ cnt++;
+ ocp2scp_dev++;
+ }
+
+ return cnt;
+}
+
+static void omap_init_ocp2scp(void)
+{
+ struct omap_hwmod *oh;
+ struct platform_device *pdev;
+ int bus_id = -1, dev_cnt = 0, i;
+ struct omap_ocp2scp_dev *ocp2scp_dev;
+ const char *oh_name, *name;
+ struct omap_ocp2scp_platform_data *pdata;
+
+ if (!cpu_is_omap44xx())
+ return;
+
+ oh_name = "ocp2scp_usb_phy";
+ name = "omap-ocp2scp";
+
+ oh = omap_hwmod_lookup(oh_name);
+ if (!oh) {
+ pr_err("%s: could not find omap_hwmod for %s\n", __func__,
+ oh_name);
+ return;
+ }
+
+ pdata = kzalloc(sizeof(*pdata), GFP_KERNEL);
+ if (!pdata) {
+ pr_err("%s: No memory for ocp2scp pdata\n", __func__);
+ return;
+ }
+
+ ocp2scp_dev = oh->dev_attr;
+ dev_cnt = count_ocp2scp_devices(ocp2scp_dev);
+
+ if (!dev_cnt) {
+ pr_err("%s: No devices connected to ocp2scp\n", __func__);
+ kfree(pdata);
+ return;
+ }
+
+ pdata->devices = kzalloc(sizeof(struct omap_ocp2scp_dev *)
+ * dev_cnt, GFP_KERNEL);
+ if (!pdata->devices) {
+ pr_err("%s: No memory for ocp2scp pdata devices\n", __func__);
+ kfree(pdata);
+ return;
+ }
+
+ for (i = 0; i < dev_cnt; i++, ocp2scp_dev++)
+ pdata->devices[i] = ocp2scp_dev;
+
+ pdata->dev_cnt = dev_cnt;
+
+ pdev = omap_device_build(name, bus_id, oh, pdata, sizeof(*pdata), NULL,
+ 0, false);
+ if (IS_ERR(pdev)) {
+ pr_err("Could not build omap_device for %s %s\n",
+ name, oh_name);
+ kfree(pdata->devices);
+ kfree(pdata);
+ return;
+ }
+}
+#else
+static inline void omap_init_ocp2scp(void) { }
+#endif
+
/*-------------------------------------------------------------------------*/
static int __init omap2_init_devices(void)
@@ -640,6 +718,7 @@ static int __init omap2_init_devices(void)
omap_init_sham();
omap_init_aes();
omap_init_vout();
+ omap_init_ocp2scp();
return 0;
}
--
1.7.9.5
^ permalink raw reply related
* [PATCH v3 2/3] ARM: OMAP4: add _dev_attr_ to ocp2scp for representing usb_phy
From: Kishon Vijay Abraham I @ 2012-10-27 13:35 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351344956-22868-1-git-send-email-kishon@ti.com>
In order to reflect devices(usb_phy) attached to ocp2scp bus, ocp2scp
is assigned a device attribute to represent the attached devices.
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Cc: Benoit Cousson <b-cousson@ti.com>
---
arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
index 652d028..cf579b5 100644
--- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
@@ -21,6 +21,7 @@
#include <linux/io.h>
#include <linux/platform_data/gpio-omap.h>
#include <linux/power/smartreflex.h>
+#include <linux/platform_data/omap_ocp2scp.h>
#include <plat/omap_hwmod.h>
#include <plat/i2c.h>
@@ -2681,6 +2682,32 @@ static struct omap_hwmod_class omap44xx_ocp2scp_hwmod_class = {
.sysc = &omap44xx_ocp2scp_sysc,
};
+/* ocp2scp dev_attr */
+static struct resource omap44xx_usb_phy_and_pll_addrs[] = {
+ {
+ .name = "usb_phy",
+ .start = 0x4a0ad080,
+ .end = 0x4a0ae000,
+ .flags = IORESOURCE_MEM,
+ },
+ {
+ /* XXX: Remove this once control module driver is in place */
+ .name = "ctrl_dev",
+ .start = 0x4a002300,
+ .end = 0x4a002303,
+ .flags = IORESOURCE_MEM,
+ },
+ { }
+};
+
+static struct omap_ocp2scp_dev ocp2scp_dev_attr[] = {
+ {
+ .drv_name = "omap-usb2",
+ .res = omap44xx_usb_phy_and_pll_addrs,
+ },
+ { }
+};
+
/* ocp2scp_usb_phy */
static struct omap_hwmod omap44xx_ocp2scp_usb_phy_hwmod = {
.name = "ocp2scp_usb_phy",
@@ -2694,6 +2721,7 @@ static struct omap_hwmod omap44xx_ocp2scp_usb_phy_hwmod = {
.modulemode = MODULEMODE_HWCTRL,
},
},
+ .dev_attr = ocp2scp_dev_attr,
};
/*
--
1.7.9.5
^ permalink raw reply related
* [PATCH v3 1/3] drivers: bus: ocp2scp: add pdata support
From: Kishon Vijay Abraham I @ 2012-10-27 13:35 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351344956-22868-1-git-send-email-kishon@ti.com>
ocp2scp was not having pdata support which makes *musb* fail for non-dt
boot in OMAP platform. The pdata will have information about the devices
that is connected to ocp2scp. ocp2scp driver will now make use of this
information to create the devices that is attached to ocp2scp.
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
---
drivers/bus/omap-ocp2scp.c | 67 ++++++++++++++++++++++++++--
include/linux/platform_data/omap_ocp2scp.h | 31 +++++++++++++
2 files changed, 95 insertions(+), 3 deletions(-)
create mode 100644 include/linux/platform_data/omap_ocp2scp.h
diff --git a/drivers/bus/omap-ocp2scp.c b/drivers/bus/omap-ocp2scp.c
index ff63560..5db8297 100644
--- a/drivers/bus/omap-ocp2scp.c
+++ b/drivers/bus/omap-ocp2scp.c
@@ -22,6 +22,26 @@
#include <linux/pm_runtime.h>
#include <linux/of.h>
#include <linux/of_platform.h>
+#include <linux/platform_data/omap_ocp2scp.h>
+
+/**
+ * _count_resources - count for the number of resources
+ * @res: struct resource *
+ *
+ * Count and return the number of resources populated for the device that is
+ * connected to ocp2scp.
+ */
+static unsigned _count_resources(struct resource *res)
+{
+ int cnt = 0;
+
+ while (res->start != res->end) {
+ cnt++;
+ res++;
+ }
+
+ return cnt;
+}
static int ocp2scp_remove_devices(struct device *dev, void *c)
{
@@ -34,20 +54,61 @@ static int ocp2scp_remove_devices(struct device *dev, void *c)
static int __devinit omap_ocp2scp_probe(struct platform_device *pdev)
{
- int ret;
- struct device_node *np = pdev->dev.of_node;
+ int ret;
+ unsigned res_cnt, i;
+ struct device_node *np = pdev->dev.of_node;
+ struct platform_device *pdev_child;
+ struct omap_ocp2scp_platform_data *pdata = pdev->dev.platform_data;
+ struct omap_ocp2scp_dev *dev;
if (np) {
ret = of_platform_populate(np, NULL, NULL, &pdev->dev);
if (ret) {
- dev_err(&pdev->dev, "failed to add resources for ocp2scp child\n");
+ dev_err(&pdev->dev,
+ "failed to add resources for ocp2scp child\n");
goto err0;
}
+ } else if (pdata) {
+ for (i = 0, dev = *pdata->devices; i < pdata->dev_cnt; i++,
+ dev++) {
+ res_cnt = _count_resources(dev->res);
+
+ pdev_child = platform_device_alloc(dev->drv_name, -1);
+ if (!pdev_child) {
+ dev_err(&pdev->dev,
+ "failed to allocate mem for ocp2scp child\n");
+ goto err0;
+ }
+
+ ret = platform_device_add_resources(pdev_child,
+ dev->res, res_cnt);
+ if (ret) {
+ dev_err(&pdev->dev,
+ "failed to add resources for ocp2scp child\n");
+ goto err1;
+ }
+
+ pdev_child->dev.parent = &pdev->dev;
+
+ ret = platform_device_add(pdev_child);
+ if (ret) {
+ dev_err(&pdev->dev,
+ "failed to register ocp2scp child device\n");
+ goto err1;
+ }
+ }
+ } else {
+ dev_err(&pdev->dev, "OCP2SCP initialized without plat data\n");
+ return -EINVAL;
}
+
pm_runtime_enable(&pdev->dev);
return 0;
+err1:
+ platform_device_put(pdev_child);
+
err0:
device_for_each_child(&pdev->dev, NULL, ocp2scp_remove_devices);
diff --git a/include/linux/platform_data/omap_ocp2scp.h b/include/linux/platform_data/omap_ocp2scp.h
new file mode 100644
index 0000000..5c6c393
--- /dev/null
+++ b/include/linux/platform_data/omap_ocp2scp.h
@@ -0,0 +1,31 @@
+/*
+ * omap_ocp2scp.h -- ocp2scp header file
+ *
+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com
+ * 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; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Author: Kishon Vijay Abraham I <kishon@ti.com>
+ *
+ * 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. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef __DRIVERS_OMAP_OCP2SCP_H
+#define __DRIVERS_OMAP_OCP2SCP_H
+
+struct omap_ocp2scp_dev {
+ const char *drv_name;
+ struct resource *res;
+};
+
+struct omap_ocp2scp_platform_data {
+ int dev_cnt;
+ struct omap_ocp2scp_dev **devices;
+};
+#endif /* __DRIVERS_OMAP_OCP2SCP_H */
--
1.7.9.5
^ permalink raw reply related
* [PATCH v3 0/3] ocp2scp: add non-dt support
From: Kishon Vijay Abraham I @ 2012-10-27 13:35 UTC (permalink / raw)
To: linux-arm-kernel
This patch series allows ocp2scp driver to create its child devices
from the platform data.
In omap platforms, usb phy is connected to ocp2scp and usb phy is needed
for MUSB to be functional. When ocp2scp driver was added, it had only dt
support which means it wont create usb phy devices for non-dt boot.
This patch series adds non-dt support to ocp2scp and this series is needed
for getting MUSB functional in non-dt boot.
Changes from v2:
*if cpu is not 44xx, dont create ocp2scp device in mach-omap2/devices.c
Changes from v1:
* Fixed Sergei's comments on memory leaks
This patch series is rebased on linux-next.
commit: 8243aafc4f54244984d7ea707265e98810a3a066
Let me know if it had to be based on some other tree/commit.
Kishon Vijay Abraham I (3):
drivers: bus: ocp2scp: add pdata support
ARM: OMAP4: add _dev_attr_ to ocp2scp for representing usb_phy
ARM: OMAP: ocp2scp: create omap device for ocp2scp
arch/arm/mach-omap2/devices.c | 79 ++++++++++++++++++++++++++++
arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 28 ++++++++++
drivers/bus/omap-ocp2scp.c | 67 +++++++++++++++++++++--
include/linux/platform_data/omap_ocp2scp.h | 31 +++++++++++
4 files changed, 202 insertions(+), 3 deletions(-)
create mode 100644 include/linux/platform_data/omap_ocp2scp.h
--
1.7.9.5
^ permalink raw reply
* [PATCH] GPIO: mvebu-gpio: Don't initialize the mask_cache
From: Andrew Lunn @ 2012-10-27 13:28 UTC (permalink / raw)
To: linux-arm-kernel
Due to the SMP nature of some of the chips, which have per CPU
registers, the driver does not use the generic irq_gc_mask_set_bit() &
irq_gc_mask_clr_bit() functions, which only support a single register.
The driver has its own implementation of these functions, which can
pick the correct register depending on the CPU being used. The
functions do however use the gc->mask_cache value.
The call to irq_setup_generic_chip() was passing
IRQ_GC_INIT_MASK_CACHE, which caused the gc->mask_cache to be
initialized to the contents of some random register. This resulted in
unexpected interrupts been delivered from random GPIO lines.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
---
drivers/gpio/gpio-mvebu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c
index eb42ab1..cf7afb9 100644
--- a/drivers/gpio/gpio-mvebu.c
+++ b/drivers/gpio/gpio-mvebu.c
@@ -646,7 +646,7 @@ static int __devinit mvebu_gpio_probe(struct platform_device *pdev)
ct->handler = handle_edge_irq;
ct->chip.name = mvchip->chip.label;
- irq_setup_generic_chip(gc, IRQ_MSK(ngpios), IRQ_GC_INIT_MASK_CACHE,
+ irq_setup_generic_chip(gc, IRQ_MSK(ngpios), 0,
IRQ_NOREQUEST, IRQ_LEVEL | IRQ_NOPROBE);
/* Setup irq domain on top of the generic chip. */
--
1.7.10.4
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox