[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 08/12] xen/arm: Describe device supported by a driver with dt_match_node
On Fri, 16 Jan 2015, Julien Grall wrote: > Xen is currently using list a compatible string to know if the driver > can use device node. This leads to have double definition in the GIC > code. > > Futhermore Linux drivers is using dt_match_node (actually called of_device_id > in Linux) to list device supported by the drivers. > > Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx> Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > xen/arch/arm/device.c | 21 ++------------------- > xen/arch/arm/gic-v2.c | 10 ++++------ > xen/arch/arm/gic-v3.c | 8 ++++---- > xen/drivers/char/exynos4210-uart.c | 8 ++++---- > xen/drivers/char/ns16550.c | 12 ++++++------ > xen/drivers/char/omap-uart.c | 8 ++++---- > xen/drivers/char/pl011.c | 8 ++++---- > xen/include/asm-arm/device.h | 4 ++-- > xen/include/asm-arm/gic.h | 15 +++++---------- > 9 files changed, 35 insertions(+), 59 deletions(-) > > diff --git a/xen/arch/arm/device.c b/xen/arch/arm/device.c > index 693b9af..e4f4603 100644 > --- a/xen/arch/arm/device.c > +++ b/xen/arch/arm/device.c > @@ -23,23 +23,6 @@ > > extern const struct device_desc _sdevice[], _edevice[]; > > -static bool_t __init device_is_compatible(const struct device_desc *desc, > - const struct dt_device_node *dev) > -{ > - const char *const *compat; > - > - if ( !desc->compatible ) > - return 0; > - > - for ( compat = desc->compatible; *compat; compat++ ) > - { > - if ( dt_device_is_compatible(dev, *compat) ) > - return 1; > - } > - > - return 0; > -} > - > int __init device_init(struct dt_device_node *dev, enum device_match type, > const void *data) > { > @@ -55,7 +38,7 @@ int __init device_init(struct dt_device_node *dev, enum > device_match type, > if ( desc->type != type ) > continue; > > - if ( device_is_compatible(desc, dev) ) > + if ( dt_match_node(desc->dt_match, dev) ) > { > ASSERT(desc->init != NULL); > > @@ -75,7 +58,7 @@ enum device_match device_get_type(const struct > dt_device_node *dev) > > for ( desc = _sdevice; desc != _edevice; desc++ ) > { > - if ( device_is_compatible(desc, dev) ) > + if ( dt_match_node(desc->dt_match, dev) ) > return desc->type; > } > > diff --git a/xen/arch/arm/gic-v2.c b/xen/arch/arm/gic-v2.c > index f149e09..34d622f 100644 > --- a/xen/arch/arm/gic-v2.c > +++ b/xen/arch/arm/gic-v2.c > @@ -764,16 +764,14 @@ static int __init gicv2_init(struct dt_device_node > *node, const void *data) > return 0; > } > > -static const char * const gicv2_dt_compat[] __initconst = > +static const struct dt_device_match gicv2_dt_match[] __initconst = > { > - DT_COMPAT_GIC_CORTEX_A15, > - DT_COMPAT_GIC_CORTEX_A7, > - DT_COMPAT_GIC_400, > - NULL > + DT_MATCH_GIC_V2, > + { /* sentinel */ }, > }; > > DT_DEVICE_START(gicv2, "GICv2", DEVICE_GIC) > - .compatible = gicv2_dt_compat, > + .dt_match = gicv2_dt_match, > .init = gicv2_init, > DT_DEVICE_END > > diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c > index 076aa62..35f80b3 100644 > --- a/xen/arch/arm/gic-v3.c > +++ b/xen/arch/arm/gic-v3.c > @@ -1278,14 +1278,14 @@ static int __init gicv3_init(struct dt_device_node > *node, const void *data) > return res; > } > > -static const char * const gicv3_dt_compat[] __initconst = > +static const struct dt_device_match gicv3_dt_match[] __initconst = > { > - DT_COMPAT_GIC_V3, > - NULL > + DT_MATCH_GIC_V3, > + { /* sentinel */ }, > }; > > DT_DEVICE_START(gicv3, "GICv3", DEVICE_GIC) > - .compatible = gicv3_dt_compat, > + .dt_match = gicv3_dt_match, > .init = gicv3_init, > DT_DEVICE_END > > diff --git a/xen/drivers/char/exynos4210-uart.c > b/xen/drivers/char/exynos4210-uart.c > index cba8729..bac1c2b 100644 > --- a/xen/drivers/char/exynos4210-uart.c > +++ b/xen/drivers/char/exynos4210-uart.c > @@ -352,14 +352,14 @@ static int __init exynos4210_uart_init(struct > dt_device_node *dev, > return 0; > } > > -static const char * const exynos4210_dt_compat[] __initconst = > +static const struct dt_device_match exynos4210_dt_match[] __initconst = > { > - "samsung,exynos4210-uart", > - NULL > + DT_MATCH_COMPATIBLE("samsung,exynos4210-uart"), > + { /* sentinel */ }, > }; > > DT_DEVICE_START(exynos4210, "Exynos 4210 UART", DEVICE_SERIAL) > - .compatible = exynos4210_dt_compat, > + .dt_match = exynos4210_dt_match, > .init = exynos4210_uart_init, > DT_DEVICE_END > > diff --git a/xen/drivers/char/ns16550.c b/xen/drivers/char/ns16550.c > index 161b251..d443880 100644 > --- a/xen/drivers/char/ns16550.c > +++ b/xen/drivers/char/ns16550.c > @@ -1185,16 +1185,16 @@ static int __init ns16550_uart_dt_init(struct > dt_device_node *dev, > return 0; > } > > -static const char * const ns16550_dt_compat[] __initconst = > +static const struct dt_device_match ns16550_dt_match[] __initconst = > { > - "ns16550", > - "ns16550a", > - "snps,dw-apb-uart", > - NULL > + DT_MATCH_COMPATIBLE("ns16550"), > + DT_MATCH_COMPATIBLE("ns16550a"), > + DT_MATCH_COMPATIBLE("snps,dw-apb-uart"), > + { /* sentinel */ }, > }; > > DT_DEVICE_START(ns16550, "NS16550 UART", DEVICE_SERIAL) > - .compatible = ns16550_dt_compat, > + .dt_match = ns16550_dt_match, > .init = ns16550_uart_dt_init, > DT_DEVICE_END > > diff --git a/xen/drivers/char/omap-uart.c b/xen/drivers/char/omap-uart.c > index 16d1454..d8f64ea 100644 > --- a/xen/drivers/char/omap-uart.c > +++ b/xen/drivers/char/omap-uart.c > @@ -350,14 +350,14 @@ static int __init omap_uart_init(struct dt_device_node > *dev, > return 0; > } > > -static const char * const omap_uart_dt_compat[] __initconst = > +static const struct dt_device_match omap_uart_dt_match[] __initconst = > { > - "ti,omap4-uart", > - NULL > + DT_MATCH_COMPATIBLE("ti,omap4-uart"), > + { /* sentinel */ }, > }; > > DT_DEVICE_START(omap_uart, "OMAP UART", DEVICE_SERIAL) > - .compatible = omap_uart_dt_compat, > + .dt_match = omap_uart_dt_match, > .init = omap_uart_init, > DT_DEVICE_END > > diff --git a/xen/drivers/char/pl011.c b/xen/drivers/char/pl011.c > index 57274d9..67e6df5 100644 > --- a/xen/drivers/char/pl011.c > +++ b/xen/drivers/char/pl011.c > @@ -285,14 +285,14 @@ static int __init pl011_uart_init(struct dt_device_node > *dev, > return 0; > } > > -static const char * const pl011_dt_compat[] __initconst = > +static const struct dt_device_match pl011_dt_match[] __initconst = > { > - "arm,pl011", > - NULL > + DT_MATCH_COMPATIBLE("arm,pl011"), > + { /* sentinel */ }, > }; > > DT_DEVICE_START(pl011, "PL011 UART", DEVICE_SERIAL) > - .compatible = pl011_dt_compat, > + .dt_match = pl011_dt_match, > .init = pl011_uart_init, > DT_DEVICE_END > > diff --git a/xen/include/asm-arm/device.h b/xen/include/asm-arm/device.h > index 2fe4280..e4666b4 100644 > --- a/xen/include/asm-arm/device.h > +++ b/xen/include/asm-arm/device.h > @@ -44,8 +44,8 @@ struct device_desc { > const char *name; > /* Device type */ > enum device_match type; > - /* Array of device tree 'compatible' strings */ > - const char *const *compatible; > + /* List of devices supported by this driver */ > + const struct dt_device_match *dt_match; > /* Device initialization */ > int (*init)(struct dt_device_node *dev, const void *data); > }; > diff --git a/xen/include/asm-arm/gic.h b/xen/include/asm-arm/gic.h > index 187dc46..73ca3cf 100644 > --- a/xen/include/asm-arm/gic.h > +++ b/xen/include/asm-arm/gic.h > @@ -152,17 +152,12 @@ > #include <xen/irq.h> > #include <asm-arm/vgic.h> > > -#define DT_COMPAT_GIC_400 "arm,gic-400" > -#define DT_COMPAT_GIC_CORTEX_A15 "arm,cortex-a15-gic" > -#define DT_COMPAT_GIC_CORTEX_A7 "arm,cortex-a7-gic" > +#define DT_MATCH_GIC_V2 \ > + DT_MATCH_COMPATIBLE("arm,cortex-a15-gic"), \ > + DT_MATCH_COMPATIBLE("arm,cortex-a7-gic"), \ > + DT_MATCH_COMPATIBLE("arm,gic-400") > > -#define DT_MATCH_GIC_V2 DT_MATCH_COMPATIBLE(DT_COMPAT_GIC_CORTEX_A15), \ > - DT_MATCH_COMPATIBLE(DT_COMPAT_GIC_CORTEX_A7), \ > - DT_MATCH_COMPATIBLE(DT_COMPAT_GIC_400) > - > -#define DT_COMPAT_GIC_V3 "arm,gic-v3" > - > -#define DT_MATCH_GIC_V3 DT_MATCH_COMPATIBLE(DT_COMPAT_GIC_V3) > +#define DT_MATCH_GIC_V3 DT_MATCH_COMPATIBLE("arm,gic-v3") > > /* > * GICv3 registers that needs to be saved/restored > -- > 2.1.4 > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |