Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fe41947e authored by Alexandre Bounine's avatar Alexandre Bounine Committed by Linus Torvalds
Browse files

rapidio: fix sysfs config attribute to access 16MB of maint space



Fixes sysfs config attribute to allow access to entire 16MB maintenance
space of RapidIO devices.

Signed-off-by: default avatarAlexandre Bounine <alexandre.bounine@idt.com>
Cc: Kumar Gala <galak@kernel.crashing.org>
Cc: Matt Porter <mporter@kernel.crashing.org>
Cc: Li Yang <leoli@freescale.com>
Cc: Thomas Moll <thomas.moll@sysgo.com>
Cc: Micha Nelissen <micha@neli.hopto.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 99b0d365
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -77,9 +77,9 @@ rio_read_config(struct file *filp, struct kobject *kobj,

	/* Several chips lock up trying to read undefined config space */
	if (capable(CAP_SYS_ADMIN))
		size = 0x200000;
		size = RIO_MAINT_SPACE_SZ;

	if (off > size)
	if (off >= size)
		return 0;
	if (off + count > size) {
		size -= off;
@@ -147,10 +147,10 @@ rio_write_config(struct file *filp, struct kobject *kobj,
	loff_t init_off = off;
	u8 *data = (u8 *) buf;

	if (off > 0x200000)
	if (off >= RIO_MAINT_SPACE_SZ)
		return 0;
	if (off + count > 0x200000) {
		size = 0x200000 - off;
	if (off + count > RIO_MAINT_SPACE_SZ) {
		size = RIO_MAINT_SPACE_SZ - off;
		count = size;
	}

@@ -200,7 +200,7 @@ static struct bin_attribute rio_config_attr = {
		 .name = "config",
		 .mode = S_IRUGO | S_IWUSR,
		 },
	.size = 0x200000,
	.size = RIO_MAINT_SPACE_SZ,
	.read = rio_read_config,
	.write = rio_write_config,
};
+3 −1
Original line number Diff line number Diff line
@@ -14,10 +14,12 @@
#define LINUX_RIO_REGS_H

/*
 * In RapidIO, each device has a 2MB configuration space that is
 * In RapidIO, each device has a 16MB configuration space that is
 * accessed via maintenance transactions.  Portions of configuration
 * space are standardized and/or reserved.
 */
#define RIO_MAINT_SPACE_SZ	0x1000000 /* 16MB of RapidIO mainenance space */

#define RIO_DEV_ID_CAR		0x00	/* [I] Device Identity CAR */
#define RIO_DEV_INFO_CAR	0x04	/* [I] Device Information CAR */
#define RIO_ASM_ID_CAR		0x08	/* [I] Assembly Identity CAR */