mirror of
https://github.com/ukui/kernel.git
synced 2026-03-09 10:07:04 -07:00
Merge tag 'omap-for-v5.7/ti-sysc-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into arm/drivers
Driver changes for ti-sysc for v5.7 merge window Driver changes for ti-sysc interconnect target module driver mostly to be able to probe display subsystem (DSS) without platform data: - Rename clk_enable/disable quirks to less confusing pre and post reset quirks - Enable module reset to work with modules with no sysconfig register - Also consider non-existing module register when matching quirks - Don't warn with nested ti-sysc devices - Implement basic SoC revision handling - Detect DSS related devices - Implement DSS reset quirks Note that there is also a DSS driver specific probe fix to allow probing devices configured for interconnect target module data that was agreed to be merged along with the ti-sysc driver changes. And then there also changes to handle RTC, EDMA and PRUSS: - Add module unlock quirk for RTC - Detect EDMA modules - Add support for handling PRUSS * tag 'omap-for-v5.7/ti-sysc-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap: bus: ti-sysc: Add support for PRUSS SYSC type dt-bindings: bus: ti-sysc: Add support for PRUSS SYSC type bus: ti-sysc: Detect EDMA and set quirk flags for tptc bus: ti-sysc: Fix wrong offset for display subsystem reset quirk bus: ti-sysc: Implement display subsystem reset quirk bus: ti-sysc: Detect display subsystem related devices bus: ti-sysc: Handle module unlock quirk needed for some RTC bus: ti-sysc: Implement SoC revision handling bus: ti-sysc: Don't warn about legacy property for nested ti-sysc devices bus: ti-sysc: Consider non-existing registers too when matching quirks bus: ti-sysc: Improve reset to work with modules with no sysconfig bus: ti-sysc: Rename clk related quirks to pre_reset and post_reset quirks bus: ti-sysc: Fix 1-wire reset quirk drm/omap: Prepare DSS for probing without legacy platform data Link: https://lore.kernel.org/r/pull-1583511417-919838@atomide.com-3 Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
@@ -38,6 +38,7 @@ Required standard properties:
|
||||
"ti,sysc-dra7-mcasp"
|
||||
"ti,sysc-usb-host-fs"
|
||||
"ti,sysc-dra7-mcan"
|
||||
"ti,sysc-pruss"
|
||||
|
||||
- reg shall have register areas implemented for the interconnect
|
||||
target module in question such as revision, sysc and syss
|
||||
|
||||
@@ -397,10 +397,16 @@ static int ti_sysc_shutdown_module(struct device *dev,
|
||||
return omap_hwmod_shutdown(cookie->data);
|
||||
}
|
||||
|
||||
static bool ti_sysc_soc_type_gp(void)
|
||||
{
|
||||
return omap_type() == OMAP2_DEVICE_TYPE_GP;
|
||||
}
|
||||
|
||||
static struct of_dev_auxdata omap_auxdata_lookup[];
|
||||
|
||||
static struct ti_sysc_platform_data ti_sysc_pdata = {
|
||||
.auxdata = omap_auxdata_lookup,
|
||||
.soc_type_gp = ti_sysc_soc_type_gp,
|
||||
.init_clockdomain = ti_sysc_clkdm_init,
|
||||
.clkdm_deny_idle = ti_sysc_clkdm_deny_idle,
|
||||
.clkdm_allow_idle = ti_sysc_clkdm_allow_idle,
|
||||
|
||||
+516
-90
File diff suppressed because it is too large
Load Diff
@@ -1339,9 +1339,15 @@ static int dss_component_compare(struct device *dev, void *data)
|
||||
return dev == child;
|
||||
}
|
||||
|
||||
struct dss_component_match_data {
|
||||
struct device *dev;
|
||||
struct component_match **match;
|
||||
};
|
||||
|
||||
static int dss_add_child_component(struct device *dev, void *data)
|
||||
{
|
||||
struct component_match **match = data;
|
||||
struct dss_component_match_data *cmatch = data;
|
||||
struct component_match **match = cmatch->match;
|
||||
|
||||
/*
|
||||
* HACK
|
||||
@@ -1352,7 +1358,17 @@ static int dss_add_child_component(struct device *dev, void *data)
|
||||
if (strstr(dev_name(dev), "rfbi"))
|
||||
return 0;
|
||||
|
||||
component_match_add(dev->parent, match, dss_component_compare, dev);
|
||||
/*
|
||||
* Handle possible interconnect target modules defined within the DSS.
|
||||
* The DSS components can be children of an interconnect target module
|
||||
* after the device tree has been updated for the module data.
|
||||
* See also omapdss_boot_init() for compatible fixup.
|
||||
*/
|
||||
if (strstr(dev_name(dev), "target-module"))
|
||||
return device_for_each_child(dev, cmatch,
|
||||
dss_add_child_component);
|
||||
|
||||
component_match_add(cmatch->dev, match, dss_component_compare, dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1395,6 +1411,7 @@ static int dss_probe_hardware(struct dss_device *dss)
|
||||
static int dss_probe(struct platform_device *pdev)
|
||||
{
|
||||
const struct soc_device_attribute *soc;
|
||||
struct dss_component_match_data cmatch;
|
||||
struct component_match *match = NULL;
|
||||
struct resource *dss_mem;
|
||||
struct dss_device *dss;
|
||||
@@ -1472,7 +1489,9 @@ static int dss_probe(struct platform_device *pdev)
|
||||
|
||||
omapdss_gather_components(&pdev->dev);
|
||||
|
||||
device_for_each_child(&pdev->dev, &match, dss_add_child_component);
|
||||
cmatch.dev = &pdev->dev;
|
||||
cmatch.match = &match;
|
||||
device_for_each_child(&pdev->dev, &cmatch, dss_add_child_component);
|
||||
|
||||
r = component_master_add_with_match(&pdev->dev, &dss_component_ops, match);
|
||||
if (r)
|
||||
|
||||
@@ -183,9 +183,24 @@ static const struct of_device_id omapdss_of_fixups_whitelist[] __initconst = {
|
||||
{},
|
||||
};
|
||||
|
||||
static void __init omapdss_find_children(struct device_node *np)
|
||||
{
|
||||
struct device_node *child;
|
||||
|
||||
for_each_available_child_of_node(np, child) {
|
||||
if (!of_find_property(child, "compatible", NULL))
|
||||
continue;
|
||||
|
||||
omapdss_walk_device(child, true);
|
||||
|
||||
if (of_device_is_compatible(child, "ti,sysc"))
|
||||
omapdss_find_children(child);
|
||||
}
|
||||
}
|
||||
|
||||
static int __init omapdss_boot_init(void)
|
||||
{
|
||||
struct device_node *dss, *child;
|
||||
struct device_node *dss;
|
||||
|
||||
INIT_LIST_HEAD(&dss_conv_list);
|
||||
|
||||
@@ -195,13 +210,7 @@ static int __init omapdss_boot_init(void)
|
||||
return 0;
|
||||
|
||||
omapdss_walk_device(dss, true);
|
||||
|
||||
for_each_available_child_of_node(dss, child) {
|
||||
if (!of_find_property(child, "compatible", NULL))
|
||||
continue;
|
||||
|
||||
omapdss_walk_device(child, true);
|
||||
}
|
||||
omapdss_find_children(dss);
|
||||
|
||||
while (!list_empty(&dss_conv_list)) {
|
||||
struct dss_conv_node *n;
|
||||
|
||||
@@ -18,6 +18,10 @@
|
||||
|
||||
#define SYSC_DRA7_MCAN_ENAWAKEUP (1 << 4)
|
||||
|
||||
/* PRUSS sysc found on AM33xx/AM43xx/AM57xx */
|
||||
#define SYSC_PRUSS_SUB_MWAIT (1 << 5)
|
||||
#define SYSC_PRUSS_STANDBY_INIT (1 << 4)
|
||||
|
||||
/* SYSCONFIG STANDBYMODE/MIDLEMODE/SIDLEMODE supported by hardware */
|
||||
#define SYSC_IDLE_FORCE 0
|
||||
#define SYSC_IDLE_NO 1
|
||||
|
||||
@@ -17,6 +17,7 @@ enum ti_sysc_module_type {
|
||||
TI_SYSC_OMAP4_MCASP,
|
||||
TI_SYSC_OMAP4_USB_HOST_FS,
|
||||
TI_SYSC_DRA7_MCAN,
|
||||
TI_SYSC_PRUSS,
|
||||
};
|
||||
|
||||
struct ti_sysc_cookie {
|
||||
@@ -49,6 +50,9 @@ struct sysc_regbits {
|
||||
s8 emufree_shift;
|
||||
};
|
||||
|
||||
#define SYSC_MODULE_QUIRK_PRUSS BIT(24)
|
||||
#define SYSC_MODULE_QUIRK_DSS_RESET BIT(23)
|
||||
#define SYSC_MODULE_QUIRK_RTC_UNLOCK BIT(22)
|
||||
#define SYSC_QUIRK_CLKDM_NOAUTO BIT(21)
|
||||
#define SYSC_QUIRK_FORCE_MSTANDBY BIT(20)
|
||||
#define SYSC_MODULE_QUIRK_AESS BIT(19)
|
||||
@@ -141,6 +145,7 @@ struct clk;
|
||||
|
||||
struct ti_sysc_platform_data {
|
||||
struct of_dev_auxdata *auxdata;
|
||||
bool (*soc_type_gp)(void);
|
||||
int (*init_clockdomain)(struct device *dev, struct clk *fck,
|
||||
struct clk *ick, struct ti_sysc_cookie *cookie);
|
||||
void (*clkdm_deny_idle)(struct device *dev,
|
||||
|
||||
Reference in New Issue
Block a user