The patch titled
rtc: fall back to requesting only the ports we actually use
has been removed from the -mm tree. Its filename was
rtc-fallback-to-requesting-only-the-ports-we-actually-use.patch
This patch was dropped because it was merged into mainline or a subsystem tree
------------------------------------------------------
Subject: rtc: fall back to requesting only the ports we actually use
From: Bjorn Helgaas <[EMAIL PROTECTED]>
Firmware like PNPBIOS or ACPI can report the address space consumed by the
RTC. The actual space consumed may be less than the size (RTC_IO_EXTENT)
assumed by the RTC driver.
The PNP core doesn't request resources yet, but I'd like to make it do so.
If/when it does, the RTC_IO_EXTENT request may fail, which prevents the RTC
driver from loading.
Since we only use the RTC index and data registers at RTC_PORT(0) and
RTC_PORT(1), we can fall back to requesting just enough space for those.
If the PNP core requests resources, this results in typical I/O port usage
like this:
0070-0073 : 00:06 <-- PNP device 00:06 responds to 70-73
0070-0071 : rtc <-- RTC driver uses only 70-71
instead of the current:
0070-0077 : rtc <-- RTC_IO_EXTENT == 8
Signed-off-by: Bjorn Helgaas <[EMAIL PROTECTED]>
Cc: Alessandro Zummo <[EMAIL PROTECTED]>
Cc: David Brownell <[EMAIL PROTECTED]>
Cc: Ralf Baechle <[EMAIL PROTECTED]>
Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
---
drivers/char/rtc.c | 36 ++++++++++++++++++++++++++++------
include/linux/mc146818rtc.h | 3 ++
2 files changed, 33 insertions(+), 6 deletions(-)
diff -puN
drivers/char/rtc.c~rtc-fallback-to-requesting-only-the-ports-we-actually-use
drivers/char/rtc.c
---
a/drivers/char/rtc.c~rtc-fallback-to-requesting-only-the-ports-we-actually-use
+++ a/drivers/char/rtc.c
@@ -918,12 +918,29 @@ static const struct file_operations rtc_
};
#endif
+static resource_size_t rtc_size;
+
+static struct resource * __init rtc_request_region(resource_size_t size)
+{
+ struct resource *r;
+
+ if (RTC_IOMAPPED)
+ r = request_region(RTC_PORT(0), size, "rtc");
+ else
+ r = request_mem_region(RTC_PORT(0), size, "rtc");
+
+ if (r)
+ rtc_size = size;
+
+ return r;
+}
+
static void rtc_release_region(void)
{
if (RTC_IOMAPPED)
- release_region(RTC_PORT(0), RTC_IO_EXTENT);
+ release_region(RTC_PORT(0), rtc_size);
else
- release_mem_region(RTC_PORT(0), RTC_IO_EXTENT);
+ release_mem_region(RTC_PORT(0), rtc_size);
}
static int __init rtc_init(void)
@@ -976,10 +993,17 @@ found:
}
no_irq:
#else
- if (RTC_IOMAPPED)
- r = request_region(RTC_PORT(0), RTC_IO_EXTENT, "rtc");
- else
- r = request_mem_region(RTC_PORT(0), RTC_IO_EXTENT, "rtc");
+ r = rtc_request_region(RTC_IO_EXTENT);
+
+ /*
+ * If we've already requested a smaller range (for example, because
+ * PNPBIOS or ACPI told us how the device is configured), the request
+ * above might fail because it's too big.
+ *
+ * If so, request just the range we actually use.
+ */
+ if (!r)
+ r = rtc_request_region(RTC_IO_EXTENT_USED);
if (!r) {
#ifdef RTC_IRQ
rtc_has_irq = 0;
diff -puN
include/linux/mc146818rtc.h~rtc-fallback-to-requesting-only-the-ports-we-actually-use
include/linux/mc146818rtc.h
---
a/include/linux/mc146818rtc.h~rtc-fallback-to-requesting-only-the-ports-we-actually-use
+++ a/include/linux/mc146818rtc.h
@@ -109,8 +109,11 @@ struct cmos_rtc_board_info {
#ifndef ARCH_RTC_LOCATION /* Override by <asm/mc146818rtc.h>? */
#define RTC_IO_EXTENT 0x8
+#define RTC_IO_EXTENT_USED 0x2
#define RTC_IOMAPPED 1 /* Default to I/O mapping. */
+#else
+#define RTC_IO_EXTENT_USED RTC_IO_EXTENT
#endif /* ARCH_RTC_LOCATION */
#endif /* _MC146818RTC_H */
_
Patches currently in -mm which might be from [EMAIL PROTECTED] are
origin.patch
small-acpica-extension-to-be-able-to-store-the-name-of.patch
export-acpi_check_resource_conflict.patch
mm-only-enforce-acpi-resource-conflict-checks.patch
serial-keep-the-dtr-setting-for-serial-console.patch
rtc-cmos-exports-nvram-in-sysfs.patch
pnp-simplify-pnp_activate_dev-and-pnp_disable_dev-return-values.patch
pnp-request-ioport-and-iomem-resources-used-by-active-devices.patch
dont-touch-fs_struct-in-drivers.patch
-
To unsubscribe from this list: send the line "unsubscribe mm-commits" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html