1 --- a/drivers/watchdog/bcm7038_wdt.c
2 +++ b/drivers/watchdog/bcm7038_wdt.c
3 @@ -34,6 +34,24 @@ struct bcm7038_watchdog {
5 static bool nowayout = WATCHDOG_NOWAYOUT;
7 +static inline void bcm7038_wdt_write(unsigned long data, void __iomem *reg)
9 +#ifdef CONFIG_CPU_BIG_ENDIAN
10 + iowrite32be(data, reg);
16 +static inline unsigned long bcm7038_wdt_read(void __iomem *reg)
18 +#ifdef CONFIG_CPU_BIG_ENDIAN
19 + return ioread32be(reg);
25 static void bcm7038_wdt_set_timeout_reg(struct watchdog_device *wdog)
27 struct bcm7038_watchdog *wdt = watchdog_get_drvdata(wdog);
28 @@ -41,15 +59,15 @@ static void bcm7038_wdt_set_timeout_reg(
30 timeout = wdt->rate * wdog->timeout;
32 - writel(timeout, wdt->base + WDT_TIMEOUT_REG);
33 + bcm7038_wdt_write(timeout, wdt->base + WDT_TIMEOUT_REG);
36 static int bcm7038_wdt_ping(struct watchdog_device *wdog)
38 struct bcm7038_watchdog *wdt = watchdog_get_drvdata(wdog);
40 - writel(WDT_START_1, wdt->base + WDT_CMD_REG);
41 - writel(WDT_START_2, wdt->base + WDT_CMD_REG);
42 + bcm7038_wdt_write(WDT_START_1, wdt->base + WDT_CMD_REG);
43 + bcm7038_wdt_write(WDT_START_2, wdt->base + WDT_CMD_REG);
47 @@ -66,8 +84,8 @@ static int bcm7038_wdt_stop(struct watch
49 struct bcm7038_watchdog *wdt = watchdog_get_drvdata(wdog);
51 - writel(WDT_STOP_1, wdt->base + WDT_CMD_REG);
52 - writel(WDT_STOP_2, wdt->base + WDT_CMD_REG);
53 + bcm7038_wdt_write(WDT_STOP_1, wdt->base + WDT_CMD_REG);
54 + bcm7038_wdt_write(WDT_STOP_2, wdt->base + WDT_CMD_REG);
58 @@ -88,7 +106,7 @@ static unsigned int bcm7038_wdt_get_time
59 struct bcm7038_watchdog *wdt = watchdog_get_drvdata(wdog);
62 - time_left = readl(wdt->base + WDT_CMD_REG);
63 + time_left = bcm7038_wdt_read(wdt->base + WDT_CMD_REG);
65 return time_left / wdt->rate;