[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v4 4/8] xen/arm: Describe devices supported by a driver with dt_device_match
Xen is currently using a list of compatible strings to match drivers again device nodes. This leads to having double definitions in the GIC code. Furthermore Linux drivers are using dt_device_match (actually called of_device_id in Linux) to list device supported by the drivers. Remove the exisiting compatible field and replace with a dt_match field Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx> Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> --- Changes in v4: - s/dt_match_node/dt_device_match/ in the commit message - Make the SCIF UART driver use the new API (was merged recently) - Typoes and clarify the commit message - Add Ian's ack Changes in v3: - Add Stefano's ack --- 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/drivers/char/scif-uart.c | 8 ++++---- xen/include/asm-arm/device.h | 4 ++-- xen/include/asm-arm/gic.h | 15 +++++---------- 10 files changed, 39 insertions(+), 63 deletions(-) diff --git a/xen/arch/arm/device.c b/xen/arch/arm/device.c index 1f9dbf7..675784c 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_class class, const void *data) { @@ -55,7 +38,7 @@ int __init device_init(struct dt_device_node *dev, enum device_class class, if ( desc->class != class ) 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_class device_get_class(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->class; } diff --git a/xen/arch/arm/gic-v2.c b/xen/arch/arm/gic-v2.c index c05b64a..e551549 100644 --- a/xen/arch/arm/gic-v2.c +++ b/xen/arch/arm/gic-v2.c @@ -776,16 +776,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 1558e17..66cc2a2 100644 --- a/xen/arch/arm/gic-v3.c +++ b/xen/arch/arm/gic-v3.c @@ -1320,14 +1320,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/drivers/char/scif-uart.c b/xen/drivers/char/scif-uart.c index 1a1c496..51a2233 100644 --- a/xen/drivers/char/scif-uart.c +++ b/xen/drivers/char/scif-uart.c @@ -346,14 +346,14 @@ static int __init scif_uart_init(struct dt_device_node *dev, return 0; } -static const char * const scif_uart_dt_compat[] __initconst = +static const struct dt_device_match scif_uart_dt_match[] __initconst = { - "renesas,scif", - NULL + DT_MATCH_COMPATIBLE("renesas,scif"), + { /* sentinel */ }, }; DT_DEVICE_START(scif_uart, "SCIF UART", DEVICE_SERIAL) - .compatible = scif_uart_dt_compat, + .dt_match = scif_uart_dt_match, .init = scif_uart_init, DT_DEVICE_END diff --git a/xen/include/asm-arm/device.h b/xen/include/asm-arm/device.h index 1cedd49..a72f7c9 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 class */ enum device_class class; - /* 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 0396a8e..6f5767f 100644 --- a/xen/include/asm-arm/gic.h +++ b/xen/include/asm-arm/gic.h @@ -153,17 +153,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 |