aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/mod
diff options
context:
space:
mode:
authorJames Hogan <james.hogan@imgtec.com>2015-03-25 11:39:50 -0400
committerRalf Baechle <ralf@linux-mips.org>2015-03-31 06:04:12 -0400
commit8286ae03308c6f97f346f9f8cb9174b04969add5 (patch)
treea9ef6e64b661ac6687f8206ed0bdf0165f500665 /scripts/mod
parent9b3274bd585c6dff7848119e837bd5ce6c9173e2 (diff)
MIPS: Add CDMM bus support
Add MIPS Common Device Memory Map (CDMM) support in the form of a bus in the standard Linux device model. Each device attached via CDMM is discoverable via an 8-bit type identifier and may contain a number of blocks of memory mapped registers in the CDMM region. IRQs are expected to be handled separately. Due to the per-cpu (per-VPE for MT cores) nature of the CDMM devices, all the driver callbacks take place from workqueues which are run on the right CPU for the device in question, so that the driver doesn't need to be as concerned about which CPU it is running on. Callbacks also exist for when CPUs are taken offline, so that any per-CPU resources used by the driver can be disabled so they don't get forcefully migrated. CDMM devices are created as children of the CPU device they are attached to. Any existing CDMM configuration by the bootloader will be inherited, however platforms wishing to enable CDMM should implement the weak mips_cdmm_phys_base() function (see asm/cdmm.h) so that the bus driver knows where it should put the CDMM region in the physical address space if the bootloader hasn't already enabled it. A mips_cdmm_early_probe() function is also provided to allow early boot or particularly low level code to set up the CDMM region and probe for a specific device type, for example early console or KGDB IO drivers for the EJTAG Fast Debug Channel (FDC) CDMM device. Signed-off-by: James Hogan <james.hogan@imgtec.com> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: linux-mips@linux-mips.org Cc: linux-kernel@vger.kernel.org Patchwork: https://patchwork.linux-mips.org/patch/9599/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'scripts/mod')
-rw-r--r--scripts/mod/devicetable-offsets.c3
-rw-r--r--scripts/mod/file2alias.c16
2 files changed, 19 insertions, 0 deletions
diff --git a/scripts/mod/devicetable-offsets.c b/scripts/mod/devicetable-offsets.c
index f282516acc7b..fce36d0f6898 100644
--- a/scripts/mod/devicetable-offsets.c
+++ b/scripts/mod/devicetable-offsets.c
@@ -168,6 +168,9 @@ int main(void)
168 DEVID_FIELD(amba_id, id); 168 DEVID_FIELD(amba_id, id);
169 DEVID_FIELD(amba_id, mask); 169 DEVID_FIELD(amba_id, mask);
170 170
171 DEVID(mips_cdmm_device_id);
172 DEVID_FIELD(mips_cdmm_device_id, type);
173
171 DEVID(x86_cpu_id); 174 DEVID(x86_cpu_id);
172 DEVID_FIELD(x86_cpu_id, feature); 175 DEVID_FIELD(x86_cpu_id, feature);
173 DEVID_FIELD(x86_cpu_id, family); 176 DEVID_FIELD(x86_cpu_id, family);
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
index e614ef689eee..78691d51a479 100644
--- a/scripts/mod/file2alias.c
+++ b/scripts/mod/file2alias.c
@@ -1109,6 +1109,22 @@ static int do_amba_entry(const char *filename,
1109} 1109}
1110ADD_TO_DEVTABLE("amba", amba_id, do_amba_entry); 1110ADD_TO_DEVTABLE("amba", amba_id, do_amba_entry);
1111 1111
1112/*
1113 * looks like: "mipscdmm:tN"
1114 *
1115 * N is exactly 2 digits, where each is an upper-case hex digit, or
1116 * a ? or [] pattern matching exactly one digit.
1117 */
1118static int do_mips_cdmm_entry(const char *filename,
1119 void *symval, char *alias)
1120{
1121 DEF_FIELD(symval, mips_cdmm_device_id, type);
1122
1123 sprintf(alias, "mipscdmm:t%02X*", type);
1124 return 1;
1125}
1126ADD_TO_DEVTABLE("mipscdmm", mips_cdmm_device_id, do_mips_cdmm_entry);
1127
1112/* LOOKS like cpu:type:x86,venVVVVfamFFFFmodMMMM:feature:*,FEAT,* 1128/* LOOKS like cpu:type:x86,venVVVVfamFFFFmodMMMM:feature:*,FEAT,*
1113 * All fields are numbers. It would be nicer to use strings for vendor 1129 * All fields are numbers. It would be nicer to use strings for vendor
1114 * and feature, but getting those out of the build system here is too 1130 * and feature, but getting those out of the build system here is too