regmap-mmio: Use native endianness for read/write
authorSimon Arlott <simon@fire.lp0.eu>
Thu, 29 Oct 2015 19:58:47 +0000 (19:58 +0000)
committerMark Brown <broonie@kernel.org>
Mon, 16 Nov 2015 09:43:54 +0000 (09:43 +0000)
The regmap API has an endianness setting for formatting reads and writes.
This can be set by the usual DT "little-endian" and "big-endian" properties.
To work properly the associated regmap_bus needs to read/write in native
endian.

The "syscon" DT device binding creates an mmio-based regmap_bus which
performs all reads/writes as little-endian. These values are then converted
again by regmap, which means that all of the MIPS BCM boards (which are
big-endian) have been declared as "little-endian" to get regmap to convert
them back to big-endian.

Modify regmap-mmio to use the native-endian functions __raw_read*() and
__raw_write*() instead of the little-endian functions read*() and
write*().

Modify the big-endian MIPS BCM boards to use what will now be the correct
endianness instead of pretending that the devices are little-endian.

Signed-off-by: Simon Arlott <simon@fire.lp0.eu>
Signed-off-by: Mark Brown <broonie@kernel.org>
arch/mips/boot/dts/brcm/bcm6328.dtsi
arch/mips/boot/dts/brcm/bcm7125.dtsi
arch/mips/boot/dts/brcm/bcm7346.dtsi
arch/mips/boot/dts/brcm/bcm7358.dtsi
arch/mips/boot/dts/brcm/bcm7360.dtsi
arch/mips/boot/dts/brcm/bcm7362.dtsi
arch/mips/boot/dts/brcm/bcm7420.dtsi
arch/mips/boot/dts/brcm/bcm7425.dtsi
arch/mips/boot/dts/brcm/bcm7435.dtsi
drivers/base/regmap/regmap-mmio.c

index 41891c1e58bda2554595d76a7b2c0261a11e2990..d52ce3d07f16dee81c5982212fe69f8cddc015d0 100644 (file)
@@ -73,7 +73,6 @@
                timer: timer@10000040 {
                        compatible = "syscon";
                        reg = <0x10000040 0x2c>;
-                       little-endian;
                };
 
                reboot {
index 1a7efa883c5e3fd2e046b554485270036193b382..4fc7ecee273c105027ff20cea02f2bd5cf86c9fe 100644 (file)
@@ -98,7 +98,6 @@
                sun_top_ctrl: syscon@404000 {
                        compatible = "brcm,bcm7125-sun-top-ctrl", "syscon";
                        reg = <0x404000 0x60c>;
-                       little-endian;
                };
 
                reboot {
index d4bf52cfcf170ee8ac84daa874495e0a6420e542..a3039bb53477d40a426fec1d1318f3156ede8be3 100644 (file)
                sun_top_ctrl: syscon@404000 {
                        compatible = "brcm,bcm7346-sun-top-ctrl", "syscon";
                        reg = <0x404000 0x51c>;
-                       little-endian;
                };
 
                reboot {
index 8e2501694d03fbd93827aeda79ef22f7cfd5d094..4274ff41ec2122ac0bfd52d814aee8432c26553e 100644 (file)
                sun_top_ctrl: syscon@404000 {
                        compatible = "brcm,bcm7358-sun-top-ctrl", "syscon";
                        reg = <0x404000 0x51c>;
-                       little-endian;
                };
 
                reboot {
index 7e5f76040fb898b19a4bbc301c8a20f3b9368aa4..0dcc9163c27bdd0022e5b66f3ffd65da7fd6ce31 100644 (file)
                sun_top_ctrl: syscon@404000 {
                        compatible = "brcm,bcm7360-sun-top-ctrl", "syscon";
                        reg = <0x404000 0x51c>;
-                       little-endian;
                };
 
                reboot {
index c739ea77acb0dfe17363ec52cf390cace407e54c..2f3f9fc2c478df36ef57c5990dd81f6757240e3a 100644 (file)
                sun_top_ctrl: syscon@404000 {
                        compatible = "brcm,bcm7362-sun-top-ctrl", "syscon";
                        reg = <0x404000 0x51c>;
-                       little-endian;
                };
 
                reboot {
index 5f55d0a50a28622614ec6142eb0ff19746dfaade..bee221b3b56857c8d84dac3e2fa9bfe8b3c54a85 100644 (file)
@@ -99,7 +99,6 @@
                sun_top_ctrl: syscon@404000 {
                        compatible = "brcm,bcm7420-sun-top-ctrl", "syscon";
                        reg = <0x404000 0x60c>;
-                       little-endian;
                };
 
                reboot {
index e24d41ab4e30f9163605180d78605fc02a477db6..571f30f52e3ff5780ec4fd72e18e72737e51537d 100644 (file)
                sun_top_ctrl: syscon@404000 {
                        compatible = "brcm,bcm7425-sun-top-ctrl", "syscon";
                        reg = <0x404000 0x51c>;
-                       little-endian;
                };
 
                reboot {
index 8b9432cc062bc7e89898f2f1f2213926193389f8..614ee211f71a89356dd1eb814a38ec3071885747 100644 (file)
                sun_top_ctrl: syscon@404000 {
                        compatible = "brcm,bcm7425-sun-top-ctrl", "syscon";
                        reg = <0x404000 0x51c>;
-                       little-endian;
                };
 
                reboot {
index 426a57e41ac76071e213ebd69d9d454c51f92172..8a77876d439ad0003856f8a42993308590822cdb 100644 (file)
@@ -106,17 +106,17 @@ static int regmap_mmio_gather_write(void *context,
        while (val_size) {
                switch (ctx->val_bytes) {
                case 1:
-                       writeb(*(u8 *)val, ctx->regs + offset);
+                       __raw_writeb(*(u8 *)val, ctx->regs + offset);
                        break;
                case 2:
-                       writew(*(u16 *)val, ctx->regs + offset);
+                       __raw_writew(*(u16 *)val, ctx->regs + offset);
                        break;
                case 4:
-                       writel(*(u32 *)val, ctx->regs + offset);
+                       __raw_writel(*(u32 *)val, ctx->regs + offset);
                        break;
 #ifdef CONFIG_64BIT
                case 8:
-                       writeq(*(u64 *)val, ctx->regs + offset);
+                       __raw_writeq(*(u64 *)val, ctx->regs + offset);
                        break;
 #endif
                default:
@@ -166,17 +166,17 @@ static int regmap_mmio_read(void *context,
        while (val_size) {
                switch (ctx->val_bytes) {
                case 1:
-                       *(u8 *)val = readb(ctx->regs + offset);
+                       *(u8 *)val = __raw_readb(ctx->regs + offset);
                        break;
                case 2:
-                       *(u16 *)val = readw(ctx->regs + offset);
+                       *(u16 *)val = __raw_readw(ctx->regs + offset);
                        break;
                case 4:
-                       *(u32 *)val = readl(ctx->regs + offset);
+                       *(u32 *)val = __raw_readl(ctx->regs + offset);
                        break;
 #ifdef CONFIG_64BIT
                case 8:
-                       *(u64 *)val = readq(ctx->regs + offset);
+                       *(u64 *)val = __raw_readq(ctx->regs + offset);
                        break;
 #endif
                default: