ARM: OMAP2+: Improve handling of ti-sysc related sysc_fields
We can currently get a cryptic warning sysc_fields (ptrval) != (ptrval) if the legacy platform data has no sysc_fields defined while the newer dts data has them. This warning appears only when booting still with legacy "ti,hwmods" custom property set. This can happen at least with DSS related modules where we may not have sysc_fields defined in the in the legacy data. Let's not error out on missing legacy data sysc_fields, and show a more descriptive warning for other cases. Signed-off-by: Tony Lindgren <tony@atomide.com>
This commit is contained in:
Родитель
bb6d3fb354
Коммит
f4a5ac7bd9
|
@ -3148,15 +3148,14 @@ static int omap_hwmod_check_sysc(struct device *dev,
|
|||
/**
|
||||
* omap_hwmod_init_regbits - init sysconfig specific register bits
|
||||
* @dev: struct device
|
||||
* @oh: module
|
||||
* @data: module data
|
||||
* @sysc_fields: new sysc configuration
|
||||
*/
|
||||
static int omap_hwmod_init_regbits(struct device *dev,
|
||||
static int omap_hwmod_init_regbits(struct device *dev, struct omap_hwmod *oh,
|
||||
const struct ti_sysc_module_data *data,
|
||||
struct sysc_regbits **sysc_fields)
|
||||
{
|
||||
*sysc_fields = NULL;
|
||||
|
||||
switch (data->cap->type) {
|
||||
case TI_SYSC_OMAP2:
|
||||
case TI_SYSC_OMAP2_TIMER:
|
||||
|
@ -3191,6 +3190,12 @@ static int omap_hwmod_init_regbits(struct device *dev,
|
|||
*sysc_fields = &omap_hwmod_sysc_type_usb_host_fs;
|
||||
break;
|
||||
default:
|
||||
*sysc_fields = NULL;
|
||||
if (!oh->class->sysc->sysc_fields)
|
||||
return 0;
|
||||
|
||||
dev_err(dev, "sysc_fields not found\n");
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -3356,9 +3361,9 @@ static int omap_hwmod_check_module(struct device *dev,
|
|||
if (!oh->class->sysc)
|
||||
return -ENODEV;
|
||||
|
||||
if (sysc_fields != oh->class->sysc->sysc_fields)
|
||||
dev_warn(dev, "sysc_fields %p != %p\n", sysc_fields,
|
||||
oh->class->sysc->sysc_fields);
|
||||
if (oh->class->sysc->sysc_fields &&
|
||||
sysc_fields != oh->class->sysc->sysc_fields)
|
||||
dev_warn(dev, "sysc_fields mismatch\n");
|
||||
|
||||
if (rev_offs != oh->class->sysc->rev_offs)
|
||||
dev_warn(dev, "rev_offs %08x != %08x\n", rev_offs,
|
||||
|
@ -3574,7 +3579,7 @@ int omap_hwmod_init_module(struct device *dev,
|
|||
|
||||
cookie->data = oh;
|
||||
|
||||
error = omap_hwmod_init_regbits(dev, data, &sysc_fields);
|
||||
error = omap_hwmod_init_regbits(dev, oh, data, &sysc_fields);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче