提交 17b2112f 编写于 作者: L Linus Torvalds

Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc

Pull powerpc fixes from Ben Herrenschmidt:
 "Here are a handful of powerpc fixes for 3.13.

  The patches are reasonably trivial and self contained.  Note the offb
  patches outside of arch/powerpc, they are LE fixes for our
  open-firmware 'dumb' framebuffer"

* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc:
  powerpc: Fix up the kdump base cap to 128M
  powernv: Fix VFIO support with PHB3
  powerpc/52xx: Re-enable bestcomm driver in defconfigs
  powerpc/pasemi: Turn on devtmpfs in defconfig
  offb: Add palette hack for little endian
  offb: Little endian fixes
  powerpc: Fix PTE page address mismatch in pgtable ctor/dtor
  powerpc/44x: Fix ocm_block allocation
  powerpc: Fix build break with PPC_EARLY_DEBUG_BOOTX=y
  powerpc/512x: dts: remove misplaced IRQ spec from 'soc' node
...@@ -77,7 +77,6 @@ ...@@ -77,7 +77,6 @@
compatible = "fsl,mpc5121-immr"; compatible = "fsl,mpc5121-immr";
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
#interrupt-cells = <2>;
ranges = <0x0 0x80000000 0x400000>; ranges = <0x0 0x80000000 0x400000>;
reg = <0x80000000 0x400000>; reg = <0x80000000 0x400000>;
bus-frequency = <66000000>; /* 66 MHz ips bus */ bus-frequency = <66000000>; /* 66 MHz ips bus */
......
...@@ -12,7 +12,6 @@ CONFIG_EXPERT=y ...@@ -12,7 +12,6 @@ CONFIG_EXPERT=y
CONFIG_PPC_MPC52xx=y CONFIG_PPC_MPC52xx=y
CONFIG_PPC_MPC5200_SIMPLE=y CONFIG_PPC_MPC5200_SIMPLE=y
# CONFIG_PPC_PMAC is not set # CONFIG_PPC_PMAC is not set
CONFIG_PPC_BESTCOMM=y
CONFIG_SPARSE_IRQ=y CONFIG_SPARSE_IRQ=y
CONFIG_PM=y CONFIG_PM=y
# CONFIG_PCI is not set # CONFIG_PCI is not set
...@@ -71,6 +70,8 @@ CONFIG_USB_DEVICEFS=y ...@@ -71,6 +70,8 @@ CONFIG_USB_DEVICEFS=y
CONFIG_USB_OHCI_HCD=y CONFIG_USB_OHCI_HCD=y
CONFIG_USB_OHCI_HCD_PPC_OF_BE=y CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
CONFIG_USB_STORAGE=y CONFIG_USB_STORAGE=y
CONFIG_DMADEVICES=y
CONFIG_PPC_BESTCOMM=y
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
CONFIG_EXT3_FS=y CONFIG_EXT3_FS=y
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
......
...@@ -15,7 +15,6 @@ CONFIG_PPC_MPC52xx=y ...@@ -15,7 +15,6 @@ CONFIG_PPC_MPC52xx=y
CONFIG_PPC_MPC5200_SIMPLE=y CONFIG_PPC_MPC5200_SIMPLE=y
CONFIG_PPC_LITE5200=y CONFIG_PPC_LITE5200=y
# CONFIG_PPC_PMAC is not set # CONFIG_PPC_PMAC is not set
CONFIG_PPC_BESTCOMM=y
CONFIG_NO_HZ=y CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y CONFIG_HIGH_RES_TIMERS=y
CONFIG_SPARSE_IRQ=y CONFIG_SPARSE_IRQ=y
...@@ -59,6 +58,8 @@ CONFIG_I2C_CHARDEV=y ...@@ -59,6 +58,8 @@ CONFIG_I2C_CHARDEV=y
CONFIG_I2C_MPC=y CONFIG_I2C_MPC=y
# CONFIG_HWMON is not set # CONFIG_HWMON is not set
CONFIG_VIDEO_OUTPUT_CONTROL=m CONFIG_VIDEO_OUTPUT_CONTROL=m
CONFIG_DMADEVICES=y
CONFIG_PPC_BESTCOMM=y
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
CONFIG_EXT3_FS=y CONFIG_EXT3_FS=y
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
......
...@@ -12,7 +12,6 @@ CONFIG_EXPERT=y ...@@ -12,7 +12,6 @@ CONFIG_EXPERT=y
CONFIG_PPC_MPC52xx=y CONFIG_PPC_MPC52xx=y
CONFIG_PPC_MPC5200_SIMPLE=y CONFIG_PPC_MPC5200_SIMPLE=y
# CONFIG_PPC_PMAC is not set # CONFIG_PPC_PMAC is not set
CONFIG_PPC_BESTCOMM=y
CONFIG_SPARSE_IRQ=y CONFIG_SPARSE_IRQ=y
CONFIG_PM=y CONFIG_PM=y
# CONFIG_PCI is not set # CONFIG_PCI is not set
...@@ -84,6 +83,8 @@ CONFIG_LEDS_TRIGGERS=y ...@@ -84,6 +83,8 @@ CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_DS1307=y CONFIG_RTC_DRV_DS1307=y
CONFIG_DMADEVICES=y
CONFIG_PPC_BESTCOMM=y
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
CONFIG_EXT3_FS=y CONFIG_EXT3_FS=y
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
......
...@@ -21,7 +21,6 @@ CONFIG_MODULE_UNLOAD=y ...@@ -21,7 +21,6 @@ CONFIG_MODULE_UNLOAD=y
CONFIG_PPC_MPC52xx=y CONFIG_PPC_MPC52xx=y
CONFIG_PPC_MPC5200_SIMPLE=y CONFIG_PPC_MPC5200_SIMPLE=y
# CONFIG_PPC_PMAC is not set # CONFIG_PPC_PMAC is not set
CONFIG_PPC_BESTCOMM=y
CONFIG_NO_HZ=y CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y CONFIG_HIGH_RES_TIMERS=y
CONFIG_HZ_100=y CONFIG_HZ_100=y
...@@ -87,6 +86,8 @@ CONFIG_USB_OHCI_HCD_PPC_OF_BE=y ...@@ -87,6 +86,8 @@ CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
CONFIG_USB_STORAGE=m CONFIG_USB_STORAGE=m
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_PCF8563=m CONFIG_RTC_DRV_PCF8563=m
CONFIG_DMADEVICES=y
CONFIG_PPC_BESTCOMM=y
CONFIG_EXT2_FS=m CONFIG_EXT2_FS=m
CONFIG_EXT3_FS=m CONFIG_EXT3_FS=m
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
......
...@@ -17,7 +17,6 @@ CONFIG_PPC_MPC52xx=y ...@@ -17,7 +17,6 @@ CONFIG_PPC_MPC52xx=y
CONFIG_PPC_MPC5200_SIMPLE=y CONFIG_PPC_MPC5200_SIMPLE=y
CONFIG_PPC_MPC5200_BUGFIX=y CONFIG_PPC_MPC5200_BUGFIX=y
# CONFIG_PPC_PMAC is not set # CONFIG_PPC_PMAC is not set
CONFIG_PPC_BESTCOMM=y
CONFIG_PM=y CONFIG_PM=y
# CONFIG_PCI is not set # CONFIG_PCI is not set
CONFIG_NET=y CONFIG_NET=y
...@@ -86,6 +85,8 @@ CONFIG_USB_STORAGE=y ...@@ -86,6 +85,8 @@ CONFIG_USB_STORAGE=y
CONFIG_RTC_CLASS=y CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_DS1307=y CONFIG_RTC_DRV_DS1307=y
CONFIG_RTC_DRV_DS1374=y CONFIG_RTC_DRV_DS1374=y
CONFIG_DMADEVICES=y
CONFIG_PPC_BESTCOMM=y
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
CONFIG_EXT3_FS=y CONFIG_EXT3_FS=y
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
......
...@@ -15,7 +15,6 @@ CONFIG_PPC_MEDIA5200=y ...@@ -15,7 +15,6 @@ CONFIG_PPC_MEDIA5200=y
CONFIG_PPC_MPC5200_BUGFIX=y CONFIG_PPC_MPC5200_BUGFIX=y
CONFIG_PPC_MPC5200_LPBFIFO=m CONFIG_PPC_MPC5200_LPBFIFO=m
# CONFIG_PPC_PMAC is not set # CONFIG_PPC_PMAC is not set
CONFIG_PPC_BESTCOMM=y
CONFIG_SIMPLE_GPIO=y CONFIG_SIMPLE_GPIO=y
CONFIG_NO_HZ=y CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y CONFIG_HIGH_RES_TIMERS=y
...@@ -125,6 +124,8 @@ CONFIG_RTC_CLASS=y ...@@ -125,6 +124,8 @@ CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_DS1307=y CONFIG_RTC_DRV_DS1307=y
CONFIG_RTC_DRV_DS1374=y CONFIG_RTC_DRV_DS1374=y
CONFIG_RTC_DRV_PCF8563=m CONFIG_RTC_DRV_PCF8563=m
CONFIG_DMADEVICES=y
CONFIG_PPC_BESTCOMM=y
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
CONFIG_EXT3_FS=y CONFIG_EXT3_FS=y
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
......
...@@ -2,7 +2,6 @@ CONFIG_PPC64=y ...@@ -2,7 +2,6 @@ CONFIG_PPC64=y
CONFIG_ALTIVEC=y CONFIG_ALTIVEC=y
CONFIG_SMP=y CONFIG_SMP=y
CONFIG_NR_CPUS=2 CONFIG_NR_CPUS=2
CONFIG_EXPERIMENTAL=y
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
CONFIG_NO_HZ=y CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y CONFIG_HIGH_RES_TIMERS=y
...@@ -45,8 +44,9 @@ CONFIG_INET_AH=y ...@@ -45,8 +44,9 @@ CONFIG_INET_AH=y
CONFIG_INET_ESP=y CONFIG_INET_ESP=y
# CONFIG_IPV6 is not set # CONFIG_IPV6 is not set
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_MTD=y CONFIG_MTD=y
CONFIG_MTD_CHAR=y
CONFIG_MTD_BLOCK=y CONFIG_MTD_BLOCK=y
CONFIG_MTD_SLRAM=y CONFIG_MTD_SLRAM=y
CONFIG_MTD_PHRAM=y CONFIG_MTD_PHRAM=y
...@@ -88,7 +88,6 @@ CONFIG_BLK_DEV_DM=y ...@@ -88,7 +88,6 @@ CONFIG_BLK_DEV_DM=y
CONFIG_DM_CRYPT=y CONFIG_DM_CRYPT=y
CONFIG_NETDEVICES=y CONFIG_NETDEVICES=y
CONFIG_DUMMY=y CONFIG_DUMMY=y
CONFIG_MII=y
CONFIG_TIGON3=y CONFIG_TIGON3=y
CONFIG_E1000=y CONFIG_E1000=y
CONFIG_PASEMI_MAC=y CONFIG_PASEMI_MAC=y
...@@ -174,8 +173,8 @@ CONFIG_NLS_CODEPAGE_437=y ...@@ -174,8 +173,8 @@ CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ISO8859_1=y CONFIG_NLS_ISO8859_1=y
CONFIG_CRC_CCITT=y CONFIG_CRC_CCITT=y
CONFIG_PRINTK_TIME=y CONFIG_PRINTK_TIME=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_FS=y CONFIG_DEBUG_FS=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_KERNEL=y CONFIG_DEBUG_KERNEL=y
CONFIG_DETECT_HUNG_TASK=y CONFIG_DETECT_HUNG_TASK=y
# CONFIG_SCHED_DEBUG is not set # CONFIG_SCHED_DEBUG is not set
......
...@@ -84,10 +84,8 @@ static inline void pgtable_free_tlb(struct mmu_gather *tlb, ...@@ -84,10 +84,8 @@ static inline void pgtable_free_tlb(struct mmu_gather *tlb,
static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table, static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table,
unsigned long address) unsigned long address)
{ {
struct page *page = page_address(table);
tlb_flush_pgtable(tlb, address); tlb_flush_pgtable(tlb, address);
pgtable_page_dtor(page); pgtable_page_dtor(table);
pgtable_free_tlb(tlb, page, 0); pgtable_free_tlb(tlb, page_address(table), 0);
} }
#endif /* _ASM_POWERPC_PGALLOC_32_H */ #endif /* _ASM_POWERPC_PGALLOC_32_H */
...@@ -148,11 +148,9 @@ static inline void pgtable_free_tlb(struct mmu_gather *tlb, ...@@ -148,11 +148,9 @@ static inline void pgtable_free_tlb(struct mmu_gather *tlb,
static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table, static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t table,
unsigned long address) unsigned long address)
{ {
struct page *page = page_address(table);
tlb_flush_pgtable(tlb, address); tlb_flush_pgtable(tlb, address);
pgtable_page_dtor(page); pgtable_page_dtor(table);
pgtable_free_tlb(tlb, page, 0); pgtable_free_tlb(tlb, page_address(table), 0);
} }
#else /* if CONFIG_PPC_64K_PAGES */ #else /* if CONFIG_PPC_64K_PAGES */
......
...@@ -148,7 +148,7 @@ void __init reserve_crashkernel(void) ...@@ -148,7 +148,7 @@ void __init reserve_crashkernel(void)
* a small SLB (128MB) since the crash kernel needs to place * a small SLB (128MB) since the crash kernel needs to place
* itself and some stacks to be in the first segment. * itself and some stacks to be in the first segment.
*/ */
crashk_res.start = min(0x80000000ULL, (ppc64_rma_size / 2)); crashk_res.start = min(0x8000000ULL, (ppc64_rma_size / 2));
#else #else
crashk_res.start = KDUMP_KERNELBASE; crashk_res.start = KDUMP_KERNELBASE;
#endif #endif
......
...@@ -246,8 +246,8 @@ _GLOBAL(__bswapdi2) ...@@ -246,8 +246,8 @@ _GLOBAL(__bswapdi2)
or r3,r7,r9 or r3,r7,r9
blr blr
#if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_MAPLE)
#ifdef CONFIG_PPC_EARLY_DEBUG_BOOTX
_GLOBAL(rmci_on) _GLOBAL(rmci_on)
sync sync
isync isync
...@@ -277,6 +277,9 @@ _GLOBAL(rmci_off) ...@@ -277,6 +277,9 @@ _GLOBAL(rmci_off)
isync isync
sync sync
blr blr
#endif /* CONFIG_PPC_EARLY_DEBUG_BOOTX */
#if defined(CONFIG_PPC_PMAC) || defined(CONFIG_PPC_MAPLE)
/* /*
* Do an IO access in real mode * Do an IO access in real mode
......
...@@ -720,6 +720,7 @@ static void pnv_pci_ioda2_setup_dma_pe(struct pnv_phb *phb, ...@@ -720,6 +720,7 @@ static void pnv_pci_ioda2_setup_dma_pe(struct pnv_phb *phb,
tbl->it_type = TCE_PCI_SWINV_CREATE | TCE_PCI_SWINV_FREE; tbl->it_type = TCE_PCI_SWINV_CREATE | TCE_PCI_SWINV_FREE;
} }
iommu_init_table(tbl, phb->hose->node); iommu_init_table(tbl, phb->hose->node);
iommu_register_group(tbl, pci_domain_nr(pe->pbus), pe->pe_number);
if (pe->pdev) if (pe->pdev)
set_iommu_table_base(&pe->pdev->dev, tbl); set_iommu_table_base(&pe->pdev->dev, tbl);
......
...@@ -339,7 +339,7 @@ void *ppc4xx_ocm_alloc(phys_addr_t *phys, int size, int align, ...@@ -339,7 +339,7 @@ void *ppc4xx_ocm_alloc(phys_addr_t *phys, int size, int align,
if (IS_ERR_VALUE(offset)) if (IS_ERR_VALUE(offset))
continue; continue;
ocm_blk = kzalloc(sizeof(struct ocm_block *), GFP_KERNEL); ocm_blk = kzalloc(sizeof(struct ocm_block), GFP_KERNEL);
if (!ocm_blk) { if (!ocm_blk) {
printk(KERN_ERR "PPC4XX OCM: could not allocate ocm block"); printk(KERN_ERR "PPC4XX OCM: could not allocate ocm block");
rh_free(ocm_reg->rh, offset); rh_free(ocm_reg->rh, offset);
......
...@@ -91,6 +91,15 @@ extern boot_infos_t *boot_infos; ...@@ -91,6 +91,15 @@ extern boot_infos_t *boot_infos;
#define AVIVO_DC_LUTB_WHITE_OFFSET_GREEN 0x6cd4 #define AVIVO_DC_LUTB_WHITE_OFFSET_GREEN 0x6cd4
#define AVIVO_DC_LUTB_WHITE_OFFSET_RED 0x6cd8 #define AVIVO_DC_LUTB_WHITE_OFFSET_RED 0x6cd8
#define FB_RIGHT_POS(p, bpp) (fb_be_math(p) ? 0 : (32 - (bpp)))
static inline u32 offb_cmap_byteswap(struct fb_info *info, u32 value)
{
u32 bpp = info->var.bits_per_pixel;
return cpu_to_be32(value) >> FB_RIGHT_POS(info, bpp);
}
/* /*
* Set a single color register. The values supplied are already * Set a single color register. The values supplied are already
* rounded down to the hardware's capabilities (according to the * rounded down to the hardware's capabilities (according to the
...@@ -120,7 +129,7 @@ static int offb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, ...@@ -120,7 +129,7 @@ static int offb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
mask <<= info->var.transp.offset; mask <<= info->var.transp.offset;
value |= mask; value |= mask;
} }
pal[regno] = value; pal[regno] = offb_cmap_byteswap(info, value);
return 0; return 0;
} }
...@@ -301,7 +310,7 @@ static struct fb_ops offb_ops = { ...@@ -301,7 +310,7 @@ static struct fb_ops offb_ops = {
static void __iomem *offb_map_reg(struct device_node *np, int index, static void __iomem *offb_map_reg(struct device_node *np, int index,
unsigned long offset, unsigned long size) unsigned long offset, unsigned long size)
{ {
const u32 *addrp; const __be32 *addrp;
u64 asize, taddr; u64 asize, taddr;
unsigned int flags; unsigned int flags;
...@@ -369,7 +378,11 @@ static void offb_init_palette_hacks(struct fb_info *info, struct device_node *dp ...@@ -369,7 +378,11 @@ static void offb_init_palette_hacks(struct fb_info *info, struct device_node *dp
} }
of_node_put(pciparent); of_node_put(pciparent);
} else if (dp && of_device_is_compatible(dp, "qemu,std-vga")) { } else if (dp && of_device_is_compatible(dp, "qemu,std-vga")) {
const u32 io_of_addr[3] = { 0x01000000, 0x0, 0x0 }; #ifdef __BIG_ENDIAN
const __be32 io_of_addr[3] = { 0x01000000, 0x0, 0x0 };
#else
const __be32 io_of_addr[3] = { 0x00000001, 0x0, 0x0 };
#endif
u64 io_addr = of_translate_address(dp, io_of_addr); u64 io_addr = of_translate_address(dp, io_of_addr);
if (io_addr != OF_BAD_ADDR) { if (io_addr != OF_BAD_ADDR) {
par->cmap_adr = ioremap(io_addr + 0x3c8, 2); par->cmap_adr = ioremap(io_addr + 0x3c8, 2);
...@@ -535,7 +548,7 @@ static void __init offb_init_nodriver(struct device_node *dp, int no_real_node) ...@@ -535,7 +548,7 @@ static void __init offb_init_nodriver(struct device_node *dp, int no_real_node)
unsigned int flags, rsize, addr_prop = 0; unsigned int flags, rsize, addr_prop = 0;
unsigned long max_size = 0; unsigned long max_size = 0;
u64 rstart, address = OF_BAD_ADDR; u64 rstart, address = OF_BAD_ADDR;
const u32 *pp, *addrp, *up; const __be32 *pp, *addrp, *up;
u64 asize; u64 asize;
int foreign_endian = 0; int foreign_endian = 0;
...@@ -551,25 +564,25 @@ static void __init offb_init_nodriver(struct device_node *dp, int no_real_node) ...@@ -551,25 +564,25 @@ static void __init offb_init_nodriver(struct device_node *dp, int no_real_node)
if (pp == NULL) if (pp == NULL)
pp = of_get_property(dp, "depth", &len); pp = of_get_property(dp, "depth", &len);
if (pp && len == sizeof(u32)) if (pp && len == sizeof(u32))
depth = *pp; depth = be32_to_cpup(pp);
pp = of_get_property(dp, "linux,bootx-width", &len); pp = of_get_property(dp, "linux,bootx-width", &len);
if (pp == NULL) if (pp == NULL)
pp = of_get_property(dp, "width", &len); pp = of_get_property(dp, "width", &len);
if (pp && len == sizeof(u32)) if (pp && len == sizeof(u32))
width = *pp; width = be32_to_cpup(pp);
pp = of_get_property(dp, "linux,bootx-height", &len); pp = of_get_property(dp, "linux,bootx-height", &len);
if (pp == NULL) if (pp == NULL)
pp = of_get_property(dp, "height", &len); pp = of_get_property(dp, "height", &len);
if (pp && len == sizeof(u32)) if (pp && len == sizeof(u32))
height = *pp; height = be32_to_cpup(pp);
pp = of_get_property(dp, "linux,bootx-linebytes", &len); pp = of_get_property(dp, "linux,bootx-linebytes", &len);
if (pp == NULL) if (pp == NULL)
pp = of_get_property(dp, "linebytes", &len); pp = of_get_property(dp, "linebytes", &len);
if (pp && len == sizeof(u32) && (*pp != 0xffffffffu)) if (pp && len == sizeof(u32) && (*pp != 0xffffffffu))
pitch = *pp; pitch = be32_to_cpup(pp);
else else
pitch = width * ((depth + 7) / 8); pitch = width * ((depth + 7) / 8);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册