Let spu_management_ops.enumerate_spus() return the number of found SPEs and use that information to draw some little helper penguin logos.
Signed-off-by: Geert Uytterhoeven <[EMAIL PROTECTED]> Signed-off-by: Geoff Levand <[EMAIL PROTECTED]> Acked-By: James Simmons <[EMAIL PROTECTED]> Acked-by: Arnd Bergmann <[EMAIL PROTECTED]> --- Changes since last version: - Let FB_LOGO_EXTRA default to y if SPU_BASE is enabled arch/powerpc/platforms/cell/spu_base.c | 15 ++++++++++++++- arch/powerpc/platforms/cell/spu_manage.c | 4 +++- arch/powerpc/platforms/ps3/spu.c | 6 ++++-- drivers/video/logo/Kconfig | 1 + 4 files changed, 22 insertions(+), 4 deletions(-) --- a/arch/powerpc/platforms/cell/spu_base.c +++ b/arch/powerpc/platforms/cell/spu_base.c @@ -31,6 +31,7 @@ #include <linux/mm.h> #include <linux/io.h> #include <linux/mutex.h> +#include <linux/linux_logo.h> #include <asm/spu.h> #include <asm/spu_priv1.h> #include <asm/xmon.h> @@ -603,12 +604,24 @@ static int __init init_spu_base(void) ret = spu_enumerate_spus(create_spu); - if (ret) { + if (ret < 0) { printk(KERN_WARNING "%s: Error initializing spus\n", __FUNCTION__); goto out_unregister_sysdev_class; } + if (ret > 0) { + /* + * We cannot put the forward declaration in + * <linux/linux_logo.h> because of conflicting session type + * conflicts for const and __initdata with different compiler + * versions + */ + extern const struct linux_logo logo_spe_clut224; + + fb_append_extra_logo(&logo_spe_clut224, ret); + } + xmon_register_spus(&spu_full_list); return 0; --- a/arch/powerpc/platforms/cell/spu_manage.c +++ b/arch/powerpc/platforms/cell/spu_manage.c @@ -279,6 +279,7 @@ static int __init of_enumerate_spus(int { int ret; struct device_node *node; + unsigned int n = 0; ret = -ENODEV; for (node = of_find_node_by_type(NULL, "spe"); @@ -289,8 +290,9 @@ static int __init of_enumerate_spus(int __FUNCTION__, node->name); break; } + n++; } - return ret; + return ret ? ret : n; } static int __init of_create_spu(struct spu *spu, void *data) --- a/arch/powerpc/platforms/ps3/spu.c +++ b/arch/powerpc/platforms/ps3/spu.c @@ -400,11 +400,13 @@ static int __init ps3_enumerate_spus(int } } - if (result) + if (result) { printk(KERN_WARNING "%s:%d: Error initializing spus\n", __func__, __LINE__); + return result; + } - return result; + return num_resource_id; } const struct spu_management_ops spu_management_ps3_ops = { --- a/drivers/video/logo/Kconfig +++ b/drivers/video/logo/Kconfig @@ -13,6 +13,7 @@ if LOGO config FB_LOGO_EXTRA bool depends on FB + default y if SPU_BASE config LOGO_LINUX_MONO bool "Standard black and white Linux logo" -- With kind regards, Geert Uytterhoeven Software Architect Sony Network and Software Technology Center Europe The Corporate Village · Da Vincilaan 7-D1 · B-1935 Zaventem · Belgium Phone: +32 (0)2 700 8453 Fax: +32 (0)2 700 8622 E-mail: [EMAIL PROTECTED] Internet: http://www.sony-europe.com/ Sony Network and Software Technology Center Europe A division of Sony Service Centre (Europe) N.V. Registered office: Technologielaan 7 · B-1840 Londerzeel · Belgium VAT BE 0413.825.160 · RPR Brussels Fortis Bank Zaventem · Swift GEBABEBB08A · IBAN BE39001382358619 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/