mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-06 05:02:31 +00:00
rapidio: fix default routing initialization
Fix switch initialization to ensure that all switches have default routing disabled. This guarantees that no unexpected RapidIO packets arrive to the default port set by reset and there is no default routing destination until it is properly configured by software. This update also unifies handling of unmapped destinations by tsi57x, IDT Gen1 and IDT Gen2 switches. Signed-off-by: Alexandre Bounine <alexandre.bounine@idt.com> Cc: Kumar Gala <galak@kernel.crashing.org> Cc: Matt Porter <mporter@kernel.crashing.org> Cc: Li Yang <leoli@freescale.com> Cc: Thomas Moll <thomas.moll@sysgo.com> Cc: <stable@kernel.org> [2.6.37+] Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
a085963a27
commit
0bf2461fdd
@ -95,6 +95,9 @@ idtg2_route_add_entry(struct rio_mport *mport, u16 destid, u8 hopcount,
|
||||
else
|
||||
table++;
|
||||
|
||||
if (route_port == RIO_INVALID_ROUTE)
|
||||
route_port = IDT_DEFAULT_ROUTE;
|
||||
|
||||
rio_mport_write_config_32(mport, destid, hopcount,
|
||||
LOCAL_RTE_CONF_DESTID_SEL, table);
|
||||
|
||||
@ -411,6 +414,12 @@ static int idtg2_switch_init(struct rio_dev *rdev, int do_enum)
|
||||
rdev->rswitch->em_handle = idtg2_em_handler;
|
||||
rdev->rswitch->sw_sysfs = idtg2_sysfs;
|
||||
|
||||
if (do_enum) {
|
||||
/* Ensure that default routing is disabled on startup */
|
||||
rio_write_config_32(rdev,
|
||||
RIO_STD_RTE_DEFAULT_PORT, IDT_NO_ROUTE);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -26,6 +26,9 @@ idtcps_route_add_entry(struct rio_mport *mport, u16 destid, u8 hopcount,
|
||||
{
|
||||
u32 result;
|
||||
|
||||
if (route_port == RIO_INVALID_ROUTE)
|
||||
route_port = CPS_DEFAULT_ROUTE;
|
||||
|
||||
if (table == RIO_GLOBAL_TABLE) {
|
||||
rio_mport_write_config_32(mport, destid, hopcount,
|
||||
RIO_STD_RTE_CONF_DESTID_SEL_CSR, route_destid);
|
||||
@ -130,6 +133,9 @@ static int idtcps_switch_init(struct rio_dev *rdev, int do_enum)
|
||||
/* set TVAL = ~50us */
|
||||
rio_write_config_32(rdev,
|
||||
rdev->phys_efptr + RIO_PORT_LINKTO_CTL_CSR, 0x8e << 8);
|
||||
/* Ensure that default routing is disabled on startup */
|
||||
rio_write_config_32(rdev,
|
||||
RIO_STD_RTE_DEFAULT_PORT, CPS_NO_ROUTE);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -303,6 +303,12 @@ static int tsi57x_switch_init(struct rio_dev *rdev, int do_enum)
|
||||
rdev->rswitch->em_init = tsi57x_em_init;
|
||||
rdev->rswitch->em_handle = tsi57x_em_handler;
|
||||
|
||||
if (do_enum) {
|
||||
/* Ensure that default routing is disabled on startup */
|
||||
rio_write_config_32(rdev, RIO_STD_RTE_DEFAULT_PORT,
|
||||
RIO_INVALID_ROUTE);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user