
As it turns out, passing the value of PINMON0 to the hook is not generic. PXs3 needs to read out PINMON2 instead of PINMON0.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
.../mach-uniphier/boot-device/boot-device-ld11.c | 9 +++++---- .../mach-uniphier/boot-device/boot-device-pxs2.c | 5 +++-- .../mach-uniphier/boot-device/boot-device-pxs3.c | 2 +- arch/arm/mach-uniphier/boot-device/boot-device.c | 16 +++++----------- arch/arm/mach-uniphier/boot-device/boot-device.h | 8 ++++---- 5 files changed, 18 insertions(+), 22 deletions(-)
diff --git a/arch/arm/mach-uniphier/boot-device/boot-device-ld11.c b/arch/arm/mach-uniphier/boot-device/boot-device-ld11.c index 11e70a926fc8..67650e0ae332 100644 --- a/arch/arm/mach-uniphier/boot-device/boot-device-ld11.c +++ b/arch/arm/mach-uniphier/boot-device/boot-device-ld11.c @@ -9,6 +9,7 @@ #include <linux/io.h> #include <linux/kernel.h>
+#include "../sg-regs.h" #include "boot-device.h"
const struct uniphier_boot_device uniphier_ld11_boot_device_table[] = { @@ -49,12 +50,12 @@ const struct uniphier_boot_device uniphier_ld11_boot_device_table[] = { const unsigned uniphier_ld11_boot_device_count = ARRAY_SIZE(uniphier_ld11_boot_device_table);
-int uniphier_ld11_boot_device_is_usb(u32 pinmon) +int uniphier_ld11_boot_device_is_usb(void) { - return !!(~pinmon & 0x00000080); + return !!(~readl(SG_PINMON0) & 0x00000080); }
-int uniphier_ld20_boot_device_is_usb(u32 pinmon) +int uniphier_ld20_boot_device_is_usb(void) { - return !!(~pinmon & 0x00000780); + return !!(~readl(SG_PINMON0) & 0x00000780); } diff --git a/arch/arm/mach-uniphier/boot-device/boot-device-pxs2.c b/arch/arm/mach-uniphier/boot-device/boot-device-pxs2.c index 49c5da1469c7..f032664a0f34 100644 --- a/arch/arm/mach-uniphier/boot-device/boot-device-pxs2.c +++ b/arch/arm/mach-uniphier/boot-device/boot-device-pxs2.c @@ -9,6 +9,7 @@ #include <linux/io.h> #include <linux/kernel.h>
+#include "../sg-regs.h" #include "boot-device.h"
const struct uniphier_boot_device uniphier_pxs2_boot_device_table[] = { @@ -49,9 +50,9 @@ const struct uniphier_boot_device uniphier_pxs2_boot_device_table[] = { const unsigned uniphier_pxs2_boot_device_count = ARRAY_SIZE(uniphier_pxs2_boot_device_table);
-int uniphier_pxs2_boot_device_is_usb(u32 pinmon) +int uniphier_pxs2_boot_device_is_usb(void) { - return !!(pinmon & 0x00000040); + return !!(readl(SG_PINMON0) & 0x00000040); }
unsigned int uniphier_pxs2_boot_device_fixup(unsigned int mode) diff --git a/arch/arm/mach-uniphier/boot-device/boot-device-pxs3.c b/arch/arm/mach-uniphier/boot-device/boot-device-pxs3.c index 01a72c035052..8de3737b2881 100644 --- a/arch/arm/mach-uniphier/boot-device/boot-device-pxs3.c +++ b/arch/arm/mach-uniphier/boot-device/boot-device-pxs3.c @@ -34,7 +34,7 @@ const struct uniphier_boot_device uniphier_pxs3_boot_device_table[] = { const unsigned uniphier_pxs3_boot_device_count = ARRAY_SIZE(uniphier_pxs3_boot_device_table);
-int uniphier_pxs3_boot_device_is_usb(u32 pinmon) +int uniphier_pxs3_boot_device_is_usb(void) { return !!(readl(SG_PINMON2) & BIT(31)); } diff --git a/arch/arm/mach-uniphier/boot-device/boot-device.c b/arch/arm/mach-uniphier/boot-device/boot-device.c index 3c7643302d9e..20902c8a8bbb 100644 --- a/arch/arm/mach-uniphier/boot-device/boot-device.c +++ b/arch/arm/mach-uniphier/boot-device/boot-device.c @@ -20,7 +20,7 @@ struct uniphier_boot_device_info { unsigned int boot_device_sel_shift; const struct uniphier_boot_device *boot_device_table; const unsigned int *boot_device_count; - int (*boot_device_is_usb)(u32 pinmon); + int (*boot_device_is_usb)(void); unsigned int (*boot_device_fixup)(unsigned int mode); int have_internal_stm; }; @@ -121,18 +121,15 @@ UNIPHIER_DEFINE_SOCDATA_FUNC(uniphier_get_boot_device_info, static unsigned int __uniphier_boot_device_raw( const struct uniphier_boot_device_info *info) { - u32 pinmon; unsigned int boot_sel;
if (boot_is_swapped()) return BOOT_DEVICE_NOR;
- pinmon = readl(SG_PINMON0); - - if (info->boot_device_is_usb && info->boot_device_is_usb(pinmon)) + if (info->boot_device_is_usb && info->boot_device_is_usb()) return BOOT_DEVICE_USB;
- boot_sel = pinmon >> info->boot_device_sel_shift; + boot_sel = readl(SG_PINMON0) >> info->boot_device_sel_shift;
BUG_ON(!is_power_of_2(*info->boot_device_count)); boot_sel &= *info->boot_device_count - 1; @@ -193,7 +190,6 @@ int uniphier_boot_from_backend(void) static int do_pinmon(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { const struct uniphier_boot_device_info *info; - u32 pinmon; unsigned int boot_device_count, boot_sel; int i;
@@ -209,15 +205,13 @@ static int do_pinmon(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
printf("Boot Swap: %s\n", boot_is_swapped() ? "ON" : "OFF");
- pinmon = readl(SG_PINMON0); - if (info->boot_device_is_usb) printf("USB Boot: %s\n", - info->boot_device_is_usb(pinmon) ? "ON" : "OFF"); + info->boot_device_is_usb() ? "ON" : "OFF");
boot_device_count = *info->boot_device_count;
- boot_sel = pinmon >> info->boot_device_sel_shift; + boot_sel = readl(SG_PINMON0) >> info->boot_device_sel_shift; boot_sel &= boot_device_count - 1;
printf("\nBoot Mode Sel:\n"); diff --git a/arch/arm/mach-uniphier/boot-device/boot-device.h b/arch/arm/mach-uniphier/boot-device/boot-device.h index bbb634316b3a..eeaf8a77eedc 100644 --- a/arch/arm/mach-uniphier/boot-device/boot-device.h +++ b/arch/arm/mach-uniphier/boot-device/boot-device.h @@ -24,10 +24,10 @@ extern const unsigned int uniphier_pxs2_boot_device_count; extern const unsigned int uniphier_ld11_boot_device_count; extern const unsigned int uniphier_pxs3_boot_device_count;
-int uniphier_pxs2_boot_device_is_usb(u32 pinmon); -int uniphier_ld11_boot_device_is_usb(u32 pinmon); -int uniphier_ld20_boot_device_is_usb(u32 pinmon); -int uniphier_pxs3_boot_device_is_usb(u32 pinmon); +int uniphier_pxs2_boot_device_is_usb(void); +int uniphier_ld11_boot_device_is_usb(void); +int uniphier_ld20_boot_device_is_usb(void); +int uniphier_pxs3_boot_device_is_usb(void);
unsigned int uniphier_pxs2_boot_device_fixup(unsigned int mode);