Commit 62aa751d authored by Kumar Gala's avatar Kumar Gala Committed by Linus Torvalds

[PATCH] ppc32: Check return of ppc_sys_get_pdata before accessing pointer

Ensure that the returned pointer from ppc_sys_get_pdata is not NULL before we
start using it.  This handles any cases where we have variants of processors
on the same board with different functionality.
Signed-off-by: default avatarKumar Gala <kumar.gala@freescale.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 09ffd94f
...@@ -94,20 +94,24 @@ mpc834x_sys_setup_arch(void) ...@@ -94,20 +94,24 @@ mpc834x_sys_setup_arch(void)
/* setup the board related information for the enet controllers */ /* setup the board related information for the enet controllers */
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC83xx_TSEC1); pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC83xx_TSEC1);
if (pdata) {
pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR;
pdata->interruptPHY = MPC83xx_IRQ_EXT1; pdata->interruptPHY = MPC83xx_IRQ_EXT1;
pdata->phyid = 0; pdata->phyid = 0;
/* fixup phy address */ /* fixup phy address */
pdata->phy_reg_addr += binfo->bi_immr_base; pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6); memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6);
}
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC83xx_TSEC2); pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC83xx_TSEC2);
if (pdata) {
pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR;
pdata->interruptPHY = MPC83xx_IRQ_EXT2; pdata->interruptPHY = MPC83xx_IRQ_EXT2;
pdata->phyid = 1; pdata->phyid = 1;
/* fixup phy address */ /* fixup phy address */
pdata->phy_reg_addr += binfo->bi_immr_base; pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6); memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6);
}
#ifdef CONFIG_BLK_DEV_INITRD #ifdef CONFIG_BLK_DEV_INITRD
if (initrd_start) if (initrd_start)
......
...@@ -92,21 +92,26 @@ mpc8540ads_setup_arch(void) ...@@ -92,21 +92,26 @@ mpc8540ads_setup_arch(void)
/* setup the board related information for the enet controllers */ /* setup the board related information for the enet controllers */
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1); pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1);
if (pdata) {
pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR;
pdata->interruptPHY = MPC85xx_IRQ_EXT5; pdata->interruptPHY = MPC85xx_IRQ_EXT5;
pdata->phyid = 0; pdata->phyid = 0;
/* fixup phy address */ /* fixup phy address */
pdata->phy_reg_addr += binfo->bi_immr_base; pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6); memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6);
}
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC2); pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC2);
if (pdata) {
pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR;
pdata->interruptPHY = MPC85xx_IRQ_EXT5; pdata->interruptPHY = MPC85xx_IRQ_EXT5;
pdata->phyid = 1; pdata->phyid = 1;
/* fixup phy address */ /* fixup phy address */
pdata->phy_reg_addr += binfo->bi_immr_base; pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6); memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6);
}
if (pdata) {
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_FEC); pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_FEC);
pdata->board_flags = 0; pdata->board_flags = 0;
pdata->interruptPHY = MPC85xx_IRQ_EXT5; pdata->interruptPHY = MPC85xx_IRQ_EXT5;
...@@ -114,6 +119,7 @@ mpc8540ads_setup_arch(void) ...@@ -114,6 +119,7 @@ mpc8540ads_setup_arch(void)
/* fixup phy address */ /* fixup phy address */
pdata->phy_reg_addr += binfo->bi_immr_base; pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enet2addr, 6); memcpy(pdata->mac_addr, binfo->bi_enet2addr, 6);
}
#ifdef CONFIG_BLK_DEV_INITRD #ifdef CONFIG_BLK_DEV_INITRD
if (initrd_start) if (initrd_start)
......
...@@ -90,20 +90,24 @@ mpc8560ads_setup_arch(void) ...@@ -90,20 +90,24 @@ mpc8560ads_setup_arch(void)
/* setup the board related information for the enet controllers */ /* setup the board related information for the enet controllers */
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1); pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1);
if (pdata) {
pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR;
pdata->interruptPHY = MPC85xx_IRQ_EXT5; pdata->interruptPHY = MPC85xx_IRQ_EXT5;
pdata->phyid = 0; pdata->phyid = 0;
/* fixup phy address */ /* fixup phy address */
pdata->phy_reg_addr += binfo->bi_immr_base; pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6); memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6);
}
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC2); pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC2);
if (pdata) {
pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR;
pdata->interruptPHY = MPC85xx_IRQ_EXT5; pdata->interruptPHY = MPC85xx_IRQ_EXT5;
pdata->phyid = 1; pdata->phyid = 1;
/* fixup phy address */ /* fixup phy address */
pdata->phy_reg_addr += binfo->bi_immr_base; pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6); memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6);
}
#ifdef CONFIG_BLK_DEV_INITRD #ifdef CONFIG_BLK_DEV_INITRD
if (initrd_start) if (initrd_start)
......
...@@ -129,20 +129,24 @@ sbc8560_setup_arch(void) ...@@ -129,20 +129,24 @@ sbc8560_setup_arch(void)
/* setup the board related information for the enet controllers */ /* setup the board related information for the enet controllers */
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1); pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1);
if (pdata) {
pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR;
pdata->interruptPHY = MPC85xx_IRQ_EXT6; pdata->interruptPHY = MPC85xx_IRQ_EXT6;
pdata->phyid = 25; pdata->phyid = 25;
/* fixup phy address */ /* fixup phy address */
pdata->phy_reg_addr += binfo->bi_immr_base; pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6); memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6);
}
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC2); pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC2);
if (pdata) {
pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR;
pdata->interruptPHY = MPC85xx_IRQ_EXT7; pdata->interruptPHY = MPC85xx_IRQ_EXT7;
pdata->phyid = 26; pdata->phyid = 26;
/* fixup phy address */ /* fixup phy address */
pdata->phy_reg_addr += binfo->bi_immr_base; pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6); memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6);
}
#ifdef CONFIG_BLK_DEV_INITRD #ifdef CONFIG_BLK_DEV_INITRD
if (initrd_start) if (initrd_start)
......
...@@ -122,19 +122,23 @@ gp3_setup_arch(void) ...@@ -122,19 +122,23 @@ gp3_setup_arch(void)
/* setup the board related information for the enet controllers */ /* setup the board related information for the enet controllers */
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1); pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC1);
/* pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; */ if (pdata) {
/* pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; */
pdata->interruptPHY = MPC85xx_IRQ_EXT5; pdata->interruptPHY = MPC85xx_IRQ_EXT5;
pdata->phyid = 2; pdata->phyid = 2;
pdata->phy_reg_addr += binfo->bi_immr_base; pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6); memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6);
}
pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC2); pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC85xx_TSEC2);
/* pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; */ if (pdata) {
/* pdata->board_flags = FSL_GIANFAR_BRD_HAS_PHY_INTR; */
pdata->interruptPHY = MPC85xx_IRQ_EXT5; pdata->interruptPHY = MPC85xx_IRQ_EXT5;
pdata->phyid = 4; pdata->phyid = 4;
/* fixup phy address */ /* fixup phy address */
pdata->phy_reg_addr += binfo->bi_immr_base; pdata->phy_reg_addr += binfo->bi_immr_base;
memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6); memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6);
}
#ifdef CONFIG_BLK_DEV_INITRD #ifdef CONFIG_BLK_DEV_INITRD
if (initrd_start) if (initrd_start)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment