Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1636f8ac authored by Grant Likely's avatar Grant Likely
Browse files

sparc/of: Move of_device fields into struct pdev_archdata



This patch moves SPARC architecture specific data members out of
struct of_device and into the pdev_archdata structure.  The reason
for this change is to unify the struct of_device definition amongst
all the architectures.  It also remvoes the .sysdata, .slot, .portid
and .clock_freq properties because they aren't actually used by
anything.

A subsequent patch will replace struct of_device entirely with struct
platform_device and the of_platform support code will share common
routines with the platform bus (but the bus instances themselves can
remain separate).

This patch also adds 'struct resources *resource' and num_resources
to match the fields defined in struct platform_device.  After this
change, 'struct platform_device' can be used as a drop-in replacement
for 'struct of_platform'.

This change is in preparation for merging the of_platform_bus_type
with the platform_bus_type.

Signed-off-by: default avatarGrant Likely <grant.likely@secretlab.ca>
Acked-by: default avatarDavid S. Miller <davem@davemloft.net>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>
parent 2b07be24
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -6,6 +6,8 @@
#ifndef _ASM_SPARC_DEVICE_H
#define _ASM_SPARC_DEVICE_H

#include <asm/openprom.h>

struct device_node;
struct of_device;

@@ -18,6 +20,9 @@ struct dev_archdata {
};

struct pdev_archdata {
	struct resource		resource[PROMREG_MAX];
	unsigned int		irqs[PROMINTR_MAX];
	int			num_irqs;
};

#endif /* _ASM_SPARC_DEVICE_H */
+2 −2
Original line number Diff line number Diff line
@@ -567,7 +567,7 @@ static unsigned long __init sun_floppy_init(void)
	}
	if (op) {
		floppy_op = op;
		FLOPPY_IRQ = op->irqs[0];
		FLOPPY_IRQ = op->archdata.irqs[0];
	} else {
		struct device_node *ebus_dp;
		void __iomem *auxio_reg;
@@ -593,7 +593,7 @@ static unsigned long __init sun_floppy_init(void)
		if (state_prop && !strncmp(state_prop, "disabled", 8))
			return 0;

		FLOPPY_IRQ = op->irqs[0];
		FLOPPY_IRQ = op->archdata.irqs[0];

		/* Make sure the high density bit is set, some systems
		 * (most notably Ultra5/Ultra10) come up with it clear.
+3 −8
Original line number Diff line number Diff line
@@ -15,15 +15,10 @@
struct of_device
{
	struct device			dev;
	struct resource			resource[PROMREG_MAX];
	unsigned int			irqs[PROMINTR_MAX];
	int				num_irqs;
	u32				num_resources;
	struct resource			*resource;

	void				*sysdata;

	int				slot;
	int				portid;
	int				clock_freq;
	struct pdev_archdata		archdata;
};

extern void __iomem *of_ioremap(struct resource *res, unsigned long offset, unsigned long size, char *name);
+2 −2
Original line number Diff line number Diff line
@@ -116,7 +116,7 @@ static int __devinit ecpp_probe(struct of_device *op, const struct of_device_id
	parent = op->dev.of_node->parent;
	if (!strcmp(parent->name, "dma")) {
		p = parport_pc_probe_port(base, base + 0x400,
					  op->irqs[0], PARPORT_DMA_NOFIFO,
					  op->archdata.irqs[0], PARPORT_DMA_NOFIFO,
					  op->dev.parent->parent, 0);
		if (!p)
			return -ENOMEM;
@@ -166,7 +166,7 @@ static int __devinit ecpp_probe(struct of_device *op, const struct of_device_id
		       0, PTR_LPT_REG_DIR);

	p = parport_pc_probe_port(base, base + 0x400,
				  op->irqs[0],
				  op->archdata.irqs[0],
				  slot,
				  op->dev.parent,
				  0);
+12 −16
Original line number Diff line number Diff line
@@ -267,6 +267,8 @@ static void __init build_device_resources(struct of_device *op,
	/* Conver to num-entries.  */
	num_reg /= na + ns;

	op->resource = op->archdata.resource;
	op->num_resources = num_reg;
	for (index = 0; index < num_reg; index++) {
		struct resource *r = &op->resource[index];
		u32 addr[OF_MAX_ADDR_CELLS];
@@ -349,27 +351,21 @@ static struct of_device * __init scan_one_device(struct device_node *dp,

	op->dev.of_node = dp;

	op->clock_freq = of_getintprop_default(dp, "clock-frequency",
					       (25*1000*1000));
	op->portid = of_getintprop_default(dp, "upa-portid", -1);
	if (op->portid == -1)
		op->portid = of_getintprop_default(dp, "portid", -1);

	intr = of_get_property(dp, "intr", &len);
	if (intr) {
		op->num_irqs = len / sizeof(struct linux_prom_irqs);
		for (i = 0; i < op->num_irqs; i++)
			op->irqs[i] = intr[i].pri;
		op->archdata.num_irqs = len / sizeof(struct linux_prom_irqs);
		for (i = 0; i < op->archdata.num_irqs; i++)
			op->archdata.irqs[i] = intr[i].pri;
	} else {
		const unsigned int *irq =
			of_get_property(dp, "interrupts", &len);

		if (irq) {
			op->num_irqs = len / sizeof(unsigned int);
			for (i = 0; i < op->num_irqs; i++)
				op->irqs[i] = irq[i];
			op->archdata.num_irqs = len / sizeof(unsigned int);
			for (i = 0; i < op->archdata.num_irqs; i++)
				op->archdata.irqs[i] = irq[i];
		} else {
			op->num_irqs = 0;
			op->archdata.num_irqs = 0;
		}
	}
	if (sparc_cpu_model == sun4d) {
@@ -411,8 +407,8 @@ static struct of_device * __init scan_one_device(struct device_node *dp,
			goto build_resources;
		}

		for (i = 0; i < op->num_irqs; i++) {
			int this_irq = op->irqs[i];
		for (i = 0; i < op->archdata.num_irqs; i++) {
			int this_irq = op->archdata.irqs[i];
			int sbusl = pil_to_sbus[this_irq];

			if (sbusl)
@@ -420,7 +416,7 @@ static struct of_device * __init scan_one_device(struct device_node *dp,
					    (sbusl << 2) +
					    slot);

			op->irqs[i] = this_irq;
			op->archdata.irqs[i] = this_irq;
		}
	}

Loading